<?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>90375</bug_id>
          
          <creation_ts>2012-07-02 05:35:08 -0700</creation_ts>
          <short_desc>Parallel image decoders</short_desc>
          <delta_ts>2026-03-03 14:28:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>155322</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>90584</dependson>
    
    <dependson>90935</dependson>
    
    <dependson>91172</dependson>
    
    <dependson>91203</dependson>
    
    <dependson>92470</dependson>
    
    <dependson>93464</dependson>
    
    <dependson>93465</dependson>
    
    <dependson>93467</dependson>
    
    <dependson>93590</dependson>
    
    <dependson>94190</dependson>
    
    <dependson>90443</dependson>
    
    <dependson>90721</dependson>
    
    <dependson>90755</dependson>
    
    <dependson>90756</dependson>
    
    <dependson>90757</dependson>
    
    <dependson>90758</dependson>
    
    <dependson>90780</dependson>
    
    <dependson>90869</dependson>
    
    <dependson>91075</dependson>
    
    <dependson>93466</dependson>
          <blocked>93171</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kwang Yul Seo">skyul</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>ararunprasad</cc>
    
    <cc>arurajku</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>choco</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dev</cc>
    
    <cc>dglazkov</cc>
    
    <cc>d.nomiyama</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>dongseong.hwang</cc>
    
    <cc>eric</cc>
    
    <cc>galpeter</cc>
    
    <cc>gram</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hclam</cc>
    
    <cc>huangxueqing</cc>
    
    <cc>joone</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>levin+threading</cc>
    
    <cc>loic.yhuel</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>mrowe</cc>
    
    <cc>nick</cc>
    
    <cc>noam</cc>
    
    <cc>noel.gordon</cc>
    
    <cc>pkasting</cc>
    
    <cc>psolanki</cc>
    
    <cc>rafael.lobo</cc>
    
    <cc>rakuco</cc>
    
    <cc>rdanailova6</cc>
    
    <cc>s.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>syoichi</cc>
    
    <cc>tomhudson</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit.arunp</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yong.li.webkit</cc>
    
    <cc>yurys</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>661414</commentid>
    <comment_count>0</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-02 05:35:08 -0700</bug_when>
    <thetext>This is an umbrella bug for our new parallel image decoders. Our team at Company 100 has worked on parallel image decoders and resolved several issues addressed in Bug 69515.

About our implementation:
- We parallelize WebCore&apos;s image decoders. Currently, only CG does not use WebCore&apos;s image decoders so many ports can get performance boosts from this work.
- We used a pool of worker threads (n = number of cores) instead of a single dedicated worker, so that we can decode multiple images simultaneously.
- We support incremental image decoding. It menas we can render images while images are being decoded.
- We avoid the locking overhead as much as possible by copying raw data to and from the decoder thread.
- If we decode image in the main thread (e.g., when the image size is small), we avoid the locking overhead entirely.
- We passed all the layout tests. We have no regression regarding image decoding.


We selectively use parallel image decoders:
- We chose to use parallel image decoders only when rendering HTML image, SVG image, CSS box model background, border and mask. Note that rendering HTML image element in canvas does not use parallel image decoders. Because some of image decoding in WebCore are inherently synchronous, it was not easy to paralleize all image decoding use cases.
- We’re doing the image decoding in the main thread until we have determined the size (w, h) of the image and then we choose to work either in the main thread or in the worker thread. We work in the main thread if the image size is smaller than 262144px (512x512) because the performance is not so good when the image size is small. The current limit is arbitrary, so we need to adjust the limit with more extensive experiments.
- ICO and GIF formats are not supported. These formats support multiple frames, which complciates the implementation of parallel image decoders. Because ICO and GIF images are usually very small, we don&apos;t get much performacne gain anyway by supporting these formats.


Results:

* Test Case: DOMContentLoaded (5 times)
 * http://ie.microsoft.com/testdrive/HTML5/DOMContentLoaded/Default.html
 * Reference: 850 ms (stddev: 97 ms)
 * Threaded: 817 ms (stddev: 90 ms)

 * Reference (page cached): 233 ms (stddev 0ms)
 * Threaded (page cached): 146 (stddev 4ms)

* Test Case: 35 Images (5 times)
 * http://www.dorothybrowser.com/test/webkitTest/imgdecode/bgimage-png/test.html
 * Reference: 3759 ms (stddev: 229 ms)
 * Threaded: 3652 ms (stddev: 117 ms)

 * Reference (page cached): 1204 ms (stddev: 11ms)
 * Threaded (page cached): 58 ms (stddev: 48ms)

We will update the result with Methanol test used in Bug 69515.

Dongsung Huang who is the primary of author of our parallel image decoder will upload patches for review in a couple of days once we finish our internal review process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661420</commentid>
    <comment_count>1</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-02 05:46:08 -0700</bug_when>
    <thetext>All the above results are measured on a 6-core Xeon machine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663844</commentid>
    <comment_count>2</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-05 19:40:54 -0700</bug_when>
    <thetext>Methanol test (Alexa Top 25):
http://www.dorothybrowser.com/test/methanol/fire.html

Reference:
- Summary: 15417.1 ms (15.530825250726393%) 

Threaded:
- Summary: 15148.2 ms (11.760063727481292%)

It seems our implementation does not show massive slowdown appeared in Bug 69515.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664003</commentid>
    <comment_count>3</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-06 04:40:21 -0700</bug_when>
    <thetext>Please refer to the following document for the detailed design and implementation of our parallel image decoders:

- Parallel Image Decoding Design and Implementation
https://docs.google.com/document/pub?id=12gf7MhNHfupeR3GdRF-h2Vzg86viCbwXq8_JByHKlg0


We are cleaning up the remaining patches for review. They will be available soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664709</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-07-09 00:51:43 -0700</bug_when>
    <thetext>Has this work been discussed on webkit-dev? It&apos;s not good form to post a number of patches with r? flag otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664715</commentid>
    <comment_count>5</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-09 01:06:14 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Has this work been discussed on webkit-dev? It&apos;s not good form to post a number of patches with r? flag otherwise.

Sorry. I will send an email to webkit-dev now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665182</commentid>
    <comment_count>6</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-07-09 14:31:19 -0700</bug_when>
    <thetext>The results looks weird:
 * Reference (page cached): 1204 ms (stddev: 11ms)
 * Threaded (page cached): 58 ms (stddev: 48ms)
How many core do you have on the test machine that you have a 20x performance boost?

 * Reference: 3759 ms (stddev: 229 ms)
 * Threaded: 3652 ms (stddev: 117 ms)
Why is the gain so small in this case?

I don&apos;t know much about Methanol but I have seen ridiculous claim coming from it before so I would prefer if you have some analysis of the results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665271</commentid>
    <comment_count>7</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-09 16:06:56 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; The results looks weird:
&gt;  * Reference (page cached): 1204 ms (stddev: 11ms)
&gt;  * Threaded (page cached): 58 ms (stddev: 48ms)
&gt; How many core do you have on the test machine that you have a 20x performance boost?

I realized that the test result here is a bit misleading because we measured the page loading time, not the actual image decoding time. So even after page loading is finished, it is still possible that many images are not actually decoded.

I will measure time to the first paint instead as Maciej suggested in webkit-dev mailing list.

&gt; 
&gt;  * Reference: 3759 ms (stddev: 229 ms)
&gt;  * Threaded: 3652 ms (stddev: 117 ms)
&gt; Why is the gain so small in this case?

This test case contains 35 big images so it spends most of time in fetching data from network if the images are not already in the cache. Because WebKit has plenty of spare time to decode, it is hard improve page loading time by just speeding up image decoders.

&gt; 
&gt; I don&apos;t know much about Methanol but I have seen ridiculous claim coming from it before so I would prefer if you have some analysis of the results.

Methanol is a kind of page load test. We locally cached Alexa Top 25 sites. Methanol automatically loads each page 10 times and measures page loading time. 

Because most of these sites do not have big images, parallel image decoders are seldom used. We wanted to make sure that there is no performance regression in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665573</commentid>
    <comment_count>8</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2012-07-10 01:52:09 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I don&apos;t know much about Methanol but I have seen ridiculous claim coming from it before so I would prefer if you have some analysis of the results.

I think it was not the problem of Methanol, rather than misuse of it or something else. You can check Methanol here: http://gitorious.org/methanol It&apos;s not dark magic, just a JS like we have in performance tests. 
Please don&apos;t be so negative about Methanol. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665627</commentid>
    <comment_count>9</comment_count>
      <attachid>151429</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-10 03:34:02 -0700</bug_when>
    <thetext>Created attachment 151429
Parallel image decoders (not for review)

Parallel image decoders code for preview. (not for review). Currently, it builds only on WebKit Qt Port (both Qt4 and Qt5).

I will upload the patch again once we fix build for other ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665735</commentid>
    <comment_count>10</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-07-10 07:10:49 -0700</bug_when>
    <thetext>One of the difficulties of parallel image decoding is it is not always safe to call the observers in main thread, because that can trigger JS execution.

Please take a look at PageGroupLoadDeferrer and relevant code. For example, when a JS modal dialog is being showed, no JS event is supposed to be dispatched.

The other side of this problem is that one image source can have different observers from different pages, so it cannot get a pointer to a page. One solution may be making the load defer state globally accessible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665741</commentid>
    <comment_count>11</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-07-10 07:17:43 -0700</bug_when>
    <thetext>I would pre-&quot;r-&quot; until the page deferring issue is addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666403</commentid>
    <comment_count>12</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-10 23:31:13 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; One of the difficulties of parallel image decoding is it is not always safe to call the observers in main thread, because that can trigger JS execution.
&gt; 
&gt; Please take a look at PageGroupLoadDeferrer and relevant code. For example, when a JS modal dialog is being showed, no JS event is supposed to be dispatched.
&gt; 
&gt; The other side of this problem is that one image source can have different observers from different pages, so it cannot get a pointer to a page. One solution may be making the load defer state globally accessible.

Thanks for the comment. We will investigate this issue!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666430</commentid>
    <comment_count>13</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-11 00:13:31 -0700</bug_when>
    <thetext>You can check out the updated test results in the following URL:

https://docs.google.com/spreadsheet/pub?key=0Ar2smwimcenMdGpnTEw2clZjSTNkbXNFNFM5dkYyRGc&amp;output=html

A few notes:
- Adjust the threshold from 512x512 to 300x300
- Measure first painting time to make sure all the images are decoded.
- Add flickr.com: It is hard to measure page loading time (or first paint time) accurately because page loading time varies a lot due to dynamic resource requests of scripts. So we locally mirrored the site and removed scripts. 

As mentioned above, parallel image decoders can&apos;t improve page loading time (or first paint time) dramatically if images are not cached, because it takes a long time to fetch large images and image decoding can be performed in the meantime (interleaved with loading). If images are already cached, then parallel image decoders shine! 

However, there is still limitation. Even image heavy sites do not show all the images at once. To see all the images, we need to scroll down many pages. Because WebKit decodes images only when they need to be painted, not all the images are decoded in page loading.

Fortunately, parallel image decoders seem to increase scrolling responsiveness because images are decoded asynchronously in the background while the main thread repaints. I don&apos;t have a way to measure this in numbers, but we could feel this in image heavy sites such as http://kiru.kr/kiru/html/singlelongopst.htm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666510</commentid>
    <comment_count>14</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2012-07-11 01:33:12 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; You can check out the updated test results in the following URL:
&gt; 
&gt; https://docs.google.com/spreadsheet/pub?key=0Ar2smwimcenMdGpnTEw2clZjSTNkbXNFNFM5dkYyRGc&amp;output=html

The results look promising!

&gt; A few notes:
&gt; - Adjust the threshold from 512x512 to 300x300

This sounds cool, because I made earlier an investigation about used image sizes based on the first alexa top150 sites and I can say that the most images have lower than 512*512 dimension: https://bugs.webkit.org/show_bug.cgi?id=71555#c7

&gt; - Measure first painting time to make sure all the images are decoded.

How do you measure first painting time?

&gt; However, there is still limitation. Even image heavy sites do not show all the images at once. To see all the images, we need to scroll down many pages. Because WebKit decodes images only when they need to be painted, not all the images are decoded in page loading.

I think it&apos;s normal behavior, I see this as an advantage. If we are decoding all images including the never shown ones then we would make extra useless cpu cost on the worker thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666527</commentid>
    <comment_count>15</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-11 01:58:35 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; You can check out the updated test results in the following URL:
&gt; &gt; 
&gt; &gt; https://docs.google.com/spreadsheet/pub?key=0Ar2smwimcenMdGpnTEw2clZjSTNkbXNFNFM5dkYyRGc&amp;output=html
&gt; 
&gt; The results look promising!
&gt; 
&gt; &gt; A few notes:
&gt; &gt; - Adjust the threshold from 512x512 to 300x300
&gt; 
&gt; This sounds cool, because I made earlier an investigation about used image sizes based on the first alexa top150 sites and I can say that the most images have lower than 512*512 dimension: https://bugs.webkit.org/show_bug.cgi?id=71555#c7

This is really good information. Thanks. We will experiment more with various thresholds.

&gt; 
&gt; &gt; - Measure first painting time to make sure all the images are decoded.
&gt; 
&gt; How do you measure first painting time?

We measure the last call to Image::draw. This ensures that all the images inside the initial viewport are decoded and painted.

&gt; 
&gt; &gt; However, there is still limitation. Even image heavy sites do not show all the images at once. To see all the images, we need to scroll down many pages. Because WebKit decodes images only when they need to be painted, not all the images are decoded in page loading.
&gt; 
&gt; I think it&apos;s normal behavior, I see this as an advantage. If we are decoding all images including the never shown ones then we would make extra useless cpu cost on the worker thread.

I do like the current lazy behavior of WebKit image decoding. I just wanted to mention that we also need to consider images outside the initial viewport because they are decoded by parallel image decoders when we scroll. These images are also decoded faster thanks to parallel image decoders!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667524</commentid>
    <comment_count>16</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-07-12 01:46:45 -0700</bug_when>
    <thetext>(In reply to comment #13)

&gt; As mentioned above, parallel image decoders can&apos;t improve page loading time (or first paint time) dramatically if images are not cached, because it takes a long time to fetch large images and image decoding can be performed in the meantime (interleaved with loading). If images are already cached, then parallel image decoders shine! 

The abstract of your design document suggests you consistently outperform sequential image decoding.  Yet small images are excluded from threaded decodes for some reason, so perhaps that means that most web pages would be excluded?  Another result is that large image decodes are network bound, and also see no benefit.  I don&apos;t see how you can &quot;consistently outperform&quot; the sequential image decoders.  Perhaps the improvement is marginal at best?  It state that the cached image case &quot;shines&quot; (I don&apos;t know what that means) but it is the only case that benefits in some way.  Why should I care about that case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667562</commentid>
    <comment_count>17</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-12 02:43:23 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #13)
&gt; 
&gt; &gt; As mentioned above, parallel image decoders can&apos;t improve page loading time (or first paint time) dramatically if images are not cached, because it takes a long time to fetch large images and image decoding can be performed in the meantime (interleaved with loading). If images are already cached, then parallel image decoders shine! 
&gt; 
&gt; The abstract of your design document suggests you consistently outperform sequential image decoding.  Yet small images are excluded from threaded decodes for some reason, so perhaps that means that most web pages would be excluded?  

Yes, small images are slow due to synchronization overhead. We are still experimenting with various threshold values. We&apos;ve just found that the break even point is near 128x128. According to Zoltan&apos;s survey https://bugs.webkit.org/show_bug.cgi?id=71555#c7, it looks many sites can get performance benefits from parallel image decoders. Of course, the improvement is marginal near 128x128.

&gt;Another result is that large image decodes are network bound, and also see no benefit.  I don&apos;t see how you can &quot;consistently outperform&quot; the sequential image decoders.  Perhaps the improvement is marginal at best?  

Sadly, yes. However, I see other use cases. What about Offline Web Applications or Widgets? Because images are locally stored, parallel image decoders can speed up initial loading time.

By &quot;consistently outperform&quot;, I meant parallel image decoders are used only when they can do better based on various criteria. Otherwise, serial image decoders are used instead with no switching overhead.

&gt;It state that the cached image case &quot;shines&quot; (I don&apos;t know what that means) but it is the only case that benefits in some way.  Why should I care about that case?

We do understand that parallelization usually introduces massive code changes with only marginal performance improvements. Our test results show that parallel image decoders are faster in some cases, and at least not slower in most cases.

We are trying to further improve performance and reduce the complexity. So I hope we could discuss this in a more positive direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668665</commentid>
    <comment_count>18</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-07-13 00:12:37 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; One of the difficulties of parallel image decoding is it is not always safe to call the observers in main thread, because that can trigger JS execution.
&gt; 
&gt; Please take a look at PageGroupLoadDeferrer and relevant code. For example, when a JS modal dialog is being showed, no JS event is supposed to be dispatched.
&gt; 
&gt; The other side of this problem is that one image source can have different observers from different pages, so it cannot get a pointer to a page. One solution may be making the load defer state globally accessible.

Thank you for good information.

You said that &quot;it is not always safe to call the observers in main thread&quot;.
By &quot;to call the observers&quot;, do you mean CachedImageClient::imageChanged?
If so, could you explain where imageChanged triggers JS execution? I can&apos;t find the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669004</commentid>
    <comment_count>19</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-07-13 07:27:23 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #10)
&gt; &gt; One of the difficulties of parallel image decoding is it is not always safe to call the observers in main thread, because that can trigger JS execution.
&gt; &gt; 
&gt; &gt; Please take a look at PageGroupLoadDeferrer and relevant code. For example, when a JS modal dialog is being showed, no JS event is supposed to be dispatched.
&gt; &gt; 
&gt; &gt; The other side of this problem is that one image source can have different observers from different pages, so it cannot get a pointer to a page. One solution may be making the load defer state globally accessible.
&gt; 
&gt; Thank you for good information.
&gt; 
&gt; You said that &quot;it is not always safe to call the observers in main thread&quot;.
&gt; By &quot;to call the observers&quot;, do you mean CachedImageClient::imageChanged?
&gt; If so, could you explain where imageChanged triggers JS execution? I can&apos;t find the code.

Never mind for this deferrer thing. I got that impression because CachedResourceClient::notifiyFinished() can trigger a JS event. But it doesn&apos;t seem to be an issue with you guys&apos; solution, as you don&apos;t hack the data delivery path (CachedImage::data() or Image::setData()). Sorry for the false alarm. Go ahead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671715</commentid>
    <comment_count>20</comment_count>
      <attachid>152865</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-17 16:20:41 -0700</bug_when>
    <thetext>Created attachment 152865
Parallel image decoders (not for review)

Rebased to the latest revision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671894</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-17 19:34:58 -0700</bug_when>
    <thetext>Attachment 152865 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/GNUmak...&quot; exit_code: 1
Source/WebCore/platform/graphics/ImageSource.cpp:289:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 1 in 77 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671902</commentid>
    <comment_count>22</comment_count>
      <attachid>152865</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-17 19:44:47 -0700</bug_when>
    <thetext>Comment on attachment 152865
Parallel image decoders (not for review)

Attachment 152865 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13280329</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671908</commentid>
    <comment_count>23</comment_count>
      <attachid>152865</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-17 19:49:01 -0700</bug_when>
    <thetext>Comment on attachment 152865
Parallel image decoders (not for review)

Attachment 152865 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13280331</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671910</commentid>
    <comment_count>24</comment_count>
      <attachid>152865</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-17 19:55:00 -0700</bug_when>
    <thetext>Comment on attachment 152865
Parallel image decoders (not for review)

Attachment 152865 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13274340</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671950</commentid>
    <comment_count>25</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-07-17 21:17:58 -0700</bug_when>
    <thetext>Thanks for sharing the patch.

As mentioned before we have the same goal to allow the notion of asynchronous image decoding. Under the hood it can be parallel image decoding like your patch does, or in the Chromium case we&apos;ll defer the image decoding for a later time. We have a common goal here.

I have some questions I would appreciate very much if you can help me understand better your patch.

If I understand your code correctly the use of RetainedModeBitmapImage is to detect drawing, metadata calls while image decoding can be done asynchronously, by using a counter and later call to ensureFrameIsCached(), requestFrameAtIndex() will try to parallel image decoding.

One part I have problem understanding is when is an image parallel decoded? toRetainedModeBitmapImageIfPossible() seems to be called only when an BitmapImage is painted to a GraphicsContext, yet method call to BitmapImage::frameDurationAtIndex() and other methods in BitmapImage also seems to trigger parallel image decoding.

Q1: Will BitmapImage::frameDurationAtIndex(), orientationAtIndex() and these metadata friends trigger parallel image decoding?
Q2: Are these code paths currently used? Or do you expect all parallel image to be triggered by drawing a BitmapImage into a GraphicsContext?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671961</commentid>
    <comment_count>26</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-17 21:53:10 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; One part I have problem understanding is when is an image parallel decoded? toRetainedModeBitmapImageIfPossible() seems to be called only when an BitmapImage is painted to a GraphicsContext, yet method call to BitmapImage::frameDurationAtIndex() and other methods in BitmapImage also seems to trigger parallel image decoding.
&gt; 
&gt; Q1: Will BitmapImage::frameDurationAtIndex(), orientationAtIndex() and these metadata friends trigger parallel image decoding?

Yes, all metadata friends trigger parallel image decoding if they are used by RetainedModeBitmapImage. For example, RenderLayerBacking checks if the current frame is completed as in the following:

1083     // We have to wait until the image is fully decoded before setting it on the layer.
1084     if (image-&gt;isBitmapImage() &amp;&amp; !toRetainedModeBitmapImage(image)-&gt;currentFrameIsComplete())
1085         return;

This can trigger parallel image decoding.

&gt; Q2: Are these code paths currently used? Or do you expect all parallel image to be triggered by drawing a BitmapImage into a GraphicsContext?

Yes, as you can see in the example above. However, it seems BitmapImage::frameDurationAtIndex() and BitmapImage::orientationAtIndex() are not used to trigger parallel image decoding in the current code paths.

If you wrap a bitmap with RetainedModeBitmapImage, it can trigger parallel image decoding. While parallel image decoding is in progress, if other code paths call BitmapImage::frameDurationAtIndex() or other metadata friends without wrapping the bitmap with RetainedModeBitmapImage, parallel image decoding is cancelled and image is decoded serially.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671980</commentid>
    <comment_count>27</comment_count>
      <attachid>151429</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-07-17 22:34:54 -0700</bug_when>
    <thetext>Comment on attachment 151429
Parallel image decoders (not for review)

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

&gt; Source/WebCore/platform/graphics/BitmapImage.cpp:272
&gt; +        m_isCachingFrame = true;

Would appreciate if you can explain more about the use of this flag. I can&apos;t find other use of this member variable outside of this method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671987</commentid>
    <comment_count>28</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-17 22:38:48 -0700</bug_when>
    <thetext>(In reply to comment #26)

It seems RenderingLayerBacking is the only place where one of metadata friends is used to trigger parallel image decoding in the current code paths.

We&apos;ve realized that we don&apos;t need to use parallel image decoding for these metadata friends.

So we will change our implementation to use parallel image decoders only when we need to paint images.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671995</commentid>
    <comment_count>29</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-17 22:46:27 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 151429 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=151429&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/BitmapImage.cpp:272
&gt; &gt; +        m_isCachingFrame = true;
&gt; 
&gt; Would appreciate if you can explain more about the use of this flag. I can&apos;t find other use of this member variable outside of this method.

After we changed the condition for needToCache as in the following:

270     bool needToCache = index &gt;= m_frames.size() || !m_frames[index].m_frame || !m_frames[index].m_isComplete;

cacheFrame(index) in BitmapImage::ensureFrameIsCached() now can recursively call BitmapImage::ensureFrameIsCached(). For example, 

BitmapImage::didReceiveFrameAtIndex
-&gt; BitmapImage::checkForSolidColor (ImageQt.cpp)
-&gt; BitmapImage::frameAtIndex
-&gt; BitmapImage::ensureFrameIsCached

So we added m_isCachingFrame as a guard to return in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672598</commentid>
    <comment_count>30</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-07-18 11:54:19 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #26)
&gt; 
&gt; It seems RenderingLayerBacking is the only place where one of metadata friends is used to trigger parallel image decoding in the current code paths.
&gt; 
&gt; We&apos;ve realized that we don&apos;t need to use parallel image decoding for these metadata friends.
&gt; 
&gt; So we will change our implementation to use parallel image decoders only when we need to paint images.

That makes sense. My observation of the code is that those metadata functions are supposed to return default values when a frame is not ready (being not downloaded) as of todays, so I think they probably don&apos;t need any handling.

If the starting point for parallel image decoding is just when painting a BitmapImage to GraphicsContext, I wonder if it will make the intention clearer something like:

drawImage(xxx, bool prepareImageAsynchronouslyIfPossible = false);

Under the hood GraphicsContext all your changes including ParallelImageDecoder remains the same. My point is this eliminates using a type (RetainedModeBitmapImage) to denote the desired behavior of image decoding caused by painting, instead have this built-in to the painting methods.

One other tiny performance benefit of this is when GraphicsContext detects the frame is not ready and skip painting an empty frame.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672922</commentid>
    <comment_count>31</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-18 16:12:56 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #28)
&gt; &gt; (In reply to comment #26)
&gt; &gt; 
&gt; &gt; It seems RenderingLayerBacking is the only place where one of metadata friends is used to trigger parallel image decoding in the current code paths.
&gt; &gt; 
&gt; &gt; We&apos;ve realized that we don&apos;t need to use parallel image decoding for these metadata friends.
&gt; &gt; 
&gt; &gt; So we will change our implementation to use parallel image decoders only when we need to paint images.
&gt; 
&gt; That makes sense. My observation of the code is that those metadata functions are supposed to return default values when a frame is not ready (being not downloaded) as of todays, so I think they probably don&apos;t need any handling.
&gt; 
&gt; If the starting point for parallel image decoding is just when painting a BitmapImage to GraphicsContext, I wonder if it will make the intention clearer something like:
&gt; 
&gt; drawImage(xxx, bool prepareImageAsynchronouslyIfPossible = false);
&gt; 
&gt; Under the hood GraphicsContext all your changes including ParallelImageDecoder remains the same. My point is this eliminates using a type (RetainedModeBitmapImage) to denote the desired behavior of image decoding caused by painting, instead have this built-in to the painting methods.
&gt; 
&gt; One other tiny performance benefit of this is when GraphicsContext detects the frame is not ready and skip painting an empty frame.
&gt; 
&gt; What do you think?

That depends on how we refactor RenderingLayerBacking. In this case, we retrieve a NativeImagePtr from RetainedModeBitmapImage. So we can&apos;t simply delegate the decision to GraphicsContext.

I will let you know once we decide how we refactor RenderLayerBacking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673069</commentid>
    <comment_count>32</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-07-18 18:55:49 -0700</bug_when>
    <thetext>&gt; That depends on how we refactor RenderingLayerBacking. In this case, we retrieve a NativeImagePtr from RetainedModeBitmapImage. So we can&apos;t simply delegate the decision to GraphicsContext.
&gt; 
&gt; I will let you know once we decide how we refactor RenderLayerBacking.

ah! That&apos;s right I forgot RenderLayerBacking. RenderLayerBacking does present an interesting case. In your code I understand now these two operations does actually trigger parallel decoding:

RetainedModeBitmapImage::currentFrameIsComplete() and
RetainedModeBitmapImage::nativeImageForCurrentFrame()

Without this extra type calling nativeImageForCurrentFrame() would cause a synchronous decoding for RenderLayerBacking.

Just a thought here, actually adding the notion of asynchronous decoding to BitmapImage, e.g.

BitmapImage::prepareCurrentFrameAsynchronouslyIfPossible()
BitmapImage::nativeImageForCurrentFrame(); // returns 0 if async frame requested but not ready
BitmapImage::currentFrameIsComplete(); // just a getter to see if current frame is ready

prepareCurrentFrameAsynchronouslyIfPossible() is similar to your retained mode counter but have it built-in to BitmapImage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673296</commentid>
    <comment_count>33</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-19 01:30:31 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; ah! That&apos;s right I forgot RenderLayerBacking. RenderLayerBacking does present an interesting case. In your code I understand now these two operations does actually trigger parallel decoding:
&gt; 
&gt; RetainedModeBitmapImage::currentFrameIsComplete() and
&gt; RetainedModeBitmapImage::nativeImageForCurrentFrame()
&gt; 
&gt; Without this extra type calling nativeImageForCurrentFrame() would cause a synchronous decoding for RenderLayerBacking.
&gt; 
&gt; Just a thought here, actually adding the notion of asynchronous decoding to BitmapImage, e.g.
&gt; 
&gt; BitmapImage::prepareCurrentFrameAsynchronouslyIfPossible()
&gt; BitmapImage::nativeImageForCurrentFrame(); // returns 0 if async frame requested but not ready
&gt; BitmapImage::currentFrameIsComplete(); // just a getter to see if current frame is ready
&gt; 
&gt; prepareCurrentFrameAsynchronouslyIfPossible() is similar to your retained mode counter but have it built-in to BitmapImage.

Thanks. Your idea sounds good. However, it seems we have a few problems.

In addition to the methods you mentioned, currently the following metadata query methods of BitmapImage trigger (parallel) image decoding:

float frameDurationAtIndex(size_t);
bool frameHasAlphaAtIndex(size_t);
bool frameIsCompleteAtIndex(size_t);
ImageOrientation orientationAtIndex(size_t) const;

If you call one of these methods without wrapping the bitmap with RetainedModeBitmapImage, it cancels on-going parallel image decoding and start decoding again serially. If a client wants to use parallel image decoding, it must use these metadata methods very carefully.


We do want only NativeImagePtr createFrameAtIndex(size_t) to trigger image decoding, so we checked if it is possible to get the metadata without full decoding as we do with isSizeAvailable.

1) float frameDurationAtIndex(size_t)
This is available only when GIF decoding is done. We can&apos;t get the duration simply parsing the header as in the case of size.

2) bool frameIsCompleteAtIndex(size_t)
This represents the current status of image decoding. (I am not sure if we can call this as metadata.) If we return this without decoding, it can return false even when allDataReceived == true.

3) ImageOrientation orientationAtIndex(size_t) const
ImageSource always returns DefaultImageOrientation. So this is available before decoding.

4) bool frameHasAlphaAtIndex(size_t)
This is most difficult to know before decoding. We need to decode at least one row. As ImageDecoder::isSizeAvaliable() just decodes the header and lets us know the size, we can add ImageDecoder::frameHasAlphaAtIndex(size_t) and decode one row. However, this is still problematic.

ImageSource unconditionally sets alpha to true before decoding as in the following:

bool ImageSource::frameHasAlphaAtIndex(ImageFrame* buffer)
{
    // When a frame has not finished decoding, always mark it as having alpha.
    // Ports that check the result of this function to determine their
    // compositing op need this in order to not draw the undecoded portion as
    // black.
    // TODO: Perhaps we should ensure that each individual decoder returns true
    // in this case.
    return !frameIsCompleteAtIndex(buffer) || buffer-&gt;hasAlpha();
}

If ImageSource::frameHasAlphaAtIndex(size_t) does not trigger full image decoding, frameHasAlphaAtIndex can&apos;t know if decoding is complete or not. If GraphicsContext3D uses BitmapImage as in the following, it is problematic.

Assumption: allDataReceived == true.

bool hasAlpha = image-&gt;currentFrameHasAlpha(); // &lt;- may return true.
// do something with hasAlpha.
image-&gt;nativeImagePtr(); // &lt;- image&apos;s actual alpha can be false.



As you suggested, we can implement these metadata friends as simple getters which do not trigger image decoding, but then we must be very careful in using these getters.

That&apos;s the reason why we introduced RetainedModeBitmapImage class. If a client wants to use BitmapImage asynchronously, we can simply wrap it with RetainedModeBitmapImage and everything is taken care of. We know this is not the best solution, but we couldn&apos;t find a better solution.

Do you have any idea on how we can make these metadata queries simple getters?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674100</commentid>
    <comment_count>34</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-07-19 20:54:54 -0700</bug_when>
    <thetext>&gt; As you suggested, we can implement these metadata friends as simple getters which do not trigger image decoding, but then we must be very careful in using these getters.
&gt; 
&gt; That&apos;s the reason why we introduced RetainedModeBitmapImage class. If a client wants to use BitmapImage asynchronously, we can simply wrap it with RetainedModeBitmapImage and everything is taken care of. We know this is not the best solution, but we couldn&apos;t find a better solution.
&gt; 
&gt; Do you have any idea on how we can make these metadata queries simple getters?

Thanks for showing me the thoughts that went into making this decision, this makes much sense to me now. Having review the material I agree this seems like the best possible solution, without having to refactor all usage of BitmapImage.

My gut feeling still tells me by going though a hard refactoring we can eventually remove the need of RetainedModeBitmapImage. However I would agree this is a very good intermediate step.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674176</commentid>
    <comment_count>35</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2012-07-19 22:35:28 -0700</bug_when>
    <thetext>I know this is tangential, but while you&apos;re pondering the image decoding pipeline and any eventual refactorings, keep in mind also that it would be nice someday to be able to tell the image decoders to decode directly to a scaled-down output buffer (for large images that are not displayed at 1:1 on the page, a surprisingly common case).  We&apos;ve never had this because it requires plumbing the desired output size over to the decoders and then making decisions about how to cache the results (do we decode full-size, downsample, and cache both? Or for some image formats can we efficiently decode directly to a scaled-down buffer, cache that, but retain sufficient metadata to correctly handle later requests for other sizes?  etc.)

I don&apos;t want to distract from the goal at hand here -- just figuring this would be a good audience to mention some of these concerns to :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674213</commentid>
    <comment_count>36</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-07-19 23:16:02 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; I know this is tangential, but while you&apos;re pondering the image decoding pipeline and any eventual refactorings, keep in mind also that it would be nice someday to be able to tell the image decoders to decode directly to a scaled-down output buffer (for large images that are not displayed at 1:1 on the page, a surprisingly common case).  We&apos;ve never had this because it requires plumbing the desired output size over to the decoders and then making decisions about how to cache the results (do we decode full-size, downsample, and cache both? Or for some image formats can we efficiently decode directly to a scaled-down buffer, cache that, but retain sufficient metadata to correctly handle later requests for other sizes?  etc.)
&gt; 
&gt; I don&apos;t want to distract from the goal at hand here -- just figuring this would be a good audience to mention some of these concerns to :)

It is great that the vision of optimizing downscaled image decoding pipeline is shared by someone else. In fact this is what got me started on this work. I am very happy to discuss this matter with the right audience on a separate thread. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675397</commentid>
    <comment_count>37</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-07-22 19:11:21 -0700</bug_when>
    <thetext>I am in the process of going though all places that uses BitmapImage synchronously, I would like to continue the discuss of asynchronous image decoding interface with a concrete patch we draft, please be patient for our results. I really appreciate the discussion we had and it certainly helped us to understand the problem better.

One separate issue is about enabling this parallel image decoding feature. Is there a way we can disable it and make sure that code path for serial image decoding won&apos;t be affected with your change?

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675543</commentid>
    <comment_count>38</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-23 01:43:42 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; My gut feeling still tells me by going though a hard refactoring we can eventually remove the need of RetainedModeBitmapImage. However I would agree this is a very good intermediate step.

Yes, we need to get rid of RetainedModeBitmapImage eventually by refactoring all usage of BitmapImage. In the meantime, it is a necessary evil.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675551</commentid>
    <comment_count>39</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-23 01:59:40 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; One separate issue is about enabling this parallel image decoding feature. Is there a way we can disable it and make sure that code path for serial image decoding won&apos;t be affected with your change?

No, it is always enabled because we dynamically switch to serial image decoding when parallel image decoding seems unprofitable. We can add a runtime flag to enable/disable it. Currently, if ImageSource::shouldDecodeParallel() returns false, code path for serial image decoding won&apos;t be affected at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680020</commentid>
    <comment_count>40</comment_count>
      <attachid>154812</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-07-26 19:25:06 -0700</bug_when>
    <thetext>Created attachment 154812
Draft patch for refactoring in BitmapImage and Image

I have drafted a patch for the refactoring of BitmapImage and Image to show the direction we want to do, here&apos;s some highlights of this patch and particularly the difference, I would like to use this to continue our discussion of refactoring.

Here&apos;s the highlights of the design / refactoring:

1. Getters for metadata go directly into the decoder without decoding the entire frame.

This is different than the design you suggested. We really want to restrict the start of decoding to only one case, i.e. when nativeImageForCurrentFrame() is called. This is important for us because we don&apos;t want a metadata getter to start decoding and we can then have a clear indication when we can defer decoding.

This is also important to performance because decoder should do the best effort to fetch the metadata without decoding, this can be implemented for frameIsCompleteAtIndex(), frameDurationAtIndex(), frameOrientationAtIndex(). The current implementation of always decoding the entire frame is not optimal.

2. Specifically call out the desire of asynchronous image decoding in BitmapImage.

I added methods to BitmapImage to indicate the desire to use asynchronous decoding, i.e. BitmapImage::setUseAsynchronousDecoding(). I would like to have usage of BitmapImage at each site explicit call out the intention, this is also important because a usage of BitmapImage can disable asynchronous decoding and this case can be handled explicitly.

So an example of usage of this would be:

if (image-&gt;isBitmapImage())
  static_cast&lt;BitmapImage*&gt;(image)-&gt;setUseAsynchronousDecoding(true);

draw(image, ...);

And if the usage of the image requires synchronous decoding like that of a canvas, then:

if (image-&gt;isBitmapImage())
  static_cast&lt;BitmapImage*&gt;(image)-&gt;setUseAsynchronousDecoding(false);

draw(image, ...);

I find it important to identify the intention of use at each site. And having this method in BitmapImage can make things more explicit.

3. Limit the asynchronous interface only to ImageSource

I noticed in your patch that ImageSource and ImageDecoder are both asynchronous. I would like to reduce this down to only ImageSource. In fact because ImageSource.cpp is only used by non-cg port, we can just implement a parallel decoding mode there and keep ImageDecoder always synchronous.

4. Use of default state before frame is fully decoded is acceptable

We talked about the worries of returning default states before an image is fully decoded, I would like to go into details about each of these metadata getters and discuss why it is okay to return a default value:

a. frameOrientationAtIndex()

This method is current *always* returning a default value for all formats. Even if this is properly this can be decoded from the EXIF data and so calling directly into the decoder can return this correctly without decoding the full frame, given that this is implemented for WebKit&apos;s jpeg decoder.

b. frameIsCompleteAtIndex()

This method is to return if a frame is full decoded. This doesn&apos;t contradict with asynchronous decoding at all, when asynchronous decoding is in use and frame is not fully decoded the frame is always incomplete. We can also see if we have enough bytes to determine of a frame is complete.

Also note there is only two main usages of this method:

i. GIF animation

For the case of asynchronous decoding, a frame is not fully decoded is always not complete and this doesn&apos;t contradict with the animation strategy.

ii. Extract image data for GraphicsContext3D for a fully loaded image

Use of frameIsCompleteAtIndex() is really not necessary there, they are used incorrectly to see if image can be decoded.

Ultimately this method should be protected and shouldn&apos;t be exposed. I think further refactoring of GraphicsContext3DSkia and GraphicsContext3DCario will elimate the use of this method. Once this method is fully internal to BitmapImage there is not problem for asynchronous decoding.

c. frameHasAlphaAtIndex()

Note that current WebKit code already returns hasAlpha = true for an incomplete and naturally a partially decoded image always has alpha. Again this method is only meaningful only if the image is fully decoded, otherwise hasAlpha should always be true anyway.

d. frameDurationAtIndex()

This is only meaningful for GIF, and for GIF this can be determined without decoding the frame. Also note that this is only meaningful if a frame is complete (because we don&apos;t care about duration until a frame is completely loaded / decoded). Grabbing the value of this attribute is the responsibility of the GIF decoder and hence should be delegated directly to the decoder.

5. Metadata state mismatch

We discussed about having a mismatch of metadata state, for example:

image-&gt;currentFrameHasAlpha() // returns true
... do something else ..
NativeImage* nativeImage = image-&gt;nativeImageForCurrentFrame() // nativeImage doesn&apos;t have alpha

This actually won&apos;t be the case, because of the following:

a. Suppose when we call image-&gt;currentFrameHasAlpha() the image has not been decoded, this method will return true and later we call image-&gt;nativeImageForCurrentFrame(), this nativeImage will either be null or contain an empty image because decoding is just going to start, ans it *will* have alpha.

b. Suppose when we call image-&gt;currentFrameHasAlpha() the image is partially decoded, this method will return true, and again image-&gt;nativeImageForCurrentFrame() will not decode anything synchronously and this doesn&apos;t change the alpha state.

c. Suppose when we call image-&gt;currentFrameHasAlpha() the image is fully decoded is cached, then we return the correct value and image-&gt;nativeImageForCurrentFrame() will not lead to a different result.

Please let me know what you think about the approach in the patch posted. I think the next thing I&apos;ll do is to review all places where nativeImageForCurrentFrame is called and put whether asynchronous decoding should be used at each spot. My gut felling is that asynchronous decoding is the common case while synchronous decoding is rare.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680084</commentid>
    <comment_count>41</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-26 21:22:32 -0700</bug_when>
    <thetext>(In reply to comment #40)
Thanks for your efforts. The patch looks reasonable to me. Dongsung will comment on the details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680149</commentid>
    <comment_count>42</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-07-26 23:11:10 -0700</bug_when>
    <thetext>
Thanks for your efforts. I agreed on most of your approach.
I have some questions and concerns.

(In reply to comment #40)
&gt; Created an attachment (id=154812) [details]
&gt; Draft patch for refactoring in BitmapImage and Image
&gt; 
&gt; I have drafted a patch for the refactoring of BitmapImage and Image to show the direction we want to do, here&apos;s some highlights of this patch and particularly the difference, I would like to use this to continue our discussion of refactoring.
&gt; 
&gt; Here&apos;s the highlights of the design / refactoring:
&gt; 
&gt; 1. Getters for metadata go directly into the decoder without decoding the entire frame.
&gt; 
&gt; This is different than the design you suggested. We really want to restrict the start of decoding to only one case, i.e. when nativeImageForCurrentFrame() is called. This is important for us because we don&apos;t want a metadata getter to start decoding and we can then have a clear indication when we can defer decoding.
&gt; 
&gt; This is also important to performance because decoder should do the best effort to fetch the metadata without decoding, this can be implemented for frameIsCompleteAtIndex(), frameDurationAtIndex(), frameOrientationAtIndex(). The current implementation of always decoding the entire frame is not optimal.
&gt; 

Absolutely, it will be easy to use BitmapImage and implement async decoders if only nativeImageForCurrentFrame() can cause full image decoding.


&gt; 2. Specifically call out the desire of asynchronous image decoding in BitmapImage.
&gt; 
&gt; I added methods to BitmapImage to indicate the desire to use asynchronous decoding, i.e. BitmapImage::setUseAsynchronousDecoding(). I would like to have usage of BitmapImage at each site explicit call out the intention, this is also important because a usage of BitmapImage can disable asynchronous decoding and this case can be handled explicitly.
&gt; 
&gt; So an example of usage of this would be:
&gt; 
&gt; if (image-&gt;isBitmapImage())
&gt;   static_cast&lt;BitmapImage*&gt;(image)-&gt;setUseAsynchronousDecoding(true);
&gt; 
&gt; draw(image, ...);
&gt; 
&gt; And if the usage of the image requires synchronous decoding like that of a canvas, then:
&gt; 
&gt; if (image-&gt;isBitmapImage())
&gt;   static_cast&lt;BitmapImage*&gt;(image)-&gt;setUseAsynchronousDecoding(false);
&gt; 
&gt; draw(image, ...);
&gt; 
&gt; I find it important to identify the intention of use at each site. And having this method in BitmapImage can make things more explicit.
&gt; 

If we have setUseAsynchronousDecoding, we must use it with nativeImageForCurrentFrame() too.
For examples,

 if (image-&gt;isBitmapImage())
   static_cast&lt;BitmapImage*&gt;(image)-&gt;setUseAsynchronousDecoding(false);
 
 image-&gt;nativeImageForCurrentFrame();


There are so many sites which call nativeImageForCurrentFrame() and there are only several (maybe 4) sites which need to call static_cast&lt;BitmapImage*&gt;(image)-&gt;setUseAsynchronousDecoding(true).
BitmapImage is used for various purposes such as &lt;image&gt;, backingStore, theme images and etc. I think it is hard for all developers to remember calling setUseAsynchronousDecoding(false) before draw(image, ...) and nativeImageForCurrentFrame().
So, I think the default policy should be to decode synchronously. When we want async decoding, we need to give the hint to BitmapImage.
For examples,

 draw(RetainedModeBitmapImage(image), ...);

I think you want to ask why I put RetainedModeBitmapImage in here again.

In the following situation, BitmapImage can not determine whether to decode synchronously or asynchronously.

 #1 RenderImage calls

 if (image-&gt;isBitmapImage())
   static_cast&lt;BitmapImage*&gt;(image)-&gt;setUseAsynchronousDecoding(true);
 
 draw(image, ...);


 #2 CanvasRenderingContext2D calls with the same image.

 draw(image, ...);  &lt;- We should do following jobs: 1. cancel async image decoding, 2. decode the image synchronously, 3. notify CachedImageClient::imageChanged(), 4. draw the image in succession.
                              BUT we can not know this calling is from CanvasRenderingContext2D.

I suggested RetainedModeBitmapImage instead of setter because of it.


&gt; 3. Limit the asynchronous interface only to ImageSource
&gt; 
&gt; I noticed in your patch that ImageSource and ImageDecoder are both asynchronous. I would like to reduce this down to only ImageSource. In fact because ImageSource.cpp is only used by non-cg port, we can just implement a parallel decoding mode there and keep ImageDecoder always synchronous.
&gt; 

I think your concern is in that ImageSource delegates ImageDecoder to ParallelImageDecoder. Maybe because ImageSource must directly call ImageDecoder::frameHasAlphaAtIndex and other metadata query functions.
If ParallelImageDecoder creates its own ImageDecoder, it will be ok.


&gt; 4. Use of default state before frame is fully decoded is acceptable
&gt; 
&gt; We talked about the worries of returning default states before an image is fully decoded, I would like to go into details about each of these metadata getters and discuss why it is okay to return a default value:
&gt; 
&gt; a. frameOrientationAtIndex()
&gt; 
&gt; This method is current *always* returning a default value for all formats. Even if this is properly this can be decoded from the EXIF data and so calling directly into the decoder can return this correctly without decoding the full frame, given that this is implemented for WebKit&apos;s jpeg decoder.
&gt; 
&gt; b. frameIsCompleteAtIndex()
&gt; 
&gt; This method is to return if a frame is full decoded. This doesn&apos;t contradict with asynchronous decoding at all, when asynchronous decoding is in use and frame is not fully decoded the frame is always incomplete. We can also see if we have enough bytes to determine of a frame is complete.
&gt; 
&gt; Also note there is only two main usages of this method:
&gt; 
&gt; i. GIF animation
&gt; 
&gt; For the case of asynchronous decoding, a frame is not fully decoded is always not complete and this doesn&apos;t contradict with the animation strategy.
&gt; 
&gt; ii. Extract image data for GraphicsContext3D for a fully loaded image
&gt; 
&gt; Use of frameIsCompleteAtIndex() is really not necessary there, they are used incorrectly to see if image can be decoded.
&gt; 
&gt; Ultimately this method should be protected and shouldn&apos;t be exposed. I think further refactoring of GraphicsContext3DSkia and GraphicsContext3DCario will elimate the use of this method. Once this method is fully internal to BitmapImage there is not problem for asynchronous decoding.
&gt; 
&gt; c. frameHasAlphaAtIndex()
&gt; 
&gt; Note that current WebKit code already returns hasAlpha = true for an incomplete and naturally a partially decoded image always has alpha. Again this method is only meaningful only if the image is fully decoded, otherwise hasAlpha should always be true anyway.
&gt; 
&gt; d. frameDurationAtIndex()
&gt; 
&gt; This is only meaningful for GIF, and for GIF this can be determined without decoding the frame. Also note that this is only meaningful if a frame is complete (because we don&apos;t care about duration until a frame is completely loaded / decoded). Grabbing the value of this attribute is the responsibility of the GIF decoder and hence should be delegated directly to the decoder.
&gt; 
&gt; 5. Metadata state mismatch
&gt; 
&gt; We discussed about having a mismatch of metadata state, for example:
&gt; 
&gt; image-&gt;currentFrameHasAlpha() // returns true
&gt; ... do something else ..
&gt; NativeImage* nativeImage = image-&gt;nativeImageForCurrentFrame() // nativeImage doesn&apos;t have alpha
&gt; 
&gt; This actually won&apos;t be the case, because of the following:
&gt; 
&gt; a. Suppose when we call image-&gt;currentFrameHasAlpha() the image has not been decoded, this method will return true and later we call image-&gt;nativeImageForCurrentFrame(), this nativeImage will either be null or contain an empty image because decoding is just going to start, ans it *will* have alpha.

It is true when we need to decode an image asynchronously. If we need to decode synchronously and all data were received, image-&gt;nativeImageForCurrentFrame() must return a fully decoded nativeImage and the nativeImage can have alpha.
In the synchronous decoding case like CanvasRenderingContext2D, we can not return either null or an empty image because we do not have a chance to draw again after decoding is complete.

Other metadata friends have similar problems. For examples,

 image-&gt;frameIsCompleteAtIndex() // returns false
 ... do something else ..
 NativeImage* nativeImage = image-&gt;nativeImageForCurrentFrame() // nativeImage can be complete when decoding is synchronous.

It is the most tricky problem, and I have not found a promising solution yet. I want to hear your opinion.


&gt; 
&gt; b. Suppose when we call image-&gt;currentFrameHasAlpha() the image is partially decoded, this method will return true, and again image-&gt;nativeImageForCurrentFrame() will not decode anything synchronously and this doesn&apos;t change the alpha state.
&gt; 

Ditto.


&gt; c. Suppose when we call image-&gt;currentFrameHasAlpha() the image is fully decoded is cached, then we return the correct value and image-&gt;nativeImageForCurrentFrame() will not lead to a different result.
&gt; 

Yes, exactly.


&gt; Please let me know what you think about the approach in the patch posted. I think the next thing I&apos;ll do is to review all places where nativeImageForCurrentFrame is called and put whether asynchronous decoding should be used at each spot. My gut felling is that asynchronous decoding is the common case while synchronous decoding is rare.

As I mentioned earlier, if our default policy is serial image decoding, it may not be necessary to review all the places where nativeImageForCurrentFrame is called.
I think most cases that WebKit users encounter are covered by asynchronous decoding, but in the WebKit code there are only 4 sites that we can change to decode asynchronously: RenderImage, RenderSVGImage, RenderObject (css border, mask and background image) and RenderLayerBacking (for &lt;image&gt;).
It is because the 4 cases have the ability to receive a decoding complete notification via CachedImageClient::imageChanged() and draw the image again.


I am very glad that there are people who dig this subject like you. I think we almost grasp how to do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680160</commentid>
    <comment_count>43</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-07-26 23:29:51 -0700</bug_when>
    <thetext>I encountered &quot;You are not authorized to edit attachment 154812.&quot;
So, I commented it by hand. :)

(From update of attachment 154812 [details])
View in context: https://bugs.webkit.org/attachment.cgi?id=154812&amp;action=review

&gt; Source/WebCore/ChangeLog:140
&gt; 2012-07-25  Alpha Lam  &lt;hclam@chromium.org&gt;
&gt;
&gt;        Remove destroyDecodedData() and decodedSize() from Image.

It is good, but it is not related to async image decoding.
How about patching this previously?


&gt; Source/WebCore/platform/graphics/BitmapImage.h:95
&gt;    bool m_hasAlpha : 1;
&gt;    bool m_haveDefinedOrientation : 1;
&gt;    bool m_haveDefinedDuration : 1;
&gt;    bool m_haveDefinedIsComplete : 1;
&gt;    bool m_haveDefinedHasAlpha : 1;

What is the purpose of these new variables?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680280</commentid>
    <comment_count>44</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-07-27 01:20:40 -0700</bug_when>
    <thetext>I think we also need to talk more on testing. Because parallel image decoding (or asynchronous image decoding) extensively changes the behavior, we must have pretty good test coverage. But it seems image decoding has been historically under-tested due to lack of tools. I filed Bug 92470 to discuss this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682244</commentid>
    <comment_count>45</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-07-30 11:50:47 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; I think we also need to talk more on testing. Because parallel image decoding (or asynchronous image decoding) extensively changes the behavior, we must have pretty good test coverage. But it seems image decoding has been historically under-tested due to lack of tools. I filed Bug 92470 to discuss this issue.

Thanks for filing the bug on testing.

I have a refactoring patch in mind that will address the issues raised by Dongsung, in particular the use of metadata functions.

My goal of this patch is to remove currentFrameHasAlpha() and frameHasAlphaAtIndex() from Image. This is a tricky task but I think is achievable. Doing so would leave most metadata functions protected / internal to BitmapImage and I shall have better answers to your questions.

I&apos;ll post a patch in a couple days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682618</commentid>
    <comment_count>46</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-07-30 18:56:10 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; 
&gt; My goal of this patch is to remove currentFrameHasAlpha() and frameHasAlphaAtIndex() from Image. This is a tricky task but I think is achievable. Doing so would leave most metadata functions protected / internal to BitmapImage and I shall have better answers to your questions.
&gt; 

I think making most metadata functions protected / internal to BitmapImage is the most appropriate solution.

I also think we should remove the explicit metadata query methods when implementing parallel image decoders.
There may be two approaches to do this.

1. Remove all metadata query methods and rename BitmapImage::nativeImageForCurrentFrame to BitmapImage::currnetFrame, and make the function return the current frame struct.
2. Remove all metadata query methods and call platform specific metadata query functions using nativeImagePtr.

Both causes a big refactoring. So, I postponed this refactoring.

I appreciate you are doing this refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683306</commentid>
    <comment_count>47</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-07-31 11:39:31 -0700</bug_when>
    <thetext>&gt; I think making most metadata functions protected / internal to BitmapImage is the most appropriate solution.
&gt; 
&gt; I also think we should remove the explicit metadata query methods when implementing parallel image decoders.
&gt; There may be two approaches to do this.

Agreed. Since we&apos;re doing this (asynchronous image decoding / parallel image decoding) we should do the refactoring to best fit the purpose.

&gt; 
&gt; 1. Remove all metadata query methods and rename BitmapImage::nativeImageForCurrentFrame to BitmapImage::currnetFrame, and make the function return the current frame struct.
&gt; 2. Remove all metadata query methods and call platform specific metadata query functions using nativeImagePtr.
&gt; 
&gt; Both causes a big refactoring. So, I postponed this refactoring.
&gt; 
&gt; I appreciate you are doing this refactoring.

I&apos;m going for route (2).

My goal is to remove metadata queries from Image/BitmapImage for all non-CG ports. Since CG uses their own ImageSource and image decoders we should keep those metadata queries intact.

Removing currentFrameHasAlpha/frameHasAlphaAtIndex is straightforward for Skia ports. Generally this is ImageDecoder already sets this information to ImageFrame::setHasAlpha and ultimately set to the platform nativeImagePtr, so this information should well be in nativeImagePtr.

The real tricky part is the combined use of currentFrameHasAlpha and frameHasAlphaAtIndex with GraphicsContext3D::extractImageData. This is used in texmap where an image is represented by an array of bytes and not nativeImagePtr. Fortunately there&apos;s very little use of this and can be fixed.

Once currentFrameHasAlpha and frameHasAlphaAtIndex is unplugged then frameDurationAtIndex and frameIsCompleteAtIndex are both internal to BitmapImage and only meaningful to GIF, fixing that to work with asynchronous image decoding will have to do with refactoring the GIF image decoder. Again this is doable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683773</commentid>
    <comment_count>48</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-07-31 19:39:08 -0700</bug_when>
    <thetext>(In reply to comment #47)
&gt; My goal is to remove metadata queries from Image/BitmapImage for all non-CG ports. Since CG uses their own ImageSource and image decoders we should keep those metadata queries intact.
&gt; 
&gt; Removing currentFrameHasAlpha/frameHasAlphaAtIndex is straightforward for Skia ports. Generally this is ImageDecoder already sets this information to ImageFrame::setHasAlpha and ultimately set to the platform nativeImagePtr, so this information should well be in nativeImagePtr.
&gt; 
&gt; The real tricky part is the combined use of currentFrameHasAlpha and frameHasAlphaAtIndex with GraphicsContext3D::extractImageData. This is used in texmap where an image is represented by an array of bytes and not nativeImagePtr. Fortunately there&apos;s very little use of this and can be fixed.
&gt; 
&gt; Once currentFrameHasAlpha and frameHasAlphaAtIndex is unplugged then frameDurationAtIndex and frameIsCompleteAtIndex are both internal to BitmapImage and only meaningful to GIF, fixing that to work with asynchronous image decoding will have to do with refactoring the GIF image decoder. Again this is doable.

Fantastic! I&apos;m looking forward to your patch. Your patch will replace our preparing patch (Bug 90443). After you submit the patch, I&apos;ll merge parallel image decoders with your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683976</commentid>
    <comment_count>49</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-08-01 01:32:10 -0700</bug_when>
    <thetext>UPDATE! Here are the the test results.

Two tests were reinforced.
1. Response times of interactive web pages.
2. First painting and response time on a 2 core embedded device.

Previously, we measured the first painting time on a high-end PC (Xeon 5650).
We are curious about two questions.
1. How to show other advantages of parallel image decoders in addition to the first painting time.
2. Do parallel image decoders perform well on embedded devices?

See the results in the following link.
https://docs.google.com/spreadsheet/pub?key=0Ar2smwimcenMdGpnTEw2clZjSTNkbXNFNFM5dkYyRGc&amp;output=html


@ Summary of the results
1. The response time of interactive web pages were improved by  approximately 20%.
2. An embedded device shows a similar performance enhancement as a high-end PC.


@ Test Environment
1. High-end PC: Intel ® Xeon (R) CPU X5650@2.67GHz × 6
2. Embeded device: Pandaboard ARM Cortex-A9@1.2GHz × 2

We Used WebKit1 compiled with Qt4.8.1.



@ Details of each test

eBay Scrolling Test: Gmarket is South Korea&apos;s eBay. We measured the FPS of scrolling the page, which included many pretty girls&apos; pictures.
High-end PC: Measured 99 FPS in the threaded case. The FPS limit in Qt WebKit1 is 100 FPS. I think the threaded case might exceed 99 FPS in other ports.
Embeded device: 21% performance improvement.

35 Images: There are 35 large images scaled down to fit on the screen.
High-end PC: The first painting time is four times faster when MemoryCache cached raw data.
Embeded device: The first painting time is 20% faster when MemoryCache cached raw data.

DOMContentLoaded: There are 3 large images that are scaled down to fit on one page. This test belongs to IE Test Drive.
High-end PC: The first painting time is 56% faster when MemoryCache cached raw data.
Embeded device: The first painting time is 20% faster when MemoryCache cached raw data.

RomainGuy: Amateur photographer&apos;s blog.
High-end PC: The first painting time is 17% faster when MemoryCache cached raw data.
Embeded device: It makes very little difference.

Apple: iMac&apos;s introduction page
High-end PC: The first painting time is 82% faster when MemoryCache cached raw data.

Tumblr : There are many medium size images in the blog.
High-end PC: The first painting time is 7.5% faster when MemoryCache cached raw data.


@ The interpretation of the test results
1. Interactive page’s response times are improved. Image decoding processes off the main thread, so the main thread can concentrate on the animation or scrolling.
2. 35 Images and DOMContentLoaded has improved the first painting time a lot. It is because decoding several large images takes advantage of multiple CPU cores.
On the other hand, RomainGuy, Apple and Tumblr need a closer look for interpretation of the results, although three sites are very similar, only the Apple case has exceptionally high performance improvement.
In the Apple case, there is a lot of work done in the main thread after requesting image decoding from the parallel image decoders. Web Inspector shows CSS styling, layout and rendering are performed consistently. However, in the RomainGuy and Tumblr cases, the request for image decoding is near end of the page&apos;s loading and painting. After the main thread requests image decoding, it usually waits for decoding to complete without any other heavy jobs running. I removed Javascript code in order to preventing resources loading dynamically, which could exacerbate the situation.
Currently, The trigger conditions for parallel Image decoders are image size, the number of CPU cores and image format. In the future, we can add the work load of the main thread to the trigger conditions, to reduce unnecessary thread communication overhead.


@ Settings for testing
1. All test data was stored locally in order to avoid the effects of network latency. I removed most of the Javascript code in order to prevent resources from loading dynamically.
2. The difference in full loading time between threaded and originally referenced cases is negligible. This is because network latency is the dominant factor, so the main thread often waits until finishing sub resource loading. We kept most CachedImages in MemoryCache for a more precise measurement of image decoding time.

Code stub for #2.
settings()-&gt;setUsesPageCache(false);
memoryCache()-&gt;setDeadDecodedDataDeletionInterval(0.01);
memoryCache()-&gt;setCapacities(0, 256MB, 256MB);


@ Details of test embedded device.
- Ubuntu 12.04 on Pandaboard. http://pandaboard.org/
- Xorg occupies about 35% of the CPU, so parallel image decoders can not fully use both cores.
- Set Qt configuration like Bug 84321.
- printf from a shared library does not output anything on the terminal, so I compiled WebKit as static.
- The static build caused crashes on the sites with external javascript files, so I tested only the sites that do not crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684634</commentid>
    <comment_count>50</comment_count>
      <attachid>155898</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-08-01 15:12:47 -0700</bug_when>
    <thetext>Created attachment 155898
Remove Image::currentFrameHasAlpha()

This patch I removed Image::currentFrameHasAlpha() and have it defined only on CG port.

Also removed the usage of this method in multiple places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684636</commentid>
    <comment_count>51</comment_count>
      <attachid>155899</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-08-01 15:13:36 -0700</bug_when>
    <thetext>Created attachment 155899
Remove Image::currentFrameHasAlpha()

Upload again and mark as patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684735</commentid>
    <comment_count>52</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-08-01 16:20:16 -0700</bug_when>
    <thetext>Now that I have drafted patch to remove currentFrameHasAlpha() and understand the problem better I&apos;m going back to our discussion before.

&gt; 
&gt; I suggested RetainedModeBitmapImage instead of setter because of it.

I think having a wrapper class is fine, as long as there&apos;s only one way to trigger image decoding, i.e. nativeImageForCurrentFrame().

&gt; 
&gt; 
&gt; &gt; 3. Limit the asynchronous interface only to ImageSource
&gt; &gt; 
&gt; &gt; I noticed in your patch that ImageSource and ImageDecoder are both asynchronous. I would like to reduce this down to only ImageSource. In fact because ImageSource.cpp is only used by non-cg port, we can just implement a parallel decoding mode there and keep ImageDecoder always synchronous.
&gt; &gt; 
&gt; 
&gt; I think your concern is in that ImageSource delegates ImageDecoder to ParallelImageDecoder. Maybe because ImageSource must directly call ImageDecoder::frameHasAlphaAtIndex and other metadata query functions.
&gt; If ParallelImageDecoder creates its own ImageDecoder, it will be ok.

My concern here is to have a simpler interface and contract between classes, and having fewer asynchronous interfaces helps. My suggestion is to keep ImageDecoder synchronous but ImageSource doing the work to make things parallel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684762</commentid>
    <comment_count>53</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-08-01 16:44:06 -0700</bug_when>
    <thetext>Now that I tried to remove currentFrameHasAlpha, I found the results not satisfactory. The reason is I need to disable some optimizations to achieve this, which might upset users that rely on this API.

I think it&apos;s better to keep Image::currentFrameHasAlpha() but change the implementation in BitmapImage. Like the patch I drafted BitmapImage shouldn&apos;t call ensureFrameIsCached() to decode a frame and return the result. Instead BitmapImage should just return the value of ImageSource::frameHasAlphaAtIndex() which calls into the image decoder to answer the call.

Yes it has the problem that you mentioned before, e.g.

image-&gt;currentFrameHasAlpha() // return true
... some time later ...
NativeImagePtr* image = image-&gt;nativeImageForCurrentFrame(); // image doesn&apos;t have alpha

However it really doesn&apos;t matter, assuming an image has alpha is safe. Look at ImageSourceCG.cpp for example, it shows that currentFrameHasAlpha() doesn&apos;t need to return the correct value.

bool ImageSource::frameHasAlphaAtIndex(size_t)
{
    if (!m_decoder)
        return false;

    CFStringRef imageType = CGImageSourceGetType(m_decoder);

    // Return false if there is no image type or the image type is JPEG, because
    // JPEG does not support alpha transparency.
    if (!imageType || CFEqual(imageType, CFSTR(&quot;public.jpeg&quot;)))
        return false;

    // FIXME: Could return false for other non-transparent image formats.
    // FIXME: Could maybe return false for a GIF Frame if we have enough info in the GIF properties dictionary
    // to determine whether or not a transparent color was defined.
    return true;
}

Instead it is enough for currentFrameHasAlpha to return the best guess. By calling directly into each image decoder we can answer this call good enough, until the image is fully decoded.

So I suggest the first step is to remove decoding caused by currentFrameHasAlpha, this way nativeImageForCurrentFrame being the only public method that triggers image decoding.

frameIsCompleteAtIndex and frameDurationAtIndex are for GIF animation, I would consider them a separate problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684841</commentid>
    <comment_count>54</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-08-01 18:20:47 -0700</bug_when>
    <thetext>(In reply to comment #52)
&gt; Now that I have drafted patch to remove currentFrameHasAlpha() and understand the problem better I&apos;m going back to our discussion before.
&gt; 
&gt; I think having a wrapper class is fine, as long as there&apos;s only one way to trigger image decoding, i.e. nativeImageForCurrentFrame().

Yes, we use the wrapper class only with nativeImageForCurrentFrame() and GraphicsContext::draw().


&gt; &gt; I think your concern is in that ImageSource delegates ImageDecoder to ParallelImageDecoder. Maybe because ImageSource must directly call ImageDecoder::frameHasAlphaAtIndex and other metadata query functions.
&gt; &gt; If ParallelImageDecoder creates its own ImageDecoder, it will be ok.
&gt; 
&gt; My concern here is to have a simpler interface and contract between classes, and having fewer asynchronous interfaces helps. My suggestion is to keep ImageDecoder synchronous but ImageSource doing the work to make things parallel.

Frankly, I don&apos;t understand fully what you concerned. Our parallel image decoder implementation keeps ImageDecoder synchronous. Our implementation introduced ParallelImageDecoder, and ParallelImageDecoder has asynchronous API, because ParallelImageDecoder decodes image asynchronously. I think it is the implementation detail of ImageSource, and other classes can not know what is ParallelImageDecoder.
If I may misunderstand your opinion, could you feedback to me again?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684842</commentid>
    <comment_count>55</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-08-01 18:23:33 -0700</bug_when>
    <thetext>&gt; 
&gt; Frankly, I don&apos;t understand fully what you concerned. Our parallel image decoder implementation keeps ImageDecoder synchronous. Our implementation introduced ParallelImageDecoder, and ParallelImageDecoder has asynchronous API, because ParallelImageDecoder decodes image asynchronously. I think it is the implementation detail of ImageSource, and other classes can not know what is ParallelImageDecoder.
&gt; If I may misunderstand your opinion, could you feedback to me again?

Whoops I misunderstood the code. Now I look at it again it makes sense to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684858</commentid>
    <comment_count>56</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-08-01 18:37:32 -0700</bug_when>
    <thetext>(In reply to comment #53)
&gt; Now that I tried to remove currentFrameHasAlpha, I found the results not satisfactory. The reason is I need to disable some optimizations to achieve this, which might upset users that rely on this API.

Your patch said there are two clients: Texmap and box shadow painting.

I know Texmap well and I think we can overcome about Texmap. I can remove currentFrameHasAlpha() completely in the code related to Texmap.
However, I have lack of knowledge about box shadow painting. My gut feeling still tells me by removing currentFrameHasAlpha() completely.
Otherwise, clients could be confused whether they use currentFrameHasAlpha() or a platform specific function.

&gt; 
&gt; Instead it is enough for currentFrameHasAlpha to return the best guess. By calling directly into each image decoder we can answer this call good enough, until the image is fully decoded.
&gt; 
&gt; So I suggest the first step is to remove decoding caused by currentFrameHasAlpha, this way nativeImageForCurrentFrame being the only public method that triggers image decoding.
&gt; 
&gt; frameIsCompleteAtIndex and frameDurationAtIndex are for GIF animation, I would consider them a separate problem.

I want to try to remove meta data query functions based on your patch, and then refactory parallel image decoders on the preparation.
parallel image decoders changes almost only ImageSource. I think parallel image decoders will get along with your async image decoder.

If you don&apos;t mind, I will post a patch in several hours later.

I am curious about the progress of your async image decoder, how we collaborate the preparation and how we commit our async and parallel image decoders.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684876</commentid>
    <comment_count>57</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-08-01 18:58:47 -0700</bug_when>
    <thetext>&gt; I know Texmap well and I think we can overcome about Texmap. I can remove currentFrameHasAlpha() completely in the code related to Texmap.
&gt; However, I have lack of knowledge about box shadow painting. My gut feeling still tells me by removing currentFrameHasAlpha() completely.
&gt; Otherwise, clients could be confused whether they use currentFrameHasAlpha() or a platform specific function.

If we can remove this method that would be the best outcome.

This method is also used in LayerTreeCoordinator.cpp which is in WebKit2 and I have no knowledge of.

RenderImage&apos;s use of currentFrameHasAlpha comes from this change 91628 and 65030 is filed to return the correct value for PNG and GIF. I would check with Simon Fraser to see if it is okay to remove the optimization for RenderImage. (Just added him to this bug.)

&gt; I want to try to remove meta data query functions based on your patch, and then refactory parallel image decoders on the preparation.
&gt; parallel image decoders changes almost only ImageSource. I think parallel image decoders will get along with your async image decoder.
&gt; 
&gt; If you don&apos;t mind, I will post a patch in several hours later.
&gt; 
&gt; I am curious about the progress of your async image decoder, how we collaborate the preparation and how we commit our async and parallel image decoders.

Please go ahead and take the patch. We are still in the progress of refactoring, which is what we&apos;re discussing now. :)

I think once we are both happy with the refactoring we can put the refactoring patch up for review first. If you&apos;re happy trading patches with buganizer just like what we&apos;re doing now we can continue with this method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684887</commentid>
    <comment_count>58</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-08-01 19:10:55 -0700</bug_when>
    <thetext>(In reply to comment #57)
&gt; 
&gt; This method is also used in LayerTreeCoordinator.cpp which is in WebKit2 and I have no knowledge of.

It is related to Texmap in WebKit2. I know this.


&gt; 
&gt; Please go ahead and take the patch. We are still in the progress of refactoring, which is what we&apos;re discussing now. :)

Thank you for your kind response. I&apos;m relatively newbie at WebKit, and I have not collaborated with people of WebKit community yet. I&apos;m very glad to collaborate with kind people in here like you. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684888</commentid>
    <comment_count>59</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-08-01 19:11:02 -0700</bug_when>
    <thetext>I would prefer not to remove the optimizations that currentFrameHasAlpha() allows. I hope we can make more, not less use of it in future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684915</commentid>
    <comment_count>60</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-08-01 19:47:02 -0700</bug_when>
    <thetext>(In reply to comment #59)
&gt; I would prefer not to remove the optimizations that currentFrameHasAlpha() allows. I hope we can make more, not less use of it in future.

I see.  As Hin-Chung mentioned at comment #53, currentFrameHasAlpha returns the best guess.

I&apos;ll post the WIP patch of changed parallel image decoders based on what we discussed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684916</commentid>
    <comment_count>61</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-08-01 19:49:37 -0700</bug_when>
    <thetext>(In reply to comment #59)
&gt; I would prefer not to remove the optimizations that currentFrameHasAlpha() allows. I hope we can make more, not less use of it in future.

I agree that having the information of alpha channel can allow some nice optimizations. Currently as it is now is it a blocker for having parallel (or deferred) image decoding. Particularly the implementation requires decoding an entire frame to get this information. We would like to start image decoding only during painting.

For most cases getting the alpha channel can be done differently. Many use cases of this method is to optimize texture upload or having an opaque texture. For these use cases that involve NativeImagePtr each port can get query the native image directly.

The use of it in RenderImage is the outstanding one that doesn&apos;t involve a NativeImagePtr. It seems to benefit a specific use case. According to http://trac.webkit.org/changeset/91628 it is the case of JPEG &lt;img&gt; with a GIF background. Maybe we should do this optimization a different to allow parallel image decoding? For example halt GIF animation in the background?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685278</commentid>
    <comment_count>62</comment_count>
      <attachid>156058</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-08-02 06:07:10 -0700</bug_when>
    <thetext>Created attachment 156058
Parallel image decoders based on Lam&apos;s preparation patches.

This is WIP. You can build this patch on Qt. I think this patch can be compiled on other ports but I have not tested yet.

I merged parallel image decoders with Lam&apos;s preparation patches.

In this patch, only draw() and nativeImagePtr() can trigger parallel image decoding.

The difference between previous and this parallel image decoders implementation is that ImageSource does not delegate ImageDecoder to ParallelImageDecoder in this patch.
ParallelImageDecoder creates its own ImageDecoder in ParallelImageDecoder::initialize().
So, the main thread is free to access ImageSource::m_imageDecoder.
When we call meta data query functions to BitmapImage, BitmapImage calls the functions of ImageSource and ImageSource calls the functions of ImageDecoder.

I am curious whether this implementation can get along with Lam&apos;s differed image decoder.
I welcome all folks&apos; opinion. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685904</commentid>
    <comment_count>63</comment_count>
      <attachid>156182</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-08-02 15:29:39 -0700</bug_when>
    <thetext>Created attachment 156182
Remove sync image decoding from currentFrameHasAlpha and currentFrameOrientation

Thanks for merging and the new patch. I still have to go through your patch. At the same time I want to put our focus onto removing sync image decoding in the metadata functions. This patch removes sync image decoding from currentFrameHasAlpha() and currentFrameOrientation(). This should allow async image decoding for images other than GIF. I want to put this for review if you think this is right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686003</commentid>
    <comment_count>64</comment_count>
      <attachid>156058</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-08-02 17:02:01 -0700</bug_when>
    <thetext>Comment on attachment 156058
Parallel image decoders based on Lam&apos;s preparation patches.

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

&gt; Source/WebCore/platform/graphics/ImageSource.cpp:191
&gt; +    if (fileExt == &quot;ico&quot; || fileExt == &quot;gif&quot;)

I looked again to see if it is possible to make BitmapImage::frameDurationAtIndex() and BitmapImage::frameIsCompleteAtIndex() not trigger image decoding. It proved to be very difficult to do so correctly. I think we&apos;re much safer to leave these two methods untouched. This is okay because they are used only with GIF animation which you excluded from parallel image decoding already.

To loosen the restriction of this line and still have the correct behavior is to check for frameCount(). If the frameCount() == 1 it&apos;s okay to be GIF and ICO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686126</commentid>
    <comment_count>65</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-08-02 19:10:05 -0700</bug_when>
    <thetext>(In reply to comment #63)

When I pushed the Publish button in Review Patch, Bugzilla said &quot;You may not search, or create saved searches, without any search terms.&quot;
So, I comment by hand.


&gt; Source/WebCore/ChangeLog:3
&gt; +    BitmapImage::currentFrameOrientation() shouldn&apos;t decode the current frame

You already made BitmapImage::currentFrameOrientation() and BitmapImage::currentFrameHasAlpha() not decode the current frame in the previous patch.
However, this patch is little bit different. :)



&gt; Source/WebCore/platform/graphics/ImageSource.cpp:193
&gt; -     return !frameIsCompleteAtIndex(index)
&gt; -         || m_decoder-&gt;frameBufferAtIndex(index)-&gt;hasAlpha();
&gt; +    return !m_decoder-&gt;isAllDataReceived()
&gt; +        || m_decoder-&gt;frameHasAlphaAtIndex(index);

We discussed frameIsCompleteAtIndex also does not trigger decoding, but this patch seems frameIsCompleteAtIndex can trigger decoding.
I think you concern that GIF animation need to trigger decoding when calling frameIsCompleteAtIndex.
There are only two places which need to decode when calling frameIsCompleteAtIndex. Both are in BitmapImage::startAnimation.
How about change the code like this.

in BitmapImage::startAnimation about 433 line

    ensureFrameIsCached(nextFrame);          &lt;-- add this line.
    if (!m_allDataReceived &amp;&amp; !frameIsCompleteAtIndex(nextFrame)) {
        return;
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686133</commentid>
    <comment_count>66</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-08-02 19:16:19 -0700</bug_when>
    <thetext>(In reply to comment #64)
&gt; I looked again to see if it is possible to make BitmapImage::frameDurationAtIndex() and BitmapImage::frameIsCompleteAtIndex() not trigger image decoding. It proved to be very difficult to do so correctly. I think we&apos;re much safer to leave these two methods untouched. This is okay because they are used only with GIF animation which you excluded from parallel image decoding already.
As I mentions in comment #65, I think we can touch BitmapImage::frameIsCompleteAtIndex() because only BitmapImage::startAnimation calls this method.
It is hard to make GIF decoder set frameDurationAtIndex without decoding, but frameDurationAtIndex is also called only from BitmapImage::startAnimation.
I think if we manually trigger image decoding in the start of BitmapImage::startAnimation, we can touch both BitmapImage::frameDurationAtIndex() and BitmapImage::frameIsCompleteAtIndex() because it is the implementation detail of BitmapImage.

&gt; To loosen the restriction of this line and still have the correct behavior is to check for frameCount(). If the frameCount() == 1 it&apos;s okay to be GIF and ICO.
Absolutely!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686166</commentid>
    <comment_count>67</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-08-02 19:49:06 -0700</bug_when>
    <thetext>&gt; You already made BitmapImage::currentFrameOrientation() and BitmapImage::currentFrameHasAlpha() not decode the current frame in the previous patch.
&gt; However, this patch is little bit different. :)

Yeah sorry about going backwards.

&gt; in BitmapImage::startAnimation about 433 line
&gt; 
&gt;     ensureFrameIsCached(nextFrame);          &lt;-- add this line.
&gt;     if (!m_allDataReceived &amp;&amp; !frameIsCompleteAtIndex(nextFrame)) {
&gt;         return;
&gt;     }

I think just unplugging image decoding from currentFrameHasAlpha() can get us going with with everything except multiframe ICO and GIF already. The benefit of supporting ICO and GIF seems small given the complexity to do it correctly.

My thought is frameIsCompleteAtIndex() and frameDurationAtIndex() are only needed for GIF animation, which your parallel image decoding don&apos;t support anyway. Thinking about what happens if we make animated GIF decoding asynchronous, I think we&apos;ll run into problems if frameIsCompleteAtIndex() doesn&apos;t do decoding. If you look into startAnimation() (the for loop), it actually looks to see if the next frame is complete before switching to the new frame, and because decoding of that frame has not started it will never be completed and hence animation will stall. That&apos;s why I back off from removing decoding from frameIsCompleteAtIndex() and frameDurationAtIndex().

startAnimation() is meaningful for multiframe images anyway and with your patch this is not parallel. I suggest we exclude this at the moment. Make single frame image decoding work great first, and then multiframe images (which involves fixing frameIsCompleteAtIndex and frameDurationAtIndex).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686167</commentid>
    <comment_count>68</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-08-02 19:55:26 -0700</bug_when>
    <thetext>The latest patch I uploaded is a tiny change, but it does what our deferred image decoding needs, i.e. only draw triggers decoding of a single frame image. If that looks good to you I&apos;ll put it up for review.

And thanks for looking!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686184</commentid>
    <comment_count>69</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-08-02 20:24:20 -0700</bug_when>
    <thetext>(In reply to comment #67)
&gt; I think just unplugging image decoding from currentFrameHasAlpha() can get us going with with everything except multiframe ICO and GIF already. The benefit of supporting ICO and GIF seems small given the complexity to do it correctly.

I agreed on you, so parallel image decoders don&apos;t support ICO and GIF.

&gt; 
&gt; That&apos;s why I back off from removing decoding from frameIsCompleteAtIndex() and frameDurationAtIndex().

I think we can make it clear when to start image decoding.
After we discussed, I think there are only two methods which should trigger decoding: BitmapImage::frameAtIndex and BitmapImage::startAnimation, not frameIsCompleteAtIndex() and frameDurationAtIndex().

If we don&apos;t make frameIsCompleteAtIndex() not trigger image decoding, I&apos;m afraid that other developers will be easy to make a mistake to use frameIsCompleteAtIndex() and it can cause to stop parallel image decoding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686191</commentid>
    <comment_count>70</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-08-02 20:31:51 -0700</bug_when>
    <thetext>(In reply to comment #68)
&gt; The latest patch I uploaded is a tiny change, but it does what our deferred image decoding needs, i.e. only draw triggers decoding of a single frame image. If that looks good to you I&apos;ll put it up for review.

All LGTM. I want you to put it up for review. If any reviewers will review the deferred image decoding, could they review parallel image decoders too?

&gt; 
&gt; And thanks for looking!

Thank you too. I really appreciate all discussions with you, Zoltan and other folks. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687340</commentid>
    <comment_count>71</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-08-03 19:05:39 -0700</bug_when>
    <thetext>&gt; If we don&apos;t make frameIsCompleteAtIndex() not trigger image decoding, I&apos;m afraid that other developers will be easy to make a mistake to use frameIsCompleteAtIndex() and it can cause to stop parallel image decoding.

To do this I think we need to detach frameIsCompleteAtIndex() from general image frames and relate it only to animated GIF. My thought is createFrameAtIndex() (or in the future requestFrameAtIndex()) would include the state of the frame, i.e. isComplete, etc. This way we can push the logic of GIF animation into GIF image decoder (or another class).

Before that we&apos;ll need to modify GIFImageDecoder to give these information before actually a frame. It feels like a distraction to me though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687341</commentid>
    <comment_count>72</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-08-03 19:07:20 -0700</bug_when>
    <thetext>I&apos;ve created a bug: https://bugs.webkit.org/show_bug.cgi?id=93171 to remove image decoding from frameHasAlphaAtIndex and frameOrientationAtIndex. Patch is also uploaded for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687419</commentid>
    <comment_count>73</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-08-04 01:01:15 -0700</bug_when>
    <thetext>(In reply to comment #71)
&gt; To do this I think we need to detach frameIsCompleteAtIndex() from general image frames and relate it only to animated GIF. My thought is createFrameAtIndex() (or in the future requestFrameAtIndex()) would include the state of the frame, i.e. isComplete, etc. This way we can push the logic of GIF animation into GIF image decoder (or another class).

As you mentioned, only GIF animation uses frameIsCompleteAtIndex() and frameDurationAtIndex(), and both methods are not public, so both methods are implementation detail.
I wish other developers don&apos;t misuse both methods after we complete async image decoding implementations. So, I renamed both methods in order to prevent from making mistakes.
frameDurationAtIndexDecodingIfNecessary()
frameIsCompleteAtIndexDecodingIfNecessary()

You can see this in the next patch that I will post.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>687423</commentid>
    <comment_count>74</comment_count>
      <attachid>156525</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-08-04 01:15:33 -0700</bug_when>
    <thetext>Created attachment 156525
Parallel image decoders based on Lam&apos;s preparation patches.

I fixed some bugs.

This patch is huge, so I made a github repository. I will update the repository in real-time. :)
https://github.com/luxtella/webkit
git://github.com/luxtella/webkit.git
parallel-image-decoders branch

I rebased parallel image decoder based on Lam&apos;s preparation patches including Bug 93171.
I wish Lam&apos;s patches land ASAP, because our parallel image decoder depends on Lam&apos;s patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688502</commentid>
    <comment_count>75</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-08-06 16:02:13 -0700</bug_when>
    <thetext>Dongsung,

Thanks for setting up the repo. To get to parallel image decoding, I think we should do it in two stages, here&apos;s some concrete steps:

Stage 1: Asynchronous image decoding

AI 1: Remove unncessary ops that trigger image decoding: https://bugs.webkit.org/show_bug.cgi?id=93171

AI 2: Modify testing framework, adding more layout test and pixel test for image decoding, add flags to enable asynchronous image decoding in testing framework

AI 3: Break out changes to ImageSource to be asynchronous and review

AI 4: Define and implement AsynchronousImageDecoder, this will just forward to existing synchronous image decoders, enable it on Qt port, test with layout test

AI 5: Break out RetainedModeBitmapImage, add usage to WebCore, test with layout test to ensure no failures

AI 6: Implement AsynchronousImageDecoder with proper asynchronous operations in BitmapImage, test with layout test to ensure no failures

-- WebKit tested and ready to use asynchronous image decoders, at least on Qt port --

Stage 2: Parallel image decoding

AI 7: Implement parallel image decoding with tests


I think from 1 to 6 are things that we should both contribute and cross verify. I&apos;m going to work on testing to cover cases currently missed, it will be great if you can do AI 3 which is to break out a small patch that refactor ImageSource to be asynchronous for review. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688761</commentid>
    <comment_count>76</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-08-06 20:54:38 -0700</bug_when>
    <thetext>(In reply to comment #75)
&gt; Thanks for setting up the repo. To get to parallel image decoding, I think we should do it in two stages, here&apos;s some concrete steps:

I made a mistake about setting up the repo last Saturday. You can access the repo now.
Thanks for suggesting appropriate concrete steps.

&gt; AI 3: Break out changes to ImageSource to be asynchronous and review

Ok, I will extract an async interface from ImageSource, and file the bug.
I want to add unit tests to verify the async interface of ImageSource, but I heard you and some reviewers were discussing about image decoding test, and concluded to improve DRT first.
But, I also think we should have some unit tests for image decoding.
Could you explain in detail how we would build up the test frameworks to verify async image decoding? I think you have some plans. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691883</commentid>
    <comment_count>77</comment_count>
    <who name="Nick Carter">nick</who>
    <bug_when>2012-08-09 14:55:50 -0700</bug_when>
    <thetext>I&apos;m a little bit worried about the rendering behavior of the parallel image decoding as proposed here. I haven&apos;t interacted with a compiled binary containing these changes, but here is what I expect it to behave like. luxtella or skyul, can you respond to the following analysis?

 - The first attempt to draw a BitmapImage essentially sets up a race between the parallel decode, and the draw operation&apos;s attempt to read the frame.
 - Given the timings involved, the draw operation will likely proceed before the decode operation really starts in earnest.
 - Usually, we&apos;ll expect the draw operations to complete next frame.
 - As a result, we&apos;ll visually see a flash of a transparent region while waiting for the image data to become available. That flash is arguably justifiable (?) since images are expected to load progressively anyway.
 - If an &lt;img&gt;&apos;s data is available immediately (e.g. the compressed image data is in cache because it was prefetched via XHR), the race parallel decode will typically add a frame of latency to the presentation of the image.
 - If the MemoryCache is under extreme pressure and thrashing, what used to be a performance problem (slower paint operations because allocation/decoding happens each draw operation) will devolve to a kind of nondeterministic behavior (some timing-dependent subset of decoded images -- possibly all images -- are never available at draw time, because the parallel decode work is evicted before it&apos;s consumed in the next frame).

Incurring flashing or an extra frame of latency to the visibility of every new &lt;img&gt; element, this does not seem desirable if serial decoding would only take a small fraction of the frame time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692482</commentid>
    <comment_count>78</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-08-10 05:22:35 -0700</bug_when>
    <thetext>(In reply to comment #77)
&gt; I&apos;m a little bit worried about the rendering behavior of the parallel image decoding as proposed here. I haven&apos;t interacted with a compiled binary containing these changes, but here is what I expect it to behave like. luxtella or skyul, can you respond to the following analysis?

Very good questions! I answered each question in the below. If you think my answer is not detailed enough, please let me know.

&gt;  - The first attempt to draw a BitmapImage essentially sets up a race between the parallel decode, and the draw operation&apos;s attempt to read the frame.

There is no race at all. The parallel image decoder does not access the frame being read by the draw operation. It sends segments of decoded data to the main thread, then the main thread creates a frame by appending these segments.

Please refer to 3.6 Data transfers in the design document.
https://docs.google.com/document/pub?id=12gf7MhNHfupeR3GdRF-h2Vzg86viCbwXq8_JByHKlg0

&gt;  - Given the timings involved, the draw operation will likely proceed before the decode operation really starts in earnest.

If the parallel image decoder cannot create a frame, ImageSource returns 0 to BitmapImage.  BitmapImage::draw() skips drawing in this case.

void BitmapImage::draw(GraphicsContext* ctxt, const FloatRect&amp; dstRect,
                       const FloatRect&amp; srcRect, ColorSpace colorSpace, CompositeOperator compositeOp)
{
    ...
    NativeImageSkia* bm = nativeImageForCurrentFrame();
    if (!bm)
        return; // It&apos;s too early and we don&apos;t have an image yet.
    ...
}

&gt;  - Usually, we&apos;ll expect the draw operations to complete next frame.

The parallel image decoder does not handle multi-frame images because the gain is small while the complexity is so big. There is no behavior change in this case. 

&gt;  - As a result, we&apos;ll visually see a flash of a transparent region while waiting for the image data to become available. That flash is arguably justifiable (?) since images are expected to load progressively anyway.

My feeling is that the parallel image decoder does not seem to worsen a flash of a transparent region compared to the current implementation. However, I found one particular case which indeed causes flashing. I&apos;l will explain more on this at the end of this comment.

&gt;  - If an &lt;img&gt;&apos;s data is available immediately (e.g. the compressed image data is in cache because it was prefetched via XHR), the race parallel decode will typically add a frame of latency to the presentation of the image.

Even if an &lt;img&gt;&apos;s data is available, the parallel image decoder can give us benefits. For example, when encoded data of all images are cached, loading the following site still causes about 1 sec UI hang-up. (http://www.dorothybrowser.com/test/webkitTest/imgdecode/bgimage-png/test.html) But I couldn&apos;t feel any hang-up after applying the parallel image decoder.

If ImageSource has the decoded frame, it simply returns the decoded frame without triggering parallel image decoding.


&gt;  - If the MemoryCache is under extreme pressure and thrashing, what used to be a performance problem (slower paint operations because allocation/decoding happens each draw operation) will devolve to a kind of nondeterministic behavior (some timing-dependent subset of decoded images -- possibly all images -- are never available at draw time, because the parallel decode work is evicted before it&apos;s consumed in the next frame).

Good question! We fixed Bug 90721 to avoid this problem. After Bug 90721, MemoryCache no longer removes the decoded data of CahcedImage if image will be rendered soon. So the parallel image decoding work is never evicted if clients need to render the image.

&gt; 
&gt; Incurring flashing or an extra frame of latency to the visibility of every new &lt;img&gt; element, this does not seem desirable if serial decoding would only take a small fraction of the frame time.

As I mentioned above, I don&apos;t think the parallel image decoder worsens the situation here. However, I found your concern makes sense in the following site: http://www.dorothybrowser.com/test/webkitTest/imgdecode/gmarket/kiru.kr/kiru/html/singlelongopst.htm

After applying parallel image decoding, we could notice flashing when we put the mouse cursor over images. When I saw this at the first time, I was very curious why the image in the back was flashing.  After I inspected the site, I realized that the images are not just two images: one transparent image in the front and the other in the back. They are one normal image and the other hover image. 

When we put the mouse over these images, the normal image is set to &apos;display:hidden&apos; and the hover image is set to &apos;display:block&apos;. So while the parallel image decoder is decoding the hover image, WebKit renders a white background instead. This causes flashing. If the site developer showed the transparent image in the front on top of the image in the back, flashing would&apos;ve disappeared. This is one rare case where parallel image decoder actually causes flashing. I expect we won&apos;t encounter this kind of flashing in most sites.

I want to listen opinions from all folks whether this behavior is acceptable or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692489</commentid>
    <comment_count>79</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-08-10 05:37:30 -0700</bug_when>
    <thetext>(In reply to comment #74)
&gt; https://github.com/luxtella/webkit
&gt; git://github.com/luxtella/webkit.git
&gt; parallel-image-decoders branch

Updated the github repository to reflect the latest changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692944</commentid>
    <comment_count>80</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-08-10 16:10:25 -0700</bug_when>
    <thetext>&gt; I want to listen opinions from all folks whether this behavior is acceptable or not.

The same issue of flashing is raised by James on #webkit-dev. My suggestion would be to experiment with starting image decoding during layout time.

Here&apos;s an experiment:

In RenderImage::layout() after layout rect is computed you can see if this-&gt;absoluteContentBox() and view()-&gt;viewRect() intersects. If they do you can start image decoding there (given that frameCount() == 1). Then in ParallelImageDecoder, instead of cancel the last asynchronous image decoding it waits until the decode is completed. I suspect this can bring down load time even further for complex sites because decoding starts much earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693495</commentid>
    <comment_count>81</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-08-13 03:01:47 -0700</bug_when>
    <thetext>(In reply to comment #80)
&gt; In RenderImage::layout() after layout rect is computed you can see if this-&gt;absoluteContentBox() and view()-&gt;viewRect() intersects. If they do you can start image decoding there (given that frameCount() == 1). Then in ParallelImageDecoder, instead of cancel the last asynchronous image decoding it waits until the decode is completed. I suspect this can bring down load time even further for complex sites because decoding starts much earlier.

If we should trigger image decoding before painting, I also think layout time would be the best. However, I&apos;m concerned about the following issues.
1. the hooking is needed by only parallel image decoder, not deferred image decoder.
2. I think the interval between layout time and painting time is short. So, many images will make parallel image decoder stop, which causes synchronization overhead. But we need to test it if we want to discuss more about this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>693831</commentid>
    <comment_count>82</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-08-13 11:02:35 -0700</bug_when>
    <thetext>(In reply to comment #81)
&gt; (In reply to comment #80)
&gt; &gt; In RenderImage::layout() after layout rect is computed you can see if this-&gt;absoluteContentBox() and view()-&gt;viewRect() intersects. If they do you can start image decoding there (given that frameCount() == 1). Then in ParallelImageDecoder, instead of cancel the last asynchronous image decoding it waits until the decode is completed. I suspect this can bring down load time even further for complex sites because decoding starts much earlier.
&gt; 
&gt; If we should trigger image decoding before painting, I also think layout time would be the best. However, I&apos;m concerned about the following issues.
&gt; 1. the hooking is needed by only parallel image decoder, not deferred image decoder.

Yes I agree. We don&apos;t be able to use NonImmediateBitmapImage but that I think we can live with.

&gt; 2. I think the interval between layout time and painting time is short. So, many images will make parallel image decoder stop, which causes synchronization overhead. But we need to test it if we want to discuss more about this.

The time maybe small but there should still be material improvements over existing model. Because we kick start multiple image decoding during layout time overall initial paint time would be limited by roughly the hardest to decode image.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694518</commentid>
    <comment_count>83</comment_count>
    <who name="Loïc Yhuel">loic.yhuel</who>
    <bug_when>2012-08-13 22:36:51 -0700</bug_when>
    <thetext>(In reply to comment #78)
&gt; &gt;  - If the MemoryCache is under extreme pressure and thrashing, what used to be a performance problem (slower paint operations because allocation/decoding happens each draw operation) will devolve to a kind of nondeterministic behavior (some timing-dependent subset of decoded images -- possibly all images -- are never available at draw time, because the parallel decode work is evicted before it&apos;s consumed in the next frame).
&gt; 
&gt; Good question! We fixed Bug 90721 to avoid this problem. After Bug 90721, MemoryCache no longer removes the decoded data of CahcedImage if image will be rendered soon. So the parallel image decoding work is never evicted if clients need to render the image.
&gt; 
So, if I understand correctly, in these cases the number of decoded images in the cache could be a lot higher, so the slow rendering could be replaced by an out of memory error on embedded devices. Perhaps it would be better to disable parallel decoding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696934</commentid>
    <comment_count>84</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-08-16 02:17:50 -0700</bug_when>
    <thetext>(In reply to comment #83)
&gt; So, if I understand correctly, in these cases the number of decoded images in the cache could be a lot higher, so the slow rendering could be replaced by an out of memory error on embedded devices. Perhaps it would be better to disable parallel decoding.

Yes. Bug 90721 can cause OOM on embedded devices as you concerned, but this patch is a image decoding policy change regarding space-time trade-offs. It applies equally to the current serial image decoding as well as parallel image decoding. Parallel image decoder does not spend more memory because of this patch.

Previously, the memory cache caused repeated image decoding when the cache capacity of MemoryCache is exceeded. Animation and scrolling could slow down dramatically because both could trigger image decoding every frame. Bug 90721 fixed this behavior by preventing decoded images inside the viewport from being destroyed. You can argue on this behavior change, but it is not directly relevant to parallel image decoding.

It is true that parallel image decoder spends more space; kernel objects to run more threads and temporary data used to transfer encoded and decoded data between the main thread and decoder threads. If you want to save these additional memory consumption on embedded devices, you can turn off parallel image decoder.

Currently, MemoryCache removes only the decoded data of live caches. If the size of encoded data of cached images is big enough, WebKit on embedded devices still can throw an OOM error. We need a more sophisticated policy to handle this situation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856966</commentid>
    <comment_count>85</comment_count>
    <who name="Peter Gal">galpeter</who>
    <bug_when>2013-03-18 03:53:52 -0700</bug_when>
    <thetext>While doing some tests there were a few times when the jpeg decoder printed errors (like this: &quot;Corrupt JPEG data: 76 extraneous bytes before marker 0xd9&quot;) and some of the images were partially decoded contained errors in it. 

Did you encountered such errors? Do you have got any idea why is this happening or how can it be fixed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2186732</commentid>
    <comment_count>86</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2026-03-03 14:28:05 -0800</bug_when>
    <thetext>Much of the ideas of this thread were implemented as part of Bug 155322. Duping there.

*** This bug has been marked as a duplicate of bug 155322 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151429</attachid>
            <date>2012-07-10 03:34:02 -0700</date>
            <delta_ts>2012-07-17 22:34:54 -0700</delta_ts>
            <desc>Parallel image decoders (not for review)</desc>
            <filename>0001-Add-parallel-image-decoders.patch</filename>
            <type>text/plain</type>
            <size>295292</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">RnJvbSBhYjEyNjNjNzgzZGNjNjZhNTIxMWM2MmM0MWQ0YTYwMTk0YTQ1ZjdhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLd2FuZyBZdWwgU2VvIDxza3l1bEBjb21wYW55MTAwLm5ldD4K
RGF0ZTogTW9uLCA5IEp1bCAyMDEyIDIxOjU2OjE4ICswOTAwClN1YmplY3Q6IFtQQVRDSF0gQWRk
IHBhcmFsbGVsIGltYWdlIGRlY29kZXJzLgoKLS0tCiBTb3VyY2UvV1RGL0NoYW5nZUxvZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMjUgKysrKysrKwogU291cmNlL1dURi9HTlVt
YWtlZmlsZS5saXN0LmFtICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKIFNvdXJjZS9XVEYv
V1RGLnBybyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCiBTb3VyY2Uv
V1RGL1dURi52Y3Byb2ovV1RGLnZjcHJvaiAgICAgICAgICAgICAgICAgICB8ICAgMTIgKwogU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiAgICAgICAgICAgfCAgIDEyICsK
IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0ICAgICAgICAgICAgICAgICAgICAgIHwgICAg
MiArCiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVmbC5jbWFrZSAgICAgICAgICAgICAgICAgICB8
ICAgIDEgKwogU291cmNlL1dURi93dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oICAgICAg
ICAgfCAgIDU5ICsrKysKIFNvdXJjZS9XVEYvd3RmL1dvcmtRdWV1ZS5jcHAgICAgICAgICAgICAg
ICAgICAgICAgIHwgICA1NSArKysrCiBTb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaCAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAyMTYgKysrKysrKysrKysrKwogU291cmNlL1dURi93dGYvY2hy
b21pdW0vTWFpblRocmVhZENocm9taXVtLmNwcCAgICAgfCAgIDEzICsKIFNvdXJjZS9XVEYvd3Rm
L2VmbC9Xb3JrUXVldWVFZmwuY3BwICAgICAgICAgICAgICAgIHwgIDE3MyArKysrKysrKysrCiBT
b3VyY2UvV1RGL3d0Zi9ndGsvV29ya1F1ZXVlR3RrLmNwcCAgICAgICAgICAgICAgICB8ICAyMjkg
KysrKysrKysrKysrKwogU291cmNlL1dURi93dGYvbWFjL1dvcmtRdWV1ZU1hYy5jcHAgICAgICAg
ICAgICAgICAgfCAgMTc4ICsrKysrKysrKysKIFNvdXJjZS9XVEYvd3RmL3F0L1dvcmtRdWV1ZVF0
LmNwcCAgICAgICAgICAgICAgICAgIHwgIDEzMiArKysrKysrKwogU291cmNlL1dURi93dGYvd2lu
L1dvcmtRdWV1ZVdpbi5jcHAgICAgICAgICAgICAgICAgfCAgMjkxICsrKysrKysrKysrKysrKysr
CiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgICAgICAgICB8ICAg
IDIgKwogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgMzQwICsrKysrKysrKysrKysrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtICAgICAgICAgICAgICAgICB8ICAgIDYgKwogU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA4ICsKIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArCiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiAgICAgICB8ICAgMjQgKysKIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiAgIHwgICAxMiArCiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwICAgICAgICB8ICAgMTkgKy0KIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oICAgICAgICAgIHwgICAgNCAr
LQogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmggICAgICAgfCAg
ICAzICsKIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAgICAgICAg
IHwgICAgNiArCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAgICB8ICAxNTAgKysrKysrLS0tCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5oICAgICB8ICAgNTEgKystCiAuLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwICB8ICAgIDUgKy0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmNwcCAgICAgICAgIHwgICAgNSArCiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZS5oICAgICAgICAgICB8ICAgIDEgKwogLi4uL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlRGVjb2RlV29ya2VyLmNwcCAgICAgICAgfCAgMTI2ICsrKysrKysrCiAuLi4v
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZVdvcmtlci5oICB8ICAgNzQgKysr
KysKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCAgIHwg
IDE4OSArKysrKysrKystLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuaCAgICAgfCAgIDg2ICsrKystCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3Vy
Y2VPYnNlcnZlci5oICAgICAgICB8ICAgNDQgKysrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvUGFy
YWxsZWxJbWFnZURlY29kZXIuY3BwICAgICB8ICAyOTggKysrKysrKysrKysrKysrKysKIC4uLi9w
bGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlci5oICAgICAgIHwgIDEwOCArKysr
KysrCiAuLi4vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZlci5oICAgICAgICB8
ICAgNDQgKysrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2Uu
Y3BwICB8ICAxODcgKysrKysrKysrKysKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9SZXRhaW5lZE1v
ZGVCaXRtYXBJbWFnZS5oICAgIHwgIDEwNCArKysrKysKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcCAgIHwgICAgOCArLQogLi4uL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwICAgICAgfCAgICA3ICstCiAuLi4vcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAgICB8ICAgIDMgKy0KIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwICAgIHwgICAxMCArLQogLi4u
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAgfCAgIDM5ICsr
LQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9JbWFnZU9wZW5WRy5jcHAgICAgICAgfCAg
ICA4ICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcCAg
ICB8ICAgIDkgKy0KIC4uLi9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAg
ICAgICAgIHwgICAgOSArLQogLi4uL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZVNraWEuY3BwICAgfCAgICA1ICstCiAuLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9JbWFnZVdpbkNFLmNwcCB8ICAgIDUgKy0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3d4L0ltYWdlV3guY3BwICAgIHwgICAgOCArLQogLi4uL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5jcHAgICAgICAgfCAgICA0ICsKIC4uLi9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oIHwgICAxMSArCiAuLi4vaW1hZ2UtZGVjb2Rl
cnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmNwcCB8ICAgIDEgKwogLi4uL2ltYWdlLWRl
Y29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwICAgICAgICAgfCAgICA5ICstCiAuLi4vcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcCB8ICAgIDcgKy0KIC4u
Li9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCAgICAgICAgIHwgICAgNyAr
LQogLi4uL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAgICAgICAgfCAg
ICAyICsKIC4uLi9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcCAgICAgICAg
IHwgICAgMSArCiAuLi4vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcCAg
ICAgICB8ICAgIDMgKwogLi4uL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5j
cHAgICAgICAgfCAgIDI1ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5jcHAgICAgICAgICB8ICAgIDkgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwICAgICAgICAgICAgIHwgICAxMyArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcCAgfCAgIDI5ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW1hZ2UuY3BwICAgICAgICAgICB8ICAgMTAgKy0KIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwICAgIHwgICAgNSArCiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAgICAgICB8ICAgIDMgKy0KIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwICAgICAgICAgIHwgICAxNSArLQogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oICAgICAgICAgICAgfCAgICA0ICst
CiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmNwcCAgICAgICB8ICAg
IDcgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuaCAgICAgICAg
IHwgICAgNCArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5j
cHAgICAgfCAgICA1ICstCiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyAgICAgICAg
ICAgICAgICAgICB8ICAgMTYgKwogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VD
Ry5jcHAgICAgICAgICAgfCAgICAzICstCiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJ
bWFnZVNraWEuY3BwICAgICAgICB8ICAgIDMgKy0KIFNvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMu
dHh0ICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAtCiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjkgKysKIFNvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgIHwgICAgNiAtCiBTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaCAgICAgICB8ICAgIDYgKy0KIC4uLi9QbGF0
Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwICAgICAgIHwgICAgMiArLQogLi4u
L1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oICAgfCAgIDU3IC0t
LS0KIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAgICAgICAgICAgICAgIHwg
ICA1MSAtLS0KIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oICAgICAgICAgICAg
ICAgIHwgIDIxMCAtLS0tLS0tLS0tLS0KIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3Jr
UXVldWVFZmwuY3BwICAgICAgIHwgIDE3MyAtLS0tLS0tLS0tCiBTb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcCAgICAgICB8ICAyMzAgLS0tLS0tLS0tLS0tLQogU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAgICAgICAgfCAgMTc4IC0t
LS0tLS0tLS0KIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcCAgICAg
ICAgIHwgIDEzMCAtLS0tLS0tLQogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1
ZVdpbi5jcHAgICAgICAgfCAgMjkxIC0tLS0tLS0tLS0tLS0tLS0tCiBTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUVmbC5jbWFrZSAgICAgICAgICAgICAgICAgICB8ICAgIDEgLQogU291cmNlL1dlYktp
dDIvVGFyZ2V0LnByaSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1IC0KIC4uLi9XZWJL
aXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuY3BwIHwgICAgMiArLQogLi4u
L1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oICAgfCAgICAyICst
CiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaCB8ICAg
IDIgKy0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCAgICAgICAgICAg
IHwgICAgMiArLQogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oICAg
ICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogICB8ICAgMTIgLQogU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9qICAg
ICAgICAgICAgICAgICAgfCAgIDEyIC0KIDk5IGZpbGVzIGNoYW5nZWQsIDM1NDggaW5zZXJ0aW9u
cygrKSwgMTU2OSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V1RGL3d0Zi9Xb3JrUXVldWUuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dURi93dGYv
V29ya1F1ZXVlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV1RGL3d0Zi9lZmwvV29ya1F1
ZXVlRWZsLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XVEYvd3RmL2d0ay9Xb3JrUXVl
dWVHdGsuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dURi93dGYvbWFjL1dvcmtRdWV1
ZU1hYy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV1RGL3d0Zi9xdC9Xb3JrUXVldWVR
dC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV1RGL3d0Zi93aW4vV29ya1F1ZXVlV2lu
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlRGVjb2RlV29ya2VyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2RlV29ya2VyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZU9ic2VydmVyLmgK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXJh
bGxlbEltYWdlRGVjb2Rlci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlci5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURlY29kZXJP
YnNlcnZlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaAog
ZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vz
c0lkZW50aWZpZXIuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L1dvcmtRdWV1ZS5jcHAKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9Xb3JrUXVldWUuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L2VmbC9Xb3JrUXVldWVFZmwuY3BwCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcAogZGVsZXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcAogZGVsZXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3dpbi9Xb3JrUXVldWVXaW4uY3BwCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRl
eCBiZTVjZmVkLi5hY2JiNTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOCBAQAorMjAxMi0wNy0wOSAgS3dh
bmcgWXVsIFNlbyAgPHNreXVsQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIE1vdmUgV29ya1F1
ZXVlIHRvIFdURgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTA3ODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDdXJyZW50bHksIFdvcmtRdWV1ZSBpcyBpbiBXZWJLaXQyLiBCeSBtb3ZpbmcgV29ya1F1ZXVl
IGFuZAorICAgICAgICBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHRvIFdURiwgV2ViQ29yZSBj
b2RlIGNhbiB1c2UgaXQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyByZXF1aXJlZCBmb3IgcGFy
YWxsZWwgaW1hZ2UgZGVjb2RlcnMgYmVjYXVzZQorICAgICAgICBXb3JrUXVldWUgaXMgdXNlZCB0
byBtYWtlIGltYWdlIGRlY29kaW5nIG9mZiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdURi5wcm86CisgICAgICAgICogV1RGLnZj
cHJvai9XVEYudmNwcm9qOgorICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1F
ZmwuY21ha2U6CisgICAgICAgICogd3RmL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZp
ZXIuaC4KKyAgICAgICAgKFdURik6CisgICAgICAgICogd3RmL1dvcmtRdWV1ZS5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuY3BwLgorICAgICAgICAo
V1RGKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrUXVldWUpOgorICAgICAgICAoV1RG
OjpXb3JrUXVldWU6On5Xb3JrUXVldWUpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OmludmFs
aWRhdGUpOgorICAgICAgICAqIHd0Zi9Xb3JrUXVldWUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdv
cmtRdWV1ZSk6CisgICAgICAgIChXb3JrSXRlbVdpbik6CisgICAgICAgIChXVEY6OldvcmtRdWV1
ZTo6V29ya0l0ZW1XaW46OmZ1bmN0aW9uKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3Jr
SXRlbVdpbjo6cXVldWUpOgorICAgICAgICAoSGFuZGxlV29ya0l0ZW0pOgorICAgICAgICAoV1RG
OjpXb3JrUXVldWU6OkhhbmRsZVdvcmtJdGVtOjpzZXRXYWl0SGFuZGxlKToKKyAgICAgICAgKFdU
Rjo6V29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6d2FpdEhhbmRsZSk6CisgICAgICAgICogd3Rm
L2VmbC9Xb3JrUXVldWVFZmwuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vZWZsL1dvcmtRdWV1ZUVmbC5jcHAuCisgICAgICAgIChUaW1lcldvcmtJdGVtKToKKyAgICAg
ICAgKFRpbWVyV29ya0l0ZW06OlRpbWVyV29ya0l0ZW0pOgorICAgICAgICAoVGltZXJXb3JrSXRl
bTo6flRpbWVyV29ya0l0ZW0pOgorICAgICAgICAoVGltZXJXb3JrSXRlbTo6ZnVuY3Rpb24pOgor
ICAgICAgICAoVGltZXJXb3JrSXRlbTo6cXVldWUpOgorICAgICAgICAoVGltZXJXb3JrSXRlbTo6
dGltZXJJRCk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAg
ICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChXb3JrUXVldWU6
OnBlcmZvcm1Xb3JrKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGVyZm9ybUZpbGVEZXNjcmlwdG9y
V29yayk6CisgICAgICAgIChXb3JrUXVldWU6OnNlbmRNZXNzYWdlVG9UaHJlYWQpOgorICAgICAg
ICAoV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQpOgorICAgICAgICAoV29ya1F1ZXVlOjpyZWdp
c3RlclNvY2tldEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJT
b2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNwYXRjaCk6CisgICAg
ICAgIChXb3JrUXVldWU6OnRpbWVyRmlyZWQpOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNwYXRj
aEFmdGVyRGVsYXkpOgorICAgICAgICAqIHd0Zi9ndGsvV29ya1F1ZXVlR3RrLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwLgorICAg
ICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50
U291cmNlOjpFdmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpj
YW5jZWwpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZXhlY3V0ZUV2ZW50U291
cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25jZSk6
CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpwZXJmb3JtV29yayk6CisgICAgICAg
IChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpwZXJmb3JtV29ya09uVGVybWluYXRpb24pOgorICAg
ICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGVsZXRlRXZlbnRTb3VyY2UpOgorICAgICAg
ICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV29ya1F1ZXVlOjpw
bGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoV29ya1F1ZXVlOjpzdGFydFdvcmtRdWV1ZVRo
cmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVhZEJvZHkpOgorICAgICAg
ICAoV29ya1F1ZXVlOjpyZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcik6CisgICAgICAgIChXb3Jr
UXVldWU6OnVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIpOgorICAgICAgICAoV29ya1F1ZXVl
OjpkaXNwYXRjaE9uU291cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2gpOgorICAg
ICAgICAoV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkpOgorICAgICAgICAoV29ya1F1ZXVl
OjpkaXNwYXRjaE9uVGVybWluYXRpb24pOgorICAgICAgICAqIHd0Zi9tYWMvV29ya1F1ZXVlTWFj
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVldWVN
YWMuY3BwLgorICAgICAgICAoV29ya1F1ZXVlOjpleGVjdXRlRnVuY3Rpb24pOgorICAgICAgICAo
V29ya1F1ZXVlOjpkaXNwYXRjaCk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJE
ZWxheSk6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlKToKKyAgICAgICAgKFdvcmtR
dWV1ZTo6RXZlbnRTb3VyY2U6OkV2ZW50U291cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZl
bnRTb3VyY2U6OmRpc3BhdGNoU291cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3Vy
Y2U6OmV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpjYW5j
ZWxIYW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmZpbmFsaXplSGFu
ZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIp
OgorICAgICAgICAoV29ya1F1ZXVlOjp1bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIpOgor
ICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAoV29ya1F1
ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAqIHd0Zi9xdC9Xb3JrUXVldWVRdC5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5j
cHAuCisgICAgICAgIChXVEYpOgorICAgICAgICAoV29ya1F1ZXVlOjpXb3JrSXRlbVF0KToKKyAg
ICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVF0OjpXb3JrSXRlbVF0KToKKyAgICAgICAg
KFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVF0Ojp+V29ya0l0ZW1RdCk6CisgICAgICAgIChXVEY6
OldvcmtRdWV1ZTo6V29ya0l0ZW1RdDo6ZXhlY3V0ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1
ZTo6V29ya0l0ZW1RdDo6ZXhlY3V0ZUFuZERlbGV0ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1
ZTo6V29ya0l0ZW1RdDo6dGltZXJFdmVudCk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6cmVn
aXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OnBsYXRm
b3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlk
YXRlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpkaXNwYXRjaCk6CisgICAgICAgIChXVEY6
OldvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVl
OjpkaXNwYXRjaE9uVGVybWluYXRpb24pOgorICAgICAgICAqIHd0Zi93aW4vV29ya1F1ZXVlV2lu
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3dpbi9Xb3JrUXVldWVX
aW4uY3BwLgorICAgICAgICAoV29ya1F1ZXVlOjpXb3JrSXRlbVdpbjo6V29ya0l0ZW1XaW4pOgor
ICAgICAgICAoV29ya1F1ZXVlOjpXb3JrSXRlbVdpbjo6Y3JlYXRlKToKKyAgICAgICAgKFdvcmtR
dWV1ZTo6V29ya0l0ZW1XaW46On5Xb3JrSXRlbVdpbik6CisgICAgICAgIChXb3JrUXVldWU6Okhh
bmRsZVdvcmtJdGVtOjpIYW5kbGVXb3JrSXRlbSk6CisgICAgICAgIChXb3JrUXVldWU6OkhhbmRs
ZVdvcmtJdGVtOjpjcmVhdGVCeUFkb3B0aW5nSGFuZGxlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6
SGFuZGxlV29ya0l0ZW06On5IYW5kbGVXb3JrSXRlbSk6CisgICAgICAgIChXb3JrUXVldWU6Omhh
bmRsZUNhbGxiYWNrKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cmVnaXN0ZXJIYW5kbGUpOgorICAg
ICAgICAoV29ya1F1ZXVlOjp1bnJlZ2lzdGVyQW5kQ2xvc2VIYW5kbGUpOgorICAgICAgICAoV29y
a1F1ZXVlOjp3b3JrVGhyZWFkQ2FsbGJhY2spOgorICAgICAgICAoV29ya1F1ZXVlOjpwZXJmb3Jt
V29ya09uUmVnaXN0ZXJlZFdvcmtUaHJlYWQpOgorICAgICAgICAoV29ya1F1ZXVlOjpwbGF0Zm9y
bUluaXRpYWxpemUpOgorICAgICAgICAoV29ya1F1ZXVlOjp0cnlSZWdpc3RlckFzV29ya1RocmVh
ZCk6CisgICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJBc1dvcmtUaHJlYWQpOgorICAgICAg
ICAoV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAgICAoV29ya1F1ZXVlOjpk
aXNwYXRjaCk6CisgICAgICAgIChUaW1lckNvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChUaW1l
ckNvbnRleHQpOgorICAgICAgICAoVGltZXJDb250ZXh0OjpUaW1lckNvbnRleHQpOgorICAgICAg
ICAoV29ya1F1ZXVlOjp0aW1lckNhbGxiYWNrKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0
Y2hBZnRlckRlbGF5KToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3RlcldhaXRBbmREZXN0
cm95SXRlbVNvb24pOgorICAgICAgICAoV29ya1F1ZXVlOjp1bnJlZ2lzdGVyV2FpdEFuZERlc3Ry
b3lJdGVtQ2FsbGJhY2spOgorCiAyMDEyLTA3LTA5ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJv
c2VudGhhbEBub2tpYS5jb20+CiAKICAgICAgICAgU2hhcmVkIGNvZGUgdGhhdCBpcyBndWFyZGVk
IHdpdGggRU5BQkxFKFdFQkdMKSBzaG91bGQgYmUgZ3VhcmRlZCB3aXRoIFVTRSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV1RGL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KaW5kZXggYzVmNDhhNi4uY2YyYTA4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5h
bQpAQCAtMTY0LDYgKzE2NCw4IEBAIHd0Zl9zb3VyY2VzICs9IFwKICAgICBTb3VyY2UvV1RGL3d0
Zi9WYWx1ZUNoZWNrLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oIFwKICAgICBTb3Vy
Y2UvV1RGL3d0Zi9WZWN0b3JUcmFpdHMuaCBcCisgICAgU291cmNlL1dURi93dGYvV29ya1F1ZXVl
LmNwcCBcCisgICAgU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmggXAogICAgIFNvdXJjZS9XVEYv
d3RmL1dURlRocmVhZERhdGEuY3BwIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRh
LmggXAogICAgIFNvdXJjZS9XVEYvd3RmL2R0b2EuY3BwIFwKQEAgLTE5NCw2ICsxOTYsNyBAQCB3
dGZfc291cmNlcyArPSBcCiAgICAgU291cmNlL1dURi93dGYvZ29iamVjdC9HbGliVXRpbGl0aWVz
LmNwcCBcCiAgICAgU291cmNlL1dURi93dGYvZ29iamVjdC9HbGliVXRpbGl0aWVzLmggXAogICAg
IFNvdXJjZS9XVEYvd3RmL2d0ay9NYWluVGhyZWFkR3RrLmNwcCBcCisgICAgU291cmNlL1dURi93
dGYvZ3RrL1dvcmtRdWV1ZUd0ay5jcHAgXAogICAgIFNvdXJjZS9XVEYvd3RmL3RleHQvQVNDSUlG
YXN0UGF0aC5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5jcHAgXAog
ICAgIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmggXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9XVEYucHJvIGIvU291cmNlL1dURi9XVEYucHJvCmluZGV4IDA5NjJlZjAuLjg4NmIy
ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnBybworKysgYi9Tb3VyY2UvV1RGL1dURi5w
cm8KQEAgLTE2Myw2ICsxNjMsNyBAQCBIRUFERVJTICs9IFwKICAgICBWZWN0b3IuaCBcCiAgICAg
VmVjdG9yVHJhaXRzLmggXAogICAgIFZNVGFncy5oIFwKKyAgICBXb3JrUXVldWUuaCBcCiAgICAg
V1RGVGhyZWFkRGF0YS5oCiAKIHVuaXg6IEhFQURFUlMgKz0gVGhyZWFkSWRlbnRpZmllckRhdGFQ
dGhyZWFkcy5oCkBAIC0xOTksNiArMjAwLDcgQEAgU09VUkNFUyArPSBcCiAgICAgT1NSYW5kb21T
b3VyY2UuY3BwIFwKICAgICBxdC9NYWluVGhyZWFkUXQuY3BwIFwKICAgICBxdC9TdHJpbmdRdC5j
cHAgXAorICAgIHF0L1dvcmtRdWV1ZVF0LmNwcCBcCiAgICAgUGFnZUFsbG9jYXRpb25BbGlnbmVk
LmNwcCBcCiAgICAgUGFnZUJsb2NrLmNwcCBcCiAgICAgUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAg
XApAQCAtMjA5LDYgKzIxMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFRDU3lzdGVtQWxsb2MuY3Bw
IFwKICAgICBUaHJlYWRpbmcuY3BwIFwKICAgICBUeXBlVHJhaXRzLmNwcCBcCisgICAgV29ya1F1
ZXVlLmNwcCBcCiAgICAgV1RGVGhyZWFkRGF0YS5jcHAgXAogICAgIHRleHQvQXRvbWljU3RyaW5n
LmNwcCBcCiAgICAgdGV4dC9DU3RyaW5nLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dU
Ri52Y3Byb2ovV1RGLnZjcHJvaiBiL1NvdXJjZS9XVEYvV1RGLnZjcHJvai9XVEYudmNwcm9qCmlu
ZGV4IDIxOTBkYWUuLjFjYzdhZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnZjcHJvai9X
VEYudmNwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnZjcHJvai9XVEYudmNwcm9qCkBAIC0zNDMs
NiArMzQzLDEwIEBACiAJCQkJUmVsYXRpdmVQYXRoPSIuLlx3dGZcd2luXE93blB0cldpbi5jcHAi
CiAJCQkJPgogCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHd0Zlx3
aW5cV29ya1F1ZXVlV2luLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CiAJCTwvRmlsdGVyPgogCQk8
RmlsdGVyCiAJCQlOYW1lPSJ1bmljb2RlIgpAQCAtMTIxMyw2ICsxMjE3LDE0IEBACiAJCQk+CiAJ
CTwvRmlsZT4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cd3RmXFdvcmtRdWV1ZS5jcHAi
CisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cd3RmXFdvcmtR
dWV1ZS5oIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXHd0
ZlxXVEZUaHJlYWREYXRhLmNwcCIKIAkJCT4KIAkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNzcyMDQ2MS4uZmNkMDIxZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzksNiArMjM5LDkgQEAKIAkJQThB
NDc0N0UxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNzAxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3Rv
ci5oICovOyB9OwogCQlBOEE0NzQ3RjE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM3MTE1
MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggKi87IH07CiAJCUE4QTQ3NDgwMTUxQTgy
NUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4QTQ3MzcyMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCAqLzsgfTsK
KwkJQkMyRTZFOEQxMTQxOTcxNTAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJFNkU3RDExNDE5NzBDMDBBNjNC
MUUgLyogV29ya1F1ZXVlLmNwcCAqLzsgfTsKKwkJQkMyRTZFOEUxMTQxOTcxNTAwQTYzQjFFIC8q
IFdvcmtRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMyRTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oICovOyB9OworCQlCQzAw
OTJGODExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDA5MkY2MTE1ODM3QTMwMEUwQUUyQSAv
KiBXb3JrUXVldWVNYWMuY3BwICovOyB9OwogCQlBOEE0NzQ4NjE1MUE4MjVCMDA0MTIzRkYgLyog
V1RGVGhyZWFkRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEE0NzM3QTE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5jcHAgKi87
IH07CiAJCUE4QTQ3NDg3MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM3QjE1MUE4MjVC
MDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5oICovOyB9OwogCQlBOEE0NzQ4QzE1MUE4MjY0MDA0
MTIzRkYgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEE0NzQ4QjE1MUE4MjY0MDA0MTIzRkYgLyogY29uZmlnLmggKi87IH07CkBAIC00
ODcsNiArNDkwLDkgQEAKIAkJQThBNDczNzAxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3Rvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQThBNDczNzExNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWZWN0b3JUcmFpdHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczNzIxNTFBODI1QjAwNDEyM0ZGIC8qIFZNVGFn
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTVRhZ3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkMyRTZFN0QxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrUXVldWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzJFNkU3RTExNDE5NzBDMDBBNjNCMUUg
LyogV29ya1F1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmtRdWV1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzAwOTJGNjExNTgzN0EzMDBFMEFF
MkEgLyogV29ya1F1ZXVlTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdvcmtRdWV1ZU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3
MzdBMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdURlRocmVhZERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBOEE0NzM3QjE1MUE4MjVCMDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXVEZUaHJlYWREYXRhLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3NDhCMTUxQTgyNjQwMDQxMjNGRiAvKiBjb25m
aWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29uZmlnLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MTcsNiArNzIzLDggQEAKIAkJCQlBOEE0NzM3MDE1MUE4
MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggKi8sCiAJCQkJQThBNDczNzExNTFBODI1QjAwNDEyM0ZG
IC8qIFZlY3RvclRyYWl0cy5oICovLAogCQkJCUE4QTQ3MzcyMTUxQTgyNUIwMDQxMjNGRiAvKiBW
TVRhZ3MuaCAqLywKKwkJCQlCQzJFNkU3RDExNDE5NzBDMDBBNjNCMUUgLyogV29ya1F1ZXVlLmNw
cCAqLywKKwkJCQlCQzJFNkU3RTExNDE5NzBDMDBBNjNCMUUgLyogV29ya1F1ZXVlLmggKi8sCiAJ
CQkJQThBNDczN0ExNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERhdGEuY3BwICovLAogCQkJ
CUE4QTQ3MzdCMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmggKi8sCiAJCQkJQTg3
NkRCRDcxNTE4MTZFNTAwREFEQjk1IC8qIFBsYXRmb3JtLmggKi8sCkBAIC03NTYsNiArNzY0LDcg
QEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQThBNDcyQzUxNTFB
ODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJlYWRNYWMubW0gKi8sCisJCQkJQkMwMDkyRjYxMTU4MzdB
MzAwRTBBRTJBIC8qIFdvcmtRdWV1ZU1hYy5jcHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9IG1hYzsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMDM3LDYgKzEwNDYsNyBAQAogCQkJCUE4
QTQ3NDdFMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3NDdGMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3NDgwMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCBpbiBIZWFkZXJzICovLAor
CQkJCUJDMkU2RThFMTE0MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDg3MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzQ4QzE1MUE4MjY0MDA0MTIzRkYgLyogY29uZmlnLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDNGNjEyMDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xMTg2LDYgKzExOTYsOCBAQAogCQkJCUE4QTQ3NDc0MTUxQTgyNUIwMDQx
MjNGRiAvKiBVUkxDaGFyYWN0ZXJUeXBlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ3
NzE1MUE4MjVCMDA0MTIzRkYgLyogVVJMRXNjYXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
QTQ3NDdCMTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxTZWdtZW50cy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlCQzJFNkU4RDExNDE5NzE1MDBBNjNCMUUgLyogV29ya1F1ZXVlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUJDMDA5MkY4MTE1ODM3QTMwMEUwQUUyQSAvKiBXb3JrUXVldWVNYWMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0ODYxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJB
TVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCAy
NzRmMDRjLi5iZTk1NGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4
dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAtMTAyLDYgKzEwMiw3IEBA
IFNFVChXVEZfSEVBREVSUwogICAgIFZhbHVlQ2hlY2suaAogICAgIFZlY3Rvci5oCiAgICAgVmVj
dG9yVHJhaXRzLmgKKyAgICBXb3JrUXVldWUuaAogICAgIFdURlRocmVhZERhdGEuaAogICAgIGR0
b2EuaAogCkBAIC0xNjEsNiArMTYyLDcgQEAgU0VUKFdURl9TT1VSQ0VTCiAgICAgU3RyaW5nRXh0
cmFzLmNwcAogICAgIFRocmVhZGluZy5jcHAKICAgICBUeXBlVHJhaXRzLmNwcAorICAgIFdvcmtR
dWV1ZS5jcHAKICAgICBXVEZUaHJlYWREYXRhLmNwcAogICAgIGR0b2EuY3BwCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1FZmwuY21ha2UKaW5kZXggMWExM2RiYi4uZmQxN2Y1NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1F
ZmwuY21ha2UKQEAgLTEsNiArMSw3IEBACiBMSVNUKEFQUEVORCBXVEZfU09VUkNFUwogICAgIGVm
bC9NYWluVGhyZWFkRWZsLmNwcAogICAgIGVmbC9Pd25QdHJFZmwuY3BwCisgICAgZWZsL1dvcmtR
dWV1ZUVmbC5jcHAKICAgICBnb2JqZWN0L0dPd25QdHIuY3BwCiAgICAgZ29iamVjdC9HUmVmUHRy
LmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlm
aWVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdmZjUzYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaApAQCAtMCwwICsxLDU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXJfaAor
I2RlZmluZSBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyX2gKKworI2lmIFBMQVRGT1JNKFFUKQor
Y2xhc3MgUVByb2Nlc3M7CisjZWxpZiBQTEFURk9STShFRkwpCisjaW5jbHVkZSA8dW5pc3RkLmg+
CisjZW5kaWYKKworbmFtZXNwYWNlIFdURiB7CisKKyNpZiBQTEFURk9STShNQUMpCit0eXBlZGVm
IHBpZF90IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CisjZWxpZiBQTEFURk9STShXSU4pCit0
eXBlZGVmIEhBTkRMRSBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOworI2VsaWYgUExBVEZPUk0o
UVQpCit0eXBlZGVmIFFQcm9jZXNzKiBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOworI2VsaWYg
UExBVEZPUk0oR1RLKQorI2lmZGVmIEdfT1NfV0lOMzIKK3R5cGVkZWYgdm9pZCogR1BpZDsKKyNl
bHNlCit0eXBlZGVmIGludCBHUGlkOworI2VuZGlmCit0eXBlZGVmIEdQaWQgUGxhdGZvcm1Qcm9j
ZXNzSWRlbnRpZmllcjsKKyNlbGlmIFBMQVRGT1JNKEVGTCkKK3R5cGVkZWYgcGlkX3QgUGxhdGZv
cm1Qcm9jZXNzSWRlbnRpZmllcjsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNp
bmcgV1RGOjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOworCisjZW5kaWYgLy8gUGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUu
Y3BwIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi44ZjVmZDE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYv
V29ya1F1ZXVlLmNwcApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgorCituYW1lc3BhY2UgV1RGIHsKKworV29y
a1F1ZXVlOjpXb3JrUXVldWUoY29uc3QgY2hhciogbmFtZSkKKyAgICA6IG1faXNWYWxpZCh0cnVl
KQoreworICAgIHBsYXRmb3JtSW5pdGlhbGl6ZShuYW1lKTsKK30KKworV29ya1F1ZXVlOjp+V29y
a1F1ZXVlKCkKK3sKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1faXNWYWxpZE11dGV4KTsKKyAgICBBU1NFUlQoIW1faXNWYWxpZCk7CisjZW5kaWYKK30KKwor
dm9pZCBXb3JrUXVldWU6OmludmFsaWRhdGUoKQoreworICAgIHsKKyAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1faXNWYWxpZE11dGV4KTsKKyAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Cisg
ICAgfQorCisgICAgcGxhdGZvcm1JbnZhbGlkYXRlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmggYi9Tb3VyY2UvV1RGL3d0
Zi9Xb3JrUXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzBjYjk4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKQEAgLTAsMCAr
MSwyMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmls
aXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdvcmtR
dWV1ZV9oCisjZGVmaW5lIFdvcmtRdWV1ZV9oCisKKyNpZiBPUyhEQVJXSU4pCisjaWYgSEFWRShE
SVNQQVRDSF9IKQorI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CisjZW5kaWYKKyNlbmRp
ZgorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiAoUExBVEZPUk0oUVQpICYmICFPUyhEQVJX
SU4pKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKKyNpbmNsdWRlICJQbGF0Zm9y
bVByb2Nlc3NJZGVudGlmaWVyLmgiCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKSAmJiAhT1Mo
REFSV0lOKQorI2luY2x1ZGUgPFFTb2NrZXROb3RpZmllcj4KK2NsYXNzIFFPYmplY3Q7CitjbGFz
cyBRVGhyZWFkOworI2VsaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dS
ZWZQdHIuaD4KK3R5cGVkZWYgZ2Jvb2xlYW4gKCpHU291cmNlRnVuYykgKGdwb2ludGVyIGRhdGEp
OworI2VsaWYgUExBVEZPUk0oRUZMKQorI2luY2x1ZGUgPEVjb3JlLmg+CisjZW5kaWYKKworbmFt
ZXNwYWNlIFdURiB7CisKK2NsYXNzIFdvcmtRdWV1ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoV29ya1F1ZXVlKTsKKworcHVibGljOgorICAgIGV4cGxpY2l0IFdvcmtRdWV1ZShjb25zdCBj
aGFyKiBuYW1lKTsKKyAgICB+V29ya1F1ZXVlKCk7CisKKyAgICAvLyBXaWxsIGRpc3BhdGNoIHRo
ZSBnaXZlbiBmdW5jdGlvbiB0byBydW4gYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAgICB2b2lkIGRp
c3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKworICAgIC8vIFdpbGwgZGlzcGF0Y2gg
dGhlIGdpdmVuIGZ1bmN0aW9uIGFmdGVyIHRoZSBnaXZlbiBkZWxheSAoaW4gc2Vjb25kcykuCisg
ICAgdm9pZCBkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIGRvdWJs
ZSBkZWxheSk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKworI2lmIE9TKERBUldJTikKKyAg
ICBlbnVtIE1hY2hQb3J0RXZlbnRUeXBlIHsKKyAgICAgICAgLy8gRmlyZWQgd2hlbiB0aGVyZSBp
cyBkYXRhIG9uIHRoZSBnaXZlbiByZWNlaXZlIHJpZ2h0LgorICAgICAgICBNYWNoUG9ydERhdGFB
dmFpbGFibGUsCisgICAgICAgIAorICAgICAgICAvLyBGaXJlZCB3aGVuIHRoZSByZWNlaXZlIHJp
Z2h0IGZvciB0aGlzIHNlbmQgcmlnaHQgaGFzIGJlZW4gZGVzdHJveWVkLgorICAgICAgICBNYWNo
UG9ydERlYWROYW1lTm90aWZpY2F0aW9uCisgICAgfTsKKyAgICAKKyAgICAvLyBXaWxsIGV4ZWN1
dGUgdGhlIGdpdmVuIGZ1bmN0aW9uIHdoZW5ldmVyIHRoZSBnaXZlbiBtYWNoIHBvcnQgZXZlbnQg
ZmlyZXMuCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgd2lsbCBhZG9wdCB0aGUgbWFjaCBwb3J0IGFu
ZCBkZXN0cm95IGl0IHdoZW4gdGhlIHdvcmsgcXVldWUgaXMgaW52YWxpZGF0ZWQuCisgICAgdm9p
ZCByZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90LCBNYWNoUG9ydEV2ZW50
VHlwZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZvaWQgdW5yZWdpc3Rlck1hY2hQ
b3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90KTsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICB2
b2lkIHJlZ2lzdGVySGFuZGxlKEhBTkRMRSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAg
IHZvaWQgdW5yZWdpc3RlckFuZENsb3NlSGFuZGxlKEhBTkRMRSk7CisjZWxpZiBQTEFURk9STShR
VCkKKyAgICBRU29ja2V0Tm90aWZpZXIqIHJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCwg
UVNvY2tldE5vdGlmaWVyOjpUeXBlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisgICAgdm9p
ZCBkaXNwYXRjaE9uVGVybWluYXRpb24oUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciwgY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYpOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIHZvaWQgcmVnaXN0
ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50LCBpbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsK
KyAgICB2b2lkIHVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50KTsKKyAgICB2b2lkIGRp
c3BhdGNoT25UZXJtaW5hdGlvbihQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLCBjb25zdCBGdW5j
dGlvbjx2b2lkKCk+Jik7CisjZWxpZiBQTEFURk9STShFRkwpCisgICAgdm9pZCByZWdpc3RlclNv
Y2tldEV2ZW50SGFuZGxlcihpbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lk
IHVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50KTsKKyNlbmRpZgorCitwcml2YXRlOgor
ICAgIC8vIEZJWE1FOiBVc2UgYW4gYXRvbWljIGJvb2xlYW4gaGVyZSBpbnN0ZWFkLgorICAgIE11
dGV4IG1faXNWYWxpZE11dGV4OworICAgIGJvb2wgbV9pc1ZhbGlkOworCisgICAgdm9pZCBwbGF0
Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSk7CisgICAgdm9pZCBwbGF0Zm9ybUludmFs
aWRhdGUoKTsKKworI2lmIE9TKERBUldJTikKKyNpZiBIQVZFKERJU1BBVENIX0gpCisgICAgc3Rh
dGljIHZvaWQgZXhlY3V0ZUZ1bmN0aW9uKHZvaWQqKTsKKyAgICBNdXRleCBtX2V2ZW50U291cmNl
c011dGV4OworICAgIGNsYXNzIEV2ZW50U291cmNlOworICAgIEhhc2hNYXA8bWFjaF9wb3J0X3Qs
IEV2ZW50U291cmNlKj4gbV9ldmVudFNvdXJjZXM7CisgICAgZGlzcGF0Y2hfcXVldWVfdCBtX2Rp
c3BhdGNoUXVldWU7CisjZW5kaWYKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICBjbGFzcyBXb3Jr
SXRlbVdpbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXb3JrSXRlbVdpbj4geworICAg
IHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya0l0ZW1XaW4+IGNyZWF0ZShj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7CisgICAgICAgIHZpcnR1YWwgfldv
cmtJdGVtV2luKCk7CisKKyAgICAgICAgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24oKSB7IHJl
dHVybiBtX2Z1bmN0aW9uOyB9CisgICAgICAgIFdvcmtRdWV1ZSogcXVldWUoKSBjb25zdCB7IHJl
dHVybiBtX3F1ZXVlOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFdvcmtJdGVtV2luKGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mLCBXb3JrUXVldWUqKTsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKKyAgICAgICAgV29ya1F1ZXVlKiBtX3F1
ZXVlOworICAgIH07CisKKyAgICBjbGFzcyBIYW5kbGVXb3JrSXRlbSA6IHB1YmxpYyBXb3JrSXRl
bVdpbiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIYW5kbGVXb3Jr
SXRlbT4gY3JlYXRlQnlBZG9wdGluZ0hhbmRsZShIQU5ETEUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mLCBXb3JrUXVldWUqKTsKKyAgICAgICAgdmlydHVhbCB+SGFuZGxlV29ya0l0ZW0oKTsKKwor
ICAgICAgICB2b2lkIHNldFdhaXRIYW5kbGUoSEFORExFIHdhaXRIYW5kbGUpIHsgbV93YWl0SGFu
ZGxlID0gd2FpdEhhbmRsZTsgfQorICAgICAgICBIQU5ETEUgd2FpdEhhbmRsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fd2FpdEhhbmRsZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgSGFuZGxlV29y
a0l0ZW0oSEFORExFLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7CisKKyAg
ICAgICAgSEFORExFIG1faGFuZGxlOworICAgICAgICBIQU5ETEUgbV93YWl0SGFuZGxlOworICAg
IH07CisKKyAgICBzdGF0aWMgdm9pZCBDQUxMQkFDSyBoYW5kbGVDYWxsYmFjayh2b2lkKiBjb250
ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpOworICAgIHN0YXRpYyB2b2lkIENBTExCQUNL
IHRpbWVyQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQk9PTEVBTiB0aW1lck9yV2FpdEZpcmVkKTsK
KyAgICBzdGF0aWMgRFdPUkQgV0lOQVBJIHdvcmtUaHJlYWRDYWxsYmFjayh2b2lkKiBjb250ZXh0
KTsKKworICAgIGJvb2wgdHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKTsKKyAgICB2b2lkIHVucmVn
aXN0ZXJBc1dvcmtUaHJlYWQoKTsKKyAgICB2b2lkIHBlcmZvcm1Xb3JrT25SZWdpc3RlcmVkV29y
a1RocmVhZCgpOworCisgICAgc3RhdGljIHZvaWQgdW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRl
bVNvb24oUGFzc1JlZlB0cjxIYW5kbGVXb3JrSXRlbT4pOworICAgIHN0YXRpYyBEV09SRCBXSU5B
UEkgdW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbUNhbGxiYWNrKHZvaWQqIGNvbnRleHQpOwor
CisgICAgdm9sYXRpbGUgTE9ORyBtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQ7CisKKyAgICBNdXRl
eCBtX3dvcmtJdGVtUXVldWVMb2NrOworICAgIFZlY3RvcjxSZWZQdHI8V29ya0l0ZW1XaW4+ID4g
bV93b3JrSXRlbVF1ZXVlOworCisgICAgTXV0ZXggbV9oYW5kbGVzTG9jazsKKyAgICBIYXNoTWFw
PEhBTkRMRSwgUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiA+IG1faGFuZGxlczsKKworICAgIEhBTkRM
RSBtX3RpbWVyUXVldWU7CisjZWxpZiBQTEFURk9STShRVCkKKyAgICBjbGFzcyBXb3JrSXRlbVF0
OworICAgIFFUaHJlYWQqIG1fd29ya1RocmVhZDsKKyAgICBmcmllbmQgY2xhc3MgV29ya0l0ZW1R
dDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBzdGF0aWMgdm9pZCBzdGFydFdvcmtRdWV1ZVRo
cmVhZChXb3JrUXVldWUqKTsKKyAgICB2b2lkIHdvcmtRdWV1ZVRocmVhZEJvZHkoKTsKKyAgICB2
b2lkIGRpc3BhdGNoT25Tb3VyY2UoR1NvdXJjZSosIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mLCBH
U291cmNlRnVuYyk7CisKKyAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya1F1ZXVlVGhyZWFkOwor
ICAgIEdSZWZQdHI8R01haW5Db250ZXh0PiBtX2V2ZW50Q29udGV4dDsKKyAgICBNdXRleCBtX2V2
ZW50TG9vcExvY2s7CisgICAgR1JlZlB0cjxHTWFpbkxvb3A+IG1fZXZlbnRMb29wOworICAgIE11
dGV4IG1fZXZlbnRTb3VyY2VzTG9jazsKKyAgICBjbGFzcyBFdmVudFNvdXJjZTsKKyAgICBIYXNo
TWFwPGludCwgVmVjdG9yPEV2ZW50U291cmNlKj4gPiBtX2V2ZW50U291cmNlczsKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8aW50LCBWZWN0b3I8RXZlbnRTb3VyY2UqPiA+OjppdGVyYXRvciBFdmVudFNv
dXJjZUl0ZXJhdG9yOyAKKyNlbGlmIFBMQVRGT1JNKEVGTCkKKyAgICBmZF9zZXQgbV9maWxlRGVz
Y3JpcHRvclNldDsKKyAgICBpbnQgbV9tYXhGaWxlRGVzY3JpcHRvcjsKKyAgICBpbnQgbV9yZWFk
RnJvbVBpcGVEZXNjcmlwdG9yOworICAgIGludCBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvcjsKKyAg
ICBib29sIG1fdGhyZWFkTG9vcDsKKworICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+ID4gbV93
b3JrSXRlbVF1ZXVlOworICAgIE11dGV4IG1fd29ya0l0ZW1RdWV1ZUxvY2s7CisKKyAgICBpbnQg
bV9zb2NrZXREZXNjcmlwdG9yOworICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9zb2NrZXRFdmVudEhh
bmRsZXI7CisKKyAgICBIYXNoTWFwPGludCwgT3duUHRyPEVjb3JlX1RpbWVyPiA+IG1fdGltZXJz
OworCisgICAgdm9pZCBzZW5kTWVzc2FnZVRvVGhyZWFkKGNvbnN0IGNoYXIqKTsKKyAgICBzdGF0
aWMgdm9pZCogd29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSopOworICAgIHZvaWQgcGVyZm9ybVdv
cmsoKTsKKyAgICB2b2lkIHBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKTsKKyAgICBzdGF0aWMg
Ym9vbCB0aW1lckZpcmVkKHZvaWQqKTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKK3VzaW5nIFdURjo6V29ya1F1ZXVlOworCisjZW5kaWYgLy8gV29ya1F1ZXVlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL2Nocm9taXVtL01haW5UaHJlYWRDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi9jaHJvbWl1bS9NYWluVGhyZWFkQ2hyb21pdW0uY3BwCmluZGV4IDllNjU5
MmIuLmFlNWZjODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2Nocm9taXVtL01haW5UaHJl
YWRDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvY2hyb21pdW0vTWFpblRocmVhZENo
cm9taXVtLmNwcApAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgog
I2luY2x1ZGUgIkNocm9taXVtVGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25hbC5oIgog
I2luY2x1ZGUgIlRocmVhZGluZy5oIgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTU0LDYgKzU1LDE4
IEBAIHZvaWQgY2FsbE9uTWFpblRocmVhZChNYWluVGhyZWFkRnVuY3Rpb24qIGZ1bmN0aW9uLCB2
b2lkKiBjb250ZXh0KQogICAgIENocm9taXVtVGhyZWFkaW5nOjpjYWxsT25NYWluVGhyZWFkKGZ1
bmN0aW9uLCBjb250ZXh0KTsKIH0KIAorc3RhdGljIHZvaWQgY2FsbEZ1bmN0aW9uT2JqZWN0KHZv
aWQqIGNvbnRleHQpCit7CisgICAgRnVuY3Rpb248dm9pZCgpPiogZnVuY3Rpb24gPSBzdGF0aWNf
Y2FzdDxGdW5jdGlvbjx2b2lkKCk+Kj4oY29udGV4dCk7CisgICAgKCpmdW5jdGlvbikoKTsKKyAg
ICBkZWxldGUgZnVuY3Rpb247Cit9CisKK3ZvaWQgY2FsbE9uTWFpblRocmVhZChjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBjYWxsT25NYWluVGhyZWFkKGNhbGxGdW5j
dGlvbk9iamVjdCwgbmV3IEZ1bmN0aW9uPHZvaWQgKCk+KGZ1bmN0aW9uKSk7Cit9CisKIHZvaWQg
Y2FsbE9uTWFpblRocmVhZEFuZFdhaXQoTWFpblRocmVhZEZ1bmN0aW9uKiwgdm9pZCopCiB7CiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9lZmwv
V29ya1F1ZXVlRWZsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2VmbC9Xb3JrUXVldWVFZmwuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZmZlZGYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9lZmwvV29ya1F1ZXVlRWZsLmNwcApAQCAtMCwwICsxLDE3MyBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorCitjbGFzcyBUaW1lcldvcmtJdGVtIHsKK3B1YmxpYzoKKyAgICBU
aW1lcldvcmtJdGVtKGludCB0aW1lcklELCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlv
biwgV29ya1F1ZXVlKiBxdWV1ZSkKKyAgICAgICAgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQorICAg
ICAgICAsIG1fcXVldWUocXVldWUpCisgICAgICAgICwgbV90aW1lcklEKHRpbWVySUQpCisgICAg
eworICAgIH0KKyAgICB+VGltZXJXb3JrSXRlbSgpIHsgfQorCisgICAgRnVuY3Rpb248dm9pZCgp
PiBmdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb247IH0KKyAgICBXb3JrUXVldWUq
IHF1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9xdWV1ZTsgfQorCisgICAgaW50IHRpbWVySUQoKSBj
b25zdCB7IHJldHVybiBtX3RpbWVySUQ7IH0KKworcHJpdmF0ZToKKyAgICBGdW5jdGlvbjx2b2lk
KCk+IG1fZnVuY3Rpb247CisgICAgV29ya1F1ZXVlKiBtX3F1ZXVlOworICAgIGludCBtX3RpbWVy
SUQ7Cit9OworCitzdGF0aWMgY29uc3QgaW50IGludmFsaWRTb2NrZXREZXNjcmlwdG9yID0gLTE7
CitzdGF0aWMgY29uc3QgaW50IHRocmVhZE1lc3NhZ2VTaXplID0gMTsKK3N0YXRpYyBjb25zdCBj
aGFyIGZpbmlzaFRocmVhZE1lc3NhZ2VbXSA9ICJGIjsKK3N0YXRpYyBjb25zdCBjaGFyIHdha3Vw
VGhyZWFkTWVzc2FnZVtdID0gIlciOworCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFs
aXplKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgaW50IGZkc1syXTsKKyAgICBpZiAocGlwZShm
ZHMpKQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIG1fcmVhZEZyb21QaXBl
RGVzY3JpcHRvciA9IGZkc1swXTsKKyAgICBtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciA9IGZkc1sx
XTsKKyAgICBGRF9aRVJPKCZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKKyAgICBGRF9TRVQobV9yZWFk
RnJvbVBpcGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7CisgICAgbV9tYXhGaWxl
RGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKKworICAgIG1fc29ja2V0RGVz
Y3JpcHRvciA9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yOworCisgICAgbV90aHJlYWRMb29wID0g
dHJ1ZTsKKyAgICBjcmVhdGVUaHJlYWQocmVpbnRlcnByZXRfY2FzdDxXVEY6OlRocmVhZEZ1bmN0
aW9uPigmV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQpLCB0aGlzLCBuYW1lKTsKK30KKwordm9p
ZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgc2VuZE1lc3NhZ2VUb1Ro
cmVhZChmaW5pc2hUaHJlYWRNZXNzYWdlKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBlcmZvcm1X
b3JrKCkKK3sKKyAgICBtX3dvcmtJdGVtUXVldWVMb2NrLmxvY2soKTsKKworICAgIHdoaWxlICgh
bV93b3JrSXRlbVF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBWZWN0b3I8RnVuY3Rpb248dm9p
ZCgpPiA+IHdvcmtJdGVtUXVldWU7CisgICAgICAgIG1fd29ya0l0ZW1RdWV1ZS5zd2FwKHdvcmtJ
dGVtUXVldWUpOworCisgICAgICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29ya0l0ZW1RdWV1ZS5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgIHdvcmtJdGVtUXVldWVbaV0oKTsKKyAgICAgICAgbV93b3JrSXRlbVF1ZXVlTG9j
ay5sb2NrKCk7CisgICAgfQorICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7Cit9CisK
K3ZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKCkKK3sKKyAgICBmZF9z
ZXQgcmVhZEZpbGVEZXNjcmlwdG9yU2V0ID0gbV9maWxlRGVzY3JpcHRvclNldDsKKworICAgIGlm
IChzZWxlY3QobV9tYXhGaWxlRGVzY3JpcHRvciArIDEsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQs
IDAsIDAsIDApID49IDApIHsKKyAgICAgICAgaWYgKEZEX0lTU0VUKG1fcmVhZEZyb21QaXBlRGVz
Y3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpIHsKKyAgICAgICAgICAgIGNoYXIgcmVh
ZEJ1Zlt0aHJlYWRNZXNzYWdlU2l6ZV07CisgICAgICAgICAgICBpZiAocmVhZChtX3JlYWRGcm9t
UGlwZURlc2NyaXB0b3IsIHJlYWRCdWYsIHRocmVhZE1lc3NhZ2VTaXplKSA9PSAtMSkKKyAgICAg
ICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGZyb20gV29ya1F1ZXVlVGhyZWFk
IHBpcGUiKTsKKyAgICAgICAgICAgIGlmICghc3RybmNtcChyZWFkQnVmLCBmaW5pc2hUaHJlYWRN
ZXNzYWdlLCB0aHJlYWRNZXNzYWdlU2l6ZSkpCisgICAgICAgICAgICAgICAgbV90aHJlYWRMb29w
ID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9
IGludmFsaWRTb2NrZXREZXNjcmlwdG9yICYmIEZEX0lTU0VUKG1fc29ja2V0RGVzY3JpcHRvciwg
JnJlYWRGaWxlRGVzY3JpcHRvclNldCkpCisgICAgICAgICAgICBtX3NvY2tldEV2ZW50SGFuZGxl
cigpOworICAgIH0KK30KKwordm9pZCBXb3JrUXVldWU6OnNlbmRNZXNzYWdlVG9UaHJlYWQoY29u
c3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBpZiAod3JpdGUobV93cml0ZVRvUGlwZURlc2NyaXB0
b3IsIG1lc3NhZ2UsIHRocmVhZE1lc3NhZ2VTaXplKSA9PSAtMSkKKyAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gd2FrZSB1cCBXb3JrUXVldWUgVGhyZWFkIik7Cit9CisKK3ZvaWQqIFdvcmtR
dWV1ZTo6d29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlKQoreworICAgIHdoaWxl
ICh3b3JrUXVldWUtPm1fdGhyZWFkTG9vcCkgeworICAgICAgICB3b3JrUXVldWUtPnBlcmZvcm1X
b3JrKCk7CisgICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29yaygpOwor
ICAgIH0KKworICAgIGNsb3NlKHdvcmtRdWV1ZS0+bV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yKTsK
KyAgICBjbG9zZSh3b3JrUXVldWUtPm1fd3JpdGVUb1BpcGVEZXNjcmlwdG9yKTsKKworICAgIHJl
dHVybiAwOworfQorCit2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIo
aW50IGZpbGVEZXNjcmlwdG9yLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sK
KyAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yKQor
ICAgICAgICBMT0dfRVJST1IoIiVkIGlzIGFscmVhZHkgcmVnaXN0ZXJkLiIsIGZpbGVEZXNjcmlw
dG9yKTsKKworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOworICAgIG1f
c29ja2V0RXZlbnRIYW5kbGVyID0gZnVuY3Rpb247CisKKyAgICBpZiAoZmlsZURlc2NyaXB0b3Ig
PiBtX21heEZpbGVEZXNjcmlwdG9yKQorICAgICAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gZmls
ZURlc2NyaXB0b3I7CisgICAgRkRfU0VUKGZpbGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRv
clNldCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVy
KGludCBmaWxlRGVzY3JpcHRvcikKK3sKKyAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBpbnZhbGlk
U29ja2V0RGVzY3JpcHRvcjsKKworICAgIGlmIChmaWxlRGVzY3JpcHRvciA9PSBtX21heEZpbGVE
ZXNjcmlwdG9yKQorICAgICAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBpcGVE
ZXNjcmlwdG9yOworICAgIEZEX0NMUihmaWxlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JT
ZXQpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYgZnVuY3Rpb24pCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxv
Y2spOworICAgIG1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoZnVuY3Rpb24pOworICAgIHNlbmRNZXNz
YWdlVG9UaHJlYWQod2FrdXBUaHJlYWRNZXNzYWdlKTsKK30KKworYm9vbCBXb3JrUXVldWU6OnRp
bWVyRmlyZWQodm9pZCogZGF0YSkKK3sKKyAgICBUaW1lcldvcmtJdGVtKiBpdGVtID0gc3RhdGlj
X2Nhc3Q8VGltZXJXb3JrSXRlbSo+KGRhdGEpOworICAgIGlmIChpdGVtICYmIGl0ZW0tPnF1ZXVl
KCktPm1faXNWYWxpZCkgeworICAgICAgICBpdGVtLT5xdWV1ZSgpLT5kaXNwYXRjaChpdGVtLT5m
dW5jdGlvbigpKTsKKyAgICAgICAgaXRlbS0+cXVldWUoKS0+bV90aW1lcnMudGFrZShpdGVtLT50
aW1lcklEKCkpOworICAgICAgICBkZWxldGUgaXRlbTsKKyAgICB9CisKKyAgICByZXR1cm4gRUNP
UkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRl
bGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCit7Cisg
ICAgc3RhdGljIGludCB0aW1lcklkID0gMTsKKyAgICBtX3RpbWVycy5zZXQodGltZXJJZCwgYWRv
cHRQdHIoZWNvcmVfdGltZXJfYWRkKGRlbGF5LCByZWludGVycHJldF9jYXN0PEVjb3JlX1Rhc2tf
Q2I+KHRpbWVyRmlyZWQpLCBuZXcgVGltZXJXb3JrSXRlbSh0aW1lcklkLCBmdW5jdGlvbiwgdGhp
cykpKSk7CisgICAgdGltZXJJZCsrOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ3Rr
L1dvcmtRdWV1ZUd0ay5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9ndGsvV29ya1F1ZXVlR3RrLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTFmNjM1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dURi93dGYvZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKQEAgLTAsMCArMSwyMjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5
cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXb3JrUXVldWUu
aCIKKworI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCisvLyBXb3JrUXVldWU6OkV2ZW50U291cmNlCitjbGFz
cyBXb3JrUXVldWU6OkV2ZW50U291cmNlIHsKK3B1YmxpYzoKKyAgICBFdmVudFNvdXJjZShjb25z
dCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiB3b3JrUXVldWUsIEdDYW5j
ZWxsYWJsZSogY2FuY2VsbGFibGUpCisgICAgICAgIDogbV9mdW5jdGlvbihmdW5jdGlvbikKKyAg
ICAgICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCisgICAgICAgICwgbV9jYW5jZWxsYWJsZShj
YW5jZWxsYWJsZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjYW5jZWwoKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX2NhbmNlbGxhYmxlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBn
X2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCBleGVjdXRlRXZlbnRTb3VyY2UoRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKKyAgICAgICAgV29ya1F1ZXVlKiBxdWV1ZSA9
IGV2ZW50U291cmNlLT5tX3dvcmtRdWV1ZTsKKyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKHF1ZXVlLT5tX2lzVmFsaWRNdXRleCk7CisgICAgICAgICAgICBpZiAoIXF1
ZXVlLT5tX2lzVmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgZXZlbnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jv
b2xlYW4gcGVyZm9ybVdvcmtPbmNlKEV2ZW50U291cmNlKiBldmVudFNvdXJjZSkKKyAgICB7Cisg
ICAgICAgIGV4ZWN1dGVFdmVudFNvdXJjZShldmVudFNvdXJjZSk7CisgICAgICAgIHJldHVybiBG
QUxTRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmsoR1NvY2tldCog
c29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2Up
CisgICAgeworICAgICAgICBpZiAoIShjb25kaXRpb24gJiBHX0lPX0lOKSAmJiAhKGNvbmRpdGlv
biAmIEdfSU9fSFVQKSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fRVJSKSkgeworICAgICAgICAgICAg
Ly8gRXZlbnRTb3VyY2UgaGFzIGJlZW4gY2FuY2VsbGVkLCByZXR1cm4gRkFMU0UgdG8gZGVzdHJv
eSB0aGUgc291cmNlLgorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisKKyAg
ICAgICAgZXhlY3V0ZUV2ZW50U291cmNlKGV2ZW50U291cmNlKTsKKyAgICAgICAgcmV0dXJuIFRS
VUU7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHBlcmZvcm1Xb3JrT25UZXJtaW5hdGlv
bihHUGlkLCBnaW50LCBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UpCisgICAgeworICAgICAgICBl
eGVjdXRlRXZlbnRTb3VyY2UoZXZlbnRTb3VyY2UpOworICAgICAgICByZXR1cm4gRkFMU0U7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVsZXRlRXZlbnRTb3VyY2UoRXZlbnRTb3VyY2UqIGV2
ZW50U291cmNlKSAKKyAgICB7CisgICAgICAgIEFTU0VSVChldmVudFNvdXJjZSk7CisgICAgICAg
IGRlbGV0ZSBldmVudFNvdXJjZTsKKyAgICB9CisgICAKK3B1YmxpYzoKKyAgICBGdW5jdGlvbjx2
b2lkKCk+IG1fZnVuY3Rpb247CisgICAgV29ya1F1ZXVlKiBtX3dvcmtRdWV1ZTsKKyAgICBHQ2Fu
Y2VsbGFibGUqIG1fY2FuY2VsbGFibGU7Cit9OworCisvLyBXb3JrUXVldWUKK3N0YXRpYyBjb25z
dCBzaXplX3Qga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdCA9IDMxOworCit2b2lkIFdvcmtR
dWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgbV9ldmVu
dENvbnRleHQgPSBhZG9wdEdSZWYoZ19tYWluX2NvbnRleHRfbmV3KCkpOworICAgIEFTU0VSVCht
X2V2ZW50Q29udGV4dCk7CisgICAgbV9ldmVudExvb3AgPSBhZG9wdEdSZWYoZ19tYWluX2xvb3Bf
bmV3KG1fZXZlbnRDb250ZXh0LmdldCgpLCBGQUxTRSkpOworICAgIEFTU0VSVChtX2V2ZW50TG9v
cCk7CisKKyAgICAvLyBUaGlzIG5hbWUgY2FuIGJlIGNvbS5hcHBsZS5XZWJLaXQuUHJvY2Vzc0xh
dW5jaGVyIG9yIGNvbS5hcHBsZS5Db3JlSVBDLlJlY2VpdmVRdWV1ZS4KKyAgICAvLyBXZSBhcmUg
dXNpbmcgdGhvc2UgbmFtZXMgZm9yIHRoZSB0aHJlYWQgbmFtZSwgYnV0IGJvdGggYXJlIGxvbmdl
ciB0aGFuIDMxIGNoYXJhY3RlcnMsCisgICAgLy8gd2hpY2ggaXMgdGhlIGxpbWl0IG9mIFZpc3Vh
bCBTdHVkaW8gZm9yIHRocmVhZCBuYW1lcy4KKyAgICAvLyBXaGVuIGxvZyBpcyBlbmFibGVkIGNy
ZWF0ZVRocmVhZCgpIHdpbGwgYXNzZXJ0IGluc3RlYWQgb2YgdHJ1bmNhdGUgdGhlIG5hbWUsIHNv
IHdlIG5lZWQKKyAgICAvLyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIGEgbmFtZSBsb25nZXIg
dGhhbiAzMSBjaGFyYWN0ZXJzLgorICAgIGNvbnN0IGNoYXIqIHRocmVhZE5hbWUgPSBnX3N0cnJz
dHIobmFtZSwgIi4iKTsKKyAgICBpZiAodGhyZWFkTmFtZSkKKyAgICAgICAgdGhyZWFkTmFtZSsr
OworICAgIGVsc2UKKyAgICAgICAgdGhyZWFkTmFtZSA9IG5hbWU7CisgICAgaWYgKHN0cmxlbih0
aHJlYWROYW1lKSA+IGtWaXN1YWxTdHVkaW9UaHJlYWROYW1lTGltaXQpCisgICAgICAgIHRocmVh
ZE5hbWUgKz0gc3RybGVuKHRocmVhZE5hbWUpIC0ga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1p
dDsKKworICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nh
c3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJldvcmtRdWV1ZTo6c3RhcnRXb3JrUXVldWVUaHJlYWQp
LCB0aGlzLCB0aHJlYWROYW1lKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxp
ZGF0ZSgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRMb29wTG9jayk7CisKKyAg
ICBpZiAobV9ldmVudExvb3ApIHsKKyAgICAgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1bm5pbmco
bV9ldmVudExvb3AuZ2V0KCkpKQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX2V2ZW50
TG9vcC5nZXQoKSk7CisgICAgICAgIG1fZXZlbnRMb29wLmNsZWFyKCk7CisgICAgfQorCisgICAg
bV9ldmVudENvbnRleHQuY2xlYXIoKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnN0YXJ0V29ya1F1
ZXVlVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlKQoreworICAgIHdvcmtRdWV1ZS0+d29ya1F1
ZXVlVGhyZWFkQm9keSgpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkQm9k
eSgpCit7CisgICAgZ19tYWluX2xvb3BfcnVuKG1fZXZlbnRMb29wLmdldCgpKTsKK30KKwordm9p
ZCBXb3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRv
ciwgaW50IGNvbmRpdGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7Cisg
ICAgR1JlZlB0cjxHU29ja2V0PiBzb2NrZXQgPSBhZG9wdEdSZWYoZ19zb2NrZXRfbmV3X2Zyb21f
ZmQoZmlsZURlc2NyaXB0b3IsIDApKTsKKyAgICBBU1NFUlQoc29ja2V0KTsKKyAgICBHUmVmUHRy
PEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXco
KSk7CisgICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX3Nv
Y2tldF9jcmVhdGVfc291cmNlKHNvY2tldC5nZXQoKSwgc3RhdGljX2Nhc3Q8R0lPQ29uZGl0aW9u
Pihjb25kaXRpb24pLCBjYW5jZWxsYWJsZS5nZXQoKSkpOworICAgIEFTU0VSVChkaXNwYXRjaFNv
dXJjZSk7CisgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gbmV3IEV2ZW50U291cmNlKGZ1
bmN0aW9uLCB0aGlzLCBjYW5jZWxsYWJsZS5nZXQoKSk7CisgICAgQVNTRVJUKGV2ZW50U291cmNl
KTsKKworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhkaXNwYXRjaFNvdXJjZS5nZXQoKSwgcmVp
bnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZv
cm1Xb3JrKSwKKyAgICAgICAgZXZlbnRTb3VyY2UsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lO
b3RpZnk+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpkZWxldGVFdmVudFNvdXJjZSkpOworCisg
ICAgLy8gU2V0IHVwIHRoZSBldmVudCBzb3VyY2VzIHVuZGVyIHRoZSBtdXRleCBzaW5jZSB0aGlz
IGlzIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgdGhyZWFkcy4KKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOworICAgICAgICBWZWN0b3I8RXZlbnRT
b3VyY2UqPiBzb3VyY2VzOworICAgICAgICBFdmVudFNvdXJjZUl0ZXJhdG9yIGl0ID0gbV9ldmVu
dFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRvcik7CisgICAgICAgIGlmIChpdCAhPSBtX2V2ZW50
U291cmNlcy5lbmQoKSkgCisgICAgICAgICAgICBzb3VyY2VzID0gaXQtPnNlY29uZDsKKworICAg
ICAgICBzb3VyY2VzLmFwcGVuZChldmVudFNvdXJjZSk7CisgICAgICAgIG1fZXZlbnRTb3VyY2Vz
LnNldChmaWxlRGVzY3JpcHRvciwgc291cmNlcyk7CisgICAgfQorCisgICAgZ19zb3VyY2VfYXR0
YWNoKGRpc3BhdGNoU291cmNlLmdldCgpLCBtX2V2ZW50Q29udGV4dC5nZXQoKSk7Cit9CisKK3Zv
aWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCBmaWxlRGVzY3Jp
cHRvcikKK3sKKyAgICBBU1NFUlQoZmlsZURlc2NyaXB0b3IpOworICAgIAorICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOworICAgIAorICAgIEV2ZW50U291cmNlSXRl
cmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZpbGVEZXNjcmlwdG9yKTsKKyAgICBBU1NF
UlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpOworICAgIEFTU0VSVChtX2V2ZW50U291cmNl
cy5jb250YWlucyhmaWxlRGVzY3JpcHRvcikpOworCisgICAgaWYgKGl0ICE9IG1fZXZlbnRTb3Vy
Y2VzLmVuZCgpKSB7CisgICAgICAgIFZlY3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXMgPSBpdC0+
c2Vjb25kOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlcy5zaXplKCk7
IGkrKykKKyAgICAgICAgICAgIHNvdXJjZXNbaV0tPmNhbmNlbCgpOworCisgICAgICAgIG1fZXZl
bnRTb3VyY2VzLnJlbW92ZShpdCk7CisgICAgfQorfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0
Y2hPblNvdXJjZShHU291cmNlKiBkaXNwYXRjaFNvdXJjZSwgY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYgZnVuY3Rpb24sIEdTb3VyY2VGdW5jIHNvdXJjZUNhbGxiYWNrKQoreworICAgIEV2ZW50U291
cmNlKiBldmVudFNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZShmdW5jdGlvbiwgdGhpcywgMCk7CisK
KyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0Y2hTb3VyY2UsIHNvdXJjZUNhbGxiYWNr
LCBldmVudFNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxHRGVzdHJveU5vdGlmeT4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50U291
cmNlKSk7CisKKyAgICBnX3NvdXJjZV9hdHRhY2goZGlzcGF0Y2hTb3VyY2UsIG1fZXZlbnRDb250
ZXh0LmdldCgpKTsKK30KKwordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIEdSZWZQdHI8R1NvdXJjZT4gZGlzcGF0Y2hTb3Vy
Y2UgPSBhZG9wdEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSk7CisgICAgQVNTRVJUKGRpc3BhdGNo
U291cmNlKTsKKyAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkoZGlzcGF0Y2hTb3VyY2UuZ2V0KCks
IEdfUFJJT1JJVFlfREVGQVVMVCk7CisKKyAgICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291
cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtR
dWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25jZSkpOworfQorCit2b2lkIFdvcmtRdWV1
ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBk
b3VibGUgZGVsYXkpCit7CisgICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFk
b3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhzdGF0aWNfY2FzdDxndWludD4oZGVsYXkgKiAx
MDAwKSkpOworICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7CisKKyAgICBkaXNwYXRjaE9uU291
cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHU291
cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25jZSkpOworfQor
Cit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFBsYXRmb3JtUHJvY2Vzc0lk
ZW50aWZpZXIgcHJvY2VzcywgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7Cisg
ICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX2NoaWxkX3dh
dGNoX3NvdXJjZV9uZXcocHJvY2VzcykpOworICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7CisK
KyAgICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVp
bnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZv
cm1Xb3JrT25UZXJtaW5hdGlvbikpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvbWFj
L1dvcmtRdWV1ZU1hYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9tYWMvV29ya1F1ZXVlTWFjLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTQ3M2VlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dURi93dGYvbWFjL1dvcmtRdWV1ZU1hYy5jcHAKQEAgLTAsMCArMSwxNzgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV29ya1F1ZXVl
LmgiCisKKyNpbmNsdWRlIDxtYWNoL21hY2hfaW5pdC5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF9w
b3J0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwordm9pZCBXb3JrUXVldWU6OmV4
ZWN1dGVGdW5jdGlvbih2b2lkKiBjb250ZXh0KQoreworICAgIFdvcmtRdWV1ZSogcXVldWUgPSBz
dGF0aWNfY2FzdDxXb3JrUXVldWUqPihkaXNwYXRjaF9nZXRfY29udGV4dChkaXNwYXRjaF9nZXRf
Y3VycmVudF9xdWV1ZSgpKSk7CisgICAgT3duUHRyPEZ1bmN0aW9uPHZvaWQoKT4gPiBmdW5jdGlv
biA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PEZ1bmN0aW9uPHZvaWQoKT4qPihjb250ZXh0KSk7Cisg
ICAgCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIocXVldWUtPm1faXNWYWxpZE11
dGV4KTsKKyAgICAgICAgaWYgKCFxdWV1ZS0+bV9pc1ZhbGlkKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgICgqZnVuY3Rpb24pKCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpkaXNw
YXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBkaXNwYXRjaF9h
c3luY19mKG1fZGlzcGF0Y2hRdWV1ZSwgbmV3IEZ1bmN0aW9uPHZvaWQoKT4oZnVuY3Rpb24pLCBl
eGVjdXRlRnVuY3Rpb24pOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCit7CisgICAg
ZGlzcGF0Y2hfdGltZV90IGRlbGF5VGltZSA9IGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9O
T1csIGRlbGF5ICogTlNFQ19QRVJfU0VDKTsKKworICAgIGRpc3BhdGNoX2FmdGVyX2YoZGVsYXlU
aW1lLCBtX2Rpc3BhdGNoUXVldWUsIG5ldyBGdW5jdGlvbjx2b2lkKCk+KGZ1bmN0aW9uKSwgZXhl
Y3V0ZUZ1bmN0aW9uKTsKK30KKworY2xhc3MgV29ya1F1ZXVlOjpFdmVudFNvdXJjZSB7CitwdWJs
aWM6CisgICAgRXZlbnRTb3VyY2UoTWFjaFBvcnRFdmVudFR5cGUgZXZlbnRUeXBlLCBkaXNwYXRj
aF9zb3VyY2VfdCBkaXNwYXRjaFNvdXJjZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rp
b24pCisgICAgICAgIDogbV9ldmVudFR5cGUoZXZlbnRUeXBlKQorICAgICAgICAsIG1fZGlzcGF0
Y2hTb3VyY2UoZGlzcGF0Y2hTb3VyY2UpCisgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikK
KyAgICB7CisgICAgfQorICAgIAorICAgIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoU291cmNl
KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwYXRjaFNvdXJjZTsgfQorICAgIAorICAgIHN0YXRpYyB2
b2lkIGV2ZW50SGFuZGxlcih2b2lkKiBzb3VyY2UpIAorICAgIHsKKyAgICAgICAgRXZlbnRTb3Vy
Y2UqIGV2ZW50U291cmNlID0gc3RhdGljX2Nhc3Q8RXZlbnRTb3VyY2UqPihzb3VyY2UpOworICAg
ICAgICAKKyAgICAgICAgZXZlbnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIHZvaWQgY2FuY2VsSGFuZGxlcih2b2lkKiBzb3VyY2UpCisgICAgeworICAgICAg
ICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBzdGF0aWNfY2FzdDxFdmVudFNvdXJjZSo+KHNv
dXJjZSk7CisgICAgICAgIAorICAgICAgICBtYWNoX3BvcnRfdCBtYWNoUG9ydCA9IGRpc3BhdGNo
X3NvdXJjZV9nZXRfaGFuZGxlKGV2ZW50U291cmNlLT5tX2Rpc3BhdGNoU291cmNlKTsKKyAgICAg
ICAgCisgICAgICAgIHN3aXRjaCAoZXZlbnRTb3VyY2UtPm1fZXZlbnRUeXBlKSB7CisgICAgICAg
IGNhc2UgTWFjaFBvcnREYXRhQXZhaWxhYmxlOgorICAgICAgICAgICAgLy8gUmVsZWFzZSBvdXIg
cmVjZWl2ZSByaWdodC4KKyAgICAgICAgICAgIG1hY2hfcG9ydF9tb2RfcmVmcyhtYWNoX3Rhc2tf
c2VsZigpLCBtYWNoUG9ydCwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIE1hY2hQb3J0RGVhZE5hbWVOb3RpZmljYXRpb246Cisg
ICAgICAgICAgICAvLyBSZWxlYXNlIG91ciBzZW5kIHJpZ2h0LgorICAgICAgICAgICAgbWFjaF9w
b3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgbWFjaFBvcnQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgZmluYWxpemVI
YW5kbGVyKHZvaWQqIHNvdXJjZSkKKyAgICB7CisgICAgICAgIEV2ZW50U291cmNlKiBldmVudFNv
dXJjZSA9IHN0YXRpY19jYXN0PEV2ZW50U291cmNlKj4oc291cmNlKTsKKyAgICAgICAgCisgICAg
ICAgIGRlbGV0ZSBldmVudFNvdXJjZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIE1hY2hQ
b3J0RXZlbnRUeXBlIG1fZXZlbnRUeXBlOworICAgIAorICAgIC8vIFRoaXMgaXMgYSB3ZWFrIHJl
ZmVyZW5jZSwgc2luY2UgbV9kaXNwYXRjaFNvdXJjZSByZWZlcmVuY2VzIHRoZSBldmVudCBzb3Vy
Y2UuCisgICAgZGlzcGF0Y2hfc291cmNlX3QgbV9kaXNwYXRjaFNvdXJjZTsKKworICAgIEZ1bmN0
aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKK307CisKK3ZvaWQgV29ya1F1ZXVlOjpyZWdpc3Rlck1h
Y2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90IG1hY2hQb3J0LCBNYWNoUG9ydEV2ZW50VHlw
ZSBldmVudFR5cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIGRp
c3BhdGNoX3NvdXJjZV90eXBlX3Qgc291cmNlVHlwZSA9IDA7CisgICAgc3dpdGNoIChldmVudFR5
cGUpIHsKKyAgICBjYXNlIE1hY2hQb3J0RGF0YUF2YWlsYWJsZToKKyAgICAgICAgc291cmNlVHlw
ZSA9IERJU1BBVENIX1NPVVJDRV9UWVBFX01BQ0hfUkVDVjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBNYWNoUG9ydERlYWROYW1lTm90aWZpY2F0aW9uOgorICAgICAgICBzb3VyY2VUeXBlID0g
RElTUEFUQ0hfU09VUkNFX1RZUEVfTUFDSF9TRU5EOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgCisgICAgZGlzcGF0Y2hfc291cmNlX3QgZGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9zb3Vy
Y2VfY3JlYXRlKHNvdXJjZVR5cGUsIG1hY2hQb3J0LCAwLCBtX2Rpc3BhdGNoUXVldWUpOworICAg
IAorICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZShldmVudFR5
cGUsIGRpc3BhdGNoU291cmNlLCBmdW5jdGlvbik7CisgICAgZGlzcGF0Y2hfc2V0X2NvbnRleHQo
ZGlzcGF0Y2hTb3VyY2UsIGV2ZW50U291cmNlKTsKKyAgICAKKyAgICBkaXNwYXRjaF9zb3VyY2Vf
c2V0X2V2ZW50X2hhbmRsZXJfZihkaXNwYXRjaFNvdXJjZSwgJkV2ZW50U291cmNlOjpldmVudEhh
bmRsZXIpOworICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfY2FuY2VsX2hhbmRsZXJfZihkaXNwYXRj
aFNvdXJjZSwgJkV2ZW50U291cmNlOjpjYW5jZWxIYW5kbGVyKTsKKyAgICBkaXNwYXRjaF9zZXRf
ZmluYWxpemVyX2YoZGlzcGF0Y2hTb3VyY2UsICZFdmVudFNvdXJjZTo6ZmluYWxpemVIYW5kbGVy
KTsKKyAgICAKKyAgICAvLyBBZGQgdGhlIHNvdXJjZSB0byBvdXIgc2V0IG9mIHNvdXJjZXMuCisg
ICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNNdXRleCk7Cisg
ICAgICAgIAorICAgICAgICBBU1NFUlQoIW1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKG1hY2hQb3J0
KSk7CisgICAgICAgIAorICAgICAgICBtX2V2ZW50U291cmNlcy5zZXQobWFjaFBvcnQsIGV2ZW50
U291cmNlKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFuZCBzdGFydCBpdCEKKyAgICAgICAgZGlz
cGF0Y2hfcmVzdW1lKGRpc3BhdGNoU291cmNlKTsKKyAgICB9Cit9CisKK3ZvaWQgV29ya1F1ZXVl
Ojp1bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIobWFjaF9wb3J0X3QgbWFjaFBvcnQpCit7
CisgICAgQVNTRVJUKG1hY2hQb3J0KTsKKyAgICAKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9l
dmVudFNvdXJjZXNNdXRleCk7CisgICAgCisgICAgSGFzaE1hcDxtYWNoX3BvcnRfdCwgRXZlbnRT
b3VyY2UqPjo6aXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKG1hY2hQb3J0KTsKKyAg
ICBBU1NFUlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpOworICAgIAorICAgIEFTU0VSVCht
X2V2ZW50U291cmNlcy5jb250YWlucyhtYWNoUG9ydCkpOworCisgICAgRXZlbnRTb3VyY2UqIGV2
ZW50U291cmNlID0gaXQtPnNlY29uZDsKKyAgICAvLyBDYW5jZWwgYW5kIHJlbGVhc2UgdGhlIHNv
dXJjZS4gSXQgd2lsbCBiZSBkZWxldGVkIGluIGl0cyBmaW5hbGl6ZSBoYW5kbGVyLgorICAgIGRp
c3BhdGNoX3NvdXJjZV9jYW5jZWwoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOworICAg
IGRpc3BhdGNoX3JlbGVhc2UoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOworCisgICAg
bV9ldmVudFNvdXJjZXMucmVtb3ZlKGl0KTsgICAgCit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwbGF0
Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBtX2Rpc3BhdGNoUXVldWUg
PSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUobmFtZSwgMCk7CisgICAgZGlzcGF0Y2hfc2V0X2NvbnRl
eHQobV9kaXNwYXRjaFF1ZXVlLCB0aGlzKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3Jt
SW52YWxpZGF0ZSgpCit7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihtX2V2ZW50U291cmNlc011dGV4KTsKKyAgICBBU1NFUlQobV9ldmVudFNvdXJjZXMuaXNF
bXB0eSgpKTsKKyNlbmRpZgorCisgICAgZGlzcGF0Y2hfcmVsZWFzZShtX2Rpc3BhdGNoUXVldWUp
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvcXQvV29ya1F1ZXVlUXQuY3BwIGIvU291
cmNlL1dURi93dGYvcXQvV29ya1F1ZXVlUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjA1MDkxZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9xdC9X
b3JrUXVldWVRdC5jcHAKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEw
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRl
IDxRT2JqZWN0PgorI2luY2x1ZGUgPFFQcm9jZXNzPgorI2luY2x1ZGUgPFFUaHJlYWQ+CisjaW5j
bHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgV29ya1F1
ZXVlOjpXb3JrSXRlbVF0IDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6
CisgICAgV29ya0l0ZW1RdChXb3JrUXVldWUqIHdvcmtRdWV1ZSwgY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYgZnVuY3Rpb24pCisgICAgICAgIDogbV9xdWV1ZSh3b3JrUXVldWUpCisgICAgICAgICwg
bV9zb3VyY2UoMCkKKyAgICAgICAgLCBtX3NpZ25hbCgwKQorICAgICAgICAsIG1fZnVuY3Rpb24o
ZnVuY3Rpb24pCisgICAgeworICAgIH0KKworICAgIFdvcmtJdGVtUXQoV29ya1F1ZXVlKiB3b3Jr
UXVldWUsIFFPYmplY3QqIHNvdXJjZSwgY29uc3QgY2hhciogc2lnbmFsLCBjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdGlvbikKKyAgICAgICAgOiBtX3F1ZXVlKHdvcmtRdWV1ZSkKKyAgICAg
ICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgICAgICwgbV9zaWduYWwoc2lnbmFsKQorICAgICAg
ICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgeworICAgICAgICBjb25uZWN0KG1fc291cmNl
LCBtX3NpZ25hbCwgU0xPVChleGVjdXRlKCkpLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7CisgICAg
fQorCisgICAgfldvcmtJdGVtUXQoKQorICAgIHsKKyAgICB9CisKKyAgICBRX1NMT1Qgdm9pZCBl
eGVjdXRlKCkgCisgICAgeyAKKyAgICAgICAgaWYgKG1fcXVldWUtPm1faXNWYWxpZCkKKyAgICAg
ICAgICAgIG1fZnVuY3Rpb24oKTsKKyAgICB9CisKKyAgICBRX1NMT1Qgdm9pZCBleGVjdXRlQW5k
RGVsZXRlKCkKKyAgICB7CisgICAgICAgIGV4ZWN1dGUoKTsKKyAgICAgICAgZGVsZXRlIHRoaXM7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqKQorICAg
IHsKKyAgICAgICAgZXhlY3V0ZUFuZERlbGV0ZSgpOworICAgIH0KKworICAgIFdvcmtRdWV1ZSog
bV9xdWV1ZTsKKyAgICBRT2JqZWN0KiBtX3NvdXJjZTsKKyAgICBjb25zdCBjaGFyKiBtX3NpZ25h
bDsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247Cit9OworCitRU29ja2V0Tm90aWZp
ZXIqIFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IHNvY2tldERlc2Ny
aXB0b3IsIFFTb2NrZXROb3RpZmllcjo6VHlwZSB0eXBlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiBmdW5jdGlvbikKK3sKKyAgICBBU1NFUlQobV93b3JrVGhyZWFkKTsKKworICAgIFFTb2NrZXRO
b3RpZmllciogbm90aWZpZXIgPSBuZXcgUVNvY2tldE5vdGlmaWVyKHNvY2tldERlc2NyaXB0b3Is
IHR5cGUsIDApOworICAgIG5vdGlmaWVyLT5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICBub3RpZmll
ci0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7CisgICAgV29ya1F1ZXVlOjpXb3JrSXRlbVF0
KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KHRoaXMsIG5vdGlmaWVyLCBTSUdO
QUwoYWN0aXZhdGVkKGludCkpLCBmdW5jdGlvbik7CisgICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQo
bV93b3JrVGhyZWFkKTsKKyAgICBub3RpZmllci0+c2V0RW5hYmxlZCh0cnVlKTsKKyAgICByZXR1
cm4gbm90aWZpZXI7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29u
c3QgY2hhciopCit7CisgICAgbV93b3JrVGhyZWFkID0gbmV3IFFUaHJlYWQoKTsKKyAgICBtX3dv
cmtUaHJlYWQtPnN0YXJ0KCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRh
dGUoKQoreworICAgIG1fd29ya1RocmVhZC0+ZXhpdCgpOworICAgIG1fd29ya1RocmVhZC0+d2Fp
dCgpOworICAgIGRlbGV0ZSBtX3dvcmtUaHJlYWQ7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpkaXNw
YXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBXb3JrUXVldWU6
OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQodGhpcywgZnVu
Y3Rpb24pOworICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7CisgICAgUU1l
dGFPYmplY3Q6Omludm9rZU1ldGhvZChpdGVtUXQsICJleGVjdXRlQW5kRGVsZXRlIiwgUXQ6OlF1
ZXVlZENvbm5lY3Rpb24pOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXlJblNlY29uZCkK
K3sKKyAgICBXb3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6Oldv
cmtJdGVtUXQodGhpcywgZnVuY3Rpb24pOworICAgIGl0ZW1RdC0+c3RhcnRUaW1lcihzdGF0aWNf
Y2FzdDxpbnQ+KGRlbGF5SW5TZWNvbmQgKiAxMDAwKSk7CisgICAgaXRlbVF0LT5tb3ZlVG9UaHJl
YWQobV93b3JrVGhyZWFkKTsKK30KKwordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoT25UZXJtaW5h
dGlvbihQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MsIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mIGZ1bmN0aW9uKQoreworICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0g
bmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBwcm9jZXNzLCBTSUdOQUwoZmluaXNoZWQo
aW50LCBRUHJvY2Vzczo6RXhpdFN0YXR1cykpLCBmdW5jdGlvbik7CisgICAgaXRlbVF0LT5tb3Zl
VG9UaHJlYWQobV93b3JrVGhyZWFkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNpbmNs
dWRlICJXb3JrUXVldWVRdC5tb2MiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi93aW4vV29y
a1F1ZXVlV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9Xb3JrUXVldWVXaW4uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYmFkYmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi93aW4vV29ya1F1ZXVlV2luLmNwcApAQCAtMCwwICsxLDI5MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIK
KworI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisKK2lubGluZSBXb3JrUXVldWU6OldvcmtJdGVtV2luOjpXb3JrSXRlbVdpbihj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKKyAgICA6
IG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgLCBtX3F1ZXVlKHF1ZXVlKQoreworfQorCitQYXNz
UmVmUHRyPFdvcmtRdWV1ZTo6V29ya0l0ZW1XaW4+IFdvcmtRdWV1ZTo6V29ya0l0ZW1XaW46OmNy
ZWF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtJdGVtV2luKGZ1bmN0aW9uLCBxdWV1ZSkp
OworfQorCitXb3JrUXVldWU6OldvcmtJdGVtV2luOjp+V29ya0l0ZW1XaW4oKQoreworfQorCitp
bmxpbmUgV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6SGFuZGxlV29ya0l0ZW0oSEFORExFIGhh
bmRsZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUp
CisgICAgOiBXb3JrSXRlbVdpbihmdW5jdGlvbiwgcXVldWUpCisgICAgLCBtX2hhbmRsZShoYW5k
bGUpCisgICAgLCBtX3dhaXRIYW5kbGUoMCkKK3sKKyAgICBBU1NFUlRfQVJHKGhhbmRsZSwgaGFu
ZGxlKTsKK30KKworUGFzc1JlZlB0cjxXb3JrUXVldWU6OkhhbmRsZVdvcmtJdGVtPiBXb3JrUXVl
dWU6OkhhbmRsZVdvcmtJdGVtOjpjcmVhdGVCeUFkb3B0aW5nSGFuZGxlKEhBTkRMRSBoYW5kbGUs
IGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGFuZGxlV29ya0l0ZW0oaGFuZGxlLCBmdW5jdGlvbiwg
cXVldWUpKTsKK30KKworV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6fkhhbmRsZVdvcmtJdGVt
KCkKK3sKKyAgICA6OkNsb3NlSGFuZGxlKG1faGFuZGxlKTsKK30KKwordm9pZCBXb3JrUXVldWU6
OmhhbmRsZUNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4gdGltZXJPcldhaXRGaXJlZCkK
K3sKKyAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOworICAgIEFTU0VSVF9BUkcodGlt
ZXJPcldhaXRGaXJlZCwgIXRpbWVyT3JXYWl0RmlyZWQpOworCisgICAgV29ya0l0ZW1XaW4qIGl0
ZW0gPSBzdGF0aWNfY2FzdDxXb3JrSXRlbVdpbio+KGNvbnRleHQpOworICAgIFdvcmtRdWV1ZSog
cXVldWUgPSBpdGVtLT5xdWV1ZSgpOworCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2Nr
KHF1ZXVlLT5tX3dvcmtJdGVtUXVldWVMb2NrKTsKKyAgICAgICAgcXVldWUtPm1fd29ya0l0ZW1R
dWV1ZS5hcHBlbmQoaXRlbSk7CisKKyAgICAgICAgLy8gSWYgbm8gb3RoZXIgdGhyZWFkIGlzIHBl
cmZvcm1pbmcgd29yaywgd2UgY2FuIGRvIGl0IG9uIHRoaXMgdGhyZWFkLgorICAgICAgICBpZiAo
IXF1ZXVlLT50cnlSZWdpc3RlckFzV29ya1RocmVhZCgpKSB7CisgICAgICAgICAgICAvLyBTb21l
IG90aGVyIHRocmVhZCBpcyBwZXJmb3JtaW5nIHdvcmsuIFNpbmNlIHdlIGhvbGQgdGhlIHF1ZXVl
IGxvY2ssIHdlIGNhbiBiZSBzdXJlCisgICAgICAgICAgICAvLyB0aGF0IHRoZSB3b3JrIHRocmVh
ZCBpcyBub3QgZXhpdGluZyBkdWUgdG8gYW4gZW1wdHkgcXVldWUgYW5kIHdpbGwgcHJvY2VzcyB0
aGUgd29yaworICAgICAgICAgICAgLy8gaXRlbSB3ZSBqdXN0IGFkZGVkIHRvIGl0LiBJZiB3ZSB3
ZXJlbid0IGhvbGRpbmcgdGhlIGxvY2sgd2UnZCBoYXZlIHRvIHNpZ25hbAorICAgICAgICAgICAg
Ly8gbV9wZXJmb3JtV29ya0V2ZW50IHRvIG1ha2Ugc3VyZSB0aGUgd29yayBpdGVtIGdvdCBwaWNr
ZWQgdXAuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBxdWV1
ZS0+cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFkKCk7Cit9CisKK3ZvaWQgV29ya1F1
ZXVlOjpyZWdpc3RlckhhbmRsZShIQU5ETEUgaGFuZGxlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiBmdW5jdGlvbikKK3sKKyAgICBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGhhbmRsZUl0ZW0gPSBI
YW5kbGVXb3JrSXRlbTo6Y3JlYXRlQnlBZG9wdGluZ0hhbmRsZShoYW5kbGUsIGZ1bmN0aW9uLCB0
aGlzKTsKKworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2hhbmRsZXNMb2NrKTsK
KyAgICAgICAgQVNTRVJUX0FSRyhoYW5kbGUsICFtX2hhbmRsZXMuY29udGFpbnMoaGFuZGxlKSk7
CisgICAgICAgIG1faGFuZGxlcy5zZXQoaGFuZGxlLCBoYW5kbGVJdGVtKTsKKyAgICB9CisKKyAg
ICBIQU5ETEUgd2FpdEhhbmRsZTsKKyAgICBpZiAoITo6UmVnaXN0ZXJXYWl0Rm9yU2luZ2xlT2Jq
ZWN0KCZ3YWl0SGFuZGxlLCBoYW5kbGUsIGhhbmRsZUNhbGxiYWNrLCBoYW5kbGVJdGVtLmdldCgp
LCBJTkZJTklURSwgV1RfRVhFQ1VURURFRkFVTFQpKSB7CisgICAgICAgIERXT1JEIGVycm9yID0g
OjpHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
ICAgIGhhbmRsZUl0ZW0tPnNldFdhaXRIYW5kbGUod2FpdEhhbmRsZSk7Cit9CisKK3ZvaWQgV29y
a1F1ZXVlOjp1bnJlZ2lzdGVyQW5kQ2xvc2VIYW5kbGUoSEFORExFIGhhbmRsZSkKK3sKKyAgICBS
ZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW07CisgICAgeworICAgICAgICBNdXRleExvY2tlciBs
b2NrZXIobV9oYW5kbGVzTG9jayk7CisgICAgICAgIEFTU0VSVF9BUkcoaGFuZGxlLCBtX2hhbmRs
ZXMuY29udGFpbnMoaGFuZGxlKSk7CisgICAgICAgIGl0ZW0gPSBtX2hhbmRsZXMudGFrZShoYW5k
bGUpOworICAgIH0KKworICAgIHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1Tb29uKGl0ZW0u
cmVsZWFzZSgpKTsKK30KKworRFdPUkQgV29ya1F1ZXVlOjp3b3JrVGhyZWFkQ2FsbGJhY2sodm9p
ZCogY29udGV4dCkKK3sKKyAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOworCisgICAg
V29ya1F1ZXVlKiBxdWV1ZSA9IHN0YXRpY19jYXN0PFdvcmtRdWV1ZSo+KGNvbnRleHQpOworCisg
ICAgaWYgKCFxdWV1ZS0+dHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBxdWV1ZS0+cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFkKCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtV29ya09uUmVnaXN0ZXJl
ZFdvcmtUaHJlYWQoKQoreworICAgIEFTU0VSVChtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQpOwor
CisgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKKworICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2subG9j
aygpOworCisgICAgd2hpbGUgKGlzVmFsaWQgJiYgIW1fd29ya0l0ZW1RdWV1ZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxXb3JrSXRlbVdpbj4gPiB3b3JrSXRlbVF1ZXVlOwor
ICAgICAgICBtX3dvcmtJdGVtUXVldWUuc3dhcCh3b3JrSXRlbVF1ZXVlKTsKKworICAgICAgICAv
LyBBbGxvdyBtb3JlIHdvcmsgdG8gYmUgc2NoZWR1bGVkIHdoaWxlIHdlJ3JlIG5vdCB1c2luZyB0
aGUgcXVldWUgZGlyZWN0bHkuCisgICAgICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29ya0l0ZW1RdWV1ZS5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faXNWYWxpZE11dGV4KTsKKyAg
ICAgICAgICAgIGlzVmFsaWQgPSBtX2lzVmFsaWQ7CisgICAgICAgICAgICBpZiAoIWlzVmFsaWQp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB3b3JrSXRlbVF1ZXVlW2ldLT5m
dW5jdGlvbigpKCk7CisgICAgICAgIH0KKyAgICAgICAgbV93b3JrSXRlbVF1ZXVlTG9jay5sb2Nr
KCk7CisgICAgfQorCisgICAgLy8gT25lIGludmFyaWFudCB3ZSBtYWludGFpbiBpcyB0aGF0IGFu
eSB3b3JrIHNjaGVkdWxlZCB3aGlsZSBhIHdvcmsgdGhyZWFkIGlzIHJlZ2lzdGVyZWQgd2lsbAor
ICAgIC8vIGJlIGhhbmRsZWQgYnkgdGhhdCB3b3JrIHRocmVhZC4gVW5yZWdpc3RlciBhcyB0aGUg
d29yayB0aHJlYWQgd2hpbGUgdGhlIHF1ZXVlIGxvY2sgaXMgc3RpbGwKKyAgICAvLyBoZWxkIHNv
IHRoYXQgbm8gd29yayBjYW4gYmUgc2NoZWR1bGVkIHdoaWxlIHdlJ3JlIHN0aWxsIHJlZ2lzdGVy
ZWQuCisgICAgdW5yZWdpc3RlckFzV29ya1RocmVhZCgpOworCisgICAgbV93b3JrSXRlbVF1ZXVl
TG9jay51bmxvY2soKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShj
b25zdCBjaGFyKiBuYW1lKQoreworICAgIG1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCA9IDA7Cisg
ICAgbV90aW1lclF1ZXVlID0gOjpDcmVhdGVUaW1lclF1ZXVlKCk7CisgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShtX3RpbWVyUXVldWUsICI6OkNyZWF0ZVRpbWVyUXVldWUgZmFpbGVkIHdpdGggZXJy
b3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7Cit9CisKK2Jvb2wgV29ya1F1ZXVlOjp0cnlSZWdp
c3RlckFzV29ya1RocmVhZCgpCit7CisgICAgTE9ORyByZXN1bHQgPSA6OkludGVybG9ja2VkQ29t
cGFyZUV4Y2hhbmdlKCZtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQsIDEsIDApOworICAgIEFTU0VS
VCghcmVzdWx0IHx8IHJlc3VsdCA9PSAxKTsKKyAgICByZXR1cm4gIXJlc3VsdDsKK30KKwordm9p
ZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJBc1dvcmtUaHJlYWQoKQoreworICAgIExPTkcgcmVzdWx0
ID0gOjpJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSgmbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVk
LCAwLCAxKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IDEpOworfQorCit2
b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2hhbmRsZXNMb2NrKTsKKyAgICBBU1NFUlQobV9o
YW5kbGVzLmlzRW1wdHkoKSk7CisjZW5kaWYKKworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGVu
c3VyZSB0aGF0IGFueSB0aW1lci1xdWV1ZSB0aW1lcnMgdGhhdCBmaXJlIGFmdGVyIHRoaXMgcG9p
bnQgZG9uJ3QgdHJ5IHRvCisgICAgLy8gYWNjZXNzIHRoaXMgV29ya1F1ZXVlIDxodHRwOi8vd2Vi
a2l0Lm9yZy9iLzQ0NjkwPi4KKyAgICA6OkRlbGV0ZVRpbWVyUXVldWVFeChtX3RpbWVyUXVldWUs
IDApOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYgZnVuY3Rpb24pCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxv
Y2spOworCisgICAgbV93b3JrSXRlbVF1ZXVlLmFwcGVuZChXb3JrSXRlbVdpbjo6Y3JlYXRlKGZ1
bmN0aW9uLCB0aGlzKSk7CisKKyAgICAvLyBTcGF3biBhIHdvcmsgdGhyZWFkIHRvIHBlcmZvcm0g
dGhlIHdvcmsgd2UganVzdCBhZGRlZC4gQXMgYW4gb3B0aW1pemF0aW9uLCB3ZSBhdm9pZAorICAg
IC8vIHNwYXduaW5nIHRoZSB0aHJlYWQgaWYgYSB3b3JrIHRocmVhZCBpcyBhbHJlYWR5IHJlZ2lz
dGVyZWQuIFRoaXMgcHJldmVudHMgbXVsdGlwbGUgd29yaworICAgIC8vIHRocmVhZHMgZnJvbSBi
ZWluZyBzcGF3bmVkIGluIG1vc3QgY2FzZXMuIChOb3RlIHRoYXQgd2hlbiBhIHdvcmsgdGhyZWFk
IGhhcyBiZWVuIHNwYXduZWQgYnV0CisgICAgLy8gaGFzbid0IHJlZ2lzdGVyZWQgaXRzZWxmIHll
dCwgbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkIHdpbGwgYmUgZmFsc2UgYW5kIHdlJ2xsIGVuZCB1
cAorICAgIC8vIHNwYXduaW5nIGEgc2Vjb25kIHdvcmsgdGhyZWFkIGhlcmUuIEJ1dCB3b3JrIHRo
cmVhZCByZWdpc3RyYXRpb24gcHJvY2VzcyB3aWxsIGVuc3VyZSB0aGF0CisgICAgLy8gb25seSBv
bmUgdGhyZWFkIGFjdHVhbGx5IGVuZHMgdXAgcGVyZm9ybWluZyB3b3JrLikKKyAgICBpZiAoIW1f
aXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCkKKyAgICAgICAgOjpRdWV1ZVVzZXJXb3JrSXRlbSh3b3Jr
VGhyZWFkQ2FsbGJhY2ssIHRoaXMsIFdUX0VYRUNVVEVERUZBVUxUKTsKK30KKworc3RydWN0IFRp
bWVyQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaW1lckNvbnRleHQ+IHsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaW1lckNvbnRleHQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUaW1lckNvbnRleHQpOyB9CisKKyAgICBXb3JrUXVldWUqIHF1ZXVlOworICAg
IEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb247CisgICAgTXV0ZXggdGltZXJNdXRleDsKKyAgICBI
QU5ETEUgdGltZXI7CisKK3ByaXZhdGU6CisgICAgVGltZXJDb250ZXh0KCkgOiBxdWV1ZSgwKSwg
dGltZXIoMCkgeyB9Cit9OworCit2b2lkIFdvcmtRdWV1ZTo6dGltZXJDYWxsYmFjayh2b2lkKiBj
b250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpCit7CisgICAgQVNTRVJUX0FSRyhjb250
ZXh0LCBjb250ZXh0KTsKKyAgICBBU1NFUlRfVU5VU0VEKHRpbWVyT3JXYWl0RmlyZWQsIHRpbWVy
T3JXYWl0RmlyZWQpOworCisgICAgLy8gQmFsYW5jZWQgYnkgbGVha1JlZiBpbiBzY2hlZHVsZVdv
cmtBZnRlckRlbGF5LgorICAgIFJlZlB0cjxUaW1lckNvbnRleHQ+IHRpbWVyQ29udGV4dCA9IGFk
b3B0UmVmKHN0YXRpY19jYXN0PFRpbWVyQ29udGV4dCo+KGNvbnRleHQpKTsKKworICAgIHRpbWVy
Q29udGV4dC0+cXVldWUtPmRpc3BhdGNoKHRpbWVyQ29udGV4dC0+ZnVuY3Rpb24pOworCisgICAg
TXV0ZXhMb2NrZXIgbG9jayh0aW1lckNvbnRleHQtPnRpbWVyTXV0ZXgpOworICAgIEFTU0VSVCh0
aW1lckNvbnRleHQtPnRpbWVyKTsKKyAgICBBU1NFUlQodGltZXJDb250ZXh0LT5xdWV1ZS0+bV90
aW1lclF1ZXVlKTsKKyAgICBpZiAoITo6RGVsZXRlVGltZXJRdWV1ZVRpbWVyKHRpbWVyQ29udGV4
dC0+cXVldWUtPm1fdGltZXJRdWV1ZSwgdGltZXJDb250ZXh0LT50aW1lciwgMCkpCisgICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoZmFsc2UsICI6OkRlbGV0ZVRpbWVyUXVldWVUaW1lciBmYWls
ZWQgd2l0aCBlcnJvciAlbHUiLCA6OkdldExhc3RFcnJvcigpKTsKK30KKwordm9pZCBXb3JrUXVl
dWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwg
ZG91YmxlIGRlbGF5KQoreworICAgIEFTU0VSVChtX3RpbWVyUXVldWUpOworCisgICAgUmVmUHRy
PFRpbWVyQ29udGV4dD4gY29udGV4dCA9IFRpbWVyQ29udGV4dDo6Y3JlYXRlKCk7CisgICAgY29u
dGV4dC0+cXVldWUgPSB0aGlzOworICAgIGNvbnRleHQtPmZ1bmN0aW9uID0gZnVuY3Rpb247CisK
KyAgICB7CisgICAgICAgIC8vIFRoZSB0aW1lciBjYWxsYmFjayBjb3VsZCBmaXJlIGJlZm9yZSA6
OkNyZWF0ZVRpbWVyUXVldWVUaW1lciBldmVuIHJldHVybnMsIHNvIHdlIHByb3RlY3QKKyAgICAg
ICAgLy8gY29udGV4dC0+dGltZXIgd2l0aCBhIG11dGV4IHRvIGVuc3VyZSB0aGUgdGltZXIgY2Fs
bGJhY2sgZG9lc24ndCBhY2Nlc3MgaXQgYmVmb3JlIHRoZQorICAgICAgICAvLyB0aW1lciBoYW5k
bGUgaGFzIGJlZW4gc3RvcmVkIGluIGl0LgorICAgICAgICBNdXRleExvY2tlciBsb2NrKGNvbnRl
eHQtPnRpbWVyTXV0ZXgpOworCisgICAgICAgIC8vIFNpbmNlIG91ciB0aW1lciBjYWxsYmFjayBp
cyBxdWljaywgd2UgY2FuIGV4ZWN1dGUgaW4gdGhlIHRpbWVyIHRocmVhZCBpdHNlbGYgYW5kIGF2
b2lkCisgICAgICAgIC8vIGFuIGV4dHJhIHRocmVhZCBzd2l0Y2ggb3ZlciB0byBhIHdvcmtlciB0
aHJlYWQuCisgICAgICAgIGlmICghOjpDcmVhdGVUaW1lclF1ZXVlVGltZXIoJmNvbnRleHQtPnRp
bWVyLCBtX3RpbWVyUXVldWUsIHRpbWVyQ2FsbGJhY2ssIGNvbnRleHQuZ2V0KCksIGRlbGF5ICog
MTAwMCwgMCwgV1RfRVhFQ1VURUlOVElNRVJUSFJFQUQpKSB7CisgICAgICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKGZhbHNlLCAiOjpDcmVhdGVUaW1lclF1ZXVlVGltZXIgZmFpbGVkIHdpdGgg
ZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGUgdGltZXIgY2FsbGJhY2sgd2lsbCBoYW5kbGUgZGVz
dHJveWluZyBjb250ZXh0LgorICAgIGNvbnRleHQucmVsZWFzZSgpLmxlYWtSZWYoKTsKK30KKwor
dm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1Tb29uKFBhc3NSZWZQ
dHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW0pCit7CisgICAgLy8gV2UncmUgZ29pbmcgdG8gbWFrZSBh
IGJsb2NraW5nIGNhbGwgdG8gOjpVbnJlZ2lzdGVyV2FpdEV4IGJlZm9yZSBjbG9zaW5nIHRoZSBo
YW5kbGUuIChUaGUKKyAgICAvLyBibG9ja2luZyB2ZXJzaW9uIG9mIDo6VW5yZWdpc3RlcldhaXRF
eCBpcyBtdWNoIHNpbXBsZXIgdGhhbiB0aGUgbm9uLWJsb2NraW5nIHZlcnNpb24uKSBJZiB3ZQor
ICAgIC8vIGRvIHRoaXMgb24gdGhlIGN1cnJlbnQgdGhyZWFkLCB3ZSdsbCBkZWFkbG9jayBpZiB3
ZSdyZSBjdXJyZW50bHkgaW4gYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IKKyAgICAvLyB0aGUgd2Fp
dCB3ZSdyZSB1bnJlZ2lzdGVyaW5nLiBTbyBpbnN0ZWFkIHdlIGRvIGl0IGFzeW5jaHJvbm91c2x5
IG9uIHNvbWUgb3RoZXIgd29ya2VyIHRocmVhZC4KKworICAgIDo6UXVldWVVc2VyV29ya0l0ZW0o
dW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbUNhbGxiYWNrLCBpdGVtLmxlYWtSZWYoKSwgV1Rf
RVhFQ1VURURFRkFVTFQpOworfQorCitEV09SRCBXSU5BUEkgV29ya1F1ZXVlOjp1bnJlZ2lzdGVy
V2FpdEFuZERlc3Ryb3lJdGVtQ2FsbGJhY2sodm9pZCogY29udGV4dCkKK3sKKyAgICBBU1NFUlRf
QVJHKGNvbnRleHQsIGNvbnRleHQpOworICAgIFJlZlB0cjxIYW5kbGVXb3JrSXRlbT4gaXRlbSA9
IGFkb3B0UmVmKHN0YXRpY19jYXN0PEhhbmRsZVdvcmtJdGVtKj4oY29udGV4dCkpOworCisgICAg
Ly8gTm93IHRoYXQgd2Uga25vdyB3ZSdyZSBub3QgaW4gYSBjYWxsYmFjayBmdW5jdGlvbiBmb3Ig
dGhlIHdhaXQgd2UncmUgdW5yZWdpc3RlcmluZywgd2UgY2FuCisgICAgLy8gbWFrZSBhIGJsb2Nr
aW5nIGNhbGwgdG8gOjpVbnJlZ2lzdGVyV2FpdEV4LgorICAgIGlmICghOjpVbnJlZ2lzdGVyV2Fp
dEV4KGl0ZW0tPndhaXRIYW5kbGUoKSwgSU5WQUxJRF9IQU5ETEVfVkFMVUUpKSB7CisgICAgICAg
IERXT1JEIGVycm9yID0gOjpHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4
IGUwNzM3ZDguLjBlMjFkYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMTk5LDYgKzExOTks
OCBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbElt
YWdlRGVjb2Rlci5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZXRhaW5lZE1vZGVCaXRtYXBJ
bWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvUm91bmRlZFJlY3QuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVk
Rm9udERhdGEuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjRmZThmNS4uZDgxMGViYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDM0MyBAQAorMjAxMi0wNy0wOSAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBj
b21wYW55MTAwLm5ldD4KKworICAgICAgICBSZWZhY3RvcmluZyBtZXRhZGF0YSBvZiBCaXRtYXBJ
bWFnZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkw
NzU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhl
cmUgaXMgbm8gcHJlY2lzZSBkZWZpbml0aW9uIG9mIEZyYW1lRGF0YSdzIG1ldGFkYXRhLiBTbyBJ
IGFzc3VtZSB0aGUgbWV0YWRhdGEKKyAgICAgICAgYXMgYSBjb21iaW5hdGlvbiBvZiBtX29yaWVu
dGF0aW9uLCBtX2R1cmF0aW9uLCBhbmQgbV9oYXNBbHBoYS4gVGhpcyBkZWZpbml0aW9uCisgICAg
ICAgIHdvcmtzIGZpbmUgYmVjYXVzZSBjdXJyZW50bHkgdGhlcmUgaXMgbm8gbWV0aG9kIHRoYXQg
dXNlcyBtX2hhdmVNZXRhZGF0YSBvbiBpdHMKKyAgICAgICAgcHVycG9zZS4KKworICAgICAgICBU
aGlzIHBhdGNoIGNvbnRhaW5zIHR3byBjaGFuZ2VzOgorCisgICAgICAgIDEuIFJlbW92ZSBGcmFt
ZURhdGE6Om1faGF2ZU1ldGFkYXRhIGZvciByZWFkYWJpbGl0eS4KKyAgICAgICAgT25seSBCaXRt
YXBJbWFnZTo6ZGF0YUNoYW5nZWQgdXNlcyBtX2hhdmVNZXRhZGF0YSBpbiBvcmRlciB0byBjaGVj
ayB3aGV0aGVyIHRoZQorICAgICAgICBmcmFtZSBpcyBjbGVhcmVkIG9yIG5vdCwgYW5kIGl0IGlz
IGVub3VnaCB0byBjaGVjayB3aGV0aGVyIEZyYW1lRGF0YTo6bV9mcmFtZSBpcworICAgICAgICAw
LgorCisgICAgICAgIDIuIERvbid0IGRlY29kZSBhZ2FpbiBpZiBtZXRhZGF0YSBleGlzdC4KKyAg
ICAgICAgSWYgdGhlIGluZGV4ZWQgZnJhbWUgd2FzIG9uY2UgZGVjb2RlZCBjb21wbGV0ZWx5IGFu
ZCBjbGVhcmVkIGJ5CisgICAgICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgpLCBXZSBkb24ndCBuZWVk
IHRvIGRlY29kZSBhZ2FpbiBpbiBvcmRlciB0byBrbm93IG1ldGFkYXRhCisgICAgICAgIGJlY2F1
c2UgZGVzdHJveURlY29kZWREYXRhKCkgZG9lcyBub3QgcmVzZXQgdGhlIG1ldGFkYXRhLiBTZWUK
KyAgICAgICAgZGVzdHJveURlY29kZWREYXRhKCkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBi
ZWhhdmlvciBpcyB1bmNoYW5nZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6
OnNldEZyb21JbWFnZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNs
ZWFyKToKKyAgICAgICAgKEZyYW1lRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZy
YW1lQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1lRGF0YSk6CisgICAg
ICAgIChJbWFnZUZyYW1lRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Qml0bWFwSW1hZ2VDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0
bWFwSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhckZyYW1lKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lRGF0YTo6Y2xlYXJGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291
cmNlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJ
bmRleCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0ltYWdlT3BlblZHLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXJGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0ltYWdlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVh
ckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhckZyYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9JbWFnZVdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6
Y2xlYXJGcmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKworMjAxMi0wNy0wOSAgSHVhbmcgRG9u
Z3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBCaXRtYXBJbWFnZTo6
ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCgpIG11c3QgcmV0dXJuIGZhbHNlIGlmIEltYWdlRGVjb2Rl
ciBpcyBub3QgaW5pdGlhbGl6ZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05MDc1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoZSBjdXJyZW50IGNvZGUgZm9ydHVuYXRlbHkgaGFzIHdvcmtlZCBzbyBm
YXIgYmVjYXVzZSBvbmx5CisgICAgICAgIEJpdG1hcEltYWdlOjpzdGFydEFuaW1hdGlvbiBjYWxs
cyBmcmFtZUlzQ29tcGxldGVBdEluZGV4LCBhbmQgc3RhcnRBbmltYXRpb24KKyAgICAgICAgY2Fu
bm90IGNhbGwgZnJhbWVJc0NvbXBsZXRlQXRJbmRleCBpZiBJbWFnZURlY29kZXIgaXMgbm90IHll
dCBpbml0aWFsaXplZC4KKyAgICAgICAgc3RhcnRBbmltYXRpb24gcmV0dXJucyBhdCB0aGUgZmly
c3QgbGluZSBiZWNhc2Ugc2hvdWxkQW5pbWF0ZSgpIGFsd2F5cyByZXR1cm4KKyAgICAgICAgZmFs
c2UgaW4gdGhpcyBjYXNlLgorCisgICAgICAgICAgICBpZiAobV9mcmFtZVRpbWVyIHx8ICFzaG91
bGRBbmltYXRlKCkgfHwgZnJhbWVDb3VudCgpIDw9IDEpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIFRoaXMgY2hhbmdlIGlzIG5lZWRlZCBiZWNhdXNlIHBhcmFsbGVsIGltYWdl
IGRlY29kZXJzIGNhbGwKKyAgICAgICAgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5k
ZXggaW4gb3RoZXIgcGxhY2VzIHRvby4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG1hbnVhbGx5
IHRlc3RlZCB3aGV0aGVyIHRoZSBjYWxsZXIgZXhpc3RzIG9yIG5vdCB0aGF0CisgICAgICAgIGNh
bGxzIEJpdG1hcEltYWdlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KCkgYmVmb3JlIEltYWdlRGVj
b2RlciBpcworICAgICAgICBpbml0aWFsaXplZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFt
ZUlzQ29tcGxldGVBdEluZGV4KToKKworMjAxMi0wNy0wOSAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0
ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBSZW1vdmUgZG93bi1jYXN0aW5nIHRvIEJp
dG1hcEltYWdlIGluIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA3NTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBCaXRtYXBJbWFnZSBkcmF3IG1l
dGhvZCB3aGljaCB0YWtlcyBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gZW51bSBhcworICAg
ICAgICB0aGUgbGFzdCBhcmd1bWVudCBmb3IgQ0cuIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGUgY29u
ZGl0aW9uYWwgZG93bi1jYXN0aW5nIGluCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGlzIG5lZWRlZCBmb3IgcGFyYWxsZWwgaW1hZ2Ug
ZGVjb2RlcnMuIEJlY2F1c2UgcGFyYWxsZWwgaW1hZ2UKKyAgICAgICAgZGVjb2RlcnMgdXNlIGEg
Qml0bWFwIGltYWdlIHdyYXBwZXIgY2xhc3Mgd2hpY2ggZXh0ZW5kcyBJbWFnZSAobm90IEJpdG1h
cCksIHRoZQorICAgICAgICBkb3duLWNhc3RpbmcgYWJvdmUgY2F1c2VzIHRoZSBsb3NzIG9mIFJl
c3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSB3aGljaCBtdXN0IGJlCisgICAgICAgIHBhc3NlZCB0
byBCaXRtYXBJbWFnZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5n
ZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaDoKKyAgICAgICAgKEltYWdlKToK
KworMjAxMi0wNy0wOSAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4K
KworICAgICAgICBGaXggYSBwb3RlbnRpYWwgYnVnIG9mIEJpdG1hcEltYWdlOjpmcmFtZUNvdW50
KCkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDc1
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIGFu
IEltYWdlRGVjb2RlciBpcyBub3QgeWV0IGluaXRpYWxpemVkLCBtX3NvdXJjZS5mcmFtZUNvdW50
KCkgcmV0dXJucyAwLiBUaGlzCisgICAgICAgIGRvZXMgbm90IG1lYW4gdGhhdCB0aGUgZnJhbWUg
Y291bnQgaXMgYWN0dWFsbHkgMC4gU28gd2UgbXVzdCBzZXQKKyAgICAgICAgbV9oYXZlRnJhbWVD
b3VudCB0byB0cnVlIG9ubHkgd2hlbiBtX2ZyYW1lQ291bnQgaXMgbm90IDAuCisKKyAgICAgICAg
VGhlIGN1cnJlbnQgY29kZSBpcyBva2F5IGJlY2F1c2UgQml0bWFwSW1hZ2U6OmZyYW1lQ291bnQo
KSBpcyBuZXZlciBjYWxsZWQKKyAgICAgICAgYmVmb3JlIHRoZSBkZWNvZGVyIGlzIGluaXRpYWxp
emVkLiBIb3dldmVyLCB0aGlzIG5vIGxvbmdlciBob2xkcyB0cnVlIG9uY2Ugd2UKKyAgICAgICAg
aW50cm9kdWNlIHBhcmFsbGVsIGltYWdlIGRlY29kZXJzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lQ291bnQp
OgorCisyMDEyLTA3LTA5ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0
PgorCisgICAgICAgIERvbid0IGRlc3RvcnkgdGhlIGRlY29kZWQgZGF0YSBvZiBhbiBpbWFnZSBp
ZiBXZWJLaXQgaXMgYWJvdXQgdG8gcmVuZGVyIHRoZSBpbWFnZS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNzIxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiB0aGUgY2FjaGUgY2FwYWNpdHkgb2Yg
dGhlIE1lbW9yeUNhY2hlIGlzIGV4Y2VlZGVkLCB0aGUgZGVjb2RlZCBkYXRhIG9mIGFsbAorICAg
ICAgICB0aGUgQ2FjaGVkSW1hZ2VzIGFyZSBkZXN0cm95ZWQuIEV2ZW4gdGhlIGltYWdlcyBpbnNp
ZGUgdGhlIHZpZXdwb3J0IGFyZQorICAgICAgICBkZXN0cm95ZWQuICBIb3dldmVyLCBpZiB0aGUg
aW1hZ2VzIG5lZWQgdG8gYmUgcmVuZGVyZWQgYWdhaW4gZHVlIHRvIHNjb2xsIGV2ZW50cworICAg
ICAgICBvciBhbmltYXRpb24sIHRoZXkgbXVzdCBiZSBkZWNvZGVkIGFnYWluLiBBcyBhbiBleHRy
ZW1lIGNhc2UsIGlmIHRoZXJlIGlzIGFuCisgICAgICAgIGFuaW1hdGlvbiB3aXRoIGFuIGltYWdl
IHdoZW4gTWVtb3J5Q2FjaGUgaXMgYWxtb3N0IGZ1bGwsIHRoZSBpbWFnZSBtdXN0IGJlCisgICAg
ICAgIGRlY29kZWQgZXZlcnkgZnJhbWUuIFRoaXMgc2xvd3MgZG93biBhbmltYXRpb24gYW5kIG5l
ZWRsZXNzbHkgY29uc3VtZXMgQ1BVCisgICAgICAgIGN5Y2xlcy4KKworICAgICAgICBUaGVyZWZv
cmUsIGl0IGlzIGJldHRlciB0byBub3QgZGVzdG9yeSB0aGUgZGVjb2RlZCBkYXRhIG9mIGFuIGlt
YWdlIGlmIHRoZSBpbWFnZQorICAgICAgICBpcyBpbnNpZGUgdGhlIHZpZXdwb3J0IGJlY2F1c2Ug
dGhlcmUgaXMgaGlnaCBjaGFuY2UgdGhhdCB0aGUgaW1hZ2UgbmVlZHMgdG8gYmUKKyAgICAgICAg
cmVuZGVyZWQgYWdhaW4gc29vbi4gVGhpcyBwYXRjaCByZWR1Y2VzIHRoZSB1bm5lY2Vzc2FyeSBy
ZXBldGl0aW9uIG9mIGltYWdlIGRlY29kaW5nCisgICAgICAgIG9uIGxvdyBtZW1vcnksIGFuZCBh
bHNvIHJlbGlldmVzIHRoZSBtZW1vcnkgZnJhZ21lbnRhdGlvbiBiZWNhdXNlIGl0IGF2b2lkcyBy
ZWFsbG9jYXRpb24KKyAgICAgICAgb2YgaW1hZ2UgZnJhbWVzLgorCisgICAgICAgIEluIGFkZGl0
aW9uLCB0aGVyZSBpcyBhbm90aGVyIHBvc2l0aXZlIHNpZGUgZWZmZWN0LiBDdXJyZW50bHksCisg
ICAgICAgIENhY2hlZEltYWdlQ2xpZW50Ojp3aWxsUmVuZGVySW1hZ2UoKSBpcyB1c2VkIG9ubHkg
dG8gZGV0ZXJtaW5lIGlmIEdJRiBhbmltYXRpb24gbmVlZHMKKyAgICAgICAgdG8gYmUgcGF1c2Vk
IG9yIG5vdCBpbiBDYWNoZWRJbWFnZTo6c2hvdWxkUGF1c2VBbmltYXRpb24oKS4gVGhpcyBwYXRj
aCBtYWtlcworICAgICAgICBHSUYgYW5pbWF0aW9uIG91dHNpZGUgdGhlIHZpZXdvcnQgYmUgcGF1
c2VkLgorCisgICAgICAgIFRoaXMgaXMgYWxzbyBhIHByZXJlcXVpc2l0ZSBmb3IgcGFyYWxsZWwg
aW1hZ2UgZGVjb2RlcnMuIEJlY2F1c2UgcGFyYWxsZWwgaW1hZ2UKKyAgICAgICAgZGVjb2RlcnMg
ZGVjb2RlIGFuIGltYWdlIGFzeW5jaHJvbm91c2x5LCBjbGllbnRzIGNhbm5vdCByZW5kZXIgdGhl
IGltYWdlIGF0IHRoZSB0aW1lCisgICAgICAgIHdoZW4gdGhlIHJlcXVlc3QgaXMgbWFkZS4gQ2xp
ZW50cyBjYW4gZHJhdyB0aGUgaW1hZ2UgbGF0ZXIgYWZ0ZXIgcmVjZWl2aW5nIGltYWdlCisgICAg
ICAgIGRlY29kaW5nIGNvbXBsZXRlIG5vdGlmaWNhdGlvbi4gSG93ZXZlciwgdGhlcmUgaXMgYSBw
cm9ibGVtIGJlY2F1c2UgTWVtb3J5Q2FjaGUgY2FuCisgICAgICAgIGRlc3Ryb3kgdGhlIGRlY29k
ZWQgZGF0YSBiZWZvcmUgY2xpZW50cyBhY3R1YWxseSByZW5kZXIgdGhlIGltYWdlLiBTbyBwYXJh
bGxlbCBpbWFnZSBkZWNvZGVycworICAgICAgICBtdXN0IHByZXZlbnQgdGhlIGRlY29kZWQgZGF0
YSBmcm9tIGJlaW5nIGRlc3Ryb3llZCBpZiB0aGUgaW1hZ2Ugd2lsbCBiZSByZW5kZXJlZAorICAg
ICAgICBzb29uLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWF5IGNvbnN1bWUgYSBsaXR0bGUgbW9y
ZSBtZW1vcnksIGJ1dCBmdXJ0dW5hdGVseSB0aGUgcGVhayBtZW1vcnkgdXNhZ2UKKyAgICAgICAg
aXMgYWxtb3N0IHRoZSBzYW1lLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtIG5vIG5ldyB0ZXN0
YWJsZSBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdlOjpsaWtlbHlUb0JlVXNlZFNvb24p
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6c2hv
dWxkUGF1c2VBbmltYXRpb24pOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5o
OgorICAgICAgICAoQ2FjaGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2VD
bGllbnQ6OndpbGxSZW5kZXJJbWFnZSk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlLmg6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZWRSZXNvdXJjZTo6bGlrZWx5VG9CZVVzZWRTb29uKToKKyAgICAgICAgKiBsb2FkZXIvY2Fj
aGUvTWVtb3J5Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnBydW5l
TGl2ZVJlc291cmNlc1RvU2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OndpbGxSZW5kZXJJbWFnZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoUmVuZGVyT2JqZWN0
KToKKworMjAxMi0wNy0wOSAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5l
dD4KKworICAgICAgICBEb24ndCBkZXN0cm95IHRoZSBkZWNvZGVkIGRhdGEgb2YgYW4gaW1hZ2Ug
aWYgV2ViS2l0IGlzIGFib3V0IHRvIHJlbmRlciB0aGUgaW1hZ2UuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDcyMQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gdGhlIGNhY2hlIGNhcGFjaXR5IG9m
IHRoZSBNZW1vcnlDYWNoZSBpcyBleGNlZWRlZCwgdGhlIGRlY29kZWQgZGF0YSBvZiBhbGwKKyAg
ICAgICAgdGhlIENhY2hlZEltYWdlcyBhcmUgZGVzdHJveWVkLiBFdmVuIHRoZSBpbWFnZXMgaW5z
aWRlIHRoZSB2aWV3cG9ydCBhcmUKKyAgICAgICAgZGVzdHJveWVkLiAgSG93ZXZlciwgaWYgdGhl
IGltYWdlcyBuZWVkIHRvIGJlIHJlbmRlcmVkIGFnYWluIGR1ZSB0byBzY29sbCBldmVudHMKKyAg
ICAgICAgb3IgYW5pbWF0aW9uLCB0aGV5IG11c3QgYmUgZGVjb2RlZCBhZ2Fpbi4gQXMgYW4gZXh0
cmVtZSBjYXNlLCBpZiB0aGVyZSBpcyBhbgorICAgICAgICBhbmltYXRpb24gd2l0aCBhbiBpbWFn
ZSB3aGVuIE1lbW9yeUNhY2hlIGlzIGFsbW9zdCBmdWxsLCB0aGUgaW1hZ2UgbXVzdCBiZQorICAg
ICAgICBkZWNvZGVkIGV2ZXJ5IGZyYW1lLiBUaGlzIHNsb3dzIGRvd24gYW5pbWF0aW9uIGFuZCBu
ZWVkbGVzc2x5IGNvbnN1bWVzIENQVQorICAgICAgICBjeWNsZXMuCisKKyAgICAgICAgVGhlcmVm
b3JlLCBpdCBpcyBiZXR0ZXIgdG8gbm90IGRlc3RvcnkgdGhlIGRlY29kZWQgZGF0YSBvZiBhbiBp
bWFnZSBpZiB0aGUgaW1hZ2UKKyAgICAgICAgaXMgaW5zaWRlIHRoZSB2aWV3cG9ydCBiZWNhdXNl
IHRoZXJlIGlzIGhpZ2ggY2hhbmNlIHRoYXQgdGhlIGltYWdlIG5lZWRzIHRvIGJlCisgICAgICAg
IHJlbmRlcmVkIGFnYWluIHNvb24uIFRoaXMgcGF0Y2ggcmVkdWNlcyB0aGUgdW5uZWNlc3Nhcnkg
cmVwZXRpdGlvbiBvZiBpbWFnZSBkZWNvZGluZworICAgICAgICBvbiBsb3cgbWVtb3J5LCBhbmQg
YWxzbyByZWxpZXZlcyB0aGUgbWVtb3J5IGZyYWdtZW50YXRpb24gYmVjYXVzZSBpdCBhdm9pZHMg
cmVhbGxvY2F0aW9uCisgICAgICAgIG9mIGltYWdlIGZyYW1lcy4KKworICAgICAgICBJbiBhZGRp
dGlvbiwgdGhlcmUgaXMgYW5vdGhlciBwb3NpdGl2ZSBzaWRlIGVmZmVjdC4gQ3VycmVudGx5LAor
ICAgICAgICBDYWNoZWRJbWFnZUNsaWVudDo6d2lsbFJlbmRlckltYWdlKCkgaXMgdXNlZCBvbmx5
IHRvIGRldGVybWluZSBpZiBHSUYgYW5pbWF0aW9uIG5lZWRzCisgICAgICAgIHRvIGJlIHBhdXNl
ZCBvciBub3QgaW4gQ2FjaGVkSW1hZ2U6OnNob3VsZFBhdXNlQW5pbWF0aW9uKCkuIFRoaXMgcGF0
Y2ggbWFrZXMKKyAgICAgICAgR0lGIGFuaW1hdGlvbiBvdXRzaWRlIHRoZSB2aWV3b3J0IGJlIHBh
dXNlZC4KKworICAgICAgICBUaGlzIGlzIGFsc28gYSBwcmVyZXF1aXNpdGUgZm9yIHBhcmFsbGVs
IGltYWdlIGRlY29kZXJzLiBCZWNhdXNlIHBhcmFsbGVsIGltYWdlCisgICAgICAgIGRlY29kZXJz
IGRlY29kZSBhbiBpbWFnZSBhc3luY2hyb25vdXNseSwgY2xpZW50cyBjYW5ub3QgcmVuZGVyIHRo
ZSBpbWFnZSBhdCB0aGUgdGltZQorICAgICAgICB3aGVuIHRoZSByZXF1ZXN0IGlzIG1hZGUuIENs
aWVudHMgY2FuIGRyYXcgdGhlIGltYWdlIGxhdGVyIGFmdGVyIHJlY2VpdmluZyBpbWFnZQorICAg
ICAgICBkZWNvZGluZyBjb21wbGV0ZSBub3RpZmljYXRpb24uIEhvd2V2ZXIsIHRoZXJlIGlzIGEg
cHJvYmxlbSBiZWNhdXNlIE1lbW9yeUNhY2hlIGNhbgorICAgICAgICBkZXN0cm95IHRoZSBkZWNv
ZGVkIGRhdGEgYmVmb3JlIGNsaWVudHMgYWN0dWFsbHkgcmVuZGVyIHRoZSBpbWFnZS4gU28gcGFy
YWxsZWwgaW1hZ2UgZGVjb2RlcnMKKyAgICAgICAgbXVzdCBwcmV2ZW50IHRoZSBkZWNvZGVkIGRh
dGEgZnJvbSBiZWluZyBkZXN0cm95ZWQgaWYgdGhlIGltYWdlIHdpbGwgYmUgcmVuZGVyZWQKKyAg
ICAgICAgc29vbi4KKworICAgICAgICBUaGlzIHBhdGNoIG1heSBjb25zdW1lIGEgbGl0dGxlIG1v
cmUgbWVtb3J5LCBidXQgZnVydHVuYXRlbHkgdGhlIHBlYWsgbWVtb3J5IHVzYWdlCisgICAgICAg
IGlzIGFsbW9zdCB0aGUgc2FtZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSBubyBuZXcgdGVz
dGFibGUgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6bGlrZWx5VG9CZVVzZWRTb29u
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OnNo
b3VsZFBhdXNlQW5pbWF0aW9uKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2Uu
aDoKKyAgICAgICAgKENhY2hlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEltYWdl
Q2xpZW50Ojp3aWxsUmVuZGVySW1hZ2UpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZS5oOgorICAgICAgICAoQ2FjaGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkUmVzb3VyY2U6Omxpa2VseVRvQmVVc2VkU29vbik6CisgICAgICAgICogbG9hZGVyL2Nh
Y2hlL01lbW9yeUNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lbW9yeUNhY2hlOjpwcnVu
ZUxpdmVSZXNvdXJjZXNUb1NpemUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojp3aWxsUmVuZGVySW1hZ2UpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFJlbmRlck9iamVj
dCk6CisKKzIwMTItMDctMDMgIEh1YW5nIERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEwMC5u
ZXQ+CisKKyAgICAgICAgUHJlcGFyZSBmb3IgcGFyYWxsZWwgaW1hZ2UgZGVjb2Rlci4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNDQzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGtleSBwb2ludCBv
ZiB0aGlzIHBhdGNoIGlzIHRvIGNoYW5nZSBob3cgQml0bWFwSW1hZ2UgdXNlcyBJbWFnZVNvdXJj
ZS4KKworICAgICAgICBPcmlnaW5hbGx5LCBCaXRtYXBJbWFnZSByZXRyaWV2ZXMgdGhlIGZyYW1l
IGRhdGEgZnJvbSBJbWFnZVNvdXJjZSBieSBjYWxsaW5nIHRoZQorICAgICAgICBmb2xsb3dpbmcg
bWV0aG9kczoKKyAgICAgICAgLSBOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFtZUF0SW5kZXgoc2l6
ZV90KTsKKyAgICAgICAgLSBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QpOworICAg
ICAgICAtIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90KTsKKyAgICAgICAgLSBib29s
IGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KTsKKyAgICAgICAgLSBJbWFnZU9yaWVudGF0
aW9uIG9yaWVudGF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0OworCisgICAgICAgIFVwb24gZWFj
aCBtZXRob2QgY2FsbCwgSW1hZ2VTb3VyY2Ugc3luY2hyb25vdXNseSBkZWNvZGVzIHRoZSBpbWFn
ZSBhbmQgcmV0dXJucworICAgICAgICB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uLiBCZWNhdXNl
IGFsbCB0aGUgbWV0aG9kcyBhYm92ZSBhcmUgaW5oZXJlbnRseQorICAgICAgICBzeW5jaHJvbm91
cywgaXQgaXMgbm90IGVhc3kgdG8gbWFrZSB0aGVtIHBhcmFsbGVsLgorCisgICAgICAgIFRvIGlt
cGxlbWVudCBwYXJhbGxlbCBpbWFnZSBkZWNvZGVycywgdGhlc2UgbWV0aG9kcyBtdXN0IGJlIGFz
eW5jaHJvbm91cy4gU28gSQorICAgICAgICBtZXJnZWQgYWxsIHRoZXNlIG1ldGhvZHMgaW50byBh
IHNpbmdsZSBtZXRob2QsIHJlcXVlc3RGcmFtZUF0SW5kZXgoc2l6ZV90KSwKKyAgICAgICAgd2hp
Y2ggcmVxdWVzdHMgYWxsIHRoZSBmcmFtZSBkYXRhIGF0IG9uY2UuIE5vdGUgdGhhdCB0aGlzIG1l
dGhvZCBoYXMgbm8gcmV0dXJuCisgICAgICAgIHZhbHVlLgorCisgICAgICAgIEluc3RlYWQsIEJp
dG1hcEltYWdlIG5vdyBpbXBsZW1lbnRzIEltYWdlU291cmNlT2JzZXJ2ZXIgYW5kIHBhc3NlcyBp
dHNlbGYgdG8KKyAgICAgICAgSW1hZ2VTb3VyY2UgY29uc3RydWN0b3IuIE9uY2UgaW1hZ2UgZGVj
b2RpbmcgaXMgZmluaXNoZWQgb3IgY2FjaGVkIGltYWdlIGlzCisgICAgICAgIGF2YWlsYWJsZSwg
SW1hZ2VTb3VyY2Ugbm90aWZpZXMgQml0bWFwSW1hZ2UgdmlhCisgICAgICAgIEltYWdlU291cmNl
T2JzZXJ2ZXI6OmRpZFJlY2VpdmVJbWFnZUZyYW1lRGF0YShzaXplX3QsIGNvbnN0IEltYWdlRnJh
bWVEYXRhJikuCisgICAgICAgIEltYWdlRnJhbWVEYXRhIGNvbnRhaW5zIGFsbCB0aGUgZnJhbWUg
ZGF0YSBpbmNsdWRpbmcgZnJhbWUsIGR1cmF0aW9uLCBpc0FscGhhLAorICAgICAgICBpc0NvbXBs
ZXRlIGFuZCBvcmllbnRhdGlvbi4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSBleGlzdGluZyBp
bWFnZSB0ZXN0cyBjb3ZlciB0aGVzZSBjYXNlcy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxp
c3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkaWRSZWNlaXZl
RnJhbWVBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5o
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpzZXRGcm9tSW1hZ2VGcmFtZURhdGEpOgor
ICAgICAgICAoRnJhbWVEYXRhKToKKyAgICAgICAgKEJpdG1hcEltYWdlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVNvdXJjZTo6SW1hZ2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6cmVxdWVzdEZyYW1lQXRJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVNvdXJjZTo6b3JpZW50YXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291
cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VGcmFtZURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKToK
KyAgICAgICAgKEltYWdlU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZU9ic2VydmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJ
bWFnZVNvdXJjZU9ic2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlT2JzZXJ2
ZXI6On5JbWFnZVNvdXJjZU9ic2VydmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpCaXRtYXBJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0M0RDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHQzRENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlU291cmNlOjpJbWFnZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpyZXF1ZXN0RnJhbWVBdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW52Zy9JbWFnZU9wZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0ltYWdlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcElt
YWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNE
U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6CisKIDIwMTItMDctMTAgIEFk
YW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBMYXlvdXRUZXN0Q29udHJv
bGxlci5kdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0IHNob3VsZCBtb3ZlIHRvIEludGVybmFs
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYWIxZTQ1OS4uMmUzMGEwNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0zMTkzLDYgKzMxOTMsMTEgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNw
YWNlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rhc2hBcnJheS5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURlY29kZXIuY3BwIFwK
KwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlci5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rl
ck9ic2VydmVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JldGFpbmVk
TW9kZUJpdG1hcEltYWdlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaCBcCkBAIC0zMzYwLDYgKzMz
NjUsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlT3JpZW50YXRpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZU9ic2VydmVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFBvaW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50SGFz
aC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQppbmRleCAwYzE0MDBmLi4xNmUzNWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTExMDMsNiAr
MTEwMyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHku
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmVhdHVyZVNldHRpbmdzLmNwcCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1h
Z2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwIFwKQEAgLTEx
MjIsOSArMTEyMywxMSBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc1R5cGVzLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlRGVjb2RlV29ya2VyLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmll
bnRhdGlvbi5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1BhcmFsbGVsSW1hZ2VEZWNvZGVyLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5j
cHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAgXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwIFwKQEAgLTIyNDAsNiArMjI0Myw3IEBAIEhF
QURFUlMgKz0gXAogICAgIHBsYXRmb3JtL21vY2svR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcCBc
CiAgICAgcGxhdGZvcm0vbW9jay9TY3JvbGxiYXJUaGVtZU1vY2suaCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRN
b2RlQml0bWFwSW1hZ2UuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaCBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuaCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmggXApAQCAtMjI5
OCwxMiArMjMwMiwxNiBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc1R5cGVzLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMzRC5oIFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZURlY29kZVdvcmtlci5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9yaWVudGF0
aW9uLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggXAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlT2JzZXJ2ZXIuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UG9pbnQuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnRIYXNoLmggXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURlY29k
ZXIuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZl
ci5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmggXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJu
LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDUwZWZlMTAuLjY0ZmI3OGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTM4NSw2ICszODUsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlT2JzZXJ2ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmll
bnRhdGlvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZU9ic2VydmVyLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50SGFzaC5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgnLApAQCAtMzUwMCwxMSArMzUwMSwxNiBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL1BhcmFsbGVsSW1hZ2VEZWNvZGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL1BhcmFsbGVsSW1hZ2VEZWNvZGVyT2JzZXJ2ZXIuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L1BhdGhUcmF2ZXJzYWxTdGF0ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Q
YXR0ZXJuLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2Uu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9SZXRhaW5lZE1vZGVCaXRtYXBJ
bWFnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuaCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDkwNjJj
OGIuLjg1ZmE5NTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCkBAIC0yOTM1MCw2ICsyOTM1MCwxMCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJ
CTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcSW1hZ2VTb3Vy
Y2VPYnNlcnZlci5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcSW50UG9pbnQuaCIKIAkJCQkJPgogCQkJCTwv
RmlsZT4KQEAgLTI5Mzg2LDYgKzI5MzkwLDE4IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJ
PEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xQYXJhbGxlbElt
YWdlRGVjb2Rlci5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xQYXJhbGxlbEltYWdlRGVjb2Rlci5oIgor
CQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcUGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZlci5oIgorCQkJCQk+CisJ
CQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcUGF0aFRyYXZlcnNhbFN0YXRlLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KQEAgLTI5
NDE0LDYgKzI5NDMwLDE0IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xSZXRhaW5lZE1vZGVCaXRtYXBJbWFn
ZS5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5oIgorCQkJCQk+
CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcUm91bmRlZFJlY3QuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDc3NWY0
MjUuLjhmOWJlZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTE0MTYsNiArMTQxNiw4IEBACiAJCTRCMzA0M0NEMEFFMDM3M0Iw
MEE4MjY0NyAvKiBFZGl0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRCMzA0M0NCMEFFMDM3M0IwMEE4MjY0NyAvKiBFZGl0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0QjM0ODA5MzBFRUY1MEQ0
MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDR01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCMzQ4MDkxMEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNv
dXJjZUNHTWFjLm1tICovOyB9OwogCQk0QjM0ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VT
b3VyY2VDRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NEIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIEltYWdlU291cmNlQ0cuaCAqLzsgfTsKKwkJNUIz
NDgwOTMwRUVGNTBENDAwQUMxQjQxIC8qIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCMzQ4MDkxMEVFRjUw
RDQwMEFDMUI0MSAvKiBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5jcHAgKi87IH07CisJCTVCMzQ4
MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUIzNDgwOTIwRUVGNTBENDAw
QUMxQjQxIC8qIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlLmggKi87IH07CiAJCTRCNkZBNkY0MEMz
OUU0OEMwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCNkZBNkYyMEMzOUU0OEMwMDA4NzAxMSAvKiBTbWFydFJl
cGxhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk0QjZGQTZGNTBDMzlFNDhDMDAwODcwMTEgLyogU21hcnRSZXBsYWNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCNkZBNkYzMEMzOUU0OEMwMDA4
NzAxMSAvKiBTbWFydFJlcGxhY2UuY3BwICovOyB9OwogCQk0QjZGQTZGNzBDMzlFNEExMDAwODcw
MTEgLyogU21hcnRSZXBsYWNlQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNEI2RkE2RjYwQzM5RTRBMTAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZUNG
LmNwcCAqLzsgfTsKQEAgLTQ4MDEsNiArNDgwMyw3IEBACiAJCUIyNzUzNTZGMEIwNTM4MTQwMDJD
RTY0RiAvKiBJbWFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjc1MzU0MTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2UuY3BwICovOyB9OwogCQlC
Mjc1MzU3MDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQyMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFn
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIy
NzUzNTcxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDMwQjA1MzgxNDAwMkNFNjRGIC8q
IEltYWdlU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJQjI3NTM1NzEwQjA1MzgxNDAwMkNFNjRFIC8qIEltYWdlU291cmNlT2JzZXJ2ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQz
MEIwNTM4MTQwMDJDRTY0RSAvKiBJbWFnZVNvdXJjZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI3NTM1NzIwQjA1MzgxNDAwMkNF
NjRGIC8qIEludFBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjc1MzU0NDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMjc1MzU3MzBCMDUzODE0
MDAyQ0U2NEYgLyogSW50UmVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMjc1MzU0NTBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5jcHAgKi87
IH07CiAJCUIyNzUzNTc0MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRSZWN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0NjBCMDUzODE0MDAyQ0U2
NEYgLyogSW50UmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC04NTAzLDYgKzg1MDYsOCBAQAogCQk0QjMwNDNDQjBBRTAzNzNCMDBBODI2NDcg
LyogRWRpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEIzNDgwOTEwRUVGNTBENDAwQUMxQjQxIC8q
IEltYWdlU291cmNlQ0dNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBJbWFnZVNvdXJjZUNHTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDRy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVNvdXJjZUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTVCMzQ4MDkxMEVFRjUwRDQwMEFDMUI0MSAvKiBSZXRhaW5lZE1vZGVCaXRtYXBJ
bWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZXRhaW5l
ZE1vZGVCaXRtYXBJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVCMzQ4
MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QjZGQTZGMjBDMzlFNDhDMDAwODcwMTEgLyogU21h
cnRSZXBsYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNtYXJ0UmVwbGFj
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QjZGQTZGMzBDMzlFNDhDMDAwODcw
MTEgLyogU21hcnRSZXBsYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNtYXJ0UmVwbGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCNkZB
NkY2MEMzOUU0QTEwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2VDRi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbWFydFJlcGxhY2VDRi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMTk4MCw2ICsxMTk4NSw3IEBACiAJCUIyNzUzNTQxMEIwNTM4MTQw
MDJDRTY0RiAvKiBJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzU0MjBCMDUz
ODE0MDAyQ0U2NEYgLyogSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTQzMEIwNTM4MTQw
MDJDRTY0RiAvKiBJbWFnZVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW1hZ2VTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjI3NTM1NDMw
QjA1MzgxNDAwMkNFNjRFIC8qIEltYWdlU291cmNlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlU291cmNlT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDQwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRQb2ludC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMjc1MzU0NTBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50UmVjdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTQ2MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRS
ZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRSZWN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTUyOCw2ICsxOTUzNCw4IEBACiAJCQkJQTgwQTM4
RkQwRTUwQ0M4MjAwQTI1RUJDIC8qIFBhdHRlcm5DRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzYwQjA1
MzgxNDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuY3BwICovLAogCQkJCUIyNzUzNTM3MEIw
NTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmggKi8sCisJCQkJNUIzNDgwOTEwRUVG
NTBENDAwQUMxQjQxIC8qIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlLmNwcCAqLywKKwkJCQk1QjM0
ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaCAqLywKIAkJ
CQlCMjc1MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IGNnOwpAQCAtMTk2NzYsNiArMTk2ODQsNyBAQAogCQkJCUE4
NzQ4RDY2MTJDQzM3NjMwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmggKi8sCiAJCQkJNDky
OTFFNEExMzQxNzJDODAwRTc1M0RFIC8qIEltYWdlUmVuZGVyaW5nTW9kZS5oICovLAogCQkJCUIy
NzUzNTQzMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZS5oICovLAorCQkJCUIyNzUzNTQz
MEIwNTM4MTQwMDJDRTY0RSAvKiBJbWFnZVNvdXJjZU9ic2VydmVyLmggKi8sCiAJCQkJQjI3NTM1
NDQwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50LmggKi8sCiAJCQkJRTQ2MkE0QTAxMTNFNzFC
RTAwNEE0MjIwIC8qIEludFBvaW50SGFzaC5oICovLAogCQkJCUIyNzUzNTQ1MEIwNTM4MTQwMDJD
RTY0RiAvKiBJbnRSZWN0LmNwcCAqLywKQEAgLTIzMzk4LDYgKzIzNDA3LDcgQEAKIAkJCQkyRDVB
NTkzMTE1MjUyNUQwMDAzNkVFNTEgLyogSW1hZ2VPcmllbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDkyOTFFNEIxMzQxNzJDODAwRTc1M0RFIC8qIEltYWdlUmVuZGVyaW5nTW9kZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjI3NTM1NzEwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNl
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCMjc1MzU3MTBCMDUzODE0MDAyQ0U2NEUgLyogSW1hZ2VT
b3VyY2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIzNDgwOTQwRUVGNTBENDAwQUMx
QjQxIC8qIEltYWdlU291cmNlQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNkZFMTE4MEU2RTFE
QTcwMEJGNjA4OCAvKiBJbXBsaWNpdEFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREIy
M0MyQ0MwQTUwOEQyOTAwMjQ4OUVCIC8qIEluZGVudE91dGRlbnRDb21tYW5kLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI0NDYwLDYgKzI0NDcwLDcgQEAKIAkJCQk3RUU2ODQ2RjEyRDI2RTM4MDBFNzk0
MTUgLyogUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFRTY4NDcw
MTJEMjZFMzgwMEU3OTQxNSAvKiBSZXNvdXJjZVJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTRDNzY3RjBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTVCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBSZXRhaW5lZE1vZGVC
aXRtYXBJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwQTUxMkIwMjZGNzAwQzFBMzU5
IC8qIFJldmVyYi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwQTcxMkIwMjZGNzAwQzFBMzU5
IC8qIFJldmVyYkFjY3VtdWxhdGlvbkJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYw
QTkxMkIwMjZGNzAwQzFBMzU5IC8qIFJldmVyYkNvbnZvbHZlci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNzYzOCw2ICsyNzY0OSw3IEBACiAJCQkJNTE0Qzc2N0UwQ0U5MjNBMTAwN0VGM0NEIC8qIFJl
c291cmNlUmVzcG9uc2VCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFRTY4NDcxMTJEMjZF
MzgwMEU3OTQxNSAvKiBSZXNvdXJjZVJlc3BvbnNlQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTE0Qzc2NTUwQ0U5MjM0RjAwN0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VNYWMubW0gaW4g
U291cmNlcyAqLywKKwkJCQk1QjM0ODA5MzBFRUY1MEQ0MDBBQzFCNDEgLyogUmV0YWluZWRNb2Rl
Qml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwQTQxMkIwMjZGNzAwQzFB
MzU5IC8qIFJldmVyYi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDMxNjBBNjEyQjAyNkY3MDBD
MUEzNTkgLyogUmV2ZXJiQWNjdW11bGF0aW9uQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUZEMzE2MEE4MTJCMDI2RjcwMEMxQTM1OSAvKiBSZXZlcmJDb252b2x2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAppbmRl
eCBmYjhiYjYwLi42ZDY4OTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5jcHAKQEAgLTQyOCw2ICs0MjgsMTcgQEAgdm9pZCBDYWNoZWRJbWFnZTo6ZGVjb2Rl
ZFNpemVDaGFuZ2VkKGNvbnN0IEltYWdlKiBpbWFnZSwgaW50IGRlbHRhKQogICAgIHNldERlY29k
ZWRTaXplKGRlY29kZWRTaXplKCkgKyBkZWx0YSk7CiB9CiAKK2Jvb2wgQ2FjaGVkSW1hZ2U6Omxp
a2VseVRvQmVVc2VkU29vbigpIGNvbnN0Cit7CisgICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRXYWxr
ZXI8Q2FjaGVkSW1hZ2VDbGllbnQ+IHdhbGtlcihtX2NsaWVudHMpOworICAgIHdoaWxlIChDYWNo
ZWRJbWFnZUNsaWVudCogY2xpZW50ID0gd2Fsa2VyLm5leHQoKSkgeworICAgICAgICBpZiAoY2xp
ZW50LT53aWxsUmVuZGVySW1hZ2UoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBDYWNoZWRJbWFnZTo6ZGlkRHJhdyhjb25z
dCBJbWFnZSogaW1hZ2UpCiB7CiAgICAgaWYgKCFpbWFnZSB8fCBpbWFnZSAhPSBtX2ltYWdlKQpA
QCAtNDQ1LDEzICs0NTYsNyBAQCBib29sIENhY2hlZEltYWdlOjpzaG91bGRQYXVzZUFuaW1hdGlv
bihjb25zdCBJbWFnZSogaW1hZ2UpCiAgICAgaWYgKCFpbWFnZSB8fCBpbWFnZSAhPSBtX2ltYWdl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgQ2FjaGVkUmVzb3VyY2VDbGllbnRX
YWxrZXI8Q2FjaGVkSW1hZ2VDbGllbnQ+IHcobV9jbGllbnRzKTsKLSAgICB3aGlsZSAoQ2FjaGVk
SW1hZ2VDbGllbnQqIGMgPSB3Lm5leHQoKSkgewotICAgICAgICBpZiAoYy0+d2lsbFJlbmRlcklt
YWdlKHRoaXMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiAhbGlrZWx5VG9CZVVzZWRTb29uKCk7CiB9CiAKIHZvaWQgQ2Fj
aGVkSW1hZ2U6OmFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKiBpbWFnZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgKaW5kZXggMWVkOWZmMC4uZmRmYzBkMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgKQEAgLTczLDYgKzcz
LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhbGxDbGllbnRzUmVtb3ZlZCgpOwogICAg
IHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoKTsKIAorICAgIHZpcnR1YWwgYm9vbCBs
aWtlbHlUb0JlVXNlZFNvb24oKSBjb25zdDsKKwogICAgIHZpcnR1YWwgdm9pZCBkYXRhKFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgdmly
dHVhbCB2b2lkIGVycm9yKENhY2hlZFJlc291cmNlOjpTdGF0dXMpOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CkBAIC0xMjgsNyArMTMwLDcg
QEAgcHVibGljOgogICAgIC8vIGNhbiBoYWx0IGFuaW1hdGlvbi4gQ29udGVudCBub2RlcyB0aGF0
IGhvbGQgaW1hZ2UgcmVmcyBmb3IgZXhhbXBsZSB3b3VsZCBub3QgcmVuZGVyIHRoZSBpbWFnZSwK
ICAgICAvLyBidXQgUmVuZGVySW1hZ2VzIHdvdWxkIChhc3N1bWluZyB0aGV5IGhhdmUgdmlzaWJp
bGl0eTogdmlzaWJsZSBhbmQgdGhlaXIgcmVuZGVyIHRyZWUgaXNuJ3QgaGlkZGVuCiAgICAgLy8g
ZS5nLiwgaW4gdGhlIGIvZiBjYWNoZSBvciBpbiBhIGJhY2tncm91bmQgdGFiKS4KLSAgICB2aXJ0
dWFsIGJvb2wgd2lsbFJlbmRlckltYWdlKENhY2hlZEltYWdlKikgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgd2lsbFJlbmRlckltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
LmgKaW5kZXggZTg5OTYwMC4uZjk5NzZhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlLmgKQEAgLTIxMSw2ICsyMTEsOSBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldE93bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyKENhY2hlZFJlc291cmNlTG9hZGVyKiBj
YWNoZWRSZXNvdXJjZUxvYWRlcikgeyBtX293bmluZ0NhY2hlZFJlc291cmNlTG9hZGVyID0gY2Fj
aGVkUmVzb3VyY2VMb2FkZXI7IH0KICAgICAKKyAgICAvLyBNZW1vcnlDYWNoZSBkb2VzIG5vdCBk
ZXN0cm95IHRoZSBkZWNvZGVkIGRhdGEgb2YgYSBDYWNoZWRSZXNvdXJjZSBpZiB0aGUgZGVjb2Rl
ZCBkYXRhIHdpbGwgYmUgbGlrZWx5IHVzZWQuCisgICAgdmlydHVhbCBib29sIGxpa2VseVRvQmVV
c2VkU29vbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKICAgICBib29sIGlzUHJlbG9hZGVk
KCkgY29uc3QgeyByZXR1cm4gbV9wcmVsb2FkQ291bnQ7IH0KICAgICB2b2lkIGluY3JlYXNlUHJl
bG9hZENvdW50KCkgeyArK21fcHJlbG9hZENvdW50OyB9CiAgICAgdm9pZCBkZWNyZWFzZVByZWxv
YWRDb3VudCgpIHsgQVNTRVJUKG1fcHJlbG9hZENvdW50KTsgLS1tX3ByZWxvYWRDb3VudDsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKaW5kZXggZWVhNzU5
My4uMjk5ZDEwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9y
eUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUu
Y3BwCkBAIC0yMzUsNiArMjM1LDEyIEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnBydW5lTGl2ZVJlc291
cmNlc1RvU2l6ZSh1bnNpZ25lZCB0YXJnZXRTaXplKQogICAgICAgICAgICAgaWYgKGVsYXBzZWRU
aW1lIDwgY01pbkRlbGF5QmVmb3JlTGl2ZURlY29kZWRQcnVuZSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAKKyAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgY3VycmVudCByZXNv
dXJjZSBhcmUgbGlrZWx5IHRvIGJlIHVzZWQgYWdhaW4gc29vbi4KKyAgICAgICAgICAgIGlmIChj
dXJyZW50LT5saWtlbHlUb0JlVXNlZFNvb24oKSkgeworICAgICAgICAgICAgICAgIGN1cnJlbnQg
PSBwcmV2OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICAvLyBEZXN0cm95IG91ciBkZWNvZGVkIGRhdGEuIFRoaXMgd2lsbCByZW1vdmUgdXMg
ZnJvbSAKICAgICAgICAgICAgIC8vIG1fbGl2ZURlY29kZWRSZXNvdXJjZXMsIGFuZCBwb3NzaWJs
eSBtb3ZlIHVzIHRvIGEgZGlmZmVyZW50IExSVSAKICAgICAgICAgICAgIC8vIGxpc3QgaW4gbV9h
bGxSZXNvdXJjZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5jcHAKaW5kZXggMmM3NTQwNC4uODAzZTI5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAtNDUsNiArNDUsNyBAQCBz
dGF0aWMgaW50IGZyYW1lQnl0ZXMoY29uc3QgSW50U2l6ZSYgZnJhbWVTaXplKQogCiBCaXRtYXBJ
bWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShv
YnNlcnZlcikKKyAgICAsIG1fc291cmNlKHRoaXMpCiAgICAgLCBtX2N1cnJlbnRGcmFtZSgwKQog
ICAgICwgbV9mcmFtZXMoMCkKICAgICAsIG1fZnJhbWVUaW1lcigwKQpAQCAtNjMsNiArNjQsNyBA
QCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAg
LCBtX3NpemVBdmFpbGFibGUoZmFsc2UpCiAgICAgLCBtX2hhc1VuaWZvcm1GcmFtZVNpemUodHJ1
ZSkKICAgICAsIG1faGF2ZUZyYW1lQ291bnQoZmFsc2UpCisgICAgLCBtX2lzQ2FjaGluZ0ZyYW1l
KGZhbHNlKQogewogfQogCkBAIC0xMjYsNDAgKzEyOCw2IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRl
c3Ryb3lNZXRhZGF0YUFuZE5vdGlmeShpbnQgZnJhbWVzQ2xlYXJlZCkKICAgICAgICAgaW1hZ2VP
YnNlcnZlcigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgZGVsdGFCeXRlcyk7CiB9CiAKLXZv
aWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4KQotewotICAgIHNpemVfdCBu
dW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7Ci0gICAgQVNTRVJUKG1fZGVjb2RlZFNpemUgPT0gMCB8
fCBudW1GcmFtZXMgPiAxKTsKLSAgICAKLSAgICBpZiAobV9mcmFtZXMuc2l6ZSgpIDwgbnVtRnJh
bWVzKQotICAgICAgICBtX2ZyYW1lcy5ncm93KG51bUZyYW1lcyk7Ci0KLSAgICBtX2ZyYW1lc1tp
bmRleF0ubV9mcmFtZSA9IG1fc291cmNlLmNyZWF0ZUZyYW1lQXRJbmRleChpbmRleCk7Ci0gICAg
aWYgKG51bUZyYW1lcyA9PSAxICYmIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lKQotICAgICAgICBj
aGVja0ZvclNvbGlkQ29sb3IoKTsKLQotICAgIG1fZnJhbWVzW2luZGV4XS5tX29yaWVudGF0aW9u
ID0gbV9zb3VyY2Uub3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsKLSAgICBtX2ZyYW1lc1tpbmRl
eF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzW2luZGV4XS5tX2lzQ29tcGxl
dGUgPSBtX3NvdXJjZS5mcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KTsKLSAgICBpZiAocmVw
ZXRpdGlvbkNvdW50KGZhbHNlKSAhPSBjQW5pbWF0aW9uTm9uZSkKLSAgICAgICAgbV9mcmFtZXNb
aW5kZXhdLm1fZHVyYXRpb24gPSBtX3NvdXJjZS5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7
Ci0gICAgbV9mcmFtZXNbaW5kZXhdLm1faGFzQWxwaGEgPSBtX3NvdXJjZS5mcmFtZUhhc0FscGhh
QXRJbmRleChpbmRleCk7Ci0KLSAgICBjb25zdCBJbnRTaXplIGZyYW1lU2l6ZShpbmRleCA/IG1f
c291cmNlLmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgpIDogbV9zaXplKTsKLSAgICBpZiAoZnJhbWVT
aXplICE9IG1fc2l6ZSkKLSAgICAgICAgbV9oYXNVbmlmb3JtRnJhbWVTaXplID0gZmFsc2U7Ci0g
ICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lKSB7Ci0gICAgICAgIGludCBkZWx0YUJ5dGVz
ID0gZnJhbWVCeXRlcyhmcmFtZVNpemUpOwotICAgICAgICBtX2RlY29kZWRTaXplICs9IGRlbHRh
Qnl0ZXM7Ci0gICAgICAgIC8vIFRoZSBmdWxseS1kZWNvZGVkIGZyYW1lIHdpbGwgc3Vic3VtZSB0
aGUgcGFydGlhbGx5IGRlY29kZWQgZGF0YSB1c2VkCi0gICAgICAgIC8vIHRvIGRldGVybWluZSBp
bWFnZSBwcm9wZXJ0aWVzLgotICAgICAgICBkZWx0YUJ5dGVzIC09IG1fZGVjb2RlZFByb3BlcnRp
ZXNTaXplOwotICAgICAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSA9IDA7Ci0gICAgICAgIGlm
IChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRlY29kZWRT
aXplQ2hhbmdlZCh0aGlzLCBkZWx0YUJ5dGVzKTsKLSAgICB9Ci19Ci0KIHZvaWQgQml0bWFwSW1h
Z2U6OmRpZERlY29kZVByb3BlcnRpZXMoKSBjb25zdAogewogICAgIGlmIChtX2RlY29kZWRTaXpl
KQpAQCAtMjQxLDcgKzIwOSwxMiBAQCBib29sIEJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZChib29s
IGFsbERhdGFSZWNlaXZlZCkKICAgICAgICAgLy8gTk9URTogRG9uJ3QgY2FsbCBmcmFtZUlzQ29t
cGxldGVBdEluZGV4KCkgaGVyZSwgdGhhdCB3aWxsIHRyeSB0bwogICAgICAgICAvLyBkZWNvZGUg
YW55IHVuY2FjaGVkIChpLmUuIG5ldmVyLWRlY29kZWQgb3IKICAgICAgICAgLy8gY2xlYXJlZC1v
bi1hLXByZXZpb3VzLXBhc3MpIGZyYW1lcyEKLSAgICAgICAgaWYgKG1fZnJhbWVzW2ldLm1faGF2
ZU1ldGFkYXRhICYmICFtX2ZyYW1lc1tpXS5tX2lzQ29tcGxldGUpCisKKyAgICAgICAgLy8gTk9U
RTogRG9uJ3QgY2xlYXIgdGhlIGN1cnJlbnQgZnJhbWUsIGJlY2F1c2UgdGhlIGZyYW1lIG1pZ2h0
IGhhdmUgYmVlbiBkZWNvZGVkCisgICAgICAgIC8vIGluIHJldGFpbmVkIG1vZGUgYW5kIFJlbmRl
ckltYWdlIGhhc24ndCByZW5kZXIgdGhpcyBkZWNvZGVkIGltYWdlIHlldC4KKyAgICAgICAgLy8g
SWYgdGhlIGN1cnJlbnQgZnJhbWUgaXMgcmVtb3ZlZCBoZXJlLCB0aGUgaW1hZ2UgZWxlbWVudCB3
aWxsIGJlIHJlbmRlcmVkIGFzIHdoaXRlIGJveC4KKyAgICAgICAgLy8gVGhlIGN1cnJlbnQgZnJh
bWUgd2lsbCBiZSByZW1vdmVkIGxhdGVyIHdoZW4gcmV0YWluZWQgbW9kZSBkZWNvZGluZyBpcyBm
aW5pc2hlZC4KKyAgICAgICAgaWYgKG1fZnJhbWVzW2ldLm1fZnJhbWUgJiYgIW1fZnJhbWVzW2ld
Lm1faXNDb21wbGV0ZSAmJiBtX2N1cnJlbnRGcmFtZSAhPSBpKQogICAgICAgICAgICAgZnJhbWVz
Q2xlYXJlZCArPSAobV9mcmFtZXNbaV0uY2xlYXIodHJ1ZSkgPyAxIDogMCk7CiAgICAgfQogICAg
IGRlc3Ryb3lNZXRhZGF0YUFuZE5vdGlmeShmcmFtZXNDbGVhcmVkKTsKQEAgLTI2Myw5ICsyMzYs
MTIgQEAgU3RyaW5nIEJpdG1hcEltYWdlOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0CiBzaXpl
X3QgQml0bWFwSW1hZ2U6OmZyYW1lQ291bnQoKQogewogICAgIGlmICghbV9oYXZlRnJhbWVDb3Vu
dCkgewotICAgICAgICBtX2hhdmVGcmFtZUNvdW50ID0gdHJ1ZTsKICAgICAgICAgbV9mcmFtZUNv
dW50ID0gbV9zb3VyY2UuZnJhbWVDb3VudCgpOwotICAgICAgICBkaWREZWNvZGVQcm9wZXJ0aWVz
KCk7CisgICAgICAgIC8vIElmIGRlY29kZXIgaXMgbm90IGluaXRpYWxpemVkIHlldCwgbV9zb3Vy
Y2UuZnJhbWVDb3VudCgpIHJldHVybnMgMC4KKyAgICAgICAgaWYgKG1fZnJhbWVDb3VudCkgewor
ICAgICAgICAgICAgZGlkRGVjb2RlUHJvcGVydGllcygpOworICAgICAgICAgICAgbV9oYXZlRnJh
bWVDb3VudCA9IHRydWU7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG1fZnJhbWVDb3Vu
dDsKIH0KQEAgLTI4NiwxMSArMjYyLDczIEBAIGJvb2wgQml0bWFwSW1hZ2U6OmVuc3VyZUZyYW1l
SXNDYWNoZWQoc2l6ZV90IGluZGV4KQogICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkg
fHwgIW1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lKQorICAgIGlmIChtX2lzQ2FjaGluZ0ZyYW1lKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIG1fZnJhbWUgY2FuIGV4aXN0IHdoZW4gbV9p
c0NvbXBsZXRlIGlzIGZhbHNlLCBzbyB3ZSBuZWVkIHRvIGNhY2hlIGEgbmV3IGZyYW1lIGV2ZW4g
aWYgbV9mcmFtZSBleGlzdHMuCisgICAgLy8gU2VlIEJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCBm
b3IgZXhwbGFuYXRpb24uCisgICAgYm9vbCBuZWVkVG9DYWNoZSA9IGluZGV4ID49IG1fZnJhbWVz
LnNpemUoKSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUgfHwgIW1fZnJhbWVzW2luZGV4XS5t
X2lzQ29tcGxldGU7CisgICAgaWYgKG5lZWRUb0NhY2hlKSB7CisgICAgICAgIG1faXNDYWNoaW5n
RnJhbWUgPSB0cnVlOwogICAgICAgICBjYWNoZUZyYW1lKGluZGV4KTsKKyAgICAgICAgbV9pc0Nh
Y2hpbmdGcmFtZSA9IGZhbHNlOworICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lk
IEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCkKK3sKKyAgICBzaXplX3QgbnVt
RnJhbWVzID0gZnJhbWVDb3VudCgpOworICAgIGlmIChtX2ZyYW1lcy5zaXplKCkgPCBudW1GcmFt
ZXMpCisgICAgICAgIG1fZnJhbWVzLmdyb3cobnVtRnJhbWVzKTsKKworICAgIG1fc291cmNlLnJl
cXVlc3RGcmFtZUF0SW5kZXgoaW5kZXgsIHJldGFpbmVkTW9kZVJlbmRlcmluZygpKTsKK30KKwor
Ym9vbCBCaXRtYXBJbWFnZTo6cmV0YWluZWRNb2RlUmVuZGVyaW5nKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9yZXRhaW5lZE1vZGVJbWFnZS5nZXQoKSAmJiBtX3JldGFpbmVkTW9kZUltYWdlLT5y
ZXRhaW5lZE1vZGVSZW5kZXJpbmcoKTsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6ZGlkUmVjZWl2
ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgsIGNvbnN0IEltYWdlRnJhbWVEYXRhJiBpbWFnZUZy
YW1lRGF0YSwgYm9vbCByZXRhaW5lZCwgYm9vbCBwYXJhbGxlbERlY29kZXJDYW5jZWxlZCkKK3sK
KyAgICAvLyBJdCBpcyBwb3NzaWJsZSB0byBjYWxsIGNhY2hlRnJhbWUgaW5kaXJlY3RseSBpbiB0
aGlzIG1ldGhvZC4KKyAgICBSZXRhaW5lZE1vZGVTYXZlciByZXRhaW5lZE1vZGVTYXZlcihtX3Jl
dGFpbmVkTW9kZUltYWdlLmdldCgpLCByZXRhaW5lZCk7CisKKyAgICAvLyBtX2ZyYW1lc1tpbmRl
eF0ubV9mcmFtZSBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlIGl0IGlzIHJlcGxhY2VkIHdpdGggbmV3
IGRlY29kZWQgZnJhbWUuCisgICAgLy8gSWYgd2UgZm9yZ2V0IHRvIGNsZWFyIG1fZnJhbWUsIHRo
ZSBvbGQgbV9mcmFtZSBsZWFrcy4KKyAgICAvLyBTZWUgQml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2Vk
IGZvciBleHBsYW5hdGlvbiB3aHkgdGhlIGRlY29kZWQgZnJhbWUgbXVzdCBiZSByZW1vdmVkIGhl
cmUuCisgICAgaW50IGZyYW1lc0NsZWFyZWQgPSAwOworICAgIGlmIChtX2ZyYW1lc1tpbmRleF0u
bV9mcmFtZSkKKyAgICAgICAgZnJhbWVzQ2xlYXJlZCArPSAobV9mcmFtZXNbaW5kZXhdLmNsZWFy
KHRydWUpID8gMSA6IDApOworICAgIGRlc3Ryb3lNZXRhZGF0YUFuZE5vdGlmeShmcmFtZXNDbGVh
cmVkKTsKKworICAgIG1fZnJhbWVzW2luZGV4XS5zZXRGcm9tSW1hZ2VGcmFtZURhdGEoaW1hZ2VG
cmFtZURhdGEpOworCisgICAgc2l6ZV90IG51bUZyYW1lcyA9IGZyYW1lQ291bnQoKTsKKyAgICBp
ZiAobnVtRnJhbWVzID09IDEgJiYgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUpCisgICAgICAgIGNo
ZWNrRm9yU29saWRDb2xvcigpOworCisgICAgY29uc3QgSW50U2l6ZSBmcmFtZVNpemUoaW5kZXgg
PyBtX3NvdXJjZS5mcmFtZVNpemVBdEluZGV4KGluZGV4KSA6IG1fc2l6ZSk7CisgICAgaWYgKGZy
YW1lU2l6ZSAhPSBtX3NpemUpCisgICAgICAgIG1faGFzVW5pZm9ybUZyYW1lU2l6ZSA9IGZhbHNl
OworICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSkgeworICAgICAgICBpbnQgZGVsdGFC
eXRlcyA9IGZyYW1lQnl0ZXMoZnJhbWVTaXplKTsKKyAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBk
ZWx0YUJ5dGVzOworICAgICAgICAvLyBUaGUgZnVsbHktZGVjb2RlZCBmcmFtZSB3aWxsIHN1YnN1
bWUgdGhlIHBhcnRpYWxseSBkZWNvZGVkIGRhdGEgdXNlZAorICAgICAgICAvLyB0byBkZXRlcm1p
bmUgaW1hZ2UgcHJvcGVydGllcy4KKyAgICAgICAgZGVsdGFCeXRlcyAtPSBtX2RlY29kZWRQcm9w
ZXJ0aWVzU2l6ZTsKKyAgICAgICAgbV9kZWNvZGVkUHJvcGVydGllc1NpemUgPSAwOworICAgICAg
ICBpZiAoaW1hZ2VPYnNlcnZlcigpKSB7CisgICAgICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRl
Y29kZWRTaXplQ2hhbmdlZCh0aGlzLCBkZWx0YUJ5dGVzKTsKKworICAgICAgICAgICAgaWYgKCht
X2ZyYW1lc1tpbmRleF0ubV9pc0NvbXBsZXRlICYmIHJldGFpbmVkKSB8fCBwYXJhbGxlbERlY29k
ZXJDYW5jZWxlZCkKKyAgICAgICAgICAgICAgICBpbWFnZU9ic2VydmVyKCktPmNoYW5nZWRJblJl
Y3QodGhpcywgSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKKyAgICAgICAgfQorICAgIH0K
K30KKwogTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lQXRJbmRleChzaXplX3QgaW5k
ZXgpCiB7CiAgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkKQEAgLTMwMCwxMyAr
MzM4LDMwIEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUF0SW5kZXgoc2l6ZV90
IGluZGV4KQogCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVf
dCBpbmRleCkKIHsKKyAgICAvLyBXZSBjYW4gbm90IHJldHVybiBjYWNoZWQgbV9pc0NvbXBsZXRl
LCBiZWNhdXNlIGNsaWVudHMgdGhhdCBjYWxscyB0aGlzIG1ldGhvZCBleHBlY3QKKyAgICAvLyBt
X2ZyYW1lIGlzIG5vdCBudWxsIGlmIHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZS4KKyAgICAvLyBJ
ZiB0aGUgaW5kZXhlZCBmcmFtZSB3YXMgb25jZSBkZWNvZGVkIGNvbXBsZXRlbHkgYW5kIGNsZWFy
ZWQgYnkgZGVzdHJveURlY29kZWREYXRhKCksCisgICAgLy8gdGhpcyBtZXRob2QgY2FuIHJldHVy
biB0cnVlIGFsdGhvdWdoIG1fZnJhbWUgaXMgbnVsbC4KKyAgICAvLyAoc2VlIGRlc3Ryb3lEZWNv
ZGVkRGF0YSgpIGFuZCBmcmFtZUR1cmF0aW9uQXRJbmRleCgpKQogICAgIGlmICghZW5zdXJlRnJh
bWVJc0NhY2hlZChpbmRleCkpCi0gICAgICAgIHJldHVybiB0cnVlOyAvLyBXaHkgd291bGQgYW4g
aW52YWxpZCBpbmRleCByZXR1cm4gdHJ1ZSBoZXJlPwotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRl
eF0ubV9pc0NvbXBsZXRlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gSWYgdGhlIGZy
YW1lIGF0IHRoZSBnaXZlbiBpbmRleCBpcyBkZWNvZGVkIGJ5IHBhcmFsbGVsIGltYWdlIGRlY29k
ZXJzLCBtX2ZyYW1lIGNhbiBiZSAwIGV2ZW4gaWYgbV9pc0NvbXBsZXRlIGlzIHRydWUuCisgICAg
cmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2lzQ29tcGxldGUgJiYgbV9mcmFtZXNbaW5kZXhdLm1f
ZnJhbWU7Cit9CisKK2Jvb2wgQml0bWFwSW1hZ2U6OmN1cnJlbnRGcmFtZUlzQ29tcGxldGUoKQor
eworICAgIHJldHVybiBmcmFtZUlzQ29tcGxldGVBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKIH0K
IAogZmxvYXQgQml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkK
IHsKKyAgICAvLyBJZiB0aGUgaW5kZXhlZCBmcmFtZSB3YXMgb25jZSBkZWNvZGVkIGNvbXBsZXRl
bHkgYW5kIGNsZWFyZWQgYnkgZGVzdHJveURlY29kZWREYXRhKCksCisgICAgLy8gV2UgZG9uJ3Qg
bmVlZCBkZWNvZGUgYWdhaW4gaW4gb3JkZXIgdG8ga25vdyBtZXRhIGRhdGEuCisgICAgLy8gSXQg
aXMgYmVjYXVzZSBkZXN0cm95RGVjb2RlZERhdGEoKSBkb2VzIG5vdCByZXNldCBtZXRhIGRhdGEu
IChzZWUgZGVzdHJveURlY29kZWREYXRhKCkpCisgICAgaWYgKGluZGV4IDwgbV9mcmFtZXMuc2l6
ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5tX2lzQ29tcGxldGUpCisgICAgICAgIHJldHVybiBtX2Zy
YW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKKwogICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChp
bmRleCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9k
dXJhdGlvbjsKQEAgLTMxOSw2ICszNzQsMTAgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6
Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKIAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVI
YXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KQogeworICAgIC8vIElmIGNhY2hlZCwgcmV0dXJu
IGNhY2hlZCBtZXRhIGRhdGEuIChzZWUgZnJhbWVEdXJhdGlvbkF0SW5kZXgoKCkpCisgICAgaWYg
KGluZGV4IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5tX2lzQ29tcGxldGUp
CisgICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9oYXNBbHBoYTsKKwogICAgIC8vIFdo
ZW4gYSBmcmFtZSBoYXMgbm90IGZpbmlzaGVkIGRlY29kaW5nLCBhbHdheXMgbWFyayBpdCBhcyBo
YXZpbmcgYWxwaGEuCiAgICAgLy8gU2VlIEltYWdlU291cmNlOjpmcmFtZWhhc0FscGhhQXRJbmRl
eCBmb3IgZXhwbGFuYXRpb24gb2Ygd2h5IGluY29tcGxldGUgaW1hZ2VzIGNsYWltIHRvIGhhdmUg
YWxwaGEuCiAgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkKQEAgLTMzOCw2ICsz
OTcsMTAgQEAgSW1hZ2VPcmllbnRhdGlvbiBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lT3JpZW50
YXRpb24oKQogCiBJbWFnZU9yaWVudGF0aW9uIEJpdG1hcEltYWdlOjpmcmFtZU9yaWVudGF0aW9u
QXRJbmRleChzaXplX3QgaW5kZXgpCiB7CisgICAgLy8gSWYgY2FjaGVkLCByZXR1cm4gY2FjaGVk
IG1ldGEgZGF0YS4gKHNlZSBmcmFtZUR1cmF0aW9uQXRJbmRleCgoKSkKKyAgICBpZiAoaW5kZXgg
PCBtX2ZyYW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1faXNDb21wbGV0ZSkKKyAgICAg
ICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX29yaWVudGF0aW9uOworCiAgICAgaWYgKCFlbnN1
cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkKICAgICAgICAgcmV0dXJuIERlZmF1bHRJbWFnZU9yaWVu
dGF0aW9uOwogICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9vcmllbnRhdGlvbjsKQEAgLTU2
MCwxMSArNjIzLDQgQEAgQ29sb3IgQml0bWFwSW1hZ2U6OnNvbGlkQ29sb3IoKSBjb25zdAogICAg
IHJldHVybiBtX3NvbGlkQ29sb3I7CiB9CiAKLSNpZiAhVVNFKENHKQotdm9pZCBCaXRtYXBJbWFn
ZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtKQotewotICAgIGRy
YXcoY3R4LCBkc3RSZWN0LCBzcmNSZWN0LCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKLX0KLSNlbmRp
ZgotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
aAppbmRleCAyMTg4NWNkLi44Y2JjNjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKQEAgLTMxLDcgKzMxLDkgQEAKICNpbmNsdWRlICJJbWFn
ZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgor
I2luY2x1ZGUgIkltYWdlU291cmNlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisj
aW5jbHVkZSAiUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaCIKIAogI2lmIFBMQVRGT1JNKE1BQykK
ICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC03MSw5ICs3Myw4IEBAIHB1YmxpYzoKICAg
ICAgICAgOiBtX2ZyYW1lKDApCiAgICAgICAgICwgbV9vcmllbnRhdGlvbihEZWZhdWx0SW1hZ2VP
cmllbnRhdGlvbikKICAgICAgICAgLCBtX2R1cmF0aW9uKDApCi0gICAgICAgICwgbV9oYXZlTWV0
YWRhdGEoZmFsc2UpCisgICAgICAgICwgbV9oYXNBbHBoYSh0cnVlKQogICAgICAgICAsIG1faXND
b21wbGV0ZShmYWxzZSkKLSAgICAgICAgLCBtX2hhc0FscGhhKHRydWUpIAogICAgIHsKICAgICB9
CiAKQEAgLTgyLDI3ICs4Myw1MCBAQCBwdWJsaWM6CiAgICAgICAgIGNsZWFyKHRydWUpOwogICAg
IH0KIAorICAgIHZvaWQgc2V0RnJvbUltYWdlRnJhbWVEYXRhKGNvbnN0IEltYWdlRnJhbWVEYXRh
JiBkYXRhKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2ZyYW1lKTsKKyAgICAgICAgbV9mcmFt
ZSA9IGRhdGEubV9mcmFtZTsKKyAgICAgICAgbV9vcmllbnRhdGlvbiA9IGRhdGEubV9vcmllbnRh
dGlvbjsKKyAgICAgICAgbV9kdXJhdGlvbiA9IGRhdGEubV9kdXJhdGlvbjsKKyAgICAgICAgbV9o
YXNBbHBoYSA9IGRhdGEubV9oYXNBbHBoYTsKKyAgICAgICAgQVNTRVJUKCEobV9pc0NvbXBsZXRl
ICYmICFkYXRhLm1faXNDb21wbGV0ZSkpOworICAgICAgICBtX2lzQ29tcGxldGUgPSBkYXRhLm1f
aXNDb21wbGV0ZTsKKyAgICB9CisKICAgICAvLyBDbGVhciB0aGUgY2FjaGVkIGltYWdlIGRhdGEg
b24gdGhlIGZyYW1lLCBhbmQgKG9wdGlvbmFsbHkpIHRoZSBtZXRhZGF0YS4KICAgICAvLyBSZXR1
cm5zIHdoZXRoZXIgdGhlcmUgd2FzIGNhY2hlZCBpbWFnZSBkYXRhIHRvIGNsZWFyLgotICAgIGJv
b2wgY2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKTsKKyAgICBib29sIGNsZWFyKGJvb2wgY2xlYXJN
ZXRhZGF0YSkKKyAgICB7CisgICAgICAgIGlmIChjbGVhck1ldGFkYXRhKSB7CisgICAgICAgICAg
ICBtX29yaWVudGF0aW9uID0gRGVmYXVsdEltYWdlT3JpZW50YXRpb247CisgICAgICAgICAgICBt
X2R1cmF0aW9uID0gMDsKKyAgICAgICAgICAgIG1faGFzQWxwaGEgPSB0cnVlOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBjbGVhckZyYW1lKCk7CisgICAgfQogCiAgICAgTmF0aXZlSW1hZ2VQ
dHIgbV9mcmFtZTsKICAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247CiAgICAgZmxv
YXQgbV9kdXJhdGlvbjsKLSAgICBib29sIG1faGF2ZU1ldGFkYXRhIDogMTsKLSAgICBib29sIG1f
aXNDb21wbGV0ZSA6IDE7CiAgICAgYm9vbCBtX2hhc0FscGhhIDogMTsKKyAgICBib29sIG1faXND
b21wbGV0ZSA6IDE7CisKK3ByaXZhdGU6CisgICAgYm9vbCBjbGVhckZyYW1lKCk7CiB9OwogCiAv
LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBC
aXRtYXBJbWFnZSBDbGFzcwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQogCi1jbGFzcyBCaXRtYXBJbWFnZSA6IHB1YmxpYyBJbWFnZSB7CitjbGFz
cyBCaXRtYXBJbWFnZSA6IHB1YmxpYyBJbWFnZSwgcHVibGljIEltYWdlU291cmNlT2JzZXJ2ZXIg
eworICAgIGZyaWVuZCBjbGFzcyBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTsKICAgICBmcmllbmQg
Y2xhc3MgR2VuZXJhdGVkSW1hZ2U7CiAgICAgZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRl
ZEltYWdlOwogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZTsKICAgICBm
cmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OworICAgIGZyaWVuZCBSZXRhaW5lZE1vZGVCaXRt
YXBJbWFnZSogdG9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZShJbWFnZSopOwogcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1hcEltYWdlPiBjcmVhdGUoTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyID0gMCkKICAgICB7CkBAIC0xNzksNiAr
MjAzLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBub3RTb2xpZENvbG9yKCk7CiAjZW5k
aWYKIAorICAgIC8vIEltYWdlU291cmNlT2JzZXJ2ZXIKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZUZyYW1lQXRJbmRleChzaXplX3QsIGNvbnN0IEltYWdlRnJhbWVEYXRhJiwgYm9vbCByZXRh
aW5lZCA9IGZhbHNlLCBib29sIHBhcmFsbGVsRGVjb2RlckNhbmNlbGVkID0gZmFsc2UpOworCiBw
cml2YXRlOgogICAgIHZvaWQgdXBkYXRlU2l6ZSgpIGNvbnN0OwogCkBAIC0xOTksNyArMjI2LDkg
QEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNp
emUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRT
aXplJiBzcmNTaXplLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3IpOwogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Is
IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSk7CisjaWYgVVNFKENHKQorICAgIHZpcnR1YWwg
dm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSk7CisjZW5kaWYKIAogI2lm
IChPUyhXSU5DRSkgJiYgIVBMQVRGT1JNKFFUKSkKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCkBAIC0yMTIsNiArMjQxLDggQEAgcHJvdGVj
dGVkOgogICAgIGJvb2wgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QpOwogICAgIGZsb2F0
IGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCk7CiAKKyAgICBib29sIGN1cnJlbnRGcmFtZUlz
Q29tcGxldGUoKTsKKwogICAgIC8vIERlY29kZXMgYW5kIGNhY2hlcyBhIGZyYW1lLiBOZXZlciBh
Y2Nlc3NlZCBleGNlcHQgaW50ZXJuYWxseS4KICAgICB2b2lkIGNhY2hlRnJhbWUoc2l6ZV90IGlu
ZGV4KTsKICAgICAvLyBDYWxsZWQgYmVmb3JlIGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0uIFJl
dHVybnMgZmFsc2Ugb24gaW5kZXggb3V0IG9mIGJvdW5kcy4KQEAgLTI2Nyw2ICsyOTgsOCBAQCBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIG1heUZpbGxXaXRoU29saWRDb2xvcigpOwogICAg
IHZpcnR1YWwgQ29sb3Igc29saWRDb2xvcigpIGNvbnN0OwogICAgIAorICAgIGJvb2wgcmV0YWlu
ZWRNb2RlUmVuZGVyaW5nKCkgY29uc3Q7CisKICAgICBJbWFnZVNvdXJjZSBtX3NvdXJjZTsKICAg
ICBtdXRhYmxlIEludFNpemUgbV9zaXplOyAvLyBUaGUgc2l6ZSB0byB1c2UgZm9yIHRoZSBvdmVy
YWxsIGltYWdlICh3aWxsIGp1c3QgYmUgdGhlIHNpemUgb2YgdGhlIGZpcnN0IGltYWdlKS4KICAg
ICBtdXRhYmxlIEludFNpemUgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uOwpAQCAtMjkxLDYg
KzMyNCw4IEBAIHByb3RlY3RlZDoKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fZGVjb2RlZFByb3Bl
cnRpZXNTaXplOyAvLyBUaGUgc2l6ZSBvZiBkYXRhIGRlY29kZWQgYnkgdGhlIHNvdXJjZSB0byBk
ZXRlcm1pbmUgaW1hZ2UgcHJvcGVydGllcyAoZS5nLiBzaXplLCBmcmFtZSBjb3VudCwgZXRjKS4K
ICAgICBzaXplX3QgbV9mcmFtZUNvdW50OwogCisgICAgUmVmUHRyPFJldGFpbmVkTW9kZUJpdG1h
cEltYWdlPiBtX3JldGFpbmVkTW9kZUltYWdlOworCiAgICAgYm9vbCBtX2lzU29saWRDb2xvciA6
IDE7IC8vIFdoZXRoZXIgb3Igbm90IHdlIGFyZSBhIDF4MSBzb2xpZCBpbWFnZS4KICAgICBib29s
IG1fY2hlY2tlZEZvclNvbGlkQ29sb3IgOiAxOyAvLyBXaGV0aGVyIHdlJ3ZlIGNoZWNrZWQgdGhl
IGZyYW1lIGZvciBzb2xpZCBjb2xvci4KIApAQCAtMzAxLDYgKzMzNiw4IEBAIHByb3RlY3RlZDoK
ICAgICBib29sIG1fc2l6ZUF2YWlsYWJsZSA6IDE7IC8vIFdoZXRoZXIgb3Igbm90IHdlIGNhbiBv
YnRhaW4gdGhlIHNpemUgb2YgdGhlIGZpcnN0IGltYWdlIGZyYW1lIHlldCBmcm9tIEltYWdlSU8u
CiAgICAgbXV0YWJsZSBib29sIG1faGFzVW5pZm9ybUZyYW1lU2l6ZSA6IDE7CiAgICAgbXV0YWJs
ZSBib29sIG1faGF2ZUZyYW1lQ291bnQgOiAxOworCisgICAgYm9vbCBtX2lzQ2FjaGluZ0ZyYW1l
IDogMTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IGJmMWY4YzAuLjY2NjRiODYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApA
QCAtNDkwLDEwICs0OTAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdl
KiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0CiAjZW5kaWYKICAgICB9
CiAKLSAgICBpZiAoaW1hZ2UtPmlzQml0bWFwSW1hZ2UoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8
Qml0bWFwSW1hZ2UqPihpbWFnZSktPmRyYXcodGhpcywgRmxvYXRSZWN0KGRlc3QubG9jYXRpb24o
KSwgRmxvYXRTaXplKHR3LCB0aCkpLCBGbG9hdFJlY3Qoc3JjLmxvY2F0aW9uKCksIEZsb2F0U2l6
ZSh0c3csIHRzaCkpLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBzaG91bGRSZXNwZWN0SW1hZ2VPcmll
bnRhdGlvbik7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZS0+ZHJhdyh0aGlzLCBGbG9hdFJlY3Qo
ZGVzdC5sb2NhdGlvbigpLCBGbG9hdFNpemUodHcsIHRoKSksIEZsb2F0UmVjdChzcmMubG9jYXRp
b24oKSwgRmxvYXRTaXplKHRzdywgdHNoKSksIHN0eWxlQ29sb3JTcGFjZSwgb3ApOworICAgIGlt
YWdlLT5kcmF3KHRoaXMsIEZsb2F0UmVjdChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0dywg
dGgpKSwgRmxvYXRSZWN0KHNyYy5sb2NhdGlvbigpLCBGbG9hdFNpemUodHN3LCB0c2gpKSwgc3R5
bGVDb2xvclNwYWNlLCBvcCwgc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24pOwogCiAgICAg
aWYgKHVzZUxvd1F1YWxpdHlTY2FsZSkKICAgICAgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eShwcmV2aW91c0ludGVycG9sYXRpb25RdWFsaXR5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlLmNwcAppbmRleCAwYWNlN2FjLi4yYjE5ZjEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCkBAIC04OSw2ICs4OSwxMSBAQCB2
b2lkIEltYWdlOjpmaWxsV2l0aFNvbGlkQ29sb3IoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsCiAgICAgY3R4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBy
ZXZpb3VzT3BlcmF0b3IpOwogfQogCit2b2lkIEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCog
Y3R4LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBSZXNwZWN0
SW1hZ2VPcmllbnRhdGlvbkVudW0pCit7CisgICAgZHJhdyhjdHgsIGRzdFJlY3QsIHNyY1JlY3Qs
IHN0eWxlQ29sb3JTcGFjZSwgb3ApOworfQorCiB2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhp
Y3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFBv
aW50JiBzcmNQb2ludCwgY29uc3QgRmxvYXRTaXplJiBzY2FsZWRUaWxlU2l6ZSwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogeyAgICAKICAgICBpZiAo
bWF5RmlsbFdpdGhTb2xpZENvbG9yKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZS5oCmluZGV4IDNmZjQ4MjMuLmE2Yjk0OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAtMTgxLDYgKzE4MSw3IEBAIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKSB7IH0KICNlbmRpZgogICAg
IHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBSZXNw
ZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0pOwogICAgIHZvaWQgZHJhd1RpbGVkKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRQb2ludCYgc3JjUG9p
bnQsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgdm9pZCBkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBUaWxlUnVsZSBoUnVsZSwgVGlsZVJ1bGUg
dlJ1bGUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2Rl
V29ya2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2Rl
V29ya2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTU4YjZmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VE
ZWNvZGVXb3JrZXIuY3BwCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIENvbXBhbnkgMTAwIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlRGVjb2RlV29ya2VyLmgiCisKKyNpbmNsdWRlIDxsaW1pdHM+CisKKyNpbmNsdWRl
IDx3dGYvTnVtYmVyT2ZDb3Jlcy5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVmVjdG9yPFdvcmtRdWV1ZSo+KiBJbWFnZURlY29k
ZVdvcmtlcjo6c193b3JrUXVldWVQb29sID0gMDsKK2ludCogSW1hZ2VEZWNvZGVXb3JrZXI6OnNf
d29ya1F1ZXVlQWNxdWlyZUNvdW50ID0gMDsKKworUGFzc1JlZlB0cjxJbWFnZURlY29kZVdvcmtl
cj4gSW1hZ2VEZWNvZGVXb3JrZXI6OmFjcXVpcmVTaGFyZWRXb3JrZXIoKQoreworICAgIGlmICgh
c193b3JrUXVldWVQb29sKSB7CisgICAgICAgIGluaXRpYWxpemVXb3JrUXVldWVQb29sKCk7Cisg
ICAgfQorICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VEZWNvZGVXb3JrZXIoKSk7Cit9CisK
K3ZvaWQgSW1hZ2VEZWNvZGVXb3JrZXI6OmluaXRpYWxpemVXb3JrUXVldWVQb29sKCkKK3sKKyAg
ICBjb25zdCBpbnQgbnVtQ29yZXMgPSBXVEY6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMoKTsKKwor
ICAgIHNfd29ya1F1ZXVlQWNxdWlyZUNvdW50ID0gbmV3IGludFtudW1Db3Jlc107CisgICAgc193
b3JrUXVldWVQb29sID0gbmV3IFZlY3RvcjxXb3JrUXVldWUqPigpOworICAgIHNfd29ya1F1ZXVl
UG9vbC0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1Db3Jlcyk7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1Db3JlczsgaSsrKSB7CisgICAgICAgIHNfd29ya1F1ZXVlQWNxdWlyZUNvdW50
W2ldID0gMDsKKyAgICAgICAgU3RyaW5nIHF1ZXVlTmFtZSA9ICJJbWFnZURlY29kZVdvcmtlci4i
ICsgU3RyaW5nOjpudW1iZXIoaSk7CisgICAgICAgIHNfd29ya1F1ZXVlUG9vbC0+YXBwZW5kKG5l
dyBXb3JrUXVldWUocXVldWVOYW1lLmFzY2lpKCkuZGF0YSgpKSk7CisgICAgfQorfQorCitpbnQg
SW1hZ2VEZWNvZGVXb3JrZXI6OnF1ZXVlSWRXaXRoTWluaW11bUFjcXVpcmVDb3VudCgpCit7Cisg
ICAgaW50IG1pbmltdW1BY3F1aXJlQ291bnQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpOworICAgIGludCBpbmRleCA9IHNfd29ya1F1ZXVlUG9vbC0+c2l6ZSgpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzX3dvcmtRdWV1ZVBvb2wtPnNpemUoKTsgaSsrKSB7CisgICAg
ICAgIGlmIChzX3dvcmtRdWV1ZUFjcXVpcmVDb3VudFtpXSA8IG1pbmltdW1BY3F1aXJlQ291bnQp
IHsKKyAgICAgICAgICAgIG1pbmltdW1BY3F1aXJlQ291bnQgPSBzX3dvcmtRdWV1ZUFjcXVpcmVD
b3VudFtpXTsKKyAgICAgICAgICAgIGluZGV4ID0gaTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IEFTU0VSVChpbmRleCA8IHNfd29ya1F1ZXVlUG9vbC0+c2l6ZSgpKTsKKyAgICByZXR1cm4gaW5k
ZXg7Cit9CisKK0ltYWdlRGVjb2RlV29ya2VyOjpJbWFnZURlY29kZVdvcmtlcigpCisgICAgOiBt
X3dvcmtlclN0YXR1cyhSdW5uaW5nKQoreworICAgIG1fd29ya1F1ZXVlSWQgPSBxdWV1ZUlkV2l0
aE1pbmltdW1BY3F1aXJlQ291bnQoKTsKKyAgICBtX3dvcmtRdWV1ZSA9ICgqc193b3JrUXVldWVQ
b29sKVttX3dvcmtRdWV1ZUlkXTsKKyAgICBzX3dvcmtRdWV1ZUFjcXVpcmVDb3VudFttX3dvcmtR
dWV1ZUlkXSsrOworfQorCitJbWFnZURlY29kZVdvcmtlcjo6fkltYWdlRGVjb2RlV29ya2VyKCkK
K3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV93b3JrZXJTdGF0dXNNdXRleCk7CisgICAgbV93
b3JrZXJTdGF0dXMgPSBUZXJtaW5hdGlvbkJlZ3VuOworCisgICAgbV93b3JrUXVldWUtPmRpc3Bh
dGNoKGJpbmQoJkltYWdlRGVjb2RlV29ya2VyOjplbnN1cmVUZXJtaW5hdGUsIHRoaXMpKTsKKyAg
ICB3aGlsZSAobV93b3JrZXJTdGF0dXMgIT0gVGVybWluaWF0aW9uQ29tcGxldGVkKQorICAgICAg
ICBtX3Rlcm1pbmF0aW9uQ29tcGxldGVkLndhaXQobV93b3JrZXJTdGF0dXNNdXRleCk7CisgICAg
c193b3JrUXVldWVBY3F1aXJlQ291bnRbbV93b3JrUXVldWVJZF0tLTsKK30KKworYm9vbCBJbWFn
ZURlY29kZVdvcmtlcjo6aGFzVGVybWluYXRpb25CZWd1bigpCit7CisgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fd29ya2VyU3RhdHVzTXV0ZXgpOworICAgIEFTU0VSVChtX3dvcmtlclN0YXR1cyAh
PSBUZXJtaW5pYXRpb25Db21wbGV0ZWQpOworICAgIHJldHVybiBtX3dvcmtlclN0YXR1cyA9PSBU
ZXJtaW5hdGlvbkJlZ3VuOworfQorCit2b2lkIEltYWdlRGVjb2RlV29ya2VyOjpjYW5jZWxhYmxl
RnVuY3Rpb24oSW1hZ2VEZWNvZGVXb3JrZXIqIEltYWdlRGVjb2RlV29ya2VyLCBjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBpZiAoVU5MSUtFTFkoSW1hZ2VEZWNvZGVX
b3JrZXItPmhhc1Rlcm1pbmF0aW9uQmVndW4oKSkpCisgICAgICAgIHJldHVybjsKKworICAgIGZ1
bmN0aW9uKCk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGVXb3JrZXI6OnBvc3RUYXNrKGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChi
aW5kKEltYWdlRGVjb2RlV29ya2VyOjpjYW5jZWxhYmxlRnVuY3Rpb24sIHRoaXMsIGZ1bmN0aW9u
KSk7Cit9CisKK3ZvaWQgSW1hZ2VEZWNvZGVXb3JrZXI6OmVuc3VyZVRlcm1pbmF0ZShJbWFnZURl
Y29kZVdvcmtlciogSW1hZ2VEZWNvZGVXb3JrZXIpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KEltYWdlRGVjb2RlV29ya2VyLT5tX3dvcmtlclN0YXR1c011dGV4KTsKKyAgICBBU1NFUlQoSW1h
Z2VEZWNvZGVXb3JrZXItPm1fd29ya2VyU3RhdHVzID09IFRlcm1pbmF0aW9uQmVndW4pOworICAg
IEltYWdlRGVjb2RlV29ya2VyLT5tX3dvcmtlclN0YXR1cyA9IFRlcm1pbmlhdGlvbkNvbXBsZXRl
ZDsKKyAgICBJbWFnZURlY29kZVdvcmtlci0+bV90ZXJtaW5hdGlvbkNvbXBsZXRlZC5zaWduYWwo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVXb3JrZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2RlV29ya2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNWYwYmVlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2RlV29ya2VyLmgKQEAgLTAsMCArMSw3NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgSW1hZ2VEZWNvZGVXb3JrZXJfaAorI2RlZmluZSBJbWFnZURlY29kZVdvcmtlcl9oCisK
KyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgorCitjbGFzcyBXb3JrUXVldWU7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VEZWNvZGVXb3JrZXIgOiBwdWJsaWMgUmVmQ291
bnRlZDxJbWFnZURlY29kZVdvcmtlcj4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEltYWdlRGVjb2RlV29ya2VyPiBhY3F1aXJlU2hhcmVkV29ya2VyKCk7CisKKyAgICB2aXJ0dWFs
IH5JbWFnZURlY29kZVdvcmtlcigpOworCisgICAgdm9pZCBwb3N0VGFzayhjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdGlvbik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZVdvcmtRdWV1ZVBvb2woKTsKKyAgICBzdGF0aWMgaW50IHF1ZXVlSWRXaXRoTWluaW11bUFj
cXVpcmVDb3VudCgpOworCisgICAgLy8gRklYTUU6IFRoZXNlIHR3byBzdGF0aWMgZnVuY3Rpb25z
IHNob3VsZCBiZWNvbWUgbm9uLXN0YXRpYyBtZXRob2RzLgorICAgIC8vIEhvd2V2ZXIsIGRlZmlu
aW5nIHRoZW0gYXMgbm9uLXN0YXRpYyBtZXRob2RzIGNhdXNlcyBhbiB1bmludGVuZGVkIGRlc3Ry
dWN0b3IKKyAgICAvLyBjYWxsIHdoaWxlIGEgRnVuY3Rpb24gb2JqZWN0IHBhc3NlZCBXb3JrUXVl
dWU6OmRpc3BhdGNoKCkgaXMgYmVpbmcgZGVzdHJ1Y3RlZC4KKyAgICAvLyBUbyBhdm9pZCB0aGlz
IHByb2JsZW0sIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBhcyBzdGF0aWMgbWV0aG9kcy4K
KyAgICBzdGF0aWMgdm9pZCBjYW5jZWxhYmxlRnVuY3Rpb24oSW1hZ2VEZWNvZGVXb3JrZXIqIGRp
c3BhdGNoUXVldWUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKTsKKyAgICBzdGF0
aWMgdm9pZCBlbnN1cmVUZXJtaW5hdGUoSW1hZ2VEZWNvZGVXb3JrZXIqIGRpc3BhdGNoUXVldWUp
OworCisgICAgSW1hZ2VEZWNvZGVXb3JrZXIoKTsKKworICAgIGJvb2wgaGFzVGVybWluYXRpb25C
ZWd1bigpOworCisgICAgc3RhdGljIFZlY3RvcjxXb3JrUXVldWUqPiogc193b3JrUXVldWVQb29s
OworICAgIHN0YXRpYyBpbnQqIHNfd29ya1F1ZXVlQWNxdWlyZUNvdW50OworCisgICAgZW51bSBX
b3JrZXJTdGF0dXMgeyBSdW5uaW5nLCBUZXJtaW5hdGlvbkJlZ3VuLCBUZXJtaW5pYXRpb25Db21w
bGV0ZWQgfTsKKyAgICBNdXRleCBtX3dvcmtlclN0YXR1c011dGV4OworICAgIFdvcmtlclN0YXR1
cyBtX3dvcmtlclN0YXR1czsKKyAgICBUaHJlYWRDb25kaXRpb24gbV90ZXJtaW5hdGlvbkNvbXBs
ZXRlZDsKKworICAgIGludCBtX3dvcmtRdWV1ZUlkOworICAgIFdvcmtRdWV1ZSogbV93b3JrUXVl
dWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBJbWFnZURlY29k
ZVdvcmtlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5jcHAKaW5kZXggNzVlZDVhMS4uZjRkNDk5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAtMyw2ICszLDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJvcmEuY28udWs+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYworICogQ29weXJpZ2h0
IChDKSAyMDEyIENvbXBhbnkgMTAwIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMTYgKzMzLDMwIEBACiAjaW5jbHVkZSAiSW1h
Z2VEZWNvZGVyLmgiCiAKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSAi
SW1hZ2VTb3VyY2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiUGFyYWxsZWxJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlIDx3dGYvTnVtYmVyT2ZDb3Jl
cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3Jl
c29sdXRpb25UaHJlc2hvbGRGb3JQYXJhbGxlbCA9IDUxMiAqIDUxMjsKKwogI2lmIEVOQUJMRShJ
TUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiB1bnNpZ25lZCBJbWFnZVNvdXJjZTo6c19tYXhQ
aXhlbHNQZXJEZWNvZGVkSW1hZ2UgPSAxMDI0ICogMTAyNDsKICNlbmRpZgogCiBJbWFnZVNvdXJj
ZTo6SW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFn
ZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvclByb2ZpbGVP
cHRpb24pCiAgICAgOiBtX2RlY29kZXIoMCkKKyAgICAsIG1fb2JzZXJ2ZXIoMCkKKyAgICAsIG1f
YWxwaGFPcHRpb24oYWxwaGFPcHRpb24pCisgICAgLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0
aW9uKGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQoreworfQorCitJbWFnZVNvdXJjZTo6SW1h
Z2VTb3VyY2UoSW1hZ2VTb3VyY2VPYnNlcnZlciogb2JzZXJ2ZXIsIEltYWdlU291cmNlOjpBbHBo
YU9wdGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0
aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQorICAgIDogbV9kZWNvZGVyKDApCisgICAg
LCBtX29ic2VydmVyKG9ic2VydmVyKQogICAgICwgbV9hbHBoYU9wdGlvbihhbHBoYU9wdGlvbikK
ICAgICAsIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24oZ2FtbWFBbmRDb2xvclByb2ZpbGVP
cHRpb24pCiB7CkBAIC01NSwxMSArNzAsMTUgQEAgSW1hZ2VTb3VyY2U6On5JbWFnZVNvdXJjZSgp
CiB2b2lkIEltYWdlU291cmNlOjpjbGVhcihib29sIGRlc3Ryb3lBbGwsIHNpemVfdCBjbGVhckJl
Zm9yZUZyYW1lLCBTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewog
ICAgIGlmICghZGVzdHJveUFsbCkgewotICAgICAgICBpZiAobV9kZWNvZGVyKQorICAgICAgICAv
LyBPbmx5IEdJRiBkZWNvZGVyIGltcGxlbWVudHMgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlLgorICAg
ICAgICBpZiAobV9kZWNvZGVyICYmICFtX3BhcmFsbGVsRGVjb2RlcikKICAgICAgICAgICAgIG1f
ZGVjb2Rlci0+Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKGNsZWFyQmVmb3JlRnJhbWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKG1fcGFyYWxsZWxEZWNvZGVyLmdldCgpKQorICAg
ICAgICBjbGVhclBhcmFsbGVsRGVjb2RlcigpOworCiAgICAgZGVsZXRlIG1fZGVjb2RlcjsKICAg
ICBtX2RlY29kZXIgPSAwOwogICAgIGlmIChkYXRhKQpAQCAtNzcsNiArOTYsMTMgQEAgdm9pZCBJ
bWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2Vp
dmVkKQogICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgZXhhbWluZSB0aGUgZGF0YSBhbmQgaW5zdGFu
dGlhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGFwcHJvcHJpYXRlIGRlY29kZXIgcGx1Z2luLgogICAg
IC8vIElmIGluc3VmZmljaWVudCBieXRlcyBhcmUgYXZhaWxhYmxlIHRvIGRldGVybWluZSB0aGUg
aW1hZ2UgdHlwZSwgbm8gZGVjb2RlciBwbHVnaW4gd2lsbCBiZQogICAgIC8vIG1hZGUuCisKKyAg
ICBpZiAobV9wYXJhbGxlbERlY29kZXIuZ2V0KCkpIHsKKyAgICAgICAgQVNTRVJUKG1fZGVjb2Rl
cik7CisgICAgICAgIG1fcGFyYWxsZWxEZWNvZGVyLT5zZXREYXRhKGRhdGEsIGFsbERhdGFSZWNl
aXZlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoIW1fZGVjb2Rlcikgewog
ICAgICAgICBtX2RlY29kZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNvdXJjZVB0cj4oSW1h
Z2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEsIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRDb2xvclBy
b2ZpbGVPcHRpb24pKTsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQpA
QCAtOTEsMTEgKzExNywxNSBAQCB2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1ZmZl
ciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAKIFN0cmluZyBJbWFnZVNvdXJjZTo6Zmls
ZW5hbWVFeHRlbnNpb24oKSBjb25zdAogeworICAgIGlmIChtX3BhcmFsbGVsRGVjb2Rlci5nZXQo
KSkKKyAgICAgICAgcmV0dXJuIG1fcGFyYWxsZWxEZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigp
OwogICAgIHJldHVybiBtX2RlY29kZXIgPyBtX2RlY29kZXItPmZpbGVuYW1lRXh0ZW5zaW9uKCkg
OiBTdHJpbmcoKTsKIH0KIAogYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKCkKIHsK
KyAgICBpZiAobV9wYXJhbGxlbERlY29kZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIHJldHVybiBtX2RlY29kZXIgJiYgbV9kZWNvZGVyLT5pc1NpemVBdmFpbGFibGUoKTsKIH0K
IApAQCAtMTA1LDYgKzEzNSw4IEBAIEludFNpemUgSW1hZ2VTb3VyY2U6OnNpemUoUmVzcGVjdElt
YWdlT3JpZW50YXRpb25FbnVtIHNob3VsZFJlc3BlY3RPcmllbnRhdGlvbikKICAgICBpZiAoc2hv
dWxkUmVzcGVjdE9yaWVudGF0aW9uID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQogICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogCisgICAgaWYgKG1fcGFyYWxsZWxEZWNvZGVyLmdldCgpKQor
ICAgICAgICByZXR1cm4gbV9wYXJhbGxlbERlY29kZXItPnNpemUoKTsKICAgICByZXR1cm4gbV9k
ZWNvZGVyID8gbV9kZWNvZGVyLT5zaXplKCkgOiBJbnRTaXplKCk7CiB9CiAKQEAgLTExNCw2ICsx
NDYsOCBAQCBJbnRTaXplIEltYWdlU291cmNlOjpmcmFtZVNpemVBdEluZGV4KHNpemVfdCBpbmRl
eCwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtCiAgICAgaWYgKHNob3VsZFJlc3BlY3RPcmll
bnRhdGlvbiA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKICAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIAorICAgIGlmIChtX3BhcmFsbGVsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJu
IG1fcGFyYWxsZWxEZWNvZGVyLT5zaXplKCk7CiAgICAgcmV0dXJuIG1fZGVjb2RlciA/IG1fZGVj
b2Rlci0+ZnJhbWVTaXplQXRJbmRleChpbmRleCkgOiBJbnRTaXplKCk7CiB9CiAKQEAgLTEyOSw0
MiArMTYzLDE0OCBAQCBzaXplX3QgSW1hZ2VTb3VyY2U6OmJ5dGVzRGVjb2RlZFRvRGV0ZXJtaW5l
UHJvcGVydGllcygpIGNvbnN0CiAKIGludCBJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNvdW50KCkK
IHsKKyAgICBpZiAobV9wYXJhbGxlbERlY29kZXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBjQW5p
bWF0aW9uTm9uZTsKICAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5yZXBldGl0aW9u
Q291bnQoKSA6IGNBbmltYXRpb25Ob25lOwogfQogCiBzaXplX3QgSW1hZ2VTb3VyY2U6OmZyYW1l
Q291bnQoKSBjb25zdAogeworICAgIGlmIChtX3BhcmFsbGVsRGVjb2Rlci5nZXQoKSkKKyAgICAg
ICAgcmV0dXJuIDE7CiAgICAgcmV0dXJuIG1fZGVjb2RlciA/IG1fZGVjb2Rlci0+ZnJhbWVDb3Vu
dCgpIDogMDsKIH0KIAotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJ
bmRleChzaXplX3QgaW5kZXgpCitJbWFnZUZyYW1lRGF0YSBJbWFnZVNvdXJjZTo6cmVxdWVzdEZy
YW1lQXRJbmRleChzaXplX3QgaW5kZXgsIGJvb2wgcmV0YWluZWRNb2RlUmVuZGVyaW5nKQogewot
ICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQoIShyZXRh
aW5lZE1vZGVSZW5kZXJpbmcgJiYgKGluZGV4ICE9IDApKSk7CisgICAgQVNTRVJUKCEocmV0YWlu
ZWRNb2RlUmVuZGVyaW5nICYmICFtX29ic2VydmVyKSk7CiAKLSAgICBJbWFnZUZyYW1lKiBidWZm
ZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7Ci0gICAgaWYgKCFidWZm
ZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KQotICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAoIW1fZGVjb2RlcikgeworICAgICAgICBtX29ic2VydmVyLT5k
aWRSZWNlaXZlRnJhbWVBdEluZGV4KGluZGV4LCBJbWFnZUZyYW1lRGF0YSgpKTsKKyAgICAgICAg
cmV0dXJuIEltYWdlRnJhbWVEYXRhKCk7CisgICAgfQogCi0gICAgLy8gWmVyby1oZWlnaHQgaW1h
Z2VzIGNhbiBjYXVzZSBwcm9ibGVtcyBmb3Igc29tZSBwb3J0cy4gIElmIHdlIGhhdmUgYW4KLSAg
ICAvLyBlbXB0eSBpbWFnZSBkaW1lbnNpb24sIGp1c3QgYmFpbC4KLSAgICBpZiAoc2l6ZSgpLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFyZXRhaW5lZE1vZGVSZW5kZXJp
bmcgfHwgIW1fb2JzZXJ2ZXIgfHwgZmlyc3RGcmFtZUlzQ29tcGxldGUoKSkKKyAgICAgICAgcmV0
dXJuIHNlcmlhbERlY29kZShpbmRleCk7CisKKyAgICBpZiAoc2hvdWxkRGVjb2RlUGFyYWxsZWwo
KSkgeworICAgICAgICBwYXJhbGxlbERlY29kZSgpOworICAgICAgICByZXR1cm4gSW1hZ2VGcmFt
ZURhdGEoKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2VyaWFsRGVjb2RlKGluZGV4KTsKK30KKwor
Ym9vbCBJbWFnZVNvdXJjZTo6c2hvdWxkRGVjb2RlUGFyYWxsZWwoKQoreworICAgIEFTU0VSVCht
X2RlY29kZXIpOworCisgICAgaWYgKG1fcGFyYWxsZWxEZWNvZGVyLmdldCgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmIChXVEY6Om51bWJlck9mUHJvY2Vzc29yQ29yZXMoKSA9PSAx
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgZmlsZUV4dCA9IGZpbGVuYW1l
RXh0ZW5zaW9uKCk7CisgICAgaWYgKGZpbGVFeHQgPT0gImljbyIgfHwgZmlsZUV4dCA9PSAiZ2lm
IikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFpc1NpemVBdmFpbGFibGUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNpemUoKS5hcmVhKCkgPCBzX3Jlc29s
dXRpb25UaHJlc2hvbGRGb3JQYXJhbGxlbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW1hZ2VTb3VyY2U6OmZpcnN0RnJhbWVJc0NvbXBsZXRl
KCkKK3sKKyAgICBBU1NFUlQobV9kZWNvZGVyKTsKKyAgICBJbWFnZUZyYW1lKiBpbWFnZUZyYW1l
ID0gMDsKKyAgICBpZiAoIW1fcGFyYWxsZWxEZWNvZGVyKQorICAgICAgICBpbWFnZUZyYW1lID0g
bV9kZWNvZGVyLT5maXJzdEltYWdlRnJhbWVXaXRob3V0RGVjb2RlKCk7CisgICAgcmV0dXJuIGlt
YWdlRnJhbWUgJiYgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbWFnZUZyYW1lKTsKK30KKwordm9p
ZCBJbWFnZVNvdXJjZTo6cGFyYWxsZWxEZWNvZGUoKQoreworICAgIGNyZWF0ZVBhcmFsbGVsRGVj
b2RlcklmTmVlZGVkKCk7CisgICAgbV9wYXJhbGxlbERlY29kZXItPmRlY29kZSgpOworfQorCit2
b2lkIEltYWdlU291cmNlOjpkaWREZWNvZGUoY29uc3QgSW1hZ2VGcmFtZURhdGEmIGltYWdlRnJh
bWVEYXRhKQoreworICAgIEFTU0VSVChtX29ic2VydmVyKTsKKyAgICBtX29ic2VydmVyLT5kaWRS
ZWNlaXZlRnJhbWVBdEluZGV4KDAsIGltYWdlRnJhbWVEYXRhLCB0cnVlKTsKIAotICAgIC8vIFJl
dHVybiB0aGUgYnVmZmVyIGNvbnRlbnRzIGFzIGEgbmF0aXZlIGltYWdlLiAgRm9yIHNvbWUgcG9y
dHMsIHRoZSBkYXRhCi0gICAgLy8gaXMgYWxyZWFkeSBpbiBhIG5hdGl2ZSBjb250YWluZXIsIGFu
ZCB0aGlzIGp1c3QgaW5jcmVtZW50cyBpdHMgcmVmY291bnQuCi0gICAgcmV0dXJuIGJ1ZmZlci0+
YXNOZXdOYXRpdmVJbWFnZSgpOworICAgIGlmIChpbWFnZUZyYW1lRGF0YS5tX2lzQ29tcGxldGUp
CisgICAgICAgIGNsZWFyUGFyYWxsZWxEZWNvZGVyKCk7CiB9CiAKLWZsb2F0IEltYWdlU291cmNl
OjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCit2b2lkIEltYWdlU291cmNlOjpj
cmVhdGVQYXJhbGxlbERlY29kZXJJZk5lZWRlZCgpCiB7CisgICAgaWYgKCFtX3BhcmFsbGVsRGVj
b2RlcikKKyAgICAgICAgbV9wYXJhbGxlbERlY29kZXIgPSBhZG9wdFJlZihuZXcgUGFyYWxsZWxJ
bWFnZURlY29kZXIodGhpcywgbV9kZWNvZGVyKSk7Cit9CisKK3ZvaWQgSW1hZ2VTb3VyY2U6OmNs
ZWFyUGFyYWxsZWxEZWNvZGVyKCkKK3sKKyAgICBBU1NFUlQobV9vYnNlcnZlcik7CisgICAgbV9w
YXJhbGxlbERlY29kZXItPmludmFsaWRhdGUoKTsKKyAgICBtX3BhcmFsbGVsRGVjb2Rlci5jbGVh
cigpOworfQorCitJbWFnZUZyYW1lRGF0YSBJbWFnZVNvdXJjZTo6c2VyaWFsRGVjb2RlKHNpemVf
dCBpbmRleCkKK3sKKyAgICBib29sIHBhcmFsbGVsRGVjb2RlckNhbmNlbGVkID0gZmFsc2U7Cisg
ICAgLy8gUmVuZGVySW1hZ2UgYW5kIENhbnZhc0VsZW1lbnQgY2FuIHNoYXJlIHRoZSBzYW1lIENh
Y2hlZEltYWdlLgorICAgIGlmIChtX3BhcmFsbGVsRGVjb2Rlci5nZXQoKSkgeworICAgICAgICBB
U1NFUlQobV9vYnNlcnZlcik7CisgICAgICAgIGNsZWFyUGFyYWxsZWxEZWNvZGVyKCk7CisgICAg
ICAgIHBhcmFsbGVsRGVjb2RlckNhbmNlbGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBJbWFnZUZy
YW1lRGF0YSBpbWFnZUZyYW1lRGF0YSA9IGNyZWF0ZUZyYW1lQXRJbmRleChpbmRleCk7CisKKyAg
ICBpZiAobV9vYnNlcnZlcikKKyAgICAgICAgbV9vYnNlcnZlci0+ZGlkUmVjZWl2ZUZyYW1lQXRJ
bmRleChpbmRleCwgaW1hZ2VGcmFtZURhdGEsIGZhbHNlIC8qIHJldGFpbmVkTW9kZSAqLywgcGFy
YWxsZWxEZWNvZGVyQ2FuY2VsZWQpOworCisgICAgcmV0dXJuIGltYWdlRnJhbWVEYXRhOworfQor
CitJbWFnZUZyYW1lRGF0YSBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KHNpemVfdCBp
bmRleCkKK3sKKyAgICBBU1NFUlQoIW1fcGFyYWxsZWxEZWNvZGVyKTsKICAgICBpZiAoIW1fZGVj
b2RlcikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBJbWFnZUZyYW1lRGF0YSgp
OwogCiAgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5k
ZXgoaW5kZXgpOwogICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gSW1hZ2VG
cmFtZTo6RnJhbWVFbXB0eSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBJbWFn
ZUZyYW1lRGF0YSgpOworCisgICAgSW1hZ2VGcmFtZURhdGEgaW1hZ2VGcmFtZURhdGE7CisKKyAg
ICAvLyBaZXJvLWhlaWdodCBpbWFnZXMgY2FuIGNhdXNlIHByb2JsZW1zIGZvciBzb21lIHBvcnRz
LiAgSWYgd2UgaGF2ZSBhbgorICAgIC8vIGVtcHR5IGltYWdlIGRpbWVuc2lvbiwganVzdCBiYWls
LgorICAgIGlmICghc2l6ZSgpLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBSZXR1cm4gdGhlIGJ1
ZmZlciBjb250ZW50cyBhcyBhIG5hdGl2ZSBpbWFnZS4gRm9yIHNvbWUgcG9ydHMsIHRoZSBkYXRh
CisgICAgICAgIC8vIGlzIGFscmVhZHkgaW4gYSBuYXRpdmUgY29udGFpbmVyLCBhbmQgdGhpcyBq
dXN0IGluY3JlbWVudHMgaXRzIHJlZmNvdW50LgorICAgICAgICBpbWFnZUZyYW1lRGF0YS5tX2Zy
YW1lID0gYnVmZmVyLT5hc05ld05hdGl2ZUltYWdlKCk7CisgICAgfQogCisgICAgaW1hZ2VGcmFt
ZURhdGEubV9vcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uQXRJbmRleChidWZmZXIpOworICAgIGlt
YWdlRnJhbWVEYXRhLm1faXNDb21wbGV0ZSA9IGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoYnVmZmVy
KTsKKyAgICBpZiAocmVwZXRpdGlvbkNvdW50KCkgIT0gY0FuaW1hdGlvbk5vbmUpCisgICAgICAg
IGltYWdlRnJhbWVEYXRhLm1fZHVyYXRpb24gPSBmcmFtZUR1cmF0aW9uQXRJbmRleChidWZmZXIp
OworICAgIGltYWdlRnJhbWVEYXRhLm1faGFzQWxwaGEgPSBmcmFtZUhhc0FscGhhQXRJbmRleChi
dWZmZXIpOworCisgICAgcmV0dXJuIGltYWdlRnJhbWVEYXRhOworfQorCitmbG9hdCBJbWFnZVNv
dXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoSW1hZ2VGcmFtZSogYnVmZmVyKQorewogICAgIC8v
IE1hbnkgYW5ub3lpbmcgYWRzIHNwZWNpZnkgYSAwIGR1cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2Ug
Zmxhc2ggYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KICAgICAvLyBXZSBmb2xsb3cgRmlyZWZveCdz
IGJlaGF2aW9yIGFuZCB1c2UgYSBkdXJhdGlvbiBvZiAxMDAgbXMgZm9yIGFueSBmcmFtZXMgdGhh
dCBzcGVjaWZ5CiAgICAgLy8gYSBkdXJhdGlvbiBvZiA8PSAxMCBtcy4gU2VlIDxyZGFyOi8vcHJv
YmxlbS83Njg5MzAwPiBhbmQgPGh0dHA6Ly93ZWJraXQub3JnL2IvMzYwODI+CkBAIC0xNzUsMTQg
KzMxNSwxNCBAQCBmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90
IGluZGV4KQogICAgIHJldHVybiBkdXJhdGlvbjsKIH0KIAotSW1hZ2VPcmllbnRhdGlvbiBJbWFn
ZVNvdXJjZTo6b3JpZW50YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKK0ltYWdlT3Jp
ZW50YXRpb24gSW1hZ2VTb3VyY2U6Om9yaWVudGF0aW9uQXRJbmRleChJbWFnZUZyYW1lKikgY29u
c3QKIHsKICAgICAvLyBUaGUgSlBFRyBhbmQgVElGRiBkZWNvZGVycyBuZWVkIHRvIGJlIHRhdWdo
dCBob3cgdG8gcmVhZCBFWElGLCBYTVAsIG9yIElQVEMgZGF0YS4KICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogICAgIHJldHVybiBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKIH0KIAotYm9vbCBJbWFn
ZVNvdXJjZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KQorYm9vbCBJbWFnZVNv
dXJjZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoSW1hZ2VGcmFtZSogYnVmZmVyKQogewogICAgIC8v
IFdoZW4gYSBmcmFtZSBoYXMgbm90IGZpbmlzaGVkIGRlY29kaW5nLCBhbHdheXMgbWFyayBpdCBh
cyBoYXZpbmcgYWxwaGEuCiAgICAgLy8gUG9ydHMgdGhhdCBjaGVjayB0aGUgcmVzdWx0IG9mIHRo
aXMgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoZWlyCkBAIC0xOTAsMTcgKzMzMCwxMiBAQCBib29s
IEltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgLy8g
YmxhY2suCiAgICAgLy8gVE9ETzogUGVyaGFwcyB3ZSBzaG91bGQgZW5zdXJlIHRoYXQgZWFjaCBp
bmRpdmlkdWFsIGRlY29kZXIgcmV0dXJucyB0cnVlCiAgICAgLy8gaW4gdGhpcyBjYXNlLgotICAg
IHJldHVybiAhZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkKLSAgICAgICAgfHwgbV9kZWNv
ZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpLT5oYXNBbHBoYSgpOworICAgIHJldHVybiAh
ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChidWZmZXIpIHx8IGJ1ZmZlci0+aGFzQWxwaGEoKTsKIH0K
IAotYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgp
Citib29sIEltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KEltYWdlRnJhbWUqIGJ1
ZmZlcikKIHsKLSAgICBpZiAoIW1fZGVjb2RlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5k
ZXgpOwotICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1l
OjpGcmFtZUNvbXBsZXRlOworICAgIHJldHVybiBidWZmZXItPnN0YXR1cygpID09IEltYWdlRnJh
bWU6OkZyYW1lQ29tcGxldGU7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IGVkNjI1YmMuLmYwNGQ3MzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApAQCAtMSw2ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBU
b3JjaCBNb2JpbGUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI4LDYgKzI5LDkgQEAKICNkZWZpbmUgSW1hZ2VTb3VyY2VfaAogCiAjaW5jbHVkZSAiSW1hZ2VP
cmllbnRhdGlvbi5oIgorI2lmICFVU0UoQ0cpCisjaW5jbHVkZSAiUGFyYWxsZWxJbWFnZURlY29k
ZXJPYnNlcnZlci5oIgorI2VuZGlmCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNTcsOSArNjEsMTYgQEAgY2xhc3MgTmF0aXZlSW1h
Z2VTa2lhOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiAhVVNFKENHKQorY2xhc3MgSW1h
Z2VGcmFtZTsKKyNlbmRpZgogY2xhc3MgSW1hZ2VPcmllbnRhdGlvbjsKK2NsYXNzIEltYWdlU291
cmNlT2JzZXJ2ZXI7CiBjbGFzcyBJbnRQb2ludDsKIGNsYXNzIEludFNpemU7CisjaWYgIVVTRShD
RykKK2NsYXNzIFBhcmFsbGVsSW1hZ2VEZWNvZGVyOworI2VuZGlmCiBjbGFzcyBTaGFyZWRCdWZm
ZXI7CiAKICNpZiBVU0UoQ0cpCkBAIC05NCw2ICsxMDUsMzIgQEAgdHlwZWRlZiBRUGl4bWFwKiBO
YXRpdmVJbWFnZVB0cjsKICNlbmRpZgogI2VuZGlmCiAKKy8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gSW1hZ2VGcmFtZURhdGEgQ2xhc3MKKy8v
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitzdHJ1
Y3QgSW1hZ2VGcmFtZURhdGEgeworcHVibGljOgorICAgIEltYWdlRnJhbWVEYXRhKCkKKyAgICAg
ICAgOiBtX2ZyYW1lKDApCisgICAgICAgICwgbV9vcmllbnRhdGlvbihEZWZhdWx0SW1hZ2VPcmll
bnRhdGlvbikKKyAgICAgICAgLCBtX2R1cmF0aW9uKDApCisgICAgICAgICwgbV9pc0NvbXBsZXRl
KGZhbHNlKQorICAgICAgICAsIG1faGFzQWxwaGEodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAg
TmF0aXZlSW1hZ2VQdHIgbV9mcmFtZTsKKyAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRp
b247CisgICAgZmxvYXQgbV9kdXJhdGlvbjsKKyAgICBib29sIG1faXNDb21wbGV0ZSA6IDE7Cisg
ICAgYm9vbCBtX2hhc0FscGhhIDogMTsKK307CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEJpdG1hcEltYWdlIENsYXNzCisvLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKIC8vIFJpZ2h0
IG5vdyBHSUZzIGFyZSB0aGUgb25seSByZWNvZ25pemVkIGltYWdlIGZvcm1hdCB0aGF0IHN1cHBv
cnRzIGFuaW1hdGlvbi4KIC8vIFRoZSBhbmltYXRpb24gc3lzdGVtIGFuZCB0aGUgY29uc3RhbnRz
IGJlbG93IGFyZSBkZXNpZ25lZCB3aXRoIHRoaXMgaW4gbWluZC4KIC8vIEdJRnMgaGF2ZSBhbiBv
cHRpb25hbCAxNi1iaXQgdW5zaWduZWQgbG9vcCBjb3VudCB0aGF0IGRlc2NyaWJlcyBob3cgYW4K
QEAgLTExMiw3ICsxNDksMTEgQEAgY29uc3QgaW50IGNBbmltYXRpb25Mb29wT25jZSA9IDA7CiBj
b25zdCBpbnQgY0FuaW1hdGlvbkxvb3BJbmZpbml0ZSA9IC0xOwogY29uc3QgaW50IGNBbmltYXRp
b25Ob25lID0gLTI7CiAKLWNsYXNzIEltYWdlU291cmNlIHsKK2NsYXNzIEltYWdlU291cmNlCisj
aWYgIVVTRShDRykKKyAgICA6IHB1YmxpYyBQYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyCisj
ZW5kaWYKK3sKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZVNvdXJjZSk7CiBwdWJsaWM6
CiAgICAgZW51bSBBbHBoYU9wdGlvbiB7CkBAIC0xMzIsNyArMTczLDggQEAgcHVibGljOgogICAg
IH07CiAjZW5kaWYKIAotICAgIEltYWdlU291cmNlKEFscGhhT3B0aW9uIGFscGhhT3B0aW9uID0g
QWxwaGFQcmVtdWx0aXBsaWVkLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENv
bG9yUHJvZmlsZU9wdGlvbiA9IEdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCk7CisgICAgSW1h
Z2VTb3VyY2UoQWxwaGFPcHRpb24gPSBBbHBoYVByZW11bHRpcGxpZWQsIEdhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uID0gR2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKTsKKyAgICBJbWFnZVNv
dXJjZShJbWFnZVNvdXJjZU9ic2VydmVyKiwgQWxwaGFPcHRpb24gPSBBbHBoYVByZW11bHRpcGxp
ZWQsIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uID0gR2FtbWFBbmRDb2xvclByb2ZpbGVBcHBs
aWVkKTsKICAgICB+SW1hZ2VTb3VyY2UoKTsKIAogICAgIC8vIFRlbGxzIHRoZSBJbWFnZVNvdXJj
ZSB0aGF0IHRoZSBJbWFnZSBubyBsb25nZXIgY2FyZXMgYWJvdXQgZGVjb2RlZCBmcmFtZQpAQCAt
MTc4LDIyICsyMjAsNTAgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IGZyYW1lQ291bnQoKSBjb25z
dDsKIAotICAgIC8vIENhbGxlcnMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyBj
bGVhcigpIHdpdGggYSBoaWdoZXIgaW5kZXg7CisgICAgLy8gTk9URTogQ2FsbGVycyBzaG91bGQg
bm90IGNhbGwgdGhpcyBhZnRlciBjYWxsaW5nIGNsZWFyKCkgd2l0aCBhIGhpZ2hlciBpbmRleDsK
ICAgICAvLyBzZWUgY29tbWVudHMgb24gY2xlYXIoKSBhYm92ZS4KLSAgICBOYXRpdmVJbWFnZVB0
ciBjcmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90KTsKKyAgICAvLyBOT1RFOiBJZiBJbWFnZVNvdXJj
ZSBoYXMgSW1hZ2VTb3VyY2VPYnNlcnZlciwgdGhpcyBtZXRob2Qgc2VuZHMgdGhlIHJlc3VsdCB2
aWEgZGlkRGVjb2RlKCkuCisgICAgLy8gT3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRo
ZSByZXN1bHQuIGUuZy4gR3JhcGhpY3NDb250ZXh0M0QKKyAgICBJbWFnZUZyYW1lRGF0YSByZXF1
ZXN0RnJhbWVBdEluZGV4KHNpemVfdCwgYm9vbCByZXRhaW5lZE1vZGVSZW5kZXJpbmcgPSBmYWxz
ZSk7CiAKKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgIHN0YXRp
YyB1bnNpZ25lZCBtYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2UoKSB7IHJldHVybiBzX21heFBpeGVs
c1BlckRlY29kZWRJbWFnZTsgfQorICAgIHN0YXRpYyB2b2lkIHNldE1heFBpeGVsc1BlckRlY29k
ZWRJbWFnZSh1bnNpZ25lZCBtYXhQaXhlbHMpIHsgc19tYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2Ug
PSBtYXhQaXhlbHM7IH0KKyNlbmRpZgorCisjaWYgIVVTRShDRykKKyAgICAvLyBQYXJhbGxlbElt
YWdlRGVjb2Rlck9ic2VydmVyCisgICAgdmlydHVhbCB2b2lkIGRpZERlY29kZShjb25zdCBJbWFn
ZUZyYW1lRGF0YSYpOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgSW1hZ2VGcmFtZURhdGEgY3Jl
YXRlRnJhbWVBdEluZGV4KHNpemVfdCk7CisjaWYgVVNFKENHKQogICAgIGZsb2F0IGZyYW1lRHVy
YXRpb25BdEluZGV4KHNpemVfdCk7CiAgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXpl
X3QpOyAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgYWN0dWFsbHkgdXNlZCBhbnkgYWxwaGEu
CiAgICAgYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCk7IC8vIFdoZXRoZXIgb3Ig
bm90IHRoZSBmcmFtZSBpcyBjb21wbGV0ZWx5IGRlY29kZWQuCiAgICAgSW1hZ2VPcmllbnRhdGlv
biBvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90KSBjb25zdDsgLy8gRVhJRiBpbWFnZSBvcmllbnRh
dGlvbgorI2Vsc2UKKyAgICBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChJbWFnZUZyYW1lKik7
CisgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChJbWFnZUZyYW1lKik7CisgICAgYm9vbCBm
cmFtZUlzQ29tcGxldGVBdEluZGV4KEltYWdlRnJhbWUqKTsKKyAgICBJbWFnZU9yaWVudGF0aW9u
IG9yaWVudGF0aW9uQXRJbmRleChJbWFnZUZyYW1lKikgY29uc3Q7CisjZW5kaWYKIAotI2lmIEVO
QUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0gICAgc3RhdGljIHVuc2lnbmVkIG1h
eFBpeGVsc1BlckRlY29kZWRJbWFnZSgpIHsgcmV0dXJuIHNfbWF4UGl4ZWxzUGVyRGVjb2RlZElt
YWdlOyB9Ci0gICAgc3RhdGljIHZvaWQgc2V0TWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKHVuc2ln
bmVkIG1heFBpeGVscykgeyBzX21heFBpeGVsc1BlckRlY29kZWRJbWFnZSA9IG1heFBpeGVsczsg
fQorI2lmICFVU0UoQ0cpCisgICAgdm9pZCBjcmVhdGVQYXJhbGxlbERlY29kZXJJZk5lZWRlZCgp
OworICAgIHZvaWQgY2xlYXJQYXJhbGxlbERlY29kZXIoKTsKKyAgICBib29sIHNob3VsZERlY29k
ZVBhcmFsbGVsKCk7CisgICAgYm9vbCBmaXJzdEZyYW1lSXNDb21wbGV0ZSgpOworICAgIHZvaWQg
cGFyYWxsZWxEZWNvZGUoKTsKKyAgICBJbWFnZUZyYW1lRGF0YSBzZXJpYWxEZWNvZGUoc2l6ZV90
KTsKKworICAgIFJlZlB0cjxQYXJhbGxlbEltYWdlRGVjb2Rlcj4gbV9wYXJhbGxlbERlY29kZXI7
CiAjZW5kaWYKIAotcHJpdmF0ZToKICAgICBOYXRpdmVJbWFnZVNvdXJjZVB0ciBtX2RlY29kZXI7
CisgICAgSW1hZ2VTb3VyY2VPYnNlcnZlciogbV9vYnNlcnZlcjsKKwogICAgIEFscGhhT3B0aW9u
IG1fYWxwaGFPcHRpb247CiAgICAgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gbV9nYW1tYUFu
ZENvbG9yUHJvZmlsZU9wdGlvbjsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBM
SU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2VPYnNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2VPYnNlcnZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMjA3
ODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZU9ic2VydmVyLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBDb21wYW55IDEwMCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSW1hZ2VTb3VyY2VPYnNlcnZlcl9oCisjZGVmaW5lIEltYWdlU291cmNlT2JzZXJ2ZXJf
aAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlRnJhbWVEYXRhOworCisvLyBJ
bnRlcmZhY2UgZm9yIG5vdGlmaWNhdGlvbiBhYm91dCBjaGFuZ2VzIHRvIGFuIEltYWdlU291cmNl
LCBpbmNsdWRpbmcgZGVjb2RpbmcuCitjbGFzcyBJbWFnZVNvdXJjZU9ic2VydmVyIHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUZyYW1lQXRJbmRleChzaXplX3QsIGNvbnN0
IEltYWdlRnJhbWVEYXRhJiwgYm9vbCByZXRhaW5lZCA9IGZhbHNlLCBib29sIHBhcmFsbGVsRGVj
b2RlckNhbmNlbGVkID0gZmFsc2UpID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfklt
YWdlU291cmNlT2JzZXJ2ZXIoKSB7IH0KK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY3OWY0NQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhcmFsbGVsSW1hZ2VE
ZWNvZGVyLmNwcApAQCAtMCwwICsxLDI5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBD
b21wYW55IDEwMCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlBhcmFsbGVsSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgUGFy
YWxsZWxGcmFtZURhdGE7Cit2b2lkIGRpZERlY29kZVRhc2tDYWxsYmFjayhQYXJhbGxlbEZyYW1l
RGF0YSopOworc3RhdGljIEltYWdlRnJhbWVEYXRhIGNyZWF0ZUltYWdlRnJhbWVEYXRhKFBhcmFs
bGVsRnJhbWVEYXRhKik7CisKK1BhcmFsbGVsSW1hZ2VEZWNvZGVyOjpQYXJhbGxlbEltYWdlRGVj
b2RlcihQYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyKiBvYnNlcnZlciwgSW1hZ2VEZWNvZGVy
KiBkZWNvZGVyKQorICAgIDogbV9vYnNlcnZlcihvYnNlcnZlcikKKyAgICAsIG1faXNBbGxEYXRh
UmVjZWl2ZWQoZmFsc2UpCisgICAgLCBtX2J5dGVzT2ZEYXRhQ29uc3VtZWQoMCkKKyAgICAsIG1f
aW1hZ2VEZWNvZGVyKDApCit7CisgICAgaW5pdGlhbGl6ZShkZWNvZGVyKTsKK30KKworUGFyYWxs
ZWxJbWFnZURlY29kZXI6On5QYXJhbGxlbEltYWdlRGVjb2RlcigpCit7CisgICAgQVNTRVJUKCF2
YWxpZCgpKTsKK30KKwordm9pZCBQYXJhbGxlbEltYWdlRGVjb2Rlcjo6aW5pdGlhbGl6ZShJbWFn
ZURlY29kZXIqIGRlY29kZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBB
U1NFUlQoZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCkgJiYgIWRlY29kZXItPnNpemUoKS5pc0Vt
cHR5KCkpOworCisgICAgbV9zaXplID0gZGVjb2Rlci0+c2l6ZSgpOworICAgIG1fZmlsZW5hbWVF
eHRlbnNpb24gPSBkZWNvZGVyLT5maWxlbmFtZUV4dGVuc2lvbigpOworCisgICAgc2V0RGF0YShk
ZWNvZGVyLT5kYXRhKCksIGRlY29kZXItPmlzQWxsRGF0YVJlY2VpdmVkKCkpOworICAgIG1fYnl0
ZXNPZkRhdGFDb25zdW1lZCA9IDA7CisKKyAgICBtX2ltYWdlRnJhbWUuc2V0U2l6ZShtX3NpemUu
d2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKworICAgIG1faW1hZ2VEZWNvZGVyID0gZGVjb2Rl
cjsKKyAgICBtX2ltYWdlRGVjb2Rlci0+c2V0RGF0YSgwLCBmYWxzZSk7CisgICAgLy8gQWZ0ZXIg
dGhpcyBsaW5lLCBpdCBpcyBpbGxlZ2FsIGZvciB0aGUgbWFpbiB0aHJlYWQgdG8gYWNjZXNzIG1f
aW1hZ2VEZWNvZGVyLgorCisgICAgLy8gVGhpcyBtdXN0IGJlIHRoZSBsYXN0IGxpbmUgYmVjYXVz
ZSBJbWFnZURlY29kZVdvcmtlciBndWFyYW50ZWVzCisgICAgLy8gdGhlIHZpc2liaWxpdHkgb2Yg
bWVtYmVycyBpbiB0aGUgdGFzayB0aHJlYWQuCisgICAgbV9kZWNvZGVXb3JrZXIgPSBJbWFnZURl
Y29kZVdvcmtlcjo6YWNxdWlyZVNoYXJlZFdvcmtlcigpOworfQorCit2b2lkIFBhcmFsbGVsSW1h
Z2VEZWNvZGVyOjppbnZhbGlkYXRlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIEFTU0VSVChtX2ltYWdlRGVjb2Rlcik7CisKKyAgICBtX2RlY29kZVdvcmtlci5jbGVhcigp
OworICAgIC8vIFRoZSBtYWluIHRocmVhZCBjYW4gdXNlIG1faW1hZ2VEZWNvZGVyIGJlY2F1c2Ug
b3RoZXIgdGhyZWFkcyBkbyBub3QgYWNjZXNzIG1faW1hZ2VEZWNvZGVyIGFmdGVyIHRoaXMgbGlu
ZS4KKworICAgIGlmIChtX2RhdGFGb3JUYXNrLmdldCgpKSB7CisjaWZuZGVmIE5ERUJVRworI2lm
ICFFTkFCTEUoVEhSRUFESU5HX0xJQkRJU1BBVENIKQorICAgICAgICBtX2RhdGFGb3JUYXNrLT5z
ZXRNdXRleEZvclZlcmlmaWVyKG1fZGF0YUZvclRhc2tNdXRleCk7CisgICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX2RhdGFGb3JUYXNrTXV0ZXgpOworI2VuZGlmCisjZW5kaWYKKyAgICAgICAg
bV9pbWFnZURlY29kZXItPnNldERhdGEobV9kYXRhLmdldCgpLCBtX2lzQWxsRGF0YVJlY2VpdmVk
KTsKKyAgICAgICAgbV9kYXRhRm9yVGFzay5jbGVhcigpOworICAgIH0gZWxzZQorICAgICAgICBt
X2ltYWdlRGVjb2Rlci0+c2V0RGF0YShtX2RhdGEuZ2V0KCksIG1faXNBbGxEYXRhUmVjZWl2ZWQp
OworCisgICAgbV9zaXplID0gSW50U2l6ZSgpOworICAgIG1fZmlsZW5hbWVFeHRlbnNpb24gPSAi
IjsKKworICAgIG1faXNBbGxEYXRhUmVjZWl2ZWQgPSBmYWxzZTsKKyAgICBtX2RhdGEuY2xlYXIo
KTsKKyAgICBtX2J5dGVzT2ZEYXRhQ29uc3VtZWQgPSAwOworCisgICAgbV9pbWFnZUZyYW1lID0g
SW1hZ2VGcmFtZSgpOworCisgICAgbV9pbWFnZURlY29kZXIgPSAwOworfQorCit2b2lkIFBhcmFs
bGVsSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX2lzQWxsRGF0
YVJlY2VpdmVkID0gYWxsRGF0YVJlY2VpdmVkOworICAgIG1fZGF0YSA9IGRhdGE7Cit9CisKK3Zv
aWQgUGFyYWxsZWxJbWFnZURlY29kZXI6OmRlY29kZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBBU1NFUlQobV9pbWFnZURlY29kZXIpOworICAgIEFTU0VSVCghbV9zaXpl
LmlzRW1wdHkoKSk7CisKKyAgICBPd25QdHI8RW5jb2RlZERhdGFTZWdtZW50PiBzZWdtZW50ID0g
ZXh0cmFjdFNlZ21lbnRGb3JUYXNrKCk7CisgICAgaWYoIXNlZ21lbnQuZ2V0KCkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2RlY29kZVdvcmtlci0+cG9zdFRhc2soYmluZCgmUGFyYWxsZWxJbWFn
ZURlY29kZXI6OmRlY29kZVRhc2ssIHRoaXMsIHNlZ21lbnQucmVsZWFzZSgpKSk7Cit9CisKK1Bh
c3NPd25QdHI8UGFyYWxsZWxJbWFnZURlY29kZXI6OkVuY29kZWREYXRhU2VnbWVudD4gUGFyYWxs
ZWxJbWFnZURlY29kZXI6OmV4dHJhY3RTZWdtZW50Rm9yVGFzaygpCit7CisgICAgQVNTRVJUKG1f
Ynl0ZXNPZkRhdGFDb25zdW1lZCA+PSAwICYmIG1fYnl0ZXNPZkRhdGFDb25zdW1lZCA8PSBtX2Rh
dGEtPnNpemUoKSk7CisKKyAgICBpbnQgc2l6ZU9mU2VnbWVudCA9IG1fZGF0YS0+c2l6ZSgpIC0g
bV9ieXRlc09mRGF0YUNvbnN1bWVkOworICAgIGlmICghc2l6ZU9mU2VnbWVudCkKKyAgICAgICAg
cmV0dXJuIFBhc3NPd25QdHI8RW5jb2RlZERhdGFTZWdtZW50PigpOworCisgICAgT3duUHRyPEVu
Y29kZWREYXRhU2VnbWVudD4gc2VnbWVudChhZG9wdFB0cihuZXcgRW5jb2RlZERhdGFTZWdtZW50
KCkpKTsKKyAgICBjb25zdCBjaGFyKiBzcmNQdHIgPSBtX2RhdGEtPmRhdGEoKSArIG1fYnl0ZXNP
ZkRhdGFDb25zdW1lZDsKKyAgICBzZWdtZW50LT5tX3NlZ21lbnQuYXBwZW5kKHNyY1B0ciwgc2l6
ZU9mU2VnbWVudCk7CisgICAgbV9ieXRlc09mRGF0YUNvbnN1bWVkID0gbV9kYXRhLT5zaXplKCk7
CisKKyAgICBzZWdtZW50LT5tX2lzQWxsRGF0YVJlY2VpdmVkID0gbV9pc0FsbERhdGFSZWNlaXZl
ZDsKKworICAgIHJldHVybiBzZWdtZW50LnJlbGVhc2UoKTsKK30KKworc3RydWN0IFBhcmFsbGVs
RnJhbWVEYXRhIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYXJhbGxlbEZyYW1lRGF0YSk7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IFBhcmFsbGVs
RnJhbWVEYXRhKFBhc3NSZWZQdHI8UGFyYWxsZWxJbWFnZURlY29kZXI+IHBhcmFsbGVsRGVjb2Rl
cikKKyAgICAgICAgOiBtX3BhcmFsbGVsRGVjb2RlcihwYXJhbGxlbERlY29kZXIpCisgICAgICAg
ICwgbV9kZWNvZGVkU2VnbWVudCgpCisgICAgICAgICwgbV9zdGF0dXMoSW1hZ2VGcmFtZTo6RnJh
bWVFbXB0eSkKKyAgICAgICAgLCBtX2hhc0FscGhhKGZhbHNlKQorICAgICAgICAsIG1fcHJlbXVs
dGlwbHlBbHBoYSh0cnVlKQorICAgIHsKKyAgICB9CisKKyAgICB+UGFyYWxsZWxGcmFtZURhdGEo
KQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8UGFyYWxsZWxJbWFnZURlY29kZXI+IG1fcGFy
YWxsZWxEZWNvZGVyOworICAgIE93bkFycmF5UHRyPEltYWdlRnJhbWU6OlBpeGVsRGF0YT4gbV9k
ZWNvZGVkU2VnbWVudDsKKyAgICBJbWFnZUZyYW1lOjpGcmFtZVN0YXR1cyBtX3N0YXR1czsKKyAg
ICBib29sIG1faGFzQWxwaGE7CisgICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGE7CisgICAgSW50
UmVjdCBtX2RlY29kZWRSZWN0OworfTsKKwordm9pZCBQYXJhbGxlbEltYWdlRGVjb2Rlcjo6ZGVj
b2RlVGFzayhQYXNzT3duUHRyPFBhcmFsbGVsSW1hZ2VEZWNvZGVyOjpFbmNvZGVkRGF0YVNlZ21l
bnQ+IHBhc3NTZWdtZW50KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIEFT
U0VSVChtX2ltYWdlRGVjb2Rlcik7CisKKyAgICBPd25QdHI8RW5jb2RlZERhdGFTZWdtZW50PiBz
ZWdtZW50ID0gcGFzc1NlZ21lbnQ7CisKKyAgICAvLyAxLiBTZW5kIHNlZ21lbnQgZGF0YSB0byBJ
bWFnZURlY29kZXIuCisgICAgaWYgKCFtX2RhdGFGb3JUYXNrKSB7CisgICAgICAgIG1fZGF0YUZv
clRhc2sgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOworI2lmIEVOQUJMRShUSFJFQURJTkdfTElC
RElTUEFUQ0gpCisgICAgICAgIC8vIFdoZW4gdXNpbmcgbGliRGlzcGF0Y2gsIGRlY29kZVRhc2sg
Y2FuIHJ1biBvbiBkaWZmZXJlbnQgdGhyZWFkcyBpbiB0dXJuLgorICAgICAgICBtX2RhdGFGb3JU
YXNrLT50dXJuT2ZmVmVyaWZpZXIoKTsKKyNlbmRpZgorICAgIH0KKyAgICBtX2RhdGFGb3JUYXNr
LT5hcHBlbmQoc2VnbWVudC0+bV9zZWdtZW50KTsKKyAgICBtX2ltYWdlRGVjb2Rlci0+c2V0RGF0
YShtX2RhdGFGb3JUYXNrLmdldCgpLCBzZWdtZW50LT5tX2lzQWxsRGF0YVJlY2VpdmVkKTsKKwor
ICAgIEltYWdlRnJhbWUqIG9sZEJ1ZmZlciA9IG1faW1hZ2VEZWNvZGVyLT5maXJzdEltYWdlRnJh
bWVXaXRob3V0RGVjb2RlKCk7CisgICAgaW50IGxhc3REZWNvZGVkUm93ID0gb2xkQnVmZmVyID8g
b2xkQnVmZmVyLT5sYXN0RGVjb2RlZFJvdygpIDogMDsKKworICAgIC8vIDIuIERlY29kZSBhbiBp
bWFnZSBpbmNyZW1lbnRhbGx5LgorICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9IG1faW1hZ2VEZWNv
ZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5z
dGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB7CisgICAgICAgIEFTU0VSVCghc2Vn
bWVudC0+bV9pc0FsbERhdGFSZWNlaXZlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyAzLiBNYWtlIGEgUGFyYWxsZWxGcmFtZURhdGEgaW4gb3JkZXIgdG8gcGFzcyBpdCB0byB0
aGUgbWFpbiB0aHJlYWQuCisgICAgUGFyYWxsZWxGcmFtZURhdGEqIHBhcmFsbGVsRnJhbWVEYXRh
ID0gbmV3IFBhcmFsbGVsRnJhbWVEYXRhKHRoaXMpOworICAgIHBhcmFsbGVsRnJhbWVEYXRhLT5t
X3N0YXR1cyA9IGJ1ZmZlci0+c3RhdHVzKCk7CisgICAgcGFyYWxsZWxGcmFtZURhdGEtPm1faGFz
QWxwaGEgPSBidWZmZXItPmhhc0FscGhhKCk7CisgICAgcGFyYWxsZWxGcmFtZURhdGEtPm1fcHJl
bXVsdGlwbHlBbHBoYSA9IGJ1ZmZlci0+cHJlbXVsdGlwbHlBbHBoYSgpOworCisgICAgaW50IG5l
d0xhc3REZWNvZGVkUm93ID0gYnVmZmVyLT5sYXN0RGVjb2RlZFJvdygpOworICAgIC8vIE9ubHkg
aW4gQk1QLCBsYXN0RGVjb2RlZFJvdyBjYW4gYmUgYmlnZ2VyIHRoYW4gbmV3TGFzdERlY29kZWRS
b3cuCisgICAgaW50IGxhc3REZWNvZGVkTWluUm93ID0gc3RkOjptaW4obGFzdERlY29kZWRSb3cs
IG5ld0xhc3REZWNvZGVkUm93KTsKKyAgICBpbnQgbGFzdERlY29kZWRNYXhSb3cgPSBzdGQ6Om1h
eChsYXN0RGVjb2RlZFJvdywgbmV3TGFzdERlY29kZWRSb3cpOworICAgIHBhcmFsbGVsRnJhbWVE
YXRhLT5tX2RlY29kZWRSZWN0ID0gSW50UmVjdCgwLCBsYXN0RGVjb2RlZE1pblJvdywgbV9pbWFn
ZURlY29kZXItPnNpemUoKS53aWR0aCgpLCBsYXN0RGVjb2RlZE1heFJvdyAtIGxhc3REZWNvZGVk
TWluUm93ICsgMSk7CisKKyAgICAvLyA0LiBDcmVhdGUgZGVjb2RlZCBzZWdtZW50IGRhdGEgaW4g
b3JkZXIgdG8gcGFzcyBpdCB0byB0aGUgbWFpbiB0aHJlYWQuCisgICAgLy8gICAgSWYgdGhlIHN0
YXR1cyBpcyBGcmFtZUNvbXBsZXRlLCB0aGlzIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSBhIE5hdGl2
ZUltYWdlIHdpbGwgYmUgY3JlYXRlZCB1c2luZyB0aGUgZGVjb2RlciBvbiB0aGUgbWFpbiB0aHJl
YWQuCisgICAgaWYgKHBhcmFsbGVsRnJhbWVEYXRhLT5tX3N0YXR1cyA9PSBJbWFnZUZyYW1lOjpG
cmFtZVBhcnRpYWwpIHsKKyAgICAgICAgaW50IHNlZ21lbnRTaXplID0gcGFyYWxsZWxGcmFtZURh
dGEtPm1fZGVjb2RlZFJlY3Quc2l6ZSgpLmFyZWEoKTsKKyAgICAgICAgcGFyYWxsZWxGcmFtZURh
dGEtPm1fZGVjb2RlZFNlZ21lbnQgPSBhZG9wdEFycmF5UHRyKG5ldyBJbWFnZUZyYW1lOjpQaXhl
bERhdGFbc2VnbWVudFNpemVdKTsKKworICAgICAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIHNl
Z21lbnRBZGRyID0gcGFyYWxsZWxGcmFtZURhdGEtPm1fZGVjb2RlZFNlZ21lbnQuZ2V0KCk7Cisg
ICAgICAgIG1lbWNweShzZWdtZW50QWRkciwgYnVmZmVyLT5nZXRBZGRyKDAsIGxhc3REZWNvZGVk
TWluUm93KSwgc2VnbWVudFNpemUgKiBzaXplb2YoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKSk7Cisg
ICAgfSBlbHNlIHsgLy8gRnJhbWVDb21wbGV0ZQorICAgICAgICBtX2ltYWdlRGVjb2Rlci0+c2V0
RGF0YSgwLCBmYWxzZSk7CisgICAgICAgIG1fZGF0YUZvclRhc2suY2xlYXIoKTsKKyAgICB9CisK
KyAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoZGlkRGVjb2RlVGFza0NhbGxiYWNrLCBwYXJhbGxl
bEZyYW1lRGF0YSkpOworfQorCit2b2lkIGRpZERlY29kZVRhc2tDYWxsYmFjayhQYXJhbGxlbEZy
YW1lRGF0YSogcGFyYWxsZWxGcmFtZURhdGEpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICAvLyBJZiBhIGNsaWVudCBjYWxsZWQgUGFyYWxsZWxJbWFnZURlY29kZXI6OmNsZWFy
KCksIFBhcmFsbGVsSW1hZ2VEZWNvZGVyIGlzIGludmFsaWRhdGVkLgorICAgIGlmIChwYXJhbGxl
bEZyYW1lRGF0YS0+bV9wYXJhbGxlbERlY29kZXItPnZhbGlkKCkpCisgICAgICAgIHBhcmFsbGVs
RnJhbWVEYXRhLT5tX3BhcmFsbGVsRGVjb2Rlci0+ZGlkRGVjb2RlVGFzayhwYXJhbGxlbEZyYW1l
RGF0YSk7CisgICAgZGVsZXRlIHBhcmFsbGVsRnJhbWVEYXRhOworfQorCitJbWFnZUZyYW1lRGF0
YSBjcmVhdGVJbWFnZUZyYW1lRGF0YShQYXJhbGxlbEZyYW1lRGF0YSogcGFyYWxsZWxGcmFtZURh
dGEpCit7CisgICAgSW1hZ2VGcmFtZURhdGEgaW1hZ2VGcmFtZURhdGE7CisgICAgaW1hZ2VGcmFt
ZURhdGEubV9vcmllbnRhdGlvbiA9IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uOworICAgIGltYWdl
RnJhbWVEYXRhLm1faXNDb21wbGV0ZSA9IHBhcmFsbGVsRnJhbWVEYXRhLT5tX3N0YXR1cyA9PSBJ
bWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlOworICAgIGltYWdlRnJhbWVEYXRhLm1faGFzQWxwaGEg
PSAhaW1hZ2VGcmFtZURhdGEubV9pc0NvbXBsZXRlIHx8IHBhcmFsbGVsRnJhbWVEYXRhLT5tX2hh
c0FscGhhOworICAgIHJldHVybiBpbWFnZUZyYW1lRGF0YTsKK30KKwordm9pZCBQYXJhbGxlbElt
YWdlRGVjb2Rlcjo6ZGlkRGVjb2RlVGFzayhQYXJhbGxlbEZyYW1lRGF0YSogcGFyYWxsZWxGcmFt
ZURhdGEpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQocGFyYWxs
ZWxGcmFtZURhdGEtPm1fc3RhdHVzICE9IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpOworCisgICAg
SW1hZ2VGcmFtZURhdGEgaW1hZ2VGcmFtZURhdGEgPSBjcmVhdGVJbWFnZUZyYW1lRGF0YShwYXJh
bGxlbEZyYW1lRGF0YSk7CisKKyAgICBpZiAoIWltYWdlRnJhbWVEYXRhLm1faXNDb21wbGV0ZSkK
KyAgICAgICAgZGlkRGVjb2RlUGFydGlhbChpbWFnZUZyYW1lRGF0YSwgcGFyYWxsZWxGcmFtZURh
dGEpOworICAgIGVsc2UKKyAgICAgICAgZGlkRGVjb2RlQ29tcGxldGUoaW1hZ2VGcmFtZURhdGEp
OworfQorCit2b2lkIFBhcmFsbGVsSW1hZ2VEZWNvZGVyOjpkaWREZWNvZGVQYXJ0aWFsKEltYWdl
RnJhbWVEYXRhJiBpbWFnZUZyYW1lRGF0YSwgUGFyYWxsZWxGcmFtZURhdGEqIHBhcmFsbGVsRnJh
bWVEYXRhKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBhcHBlbmREZWNv
ZGVkRGF0YVRvSW1hZ2VGcmFtZShwYXJhbGxlbEZyYW1lRGF0YSk7CisgICAgc3luY0ltYWdlRnJh
bWUocGFyYWxsZWxGcmFtZURhdGEpOworCisgICAgaW1hZ2VGcmFtZURhdGEubV9mcmFtZSA9IG1f
aW1hZ2VGcmFtZS5hc05ld05hdGl2ZUltYWdlKCk7CisgICAgbV9vYnNlcnZlci0+ZGlkRGVjb2Rl
KGltYWdlRnJhbWVEYXRhKTsKK30KKwordm9pZCBQYXJhbGxlbEltYWdlRGVjb2Rlcjo6YXBwZW5k
RGVjb2RlZERhdGFUb0ltYWdlRnJhbWUoUGFyYWxsZWxGcmFtZURhdGEqIHBhcmFsbGVsRnJhbWVE
YXRhKQoreworICAgIGNvbnN0IEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY29uc3Qgc2VnbWVudEFk
ZHIgPSBwYXJhbGxlbEZyYW1lRGF0YS0+bV9kZWNvZGVkU2VnbWVudC5nZXQoKTsKKyAgICBpbnQg
c2VnbWVudFNpemUgPSBwYXJhbGxlbEZyYW1lRGF0YS0+bV9kZWNvZGVkUmVjdC5zaXplKCkuYXJl
YSgpOworICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogZGVzdEFkZHIgPSBtX2ltYWdlRnJhbWUu
Z2V0QWRkcigwLCBwYXJhbGxlbEZyYW1lRGF0YS0+bV9kZWNvZGVkUmVjdC55KCkpOworICAgIG1l
bWNweShkZXN0QWRkciwgc2VnbWVudEFkZHIsIHNlZ21lbnRTaXplICogc2l6ZW9mKEltYWdlRnJh
bWU6OlBpeGVsRGF0YSkpOworfQorCit2b2lkIFBhcmFsbGVsSW1hZ2VEZWNvZGVyOjpzeW5jSW1h
Z2VGcmFtZShQYXJhbGxlbEZyYW1lRGF0YSogcGFyYWxsZWxGcmFtZURhdGEpCit7CisgICAgLy8g
VGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSBhIHZhbGlkIG5hdGl2ZSBp
bWFnZSBpbiBJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKCkuCisgICAgbV9pbWFnZUZyYW1l
LnNldFN0YXR1cyhwYXJhbGxlbEZyYW1lRGF0YS0+bV9zdGF0dXMpOworICAgIG1faW1hZ2VGcmFt
ZS5zZXRIYXNBbHBoYShwYXJhbGxlbEZyYW1lRGF0YS0+bV9oYXNBbHBoYSk7CisgICAgbV9pbWFn
ZUZyYW1lLnNldFByZW11bHRpcGx5QWxwaGEocGFyYWxsZWxGcmFtZURhdGEtPm1fcHJlbXVsdGlw
bHlBbHBoYSk7Cit9CisKK3ZvaWQgUGFyYWxsZWxJbWFnZURlY29kZXI6OmRpZERlY29kZUNvbXBs
ZXRlKEltYWdlRnJhbWVEYXRhJiBpbWFnZUZyYW1lRGF0YSkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworCisgICAgbV9kZWNvZGVXb3JrZXIuY2xlYXIoKTsKKyAgICAvLyBUaGUgbWFp
biB0aHJlYWQgY2FuIHVzZSBtX2ltYWdlRGVjb2RlciBiZWNhdXNlIG90aGVyIHRocmVhZHMgZG8g
bm90IGFjY2VzcyBtX2ltYWdlRGVjb2RlciBhZnRlciB0aGlzIGxpbmUuCisKKyAgICBJbWFnZUZy
YW1lKiBidWZmZXIgPSBtX2ltYWdlRGVjb2Rlci0+Zmlyc3RJbWFnZUZyYW1lV2l0aG91dERlY29k
ZSgpOworICAgIEFTU0VSVChidWZmZXIpOworCisgICAgaW1hZ2VGcmFtZURhdGEubV9mcmFtZSA9
IGJ1ZmZlci0+YXNOZXdOYXRpdmVJbWFnZSgpOworICAgIG1fb2JzZXJ2ZXItPmRpZERlY29kZShp
bWFnZUZyYW1lRGF0YSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhcmFsbGVsSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjFiMDQ2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlci5oCkBAIC0wLDAgKzEsMTA4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhcmFsbGVsSW1hZ2VEZWNvZGVyX2gKKyNkZWZp
bmUgUGFyYWxsZWxJbWFnZURlY29kZXJfaAorCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisj
aW5jbHVkZSAiSW1hZ2VEZWNvZGVXb3JrZXIuaCIKKyNpbmNsdWRlICJQYXJhbGxlbEltYWdlRGVj
b2Rlck9ic2VydmVyLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
VGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIEltYWdlRnJhbWVEYXRhOworY2xhc3MgUGFyYWxsZWxGcmFt
ZURhdGE7CisKK2NsYXNzIFBhcmFsbGVsSW1hZ2VEZWNvZGVyIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPFBhcmFsbGVsSW1hZ2VEZWNvZGVyPiB7CitwdWJsaWM6CisgICAgUGFyYWxsZWxJ
bWFnZURlY29kZXIoUGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZlciosIEltYWdlRGVjb2Rlciop
OworICAgIH5QYXJhbGxlbEltYWdlRGVjb2RlcigpOworCisgICAgdm9pZCBpbnZhbGlkYXRlKCk7
CisKKyAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQp
OworCisgICAgdm9pZCBkZWNvZGUoKTsKKworICAgIGlubGluZSBTdHJpbmcgZmlsZW5hbWVFeHRl
bnNpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbGVuYW1lRXh0ZW5zaW9uOyB9CisgICAgaW5saW5l
IEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCitwcml2YXRlOgorICAg
IHZvaWQgaW5pdGlhbGl6ZShJbWFnZURlY29kZXIqKTsKKworICAgIGlubGluZSBib29sIHZhbGlk
KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZURlY29kZXI7IH0KKworICAgIHN0cnVjdCBFbmNvZGVk
RGF0YVNlZ21lbnQgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFbmNvZGVkRGF0YVNl
Z21lbnQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIEVu
Y29kZWREYXRhU2VnbWVudCgpIHsgfQorICAgICAgICBWZWN0b3I8Y2hhcj4gbV9zZWdtZW50Owor
ICAgICAgICBib29sIG1faXNBbGxEYXRhUmVjZWl2ZWQ7CisgICAgfTsKKworICAgIFBhc3NPd25Q
dHI8RW5jb2RlZERhdGFTZWdtZW50PiBleHRyYWN0U2VnbWVudEZvclRhc2soKTsKKworICAgIC8v
IE9ubHkgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSB0YXNrIHRocmVhZC4KKyAgICB2b2lk
IGRlY29kZVRhc2soUGFzc093blB0cjxFbmNvZGVkRGF0YVNlZ21lbnQ+KTsKKworICAgIHZvaWQg
ZGlkRGVjb2RlVGFzayhQYXJhbGxlbEZyYW1lRGF0YSopOworICAgIHZvaWQgZGlkRGVjb2RlUGFy
dGlhbChJbWFnZUZyYW1lRGF0YSYsIFBhcmFsbGVsRnJhbWVEYXRhKik7CisgICAgdm9pZCBhcHBl
bmREZWNvZGVkRGF0YVRvSW1hZ2VGcmFtZShQYXJhbGxlbEZyYW1lRGF0YSopOworICAgIHZvaWQg
c3luY0ltYWdlRnJhbWUoUGFyYWxsZWxGcmFtZURhdGEqKTsKKyAgICB2b2lkIGRpZERlY29kZUNv
bXBsZXRlKEltYWdlRnJhbWVEYXRhJik7CisgICAgZnJpZW5kIHZvaWQgZGlkRGVjb2RlVGFza0Nh
bGxiYWNrKFBhcmFsbGVsRnJhbWVEYXRhKik7CisKKyAgICBQYXJhbGxlbEltYWdlRGVjb2Rlck9i
c2VydmVyKiBtX29ic2VydmVyOworCisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgU3RyaW5nIG1f
ZmlsZW5hbWVFeHRlbnNpb247CisKKyAgICAvLyBGb3IgaW5wdXQgZGF0YQorICAgIGJvb2wgbV9p
c0FsbERhdGFSZWNlaXZlZDsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7CisgICAg
aW50IG1fYnl0ZXNPZkRhdGFDb25zdW1lZDsKKworICAgIC8vIEZvciBvdXRwdXQgZGF0YQorICAg
IEltYWdlRnJhbWUgbV9pbWFnZUZyYW1lOworCisgICAgLy8gVGhlIHRhc2sgdGhyZWFkIGNhbiBh
Y2Nlc3Mgb25seSBtX2RhdGFGb3JUYXNrIGFuZCBtX2ltYWdlRGVjb2Rlci4KKyAgICBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBtX2RhdGFGb3JUYXNrOworI2lmbmRlZiBOREVCVUcKKyNpZiAhRU5BQkxF
KFRIUkVBRElOR19MSUJESVNQQVRDSCkKKyAgICBNdXRleCBtX2RhdGFGb3JUYXNrTXV0ZXg7Cisj
ZW5kaWYKKyNlbmRpZgorCisgICAgSW1hZ2VEZWNvZGVyKiBtX2ltYWdlRGVjb2RlcjsKKworICAg
IFJlZlB0cjxJbWFnZURlY29kZVdvcmtlcj4gbV9kZWNvZGVXb3JrZXI7CisKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE3ZTE5NwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhcmFsbGVsSW1hZ2VEZWNv
ZGVyT2JzZXJ2ZXIuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IENvbXBhbnkgMTAwIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQ
YXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyX2gKKyNkZWZpbmUgUGFyYWxsZWxJbWFnZURlY29k
ZXJPYnNlcnZlcl9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VGcmFtZURh
dGE7CisKKy8vIEludGVyZmFjZSBmb3Igbm90aWZpY2F0aW9uIGFib3V0IGRlY29kaW5nIGNvbXBs
ZXRpb24gb2YgYW4gUGFyYWxsZWxJbWFnZURlY29kZXIuCitjbGFzcyBQYXJhbGxlbEltYWdlRGVj
b2Rlck9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRGVjb2RlKGNvbnN0
IEltYWdlRnJhbWVEYXRhJikgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+UGFyYWxs
ZWxJbWFnZURlY29kZXJPYnNlcnZlcigpIHsgfQorfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JldGFpbmVkTW9kZUJpdG1hcElt
YWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JldGFpbmVkTW9kZUJp
dG1hcEltYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWRlOWEx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmV0
YWluZWRNb2RlQml0bWFwSW1hZ2UuY3BwCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIENvbXBhbnkgMTAwIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJldGFpbmVkTW9kZUJpdG1hcEltYWdl
LmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5o
IgorI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNz
UmVmUHRyPFJldGFpbmVkTW9kZUJpdG1hcEltYWdlPiBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6
Y3JlYXRlKEJpdG1hcEltYWdlKiBiaXRtYXBJbWFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFJldGFpbmVkTW9kZUJpdG1hcEltYWdlKGJpdG1hcEltYWdlKSk7Cit9CisKK1JldGFpbmVk
TW9kZUJpdG1hcEltYWdlOjpSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZShCaXRtYXBJbWFnZSogYml0
bWFwSW1hZ2UpCisgICAgOiBtX2JpdG1hcEltYWdlKGJpdG1hcEltYWdlKQorICAgICwgbV9yZXRh
aW5lZE1vZGVDb3VudCgwKQoreworfQorCitib29sIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpo
YXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgUmV0YWluZWRNb2RlU2F2ZXIg
cmV0YWluZWRNb2RlU2F2ZXIodGhpcyk7CisgICAgcmV0dXJuIG1fYml0bWFwSW1hZ2UtPmhhc1Np
bmdsZVNlY3VyaXR5T3JpZ2luKCk7Cit9CisKK0ludFNpemUgUmV0YWluZWRNb2RlQml0bWFwSW1h
Z2U6OnNpemUoKSBjb25zdAoreworICAgIFJldGFpbmVkTW9kZVNhdmVyIHJldGFpbmVkTW9kZVNh
dmVyKHRoaXMpOworICAgIHJldHVybiBtX2JpdG1hcEltYWdlLT5zaXplKCk7Cit9CisKK2Jvb2wg
UmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OmdldEhvdFNwb3QoSW50UG9pbnQmIHBvaW50KSBjb25z
dAoreworICAgIFJldGFpbmVkTW9kZVNhdmVyIHJldGFpbmVkTW9kZVNhdmVyKHRoaXMpOworICAg
IHJldHVybiBtX2JpdG1hcEltYWdlLT5nZXRIb3RTcG90KHBvaW50KTsKK30KKworYm9vbCBSZXRh
aW5lZE1vZGVCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7
CisgICAgUmV0YWluZWRNb2RlU2F2ZXIgcmV0YWluZWRNb2RlU2F2ZXIodGhpcyk7CisgICAgcmV0
dXJuIG1fYml0bWFwSW1hZ2UtPmRhdGFDaGFuZ2VkKGFsbERhdGFSZWNlaXZlZCk7Cit9CisKK1N0
cmluZyBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAor
eworICAgIFJldGFpbmVkTW9kZVNhdmVyIHJldGFpbmVkTW9kZVNhdmVyKHRoaXMpOworICAgIHJl
dHVybiBtX2JpdG1hcEltYWdlLT5maWxlbmFtZUV4dGVuc2lvbigpOworfQorCit2b2lkIFJldGFp
bmVkTW9kZUJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxsKQor
eworICAgIFJldGFpbmVkTW9kZVNhdmVyIHJldGFpbmVkTW9kZVNhdmVyKHRoaXMpOworICAgIG1f
Yml0bWFwSW1hZ2UtPmRlc3Ryb3lEZWNvZGVkRGF0YShkZXN0cm95QWxsKTsKK30KKwordW5zaWdu
ZWQgUmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OmRlY29kZWRTaXplKCkgY29uc3QKK3sKKyAgICBS
ZXRhaW5lZE1vZGVTYXZlciByZXRhaW5lZE1vZGVTYXZlcih0aGlzKTsKKyAgICByZXR1cm4gbV9i
aXRtYXBJbWFnZS0+ZGVjb2RlZFNpemUoKTsKK30KKwordm9pZCBSZXRhaW5lZE1vZGVCaXRtYXBJ
bWFnZTo6c3RhcnRBbmltYXRpb24oYm9vbCBjYXRjaFVwSWZOZWNlc3NhcnkpCit7CisgICAgUmV0
YWluZWRNb2RlU2F2ZXIgcmV0YWluZWRNb2RlU2F2ZXIodGhpcyk7CisgICAgbV9iaXRtYXBJbWFn
ZS0+c3RhcnRBbmltYXRpb24oY2F0Y2hVcElmTmVjZXNzYXJ5KTsKK30KKwordm9pZCBSZXRhaW5l
ZE1vZGVCaXRtYXBJbWFnZTo6c3RvcEFuaW1hdGlvbigpCit7CisgICAgUmV0YWluZWRNb2RlU2F2
ZXIgcmV0YWluZWRNb2RlU2F2ZXIodGhpcyk7CisgICAgbV9iaXRtYXBJbWFnZS0+c3RvcEFuaW1h
dGlvbigpOworfQorCit2b2lkIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpyZXNldEFuaW1hdGlv
bigpCit7CisgICAgUmV0YWluZWRNb2RlU2F2ZXIgcmV0YWluZWRNb2RlU2F2ZXIodGhpcyk7Cisg
ICAgbV9iaXRtYXBJbWFnZS0+cmVzZXRBbmltYXRpb24oKTsKK30KKworTmF0aXZlSW1hZ2VQdHIg
UmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKK3sK
KyAgICBSZXRhaW5lZE1vZGVTYXZlciByZXRhaW5lZE1vZGVTYXZlcih0aGlzKTsKKyAgICByZXR1
cm4gbV9iaXRtYXBJbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKK30KKworYm9v
bCBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lSGFzQWxwaGEoKQoreworICAg
IFJldGFpbmVkTW9kZVNhdmVyIHJldGFpbmVkTW9kZVNhdmVyKHRoaXMpOworICAgIHJldHVybiBt
X2JpdG1hcEltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpOworfQorCitib29sIFJldGFpbmVk
TW9kZUJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVJc0NvbXBsZXRlKCkKK3sKKyAgICBSZXRhaW5l
ZE1vZGVTYXZlciByZXRhaW5lZE1vZGVTYXZlcih0aGlzKTsKKyAgICByZXR1cm4gbV9iaXRtYXBJ
bWFnZS0+Y3VycmVudEZyYW1lSXNDb21wbGV0ZSgpOworfQorCit2b2lkIFJldGFpbmVkTW9kZUJp
dG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sKKyAgICBSZXRhaW5lZE1vZGVTYXZlciBy
ZXRhaW5lZE1vZGVTYXZlcih0aGlzKTsKKyAgICBtX2JpdG1hcEltYWdlLT5kcmF3KGNvbnRleHQs
IGRzdFJlY3QsIHNyY1JlY3QsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOworfQorCitib29sIFJldGFp
bmVkTW9kZUJpdG1hcEltYWdlOjptYXlGaWxsV2l0aFNvbGlkQ29sb3IoKQoreworICAgIFJldGFp
bmVkTW9kZVNhdmVyIHJldGFpbmVkTW9kZVNhdmVyKHRoaXMpOworICAgIHJldHVybiBtX2JpdG1h
cEltYWdlLT5tYXlGaWxsV2l0aFNvbGlkQ29sb3IoKTsKK30KKworQ29sb3IgUmV0YWluZWRNb2Rl
Qml0bWFwSW1hZ2U6OnNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIFJldGFpbmVkTW9kZVNhdmVy
IHJldGFpbmVkTW9kZVNhdmVyKHRoaXMpOworICAgIHJldHVybiBtX2JpdG1hcEltYWdlLT5zb2xp
ZENvbG9yKCk7Cit9CisKK1JldGFpbmVkTW9kZVNhdmVyOjpSZXRhaW5lZE1vZGVTYXZlcihjb25z
dCBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZSogaW1hZ2UsIGJvb2wgcmV0YWluZWQpCisgICAgOiBt
X2ltYWdlKGltYWdlKQorICAgICwgbV9yZXRhaW5lZChyZXRhaW5lZCkKK3sKKyAgICBpZiAobV9y
ZXRhaW5lZCkKKyAgICAgICAgbV9pbWFnZS0+YmVnaW5SZXRhaW5lZE1vZGUoKTsKK30KKworUmV0
YWluZWRNb2RlU2F2ZXI6On5SZXRhaW5lZE1vZGVTYXZlcigpCit7CisgICAgaWYgKG1fcmV0YWlu
ZWQpCisgICAgICAgIG1faW1hZ2UtPmVuZFJldGFpbmVkTW9kZSgpOworfQorCitSZXRhaW5lZE1v
ZGVCaXRtYXBJbWFnZSogdG9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZShJbWFnZSogaW1hZ2UpCit7
CisgICAgQVNTRVJUKGltYWdlLT5pc0JpdG1hcEltYWdlKCkpOworCisgICAgQml0bWFwSW1hZ2Uq
IGJpdG1hcEltYWdlID0gc3RhdGljX2Nhc3Q8Qml0bWFwSW1hZ2UqPihpbWFnZSk7CisgICAgaWYg
KCFiaXRtYXBJbWFnZS0+bV9yZXRhaW5lZE1vZGVJbWFnZS5nZXQoKSkKKyAgICAgICAgYml0bWFw
SW1hZ2UtPm1fcmV0YWluZWRNb2RlSW1hZ2UgPSBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6Y3Jl
YXRlKGJpdG1hcEltYWdlKTsKKworICAgIHJldHVybiBiaXRtYXBJbWFnZS0+bV9yZXRhaW5lZE1v
ZGVJbWFnZS5nZXQoKTsKK30KKworSW1hZ2UqIHRvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2VJZlBv
c3NpYmxlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzQml0bWFw
SW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIHRvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UoaW1hZ2Up
OworICAgIHJldHVybiBpbWFnZTsKK30KKworYm9vbCBpc0RlY29kZWRDb21wbGV0ZWx5SWZCaXRt
YXBJbWFnZUFzV2VsbEFzSXNMb2FkZWQoU3R5bGVJbWFnZSogc3R5bGVJbWFnZSwgY29uc3QgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICBpZiAoc3R5bGVJbWFnZSAmJiAhc3R5bGVJbWFn
ZS0+aXNMb2FkZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHN0eWxlSW1h
Z2UgJiYgKHN0eWxlSW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSB8fCBzdHlsZUltYWdlLT5pc0NhY2hl
ZEltYWdlU2V0KCkpKSB7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBzdHlsZUltYWdl
LT5pbWFnZShjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KHJlbmRlcmVyKSwgSW50U2l6ZSgpKTsK
KyAgICAgICAgaWYgKGltYWdlLmdldCgpICYmIGltYWdlLT5pc0JpdG1hcEltYWdlKCkgJiYgIXRv
UmV0YWluZWRNb2RlQml0bWFwSW1hZ2UoaW1hZ2UuZ2V0KCkpLT5jdXJyZW50RnJhbWVJc0NvbXBs
ZXRlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9S
ZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4xNjMyNDY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaApAQCAtMCwwICsxLDEwNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgUmV0YWluZWRNb2RlQml0bWFwSW1hZ2VfaAorI2RlZmlu
ZSBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZV9oCisKKyNpbmNsdWRlICJJbWFnZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJpdG1hcEltYWdlOworY2xhc3MgUmVuZGVyT2JqZWN0
OworY2xhc3MgUmV0YWluZWRNb2RlU2F2ZXI7CitjbGFzcyBTdHlsZUltYWdlOworCitjbGFzcyBS
ZXRhaW5lZE1vZGVCaXRtYXBJbWFnZSA6IHB1YmxpYyBJbWFnZSB7CisgICAgZnJpZW5kIGNsYXNz
IFJldGFpbmVkTW9kZVNhdmVyOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJldGFp
bmVkTW9kZUJpdG1hcEltYWdlPiBjcmVhdGUoQml0bWFwSW1hZ2UqKTsKKworICAgIHZpcnR1YWwg
flJldGFpbmVkTW9kZUJpdG1hcEltYWdlKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzU2lu
Z2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdDsKKworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEhvdFNwb3QoSW50UG9pbnQmKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgYm9vbCBkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAg
dmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsKKworICAgIHZpcnR1YWwg
dm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxsID0gdHJ1ZSk7CisgICAgdmly
dHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHN0
YXJ0QW5pbWF0aW9uKGJvb2wgY2F0Y2hVcElmTmVjZXNzYXJ5ID0gdHJ1ZSk7CisgICAgdmlydHVh
bCB2b2lkIHN0b3BBbmltYXRpb24oKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXRBbmltYXRpb24o
KTsKKworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEoKTsKKworICAgIGJv
b2wgY3VycmVudEZyYW1lSXNDb21wbGV0ZSgpOworCisgICAgaW5saW5lIGJvb2wgcmV0YWluZWRN
b2RlUmVuZGVyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9yZXRhaW5lZE1vZGVDb3VudDsgfQorCitw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisKKyAgICB2aXJ0dWFsIGJvb2wg
bWF5RmlsbFdpdGhTb2xpZENvbG9yKCk7CisgICAgdmlydHVhbCBDb2xvciBzb2xpZENvbG9yKCkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUmV0YWluZWRNb2RlQml0bWFwSW1hZ2Uo
Qml0bWFwSW1hZ2UqKTsKKworICAgIGlubGluZSB2b2lkIGJlZ2luUmV0YWluZWRNb2RlKCkgY29u
c3QgeyBtX3JldGFpbmVkTW9kZUNvdW50Kys7IH0KKyAgICBpbmxpbmUgdm9pZCBlbmRSZXRhaW5l
ZE1vZGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgbV9yZXRhaW5lZE1vZGVDb3VudC0tOworICAg
ICAgICBBU1NFUlQobV9yZXRhaW5lZE1vZGVDb3VudCA+PSAwKTsKKyAgICB9CisKKyAgICBCaXRt
YXBJbWFnZSogbV9iaXRtYXBJbWFnZTsKKyAgICBtdXRhYmxlIGludCBtX3JldGFpbmVkTW9kZUNv
dW50OworfTsKKworY2xhc3MgUmV0YWluZWRNb2RlU2F2ZXIgeworcHVibGljOgorICAgIFJldGFp
bmVkTW9kZVNhdmVyKGNvbnN0IFJldGFpbmVkTW9kZUJpdG1hcEltYWdlKiwgYm9vbCByZXRhaW5l
ZCA9IHRydWUpOworICAgIH5SZXRhaW5lZE1vZGVTYXZlcigpOworCitwcml2YXRlOgorICAgIGNv
bnN0IFJldGFpbmVkTW9kZUJpdG1hcEltYWdlKiBtX2ltYWdlOworICAgIGJvb2wgbV9yZXRhaW5l
ZDsKK307CisKKworUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UqIHRvUmV0YWluZWRNb2RlQml0bWFw
SW1hZ2UoSW1hZ2UqKTsKK0ltYWdlKiB0b1JldGFpbmVkTW9kZUJpdG1hcEltYWdlSWZQb3NzaWJs
ZShJbWFnZSopOworYm9vbCBpc0RlY29kZWRDb21wbGV0ZWx5SWZCaXRtYXBJbWFnZUFzV2VsbEFz
SXNMb2FkZWQoU3R5bGVJbWFnZSosIGNvbnN0IFJlbmRlck9iamVjdCopOworCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0
bWFwSW1hZ2VDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9CaXRtYXBJbWFnZUNhaXJvLmNwcAppbmRleCBlOWZhNWJlLi5iM2JhMDBiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJv
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJ
bWFnZUNhaXJvLmNwcApAQCAtNDIsNiArNDIsNyBAQCBQYXNzUmVmUHRyPEJpdG1hcEltYWdlPiBC
aXRtYXBJbWFnZTo6Y3JlYXRlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKIAogQml0bWFwSW1h
Z2U6OkJpdG1hcEltYWdlKE5hdGl2ZUltYWdlQ2Fpcm8qIG5hdGl2ZUltYWdlLCBJbWFnZU9ic2Vy
dmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQorICAgICwgbV9zb3VyY2UodGhp
cykKICAgICAsIG1fY3VycmVudEZyYW1lKDApCiAgICAgLCBtX2ZyYW1lcygwKQogICAgICwgbV9m
cmFtZVRpbWVyKDApCkBAIC01Nyw2ICs1OCw3IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShO
YXRpdmVJbWFnZUNhaXJvKiBuYXRpdmVJbWFnZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAg
ICAgLCBtX2hhdmVTaXplKHRydWUpCiAgICAgLCBtX3NpemVBdmFpbGFibGUodHJ1ZSkKICAgICAs
IG1faGF2ZUZyYW1lQ291bnQodHJ1ZSkKKyAgICAsIG1faXNDYWNoaW5nRnJhbWUoZmFsc2UpCiB7
CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gbmF0aXZlSW1hZ2UtPnN1cmZhY2UoKTsK
ICAgICBpbnQgd2lkdGggPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKTsK
QEAgLTY3LDcgKzY5LDYgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKE5hdGl2ZUltYWdlQ2Fp
cm8qIG5hdGl2ZUltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICBtX2ZyYW1lcy5n
cm93KDEpOwogICAgIG1fZnJhbWVzWzBdLm1fZnJhbWUgPSBuYXRpdmVJbWFnZTsKICAgICBtX2Zy
YW1lc1swXS5tX2hhc0FscGhhID0gY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSAh
PSBDQUlST19DT05URU5UX0NPTE9SOwotICAgIG1fZnJhbWVzWzBdLm1faGF2ZU1ldGFkYXRhID0g
dHJ1ZTsKICAgICBjaGVja0ZvclNvbGlkQ29sb3IoKTsKIH0KIApAQCAtMTMyLDExICsxMzMsOCBA
QCB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQogICAgIG1faXNTb2xpZENv
bG9yID0gdHJ1ZTsKIH0KIAotYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0
YSkKK2Jvb2wgRnJhbWVEYXRhOjpjbGVhckZyYW1lKCkKIHsKLSAgICBpZiAoY2xlYXJNZXRhZGF0
YSkKLSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQogICAgIGlmIChtX2ZyYW1lKSB7
CiAgICAgICAgIGRlbGV0ZSBtX2ZyYW1lOwogICAgICAgICBtX2ZyYW1lID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dDNEQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0M0RDYWlyby5jcHAKaW5kZXggNmJiODVjMy4uZDU0NmRmOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
M0RDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKQEAgLTE1Nyw5ICsxNTcsMTIgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwgdW5zaWduZWQgaW50IGZv
cm1hdCwgdW5zaWduZWQKICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1cmZhY2U7
CiAgICAgaWYgKGltYWdlLT5kYXRhKCkpIHsKICAgICAgICAgZGVjb2Rlci5zZXREYXRhKGltYWdl
LT5kYXRhKCksIHRydWUpOwotICAgICAgICBpZiAoIWRlY29kZXIuZnJhbWVDb3VudCgpIHx8ICFk
ZWNvZGVyLmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoMCkpCisgICAgICAgIGlmICghZGVjb2Rlci5m
cmFtZUNvdW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIE93blB0cjxO
YXRpdmVJbWFnZUNhaXJvPiBuYXRpdmVJbWFnZSA9IGFkb3B0UHRyKGRlY29kZXIuY3JlYXRlRnJh
bWVBdEluZGV4KDApKTsKKyAgICAgICAgSW1hZ2VGcmFtZURhdGEgaW1hZ2VJbWFnZUZyYW1lRGF0
YSA9IGRlY29kZXIucmVxdWVzdEZyYW1lQXRJbmRleCgwKTsKKyAgICAgICAgaWYgKCFpbWFnZUlt
YWdlRnJhbWVEYXRhLm1faXNDb21wbGV0ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgT3duUHRyPE5hdGl2ZUltYWdlQ2Fpcm8+IG5hdGl2ZUltYWdlID0gYWRvcHRQdHIoaW1h
Z2VJbWFnZUZyYW1lRGF0YS5tX2ZyYW1lKTsKICAgICAgICAgaW1hZ2VTdXJmYWNlID0gbmF0aXZl
SW1hZ2UtPnN1cmZhY2UoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpbWFnZVN1cmZhY2UgPSBp
bWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKS0+c3VyZmFjZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHQzRENHLmNwcAppbmRleCA1MGRlNTFmLi4zODdmMWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNw
cApAQCAtMTA3LDcgKzEwNyw4IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0
YShJbWFnZSogaW1hZ2UsCiAgICAgICAgIGRlY29kZXIuc2V0RGF0YShpbWFnZS0+ZGF0YSgpLCB0
cnVlKTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgZGVjb2RlZEltYWdlLmFkb3B0Q0YoZGVjb2Rlci5jcmVhdGVG
cmFtZUF0SW5kZXgoMCkpOworICAgICAgICBJbWFnZUZyYW1lRGF0YSBpbWFnZUZyYW1lRGF0YSA9
IGRlY29kZXIucmVxdWVzdEZyYW1lQXRJbmRleCgwKTsKKyAgICAgICAgZGVjb2RlZEltYWdlLmFk
b3B0Q0YoaW1hZ2VGcmFtZURhdGEubV9mcmFtZSk7CiAgICAgICAgIGNnSW1hZ2UgPSBkZWNvZGVk
SW1hZ2UuZ2V0KCk7CiAgICAgfSBlbHNlCiAgICAgICAgIGNnSW1hZ2UgPSBpbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VDRy5jcHAKaW5kZXggZmVkOTExYS4uNjVkMmU5NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAKQEAgLTQ5LDEzICs0
OSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJv
b2wgY2xlYXJNZXRhZGF0YSkKK2Jvb2wgRnJhbWVEYXRhOjpjbGVhckZyYW1lKCkKIHsKLSAgICBp
ZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAg
IG1fb3JpZW50YXRpb24gPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKLQogICAgIGlmIChtX2Zy
YW1lKSB7CiAgICAgICAgIENHSW1hZ2VSZWxlYXNlKG1fZnJhbWUpOwogICAgICAgICBtX2ZyYW1l
ID0gMDsKQEAgLTcwLDYgKzY1LDcgQEAgYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJN
ZXRhZGF0YSkKIAogQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKENHSW1hZ2VSZWYgY2dJbWFnZSwg
SW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShvYnNlcnZlcikKKyAgICAsIG1f
c291cmNlKHRoaXMpCiAgICAgLCBtX2N1cnJlbnRGcmFtZSgwKQogICAgICwgbV9mcmFtZXMoMCkK
ICAgICAsIG1fZnJhbWVUaW1lcigwKQpAQCAtODUsNiArODEsNyBAQCBCaXRtYXBJbWFnZTo6Qml0
bWFwSW1hZ2UoQ0dJbWFnZVJlZiBjZ0ltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAg
ICAsIG1faGF2ZVNpemUodHJ1ZSkKICAgICAsIG1fc2l6ZUF2YWlsYWJsZSh0cnVlKQogICAgICwg
bV9oYXZlRnJhbWVDb3VudCh0cnVlKQorICAgICwgbV9pc0NhY2hpbmdGcmFtZShmYWxzZSkKIHsK
ICAgICBDR0Zsb2F0IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpOwogICAgIENHRmxv
YXQgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKTsKQEAgLTk4LDcgKzk1LDYgQEAg
Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKENHSW1hZ2VSZWYgY2dJbWFnZSwgSW1hZ2VPYnNlcnZl
ciogb2JzZXJ2ZXIpCiAgICAgbV9mcmFtZXMuZ3JvdygxKTsKICAgICBtX2ZyYW1lc1swXS5tX2Zy
YW1lID0gY2dJbWFnZTsKICAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gdHJ1ZTsKLSAgICBt
X2ZyYW1lc1swXS5tX2hhdmVNZXRhZGF0YSA9IHRydWU7CiAKICAgICBjaGVja0ZvclNvbGlkQ29s
b3IoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlU291cmNlQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VTb3VyY2VDRy5jcHAKaW5kZXggNDMzNTM2NS4uMjRkNzAyMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKQEAg
LTMwLDcgKzMwLDkgQEAKICNpbmNsdWRlICJJbWFnZVNvdXJjZUNHLmgiCiAKICNpbmNsdWRlICJJ
bWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2VPYnNlcnZlci5oIgogI2lu
Y2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCkBAIC03MiwxMiArNzQsMjEgQEAgdm9pZCBzaGFyZWRCdWZmZXJSZWxlYXNlKHZvaWQq
IGluZm8pCiAKIEltYWdlU291cmNlOjpJbWFnZVNvdXJjZShJbWFnZVNvdXJjZTo6QWxwaGFPcHRp
b24gYWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBn
YW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKICAgICA6IG1fZGVjb2RlcigwKQorICAgICwgbV9v
YnNlcnZlcigwKQogICAgIC8vIEZJWE1FOiBtX3ByZW11bHRpcGx5QWxwaGEgaXMgaWdub3JlZCBp
biBjZyBhdCB0aGUgbW9tZW50LgogICAgICwgbV9hbHBoYU9wdGlvbihhbHBoYU9wdGlvbikKICAg
ICAsIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24oZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRp
b24pCiB7CiB9CiAKK0ltYWdlU291cmNlOjpJbWFnZVNvdXJjZShJbWFnZVNvdXJjZU9ic2VydmVy
KiBvYnNlcnZlciwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNv
dXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRp
b24pCisgICAgOiBtX2RlY29kZXIoMCkKKyAgICAsIG1fb2JzZXJ2ZXIob2JzZXJ2ZXIpCisgICAg
LCBtX2FscGhhT3B0aW9uKGFscGhhT3B0aW9uKQorICAgICwgbV9nYW1tYUFuZENvbG9yUHJvZmls
ZU9wdGlvbihnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKK3sKK30KKwogSW1hZ2VTb3VyY2U6
On5JbWFnZVNvdXJjZSgpCiB7CiAgICAgY2xlYXIodHJ1ZSk7CkBAIC0yOTksMjQgKzMxMCw0MiBA
QCBzaXplX3QgSW1hZ2VTb3VyY2U6OmZyYW1lQ291bnQoKSBjb25zdAogICAgIHJldHVybiBtX2Rl
Y29kZXIgPyBDR0ltYWdlU291cmNlR2V0Q291bnQobV9kZWNvZGVyKSA6IDA7CiB9CiAKLUNHSW1h
Z2VSZWYgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCitJbWFn
ZUZyYW1lRGF0YSBJbWFnZVNvdXJjZTo6cmVxdWVzdEZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgs
IGJvb2wpCit7CisgICAgQVNTRVJUKG1fb2JzZXJ2ZXIpOworICAgIEltYWdlRnJhbWVEYXRhIGlt
YWdlRnJhbWVEYXRhID0gY3JlYXRlRnJhbWVBdEluZGV4KGluZGV4KTsKKyAgICBtX29ic2VydmVy
LT5kaWRSZWNlaXZlRnJhbWVBdEluZGV4KGluZGV4LCBpbWFnZUZyYW1lRGF0YSk7CisgICAgcmV0
dXJuIGltYWdlRnJhbWVEYXRhOworfQorCitJbWFnZUZyYW1lRGF0YSBJbWFnZVNvdXJjZTo6Y3Jl
YXRlRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoIWluaXRpYWxpemVkKCkp
Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gSW1hZ2VGcmFtZURhdGEoKTsKKwor
ICAgIEltYWdlRnJhbWVEYXRhIGltYWdlRnJhbWVEYXRhOwogCiAgICAgUmV0YWluUHRyPENHSW1h
Z2VSZWY+IGltYWdlKEFkb3B0Q0YsIENHSW1hZ2VTb3VyY2VDcmVhdGVJbWFnZUF0SW5kZXgobV9k
ZWNvZGVyLCBpbmRleCwgaW1hZ2VTb3VyY2VPcHRpb25zKFNraXBNZXRhZGF0YSkpKTsKICAgICBD
RlN0cmluZ1JlZiBpbWFnZVVUSSA9IENHSW1hZ2VTb3VyY2VHZXRUeXBlKG1fZGVjb2Rlcik7CiAg
ICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIHhibVVUSSA9IENGU1RSKCJwdWJsaWMueGJpdG1h
cC1pbWFnZSIpOwogICAgIGlmICghaW1hZ2VVVEkgfHwgIUNGRXF1YWwoaW1hZ2VVVEksIHhibVVU
SSkpCi0gICAgICAgIHJldHVybiBpbWFnZS5sZWFrUmVmKCk7CisgICAgICAgIGltYWdlRnJhbWVE
YXRhLm1fZnJhbWUgPSBpbWFnZS5sZWFrUmVmKCk7CiAgICAgCiAgICAgLy8gSWYgaXQgaXMgYW4g
eGJtIGltYWdlLCBtYXNrIG91dCBhbGwgdGhlIHdoaXRlIGFyZWFzIHRvIHJlbmRlciB0aGVtIHRy
YW5zcGFyZW50LgogICAgIGNvbnN0IENHRmxvYXQgbWFza2luZ0NvbG9yc1s2XSA9IHsyNTUsIDI1
NSwgIDI1NSwgMjU1LCAyNTUsIDI1NX07CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1hc2tl
ZEltYWdlKEFkb3B0Q0YsIENHSW1hZ2VDcmVhdGVXaXRoTWFza2luZ0NvbG9ycyhpbWFnZS5nZXQo
KSwgbWFza2luZ0NvbG9ycykpOwogICAgIGlmICghbWFza2VkSW1hZ2UpCi0gICAgICAgIHJldHVy
biBpbWFnZS5sZWFrUmVmKCk7CisgICAgICAgIGltYWdlRnJhbWVEYXRhLm1fZnJhbWUgPSBpbWFn
ZS5sZWFrUmVmKCk7CisKKyAgICBpbWFnZUZyYW1lRGF0YS5tX2ZyYW1lID0gbWFza2VkSW1hZ2Uu
bGVha1JlZigpOworCisgICAgaW1hZ2VGcmFtZURhdGEubV9vcmllbnRhdGlvbiA9IG9yaWVudGF0
aW9uQXRJbmRleChpbmRleCk7CisgICAgaW1hZ2VGcmFtZURhdGEubV9pc0NvbXBsZXRlID0gZnJh
bWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCk7CisgICAgaWYgKHJlcGV0aXRpb25Db3VudCgpICE9
IGNBbmltYXRpb25Ob25lKQorICAgICAgICBpbWFnZUZyYW1lRGF0YS5tX2R1cmF0aW9uID0gZnJh
bWVEdXJhdGlvbkF0SW5kZXgoaW5kZXgpOworICAgIGltYWdlRnJhbWVEYXRhLm1faGFzQWxwaGEg
PSBmcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CiAKLSAgICByZXR1cm4gbWFza2VkSW1hZ2Uu
bGVha1JlZigpOworICAgIHJldHVybiBpbWFnZUZyYW1lRGF0YTsKIH0KIAogYm9vbCBJbWFnZVNv
dXJjZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvSW1hZ2VPcGVuVkcuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0ltYWdlT3BlblZHLmNwcApp
bmRleCA5NTEwODgyLi45MDAwZmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVudmcvSW1hZ2VPcGVuVkcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW52Zy9JbWFnZU9wZW5WRy5jcHAKQEAgLTM3LDExICszNyw4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xl
YXJNZXRhZGF0YSkKK2Jvb2wgRnJhbWVEYXRhOjpjbGVhckZyYW1lKCkKIHsKLSAgICBpZiAoY2xl
YXJNZXRhZGF0YSkKLSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQogICAgIGlmICht
X2ZyYW1lKSB7CiAgICAgICAgIGRlbGV0ZSBtX2ZyYW1lOwogICAgICAgICBtX2ZyYW1lID0gMDsK
QEAgLTUyLDYgKzQ5LDcgQEAgYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0
YSkKIAogQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKFRpbGVkSW1hZ2VPcGVuVkcqIHRpbGVkSW1h
Z2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCisgICAg
LCBtX3NvdXJjZSh0aGlzKQogICAgICwgbV9zaXplKHRpbGVkSW1hZ2UtPnNpemUoKSkKICAgICAs
IG1fY3VycmVudEZyYW1lKDApCiAgICAgLCBtX2ZyYW1lcygxKQpAQCAtNjksNiArNjcsNyBAQCBC
aXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoVGlsZWRJbWFnZU9wZW5WRyogdGlsZWRJbWFnZSwgSW1h
Z2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgLCBtX3NpemVBdmFpbGFibGUodHJ1ZSkKICAgICAs
IG1faGFzVW5pZm9ybUZyYW1lU2l6ZSh0cnVlKQogICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVl
KQorICAgICwgbV9pc0NhY2hpbmdGcmFtZShmYWxzZSkKIHsKICAgICBBU1NFUlQobV9zaXplLndp
ZHRoKCkgPiAwKTsKICAgICBBU1NFUlQobV9zaXplLmhlaWdodCgpID4gMCk7CkBAIC03OCw3ICs3
Nyw2IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShUaWxlZEltYWdlT3BlblZHKiB0aWxlZElt
YWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICBtX2ZyYW1lc1swXS5tX2ZyYW1lID0g
dGlsZWRJbWFnZTsKICAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gdHJ1ZTsKICAgICBtX2Zy
YW1lc1swXS5tX2lzQ29tcGxldGUgPSB0cnVlOwotICAgIG1fZnJhbWVzWzBdLm1faGF2ZU1ldGFk
YXRhID0gdHJ1ZTsKICAgICBjaGVja0ZvclNvbGlkQ29sb3IoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcAppbmRleCBlMDk4ZTA5Li5j
YWY2NjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9J
bWFnZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFn
ZVF0LmNwcApAQCAtOTcsMTEgKzk3LDggQEAgc3RhdGljIFFQaXhtYXAgbG9hZFJlc291cmNlUGl4
bWFwKGNvbnN0IGNoYXIgKm5hbWUpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBGcmFt
ZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKK2Jvb2wgRnJhbWVEYXRhOjpjbGVhckZy
YW1lKCkKIHsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAgbV9oYXZlTWV0YWRhdGEg
PSBmYWxzZTsKLQogICAgIGlmIChtX2ZyYW1lKSB7CiAgICAgICAgIGRlbGV0ZSBtX2ZyYW1lOwog
ICAgICAgICBtX2ZyYW1lID0gMDsKQEAgLTE5Niw2ICsxOTMsNyBAQCB2b2lkIEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0CiAKIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShRUGl4bWFwKiBwaXhtYXAsIEltYWdl
T2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCisgICAgLCBtX3NvdXJj
ZSh0aGlzKQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKICAgICAsIG1fZnJhbWVzKDApCiAgICAg
LCBtX2ZyYW1lVGltZXIoMCkKQEAgLTIxMSw2ICsyMDksNyBAQCBCaXRtYXBJbWFnZTo6Qml0bWFw
SW1hZ2UoUVBpeG1hcCogcGl4bWFwLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICAsIG1f
aGF2ZVNpemUodHJ1ZSkKICAgICAsIG1fc2l6ZUF2YWlsYWJsZSh0cnVlKQogICAgICwgbV9oYXZl
RnJhbWVDb3VudCh0cnVlKQorICAgICwgbV9pc0NhY2hpbmdGcmFtZShmYWxzZSkKIHsKICAgICBp
bnQgd2lkdGggPSBwaXhtYXAtPndpZHRoKCk7CiAgICAgaW50IGhlaWdodCA9IHBpeG1hcC0+aGVp
Z2h0KCk7CkBAIC0yMjAsNyArMjE5LDcgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKFFQaXht
YXAqIHBpeG1hcCwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgbV9mcmFtZXMuZ3Jvdygx
KTsKICAgICBtX2ZyYW1lc1swXS5tX2ZyYW1lID0gcGl4bWFwOwogICAgIG1fZnJhbWVzWzBdLm1f
aGFzQWxwaGEgPSBwaXhtYXAtPmhhc0FscGhhKCk7Ci0gICAgbV9mcmFtZXNbMF0ubV9oYXZlTWV0
YWRhdGEgPSB0cnVlOworICAgIG1fZnJhbWVzWzBdLm1faXNDb21wbGV0ZSA9IHRydWU7CiAgICAg
Y2hlY2tGb3JTb2xpZENvbG9yKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcApp
bmRleCAxN2FkODNkLi4xZjA0NTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwCkBA
IC02MCwxMCArNjAsMTMgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKElt
YWdlKiBpbWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVHYW1tYUFuZENv
bG9yUHJvZmlsZSA/IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUlnbm9yZWQgOiBJ
bWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKTsKICAgICAgICAgLy8gQXR0
ZW1wdCB0byBnZXQgcmF3IHVucHJlbXVsdGlwbGllZCBpbWFnZSBkYXRhIAogICAgICAgICBkZWNv
ZGVyLnNldERhdGEoaW1hZ2UtPmRhdGEoKSwgdHJ1ZSk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5m
cmFtZUNvdW50KCkgfHwgIWRlY29kZXIuZnJhbWVJc0NvbXBsZXRlQXRJbmRleCgwKSkKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaGFzQWxwaGEgPSBkZWNvZGVyLmZyYW1lSGFzQWxwaGFBdEluZGV4KDApOwotICAg
ICAgICBwaXhlbHMgPSBhZG9wdFB0cihkZWNvZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgwKSk7Cisg
ICAgICAgIEltYWdlRnJhbWVEYXRhIGltYWdlRnJhbWVEYXRhID0gZGVjb2Rlci5yZXF1ZXN0RnJh
bWVBdEluZGV4KDApOworICAgICAgICBpZiAoIWltYWdlRnJhbWVEYXRhLm1faXNDb21wbGV0ZSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaGFzQWxwaGEgPSBpbWFnZUZyYW1l
RGF0YS5tX2hhc0FscGhhOworICAgICAgICBwaXhlbHMgPSBhZG9wdFB0cihpbWFnZUZyYW1lRGF0
YS5tX2ZyYW1lKTsKICAgICAgICAgaWYgKCFwaXhlbHMuZ2V0KCkgfHwgIXBpeGVscy0+aXNEYXRh
Q29tcGxldGUoKSB8fCAhcGl4ZWxzLT5iaXRtYXAoKS53aWR0aCgpIHx8ICFwaXhlbHMtPmJpdG1h
cCgpLmhlaWdodCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBTa0JpdG1h
cDo6Q29uZmlnIHNraWFDb25maWcgPSBwaXhlbHMtPmJpdG1hcCgpLmNvbmZpZygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCmlu
ZGV4IDZhNGJjYjAuLjA0ZGRjMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKQEAgLTMxOCwxMSArMzE4LDggQEAgRmxvYXRS
ZWN0IG5vcm1hbGl6ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIHJldHVybiBub3Jt
OwogfQogCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQorYm9vbCBG
cmFtZURhdGE6OmNsZWFyRnJhbWUoKQogewotICAgIGlmIChjbGVhck1ldGFkYXRhKQotICAgICAg
ICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCiAgICAgaWYgKG1fZnJhbWUpIHsKICAgICAgICAg
Ly8gSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCgpIGFsbG9jYXRlZCB8bV9mcmFtZXwg
YW5kIHBhc3NlZAogICAgICAgICAvLyBvd25lcnNoaXAgdG8gQml0bWFwSW1hZ2U7IHdlIG11c3Qg
ZGVsZXRlIGl0IGhlcmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9JbWFnZVdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL0ltYWdlV2luQ0UuY3BwCmluZGV4IDIzZDNiM2EuLjRlNzM2MWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlV2luQ0UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlV2luQ0Uu
Y3BwCkBAIC00NiwxMSArNDYsOCBAQCBOYXRpdmVJbWFnZVB0ciBJbWFnZUZyYW1lOjphc05ld05h
dGl2ZUltYWdlKCkgY29uc3QKICAgICByZXR1cm4gU2hhcmVkQml0bWFwOjpjcmVhdGUobV9iYWNr
aW5nU3RvcmUsIG1fc2l6ZSwgaGFzQWxwaGEoKSk7CiB9CiAKLWJvb2wgRnJhbWVEYXRhOjpjbGVh
cihib29sIGNsZWFyTWV0YURhdGEpCitib29sIEZyYW1lRGF0YTo6Y2xlYXJGcmFtZSgpCiB7Ci0g
ICAgaWYgKGNsZWFyTWV0YURhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7Ci0K
ICAgICBpZiAobV9mcmFtZSkgewogICAgICAgICBtX2ZyYW1lID0gMDsKICAgICAgICAgcmV0dXJu
IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9J
bWFnZVd4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlV3gu
Y3BwCmluZGV4IDU0YmJkYmIuLjU2OWRjNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlV3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3d4L0ltYWdlV3guY3BwCkBAIC01MiwxMSArNTIsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAvLyB0aGlzIGlzIGluIEdyYXBoaWNzQ29udGV4dFd4LmNwcAogaW50IGdldFd4
Q29tcG9zaXRpbmdPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgaGFzQWxwaGEp
OwogCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQorYm9vbCBGcmFt
ZURhdGE6OmNsZWFyRnJhbWUoKQogewotICAgIGlmIChjbGVhck1ldGFkYXRhKQotICAgICAgICBt
X2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCiAgICAgaWYgKG1fZnJhbWUpIHsKICAgICAgICAgZGVs
ZXRlIG1fZnJhbWU7CiAgICAgICAgIG1fZnJhbWUgPSAwOwpAQCAtODIsNiArNzksNyBAQCBQYXNz
UmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciAqbmFt
ZSkKIAogQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKGNvbnN0IHd4Qml0bWFwJiBiaXRtYXApCiAg
ICAgOiBJbWFnZSgwKQorICAgICwgbV9zb3VyY2UodGhpcykKICAgICAsIG1fY3VycmVudEZyYW1l
KDApCiAgICAgLCBtX2ZyYW1lcygwKQogICAgICwgbV9mcmFtZVRpbWVyKDApCkBAIC05Nyw2ICs5
NSw3IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShjb25zdCB3eEJpdG1hcCYgYml0bWFwKQog
ICAgICwgbV9kZWNvZGVkU2l6ZSgwKQogICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQogICAg
ICwgbV9mcmFtZUNvdW50KDEpCisgICAgLCBtX2lzQ2FjaGluZ0ZyYW1lKGZhbHNlKQogewogICAg
IG1fZGVjb2RlZFNpemUgPSBiaXRtYXAuR2V0V2lkdGgoKSAqIGJpdG1hcC5HZXRIZWlnaHQoKSAq
IDQ7CiAgICAgbV9zaXplID0gSW50U2l6ZShiaXRtYXAuR2V0V2lkdGgoKSwgYml0bWFwLkdldEhl
aWdodCgpKTsKQEAgLTExMyw3ICsxMTIsNiBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoY29u
c3Qgd3hCaXRtYXAmIGJpdG1hcCkKICAgICAKICAgICAgICAgbV9mcmFtZXMuZ3JvdygxKTsKICAg
ICAgICAgbV9mcmFtZXNbMF0ubV9mcmFtZSA9IGdibXA7Ci0gICAgICAgIG1fZnJhbWVzWzBdLm1f
aGF2ZU1ldGFkYXRhID0gdHJ1ZTsKICAgICAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7CiAgICAg
fQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
SW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggNzJiNWRkYy4uOTA0Zjg2NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3Bw
CkBAIC0xNDAsNiArMTQwLDcgQEAgSW1hZ2VEZWNvZGVyKiBJbWFnZURlY29kZXI6OmNyZWF0ZShj
b25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU8KIAogSW1hZ2VGcmFt
ZTo6SW1hZ2VGcmFtZSgpCiAgICAgOiBtX2hhc0FscGhhKGZhbHNlKQorICAgICwgbV9sYXN0RGVj
b2RlZFJvdygwKQogICAgICwgbV9zdGF0dXMoRnJhbWVFbXB0eSkKICAgICAsIG1fZHVyYXRpb24o
MCkKICAgICAsIG1fZGlzcG9zYWxNZXRob2QoRGlzcG9zZU5vdFNwZWNpZmllZCkKQEAgLTE2NSw2
ICsxNjYsNyBAQCB2b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkKIHsKICAgICBtX2Jh
Y2tpbmdTdG9yZS5jbGVhcigpOwogICAgIG1fYnl0ZXMgPSAwOworICAgIG1fbGFzdERlY29kZWRS
b3cgPSAwOwogICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKICAgICAvLyBOT1RFOiBEbyBub3Qg
cmVzZXQgb3RoZXIgbWVtYmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKSBjYWxscyB0
aGlzCiAgICAgLy8gdG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMg
bGlrZSBpbml0RnJhbWVCdWZmZXIoKSBhbmQKQEAgLTE4Nyw2ICsxODksNyBAQCBib29sIEltYWdl
RnJhbWU6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKQogICAgIG1fYnl0
ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CiAgICAgbV9zaXplID0gb3RoZXIubV9zaXplOwog
ICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxwaGEpOworICAgIG1fbGFzdERlY29kZWRSb3cg
PSBvdGhlci5tX2xhc3REZWNvZGVkUm93OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xOTks
NiArMjAyLDcgQEAgYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5l
d0hlaWdodCkKICAgICBtX2JhY2tpbmdTdG9yZS5yZXNpemUoYmFja2luZ1N0b3JlU2l6ZSk7CiAg
ICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKICAgICBtX3NpemUgPSBJbnRTaXpl
KG5ld1dpZHRoLCBuZXdIZWlnaHQpOworICAgIG1fbGFzdERlY29kZWRSb3cgPSAwOwogCiAgICAg
emVyb0ZpbGxQaXhlbERhdGEoKTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXggNzYw
YWM5My4uNDY2ZmMxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKQEAgLTExOCw2ICsxMTgsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZlSW1hZ2UoKSBjb25z
dDsKIAogICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7CisgICAgICAgIGludCBsYXN0RGVj
b2RlZFJvdygpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdERlY29kZWRSb3c7IH0KICAgICAgICAgY29u
c3QgSW50UmVjdCYgb3JpZ2luYWxGcmFtZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX29yaWdpbmFs
RnJhbWVSZWN0OyB9CiAgICAgICAgIEZyYW1lU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdHVzOyB9CiAgICAgICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kdXJhdGlvbjsgfQpAQCAtMTI1LDYgKzEyNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9wcmVtdWx0aXBs
eUFscGhhOyB9CiAKICAgICAgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGFscGhhKTsKKyAgICAg
ICAgaW5saW5lIHZvaWQgc2V0TGFzdERlY29kZWRSb3coaW50IGxhc3REZWNvZGVkUm93KSB7IG1f
bGFzdERlY29kZWRSb3cgPSBsYXN0RGVjb2RlZFJvdzsgfQogICAgICAgICB2b2lkIHNldENvbG9y
UHJvZmlsZShjb25zdCBDb2xvclByb2ZpbGUmKTsKICAgICAgICAgdm9pZCBzZXRPcmlnaW5hbEZy
YW1lUmVjdChjb25zdCBJbnRSZWN0JiByKSB7IG1fb3JpZ2luYWxGcmFtZVJlY3QgPSByOyB9CiAg
ICAgICAgIHZvaWQgc2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cyk7CkBAIC0xODEsNiArMTgz
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCBt
X2NvbG9yUHJvZmlsZSBhbnltb3JlPwogICAgICAgICBDb2xvclByb2ZpbGUgbV9jb2xvclByb2Zp
bGU7CiAjZW5kaWYKKyAgICAgICAgaW50IG1fbGFzdERlY29kZWRSb3c7CiAgICAgICAgIEludFJl
Y3QgbV9vcmlnaW5hbEZyYW1lUmVjdDsgLy8gVGhpcyB3aWxsIGFsd2F5cyBqdXN0IGJlIHRoZSBl
bnRpcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidWZmZXIgZXhj
ZXB0IGZvciBHSUYgZnJhbWVzIHdob3NlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gb3JpZ2luYWwgcmVjdCB3YXMgc21hbGxlciB0aGFuIHRoZQpAQCAtMjI4LDYgKzIz
MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIG1faXNBbGxEYXRhUmVjZWl2
ZWQgPSBhbGxEYXRhUmVjZWl2ZWQ7CiAgICAgICAgIH0KIAorICAgICAgICBTaGFyZWRCdWZmZXIq
IGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KKwogICAgICAgICAvLyBMYXpp
bHktZGVjb2RlcyBlbm91Z2ggb2YgdGhlIGltYWdlIHRvIGdldCB0aGUgc2l6ZSAoaWYgcG9zc2li
bGUpLgogICAgICAgICAvLyBGSVhNRTogUmlnaHQgbm93IHRoYXQgaGFzIHRvIGJlIGRvbmUgYnkg
ZWFjaCBzdWJjbGFzczsgZmFjdG9yIHRoZQogICAgICAgICAvLyBkZWNvZGUgY2FsbCBvdXQgYW5k
IHVzZSBpdCBoZXJlLgpAQCAtMjc2LDYgKzI4MSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIC8vIEltYWdlRGVjb2Rlci1vd25lZCBwb2ludGVyLgogICAgICAgICB2aXJ0dWFsIElt
YWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QpID0gMDsKIAorICAgICAgICAvLyBS
ZXR1cm5zIGFuIEltYWdlRGVjb2Rlci1vd25lZCBwb2ludGVyIHdpdGhvdXQgZGVjb2RpbmcgbW9y
ZS4KKyAgICAgICAgSW1hZ2VGcmFtZSogZmlyc3RJbWFnZUZyYW1lV2l0aG91dERlY29kZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgp
ID8gMCA6ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAgICAgIH0KKwogICAgICAgICB2b2lk
IHNldElnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKGJvb2wgZmxhZykgeyBtX2lnbm9yZUdhbW1h
QW5kQ29sb3JQcm9maWxlID0gZmxhZzsgfQogICAgICAgICBib29sIGlnbm9yZXNHYW1tYUFuZENv
bG9yUHJvZmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1faWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGU7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
YmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggNmE2
NWU2MS4uYmRjYWVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURlY29kZXIu
Y3BwCkBAIC0xNTcsNiArMTU3LDcgQEAgaW50IEltYWdlUmVhZGVyOjpkZWNvZGUoc2l6ZV90IHdp
ZHRoLCBzaXplX3QgaGVpZ2h0LCBJbWFnZUZyYW1lKiBhRnJhbWUpCiAgICAgICAgICAgICBhRnJh
bWUtPnNldFJHQkEoaSwgaiwgY3VyUHRyWzBdLCBjdXJQdHJbMV0sIGN1clB0clsyXSwgMjU1KTsK
ICAgICAgICAgICAgIGN1clB0ciArPSAzOwogICAgICAgICB9CisgICAgICAgIGFGcmFtZS0+c2V0
TGFzdERlY29kZWRSb3coaik7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1h
Z2VEZWNvZGVyLmNwcAppbmRleCAyMGEyNDhjLi5mNzRkZGUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VE
ZWNvZGVyLmNwcApAQCAtNjQsOCArNjQsMTUgQEAgdm9pZCBCTVBJbWFnZURlY29kZXI6OnNldERh
dGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKIAogYm9vbCBCTVBJ
bWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCiB7Ci0gICAgaWYgKCFJbWFnZURlY29kZXI6
OmlzU2l6ZUF2YWlsYWJsZSgpKQorICAgIGlmICghSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFi
bGUoKSkgeworICAgICAgICAvLyBPbmx5IEJNUEltYWdlRGVjb2RlciBtdXN0IG1ha2UgbV9mcmFt
ZUJ1ZmZlckNhY2hlWzBdIGluIGlzU2l6ZUF2YWlsYWJsZSgpLAorICAgICAgICAvLyBiZWNhdXNl
IHRoZSBkZWZhdWx0IHZhbHVlIG9mIEltYWdlRnJhbWU6Om1fbGFzdERlY29kZWRSb3cgY2FuIGJl
ICJoZWlnaHQgLSAxIi4KKyAgICAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7CisgICAgICAgICAg
ICBtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVs
dGlwbHlBbHBoYSk7CisgICAgICAgIH0KICAgICAgICAgZGVjb2RlKHRydWUpOworICAgIH0KIAog
ICAgIHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVh
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJ
bWFnZVJlYWRlci5jcHAKaW5kZXggNWMwMDU1My4uNGY3ZTMxNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VS
ZWFkZXIuY3BwCkBAIC02NCw4ICs2NCwxMSBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVC
TVAoYm9vbCBvbmx5U2l6ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gcHJvY2Vz
c0luZm9IZWFkZXIoKSBzZXQgdGhlIHNpemUsIHNvIGlmIHRoYXQncyBhbGwgd2UgbmVlZGVkLCB3
ZSdyZSBkb25lLgotICAgIGlmIChvbmx5U2l6ZSkKKyAgICBpZiAob25seVNpemUpIHsKKyAgICAg
ICAgaWYgKCFtX2lzVG9wRG93bikKKyAgICAgICAgICAgIG1fYnVmZmVyLT5zZXRMYXN0RGVjb2Rl
ZFJvdyhtX3BhcmVudC0+c2l6ZSgpLmhlaWdodCgpIC0gMSk7CiAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KIAogICAgIC8vIFJlYWQgYW5kIHByb2Nlc3MgdGhlIGJpdG1hc2tzLCBpZiBuZWVk
ZWQuCiAgICAgaWYgKG1fbmVlZFRvUHJvY2Vzc0JpdG1hc2tzICYmICFwcm9jZXNzQml0bWFza3Mo
KSkKQEAgLTYyNCw2ICs2MjcsNyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzUkxFRGF0
YSgpCiAKICAgICAgICAgICAgICAgICBtX2RlY29kZWRPZmZzZXQgKz0gMjsKICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG1fYnVmZmVyLT5zZXRMYXN0RGVjb2RlZFJvdyhtX2Nvb3JkLnkoKSk7
CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC03MTcsNiArNzIxLDcgQEAgQk1QSW1hZ2VSZWFkZXI6
OlByb2Nlc3NpbmdSZXN1bHQgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NOb25STEVEYXRhKGJvb2wg
aW5STEUsIGkKICAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbXBvbmVudChwaXhlbCwgMiks
IGFscGhhKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBtX2J1ZmZlci0+c2V0
TGFzdERlY29kZWRSb3cobV9jb29yZC55KCkpOwogCiAgICAgICAgIC8vIFN1Y2Nlc3MsIGtlZXAg
Z29pbmcuCiAgICAgICAgIG1fZGVjb2RlZE9mZnNldCArPSBwYWRkZWROdW1CeXRlczsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lm
L0dJRkltYWdlRGVjb2Rlci5jcHAKaW5kZXggNWY2MTkzYi4uNzE5OGExMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJ
RkltYWdlRGVjb2Rlci5jcHAKQEAgLTI0OSwxMCArMjQ5LDE0IEBAIGJvb2wgR0lGSW1hZ2VEZWNv
ZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBjaGFyKiBy
b3dCdWZmCiAgICAgICAgICAgICAgICAgYnVmZmVyLnNldFJHQkEoeCwgeUJlZ2luLCAwLCAwLCAw
LCAwKTsKICAgICAgICAgfQogICAgIH0KKyAgICBidWZmZXIuc2V0TGFzdERlY29kZWRSb3coeUJl
Z2luKTsKIAogICAgIC8vIFRlbGwgdGhlIGZyYW1lIHRvIGNvcHkgdGhlIHJvdyBkYXRhIGlmIG5l
ZWQgYmUuCi0gICAgaWYgKHJlcGVhdENvdW50ID4gMSkKKyAgICBpZiAocmVwZWF0Q291bnQgPiAx
KSB7CiAgICAgICAgIGJ1ZmZlci5jb3B5Um93TlRpbWVzKHhCZWdpbiwgeEVuZCwgeUJlZ2luLCB5
RW5kKTsKKyAgICAgICAgQVNTRVJUKCh5RW5kIC0gMSkgPj0gMCk7CisgICAgICAgIGJ1ZmZlci5z
ZXRMYXN0RGVjb2RlZFJvdyh5RW5kIC0gMSk7CisgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9
CkBAIC0zOTAsNiArMzk0LDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZl
cih1bnNpZ25lZCBmcmFtZUluZGV4KQogICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcHJldlJl
Y3QueSgpOyB5IDwgcHJldlJlY3QubWF4WSgpOyArK3kpIHsKICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSBwcmV2UmVjdC54KCk7IHggPCBwcmV2UmVjdC5tYXhYKCk7ICsreCkKICAgICAg
ICAgICAgICAgICAgICAgICBidWZmZXItPnNldFJHQkEoeCwgeSwgMCwgMCwgMCwgMCk7CisgICAg
ICAgICAgICAgICAgICBidWZmZXItPnNldExhc3REZWNvZGVkUm93KHkpOwogICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgIGlmICgocHJldlJlY3Qud2lkdGgoKSA+IDApICYmIChwcmV2UmVj
dC5oZWlnaHQoKSA+IDApKQogICAgICAgICAgICAgICAgICAgYnVmZmVyLT5zZXRIYXNBbHBoYSh0
cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCmluZGV4IDkxZjEyMzYuLjQ4NjFj
YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pw
ZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcApAQCAtNTc3LDYgKzU3Nyw3IEBA
IGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICBpZiAodHVyYm9T
d2l6emxlZChpbmZvLT5vdXRfY29sb3Jfc3BhY2UpKSB7CiAgICAgICAgIEFTU0VSVCghbV9zY2Fs
ZWQpOwogICAgICAgICB3aGlsZSAoaW5mby0+b3V0cHV0X3NjYW5saW5lIDwgaW5mby0+b3V0cHV0
X2hlaWdodCkgeworICAgICAgICAgICAgYnVmZmVyLnNldExhc3REZWNvZGVkUm93KGluZm8tPm91
dHB1dF9zY2FubGluZSk7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiByb3cgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihidWZmZXIuZ2V0QWRkcigwLCBpbmZvLT5vdXRwdXRf
c2NhbmxpbmUpKTsKICAgICAgICAgICAgIGlmIChqcGVnX3JlYWRfc2NhbmxpbmVzKGluZm8sICZy
b3csIDEpICE9IDEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjI4LDYgKzYy
OSw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAg
ICAgICAgYnVmZmVyLnNldExhc3REZWNvZGVkUm93KGRlc3RZKTsKICAgICB9CiAKICAgICByZXR1
cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggMTM4ZDVjNS4uODEwY2Fh
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5n
L1BOR0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKQEAgLTUyMCw2ICs1MjAsNyBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwg
dW5zaWduZWQgcm93SW5kZXgsCiAKICAgICBpZiAobm9uVHJpdmlhbEFscGhhICYmICFidWZmZXIu
aGFzQWxwaGEoKSkKICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKG5vblRyaXZpYWxBbHBoYSk7
CisgICAgYnVmZmVyLnNldExhc3REZWNvZGVkUm93KHkpOwogfQogCiB2b2lkIFBOR0ltYWdlRGVj
b2Rlcjo6cG5nQ29tcGxldGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHAKaW5kZXgg
NWNjMTMyYy4uMTMzMThhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3BwCkBAIC01
Nyw2ICs1Nyw3IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdCBJbWFn
ZUZyYW1lJiBvdGhlcikKIHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogewogICAg
IG1fYml0bWFwLmJpdG1hcCgpLnJlc2V0KCk7CisgICAgbV9sYXN0RGVjb2RlZFJvdyA9IDA7CiAg
ICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5OwogICAgIC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhl
ciBtZW1iZXJzIGhlcmU7IGNsZWFyRnJhbWVCdWZmZXJDYWNoZSgpCiAgICAgLy8gY2FsbHMgdGhp
cyB0byBmcmVlIHRoZSBiaXRtYXAgZGF0YSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlCkBAIC03
Niw2ICs3Nyw3IEBAIGJvb2wgSW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEoY29uc3QgSW1hZ2VG
cmFtZSYgb3RoZXIpCiAKICAgICBtX2JpdG1hcC5iaXRtYXAoKS5yZXNldCgpOwogICAgIGNvbnN0
IE5hdGl2ZUltYWdlU2tpYSYgb3RoZXJCaXRtYXAgPSBvdGhlci5tX2JpdG1hcDsKKyAgICBtX2xh
c3REZWNvZGVkUm93ID0gb3RoZXIubV9sYXN0RGVjb2RlZFJvdzsKICAgICByZXR1cm4gb3RoZXJC
aXRtYXAuYml0bWFwKCkuY29weVRvKCZtX2JpdG1hcC5iaXRtYXAoKSwgb3RoZXJCaXRtYXAuYml0
bWFwKCkuY29uZmlnKCkpOwogfQogCkBAIC04NCw2ICs4Niw3IEBAIGJvb2wgSW1hZ2VGcmFtZTo6
c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpCiAgICAgLy8gc2V0U2l6ZSgpIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLCBpdCBsZWFrcyBtZW1vcnkgb3RoZXJ3aXNlLgogICAg
IEFTU0VSVCghd2lkdGgoKSAmJiAhaGVpZ2h0KCkpOwogCisgICAgbV9sYXN0RGVjb2RlZFJvdyA9
IDA7CiAgICAgbV9iaXRtYXAuYml0bWFwKCkuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4
X0NvbmZpZywgbmV3V2lkdGgsIG5ld0hlaWdodCk7CiAgICAgaWYgKCFtX2JpdG1hcC5iaXRtYXAo
KS5hbGxvY1BpeGVscygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1h
Z2VEZWNvZGVyLmNwcAppbmRleCAwODJlMzNkLi5hOWY5OGFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUElt
YWdlRGVjb2Rlci5jcHAKQEAgLTEzMiwxOSArMTMyLDI2IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rl
cjo6ZGVjb2RlKGJvb2wgb25seVNpemUpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7
CiAgICAgfQogCi0gICAgc3dpdGNoIChXZWJQSVVwZGF0ZShtX2RlY29kZXIsIGRhdGFCeXRlcywg
ZGF0YVNpemUpKSB7Ci0gICAgY2FzZSBWUDhfU1RBVFVTX09LOgotICAgICAgICBidWZmZXIuc2V0
U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOwotICAgICAgICBXZWJQSURlbGV0ZSht
X2RlY29kZXIpOwotICAgICAgICBtX2RlY29kZXIgPSAwOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBjYXNlIFZQOF9TVEFUVVNfU1VTUEVOREVEOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgZGVmYXVsdDoKKyAgICBjb25zdCBWUDhTdGF0dXNDb2RlIHN0YXR1cyA9IFdlYlBJVXBkYXRl
KG1fZGVjb2RlciwgZGF0YUJ5dGVzLCBkYXRhU2l6ZSk7CisgICAgaWYgKHN0YXR1cyAhPSBWUDhf
U1RBVFVTX09LICYmIHN0YXR1cyAhPSBWUDhfU1RBVFVTX1NVU1BFTkRFRCkgewogICAgICAgICBX
ZWJQSURlbGV0ZShtX2RlY29kZXIpOwogICAgICAgICBtX2RlY29kZXIgPSAwOwogICAgICAgICBy
ZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgfQorICAgIGludCBsYXN0WSA9IDA7CisgICAgaWYgKCFX
ZWJQSURlY0dldFJHQihtX2RlY29kZXIsICZsYXN0WSwgMCwgMCwgMCkpCisgICAgICAgIHJldHVy
biBzZXRGYWlsZWQoKTsKKyAgICBBU1NFUlQobGFzdFkgPj0gMCk7CisgICAgQVNTRVJUKGxhc3RZ
IDw9IHNpemUoKS5oZWlnaHQoKSk7CisgICAgYnVmZmVyLnNldExhc3REZWNvZGVkUm93KGxhc3RZ
ID8gbGFzdFkgLSAxIDogMCk7CisKKyAgICBpZiAoc3RhdHVzID09IFZQOF9TVEFUVVNfU1VTUEVO
REVEKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdl
RnJhbWU6OkZyYW1lQ29tcGxldGUpOworICAgIFdlYlBJRGVsZXRlKG1fZGVjb2Rlcik7CisgICAg
bV9kZWNvZGVyID0gMDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCmluZGV4IGRj
NDUwMDEuLmQyYzZiYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVGbG93Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJ
bmxpbmVGbG93Qm94LmgiCiAKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkNh
Y2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCkBAIC0xMjUwLDggKzEyNTEsOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50
Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50Jgog
ICAgICAgICAgICAgY29uc3QgTmluZVBpZWNlSW1hZ2UmIGJvcmRlckltYWdlID0gcmVuZGVyZXIo
KS0+c3R5bGUoKS0+Ym9yZGVySW1hZ2UoKTsKICAgICAgICAgICAgIFN0eWxlSW1hZ2UqIGJvcmRl
ckltYWdlU291cmNlID0gYm9yZGVySW1hZ2UuaW1hZ2UoKTsKICAgICAgICAgICAgIGJvb2wgaGFz
Qm9yZGVySW1hZ2UgPSBib3JkZXJJbWFnZVNvdXJjZSAmJiBib3JkZXJJbWFnZVNvdXJjZS0+Y2Fu
UmVuZGVyKHJlbmRlcmVyKCksIHN0eWxlVG9Vc2UtPmVmZmVjdGl2ZVpvb20oKSk7Ci0gICAgICAg
ICAgICBpZiAoaGFzQm9yZGVySW1hZ2UgJiYgIWJvcmRlckltYWdlU291cmNlLT5pc0xvYWRlZCgp
KQotICAgICAgICAgICAgICAgIHJldHVybjsgLy8gRG9uJ3QgcGFpbnQgYW55dGhpbmcgd2hpbGUg
d2Ugd2FpdCBmb3IgdGhlIGltYWdlIHRvIGxvYWQuCisgICAgICAgICAgICBpZiAoaGFzQm9yZGVy
SW1hZ2UgJiYgIWlzRGVjb2RlZENvbXBsZXRlbHlJZkJpdG1hcEltYWdlQXNXZWxsQXNJc0xvYWRl
ZChib3JkZXJJbWFnZVNvdXJjZSwgYm94TW9kZWxPYmplY3QoKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOyAvLyBEb24ndCBwYWludCBhbnl0aGluZyB3aGlsZSB3ZSB3YWl0IGZvciB0aGUgaW1h
Z2UgdG8gZGVjb2RlIGNvbXBsZXRlbHkuCiAKICAgICAgICAgICAgIC8vIFRoZSBzaW1wbGUgY2Fz
ZSBpcyB3aGVyZSB3ZSBlaXRoZXIgaGF2ZSBubyBib3JkZXIgaW1hZ2Ugb3Igd2UgYXJlIHRoZSBv
bmx5IGJveCBmb3IgdGhpcyBvYmplY3QuICBJbiB0aG9zZQogICAgICAgICAgICAgLy8gY2FzZXMg
b25seSBhIHNpbmdsZSBjYWxsIHRvIGRyYXcgaXMgcmVxdWlyZWQuCkBAIC0xMzI1LDEwICsxMzI2
LDEwIEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnRNYXNrKFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzCiAgICAgcGFpbnRGaWxsTGF5ZXJzKHBhaW50
SW5mbywgQ29sb3IoKSwgcmVuZGVyZXIoKS0+c3R5bGUoKS0+bWFza0xheWVycygpLCBwYWludFJl
Y3QsIGNvbXBvc2l0ZU9wKTsKICAgICAKICAgICBib29sIGhhc0JveEltYWdlID0gbWFza0JveElt
YWdlICYmIG1hc2tCb3hJbWFnZS0+Y2FuUmVuZGVyKHJlbmRlcmVyKCksIHJlbmRlcmVyKCktPnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7Ci0gICAgaWYgKCFoYXNCb3hJbWFnZSB8fCAhbWFza0Jv
eEltYWdlLT5pc0xvYWRlZCgpKSB7CisgICAgaWYgKCFoYXNCb3hJbWFnZSB8fCAhaXNEZWNvZGVk
Q29tcGxldGVseUlmQml0bWFwSW1hZ2VBc1dlbGxBc0lzTG9hZGVkKG1hc2tCb3hJbWFnZSwgYm94
TW9kZWxPYmplY3QoKSkpIHsKICAgICAgICAgaWYgKHB1c2hUcmFuc3BhcmVuY3lMYXllcikKICAg
ICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAg
ICAgICByZXR1cm47IC8vIERvbid0IHBhaW50IGFueXRoaW5nIHdoaWxlIHdlIHdhaXQgZm9yIHRo
ZSBpbWFnZSB0byBsb2FkLgorICAgICAgICByZXR1cm47IC8vIERvbid0IHBhaW50IGFueXRoaW5n
IHdoaWxlIHdlIHdhaXQgZm9yIHRoZSBpbWFnZSB0byBkZWNvZGUgY29tcGxldGVseS4KICAgICB9
CiAKICAgICAvLyBUaGUgc2ltcGxlIGNhc2UgaXMgd2hlcmUgd2UgYXJlIHRoZSBvbmx5IGJveCBm
b3IgdGhpcyBvYmplY3QuICBJbiB0aG9zZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAppbmRleCA4ZDgyODIwLi5kNWY2ZTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlJlbmRlckJveC5oIgogCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJD
YWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVu
dC5oIgpAQCAtNzk3LDcgKzc5OCw3IEBAIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSBSZW5kZXJC
b3g6OmRldGVybWluZUJhY2tncm91bmRCbGVlZEF2b2lkYW5jZShHcmFwaGljc0NvCiAKICAgICBj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSB0aGlzLT5zdHlsZSgpOwogCi0gICAgaWYgKCFzdHls
ZS0+aGFzQmFja2dyb3VuZCgpIHx8ICFzdHlsZS0+aGFzQm9yZGVyKCkgfHwgIXN0eWxlLT5oYXNC
b3JkZXJSYWRpdXMoKSB8fCBib3JkZXJJbWFnZUlzTG9hZGVkQW5kQ2FuQmVSZW5kZXJlZCgpKQor
ICAgIGlmICghc3R5bGUtPmhhc0JhY2tncm91bmQoKSB8fCAhc3R5bGUtPmhhc0JvcmRlcigpIHx8
ICFzdHlsZS0+aGFzQm9yZGVyUmFkaXVzKCkgfHwgYm9yZGVySW1hZ2VDYW5CZVJlbmRlcmVkQW5k
SXNEZWNvZGVkQ29tcGxldGVseSgpKQogICAgICAgICByZXR1cm4gQmFja2dyb3VuZEJsZWVkTm9u
ZTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjb250ZXh0LT5nZXRDVE0oKTsKQEAgLTg5
OSwyNiArOTAwLDI2IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludE1hc2tJbWFnZXMoY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFJlY3QmIHBhCiAgICAgYm9vbCBmbGF0dGVu
Q29tcG9zaXRpbmdMYXllcnMgPSB2aWV3KCktPmZyYW1lVmlldygpICYmIHZpZXcoKS0+ZnJhbWVW
aWV3KCktPnBhaW50QmVoYXZpb3IoKSAmIFBhaW50QmVoYXZpb3JGbGF0dGVuQ29tcG9zaXRpbmdM
YXllcnM7CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AgPSBDb21wb3NpdGVTb3Vy
Y2VPdmVyOwogCi0gICAgYm9vbCBhbGxNYXNrSW1hZ2VzTG9hZGVkID0gdHJ1ZTsKKyAgICBib29s
IGFsbE1hc2tJbWFnZXNEZWNvZGVkQ29tcGxldGVseSA9IHRydWU7CiAgICAgCiAgICAgaWYgKCFj
b21wb3NpdGVkTWFzayB8fCBmbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpIHsKICAgICAgICAgcHVz
aFRyYW5zcGFyZW5jeUxheWVyID0gdHJ1ZTsKICAgICAgICAgU3R5bGVJbWFnZSogbWFza0JveElt
YWdlID0gc3R5bGUoKS0+bWFza0JveEltYWdlKCkuaW1hZ2UoKTsKICAgICAgICAgY29uc3QgRmls
bExheWVyKiBtYXNrTGF5ZXJzID0gc3R5bGUoKS0+bWFza0xheWVycygpOwogCi0gICAgICAgIC8v
IERvbid0IHJlbmRlciBhIG1hc2tlZCBlbGVtZW50IHVudGlsIGFsbCB0aGUgbWFzayBpbWFnZXMg
aGF2ZSBsb2FkZWQsIHRvIHByZXZlbnQgYSBmbGFzaCBvZiB1bm1hc2tlZCBjb250ZW50LgorICAg
ICAgICAvLyBEb24ndCByZW5kZXIgYSBtYXNrZWQgZWxlbWVudCB1bnRpbCBhbGwgdGhlIG1hc2sg
aW1hZ2VzIGhhdmUgZGVjb2RlZCBjb21wbGV0ZWx5LCB0byBwcmV2ZW50IGEgZmxhc2ggb2YgdW5t
YXNrZWQgY29udGVudC4KICAgICAgICAgaWYgKG1hc2tCb3hJbWFnZSkKLSAgICAgICAgICAgIGFs
bE1hc2tJbWFnZXNMb2FkZWQgJj0gbWFza0JveEltYWdlLT5pc0xvYWRlZCgpOworICAgICAgICAg
ICAgYWxsTWFza0ltYWdlc0RlY29kZWRDb21wbGV0ZWx5ICY9IGlzRGVjb2RlZENvbXBsZXRlbHlJ
ZkJpdG1hcEltYWdlQXNXZWxsQXNJc0xvYWRlZChtYXNrQm94SW1hZ2UsIHRoaXMpOwogCiAgICAg
ICAgIGlmIChtYXNrTGF5ZXJzKQotICAgICAgICAgICAgYWxsTWFza0ltYWdlc0xvYWRlZCAmPSBt
YXNrTGF5ZXJzLT5pbWFnZXNBcmVMb2FkZWQoKTsKKyAgICAgICAgICAgIGFsbE1hc2tJbWFnZXNE
ZWNvZGVkQ29tcGxldGVseSAmPSBtYXNrTGF5ZXJzLT5pbWFnZXNBcmVEZWNvZGVkQ29tcGxldGVs
eSh0aGlzKTsKIAogICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKENvbXBvc2l0ZURlc3RpbmF0aW9uSW4pOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+
YmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsKICAgICAgICAgY29tcG9zaXRlT3AgPSBDb21wb3Np
dGVTb3VyY2VPdmVyOwogICAgIH0KIAotICAgIGlmIChhbGxNYXNrSW1hZ2VzTG9hZGVkKSB7Cisg
ICAgaWYgKGFsbE1hc2tJbWFnZXNEZWNvZGVkQ29tcGxldGVseSkgewogICAgICAgICBwYWludEZp
bGxMYXllcnMocGFpbnRJbmZvLCBDb2xvcigpLCBzdHlsZSgpLT5tYXNrTGF5ZXJzKCksIHBhaW50
UmVjdCwgQmFja2dyb3VuZEJsZWVkTm9uZSwgY29tcG9zaXRlT3ApOwogICAgICAgICBwYWludE5p
bmVQaWVjZUltYWdlKHBhaW50SW5mby5jb250ZXh0LCBwYWludFJlY3QsIHN0eWxlKCksIHN0eWxl
KCktPm1hc2tCb3hJbWFnZSgpLCBjb21wb3NpdGVPcCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggYTM1YTIwNi4u
MzY2OTI4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiUmVuZGVyQm94TW9kZWxPYmplY3QuaCIKIAorI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgi
CiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgpAQCAtOTE5LDkgKzkyMCw5
IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQoY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvCiAgICAgICAgIGlmICghZ2VvbWV0cnkuZGVzdFJl
Y3QoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wID0gb3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciA/IGJnTGF5ZXItPmNvbXBvc2l0ZSgpIDog
b3A7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIGNsaWVudEZvckJhY2tncm91bmRJbWFnZSA9
IGJhY2tncm91bmRPYmplY3QgPyBiYWNrZ3JvdW5kT2JqZWN0IDogdGhpczsKLSAgICAgICAgICAg
IFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBiZ0ltYWdlLT5pbWFnZShjbGllbnRGb3JCYWNrZ3JvdW5k
SW1hZ2UsIGdlb21ldHJ5LnRpbGVTaXplKCkpOwotICAgICAgICAgICAgYm9vbCB1c2VMb3dRdWFs
aXR5U2NhbGluZyA9IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQsIGltYWdlLmdldCgp
LCBiZ0xheWVyLCBnZW9tZXRyeS50aWxlU2l6ZSgpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRy
YXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIGdlb21ldHJ5
LmRlc3RSZWN0KCksIGdlb21ldHJ5LnJlbGF0aXZlUGhhc2UoKSwgZ2VvbWV0cnkudGlsZVNpemUo
KSwgCisgICAgICAgICAgICBJbWFnZSogaW1hZ2UgPSB0b1JldGFpbmVkTW9kZUJpdG1hcEltYWdl
SWZQb3NzaWJsZShiZ0ltYWdlLT5pbWFnZShjbGllbnRGb3JCYWNrZ3JvdW5kSW1hZ2UsIGdlb21l
dHJ5LnRpbGVTaXplKCkpLmdldCgpKTsKKyAgICAgICAgICAgIGJvb2wgdXNlTG93UXVhbGl0eVNj
YWxpbmcgPSBzaG91bGRQYWludEF0TG93UXVhbGl0eShjb250ZXh0LCBpbWFnZSwgYmdMYXllciwg
Z2VvbWV0cnkudGlsZVNpemUoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3VGlsZWRJbWFn
ZShpbWFnZSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBnZW9tZXRyeS5kZXN0UmVjdCgpLCBnZW9t
ZXRyeS5yZWxhdGl2ZVBoYXNlKCksIGdlb21ldHJ5LnRpbGVTaXplKCksCiAgICAgICAgICAgICAg
ICAgY29tcG9zaXRlT3AsIHVzZUxvd1F1YWxpdHlTY2FsaW5nKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTEyMjYsNyArMTIyNyw3IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Tmlu
ZVBpZWNlSW1hZ2UoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCiAgICAgaWYgKCFz
dHlsZUltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXN0eWxlSW1hZ2Ut
PmlzTG9hZGVkKCkpCisgICAgaWYgKCFpc0RlY29kZWRDb21wbGV0ZWx5SWZCaXRtYXBJbWFnZUFz
V2VsbEFzSXNMb2FkZWQoc3R5bGVJbWFnZSwgdGhpcykpCiAgICAgICAgIHJldHVybiB0cnVlOyAv
LyBOZXZlciBwYWludCBhIG5pbmUtcGllY2UgaW1hZ2UgaW5jcmVtZW50YWxseSwgYnV0IGRvbid0
IHBhaW50IHRoZSBmYWxsYmFjayBib3JkZXJzIGVpdGhlci4KIAogICAgIGlmICghc3R5bGVJbWFn
ZS0+Y2FuUmVuZGVyKHRoaXMsIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpKQpAQCAtMTI5MCw3ICsx
MjkxLDcgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnROaW5lUGllY2VJbWFnZShH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwKICAgICBib29sIGRyYXdNaWRkbGUgPSBu
aW5lUGllY2VJbWFnZS5maWxsKCkgJiYgKGltYWdlV2lkdGggLSBsZWZ0U2xpY2UgLSByaWdodFNs
aWNlKSA+IDAgJiYgKGJvcmRlckltYWdlUmVjdC53aWR0aCgpIC0gbGVmdFdpZHRoIC0gcmlnaHRX
aWR0aCkgPiAwCiAgICAgICAgICAgICAgICAgICAgICAgJiYgKGltYWdlSGVpZ2h0IC0gdG9wU2xp
Y2UgLSBib3R0b21TbGljZSkgPiAwICYmIChib3JkZXJJbWFnZVJlY3QuaGVpZ2h0KCkgLSB0b3BX
aWR0aCAtIGJvdHRvbVdpZHRoKSA+IDA7CiAKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gc3R5
bGVJbWFnZS0+aW1hZ2UodGhpcywgaW1hZ2VTaXplKTsKKyAgICBJbWFnZSogaW1hZ2UgPSB0b1Jl
dGFpbmVkTW9kZUJpdG1hcEltYWdlSWZQb3NzaWJsZShzdHlsZUltYWdlLT5pbWFnZSh0aGlzLCBp
bWFnZVNpemUpLmdldCgpKTsKICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBzdHlsZS0+Y29s
b3JTcGFjZSgpOwogICAgIAogICAgIGZsb2F0IGRlc3RpbmF0aW9uV2lkdGggPSBib3JkZXJJbWFn
ZVJlY3Qud2lkdGgoKSAtIGxlZnRXaWR0aCAtIHJpZ2h0V2lkdGg7CkBAIC0xMzEwLDE5ICsxMzEx
LDE5IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWNlSW1hZ2UoR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCiAgICAgICAgIC8vIFRoZSB0b3AgbGVmdCBj
b3JuZXIgcmVjdCBpcyAodHgsIHR5LCBsZWZ0V2lkdGgsIHRvcFdpZHRoKQogICAgICAgICAvLyBU
aGUgcmVjdCB0byB1c2UgZnJvbSB3aXRoaW4gdGhlIGltYWdlIGlzIG9idGFpbmVkIGZyb20gb3Vy
IHNsaWNlLCBhbmQgaXMgKDAsIDAsIGxlZnRTbGljZSwgdG9wU2xpY2UpCiAgICAgICAgIGlmIChk
cmF3VG9wKQotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0
KCksIGNvbG9yU3BhY2UsIEludFJlY3QoYm9yZGVySW1hZ2VSZWN0LmxvY2F0aW9uKCksIEludFNp
emUobGVmdFdpZHRoLCB0b3BXaWR0aCkpLAorICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5k
cmF3SW1hZ2UoaW1hZ2UsIGNvbG9yU3BhY2UsIEludFJlY3QoYm9yZGVySW1hZ2VSZWN0LmxvY2F0
aW9uKCksIEludFNpemUobGVmdFdpZHRoLCB0b3BXaWR0aCkpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCgwLCAwLCBsZWZ0U2xpY2UsIHRvcFNsaWNl
KSwgb3ApOwogCiAgICAgICAgIC8vIFRoZSBib3R0b20gbGVmdCBjb3JuZXIgcmVjdCBpcyAodHgs
IHR5ICsgaCAtIGJvdHRvbVdpZHRoLCBsZWZ0V2lkdGgsIGJvdHRvbVdpZHRoKQogICAgICAgICAv
LyBUaGUgcmVjdCB0byB1c2UgZnJvbSB3aXRoaW4gdGhlIGltYWdlIGlzICgwLCBpbWFnZUhlaWdo
dCAtIGJvdHRvbVNsaWNlLCBsZWZ0U2xpY2UsIGJvdG9tU2xpY2UpCiAgICAgICAgIGlmIChkcmF3
Qm90dG9tKQotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0
KCksIGNvbG9yU3BhY2UsIEludFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSwgYm9yZGVySW1hZ2VS
ZWN0Lm1heFkoKSAtIGJvdHRvbVdpZHRoLCBsZWZ0V2lkdGgsIGJvdHRvbVdpZHRoKSwKKyAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBjb2xvclNwYWNlLCBJbnRS
ZWN0KGJvcmRlckltYWdlUmVjdC54KCksIGJvcmRlckltYWdlUmVjdC5tYXhZKCkgLSBib3R0b21X
aWR0aCwgbGVmdFdpZHRoLCBib3R0b21XaWR0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBMYXlvdXRSZWN0KDAsIGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2UsIGxl
ZnRTbGljZSwgYm90dG9tU2xpY2UpLCBvcCk7CiAKICAgICAgICAgLy8gUGFpbnQgdGhlIGxlZnQg
ZWRnZS4KICAgICAgICAgLy8gSGF2ZSB0byBzY2FsZSBhbmQgdGlsZSBpbnRvIHRoZSBib3JkZXIg
cmVjdC4KICAgICAgICAgaWYgKHNvdXJjZUhlaWdodCA+IDApCi0gICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0
KGJvcmRlckltYWdlUmVjdC54KCksIGJvcmRlckltYWdlUmVjdC55KCkgKyB0b3BXaWR0aCwgbGVm
dFdpZHRoLAorICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFn
ZSwgY29sb3JTcGFjZSwgSW50UmVjdChib3JkZXJJbWFnZVJlY3QueCgpLCBib3JkZXJJbWFnZVJl
Y3QueSgpICsgdG9wV2lkdGgsIGxlZnRXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25IZWlnaHQpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KDAsIHRvcFNsaWNlLCBsZWZ0U2xpY2Us
IHNvdXJjZUhlaWdodCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZsb2F0U2l6ZShsZWZ0U2lkZVNjYWxlLCBsZWZ0U2lkZVNjYWxlKSwgSW1hZ2U6OlN0cmV0
Y2hUaWxlLCAoSW1hZ2U6OlRpbGVSdWxlKXZSdWxlLCBvcCk7CkBAIC0xMzMzLDE4ICsxMzM0LDE4
IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWNlSW1hZ2UoR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCiAgICAgICAgIC8vIFRoZSB0b3AgcmlnaHQgY29y
bmVyIHJlY3QgaXMgKHR4ICsgdyAtIHJpZ2h0V2lkdGgsIHR5LCByaWdodFdpZHRoLCB0b3BXaWR0
aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8gdXNlIGZyb20gd2l0aGluIHRoZSBpbWFnZSBpcyBv
YnRhaW5lZCBmcm9tIG91ciBzbGljZSwgYW5kIGlzIChpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSwg
MCwgcmlnaHRTbGljZSwgdG9wU2xpY2UpCiAgICAgICAgIGlmIChkcmF3VG9wKQotICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIElu
dFJlY3QoYm9yZGVySW1hZ2VSZWN0Lm1heFgoKSAtIHJpZ2h0V2lkdGgsIGJvcmRlckltYWdlUmVj
dC55KCksIHJpZ2h0V2lkdGgsIHRvcFdpZHRoKSwKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+ZHJhd0ltYWdlKGltYWdlLCBjb2xvclNwYWNlLCBJbnRSZWN0KGJvcmRlckltYWdlUmVjdC5t
YXhYKCkgLSByaWdodFdpZHRoLCBib3JkZXJJbWFnZVJlY3QueSgpLCByaWdodFdpZHRoLCB0b3BX
aWR0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0
KGltYWdlV2lkdGggLSByaWdodFNsaWNlLCAwLCByaWdodFNsaWNlLCB0b3BTbGljZSksIG9wKTsK
IAogICAgICAgICAvLyBUaGUgYm90dG9tIHJpZ2h0IGNvcm5lciByZWN0IGlzICh0eCArIHcgLSBy
aWdodFdpZHRoLCB0eSArIGggLSBib3R0b21XaWR0aCwgcmlnaHRXaWR0aCwgYm90dG9tV2lkdGgp
CiAgICAgICAgIC8vIFRoZSByZWN0IHRvIHVzZSBmcm9tIHdpdGhpbiB0aGUgaW1hZ2UgaXMgKGlt
YWdlV2lkdGggLSByaWdodFNsaWNlLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCByaWdodFNs
aWNlLCBib3R0b21TbGljZSkKICAgICAgICAgaWYgKGRyYXdCb3R0b20pCi0gICAgICAgICAgICBn
cmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgSW50UmVj
dChib3JkZXJJbWFnZVJlY3QubWF4WCgpIC0gcmlnaHRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0Lm1h
eFkoKSAtIGJvdHRvbVdpZHRoLCByaWdodFdpZHRoLCBib3R0b21XaWR0aCksCisgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgY29sb3JTcGFjZSwgSW50UmVjdChi
b3JkZXJJbWFnZVJlY3QubWF4WCgpIC0gcmlnaHRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0Lm1heFko
KSAtIGJvdHRvbVdpZHRoLCByaWdodFdpZHRoLCBib3R0b21XaWR0aCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0KGltYWdlV2lkdGggLSByaWdodFNs
aWNlLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCByaWdodFNsaWNlLCBib3R0b21TbGljZSks
IG9wKTsKIAogICAgICAgICAvLyBQYWludCB0aGUgcmlnaHQgZWRnZS4KICAgICAgICAgaWYgKHNv
dXJjZUhlaWdodCA+IDApCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZElt
YWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0KGJvcmRlckltYWdlUmVjdC5tYXhY
KCkgLSByaWdodFdpZHRoLCBib3JkZXJJbWFnZVJlY3QueSgpICsgdG9wV2lkdGgsIHJpZ2h0V2lk
dGgsCisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLCBj
b2xvclNwYWNlLCBJbnRSZWN0KGJvcmRlckltYWdlUmVjdC5tYXhYKCkgLSByaWdodFdpZHRoLCBi
b3JkZXJJbWFnZVJlY3QueSgpICsgdG9wV2lkdGgsIHJpZ2h0V2lkdGgsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uSGVpZ2h0KSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdChpbWFnZVdpZHRo
IC0gcmlnaHRTbGljZSwgdG9wU2xpY2UsIHJpZ2h0U2xpY2UsIHNvdXJjZUhlaWdodCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0U2l6ZShyaWdodFNp
ZGVTY2FsZSwgcmlnaHRTaWRlU2NhbGUpLApAQCAtMTM1MywxMyArMTM1NCwxMyBAQCBib29sIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjZUltYWdlKEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0LAogCiAgICAgLy8gUGFpbnQgdGhlIHRvcCBlZGdlLgogICAgIGlmIChk
cmF3VG9wICYmIHNvdXJjZVdpZHRoID4gMCkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3
VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgSW50UmVjdChib3JkZXJJbWFnZVJl
Y3QueCgpICsgbGVmdFdpZHRoLCBib3JkZXJJbWFnZVJlY3QueSgpLCBkZXN0aW5hdGlvbldpZHRo
LCB0b3BXaWR0aCksCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1h
Z2UsIGNvbG9yU3BhY2UsIEludFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSArIGxlZnRXaWR0aCwg
Ym9yZGVySW1hZ2VSZWN0LnkoKSwgZGVzdGluYXRpb25XaWR0aCwgdG9wV2lkdGgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QobGVmdFNsaWNlLCAwLCBz
b3VyY2VXaWR0aCwgdG9wU2xpY2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEZsb2F0U2l6ZSh0b3BTaWRlU2NhbGUsIHRvcFNpZGVTY2FsZSksIChJbWFnZTo6VGls
ZVJ1bGUpaFJ1bGUsIEltYWdlOjpTdHJldGNoVGlsZSwgb3ApOwogCiAgICAgLy8gUGFpbnQgdGhl
IGJvdHRvbSBlZGdlLgogICAgIGlmIChkcmF3Qm90dG9tICYmIHNvdXJjZVdpZHRoID4gMCkKLSAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JT
cGFjZSwgSW50UmVjdChib3JkZXJJbWFnZVJlY3QueCgpICsgbGVmdFdpZHRoLCBib3JkZXJJbWFn
ZVJlY3QubWF4WSgpIC0gYm90dG9tV2lkdGgsCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJh
d1RpbGVkSW1hZ2UoaW1hZ2UsIGNvbG9yU3BhY2UsIEludFJlY3QoYm9yZGVySW1hZ2VSZWN0Lngo
KSArIGxlZnRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0Lm1heFkoKSAtIGJvdHRvbVdpZHRoLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uV2lkdGgsIGJv
dHRvbVdpZHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRS
ZWN0KGxlZnRTbGljZSwgaW1hZ2VIZWlnaHQgLSBib3R0b21TbGljZSwgc291cmNlV2lkdGgsIGJv
dHRvbVNsaWNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h
dFNpemUoYm90dG9tU2lkZVNjYWxlLCBib3R0b21TaWRlU2NhbGUpLApAQCAtMTM4Nyw3ICsxMzg4
LDcgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnROaW5lUGllY2VJbWFnZShHcmFw
aGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwKICAgICAgICAgaWYgKHZSdWxlID09IFN0cmV0
Y2hJbWFnZVJ1bGUpCiAgICAgICAgICAgICBtaWRkbGVTY2FsZUZhY3Rvci5zZXRIZWlnaHQoZGVz
dGluYXRpb25IZWlnaHQgLyBzb3VyY2VIZWlnaHQpOwogICAgICAgICAKLSAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwKKyAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZSwgY29sb3JTcGFjZSwKICAg
ICAgICAgICAgIEludFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSArIGxlZnRXaWR0aCwgYm9yZGVy
SW1hZ2VSZWN0LnkoKSArIHRvcFdpZHRoLCBkZXN0aW5hdGlvbldpZHRoLCBkZXN0aW5hdGlvbkhl
aWdodCksCiAgICAgICAgICAgICBJbnRSZWN0KGxlZnRTbGljZSwgdG9wU2xpY2UsIHNvdXJjZVdp
ZHRoLCBzb3VyY2VIZWlnaHQpLAogICAgICAgICAgICAgbWlkZGxlU2NhbGVGYWN0b3IsIChJbWFn
ZTo6VGlsZVJ1bGUpaFJ1bGUsIChJbWFnZTo6VGlsZVJ1bGUpdlJ1bGUsIG9wKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCmluZGV4IDc3NmUyNzguLmVkYmE2ODAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcApAQCAtMzExLDcgKzMxMSw3
IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mCiAgICAgICAgICAgICBMYXlvdXRVbml0IHVzYWJs
ZVdpZHRoID0gY1dpZHRoIC0gMjsKICAgICAgICAgICAgIExheW91dFVuaXQgdXNhYmxlSGVpZ2h0
ID0gY0hlaWdodCAtIDI7CiAKLSAgICAgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBtX2lt
YWdlUmVzb3VyY2UtPmltYWdlKCk7CisgICAgICAgICAgICBJbWFnZSogaW1hZ2UgPSB0b1JldGFp
bmVkTW9kZUJpdG1hcEltYWdlSWZQb3NzaWJsZShtX2ltYWdlUmVzb3VyY2UtPmltYWdlKCkuZ2V0
KCkpOwogCiAgICAgICAgICAgICBpZiAobV9pbWFnZVJlc291cmNlLT5lcnJvck9jY3VycmVkKCkg
JiYgIWltYWdlLT5pc051bGwoKSAmJiB1c2FibGVXaWR0aCA+PSBpbWFnZS0+d2lkdGgoKSAmJiB1
c2FibGVIZWlnaHQgPj0gaW1hZ2UtPmhlaWdodCgpKSB7CiAgICAgICAgICAgICAgICAgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IgPSBXZWJDb3JlOjpkZXZpY2VTY2FsZUZhY3RvcihmcmFtZSgpKTsK
QEAgLTMyOCw3ICszMjgsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZgogICAgICAgICAgICAg
ICAgIGlmIChjZW50ZXJZIDwgMCkKICAgICAgICAgICAgICAgICAgICAgY2VudGVyWSA9IDA7CiAg
ICAgICAgICAgICAgICAgaW1hZ2VPZmZzZXQgPSBMYXlvdXRTaXplKGxlZnRCb3JkZXIgKyBsZWZ0
UGFkICsgY2VudGVyWCArIDEsIHRvcEJvcmRlciArIHRvcFBhZCArIGNlbnRlclkgKyAxKTsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlKCktPmNv
bG9yU3BhY2UoKSwgSW50UmVjdChyb3VuZGVkSW50UG9pbnQocGFpbnRPZmZzZXQgKyBpbWFnZU9m
ZnNldCksIGltYWdlU2l6ZSksIENvbXBvc2l0ZVNvdXJjZU92ZXIsIHNob3VsZFJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFn
ZSwgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBJbnRSZWN0KHJvdW5kZWRJbnRQb2ludChwYWludE9m
ZnNldCArIGltYWdlT2Zmc2V0KSwgaW1hZ2VTaXplKSwgQ29tcG9zaXRlU291cmNlT3Zlciwgc2hv
dWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSk7CiAgICAgICAgICAgICAgICAgZXJyb3JQaWN0
dXJlRHJhd24gPSB0cnVlOwogICAgICAgICAgICAgfQogCkBAIC00NDIsNyArNDQyLDcgQEAgdm9p
ZCBSZW5kZXJJbWFnZTo6cGFpbnRJbnRvUmVjdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IExheW91dFJlY3QmIHJlY3QKICAgICBpZiAoIW1faW1hZ2VSZXNvdXJjZS0+aGFzSW1hZ2Uo
KSB8fCBtX2ltYWdlUmVzb3VyY2UtPmVycm9yT2NjdXJyZWQoKSB8fCBhbGlnbmVkUmVjdC53aWR0
aCgpIDw9IDAgfHwgYWxpZ25lZFJlY3QuaGVpZ2h0KCkgPD0gMCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVmUHRyPEltYWdlPiBpbWcgPSBtX2ltYWdlUmVzb3VyY2UtPmltYWdlKGFsaWduZWRS
ZWN0LndpZHRoKCksIGFsaWduZWRSZWN0LmhlaWdodCgpKTsKKyAgICBJbWFnZSogaW1nID0gdG9S
ZXRhaW5lZE1vZGVCaXRtYXBJbWFnZUlmUG9zc2libGUobV9pbWFnZVJlc291cmNlLT5pbWFnZShh
bGlnbmVkUmVjdC53aWR0aCgpLCBhbGlnbmVkUmVjdC5oZWlnaHQoKSkuZ2V0KCkpOwogICAgIGlm
ICghaW1nIHx8IGltZy0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDUwLDcgKzQ1
MCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3BlcmF0b3IgPSBpbWFnZUVsdCA/IGltYWdlRWx0LT5jb21wb3NpdGVPcGVyYXRvcigp
IDogQ29tcG9zaXRlU291cmNlT3ZlcjsKICAgICBJbWFnZSogaW1hZ2UgPSBtX2ltYWdlUmVzb3Vy
Y2UtPmltYWdlKCkuZ2V0KCk7CiAgICAgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGluZyA9IHNob3Vs
ZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQsIGltYWdlLCBpbWFnZSwgYWxpZ25lZFJlY3Quc2l6
ZSgpKTsKLSAgICBjb250ZXh0LT5kcmF3SW1hZ2UobV9pbWFnZVJlc291cmNlLT5pbWFnZShhbGln
bmVkUmVjdC53aWR0aCgpLCBhbGlnbmVkUmVjdC5oZWlnaHQoKSkuZ2V0KCksIHN0eWxlKCktPmNv
bG9yU3BhY2UoKSwgYWxpZ25lZFJlY3QsIGNvbXBvc2l0ZU9wZXJhdG9yLCBzaG91bGRSZXNwZWN0
SW1hZ2VPcmllbnRhdGlvbigpLCB1c2VMb3dRdWFsaXR5U2NhbGluZyk7CisgICAgY29udGV4dC0+
ZHJhd0ltYWdlKGltZywgc3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBhbGlnbmVkUmVjdCwgY29tcG9z
aXRlT3BlcmF0b3IsIHNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCksIHVzZUxvd1F1YWxp
dHlTY2FsaW5nKTsKIH0KIAogYm9vbCBSZW5kZXJJbWFnZTo6Ym94U2hhZG93U2hvdWxkQmVBcHBs
aWVkVG9CYWNrZ3JvdW5kKEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSBibGVlZEF2b2lkYW5jZSwg
SW5saW5lRmxvd0JveCopIGNvbnN0CkBAIC00ODEsNyArNDgxLDcgQEAgYm9vbCBSZW5kZXJJbWFn
ZTo6YmFja2dyb3VuZElzT2JzY3VyZWQoKSBjb25zdAogCiAgICAgLy8gQ2hlY2sgZm9yIGJpdG1h
cCBpbWFnZSB3aXRoIGFscGhhLgogICAgIEltYWdlKiBpbWFnZSA9IG1faW1hZ2VSZXNvdXJjZS0+
aW1hZ2UoKS5nZXQoKTsKLSAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+aXNCaXRtYXBJbWFnZSgp
IHx8IGltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKQorICAgIGlmICghaW1hZ2UgfHwgIWlt
YWdlLT5pc0JpdG1hcEltYWdlKCkgfHwgdG9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZShpbWFnZSkt
PmN1cnJlbnRGcmFtZUhhc0FscGhhKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCmluZGV4IGVlMGE0NDIuLjI5YTRmMDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC01MSw2ICs1MSw3IEBA
CiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRl
by5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJSZXRhaW5lZE1vZGVCaXRt
YXBJbWFnZS5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAi
U3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgpAQCAtMTA3Niw2ICsx
MDc3LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVJbWFnZUNvbnRlbnRzKCkK
ICAgICBpZiAoIWNhY2hlZEltYWdlLT5pc0xvYWRlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAg
ICAvLyBXZSBoYXZlIHRvIHdhaXQgdW50aWwgdGhlIGltYWdlIGlzIGZ1bGx5IGRlY29kZWQgYmVm
b3JlIHNldHRpbmcgaXQgb24gdGhlIGxheWVyLgorICAgIGlmIChpbWFnZS0+aXNCaXRtYXBJbWFn
ZSgpICYmICF0b1JldGFpbmVkTW9kZUJpdG1hcEltYWdlKGltYWdlKS0+Y3VycmVudEZyYW1lSXND
b21wbGV0ZSgpKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBUaGlzIGlzIGEgbm8tb3AgaWYg
dGhlIGxheWVyIGRvZXNuJ3QgaGF2ZSBhbiBpbm5lciBsYXllciBmb3IgdGhlIGltYWdlLgogICAg
IG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKICAgICB1cGRhdGVE
cmF3c0NvbnRlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0TWFya2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFy
a2VyLmNwcAppbmRleCAwZDJmNDhkLi4xODk5ZmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogCisjaW5jbHVkZSAiQml0
bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0xMTMwLDcgKzExMzEsNyBAQCB2
b2lkIFJlbmRlckxpc3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmZzZQogICAgICAgICBpZiAoc3R5bGUoKS0+aGlnaGxpZ2h0KCkg
IT0gbnVsbEF0b20gJiYgIXBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodChwYWludE9mZnNldCwgc3R5bGUoKS0+aGln
aGxpZ2h0KCksIHRydWUpOwogI2VuZGlmCi0gICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2lt
YWdlLT5pbWFnZSh0aGlzLCBtYXJrZXIuc2l6ZSgpKS5nZXQoKSwgc3R5bGUoKS0+Y29sb3JTcGFj
ZSgpLCBtYXJrZXIpOworICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UodG9SZXRhaW5lZE1vZGVC
aXRtYXBJbWFnZUlmUG9zc2libGUobV9pbWFnZS0+aW1hZ2UodGhpcywgbWFya2VyLnNpemUoKSku
Z2V0KCkpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIG1hcmtlcik7CiAgICAgICAgIGlmIChzZWxl
Y3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUpIHsKICAgICAgICAgICAgIExheW91dFJlY3Qg
c2VsUmVjdCA9IGxvY2FsU2VsZWN0aW9uUmVjdCgpOwogICAgICAgICAgICAgc2VsUmVjdC5tb3Zl
QnkoYm94T3JpZ2luKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAK
aW5kZXggODAzYjVhNi4uNGZjZTA3NyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
IAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgog
I2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNvbnRlbnREYXRhLmgiCiAjaW5jbHVkZSAi
Q3Vyc29yTGlzdC5oIgpAQCAtODEyLDEyICs4MTMsMTIgQEAgc3RhdGljIGJvb2wgbXVzdFJlcGFp
bnRGaWxsTGF5ZXJzKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEZpbGxMYXll
cioKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyT2JqZWN0Ojpib3JkZXJJbWFn
ZUlzTG9hZGVkQW5kQ2FuQmVSZW5kZXJlZCgpIGNvbnN0Citib29sIFJlbmRlck9iamVjdDo6Ym9y
ZGVySW1hZ2VDYW5CZVJlbmRlcmVkQW5kSXNEZWNvZGVkQ29tcGxldGVseSgpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKHN0eWxlKCktPmhhc0JvcmRlcigpKTsKIAogICAgIFN0eWxlSW1hZ2UqIGJvcmRl
ckltYWdlID0gc3R5bGUoKS0+Ym9yZGVySW1hZ2UoKS5pbWFnZSgpOwotICAgIHJldHVybiBib3Jk
ZXJJbWFnZSAmJiBib3JkZXJJbWFnZS0+Y2FuUmVuZGVyKHRoaXMsIHN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKSkgJiYgYm9yZGVySW1hZ2UtPmlzTG9hZGVkKCk7CisgICAgcmV0dXJuIGJvcmRlcklt
YWdlICYmIGJvcmRlckltYWdlLT5jYW5SZW5kZXIodGhpcywgc3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpKSAmJiBpc0RlY29kZWRDb21wbGV0ZWx5SWZCaXRtYXBJbWFnZUFzV2VsbEFzSXNMb2FkZWQo
Ym9yZGVySW1hZ2UsIHRoaXMpOwogfQogCiBib29sIFJlbmRlck9iamVjdDo6bXVzdFJlcGFpbnRC
YWNrZ3JvdW5kT3JCb3JkZXIoKSBjb25zdApAQCAtODMzLDcgKzgzNCw3IEBAIGJvb2wgUmVuZGVy
T2JqZWN0OjptdXN0UmVwYWludEJhY2tncm91bmRPckJvcmRlcigpIGNvbnN0CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAKICAgICAvLyBPdXIgZmlsbCBsYXllcnMgYXJlIG9rLiAgTGV0J3Mg
Y2hlY2sgYm9yZGVyLgotICAgIGlmIChzdHlsZSgpLT5oYXNCb3JkZXIoKSAmJiBib3JkZXJJbWFn
ZUlzTG9hZGVkQW5kQ2FuQmVSZW5kZXJlZCgpKQorICAgIGlmIChzdHlsZSgpLT5oYXNCb3JkZXIo
KSAmJiBib3JkZXJJbWFnZUNhbkJlUmVuZGVyZWRBbmRJc0RlY29kZWRDb21wbGV0ZWx5KCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjY4Niw3ICsyNjg3
LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmNvbGxlY3REYXNoYm9hcmRSZWdpb25zKFZlY3RvcjxE
YXNoYm9hcmRSZWdpb25WYWx1ZT4mIHJlZ2lvbnMKIH0KICNlbmRpZgogCi1ib29sIFJlbmRlck9i
amVjdDo6d2lsbFJlbmRlckltYWdlKENhY2hlZEltYWdlKikKK2Jvb2wgUmVuZGVyT2JqZWN0Ojp3
aWxsUmVuZGVySW1hZ2UoKSBjb25zdAogewogICAgIC8vIFdpdGhvdXQgdmlzaWJpbGl0eSB3ZSB3
b24ndCByZW5kZXIgKGFuZCB0aGVyZWZvcmUgZG9uJ3QgY2FyZSBhYm91dCBhbmltYXRpb24pLgog
ICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKQEAgLTI2OTgsNyArMjY5
OSwxMSBAQCBib29sIFJlbmRlck9iamVjdDo6d2lsbFJlbmRlckltYWdlKENhY2hlZEltYWdlKikK
IAogICAgIC8vIElmIHdlJ3JlIG5vdCBpbiBhIHdpbmRvdyAoaS5lLiwgd2UncmUgZG9ybWFudCBm
cm9tIGJlaW5nIHB1dCBpbiB0aGUgYi9mIGNhY2hlIG9yIGluIGEgYmFja2dyb3VuZCB0YWIpCiAg
ICAgLy8gdGhlbiB3ZSBkb24ndCB3YW50IHRvIHJlbmRlciBlaXRoZXIuCi0gICAgcmV0dXJuICFk
b2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpICYmICFkb2N1bWVudCgpLT52aWV3KCktPmlzT2Zmc2Ny
ZWVuKCk7CisgICAgaWYgKGRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkgfHwgZG9jdW1lbnQoKS0+
dmlldygpLT5pc09mZnNjcmVlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJ
ZiBhIHJlbmRlcmVyIGlzIG91dHNpZGUgdGhlIHZpZXdwb3J0LCB3ZSB3b24ndCByZW5kZXIuCisg
ICAgcmV0dXJuIHZpZXdSZWN0KCkuaW50ZXJzZWN0cyhhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1Jl
Y3QoKSk7CiB9CiAKIGludCBSZW5kZXJPYmplY3Q6Om1heGltYWxPdXRsaW5lU2l6ZShQYWludFBo
YXNlIHApIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXgg
NjBjNTY5MC4uZWE4YWYwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aApAQCAtNTE0LDcgKzUxNCw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0xheWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9iaXRmaWVsZHMuaGFzTGF5ZXIoKTsgfQogICAgIAogICAgIGJvb2wgaGFzQm94
RGVjb3JhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxkcy5wYWludEJhY2tncm91bmQo
KTsgfQotICAgIGJvb2wgYm9yZGVySW1hZ2VJc0xvYWRlZEFuZENhbkJlUmVuZGVyZWQoKSBjb25z
dDsKKyAgICBib29sIGJvcmRlckltYWdlQ2FuQmVSZW5kZXJlZEFuZElzRGVjb2RlZENvbXBsZXRl
bHkoKSBjb25zdDsKICAgICBib29sIG11c3RSZXBhaW50QmFja2dyb3VuZE9yQm9yZGVyKCkgY29u
c3Q7CiAgICAgYm9vbCBoYXNCYWNrZ3JvdW5kKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aGFz
QmFja2dyb3VuZCgpOyB9CiAgICAgYm9vbCBuZWVkc0xheW91dCgpIGNvbnN0CkBAIC04NjcsNyAr
ODY3LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChDYWNoZWRJ
bWFnZSosIGNvbnN0IEludFJlY3QqID0gMCk7CiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdl
ZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCkgeyB9Ci0gICAgdmlydHVhbCBi
b29sIHdpbGxSZW5kZXJJbWFnZShDYWNoZWRJbWFnZSopOworICAgIHZpcnR1YWwgYm9vbCB3aWxs
UmVuZGVySW1hZ2UoKSBjb25zdDsKIAogICAgIHZvaWQgc2VsZWN0aW9uU3RhcnRFbmQoaW50JiBz
cG9zLCBpbnQmIGVwb3MpIGNvbnN0OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvRmlsbExheWVyLmNwcAppbmRleCAxOTVhMDVjLi41Njk1MzFkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmNwcApAQCAtMjIsNiArMjIsOSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZpbGxMYXllci5oIgogCisjaW5jbHVkZSAi
Qml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBzdHJ1Y3QgU2FtZVNpemVBc0ZpbGxMYXllciB7CkBAIC0yNjksMTEgKzI3Miwx
MSBAQCBib29sIEZpbGxMYXllcjo6Y29udGFpbnNJbWFnZShTdHlsZUltYWdlKiBzKSBjb25zdAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBGaWxsTGF5ZXI6OmltYWdlc0FyZUxvYWRlZCgp
IGNvbnN0Citib29sIEZpbGxMYXllcjo6aW1hZ2VzQXJlRGVjb2RlZENvbXBsZXRlbHkoUmVuZGVy
T2JqZWN0KiByZW5kZXJlcikgY29uc3QKIHsKICAgICBjb25zdCBGaWxsTGF5ZXIqIGN1cnI7CiAg
ICAgZm9yIChjdXJyID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPm5leHQoKSkgewotICAgICAg
ICBpZiAoY3Vyci0+bV9pbWFnZSAmJiAhY3Vyci0+bV9pbWFnZS0+aXNMb2FkZWQoKSkKKyAgICAg
ICAgaWYgKGN1cnItPm1faW1hZ2UgJiYgIWlzRGVjb2RlZENvbXBsZXRlbHlJZkJpdG1hcEltYWdl
QXNXZWxsQXNJc0xvYWRlZChjdXJyLT5tX2ltYWdlLmdldCgpLCByZW5kZXJlcikpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvRmlsbExheWVyLmgKaW5kZXggN2YxY2ViMS4uZWI3YmVmZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuaApAQCAtMzQsNiArMzQsOCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIFJlbmRlck9iamVjdDsKKwogc3RydWN0IEZpbGxTaXplIHsK
ICAgICBGaWxsU2l6ZSgpCiAgICAgICAgIDogdHlwZShTaXplTGVuZ3RoKQpAQCAtMTI4LDcgKzEz
MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBib29sIGNvbnRhaW5zSW1hZ2UoU3R5bGVJbWFn
ZSopIGNvbnN0OwotICAgIGJvb2wgaW1hZ2VzQXJlTG9hZGVkKCkgY29uc3Q7CisgICAgYm9vbCBp
bWFnZXNBcmVEZWNvZGVkQ29tcGxldGVseShSZW5kZXJPYmplY3QqKSBjb25zdDsKIAogICAgIGJv
b2wgaGFzSW1hZ2UoKSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAKaW5kZXggNTZiZTVjZC4uYTE5NmU3NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAKQEAgLTM4LDYg
KzM4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jl
c291cmNlQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuaCIK
KyNpbmNsdWRlICJSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIlNWR0ltYWdl
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZl
QXNwZWN0UmF0aW8uaCIKQEAgLTEyNywxNCArMTI4LDE0IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6
OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYpCiAgICAgICAg
ICAgICBTVkdSZW5kZXJpbmdDb250ZXh0IHJlbmRlcmluZ0NvbnRleHQodGhpcywgY2hpbGRQYWlu
dEluZm8pOwogCiAgICAgICAgICAgICBpZiAocmVuZGVyaW5nQ29udGV4dC5pc1JlbmRlcmluZ1By
ZXBhcmVkKCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gbV9pbWFn
ZVJlc291cmNlLT5pbWFnZSgpOworICAgICAgICAgICAgICAgIEltYWdlKiBpbWFnZSA9IHRvUmV0
YWluZWRNb2RlQml0bWFwSW1hZ2VJZlBvc3NpYmxlKG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2UoKS5n
ZXQoKSk7CiAgICAgICAgICAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gbV9vYmplY3RCb3Vu
ZGluZ0JveDsKICAgICAgICAgICAgICAgICBGbG9hdFJlY3Qgc3JjUmVjdCgwLCAwLCBpbWFnZS0+
d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpKTsKIAogICAgICAgICAgICAgICAgIFNWR0ltYWdlRWxl
bWVudCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4obm9kZSgp
KTsKICAgICAgICAgICAgICAgICBpbWFnZUVsZW1lbnQtPnByZXNlcnZlQXNwZWN0UmF0aW8oKS50
cmFuc2Zvcm1SZWN0KGRlc3RSZWN0LCBzcmNSZWN0KTsKIAotICAgICAgICAgICAgICAgIGNoaWxk
UGFpbnRJbmZvLmNvbnRleHQtPmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgZGVzdFJlY3QsIHNyY1JlY3QpOworICAgICAgICAgICAgICAgIGNoaWxkUGFpbnRJbmZv
LmNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3Qs
IHNyY1JlY3QpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggNzU5NjczZS4uMDBhZmYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOSBAQAorMjAxMi0wNy0wMyAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBj
b21wYW55MTAwLm5ldD4KKworICAgICAgICBQcmVwYXJlIGZvciBwYXJhbGxlbCBpbWFnZSBkZWNv
ZGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA0
NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbWFn
ZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4IHJldHVybnMgSW1hZ2VGcmFtZURhdGEgaW5zdGVh
ZCBvZgorICAgICAgICBOYXRpdmVJbWFnZVB0ciwgc28gSSBhbWVuZGVkIFdlYkltYWdlQ0cgYW5k
IFdlYkltYWdlU2tpYSB0byB1c2UKKyAgICAgICAgY2hhbmdlZCBJbWFnZVNvdXJjZSBjb3JyZWN0
bHkuCisKKyAgICAgICAgKiBzcmMvV2ViSW1hZ2VDRy5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkltYWdlOjpmcm9tRGF0YSk6CisgICAgICAgICogc3JjL1dlYkltYWdlU2tpYS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkltYWdlOjpmcm9tRGF0YSk6CisKIDIwMTItMDctMDkgIE1hdHQgRmFs
a2VuaGFnZW4gIDxmYWxrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBFTkFCTEVfRElB
TE9HX0VMRU1FTlQgYW5kIHNrZWxldG9uIGZpbGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJbWFnZUNHLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkltYWdlQ0cuY3BwCmluZGV4IDI0MmE2ODMuLmNkZTEzOWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkltYWdlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkltYWdlQ0cuY3BwCkBAIC03Niw3ICs3Niw4IEBAIFdlYkltYWdlIFdl
YkltYWdlOjpmcm9tRGF0YShjb25zdCBXZWJEYXRhJiBkYXRhLCBjb25zdCBXZWJTaXplJiBkZXNp
cmVkU2l6ZSkKICAgICAgICAgfQogICAgIH0KIAotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBm
cmFtZShBZG9wdENGLCBzb3VyY2UuY3JlYXRlRnJhbWVBdEluZGV4KGluZGV4KSk7CisgICAgSW1h
Z2VGcmFtZURhdGEgaW1hZ2VGcmFtZURhdGEgPSBzb3VyY2UucmVxdWVzdEZyYW1lQXRJbmRleChp
bmRleCk7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGZyYW1lKEFkb3B0Q0YsIGltYWdlRnJh
bWVEYXRhLm1fZnJhbWUpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBXZWJJbWFn
ZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFnZVNr
aWEuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VTa2lhLmNwcAppbmRl
eCAzNmRhYmFjLi41ZDg2NGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJbWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklt
YWdlU2tpYS5jcHAKQEAgLTc3LDcgKzc3LDggQEAgV2ViSW1hZ2UgV2ViSW1hZ2U6OmZyb21EYXRh
KGNvbnN0IFdlYkRhdGEmIGRhdGEsIGNvbnN0IFdlYlNpemUmIGRlc2lyZWRTaXplKQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4gZnJhbWUgPSBhZG9wdFB0
cihzb3VyY2UuY3JlYXRlRnJhbWVBdEluZGV4KGluZGV4KSk7CisgICAgSW1hZ2VGcmFtZURhdGEg
aW1hZ2VGcmFtZURhdGEgPSBzb3VyY2UucmVxdWVzdEZyYW1lQXRJbmRleChpbmRleCk7CisgICAg
T3duUHRyPE5hdGl2ZUltYWdlU2tpYT4gZnJhbWUgPSBhZG9wdFB0cihpbWFnZUZyYW1lRGF0YS5t
X2ZyYW1lKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gV2ViSW1hZ2UoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0
Mi9DTWFrZUxpc3RzLnR4dAppbmRleCAxZDQ3MDg4Li4xMzMwNTI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3Rz
LnR4dApAQCAtMTAyLDcgKzEwMiw2IEBAIFNFVChXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMK
IFNFVChXZWJLaXQyX1NPVVJDRVMKICAgICBQbGF0Zm9ybS9Mb2dnaW5nLmNwcAogICAgIFBsYXRm
b3JtL01vZHVsZS5jcHAKLSAgICBQbGF0Zm9ybS9Xb3JrUXVldWUuY3BwCiAKICAgICBQbGF0Zm9y
bS9Db3JlSVBDL0FyZ3VtZW50Q29kZXJzLmNwcAogICAgIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1l
bnREZWNvZGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDUxN2Y1YzcuLjkxM2M0NzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzMiBAQAorMjAxMi0wNy0wOSAgS3dhbmcgWXVsIFNlbyAgPHNreXVsQGNvbXBh
bnkxMDAubmV0PgorCisgICAgICAgIE1vdmUgV29ya1F1ZXVlIHRvIFdURgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA3ODAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHksIFdvcmtRdWV1ZSBp
cyBpbiBXZWJLaXQyLiBCeSBtb3ZpbmcgV29ya1F1ZXVlIGFuZAorICAgICAgICBQbGF0Zm9ybVBy
b2Nlc3NJZGVudGlmaWVyIHRvIFdURiwgV2ViQ29yZSBjb2RlIGNhbiB1c2UgaXQuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBpcyByZXF1aXJlZCBmb3IgcGFyYWxsZWwgaW1hZ2UgZGVjb2RlcnMgYmVj
YXVzZQorICAgICAgICBXb3JrUXVldWUgaXMgdXNlZCB0byBtYWtlIGltYWdlIGRlY29kaW5nIG9m
ZiB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVj
dGlvbi5oOgorICAgICAgICAoQ29ubmVjdGlvbik6CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQ
Qy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcDoKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246
OnNldFNob3VsZENsb3NlQ29ubmVjdGlvbk9uUHJvY2Vzc1Rlcm1pbmF0aW9uKToKKyAgICAgICAg
KiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuY3BwOgorICAgICAgICAqIFVJUHJvY2Vz
cy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNo
ZXIvVGhyZWFkTGF1bmNoZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFdlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3aW4vV2ViS2l0Mi52Y3By
b2o6CisKIDIwMTItMDctMDkgIE1hdHQgRmFsa2VuaGFnZW4gIDxmYWxrZW5AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIEFkZCBFTkFCTEVfRElBTE9HX0VMRU1FTlQgYW5kIHNrZWxldG9uIGZpbGVz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA2YzA2ZDVhLi4zZGQyZjY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI1Myw3ICsyNTMsNiBAQCB3ZWJraXQyX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0
aW9uVW5peC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Mb2dnaW5nR3RrLmNw
cCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL01vZHVsZUd0ay5jcHAgXAotCVNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Mb2dnaW5nLmNwcCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2lu
Zy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Nb2R1bGUuY3BwIFwKQEAgLTI2MSw4ICsy
NjAsNiBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1Bs
YXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hh
cmVkTWVtb3J5LmggXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5
VW5peC5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAgXAotCVNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbHVn
aW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1Bs
dWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmggXAogCVNvdXJjZS9XZWJLaXQyL1Bs
dWdpblByb2Nlc3MvUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBcCkBAIC0xMTY5LDExICsx
MTY2LDggQEAgd2Via2l0Ml9wbHVnaW5fcHJvY2Vzc19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Nb2R1bGUuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9N
b2R1bGUuaCBcCi0JU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmNwcCBcCi0JU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmggXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL1NoYXJlZE1lbW9yeS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvTW9kdWxl
R3RrLmNwcCBcCi0JU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAg
XAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHAgXAog
CVNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcCBc
CiAJU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24u
aCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCmluZGV4IDc3
M2Y2ZTAuLmEwMmY5MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29u
bmVjdGlvbi5oCkBAIC0zMiwxMSArMzIsMTEgQEAKICNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIu
aCIKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNsdWRlICJNZXNzYWdlSUQuaCIKLSNpbmNs
dWRlICJXb3JrUXVldWUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAKICNpZiBPUyhEQVJXSU4p
CiAjaW5jbHVkZSA8bWFjaC9tYWNoX3BvcnQuaD4KQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgUVNv
Y2tldE5vdGlmaWVyOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShFRkwpCi0jaW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5o
IgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmg+CiAjZW5kaWYKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTI3LDcgKzEyNyw3IEBAIHB1YmxpYzoKICNpZiBPUyhE
QVJXSU4pCiAgICAgdm9pZCBzZXRTaG91bGRDbG9zZUNvbm5lY3Rpb25Pbk1hY2hFeGNlcHRpb25z
KCk7CiAjZWxpZiBQTEFURk9STShRVCkKLSAgICB2b2lkIHNldFNob3VsZENsb3NlQ29ubmVjdGlv
bk9uUHJvY2Vzc1Rlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcik7
CisgICAgdm9pZCBzZXRTaG91bGRDbG9zZUNvbm5lY3Rpb25PblByb2Nlc3NUZXJtaW5hdGlvbihQ
bGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyKTsKICNlbmRpZgogCiAgICAgdm9pZCBzZXRPbmx5U2Vu
ZE1lc3NhZ2VzQXNEaXNwYXRjaFdoZW5XYWl0aW5nRm9yU3luY1JlcGx5V2hlblByb2Nlc3NpbmdT
dWNoQU1lc3NhZ2UoYm9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9D
b3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcAppbmRleCA4ODVlNDk1Li40OWE1MDg5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlv
blVuaXguY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25u
ZWN0aW9uVW5peC5jcHAKQEAgLTU1Nyw3ICs1NTcsNyBAQCBib29sIENvbm5lY3Rpb246OnNlbmRP
dXRnb2luZ01lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgUGFzc093blB0cjxBcmd1bWVudEVu
YwogfQogCiAjaWYgUExBVEZPUk0oUVQpCi12b2lkIENvbm5lY3Rpb246OnNldFNob3VsZENsb3Nl
Q29ubmVjdGlvbk9uUHJvY2Vzc1Rlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRl
bnRpZmllciBwcm9jZXNzKQordm9pZCBDb25uZWN0aW9uOjpzZXRTaG91bGRDbG9zZUNvbm5lY3Rp
b25PblByb2Nlc3NUZXJtaW5hdGlvbihQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3Mp
CiB7CiAgICAgbV9jb25uZWN0aW9uUXVldWUuZGlzcGF0Y2hPblRlcm1pbmF0aW9uKHByb2Nlc3Ms
IFdURjo6YmluZCgmQ29ubmVjdGlvbjo6Y29ubmVjdGlvbkRpZENsb3NlLCB0aGlzKSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlm
aWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2ZWNiZTguLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBQbGF0Zm9y
bVByb2Nlc3NJZGVudGlmaWVyX2gKLSNkZWZpbmUgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcl9o
Ci0KLSNpZiBQTEFURk9STShRVCkKLWNsYXNzIFFQcm9jZXNzOwotI2VsaWYgUExBVEZPUk0oRUZM
KQotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0j
aWYgUExBVEZPUk0oTUFDKQotdHlwZWRlZiBwaWRfdCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVy
OwotI2VsaWYgUExBVEZPUk0oV0lOKQotdHlwZWRlZiBIQU5ETEUgUGxhdGZvcm1Qcm9jZXNzSWRl
bnRpZmllcjsKLSNlbGlmIFBMQVRGT1JNKFFUKQotdHlwZWRlZiBRUHJvY2VzcyogUGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllcjsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSNpZmRlZiBHX09TX1dJTjMy
Ci10eXBlZGVmIHZvaWQqIEdQaWQ7Ci0jZWxzZQotdHlwZWRlZiBpbnQgR1BpZDsKLSNlbmRpZgot
dHlwZWRlZiBHUGlkIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7Ci0jZWxpZiBQTEFURk9STShF
RkwpCi10eXBlZGVmIHBpZF90IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7Ci0jZW5kaWYKLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0IAotCi0jZW5kaWYgLy8gUGxhdGZvcm1Qcm9jZXNzSWRlbnRp
Zmllcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuY3Bw
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNmJjZGQyMi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Xb3JrUXVldWUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKLQotV29y
a1F1ZXVlOjpXb3JrUXVldWUoY29uc3QgY2hhciogbmFtZSkKLSAgICA6IG1faXNWYWxpZCh0cnVl
KQotewotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZShuYW1lKTsKLX0KLQotV29ya1F1ZXVlOjp+V29y
a1F1ZXVlKCkKLXsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1faXNWYWxpZE11dGV4KTsKLSAgICBBU1NFUlQoIW1faXNWYWxpZCk7Ci0jZW5kaWYKLX0KLQot
dm9pZCBXb3JrUXVldWU6OmludmFsaWRhdGUoKQotewotICAgIHsKLSAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1faXNWYWxpZE11dGV4KTsKLSAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Ci0g
ICAgfQotCi0gICAgcGxhdGZvcm1JbnZhbGlkYXRlKCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dv
cmtRdWV1ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjMwZGMwLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oCisrKyAvZGV2L251bGwK
QEAgLTEsMjEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9y
b2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIFdvcmtRdWV1ZV9oCi0jZGVmaW5lIFdvcmtRdWV1ZV9oCi0KLSNpZiBPUyhEQVJXSU4pCi0j
aWYgSEFWRShESVNQQVRDSF9IKQotI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+Ci0jZW5k
aWYKLSNlbmRpZgotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvRnVu
Y3Rpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLSNpZiAoUExBVEZPUk0oUVQpICYm
ICFPUyhEQVJXSU4pKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKLSNpbmNsdWRl
ICJQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgiCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFFU
KSAmJiAhT1MoREFSV0lOKQotI2luY2x1ZGUgPFFTb2NrZXROb3RpZmllcj4KLWNsYXNzIFFPYmpl
Y3Q7Ci1jbGFzcyBRVGhyZWFkOwotI2VsaWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dSZWZQdHIuaD4KLXR5cGVkZWYgZ2Jvb2xlYW4gKCpHU291cmNlRnVuYykgKGdwb2lu
dGVyIGRhdGEpOwotI2VsaWYgUExBVEZPUk0oRUZMKQotI2luY2x1ZGUgPEVjb3JlLmg+Ci0jZW5k
aWYKLQotY2xhc3MgV29ya1F1ZXVlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXb3JrUXVl
dWUpOwotCi1wdWJsaWM6Ci0gICAgZXhwbGljaXQgV29ya1F1ZXVlKGNvbnN0IGNoYXIqIG5hbWUp
OwotICAgIH5Xb3JrUXVldWUoKTsKLQotICAgIC8vIFdpbGwgZGlzcGF0Y2ggdGhlIGdpdmVuIGZ1
bmN0aW9uIHRvIHJ1biBhcyBzb29uIGFzIHBvc3NpYmxlLgotICAgIHZvaWQgZGlzcGF0Y2goY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYpOwotCi0gICAgLy8gV2lsbCBkaXNwYXRjaCB0aGUgZ2l2ZW4g
ZnVuY3Rpb24gYWZ0ZXIgdGhlIGdpdmVuIGRlbGF5IChpbiBzZWNvbmRzKS4KLSAgICB2b2lkIGRp
c3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgZG91YmxlIGRlbGF5KTsK
LQotICAgIHZvaWQgaW52YWxpZGF0ZSgpOwotCi0jaWYgT1MoREFSV0lOKQotICAgIGVudW0gTWFj
aFBvcnRFdmVudFR5cGUgewotICAgICAgICAvLyBGaXJlZCB3aGVuIHRoZXJlIGlzIGRhdGEgb24g
dGhlIGdpdmVuIHJlY2VpdmUgcmlnaHQuCi0gICAgICAgIE1hY2hQb3J0RGF0YUF2YWlsYWJsZSwK
LSAgICAgICAgCi0gICAgICAgIC8vIEZpcmVkIHdoZW4gdGhlIHJlY2VpdmUgcmlnaHQgZm9yIHRo
aXMgc2VuZCByaWdodCBoYXMgYmVlbiBkZXN0cm95ZWQuCi0gICAgICAgIE1hY2hQb3J0RGVhZE5h
bWVOb3RpZmljYXRpb24KLSAgICB9OwotICAgIAotICAgIC8vIFdpbGwgZXhlY3V0ZSB0aGUgZ2l2
ZW4gZnVuY3Rpb24gd2hlbmV2ZXIgdGhlIGdpdmVuIG1hY2ggcG9ydCBldmVudCBmaXJlcy4KLSAg
ICAvLyBOb3RlIHRoYXQgdGhpcyB3aWxsIGFkb3B0IHRoZSBtYWNoIHBvcnQgYW5kIGRlc3Ryb3kg
aXQgd2hlbiB0aGUgd29yayBxdWV1ZSBpcyBpbnZhbGlkYXRlZC4KLSAgICB2b2lkIHJlZ2lzdGVy
TWFjaFBvcnRFdmVudEhhbmRsZXIobWFjaF9wb3J0X3QsIE1hY2hQb3J0RXZlbnRUeXBlLCBjb25z
dCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhh
bmRsZXIobWFjaF9wb3J0X3QpOwotI2VsaWYgUExBVEZPUk0oV0lOKQotICAgIHZvaWQgcmVnaXN0
ZXJIYW5kbGUoSEFORExFLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0gICAgdm9pZCB1bnJl
Z2lzdGVyQW5kQ2xvc2VIYW5kbGUoSEFORExFKTsKLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgIFFT
b2NrZXROb3RpZmllciogcmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50LCBRU29ja2V0Tm90
aWZpZXI6OlR5cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKLSAgICB2b2lkIGRpc3BhdGNo
T25UZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIsIGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mKTsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSAgICB2b2lkIHJlZ2lzdGVy
RXZlbnRTb3VyY2VIYW5kbGVyKGludCwgaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0g
ICAgdm9pZCB1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCk7Ci0gICAgdm9pZCBkaXNw
YXRjaE9uVGVybWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLCBjb25z
dCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0jZWxpZiBQTEFURk9STShFRkwpCi0gICAgdm9pZCByZWdp
c3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKLSAg
ICB2b2lkIHVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50KTsKLSNlbmRpZgotCi1wcml2
YXRlOgotICAgIC8vIEZJWE1FOiBVc2UgYW4gYXRvbWljIGJvb2xlYW4gaGVyZSBpbnN0ZWFkLgot
ICAgIE11dGV4IG1faXNWYWxpZE11dGV4OwotICAgIGJvb2wgbV9pc1ZhbGlkOwotCi0gICAgdm9p
ZCBwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSk7Ci0gICAgdm9pZCBwbGF0Zm9y
bUludmFsaWRhdGUoKTsKLQotI2lmIE9TKERBUldJTikKLSNpZiBIQVZFKERJU1BBVENIX0gpCi0g
ICAgc3RhdGljIHZvaWQgZXhlY3V0ZUZ1bmN0aW9uKHZvaWQqKTsKLSAgICBNdXRleCBtX2V2ZW50
U291cmNlc011dGV4OwotICAgIGNsYXNzIEV2ZW50U291cmNlOwotICAgIEhhc2hNYXA8bWFjaF9w
b3J0X3QsIEV2ZW50U291cmNlKj4gbV9ldmVudFNvdXJjZXM7Ci0gICAgZGlzcGF0Y2hfcXVldWVf
dCBtX2Rpc3BhdGNoUXVldWU7Ci0jZW5kaWYKLSNlbGlmIFBMQVRGT1JNKFdJTikKLSAgICBjbGFz
cyBXb3JrSXRlbVdpbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxXb3JrSXRlbVdpbj4g
ewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya0l0ZW1XaW4+IGNy
ZWF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7Ci0gICAgICAgIHZpcnR1
YWwgfldvcmtJdGVtV2luKCk7Ci0KLSAgICAgICAgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24o
KSB7IHJldHVybiBtX2Z1bmN0aW9uOyB9Ci0gICAgICAgIFdvcmtRdWV1ZSogcXVldWUoKSBjb25z
dCB7IHJldHVybiBtX3F1ZXVlOyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFdvcmtJdGVt
V2luKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mLCBXb3JrUXVldWUqKTsKLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKLSAgICAgICAgV29ya1F1ZXVl
KiBtX3F1ZXVlOwotICAgIH07Ci0KLSAgICBjbGFzcyBIYW5kbGVXb3JrSXRlbSA6IHB1YmxpYyBX
b3JrSXRlbVdpbiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIYW5k
bGVXb3JrSXRlbT4gY3JlYXRlQnlBZG9wdGluZ0hhbmRsZShIQU5ETEUsIGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mLCBXb3JrUXVldWUqKTsKLSAgICAgICAgdmlydHVhbCB+SGFuZGxlV29ya0l0ZW0o
KTsKLQotICAgICAgICB2b2lkIHNldFdhaXRIYW5kbGUoSEFORExFIHdhaXRIYW5kbGUpIHsgbV93
YWl0SGFuZGxlID0gd2FpdEhhbmRsZTsgfQotICAgICAgICBIQU5ETEUgd2FpdEhhbmRsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fd2FpdEhhbmRsZTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgSGFu
ZGxlV29ya0l0ZW0oSEFORExFLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7
Ci0KLSAgICAgICAgSEFORExFIG1faGFuZGxlOwotICAgICAgICBIQU5ETEUgbV93YWl0SGFuZGxl
OwotICAgIH07Ci0KLSAgICBzdGF0aWMgdm9pZCBDQUxMQkFDSyBoYW5kbGVDYWxsYmFjayh2b2lk
KiBjb250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpOwotICAgIHN0YXRpYyB2b2lkIENB
TExCQUNLIHRpbWVyQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQk9PTEVBTiB0aW1lck9yV2FpdEZp
cmVkKTsKLSAgICBzdGF0aWMgRFdPUkQgV0lOQVBJIHdvcmtUaHJlYWRDYWxsYmFjayh2b2lkKiBj
b250ZXh0KTsKLQotICAgIGJvb2wgdHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKTsKLSAgICB2b2lk
IHVucmVnaXN0ZXJBc1dvcmtUaHJlYWQoKTsKLSAgICB2b2lkIHBlcmZvcm1Xb3JrT25SZWdpc3Rl
cmVkV29ya1RocmVhZCgpOwotCi0gICAgc3RhdGljIHZvaWQgdW5yZWdpc3RlcldhaXRBbmREZXN0
cm95SXRlbVNvb24oUGFzc1JlZlB0cjxIYW5kbGVXb3JrSXRlbT4pOwotICAgIHN0YXRpYyBEV09S
RCBXSU5BUEkgdW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbUNhbGxiYWNrKHZvaWQqIGNvbnRl
eHQpOwotCi0gICAgdm9sYXRpbGUgTE9ORyBtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQ7Ci0KLSAg
ICBNdXRleCBtX3dvcmtJdGVtUXVldWVMb2NrOwotICAgIFZlY3RvcjxSZWZQdHI8V29ya0l0ZW1X
aW4+ID4gbV93b3JrSXRlbVF1ZXVlOwotCi0gICAgTXV0ZXggbV9oYW5kbGVzTG9jazsKLSAgICBI
YXNoTWFwPEhBTkRMRSwgUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiA+IG1faGFuZGxlczsKLQotICAg
IEhBTkRMRSBtX3RpbWVyUXVldWU7Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICBjbGFzcyBXb3Jr
SXRlbVF0OwotICAgIFFUaHJlYWQqIG1fd29ya1RocmVhZDsKLSAgICBmcmllbmQgY2xhc3MgV29y
a0l0ZW1RdDsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSAgICBzdGF0aWMgdm9pZCBzdGFydFdvcmtR
dWV1ZVRocmVhZChXb3JrUXVldWUqKTsKLSAgICB2b2lkIHdvcmtRdWV1ZVRocmVhZEJvZHkoKTsK
LSAgICB2b2lkIGRpc3BhdGNoT25Tb3VyY2UoR1NvdXJjZSosIGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mLCBHU291cmNlRnVuYyk7Ci0KLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya1F1ZXVlVGhy
ZWFkOwotICAgIEdSZWZQdHI8R01haW5Db250ZXh0PiBtX2V2ZW50Q29udGV4dDsKLSAgICBNdXRl
eCBtX2V2ZW50TG9vcExvY2s7Ci0gICAgR1JlZlB0cjxHTWFpbkxvb3A+IG1fZXZlbnRMb29wOwot
ICAgIE11dGV4IG1fZXZlbnRTb3VyY2VzTG9jazsKLSAgICBjbGFzcyBFdmVudFNvdXJjZTsKLSAg
ICBIYXNoTWFwPGludCwgVmVjdG9yPEV2ZW50U291cmNlKj4gPiBtX2V2ZW50U291cmNlczsKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8aW50LCBWZWN0b3I8RXZlbnRTb3VyY2UqPiA+OjppdGVyYXRvciBF
dmVudFNvdXJjZUl0ZXJhdG9yOyAKLSNlbGlmIFBMQVRGT1JNKEVGTCkKLSAgICBmZF9zZXQgbV9m
aWxlRGVzY3JpcHRvclNldDsKLSAgICBpbnQgbV9tYXhGaWxlRGVzY3JpcHRvcjsKLSAgICBpbnQg
bV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOwotICAgIGludCBtX3dyaXRlVG9QaXBlRGVzY3JpcHRv
cjsKLSAgICBib29sIG1fdGhyZWFkTG9vcDsKLQotICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+
ID4gbV93b3JrSXRlbVF1ZXVlOwotICAgIE11dGV4IG1fd29ya0l0ZW1RdWV1ZUxvY2s7Ci0KLSAg
ICBpbnQgbV9zb2NrZXREZXNjcmlwdG9yOwotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9zb2NrZXRF
dmVudEhhbmRsZXI7Ci0KLSAgICBIYXNoTWFwPGludCwgT3duUHRyPEVjb3JlX1RpbWVyPiA+IG1f
dGltZXJzOwotCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvVGhyZWFkKGNvbnN0IGNoYXIqKTsKLSAg
ICBzdGF0aWMgdm9pZCogd29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSopOwotICAgIHZvaWQgcGVy
Zm9ybVdvcmsoKTsKLSAgICB2b2lkIHBlcmZvcm1GaWxlRGVzY3JpcHRvcldvcmsoKTsKLSAgICBz
dGF0aWMgYm9vbCB0aW1lckZpcmVkKHZvaWQqKTsKLSNlbmRpZgotfTsKLQotI2VuZGlmIC8vIFdv
cmtRdWV1ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1
ZXVlRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWZmZWRmLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTczICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldvcmtRdWV1ZS5o
IgotCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotY2xhc3MgVGltZXJXb3JrSXRlbSB7
Ci1wdWJsaWM6Ci0gICAgVGltZXJXb3JrSXRlbShpbnQgdGltZXJJRCwgY29uc3QgRnVuY3Rpb248
dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUpCi0gICAgICAgIDogbV9mdW5jdGlv
bihmdW5jdGlvbikKLSAgICAgICAgLCBtX3F1ZXVlKHF1ZXVlKQotICAgICAgICAsIG1fdGltZXJJ
RCh0aW1lcklEKQotICAgIHsKLSAgICB9Ci0gICAgflRpbWVyV29ya0l0ZW0oKSB7IH0KLQotICAg
IEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uOyB9
Ci0gICAgV29ya1F1ZXVlKiBxdWV1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcXVldWU7IH0KLQotICAg
IGludCB0aW1lcklEKCkgY29uc3QgeyByZXR1cm4gbV90aW1lcklEOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uOwotICAgIFdvcmtRdWV1ZSogbV9xdWV1ZTsK
LSAgICBpbnQgbV90aW1lcklEOwotfTsKLQotc3RhdGljIGNvbnN0IGludCBpbnZhbGlkU29ja2V0
RGVzY3JpcHRvciA9IC0xOwotc3RhdGljIGNvbnN0IGludCB0aHJlYWRNZXNzYWdlU2l6ZSA9IDE7
Ci1zdGF0aWMgY29uc3QgY2hhciBmaW5pc2hUaHJlYWRNZXNzYWdlW10gPSAiRiI7Ci1zdGF0aWMg
Y29uc3QgY2hhciB3YWt1cFRocmVhZE1lc3NhZ2VbXSA9ICJXIjsKLQotdm9pZCBXb3JrUXVldWU6
OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lKQotewotICAgIGludCBmZHNbMl07
Ci0gICAgaWYgKHBpcGUoZmRzKSkKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAg
ICBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IgPSBmZHNbMF07Ci0gICAgbV93cml0ZVRvUGlwZURl
c2NyaXB0b3IgPSBmZHNbMV07Ci0gICAgRkRfWkVSTygmbV9maWxlRGVzY3JpcHRvclNldCk7Ci0g
ICAgRkRfU0VUKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJm1fZmlsZURlc2NyaXB0b3JTZXQp
OwotICAgIG1fbWF4RmlsZURlc2NyaXB0b3IgPSBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3I7Ci0K
LSAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcjsKLQotICAg
IG1fdGhyZWFkTG9vcCA9IHRydWU7Ci0gICAgY3JlYXRlVGhyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8
V1RGOjpUaHJlYWRGdW5jdGlvbj4oJldvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkKSwgdGhpcywg
bmFtZSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotICAg
IHNlbmRNZXNzYWdlVG9UaHJlYWQoZmluaXNoVGhyZWFkTWVzc2FnZSk7Ci19Ci0KLXZvaWQgV29y
a1F1ZXVlOjpwZXJmb3JtV29yaygpCi17Ci0gICAgbV93b3JrSXRlbVF1ZXVlTG9jay5sb2NrKCk7
Ci0KLSAgICB3aGlsZSAoIW1fd29ya0l0ZW1RdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgVmVj
dG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiB3b3JrSXRlbVF1ZXVlOwotICAgICAgICBtX3dvcmtJdGVt
UXVldWUuc3dhcCh3b3JrSXRlbVF1ZXVlKTsKLQotICAgICAgICBtX3dvcmtJdGVtUXVldWVMb2Nr
LnVubG9jaygpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmtJdGVtUXVldWUu
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICB3b3JrSXRlbVF1ZXVlW2ldKCk7Ci0gICAgICAgIG1f
d29ya0l0ZW1RdWV1ZUxvY2subG9jaygpOwotICAgIH0KLSAgICBtX3dvcmtJdGVtUXVldWVMb2Nr
LnVubG9jaygpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybUZpbGVEZXNjcmlwdG9yV29y
aygpCi17Ci0gICAgZmRfc2V0IHJlYWRGaWxlRGVzY3JpcHRvclNldCA9IG1fZmlsZURlc2NyaXB0
b3JTZXQ7Ci0KLSAgICBpZiAoc2VsZWN0KG1fbWF4RmlsZURlc2NyaXB0b3IgKyAxLCAmcmVhZEZp
bGVEZXNjcmlwdG9yU2V0LCAwLCAwLCAwKSA+PSAwKSB7Ci0gICAgICAgIGlmIChGRF9JU1NFVCht
X3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKSB7Ci0gICAg
ICAgICAgICBjaGFyIHJlYWRCdWZbdGhyZWFkTWVzc2FnZVNpemVdOwotICAgICAgICAgICAgaWYg
KHJlYWQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCByZWFkQnVmLCB0aHJlYWRNZXNzYWdlU2l6
ZSkgPT0gLTEpCi0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBmcm9t
IFdvcmtRdWV1ZVRocmVhZCBwaXBlIik7Ci0gICAgICAgICAgICBpZiAoIXN0cm5jbXAocmVhZEJ1
ZiwgZmluaXNoVGhyZWFkTWVzc2FnZSwgdGhyZWFkTWVzc2FnZVNpemUpKQotICAgICAgICAgICAg
ICAgIG1fdGhyZWFkTG9vcCA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fc29j
a2V0RGVzY3JpcHRvciAhPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvciAmJiBGRF9JU1NFVChtX3Nv
Y2tldERlc2NyaXB0b3IsICZyZWFkRmlsZURlc2NyaXB0b3JTZXQpKQotICAgICAgICAgICAgbV9z
b2NrZXRFdmVudEhhbmRsZXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpzZW5kTWVz
c2FnZVRvVGhyZWFkKGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgaWYgKHdyaXRlKG1fd3Jp
dGVUb1BpcGVEZXNjcmlwdG9yLCBtZXNzYWdlLCB0aHJlYWRNZXNzYWdlU2l6ZSkgPT0gLTEpCi0g
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHdha2UgdXAgV29ya1F1ZXVlIFRocmVhZCIpOwot
fQotCi12b2lkKiBXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqIHdvcmtRdWV1
ZSkKLXsKLSAgICB3aGlsZSAod29ya1F1ZXVlLT5tX3RocmVhZExvb3ApIHsKLSAgICAgICAgd29y
a1F1ZXVlLT5wZXJmb3JtV29yaygpOwotICAgICAgICB3b3JrUXVldWUtPnBlcmZvcm1GaWxlRGVz
Y3JpcHRvcldvcmsoKTsKLSAgICB9Ci0KLSAgICBjbG9zZSh3b3JrUXVldWUtPm1fcmVhZEZyb21Q
aXBlRGVzY3JpcHRvcik7Ci0gICAgY2xvc2Uod29ya1F1ZXVlLT5tX3dyaXRlVG9QaXBlRGVzY3Jp
cHRvcik7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyU29j
a2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvciwgY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYgZnVuY3Rpb24pCi17Ci0gICAgaWYgKG1fc29ja2V0RGVzY3JpcHRvciAhPSBpbnZhbGlkU29j
a2V0RGVzY3JpcHRvcikKLSAgICAgICAgTE9HX0VSUk9SKCIlZCBpcyBhbHJlYWR5IHJlZ2lzdGVy
ZC4iLCBmaWxlRGVzY3JpcHRvcik7Ci0KLSAgICBtX3NvY2tldERlc2NyaXB0b3IgPSBmaWxlRGVz
Y3JpcHRvcjsKLSAgICBtX3NvY2tldEV2ZW50SGFuZGxlciA9IGZ1bmN0aW9uOwotCi0gICAgaWYg
KGZpbGVEZXNjcmlwdG9yID4gbV9tYXhGaWxlRGVzY3JpcHRvcikKLSAgICAgICAgbV9tYXhGaWxl
RGVzY3JpcHRvciA9IGZpbGVEZXNjcmlwdG9yOwotICAgIEZEX1NFVChmaWxlRGVzY3JpcHRvciwg
Jm1fZmlsZURlc2NyaXB0b3JTZXQpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNv
Y2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IpCi17Ci0gICAgbV9zb2NrZXREZXNj
cmlwdG9yID0gaW52YWxpZFNvY2tldERlc2NyaXB0b3I7Ci0KLSAgICBpZiAoZmlsZURlc2NyaXB0
b3IgPT0gbV9tYXhGaWxlRGVzY3JpcHRvcikKLSAgICAgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9
IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKLSAgICBGRF9DTFIoZmlsZURlc2NyaXB0b3IsICZt
X2ZpbGVEZXNjcmlwdG9yU2V0KTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X3dvcmtJdGVtUXVldWVMb2NrKTsKLSAgICBtX3dvcmtJdGVtUXVldWUuYXBwZW5kKGZ1bmN0aW9u
KTsKLSAgICBzZW5kTWVzc2FnZVRvVGhyZWFkKHdha3VwVGhyZWFkTWVzc2FnZSk7Ci19Ci0KLWJv
b2wgV29ya1F1ZXVlOjp0aW1lckZpcmVkKHZvaWQqIGRhdGEpCi17Ci0gICAgVGltZXJXb3JrSXRl
bSogaXRlbSA9IHN0YXRpY19jYXN0PFRpbWVyV29ya0l0ZW0qPihkYXRhKTsKLSAgICBpZiAoaXRl
bSAmJiBpdGVtLT5xdWV1ZSgpLT5tX2lzVmFsaWQpIHsKLSAgICAgICAgaXRlbS0+cXVldWUoKS0+
ZGlzcGF0Y2goaXRlbS0+ZnVuY3Rpb24oKSk7Ci0gICAgICAgIGl0ZW0tPnF1ZXVlKCktPm1fdGlt
ZXJzLnRha2UoaXRlbS0+dGltZXJJRCgpKTsKLSAgICAgICAgZGVsZXRlIGl0ZW07Ci0gICAgfQot
Ci0gICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKLX0KLQotdm9pZCBXb3JrUXVldWU6
OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91
YmxlIGRlbGF5KQotewotICAgIHN0YXRpYyBpbnQgdGltZXJJZCA9IDE7Ci0gICAgbV90aW1lcnMu
c2V0KHRpbWVySWQsIGFkb3B0UHRyKGVjb3JlX3RpbWVyX2FkZChkZWxheSwgcmVpbnRlcnByZXRf
Y2FzdDxFY29yZV9UYXNrX0NiPih0aW1lckZpcmVkKSwgbmV3IFRpbWVyV29ya0l0ZW0odGltZXJJ
ZCwgZnVuY3Rpb24sIHRoaXMpKSkpOwotICAgIHRpbWVySWQrKzsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwIGIvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDFkZmFiODMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3Rr
L1dvcmtRdWV1ZUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg
MjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgotCi0jaW5j
bHVkZSAiV0tCYXNlLmgiCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUgPGdsaWIuaD4K
LSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0KLS8vIFdvcmtRdWV1ZTo6RXZlbnRT
b3VyY2UKLWNsYXNzIFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UgewotcHVibGljOgotICAgIEV2ZW50
U291cmNlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHdvcmtR
dWV1ZSwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSkKLSAgICAgICAgOiBtX2Z1bmN0aW9uKGZ1
bmN0aW9uKQotICAgICAgICAsIG1fd29ya1F1ZXVlKHdvcmtRdWV1ZSkKLSAgICAgICAgLCBtX2Nh
bmNlbGxhYmxlKGNhbmNlbGxhYmxlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGNhbmNlbCgp
Ci0gICAgewotICAgICAgICBpZiAoIW1fY2FuY2VsbGFibGUpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUpOwotICAgIH0KLQot
ICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVFdmVudFNvdXJjZShFdmVudFNvdXJjZSogZXZlbnRTb3Vy
Y2UpCi0gICAgewotICAgICAgICBBU1NFUlQoZXZlbnRTb3VyY2UpOwotICAgICAgICBXb3JrUXVl
dWUqIHF1ZXVlID0gZXZlbnRTb3VyY2UtPm1fd29ya1F1ZXVlOwotICAgICAgICB7Ci0gICAgICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIocXVldWUtPm1faXNWYWxpZE11dGV4KTsKLSAgICAgICAg
ICAgIGlmICghcXVldWUtPm1faXNWYWxpZCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICBldmVudFNvdXJjZS0+bV9mdW5jdGlvbigpOwotICAgIH0KLQotICAg
IHN0YXRpYyBnYm9vbGVhbiBwZXJmb3JtV29ya09uY2UoRXZlbnRTb3VyY2UqIGV2ZW50U291cmNl
KQotICAgIHsKLSAgICAgICAgZXhlY3V0ZUV2ZW50U291cmNlKGV2ZW50U291cmNlKTsKLSAgICAg
ICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHN0YXRpYyBnYm9vbGVhbiBwZXJmb3JtV29y
ayhHU29ja2V0KiBzb2NrZXQsIEdJT0NvbmRpdGlvbiBjb25kaXRpb24sIEV2ZW50U291cmNlKiBl
dmVudFNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGlmICghKGNvbmRpdGlvbiAmIEdfSU9fSU4pICYm
ICEoY29uZGl0aW9uICYgR19JT19IVVApICYmICEoY29uZGl0aW9uICYgR19JT19FUlIpKSB7Ci0g
ICAgICAgICAgICAvLyBFdmVudFNvdXJjZSBoYXMgYmVlbiBjYW5jZWxsZWQsIHJldHVybiBGQUxT
RSB0byBkZXN0cm95IHRoZSBzb3VyY2UuCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAg
ICAgIH0KLQotICAgICAgICBleGVjdXRlRXZlbnRTb3VyY2UoZXZlbnRTb3VyY2UpOwotICAgICAg
ICByZXR1cm4gVFJVRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmtP
blRlcm1pbmF0aW9uKEdQaWQsIGdpbnQsIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSkKLSAgICB7
Ci0gICAgICAgIGV4ZWN1dGVFdmVudFNvdXJjZShldmVudFNvdXJjZSk7Ci0gICAgICAgIHJldHVy
biBGQUxTRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBkZWxldGVFdmVudFNvdXJjZShFdmVu
dFNvdXJjZSogZXZlbnRTb3VyY2UpIAotICAgIHsKLSAgICAgICAgQVNTRVJUKGV2ZW50U291cmNl
KTsKLSAgICAgICAgZGVsZXRlIGV2ZW50U291cmNlOwotICAgIH0KLSAgIAotcHVibGljOgotICAg
IEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKLSAgICBXb3JrUXVldWUqIG1fd29ya1F1ZXVl
OwotICAgIEdDYW5jZWxsYWJsZSogbV9jYW5jZWxsYWJsZTsKLX07Ci0KLS8vIFdvcmtRdWV1ZQot
c3RhdGljIGNvbnN0IHNpemVfdCBrVmlzdWFsU3R1ZGlvVGhyZWFkTmFtZUxpbWl0ID0gMzE7Ci0K
LXZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkKLXsK
LSAgICBtX2V2ZW50Q29udGV4dCA9IGFkb3B0R1JlZihnX21haW5fY29udGV4dF9uZXcoKSk7Ci0g
ICAgQVNTRVJUKG1fZXZlbnRDb250ZXh0KTsKLSAgICBtX2V2ZW50TG9vcCA9IGFkb3B0R1JlZihn
X21haW5fbG9vcF9uZXcobV9ldmVudENvbnRleHQuZ2V0KCksIEZBTFNFKSk7Ci0gICAgQVNTRVJU
KG1fZXZlbnRMb29wKTsKLQotICAgIC8vIFRoaXMgbmFtZSBjYW4gYmUgY29tLmFwcGxlLldlYktp
dC5Qcm9jZXNzTGF1bmNoZXIgb3IgY29tLmFwcGxlLkNvcmVJUEMuUmVjZWl2ZVF1ZXVlLgotICAg
IC8vIFdlIGFyZSB1c2luZyB0aG9zZSBuYW1lcyBmb3IgdGhlIHRocmVhZCBuYW1lLCBidXQgYm90
aCBhcmUgbG9uZ2VyIHRoYW4gMzEgY2hhcmFjdGVycywKLSAgICAvLyB3aGljaCBpcyB0aGUgbGlt
aXQgb2YgVmlzdWFsIFN0dWRpbyBmb3IgdGhyZWFkIG5hbWVzLgotICAgIC8vIFdoZW4gbG9nIGlz
IGVuYWJsZWQgY3JlYXRlVGhyZWFkKCkgd2lsbCBhc3NlcnQgaW5zdGVhZCBvZiB0cnVuY2F0ZSB0
aGUgbmFtZSwgc28gd2UgbmVlZAotICAgIC8vIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCB1c2UgYSBu
YW1lIGxvbmdlciB0aGFuIDMxIGNoYXJhY3RlcnMuCi0gICAgY29uc3QgY2hhciogdGhyZWFkTmFt
ZSA9IGdfc3RycnN0cihuYW1lLCAiLiIpOwotICAgIGlmICh0aHJlYWROYW1lKQotICAgICAgICB0
aHJlYWROYW1lKys7Ci0gICAgZWxzZQotICAgICAgICB0aHJlYWROYW1lID0gbmFtZTsKLSAgICBp
ZiAoc3RybGVuKHRocmVhZE5hbWUpID4ga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdCkKLSAg
ICAgICAgdGhyZWFkTmFtZSArPSBzdHJsZW4odGhyZWFkTmFtZSkgLSBrVmlzdWFsU3R1ZGlvVGhy
ZWFkTmFtZUxpbWl0OwotCi0gICAgbV93b3JrUXVldWVUaHJlYWQgPSBjcmVhdGVUaHJlYWQocmVp
bnRlcnByZXRfY2FzdDxXVEY6OlRocmVhZEZ1bmN0aW9uPigmV29ya1F1ZXVlOjpzdGFydFdvcmtR
dWV1ZVRocmVhZCksIHRoaXMsIHRocmVhZE5hbWUpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGxh
dGZvcm1JbnZhbGlkYXRlKCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudExvb3BM
b2NrKTsKLQotICAgIGlmIChtX2V2ZW50TG9vcCkgewotICAgICAgICBpZiAoZ19tYWluX2xvb3Bf
aXNfcnVubmluZyhtX2V2ZW50TG9vcC5nZXQoKSkpCi0gICAgICAgICAgICBnX21haW5fbG9vcF9x
dWl0KG1fZXZlbnRMb29wLmdldCgpKTsKLSAgICAgICAgbV9ldmVudExvb3AuY2xlYXIoKTsKLSAg
ICB9Ci0KLSAgICBtX2V2ZW50Q29udGV4dC5jbGVhcigpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6
c3RhcnRXb3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKiB3b3JrUXVldWUpCi17Ci0gICAgd29ya1F1
ZXVlLT53b3JrUXVldWVUaHJlYWRCb2R5KCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjp3b3JrUXVl
dWVUaHJlYWRCb2R5KCkKLXsKLSAgICBnX21haW5fbG9vcF9ydW4obV9ldmVudExvb3AuZ2V0KCkp
OwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50IGZp
bGVEZXNjcmlwdG9yLCBpbnQgY29uZGl0aW9uLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5j
dGlvbikKLXsKLSAgICBHUmVmUHRyPEdTb2NrZXQ+IHNvY2tldCA9IGFkb3B0R1JlZihnX3NvY2tl
dF9uZXdfZnJvbV9mZChmaWxlRGVzY3JpcHRvciwgMCkpOwotICAgIEFTU0VSVChzb2NrZXQpOwot
ICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBjYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNl
bGxhYmxlX25ldygpKTsKLSAgICBHUmVmUHRyPEdTb3VyY2U+IGRpc3BhdGNoU291cmNlID0gYWRv
cHRHUmVmKGdfc29ja2V0X2NyZWF0ZV9zb3VyY2Uoc29ja2V0LmdldCgpLCBzdGF0aWNfY2FzdDxH
SU9Db25kaXRpb24+KGNvbmRpdGlvbiksIGNhbmNlbGxhYmxlLmdldCgpKSk7Ci0gICAgQVNTRVJU
KGRpc3BhdGNoU291cmNlKTsKLSAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBuZXcgRXZl
bnRTb3VyY2UoZnVuY3Rpb24sIHRoaXMsIGNhbmNlbGxhYmxlLmdldCgpKTsKLSAgICBBU1NFUlQo
ZXZlbnRTb3VyY2UpOwotCi0gICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKGRpc3BhdGNoU291cmNl
LmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigmV29ya1F1ZXVlOjpFdmVudFNv
dXJjZTo6cGVyZm9ybVdvcmspLAotICAgICAgICBldmVudFNvdXJjZSwgcmVpbnRlcnByZXRfY2Fz
dDxHRGVzdHJveU5vdGlmeT4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmRlbGV0ZUV2ZW50U291
cmNlKSk7Ci0KLSAgICAvLyBTZXQgdXAgdGhlIGV2ZW50IHNvdXJjZXMgdW5kZXIgdGhlIG11dGV4
IHNpbmNlIHRoaXMgaXMgc2hhcmVkIGFjcm9zcyBtdWx0aXBsZSB0aHJlYWRzLgotICAgIHsKLSAg
ICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRTb3VyY2VzTG9jayk7Ci0gICAgICAgIFZl
Y3RvcjxFdmVudFNvdXJjZSo+IHNvdXJjZXM7Ci0gICAgICAgIEV2ZW50U291cmNlSXRlcmF0b3Ig
aXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZpbGVEZXNjcmlwdG9yKTsKLSAgICAgICAgaWYgKGl0
ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSAKLSAgICAgICAgICAgIHNvdXJjZXMgPSBpdC0+c2Vj
b25kOwotCi0gICAgICAgIHNvdXJjZXMuYXBwZW5kKGV2ZW50U291cmNlKTsKLSAgICAgICAgbV9l
dmVudFNvdXJjZXMuc2V0KGZpbGVEZXNjcmlwdG9yLCBzb3VyY2VzKTsKLSAgICB9Ci0KLSAgICBn
X3NvdXJjZV9hdHRhY2goZGlzcGF0Y2hTb3VyY2UuZ2V0KCksIG1fZXZlbnRDb250ZXh0LmdldCgp
KTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50
IGZpbGVEZXNjcmlwdG9yKQotewotICAgIEFTU0VSVChmaWxlRGVzY3JpcHRvcik7Ci0gICAgCi0g
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZlbnRTb3VyY2VzTG9jayk7Ci0gICAgCi0gICAgRXZl
bnRTb3VyY2VJdGVyYXRvciBpdCA9IG1fZXZlbnRTb3VyY2VzLmZpbmQoZmlsZURlc2NyaXB0b3Ip
OwotICAgIEFTU0VSVChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSk7Ci0gICAgQVNTRVJUKG1f
ZXZlbnRTb3VyY2VzLmNvbnRhaW5zKGZpbGVEZXNjcmlwdG9yKSk7Ci0KLSAgICBpZiAoaXQgIT0g
bV9ldmVudFNvdXJjZXMuZW5kKCkpIHsKLSAgICAgICAgVmVjdG9yPEV2ZW50U291cmNlKj4gc291
cmNlcyA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3Vy
Y2VzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgc291cmNlc1tpXS0+Y2FuY2VsKCk7Ci0KLSAg
ICAgICAgbV9ldmVudFNvdXJjZXMucmVtb3ZlKGl0KTsKLSAgICB9Ci19Ci0KLXZvaWQgV29ya1F1
ZXVlOjpkaXNwYXRjaE9uU291cmNlKEdTb3VyY2UqIGRpc3BhdGNoU291cmNlLCBjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgR1NvdXJjZUZ1bmMgc291cmNlQ2FsbGJhY2spCi17Ci0g
ICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gbmV3IEV2ZW50U291cmNlKGZ1bmN0aW9uLCB0
aGlzLCAwKTsKLQotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhkaXNwYXRjaFNvdXJjZSwgc291
cmNlQ2FsbGJhY2ssIGV2ZW50U291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGVs
ZXRlRXZlbnRTb3VyY2UpKTsKLQotICAgIGdfc291cmNlX2F0dGFjaChkaXNwYXRjaFNvdXJjZSwg
bV9ldmVudENvbnRleHQuZ2V0KCkpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgR1JlZlB0cjxHU291cmNlPiBk
aXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX2lkbGVfc291cmNlX25ldygpKTsKLSAgICBBU1NF
UlQoZGlzcGF0Y2hTb3VyY2UpOwotICAgIGdfc291cmNlX3NldF9wcmlvcml0eShkaXNwYXRjaFNv
dXJjZS5nZXQoKSwgR19QUklPUklUWV9ERUZBVUxUKTsKLQotICAgIGRpc3BhdGNoT25Tb3VyY2Uo
ZGlzcGF0Y2hTb3VyY2UuZ2V0KCksIGZ1bmN0aW9uLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VG
dW5jPigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmtPbmNlKSk7Ci19Ci0KLXZv
aWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYg
ZnVuY3Rpb24sIGRvdWJsZSBkZWxheSkKLXsKLSAgICBHUmVmUHRyPEdTb3VyY2U+IGRpc3BhdGNo
U291cmNlID0gYWRvcHRHUmVmKGdfdGltZW91dF9zb3VyY2VfbmV3KHN0YXRpY19jYXN0PGd1aW50
PihkZWxheSAqIDEwMDApKSk7Ci0gICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKLQotICAgIGRp
c3BhdGNoT25Tb3VyY2UoZGlzcGF0Y2hTb3VyY2UuZ2V0KCksIGZ1bmN0aW9uLCByZWludGVycHJl
dF9jYXN0PEdTb3VyY2VGdW5jPigmV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmtP
bmNlKSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaE9uVGVybWluYXRpb24oV2ViS2l0
OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MsIGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mIGZ1bmN0aW9uKQotewotICAgIEdSZWZQdHI8R1NvdXJjZT4gZGlzcGF0Y2hTb3VyY2UgPSBh
ZG9wdEdSZWYoZ19jaGlsZF93YXRjaF9zb3VyY2VfbmV3KHByb2Nlc3MpKTsKLSAgICBBU1NFUlQo
ZGlzcGF0Y2hTb3VyY2UpOwotCi0gICAgZGlzcGF0Y2hPblNvdXJjZShkaXNwYXRjaFNvdXJjZS5n
ZXQoKSwgZnVuY3Rpb24sIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KCZXb3JrUXVldWU6
OkV2ZW50U291cmNlOjpwZXJmb3JtV29ya09uVGVybWluYXRpb24pKTsKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGFlNDczZWUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
bWFjL1dvcmtRdWV1ZU1hYy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKLQot
I2luY2x1ZGUgPG1hY2gvbWFjaF9pbml0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9tYWNoX3BvcnQuaD4K
LSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi12b2lkIFdvcmtRdWV1ZTo6ZXhlY3V0ZUZ1
bmN0aW9uKHZvaWQqIGNvbnRleHQpCi17Ci0gICAgV29ya1F1ZXVlKiBxdWV1ZSA9IHN0YXRpY19j
YXN0PFdvcmtRdWV1ZSo+KGRpc3BhdGNoX2dldF9jb250ZXh0KGRpc3BhdGNoX2dldF9jdXJyZW50
X3F1ZXVlKCkpKTsKLSAgICBPd25QdHI8RnVuY3Rpb248dm9pZCgpPiA+IGZ1bmN0aW9uID0gYWRv
cHRQdHIoc3RhdGljX2Nhc3Q8RnVuY3Rpb248dm9pZCgpPio+KGNvbnRleHQpKTsKLSAgICAKLSAg
ICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihxdWV1ZS0+bV9pc1ZhbGlkTXV0ZXgpOwot
ICAgICAgICBpZiAoIXF1ZXVlLT5tX2lzVmFsaWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgKCpmdW5jdGlvbikoKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIGRpc3BhdGNoX2FzeW5jX2Yo
bV9kaXNwYXRjaFF1ZXVlLCBuZXcgRnVuY3Rpb248dm9pZCgpPihmdW5jdGlvbiksIGV4ZWN1dGVG
dW5jdGlvbik7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheSkKLXsKLSAgICBkaXNwYXRj
aF90aW1lX3QgZGVsYXlUaW1lID0gZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgZGVs
YXkgKiBOU0VDX1BFUl9TRUMpOwotCi0gICAgZGlzcGF0Y2hfYWZ0ZXJfZihkZWxheVRpbWUsIG1f
ZGlzcGF0Y2hRdWV1ZSwgbmV3IEZ1bmN0aW9uPHZvaWQoKT4oZnVuY3Rpb24pLCBleGVjdXRlRnVu
Y3Rpb24pOwotfQotCi1jbGFzcyBXb3JrUXVldWU6OkV2ZW50U291cmNlIHsKLXB1YmxpYzoKLSAg
ICBFdmVudFNvdXJjZShNYWNoUG9ydEV2ZW50VHlwZSBldmVudFR5cGUsIGRpc3BhdGNoX3NvdXJj
ZV90IGRpc3BhdGNoU291cmNlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLSAg
ICAgICAgOiBtX2V2ZW50VHlwZShldmVudFR5cGUpCi0gICAgICAgICwgbV9kaXNwYXRjaFNvdXJj
ZShkaXNwYXRjaFNvdXJjZSkKLSAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgZGlzcGF0Y2hfc291cmNlX3QgZGlzcGF0Y2hTb3VyY2UoKSBjb25z
dCB7IHJldHVybiBtX2Rpc3BhdGNoU291cmNlOyB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgZXZl
bnRIYW5kbGVyKHZvaWQqIHNvdXJjZSkgCi0gICAgewotICAgICAgICBFdmVudFNvdXJjZSogZXZl
bnRTb3VyY2UgPSBzdGF0aWNfY2FzdDxFdmVudFNvdXJjZSo+KHNvdXJjZSk7Ci0gICAgICAgIAot
ICAgICAgICBldmVudFNvdXJjZS0+bV9mdW5jdGlvbigpOwotICAgIH0KLSAgICAKLSAgICBzdGF0
aWMgdm9pZCBjYW5jZWxIYW5kbGVyKHZvaWQqIHNvdXJjZSkKLSAgICB7Ci0gICAgICAgIEV2ZW50
U291cmNlKiBldmVudFNvdXJjZSA9IHN0YXRpY19jYXN0PEV2ZW50U291cmNlKj4oc291cmNlKTsK
LSAgICAgICAgCi0gICAgICAgIG1hY2hfcG9ydF90IG1hY2hQb3J0ID0gZGlzcGF0Y2hfc291cmNl
X2dldF9oYW5kbGUoZXZlbnRTb3VyY2UtPm1fZGlzcGF0Y2hTb3VyY2UpOwotICAgICAgICAKLSAg
ICAgICAgc3dpdGNoIChldmVudFNvdXJjZS0+bV9ldmVudFR5cGUpIHsKLSAgICAgICAgY2FzZSBN
YWNoUG9ydERhdGFBdmFpbGFibGU6Ci0gICAgICAgICAgICAvLyBSZWxlYXNlIG91ciByZWNlaXZl
IHJpZ2h0LgotICAgICAgICAgICAgbWFjaF9wb3J0X21vZF9yZWZzKG1hY2hfdGFza19zZWxmKCks
IG1hY2hQb3J0LCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgLTEpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgTWFjaFBvcnREZWFkTmFtZU5vdGlmaWNhdGlvbjoKLSAgICAgICAg
ICAgIC8vIFJlbGVhc2Ugb3VyIHNlbmQgcmlnaHQuCi0gICAgICAgICAgICBtYWNoX3BvcnRfZGVh
bGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBtYWNoUG9ydCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCBmaW5hbGl6ZUhhbmRsZXIo
dm9pZCogc291cmNlKQotICAgIHsKLSAgICAgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0g
c3RhdGljX2Nhc3Q8RXZlbnRTb3VyY2UqPihzb3VyY2UpOwotICAgICAgICAKLSAgICAgICAgZGVs
ZXRlIGV2ZW50U291cmNlOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgTWFjaFBvcnRFdmVu
dFR5cGUgbV9ldmVudFR5cGU7Ci0gICAgCi0gICAgLy8gVGhpcyBpcyBhIHdlYWsgcmVmZXJlbmNl
LCBzaW5jZSBtX2Rpc3BhdGNoU291cmNlIHJlZmVyZW5jZXMgdGhlIGV2ZW50IHNvdXJjZS4KLSAg
ICBkaXNwYXRjaF9zb3VyY2VfdCBtX2Rpc3BhdGNoU291cmNlOwotCi0gICAgRnVuY3Rpb248dm9p
ZCgpPiBtX2Z1bmN0aW9uOwotfTsKLQotdm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyTWFjaFBvcnRF
dmVudEhhbmRsZXIobWFjaF9wb3J0X3QgbWFjaFBvcnQsIE1hY2hQb3J0RXZlbnRUeXBlIGV2ZW50
VHlwZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgZGlzcGF0Y2hf
c291cmNlX3R5cGVfdCBzb3VyY2VUeXBlID0gMDsKLSAgICBzd2l0Y2ggKGV2ZW50VHlwZSkgewot
ICAgIGNhc2UgTWFjaFBvcnREYXRhQXZhaWxhYmxlOgotICAgICAgICBzb3VyY2VUeXBlID0gRElT
UEFUQ0hfU09VUkNFX1RZUEVfTUFDSF9SRUNWOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1h
Y2hQb3J0RGVhZE5hbWVOb3RpZmljYXRpb246Ci0gICAgICAgIHNvdXJjZVR5cGUgPSBESVNQQVRD
SF9TT1VSQ0VfVFlQRV9NQUNIX1NFTkQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAg
ICBkaXNwYXRjaF9zb3VyY2VfdCBkaXNwYXRjaFNvdXJjZSA9IGRpc3BhdGNoX3NvdXJjZV9jcmVh
dGUoc291cmNlVHlwZSwgbWFjaFBvcnQsIDAsIG1fZGlzcGF0Y2hRdWV1ZSk7Ci0gICAgCi0gICAg
RXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gbmV3IEV2ZW50U291cmNlKGV2ZW50VHlwZSwgZGlz
cGF0Y2hTb3VyY2UsIGZ1bmN0aW9uKTsKLSAgICBkaXNwYXRjaF9zZXRfY29udGV4dChkaXNwYXRj
aFNvdXJjZSwgZXZlbnRTb3VyY2UpOwotICAgIAotICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZl
bnRfaGFuZGxlcl9mKGRpc3BhdGNoU291cmNlLCAmRXZlbnRTb3VyY2U6OmV2ZW50SGFuZGxlcik7
Ci0gICAgZGlzcGF0Y2hfc291cmNlX3NldF9jYW5jZWxfaGFuZGxlcl9mKGRpc3BhdGNoU291cmNl
LCAmRXZlbnRTb3VyY2U6OmNhbmNlbEhhbmRsZXIpOwotICAgIGRpc3BhdGNoX3NldF9maW5hbGl6
ZXJfZihkaXNwYXRjaFNvdXJjZSwgJkV2ZW50U291cmNlOjpmaW5hbGl6ZUhhbmRsZXIpOwotICAg
IAotICAgIC8vIEFkZCB0aGUgc291cmNlIHRvIG91ciBzZXQgb2Ygc291cmNlcy4KLSAgICB7Ci0g
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc011dGV4KTsKLSAgICAgICAg
Ci0gICAgICAgIEFTU0VSVCghbV9ldmVudFNvdXJjZXMuY29udGFpbnMobWFjaFBvcnQpKTsKLSAg
ICAgICAgCi0gICAgICAgIG1fZXZlbnRTb3VyY2VzLnNldChtYWNoUG9ydCwgZXZlbnRTb3VyY2Up
OwotICAgICAgICAKLSAgICAgICAgLy8gQW5kIHN0YXJ0IGl0IQotICAgICAgICBkaXNwYXRjaF9y
ZXN1bWUoZGlzcGF0Y2hTb3VyY2UpOwotICAgIH0KLX0KLQotdm9pZCBXb3JrUXVldWU6OnVucmVn
aXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcihtYWNoX3BvcnRfdCBtYWNoUG9ydCkKLXsKLSAgICBB
U1NFUlQobWFjaFBvcnQpOwotICAgIAotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291
cmNlc011dGV4KTsKLSAgICAKLSAgICBIYXNoTWFwPG1hY2hfcG9ydF90LCBFdmVudFNvdXJjZSo+
OjppdGVyYXRvciBpdCA9IG1fZXZlbnRTb3VyY2VzLmZpbmQobWFjaFBvcnQpOwotICAgIEFTU0VS
VChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSk7Ci0gICAgCi0gICAgQVNTRVJUKG1fZXZlbnRT
b3VyY2VzLmNvbnRhaW5zKG1hY2hQb3J0KSk7Ci0KLSAgICBFdmVudFNvdXJjZSogZXZlbnRTb3Vy
Y2UgPSBpdC0+c2Vjb25kOwotICAgIC8vIENhbmNlbCBhbmQgcmVsZWFzZSB0aGUgc291cmNlLiBJ
dCB3aWxsIGJlIGRlbGV0ZWQgaW4gaXRzIGZpbmFsaXplIGhhbmRsZXIuCi0gICAgZGlzcGF0Y2hf
c291cmNlX2NhbmNlbChldmVudFNvdXJjZS0+ZGlzcGF0Y2hTb3VyY2UoKSk7Ci0gICAgZGlzcGF0
Y2hfcmVsZWFzZShldmVudFNvdXJjZS0+ZGlzcGF0Y2hTb3VyY2UoKSk7Ci0KLSAgICBtX2V2ZW50
U291cmNlcy5yZW1vdmUoaXQpOyAgICAKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW5p
dGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lKQotewotICAgIG1fZGlzcGF0Y2hRdWV1ZSA9IGRpc3Bh
dGNoX3F1ZXVlX2NyZWF0ZShuYW1lLCAwKTsKLSAgICBkaXNwYXRjaF9zZXRfY29udGV4dChtX2Rp
c3BhdGNoUXVldWUsIHRoaXMpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlk
YXRlKCkKLXsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
ZXZlbnRTb3VyY2VzTXV0ZXgpOwotICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5pc0VtcHR5KCkp
OwotI2VuZGlmCi0KLSAgICBkaXNwYXRjaF9yZWxlYXNlKG1fZGlzcGF0Y2hRdWV1ZSk7Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGFhYTJiZTMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vcXQvV29ya1F1ZXVlUXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
V29ya1F1ZXVlLmgiCi0KLSNpbmNsdWRlIDxRTG9jYWxTb2NrZXQ+Ci0jaW5jbHVkZSA8UU9iamVj
dD4KLSNpbmNsdWRlIDxRVGhyZWFkPgotI2luY2x1ZGUgPFFQcm9jZXNzPgotI2luY2x1ZGUgPFdl
YkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLWNs
YXNzIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVD
VAotcHVibGljOgotICAgIFdvcmtJdGVtUXQoV29ya1F1ZXVlKiB3b3JrUXVldWUsIGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotICAgICAgICA6IG1fcXVldWUod29ya1F1ZXVlKQot
ICAgICAgICAsIG1fc291cmNlKDApCi0gICAgICAgICwgbV9zaWduYWwoMCkKLSAgICAgICAgLCBt
X2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgIHsKLSAgICB9Ci0KLSAgICBXb3JrSXRlbVF0KFdvcmtR
dWV1ZSogd29ya1F1ZXVlLCBRT2JqZWN0KiBzb3VyY2UsIGNvbnN0IGNoYXIqIHNpZ25hbCwgY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi0gICAgICAgIDogbV9xdWV1ZSh3b3JrUXVl
dWUpCi0gICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICAgICAsIG1fc2lnbmFsKHNpZ25h
bCkKLSAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAgY29ubmVj
dChtX3NvdXJjZSwgbV9zaWduYWwsIFNMT1QoZXhlY3V0ZSgpKSwgUXQ6OlF1ZXVlZENvbm5lY3Rp
b24pOwotICAgIH0KLQotICAgIH5Xb3JrSXRlbVF0KCkKLSAgICB7Ci0gICAgfQotCi0gICAgUV9T
TE9UIHZvaWQgZXhlY3V0ZSgpIAotICAgIHsgCi0gICAgICAgIGlmIChtX3F1ZXVlLT5tX2lzVmFs
aWQpCi0gICAgICAgICAgICBtX2Z1bmN0aW9uKCk7Ci0gICAgfQotCi0gICAgUV9TTE9UIHZvaWQg
ZXhlY3V0ZUFuZERlbGV0ZSgpCi0gICAgewotICAgICAgICBleGVjdXRlKCk7Ci0gICAgICAgIGRl
bGV0ZSB0aGlzOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2
ZW50KikKLSAgICB7Ci0gICAgICAgIGV4ZWN1dGVBbmREZWxldGUoKTsKLSAgICB9Ci0KLSAgICBX
b3JrUXVldWUqIG1fcXVldWU7Ci0gICAgUU9iamVjdCogbV9zb3VyY2U7Ci0gICAgY29uc3QgY2hh
ciogbV9zaWduYWw7Ci0gICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uOwotfTsKLQotUVNv
Y2tldE5vdGlmaWVyKiBXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBz
b2NrZXREZXNjcmlwdG9yLCBRU29ja2V0Tm90aWZpZXI6OlR5cGUgdHlwZSwgY29uc3QgRnVuY3Rp
b248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1fd29ya1RocmVhZCk7Ci0KLSAg
ICBRU29ja2V0Tm90aWZpZXIqIG5vdGlmaWVyID0gbmV3IFFTb2NrZXROb3RpZmllcihzb2NrZXRE
ZXNjcmlwdG9yLCB0eXBlLCAwKTsKLSAgICBub3RpZmllci0+c2V0RW5hYmxlZChmYWxzZSk7Ci0g
ICAgbm90aWZpZXItPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOwotICAgIFdvcmtRdWV1ZTo6
V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBub3Rp
ZmllciwgU0lHTkFMKGFjdGl2YXRlZChpbnQpKSwgZnVuY3Rpb24pOwotICAgIGl0ZW1RdC0+bW92
ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7Ci0gICAgbm90aWZpZXItPnNldEVuYWJsZWQodHJ1ZSk7
Ci0gICAgcmV0dXJuIG5vdGlmaWVyOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0
aWFsaXplKGNvbnN0IGNoYXIqKQotewotICAgIG1fd29ya1RocmVhZCA9IG5ldyBRVGhyZWFkKCk7
Ci0gICAgbV93b3JrVGhyZWFkLT5zdGFydCgpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZv
cm1JbnZhbGlkYXRlKCkKLXsKLSAgICBtX3dvcmtUaHJlYWQtPmV4aXQoKTsKLSAgICBtX3dvcmtU
aHJlYWQtPndhaXQoKTsKLSAgICBkZWxldGUgbV93b3JrVGhyZWFkOwotfQotCi12b2lkIFdvcmtR
dWV1ZTo6ZGlzcGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAg
V29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRlbVF0
KHRoaXMsIGZ1bmN0aW9uKTsKLSAgICBpdGVtUXQtPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQp
OwotICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRob2QoaXRlbVF0LCAiZXhlY3V0ZUFuZERlbGV0
ZSIsIFF0OjpRdWV1ZWRDb25uZWN0aW9uKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNo
QWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5
SW5TZWNvbmQpCi17Ci0gICAgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29y
a1F1ZXVlOjpXb3JrSXRlbVF0KHRoaXMsIGZ1bmN0aW9uKTsKLSAgICBpdGVtUXQtPnN0YXJ0VGlt
ZXIoc3RhdGljX2Nhc3Q8aW50PihkZWxheUluU2Vjb25kICogMTAwMCkpOwotICAgIGl0ZW1RdC0+
bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRj
aE9uVGVybWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3Ms
IGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIFdvcmtRdWV1ZTo6V29y
a0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBwcm9jZXNz
LCBTSUdOQUwoZmluaXNoZWQoaW50LCBRUHJvY2Vzczo6RXhpdFN0YXR1cykpLCBmdW5jdGlvbik7
Ci0gICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsKLX0KLQotI2luY2x1ZGUg
IldvcmtRdWV1ZVF0Lm1vYyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3dp
bi9Xb3JrUXVldWVXaW4uY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1
ZVdpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhYmFkYmQuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1ZVdpbi5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwyOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJXb3JrUXVldWUuaCIKLQotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLWlubGluZSBXb3JrUXVldWU6
OldvcmtJdGVtV2luOjpXb3JrSXRlbVdpbihjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlv
biwgV29ya1F1ZXVlKiBxdWV1ZSkKLSAgICA6IG1fZnVuY3Rpb24oZnVuY3Rpb24pCi0gICAgLCBt
X3F1ZXVlKHF1ZXVlKQotewotfQotCi1QYXNzUmVmUHRyPFdvcmtRdWV1ZTo6V29ya0l0ZW1XaW4+
IFdvcmtRdWV1ZTo6V29ya0l0ZW1XaW46OmNyZWF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBm
dW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdv
cmtJdGVtV2luKGZ1bmN0aW9uLCBxdWV1ZSkpOwotfQotCi1Xb3JrUXVldWU6OldvcmtJdGVtV2lu
Ojp+V29ya0l0ZW1XaW4oKQotewotfQotCi1pbmxpbmUgV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRl
bTo6SGFuZGxlV29ya0l0ZW0oSEFORExFIGhhbmRsZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYg
ZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUpCi0gICAgOiBXb3JrSXRlbVdpbihmdW5jdGlvbiwg
cXVldWUpCi0gICAgLCBtX2hhbmRsZShoYW5kbGUpCi0gICAgLCBtX3dhaXRIYW5kbGUoMCkKLXsK
LSAgICBBU1NFUlRfQVJHKGhhbmRsZSwgaGFuZGxlKTsKLX0KLQotUGFzc1JlZlB0cjxXb3JrUXVl
dWU6OkhhbmRsZVdvcmtJdGVtPiBXb3JrUXVldWU6OkhhbmRsZVdvcmtJdGVtOjpjcmVhdGVCeUFk
b3B0aW5nSGFuZGxlKEhBTkRMRSBoYW5kbGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0
aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGFuZGxl
V29ya0l0ZW0oaGFuZGxlLCBmdW5jdGlvbiwgcXVldWUpKTsKLX0KLQotV29ya1F1ZXVlOjpIYW5k
bGVXb3JrSXRlbTo6fkhhbmRsZVdvcmtJdGVtKCkKLXsKLSAgICA6OkNsb3NlSGFuZGxlKG1faGFu
ZGxlKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmhhbmRsZUNhbGxiYWNrKHZvaWQqIGNvbnRleHQs
IEJPT0xFQU4gdGltZXJPcldhaXRGaXJlZCkKLXsKLSAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNv
bnRleHQpOwotICAgIEFTU0VSVF9BUkcodGltZXJPcldhaXRGaXJlZCwgIXRpbWVyT3JXYWl0Rmly
ZWQpOwotCi0gICAgV29ya0l0ZW1XaW4qIGl0ZW0gPSBzdGF0aWNfY2FzdDxXb3JrSXRlbVdpbio+
KGNvbnRleHQpOwotICAgIFdvcmtRdWV1ZSogcXVldWUgPSBpdGVtLT5xdWV1ZSgpOwotCi0gICAg
ewotICAgICAgICBNdXRleExvY2tlciBsb2NrKHF1ZXVlLT5tX3dvcmtJdGVtUXVldWVMb2NrKTsK
LSAgICAgICAgcXVldWUtPm1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoaXRlbSk7Ci0KLSAgICAgICAg
Ly8gSWYgbm8gb3RoZXIgdGhyZWFkIGlzIHBlcmZvcm1pbmcgd29yaywgd2UgY2FuIGRvIGl0IG9u
IHRoaXMgdGhyZWFkLgotICAgICAgICBpZiAoIXF1ZXVlLT50cnlSZWdpc3RlckFzV29ya1RocmVh
ZCgpKSB7Ci0gICAgICAgICAgICAvLyBTb21lIG90aGVyIHRocmVhZCBpcyBwZXJmb3JtaW5nIHdv
cmsuIFNpbmNlIHdlIGhvbGQgdGhlIHF1ZXVlIGxvY2ssIHdlIGNhbiBiZSBzdXJlCi0gICAgICAg
ICAgICAvLyB0aGF0IHRoZSB3b3JrIHRocmVhZCBpcyBub3QgZXhpdGluZyBkdWUgdG8gYW4gZW1w
dHkgcXVldWUgYW5kIHdpbGwgcHJvY2VzcyB0aGUgd29yawotICAgICAgICAgICAgLy8gaXRlbSB3
ZSBqdXN0IGFkZGVkIHRvIGl0LiBJZiB3ZSB3ZXJlbid0IGhvbGRpbmcgdGhlIGxvY2sgd2UnZCBo
YXZlIHRvIHNpZ25hbAotICAgICAgICAgICAgLy8gbV9wZXJmb3JtV29ya0V2ZW50IHRvIG1ha2Ug
c3VyZSB0aGUgd29yayBpdGVtIGdvdCBwaWNrZWQgdXAuCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBxdWV1ZS0+cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3Jr
VGhyZWFkKCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpyZWdpc3RlckhhbmRsZShIQU5ETEUgaGFu
ZGxlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBSZWZQdHI8SGFu
ZGxlV29ya0l0ZW0+IGhhbmRsZUl0ZW0gPSBIYW5kbGVXb3JrSXRlbTo6Y3JlYXRlQnlBZG9wdGlu
Z0hhbmRsZShoYW5kbGUsIGZ1bmN0aW9uLCB0aGlzKTsKLQotICAgIHsKLSAgICAgICAgTXV0ZXhM
b2NrZXIgbG9jayhtX2hhbmRsZXNMb2NrKTsKLSAgICAgICAgQVNTRVJUX0FSRyhoYW5kbGUsICFt
X2hhbmRsZXMuY29udGFpbnMoaGFuZGxlKSk7Ci0gICAgICAgIG1faGFuZGxlcy5zZXQoaGFuZGxl
LCBoYW5kbGVJdGVtKTsKLSAgICB9Ci0KLSAgICBIQU5ETEUgd2FpdEhhbmRsZTsKLSAgICBpZiAo
ITo6UmVnaXN0ZXJXYWl0Rm9yU2luZ2xlT2JqZWN0KCZ3YWl0SGFuZGxlLCBoYW5kbGUsIGhhbmRs
ZUNhbGxiYWNrLCBoYW5kbGVJdGVtLmdldCgpLCBJTkZJTklURSwgV1RfRVhFQ1VURURFRkFVTFQp
KSB7Ci0gICAgICAgIERXT1JEIGVycm9yID0gOjpHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIGhhbmRsZUl0ZW0tPnNldFdhaXRIYW5kbGUo
d2FpdEhhbmRsZSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyQW5kQ2xvc2VIYW5k
bGUoSEFORExFIGhhbmRsZSkKLXsKLSAgICBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW07Ci0g
ICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9oYW5kbGVzTG9jayk7Ci0gICAgICAg
IEFTU0VSVF9BUkcoaGFuZGxlLCBtX2hhbmRsZXMuY29udGFpbnMoaGFuZGxlKSk7Ci0gICAgICAg
IGl0ZW0gPSBtX2hhbmRsZXMudGFrZShoYW5kbGUpOwotICAgIH0KLQotICAgIHVucmVnaXN0ZXJX
YWl0QW5kRGVzdHJveUl0ZW1Tb29uKGl0ZW0ucmVsZWFzZSgpKTsKLX0KLQotRFdPUkQgV29ya1F1
ZXVlOjp3b3JrVGhyZWFkQ2FsbGJhY2sodm9pZCogY29udGV4dCkKLXsKLSAgICBBU1NFUlRfQVJH
KGNvbnRleHQsIGNvbnRleHQpOwotCi0gICAgV29ya1F1ZXVlKiBxdWV1ZSA9IHN0YXRpY19jYXN0
PFdvcmtRdWV1ZSo+KGNvbnRleHQpOwotCi0gICAgaWYgKCFxdWV1ZS0+dHJ5UmVnaXN0ZXJBc1dv
cmtUaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBxdWV1ZS0+cGVyZm9ybVdvcmtP
blJlZ2lzdGVyZWRXb3JrVGhyZWFkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgV29ya1F1
ZXVlOjpwZXJmb3JtV29ya09uUmVnaXN0ZXJlZFdvcmtUaHJlYWQoKQotewotICAgIEFTU0VSVCht
X2lzV29ya1RocmVhZFJlZ2lzdGVyZWQpOwotCi0gICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKLQot
ICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2subG9jaygpOwotCi0gICAgd2hpbGUgKGlzVmFsaWQgJiYg
IW1fd29ya0l0ZW1RdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxXb3Jr
SXRlbVdpbj4gPiB3b3JrSXRlbVF1ZXVlOwotICAgICAgICBtX3dvcmtJdGVtUXVldWUuc3dhcCh3
b3JrSXRlbVF1ZXVlKTsKLQotICAgICAgICAvLyBBbGxvdyBtb3JlIHdvcmsgdG8gYmUgc2NoZWR1
bGVkIHdoaWxlIHdlJ3JlIG5vdCB1c2luZyB0aGUgcXVldWUgZGlyZWN0bHkuCi0gICAgICAgIG1f
d29ya0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgd29ya0l0ZW1RdWV1ZS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1faXNWYWxpZE11dGV4KTsKLSAgICAgICAgICAgIGlzVmFsaWQgPSBtX2lzVmFsaWQ7
Ci0gICAgICAgICAgICBpZiAoIWlzVmFsaWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB3b3JrSXRlbVF1ZXVlW2ldLT5mdW5jdGlvbigpKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgbV93b3JrSXRlbVF1ZXVlTG9jay5sb2NrKCk7Ci0gICAgfQotCi0gICAgLy8gT25lIGludmFy
aWFudCB3ZSBtYWludGFpbiBpcyB0aGF0IGFueSB3b3JrIHNjaGVkdWxlZCB3aGlsZSBhIHdvcmsg
dGhyZWFkIGlzIHJlZ2lzdGVyZWQgd2lsbAotICAgIC8vIGJlIGhhbmRsZWQgYnkgdGhhdCB3b3Jr
IHRocmVhZC4gVW5yZWdpc3RlciBhcyB0aGUgd29yayB0aHJlYWQgd2hpbGUgdGhlIHF1ZXVlIGxv
Y2sgaXMgc3RpbGwKLSAgICAvLyBoZWxkIHNvIHRoYXQgbm8gd29yayBjYW4gYmUgc2NoZWR1bGVk
IHdoaWxlIHdlJ3JlIHN0aWxsIHJlZ2lzdGVyZWQuCi0gICAgdW5yZWdpc3RlckFzV29ya1RocmVh
ZCgpOwotCi0gICAgbV93b3JrSXRlbVF1ZXVlTG9jay51bmxvY2soKTsKLX0KLQotdm9pZCBXb3Jr
UXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lKQotewotICAgIG1faXNX
b3JrVGhyZWFkUmVnaXN0ZXJlZCA9IDA7Ci0gICAgbV90aW1lclF1ZXVlID0gOjpDcmVhdGVUaW1l
clF1ZXVlKCk7Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3RpbWVyUXVldWUsICI6OkNyZWF0
ZVRpbWVyUXVldWUgZmFpbGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7Ci19
Ci0KLWJvb2wgV29ya1F1ZXVlOjp0cnlSZWdpc3RlckFzV29ya1RocmVhZCgpCi17Ci0gICAgTE9O
RyByZXN1bHQgPSA6OkludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKCZtX2lzV29ya1RocmVhZFJl
Z2lzdGVyZWQsIDEsIDApOwotICAgIEFTU0VSVCghcmVzdWx0IHx8IHJlc3VsdCA9PSAxKTsKLSAg
ICByZXR1cm4gIXJlc3VsdDsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJBc1dvcmtU
aHJlYWQoKQotewotICAgIExPTkcgcmVzdWx0ID0gOjpJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5n
ZSgmbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkLCAwLCAxKTsKLSAgICBBU1NFUlRfVU5VU0VEKHJl
c3VsdCwgcmVzdWx0ID09IDEpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlk
YXRlKCkKLXsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgTXV0ZXhMb2NrZXIgbG9jayhtX2hh
bmRsZXNMb2NrKTsKLSAgICBBU1NFUlQobV9oYW5kbGVzLmlzRW1wdHkoKSk7Ci0jZW5kaWYKLQot
ICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGFueSB0aW1lci1xdWV1ZSB0aW1l
cnMgdGhhdCBmaXJlIGFmdGVyIHRoaXMgcG9pbnQgZG9uJ3QgdHJ5IHRvCi0gICAgLy8gYWNjZXNz
IHRoaXMgV29ya1F1ZXVlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzQ0NjkwPi4KLSAgICA6OkRlbGV0
ZVRpbWVyUXVldWVFeChtX3RpbWVyUXVldWUsIDApOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlz
cGF0Y2goY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fd29ya0l0ZW1RdWV1ZUxvY2spOwotCi0gICAgbV93b3JrSXRlbVF1ZXVlLmFw
cGVuZChXb3JrSXRlbVdpbjo6Y3JlYXRlKGZ1bmN0aW9uLCB0aGlzKSk7Ci0KLSAgICAvLyBTcGF3
biBhIHdvcmsgdGhyZWFkIHRvIHBlcmZvcm0gdGhlIHdvcmsgd2UganVzdCBhZGRlZC4gQXMgYW4g
b3B0aW1pemF0aW9uLCB3ZSBhdm9pZAotICAgIC8vIHNwYXduaW5nIHRoZSB0aHJlYWQgaWYgYSB3
b3JrIHRocmVhZCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuIFRoaXMgcHJldmVudHMgbXVsdGlwbGUg
d29yawotICAgIC8vIHRocmVhZHMgZnJvbSBiZWluZyBzcGF3bmVkIGluIG1vc3QgY2FzZXMuIChO
b3RlIHRoYXQgd2hlbiBhIHdvcmsgdGhyZWFkIGhhcyBiZWVuIHNwYXduZWQgYnV0Ci0gICAgLy8g
aGFzbid0IHJlZ2lzdGVyZWQgaXRzZWxmIHlldCwgbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkIHdp
bGwgYmUgZmFsc2UgYW5kIHdlJ2xsIGVuZCB1cAotICAgIC8vIHNwYXduaW5nIGEgc2Vjb25kIHdv
cmsgdGhyZWFkIGhlcmUuIEJ1dCB3b3JrIHRocmVhZCByZWdpc3RyYXRpb24gcHJvY2VzcyB3aWxs
IGVuc3VyZSB0aGF0Ci0gICAgLy8gb25seSBvbmUgdGhyZWFkIGFjdHVhbGx5IGVuZHMgdXAgcGVy
Zm9ybWluZyB3b3JrLikKLSAgICBpZiAoIW1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCkKLSAgICAg
ICAgOjpRdWV1ZVVzZXJXb3JrSXRlbSh3b3JrVGhyZWFkQ2FsbGJhY2ssIHRoaXMsIFdUX0VYRUNV
VEVERUZBVUxUKTsKLX0KLQotc3RydWN0IFRpbWVyQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxUaW1lckNvbnRleHQ+IHsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaW1lckNv
bnRleHQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaW1lckNvbnRleHQpOyB9Ci0K
LSAgICBXb3JrUXVldWUqIHF1ZXVlOwotICAgIEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb247Ci0g
ICAgTXV0ZXggdGltZXJNdXRleDsKLSAgICBIQU5ETEUgdGltZXI7Ci0KLXByaXZhdGU6Ci0gICAg
VGltZXJDb250ZXh0KCkgOiBxdWV1ZSgwKSwgdGltZXIoMCkgeyB9Ci19OwotCi12b2lkIFdvcmtR
dWV1ZTo6dGltZXJDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0Rmly
ZWQpCi17Ci0gICAgQVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKLSAgICBBU1NFUlRfVU5V
U0VEKHRpbWVyT3JXYWl0RmlyZWQsIHRpbWVyT3JXYWl0RmlyZWQpOwotCi0gICAgLy8gQmFsYW5j
ZWQgYnkgbGVha1JlZiBpbiBzY2hlZHVsZVdvcmtBZnRlckRlbGF5LgotICAgIFJlZlB0cjxUaW1l
ckNvbnRleHQ+IHRpbWVyQ29udGV4dCA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PFRpbWVyQ29udGV4
dCo+KGNvbnRleHQpKTsKLQotICAgIHRpbWVyQ29udGV4dC0+cXVldWUtPmRpc3BhdGNoKHRpbWVy
Q29udGV4dC0+ZnVuY3Rpb24pOwotCi0gICAgTXV0ZXhMb2NrZXIgbG9jayh0aW1lckNvbnRleHQt
PnRpbWVyTXV0ZXgpOwotICAgIEFTU0VSVCh0aW1lckNvbnRleHQtPnRpbWVyKTsKLSAgICBBU1NF
UlQodGltZXJDb250ZXh0LT5xdWV1ZS0+bV90aW1lclF1ZXVlKTsKLSAgICBpZiAoITo6RGVsZXRl
VGltZXJRdWV1ZVRpbWVyKHRpbWVyQ29udGV4dC0+cXVldWUtPm1fdGltZXJRdWV1ZSwgdGltZXJD
b250ZXh0LT50aW1lciwgMCkpCi0gICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZmFsc2UsICI6
OkRlbGV0ZVRpbWVyUXVldWVUaW1lciBmYWlsZWQgd2l0aCBlcnJvciAlbHUiLCA6OkdldExhc3RF
cnJvcigpKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBG
dW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5KQotewotICAgIEFTU0VSVCht
X3RpbWVyUXVldWUpOwotCi0gICAgUmVmUHRyPFRpbWVyQ29udGV4dD4gY29udGV4dCA9IFRpbWVy
Q29udGV4dDo6Y3JlYXRlKCk7Ci0gICAgY29udGV4dC0+cXVldWUgPSB0aGlzOwotICAgIGNvbnRl
eHQtPmZ1bmN0aW9uID0gZnVuY3Rpb247Ci0KLSAgICB7Ci0gICAgICAgIC8vIFRoZSB0aW1lciBj
YWxsYmFjayBjb3VsZCBmaXJlIGJlZm9yZSA6OkNyZWF0ZVRpbWVyUXVldWVUaW1lciBldmVuIHJl
dHVybnMsIHNvIHdlIHByb3RlY3QKLSAgICAgICAgLy8gY29udGV4dC0+dGltZXIgd2l0aCBhIG11
dGV4IHRvIGVuc3VyZSB0aGUgdGltZXIgY2FsbGJhY2sgZG9lc24ndCBhY2Nlc3MgaXQgYmVmb3Jl
IHRoZQotICAgICAgICAvLyB0aW1lciBoYW5kbGUgaGFzIGJlZW4gc3RvcmVkIGluIGl0LgotICAg
ICAgICBNdXRleExvY2tlciBsb2NrKGNvbnRleHQtPnRpbWVyTXV0ZXgpOwotCi0gICAgICAgIC8v
IFNpbmNlIG91ciB0aW1lciBjYWxsYmFjayBpcyBxdWljaywgd2UgY2FuIGV4ZWN1dGUgaW4gdGhl
IHRpbWVyIHRocmVhZCBpdHNlbGYgYW5kIGF2b2lkCi0gICAgICAgIC8vIGFuIGV4dHJhIHRocmVh
ZCBzd2l0Y2ggb3ZlciB0byBhIHdvcmtlciB0aHJlYWQuCi0gICAgICAgIGlmICghOjpDcmVhdGVU
aW1lclF1ZXVlVGltZXIoJmNvbnRleHQtPnRpbWVyLCBtX3RpbWVyUXVldWUsIHRpbWVyQ2FsbGJh
Y2ssIGNvbnRleHQuZ2V0KCksIGRlbGF5ICogMTAwMCwgMCwgV1RfRVhFQ1VURUlOVElNRVJUSFJF
QUQpKSB7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZhbHNlLCAiOjpDcmVhdGVU
aW1lclF1ZXVlVGltZXIgZmFpbGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgdGlt
ZXIgY2FsbGJhY2sgd2lsbCBoYW5kbGUgZGVzdHJveWluZyBjb250ZXh0LgotICAgIGNvbnRleHQu
cmVsZWFzZSgpLmxlYWtSZWYoKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJXYWl0
QW5kRGVzdHJveUl0ZW1Tb29uKFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW0pCi17Ci0g
ICAgLy8gV2UncmUgZ29pbmcgdG8gbWFrZSBhIGJsb2NraW5nIGNhbGwgdG8gOjpVbnJlZ2lzdGVy
V2FpdEV4IGJlZm9yZSBjbG9zaW5nIHRoZSBoYW5kbGUuIChUaGUKLSAgICAvLyBibG9ja2luZyB2
ZXJzaW9uIG9mIDo6VW5yZWdpc3RlcldhaXRFeCBpcyBtdWNoIHNpbXBsZXIgdGhhbiB0aGUgbm9u
LWJsb2NraW5nIHZlcnNpb24uKSBJZiB3ZQotICAgIC8vIGRvIHRoaXMgb24gdGhlIGN1cnJlbnQg
dGhyZWFkLCB3ZSdsbCBkZWFkbG9jayBpZiB3ZSdyZSBjdXJyZW50bHkgaW4gYSBjYWxsYmFjayBm
dW5jdGlvbiBmb3IKLSAgICAvLyB0aGUgd2FpdCB3ZSdyZSB1bnJlZ2lzdGVyaW5nLiBTbyBpbnN0
ZWFkIHdlIGRvIGl0IGFzeW5jaHJvbm91c2x5IG9uIHNvbWUgb3RoZXIgd29ya2VyIHRocmVhZC4K
LQotICAgIDo6UXVldWVVc2VyV29ya0l0ZW0odW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbUNh
bGxiYWNrLCBpdGVtLmxlYWtSZWYoKSwgV1RfRVhFQ1VURURFRkFVTFQpOwotfQotCi1EV09SRCBX
SU5BUEkgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtQ2FsbGJhY2sodm9p
ZCogY29udGV4dCkKLXsKLSAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOwotICAgIFJl
ZlB0cjxIYW5kbGVXb3JrSXRlbT4gaXRlbSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PEhhbmRsZVdv
cmtJdGVtKj4oY29udGV4dCkpOwotCi0gICAgLy8gTm93IHRoYXQgd2Uga25vdyB3ZSdyZSBub3Qg
aW4gYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIHdhaXQgd2UncmUgdW5yZWdpc3RlcmluZywg
d2UgY2FuCi0gICAgLy8gbWFrZSBhIGJsb2NraW5nIGNhbGwgdG8gOjpVbnJlZ2lzdGVyV2FpdEV4
LgotICAgIGlmICghOjpVbnJlZ2lzdGVyV2FpdEV4KGl0ZW0tPndhaXRIYW5kbGUoKSwgSU5WQUxJ
RF9IQU5ETEVfVkFMVUUpKSB7Ci0gICAgICAgIERXT1JEIGVycm9yID0gOjpHZXRMYXN0RXJyb3Io
KTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDdkMDYxODQuLmY5YjMzNjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC04LDcgKzgsNiBAQCBMSVNUKEFQUEVORCBXZWJLaXQy
X0xJTktfRkxBR1MKIAogTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgUGxhdGZvcm0v
ZWZsL01vZHVsZUVmbC5jcHAKLSAgICBQbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcAogICAg
IFBsYXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHAKIAogICAgIFBsYXRmb3JtL0NvcmVJ
UEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Rh
cmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDJjYThjMmUuLmYxNDZl
OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dl
YktpdDIvVGFyZ2V0LnByaQpAQCAtMzAsOSArMzAsNyBAQCBIRUFERVJTICs9IFwKICAgICBQbGF0
Zm9ybS9Db3JlSVBDL01lc3NhZ2VTZW5kZXIuaCBcCiAgICAgUGxhdGZvcm0vTG9nZ2luZy5oIFwK
ICAgICBQbGF0Zm9ybS9Nb2R1bGUuaCBcCi0gICAgUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRl
bnRpZmllci5oIFwKICAgICBQbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaCBcCi0gICAgUGxhdGZvcm0v
V29ya1F1ZXVlLmggXAogICAgIFBsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5Lmgg
XAogICAgIFBsdWdpblByb2Nlc3MvUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmggXAogICAgIFBs
dWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5oIFwKQEAgLTQwNiw3ICs0MDQsNiBAQCBTT1VSQ0VT
ICs9IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0RhdGFSZWZlcmVuY2UuY3BwIFwKICAgICBQbGF0
Zm9ybS9Mb2dnaW5nLmNwcCBcCiAgICAgUGxhdGZvcm0vTW9kdWxlLmNwcCBcCi0gICAgUGxhdGZv
cm0vV29ya1F1ZXVlLmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvTG9nZ2luZ1F0LmNwcCBcCiAgICAg
UGxhdGZvcm0vcXQvTW9kdWxlUXQuY3BwIFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRy
b2xsZXJQcm94eS5jcHAgXApAQCAtODEzLDE0ICs4MTAsMTIgQEAgbWFjOiB7CiAgICAgU09VUkNF
UyArPSBcCiAgICAgICAgIFBsYXRmb3JtL0NvcmVJUEMvbWFjL0Nvbm5lY3Rpb25NYWMuY3BwIFwK
ICAgICAgICAgUGxhdGZvcm0vbWFjL01hY2hVdGlsaXRpZXMuY3BwIFwKLSAgICAgICAgUGxhdGZv
cm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAgXAogICAgICAgICBQbGF0Zm9ybS9tYWMvU2hhcmVkTWVt
b3J5TWFjLmNwcAogCiB9IGVsc2UgewogICAgIFNPVVJDRVMgKz0gXAogICAgICAgICBQbGF0Zm9y
bS9Db3JlSVBDL3VuaXgvQXR0YWNobWVudFVuaXguY3BwIFwKICAgICAgICAgUGxhdGZvcm0vQ29y
ZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBcCi0gICAgICAgIFBsYXRmb3JtL3F0L1dvcmtR
dWV1ZVF0LmNwcCBcCiAgICAgICAgIFBsYXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHAK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nl
c3NMYXVuY2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vz
c0xhdW5jaGVyLmNwcAppbmRleCBiYTIyZGRhLi42N2RlZjc2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmNwcApAQCAtMjYs
OCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hl
ci5oIgogCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1
bmNoZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNo
ZXIuaAppbmRleCBiYzFmODY3Li5kNjFiZDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oCkBAIC0yNyw3ICsyNyw3IEBACiAj
ZGVmaW5lIFdlYlByb2Nlc3NMYXVuY2hlcl9oCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaAppbmRleCBmM2E1MzEyLi45YzZiMTI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaApA
QCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBUaHJlYWRMYXVuY2hlcl9oCiAKICNpbmNsdWRlICJD
b25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgorI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDU3YWI4NmMuLjBlOTViZTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTQwLDcgKzQwLDYgQEAKICNlbmRpZgogI2lu
Y2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXJQcm94eS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50
aWZpZXIuaCIKICNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiU2hhcmVh
YmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV0tCYXNlLmgiCkBAIC03Myw2ICs3Miw3IEBACiAjaW5j
bHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRp
Zmllci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmgKaW5kZXggOGU3NjhiZi4uNjQxOWE3YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaApAQCAtMjYsNyArMjYsNiBAQAogI2lm
bmRlZiBXZWJQcm9jZXNzUHJveHlfaAogI2RlZmluZSBXZWJQcm9jZXNzUHJveHlfaAogCi0jaW5j
bHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlBsdWdpbkluZm9T
dG9yZS5oIgogI2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hlci5oIgogI2luY2x1ZGUgIlByb2Nlc3NN
b2RlbC5oIgpAQCAtMzksNiArMzgsNyBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDYwNzdmNmQuLmVhZDQ3OGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTQ3Niw3ICs0NzYsNiBAQAogCQlCNjM0MDNGOTE0OTEwRDU3MDAxMDcwQjUgLyogQVBJT2Jq
ZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI2
MzQwM0Y4MTQ5MTBENTcwMDEwNzBCNSAvKiBBUElPYmplY3QuY3BwICovOyB9OwogCQlCODc4QjYx
NTEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCODc4QjYxMzEzMzQyOERDMDA2ODg4RTkgLyog
Q29ycmVjdGlvblBhbmVsLmggKi87IH07CiAJCUI4NzhCNjE2MTMzNDI4REMwMDY4ODhFOSAvKiBD
b3JyZWN0aW9uUGFuZWwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCODc4QjYxNDEzMzQyOERDMDA2ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLm1tICov
OyB9OwotCQlCQzAwOTJGODExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDA5MkY2MTE1ODM3
QTMwMEUwQUUyQSAvKiBXb3JrUXVldWVNYWMuY3BwICovOyB9OwogCQlCQzAzMkQ3NTEwRjQzNzhE
MDA1OEMxNUEgLyogV2ViQ2hyb21lQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAzMkQ2MDEwRjQzNzhEMDA1OEMxNUEgLyogV2ViQ2hyb21l
Q2xpZW50LmggKi87IH07CiAJCUJDMDMyRDc3MTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJDb250ZXh0
TWVudUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMwMzJENjIxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNvbnRleHRNZW51Q2xpZW50LmggKi87
IH07CiAJCUJDMDMyRDdCMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJEcmFnQ2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAzMkQ2NjEwRjQzNzhE
MDA1OEMxNUEgLyogV2ViRHJhZ0NsaWVudC5oICovOyB9OwpAQCAtNTY5LDggKzU2OCw2IEBACiAJ
CUJDMkQwMjE3MTJBQzQxQ0IwMEU3MzJBMyAvKiBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyRDAyMTYx
MkFDNDFDQjAwRTczMkEzIC8qIFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmggKi87IH07CiAJ
CUJDMkQwMjE5MTJBQzQyNkMwMEU3MzJBMyAvKiBXS1BhZ2VMb2FkVHlwZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkQwMjE4MTJBQzQyNkMwMEU3
MzJBMyAvKiBXS1BhZ2VMb2FkVHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlCQzJERkJBMzEyQTc2MUE1MDBFNzMyQTMgLyogV2ViUHJlZmVy
ZW5jZXNDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzJERkJBMjEyQTc2MUE1MDBFNzMyQTMgLyogV2ViUHJlZmVyZW5jZXNDRi5jcHAgKi87IH07
Ci0JCUJDMkU2RThEMTE0MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyRTZFN0QxMTQxOTcwQzAwQTYz
QjFFIC8qIFdvcmtRdWV1ZS5jcHAgKi87IH07Ci0JCUJDMkU2RThFMTE0MTk3MTUwMEE2M0IxRSAv
KiBXb3JrUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMkU2RTdFMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCAqLzsgfTsKIAkJQkMz
MDY1QzQxMjU5MkY4OTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzMwNjVDMzEyNTkyRjg5MDBFNzEyNzgg
LyogV2ViUHJvY2Vzc01hYy5tbSAqLzsgfTsKIAkJQkMzMDY1RkExMjU5MzQ0RTAwRTcxMjc4IC8q
IENhY2hlTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMzA2NUY5MTI1OTM0NEUwMEU3MTI3OCAvKiBDYWNoZU1vZGVsLmggKi87IH07CiAJCUJD
MzA2NkJFMTI1QTQ0MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMzA2NkJDMTI1
QTQ0MjEwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKQEAg
LTE1MTQsNyArMTUxMSw2IEBACiAJCUI2MzQwM0Y4MTQ5MTBENTcwMDEwNzBCNSAvKiBBUElPYmpl
Y3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJT2JqZWN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjg3OEI2MTMxMzM0MjhEQzAwNjg4OEU5
IC8qIENvcnJlY3Rpb25QYW5lbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b3JyZWN0aW9uUGFuZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjg3OEI2MTQx
MzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvcnJlY3Rpb25QYW5lbC5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQkMwMDkyRjYxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtRdWV1ZU1hYy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrUXVldWVNYWMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAzMkQ2MDEwRjQzNzhEMDA1OEMxNUEg
LyogV2ViQ2hyb21lQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YkNocm9tZUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAzMkQ2MjEw
RjQzNzhEMDA1OEMxNUEgLyogV2ViQ29udGV4dE1lbnVDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29udGV4dE1lbnVDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkMwMzJENjYxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkRyYWdDbGllbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRHJhZ0NsaWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYxMyw4ICsxNjA5LDYgQEAKIAkJQkMyRDAyMTYx
MkFDNDFDQjAwRTczMkEzIC8qIFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMkQwMjE4MTJBQzQyNkMwMEU3MzJBMyAvKiBX
S1BhZ2VMb2FkVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQYWdl
TG9hZFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMkRGQkEyMTJBNzYx
QTUwMEU3MzJBMyAvKiBXZWJQcmVmZXJlbmNlc0NGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFdlYlByZWZlcmVuY2VzQ0YuY3BwOyBwYXRoID0gY2YvV2ViUHJlZmVy
ZW5jZXNDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDMkU2RTdEMTE0MTk3
MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV29ya1F1ZXVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkMy
RTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXb3JrUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkMzMDY1QzMxMjU5MkY4OTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQcm9jZXNzTWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzMwNjVGOTEyNTkzNDRFMDBFNzEyNzggLyogQ2FjaGVNb2Rl
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZU1vZGVsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMzA2NkI5MTI1QTQzNjMwMEU3MTI3OCAvKiBXZWJQ
cm9jZXNzLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlByb2Nlc3MubWVz
c2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjk4LDcgKzIyOTIsNiBA
QAogCQkJCTFBMjRCRjM5MTIwODk2QTYwMEZCQjA1OSAvKiBTaGFyZWRNZW1vcnlNYWMuY3BwICov
LAogCQkJCTI5NkJEODVCMTUwMTlCQzMwMDcxRjQyNCAvKiBTdHJpbmdVdGlsaXRpZXMuaCAqLywK
IAkJCQkyOTZCRDg1QzE1MDE5QkMzMDA3MUY0MjQgLyogU3RyaW5nVXRpbGl0aWVzLm1tICovLAot
CQkJCUJDMDA5MkY2MTE1ODM3QTMwMEUwQUUyQSAvKiBXb3JrUXVldWVNYWMuY3BwICovLAogCQkJ
KTsKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzMzNiw4
ICszMzI5LDYgQEAKIAkJCQlDMEUzQUE0NDEyMDlFMkJBMDBBNDlEMDEgLyogTW9kdWxlLmggKi8s
CiAJCQkJQkM4NzgwRkIxMTYxQzJCODAwQ0MyNzY4IC8qIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZp
ZXIuaCAqLywKIAkJCQkxQTI0QkVEMzEyMDg5NEQxMDBGQkIwNTkgLyogU2hhcmVkTWVtb3J5Lmgg
Ki8sCi0JCQkJQkMyRTZFN0QxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgKi8sCi0J
CQkJQkMyRTZFN0UxMTQxOTcwQzAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5oICovLAogCQkJKTsKIAkJ
CXBhdGggPSBQbGF0Zm9ybTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00MTg5LDcg
KzQxODAsNiBAQAogCQkJCUJDODY5OUI1MTE2QUFEQUEwMDJBOTI1QiAvKiBXS1ZpZXcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDODY5OUI3MTE2QUFEQUEwMDJBOTI1QiAvKiBXS1ZpZXdJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkZBNjE3OUYxMkYwQjk5RDAwMzNFMENBIC8qIFdLVmll
d1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDMkU2RThFMTE0MTk3MTUwMEE2M0IxRSAv
KiBXb3JrUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxN0JGOTk2MTREMEE3M0UwMEE1QTA2
OSAvKiBOZXRzY2FwZVNhbmRib3hGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTA5
Mzc4MTRGQjEyOEMwMDExMzhEOSAvKiBMYXllckhvc3RpbmdDb250ZXh0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkyOTZCRDg1RDE1MDE5QkMzMDA3MUY0MjQgLyogU3RyaW5nVXRpbGl0aWVzLmggaW4g
SGVhZGVycyAqLywKQEAgLTQ5MzYsOCArNDkyNiw2IEBACiAJCQkJQkM0MDc2MkMxMjRGRjA0MDAw
NjhGMjBBIC8qIFdLVVJMUmVzcG9uc2VOUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY2MTEzRTI4
MTI2Q0UxOUIwMDU3RDBBNyAvKiBXS1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzg2OTlCNjExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3Lm1tIGluIFNvdXJj
ZXMgKi8sCi0JCQkJQkMyRTZFOEQxMTQxOTcxNTAwQTYzQjFFIC8qIFdvcmtRdWV1ZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlCQzAwOTJGODExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFj
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxN0JGOTk4MTREMEFBODMwMEE1QTA2OSAvKiBOZXRz
Y2FwZVNhbmRib3hGdW5jdGlvbnMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0UwOTM3NzE0RkIx
MjhDMDAxMTM4RDkgLyogTGF5ZXJIb3N0aW5nQ29udGV4dC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTI5NkJEODVFMTUwMTlCQzMwMDcxRjQyNCAvKiBTdHJpbmdVdGlsaXRpZXMubW0gaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvaiBiL1Nv
dXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagppbmRleCAwYTM4YzRiLi4zNzI1MmI2IDEw
MDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oKKysrIGIvU291cmNl
L1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCkBAIC0zOTM0LDE0ICszOTM0LDYgQEAKIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXFBsYXRmb3JtXFNoYXJlZE1lbW9yeS5oIgogCQkJCT4KIAkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxQbGF0Zm9ybVxXb3JrUXVldWUuY3Bw
IgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxQbGF0
Zm9ybVxXb3JrUXVldWUuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+CiAJCQk8RmlsdGVyCiAJCQkJTmFt
ZT0iY2ciCiAJCQkJPgpAQCAtMzk4MSwxMCArMzk3Myw2IEBACiAJCQkJCVJlbGF0aXZlUGF0aD0i
Li5cUGxhdGZvcm1cd2luXFNoYXJlZE1lbW9yeVdpbi5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+
Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxQbGF0Zm9ybVx3aW5cV29ya1F1ZXVl
V2luLmNwcCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KIAkJCTwvRmlsdGVyPgogCQkJPEZpbHRlcgog
CQkJCU5hbWU9IkNvcmVJUEMiCi0tIAoxLjcuOS41Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>152865</attachid>
            <date>2012-07-17 16:20:41 -0700</date>
            <delta_ts>2012-07-17 19:55:00 -0700</delta_ts>
            <desc>Parallel image decoders (not for review)</desc>
            <filename>0001-Add-parallel-image-decoders.patch</filename>
            <type>text/plain</type>
            <size>294618</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">RnJvbSAwN2I2YzM0NmE0ZjBlZDVmY2UxMGI2YjZjNDcwNTE0NGUwODg3NTBhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLd2FuZyBZdWwgU2VvIDxza3l1bEBjb21wYW55MTAwLm5ldD4K
RGF0ZTogTW9uLCA5IEp1bCAyMDEyIDIxOjU2OjE4ICswOTAwClN1YmplY3Q6IFtQQVRDSF0gQWRk
IHBhcmFsbGVsIGltYWdlIGRlY29kZXJzLgoKLS0tCiBTb3VyY2UvV1RGL0NoYW5nZUxvZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNDcgKysrKysrKwogU291cmNlL1dURi9HTlVt
YWtlZmlsZS5saXN0LmFtICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKIFNvdXJjZS9XVEYv
V1RGLnBybyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCiBTb3VyY2Uv
V1RGL1dURi52Y3Byb2ovV1RGLnZjcHJvaiAgICAgICAgICAgICAgICAgICB8ICAgMTIgKwogU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiAgICAgICAgICAgfCAgIDEyICsK
IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0ICAgICAgICAgICAgICAgICAgICAgIHwgICAg
MiArCiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVmbC5jbWFrZSAgICAgICAgICAgICAgICAgICB8
ICAgIDEgKwogU291cmNlL1dURi93dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oICAgICAg
ICAgfCAgIDU5ICsrKwogU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcCAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDU1ICsrKwogU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmggICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgMjE2ICsrKysrKysrKysKIFNvdXJjZS9XVEYvd3RmL2Nocm9taXVt
L01haW5UaHJlYWRDaHJvbWl1bS5jcHAgICAgIHwgICAxMyArCiBTb3VyY2UvV1RGL3d0Zi9lZmwv
V29ya1F1ZXVlRWZsLmNwcCAgICAgICAgICAgICAgICB8ICAxNzMgKysrKysrKysKIFNvdXJjZS9X
VEYvd3RmL2d0ay9Xb3JrUXVldWVHdGsuY3BwICAgICAgICAgICAgICAgIHwgIDIyOSArKysrKysr
KysrCiBTb3VyY2UvV1RGL3d0Zi9tYWMvV29ya1F1ZXVlTWFjLmNwcCAgICAgICAgICAgICAgICB8
ICAxNzggKysrKysrKysKIFNvdXJjZS9XVEYvd3RmL3F0L1dvcmtRdWV1ZVF0LmNwcCAgICAgICAg
ICAgICAgICAgIHwgIDEzMiArKysrKysKIFNvdXJjZS9XVEYvd3RmL3dpbi9Xb3JrUXVldWVXaW4u
Y3BwICAgICAgICAgICAgICAgIHwgIDI5MSArKysrKysrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKwogU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDQzICsrKysrKysrKysr
KysrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtICAgICAgICAgICAg
ICAgICB8ICAgIDggKwogU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgICA4ICsKIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAgOCArCiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvaiAgICAgICB8ICAgMzIgKysKIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiAgIHwgICAxOCArCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHAgICB8ICAxMzQgKysrKy0tCiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oICAgICB8ICAgNDcgKystCiAuLi4vcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVXb3JrZXIuY3BwICAgICAgICB8ICAxMzggKysrKysrCiAu
Li4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZVdvcmtlci5oICB8ICAgNzEg
KysrKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwICAg
fCAgMTg5ICsrKysrKystLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuaCAgICAgfCAgIDg2ICsrKy0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZU9ic2VydmVyLmggICAgICAgIHwgICA0NCArKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL1BhcmFs
bGVsSW1hZ2VEZWNvZGVyLmNwcCAgICAgfCAgMzA0ICsrKysrKysrKysrKysrCiAuLi4vcGxhdGZv
cm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURlY29kZXIuaCAgICAgICB8ICAxMDQgKysrKysKIC4u
Li9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyLmggICAgICAgIHwgICA0NCAr
KwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL1JldGFpbmVkTW9kZUJpdG1hcEltYWdlLmNwcCAgfCAg
MTcyICsrKysrKysrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1h
Z2UuaCAgICB8ICAxMDEgKysrKysKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJ
bWFnZUNhaXJvLmNwcCAgIHwgICAgOSArLQogLi4uL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dDNEQ2Fpcm8uY3BwICAgICAgfCAgICA3ICstCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0M0RDRy5jcHAgICB8ICAgIDMgKy0KIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwICAgIHwgICAxMSArLQogLi4uL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAgfCAgIDM5ICstCiAuLi4vcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbnZnL0ltYWdlT3BlblZHLmNwcCAgICAgICB8ICAgIDggKy0KIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwICAgIHwgICAgOSArLQog
Li4uL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcCAgICAgICAgfCAgICA5
ICstCiAuLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAgICB8
ICAgIDUgKy0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlV2luQ0Uu
Y3BwIHwgICAgNSArLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VX
eC5jcHAgICAgfCAgICA5ICstCiAuLi4vcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmNwcCAgICAgICB8ICAgIDQgKwogLi4uL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvSW1hZ2VEZWNvZGVyLmggfCAgIDExICsKIC4uLi9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5
L0pQRUdJbWFnZURlY29kZXIuY3BwIHwgICAgMSArCiAuLi4vaW1hZ2UtZGVjb2RlcnMvYm1wL0JN
UEltYWdlRGVjb2Rlci5jcHAgICAgICAgICB8ICAgIDkgKy0KIC4uLi9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwIHwgICAgNyArLQogLi4uL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwICAgICAgICAgfCAgICA3ICstCiAuLi4vaW1hZ2Ut
ZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcCAgICAgICB8ICAgIDIgKwogLi4uL2lt
YWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwICAgICAgICAgfCAgICAxICsKIC4u
Li9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3BwICAgICAgIHwgICAgMyAr
CiAuLi4vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcCAgICAgICB8ICAg
MjUgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcCAgICAgICAg
IHwgICAgOCArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgICAgICAg
ICAgICAgfCAgIDEyICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwICB8ICAgMjkgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5jcHAgICAgICAgICAgIHwgICAxMCArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHAgICAgfCAgICA1ICsKIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwICAgICAgICAgIHwgICAyMiArLQogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oICAgICAgICAgICAgfCAgICAzICstCiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmNwcCAgICAgICB8ICAgIDYgKy0KIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuaCAgICAgICAgIHwgICAgNCArLQogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAgICAgfCAgICA1ICstCiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICB8ICAgMzcg
KysKIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkltYWdlQ0cuY3BwICAgICAgICAgIHwg
ICAgMyArLQogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VTa2lhLmNwcCAgICAg
ICAgfCAgICAzICstCiBTb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAg
ICAgICAgICB8ICAgIDEgLQogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgIDI5ICsrCiBTb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFt
ICAgICAgICAgICAgICAgICB8ICAgIDYgLQogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy9Db25uZWN0aW9uLmggICAgICAgfCAgICA2ICstCiAuLi4vUGxhdGZvcm0vQ29yZUlQQy91bml4
L0Nvbm5lY3Rpb25Vbml4LmNwcCAgICAgICB8ICAgIDIgKy0KIC4uLi9XZWJLaXQyL1BsYXRmb3Jt
L1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCAgIHwgICA1NyAtLS0KIFNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAgICAgICAgICAgICAgIHwgICA1MSAtLS0KIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oICAgICAgICAgICAgICAgIHwgIDIxMCAtLS0tLS0t
LS0tCiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcCAgICAgICB8
ICAxNzMgLS0tLS0tLS0KIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsu
Y3BwICAgICAgIHwgIDIzMCAtLS0tLS0tLS0tCiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMv
V29ya1F1ZXVlTWFjLmNwcCAgICAgICB8ICAxNzggLS0tLS0tLS0KIFNvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcCAgICAgICAgIHwgIDEzMCAtLS0tLS0KIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL3dpbi9Xb3JrUXVldWVXaW4uY3BwICAgICAgIHwgIDI5MSAtLS0tLS0t
LS0tLS0tCiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSAgICAgICAgICAgICAgICAg
ICB8ICAgIDEgLQogU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICA1IC0KIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1
bmNoZXIuY3BwIHwgICAgMiArLQogLi4uL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nl
c3NMYXVuY2hlci5oICAgfCAgICAyICstCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNo
ZXIvVGhyZWFkTGF1bmNoZXIuaCB8ICAgIDIgKy0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaCAgICAgICAgICAgIHwgICAgMiArLQogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5oICAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogICB8ICAgMTIgLQogU291cmNlL1dlYktp
dDIvd2luL1dlYktpdDIudmNwcm9qICAgICAgICAgICAgICAgICAgfCAgIDEyIC0KIDkxIGZpbGVz
IGNoYW5nZWQsIDM2NzMgaW5zZXJ0aW9ucygrKSwgMTU0MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuY3BwCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV1RGL3d0Zi9lZmwvV29ya1F1ZXVlRWZsLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XVEYvd3RmL2d0ay9Xb3JrUXVldWVHdGsuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291
cmNlL1dURi93dGYvbWFjL1dvcmtRdWV1ZU1hYy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvV1RGL3d0Zi9xdC9Xb3JrUXVldWVRdC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V1RGL3d0Zi93aW4vV29ya1F1ZXVlV2luLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2RlV29ya2VyLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2RlV29y
a2VyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZU9ic2VydmVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlci5jcHAKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVj
b2Rlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuY3Bw
CiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmV0
YWluZWRNb2RlQml0bWFwSW1hZ2UuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaAogZGVsZXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAKIGRlbGV0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAogZGVsZXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2VmbC9Xb3JrUXVldWVFZmwuY3BwCiBkZWxldGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAKIGRl
bGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFj
LmNwcAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtR
dWV1ZVF0LmNwcAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3dp
bi9Xb3JrUXVldWVXaW4uY3BwCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBjOTQxNzNmLi42M2E0MTMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE1MCBAQAorMjAxMi0wNy0xMSAgS3dvbmppbiBKZW9uZyAgPGdyYW1AY29tcGFueTEwMC5uZXQ+
CisKKyAgICAgICAgQWRkIEltYWdlRGVjb2RlV29ya2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDg2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEltYWdlRGVjb2RlV29ya2VyIGlzIGEgdGhyZWFkIHBv
b2wgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gV29ya1F1ZXVlLgorICAgICAgICBJbWFnZURlY29k
ZVdvcmtlciBpbnRlcm5hbGx5IG1hbmFnZXMgYSBwb29sIG9mIFdvcmtRdWV1ZXMgKG4gPSBudW1i
ZXIKKyAgICAgICAgb2YgY29yZXMpIGFuZCBhc3NpZ25zIG9uZSBmcm9tIHRoZSBwb29sIHdoZW4g
YW4gSW1hZ2VEZWNvZGVXb3JrZXIKKyAgICAgICAgaW5zdGFuY2UgaXMgY3JlYXRlZC4gU28gdHdv
IEltYWdlRGVjb2RlV29ya2VycyBjYW4gc2hhcmUgb25lIFdvcmtRdWV1ZS4KKworICAgICAgICBQ
YXJhbGxlbCBpbWFnZSBkZWNvZGVycyBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgSW1hZ2VEZWNvZGVX
b3JrZXIgZm9yCisgICAgICAgIGVhY2ggaW1hZ2UuIFNvIHRoZSBudW1iZXIgb2YgSW1hZ2VEZWNv
ZGVXb3JrZXIgaW5zdGFuY2VzIGNhbiBiZQorICAgICAgICBhcmJpdHJhcmlseSBsYXJnZSwgYnV0
IHRoZSBudW1iZXIgb2YgV29ya1F1ZXVlcyBpcyBsaW1pdGVkIHRvIHRoZQorICAgICAgICBudW1i
ZXIgb2YgY29yZXMuIFRoaXMgZWZmZWN0aXZlbHkgdXRpbGl6ZXMgdGhlIHVuZGVybHlpbmcgY29y
ZXMuCisKKyAgICAgICAgKiB3dGYvY2hyb21pdW0vTWFpblRocmVhZENocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdURjo6Y2FsbEZ1bmN0aW9uT2JqZWN0KToKKyAgICAgICAgKFdURik6CisgICAgICAg
IChXVEY6OmNhbGxPbk1haW5UaHJlYWQpOgorCisyMDEyLTA3LTA5ICBLd2FuZyBZdWwgU2VvICA8
c2t5dWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgTW92ZSBXb3JrUXVldWUgdG8gV1RGCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDc4MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSwg
V29ya1F1ZXVlIGlzIGluIFdlYktpdDIuIEJ5IG1vdmluZyBXb3JrUXVldWUgYW5kCisgICAgICAg
IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgdG8gV1RGLCBXZWJDb3JlIGNvZGUgY2FuIHVzZSBp
dC4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIHJlcXVpcmVkIGZvciBwYXJhbGxlbCBpbWFnZSBk
ZWNvZGVycyBiZWNhdXNlCisgICAgICAgIFdvcmtRdWV1ZSBpcyB1c2VkIHRvIG1ha2UgaW1hZ2Ug
ZGVjb2Rpbmcgb2ZmIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxp
c3QuYW06CisgICAgICAgICogV1RGLnBybzoKKyAgICAgICAgKiBXVEYudmNwcm9qL1dURi52Y3By
b2o6CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
d3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybUVmbC5jbWFrZToKKyAg
ICAgICAgKiB3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oLgorICAgICAg
ICAoV1RGKToKKyAgICAgICAgKiB3dGYvV29ya1F1ZXVlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAuCisgICAgICAgIChXVEYpOgorICAgICAg
ICAoV1RGOjpXb3JrUXVldWU6OldvcmtRdWV1ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6
fldvcmtRdWV1ZSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6aW52YWxpZGF0ZSk6CisgICAg
ICAgICogd3RmL1dvcmtRdWV1ZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vV29ya1F1ZXVlLmguCisgICAgICAgIChXVEYpOgorICAgICAgICAoV29ya1F1ZXVlKToKKyAg
ICAgICAgKFdvcmtJdGVtV2luKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVdp
bjo6ZnVuY3Rpb24pOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OldvcmtJdGVtV2luOjpxdWV1
ZSk6CisgICAgICAgIChIYW5kbGVXb3JrSXRlbSk6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6
SGFuZGxlV29ya0l0ZW06OnNldFdhaXRIYW5kbGUpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6
OkhhbmRsZVdvcmtJdGVtOjp3YWl0SGFuZGxlKToKKyAgICAgICAgKiB3dGYvZWZsL1dvcmtRdWV1
ZUVmbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1
ZXVlRWZsLmNwcC4KKyAgICAgICAgKFRpbWVyV29ya0l0ZW0pOgorICAgICAgICAoVGltZXJXb3Jr
SXRlbTo6VGltZXJXb3JrSXRlbSk6CisgICAgICAgIChUaW1lcldvcmtJdGVtOjp+VGltZXJXb3Jr
SXRlbSk6CisgICAgICAgIChUaW1lcldvcmtJdGVtOjpmdW5jdGlvbik6CisgICAgICAgIChUaW1l
cldvcmtJdGVtOjpxdWV1ZSk6CisgICAgICAgIChUaW1lcldvcmtJdGVtOjp0aW1lcklEKToKKyAg
ICAgICAgKFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKFdvcmtRdWV1
ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmsp
OgorICAgICAgICAoV29ya1F1ZXVlOjpwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3JrKToKKyAgICAg
ICAgKFdvcmtRdWV1ZTo6c2VuZE1lc3NhZ2VUb1RocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6
OndvcmtRdWV1ZVRocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZl
bnRIYW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdpc3RlclNvY2tldEV2ZW50SGFu
ZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdvcmtRdWV1
ZTo6dGltZXJGaXJlZCk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheSk6
CisgICAgICAgICogd3RmL2d0ay9Xb3JrUXVldWVHdGsuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vZ3RrL1dvcmtRdWV1ZUd0ay5jcHAuCisgICAgICAgIChXb3JrUXVl
dWU6OkV2ZW50U291cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OkV2ZW50
U291cmNlKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmNhbmNlbCk6CisgICAg
ICAgIChXb3JrUXVldWU6OkV2ZW50U291cmNlOjpleGVjdXRlRXZlbnRTb3VyY2UpOgorICAgICAg
ICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmtPbmNlKToKKyAgICAgICAgKFdv
cmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6
RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25UZXJtaW5hdGlvbik6CisgICAgICAgIChXb3JrUXVl
dWU6OkV2ZW50U291cmNlOjpkZWxldGVFdmVudFNvdXJjZSk6CisgICAgICAgIChXb3JrUXVldWU6
OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxp
ZGF0ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnN0YXJ0V29ya1F1ZXVlVGhyZWFkKToKKyAgICAg
ICAgKFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkQm9keSk6CisgICAgICAgIChXb3JrUXVldWU6
OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6dW5yZWdp
c3RlckV2ZW50U291cmNlSGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoT25T
b3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNwYXRjaCk6CisgICAgICAgIChXb3JrUXVl
dWU6OmRpc3BhdGNoQWZ0ZXJEZWxheSk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoT25U
ZXJtaW5hdGlvbik6CisgICAgICAgICogd3RmL21hYy9Xb3JrUXVldWVNYWMuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vbWFjL1dvcmtRdWV1ZU1hYy5jcHAuCisgICAg
ICAgIChXb3JrUXVldWU6OmV4ZWN1dGVGdW5jdGlvbik6CisgICAgICAgIChXb3JrUXVldWU6OmRp
c3BhdGNoKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KToKKyAgICAg
ICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNv
dXJjZTo6RXZlbnRTb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZGlz
cGF0Y2hTb3VyY2UpOgorICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZXZlbnRIYW5k
bGVyKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OmNhbmNlbEhhbmRsZXIpOgor
ICAgICAgICAoV29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6ZmluYWxpemVIYW5kbGVyKToKKyAgICAg
ICAgKFdvcmtRdWV1ZTo6cmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
b3JrUXVldWU6OnVucmVnaXN0ZXJNYWNoUG9ydEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3Jr
UXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3Jt
SW52YWxpZGF0ZSk6CisgICAgICAgICogd3RmL3F0L1dvcmtRdWV1ZVF0LmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcC4KKyAgICAgICAg
KFdURik6CisgICAgICAgIChXb3JrUXVldWU6OldvcmtJdGVtUXQpOgorICAgICAgICAoV1RGOjpX
b3JrUXVldWU6OldvcmtJdGVtUXQ6OldvcmtJdGVtUXQpOgorICAgICAgICAoV1RGOjpXb3JrUXVl
dWU6OldvcmtJdGVtUXQ6On5Xb3JrSXRlbVF0KToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpX
b3JrSXRlbVF0OjpleGVjdXRlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVF0
OjpleGVjdXRlQW5kRGVsZXRlKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpXb3JrSXRlbVF0
Ojp0aW1lckV2ZW50KToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2
ZW50SGFuZGxlcik6CisgICAgICAgIChXVEY6OldvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXpl
KToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpwbGF0Zm9ybUludmFsaWRhdGUpOgorICAgICAg
ICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAgICAgICAgKFdURjo6V29ya1F1ZXVlOjpk
aXNwYXRjaEFmdGVyRGVsYXkpOgorICAgICAgICAoV1RGOjpXb3JrUXVldWU6OmRpc3BhdGNoT25U
ZXJtaW5hdGlvbik6CisgICAgICAgICogd3RmL3dpbi9Xb3JrUXVldWVXaW4uY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vd2luL1dvcmtRdWV1ZVdpbi5jcHAuCisgICAg
ICAgIChXb3JrUXVldWU6OldvcmtJdGVtV2luOjpXb3JrSXRlbVdpbik6CisgICAgICAgIChXb3Jr
UXVldWU6OldvcmtJdGVtV2luOjpjcmVhdGUpOgorICAgICAgICAoV29ya1F1ZXVlOjpXb3JrSXRl
bVdpbjo6fldvcmtJdGVtV2luKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06
OkhhbmRsZVdvcmtJdGVtKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6SGFuZGxlV29ya0l0ZW06OmNy
ZWF0ZUJ5QWRvcHRpbmdIYW5kbGUpOgorICAgICAgICAoV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRl
bTo6fkhhbmRsZVdvcmtJdGVtKToKKyAgICAgICAgKFdvcmtRdWV1ZTo6aGFuZGxlQ2FsbGJhY2sp
OgorICAgICAgICAoV29ya1F1ZXVlOjpyZWdpc3RlckhhbmRsZSk6CisgICAgICAgIChXb3JrUXVl
dWU6OnVucmVnaXN0ZXJBbmRDbG9zZUhhbmRsZSk6CisgICAgICAgIChXb3JrUXVldWU6OndvcmtU
aHJlYWRDYWxsYmFjayk6CisgICAgICAgIChXb3JrUXVldWU6OnBlcmZvcm1Xb3JrT25SZWdpc3Rl
cmVkV29ya1RocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6
CisgICAgICAgIChXb3JrUXVldWU6OnRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFkKToKKyAgICAgICAg
KFdvcmtRdWV1ZTo6dW5yZWdpc3RlckFzV29ya1RocmVhZCk6CisgICAgICAgIChXb3JrUXVldWU6
OnBsYXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChXb3JrUXVldWU6OmRpc3BhdGNoKToKKyAg
ICAgICAgKFRpbWVyQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKFRpbWVyQ29udGV4dCk6Cisg
ICAgICAgIChUaW1lckNvbnRleHQ6OlRpbWVyQ29udGV4dCk6CisgICAgICAgIChXb3JrUXVldWU6
OnRpbWVyQ2FsbGJhY2spOgorICAgICAgICAoV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkp
OgorICAgICAgICAoV29ya1F1ZXVlOjp1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtU29vbik6
CisgICAgICAgIChXb3JrUXVldWU6OnVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1DYWxsYmFj
ayk6CisKIDIwMTItMDctMTcgIEdhYm9yIEJhbGxhYmFzICA8Z2Fib3JiQGluZi51LXN6ZWdlZC5o
dT4KIAogICAgICAgICBbUXRdW1Y4XSBSZW1vdmUgdGhlIFY4IHJlbGF0ZWQgY29kZXBhdGhzIGFu
ZCBjb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3Qu
YW0gYi9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNWYwZGRkNi4uNGQyZDMw
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJj
ZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMTY0LDYgKzE2NCw4IEBAIHd0Zl9zb3VyY2Vz
ICs9IFwKICAgICBTb3VyY2UvV1RGL3d0Zi9WYWx1ZUNoZWNrLmggXAogICAgIFNvdXJjZS9XVEYv
d3RmL1ZlY3Rvci5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9WZWN0b3JUcmFpdHMuaCBcCisgICAg
U291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcCBcCisgICAgU291cmNlL1dURi93dGYvV29ya1F1
ZXVlLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL1dURlRocmVhZERhdGEuY3BwIFwKICAgICBTb3Vy
Y2UvV1RGL3d0Zi9XVEZUaHJlYWREYXRhLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL2R0b2EuY3Bw
IFwKQEAgLTE5NCw2ICsxOTYsNyBAQCB3dGZfc291cmNlcyArPSBcCiAgICAgU291cmNlL1dURi93
dGYvZ29iamVjdC9HbGliVXRpbGl0aWVzLmNwcCBcCiAgICAgU291cmNlL1dURi93dGYvZ29iamVj
dC9HbGliVXRpbGl0aWVzLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL2d0ay9NYWluVGhyZWFkR3Rr
LmNwcCBcCisgICAgU291cmNlL1dURi93dGYvZ3RrL1dvcmtRdWV1ZUd0ay5jcHAgXAogICAgIFNv
dXJjZS9XVEYvd3RmL3RleHQvQVNDSUlGYXN0UGF0aC5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi90
ZXh0L0F0b21pY1N0cmluZy5jcHAgXAogICAgIFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3Ry
aW5nLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYucHJvIGIvU291cmNlL1dURi9XVEYu
cHJvCmluZGV4IDRiY2IwZmYuLjAyZmNhZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnBy
bworKysgYi9Tb3VyY2UvV1RGL1dURi5wcm8KQEAgLTE2NCw2ICsxNjQsNyBAQCBIRUFERVJTICs9
IFwKICAgICBWZWN0b3IuaCBcCiAgICAgVmVjdG9yVHJhaXRzLmggXAogICAgIFZNVGFncy5oIFwK
KyAgICBXb3JrUXVldWUuaCBcCiAgICAgV1RGVGhyZWFkRGF0YS5oCiAKIHVuaXg6IEhFQURFUlMg
Kz0gVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oCkBAIC0yMDAsNiArMjAxLDcgQEAgU09V
UkNFUyArPSBcCiAgICAgT1NSYW5kb21Tb3VyY2UuY3BwIFwKICAgICBxdC9NYWluVGhyZWFkUXQu
Y3BwIFwKICAgICBxdC9TdHJpbmdRdC5jcHAgXAorICAgIHF0L1dvcmtRdWV1ZVF0LmNwcCBcCiAg
ICAgUGFnZUFsbG9jYXRpb25BbGlnbmVkLmNwcCBcCiAgICAgUGFnZUJsb2NrLmNwcCBcCiAgICAg
UGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAgXApAQCAtMjEwLDYgKzIxMiw3IEBAIFNPVVJDRVMgKz0g
XAogICAgIFRDU3lzdGVtQWxsb2MuY3BwIFwKICAgICBUaHJlYWRpbmcuY3BwIFwKICAgICBUeXBl
VHJhaXRzLmNwcCBcCisgICAgV29ya1F1ZXVlLmNwcCBcCiAgICAgV1RGVGhyZWFkRGF0YS5jcHAg
XAogICAgIHRleHQvQXRvbWljU3RyaW5nLmNwcCBcCiAgICAgdGV4dC9CYXNlNjQuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnZjcHJvai9XVEYudmNwcm9qIGIvU291cmNlL1dURi9X
VEYudmNwcm9qL1dURi52Y3Byb2oKaW5kZXggZDFhMjk1Yy4uMGEwMzFlNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi9XVEYudmNwcm9qL1dURi52Y3Byb2oKKysrIGIvU291cmNlL1dURi9XVEYudmNw
cm9qL1dURi52Y3Byb2oKQEAgLTM0Myw2ICszNDMsMTAgQEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHd0Zlx3aW5cT3duUHRyV2luLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cd3RmXHdpblxXb3JrUXVldWVXaW4uY3BwIgorCQkJCT4KKwkJCTwv
RmlsZT4KIAkJPC9GaWx0ZXI+CiAJCTxGaWx0ZXIKIAkJCU5hbWU9InVuaWNvZGUiCkBAIC0xMjIx
LDYgKzEyMjUsMTQgQEAKIAkJCT4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRo
PSIuLlx3dGZcV29ya1F1ZXVlLmNwcCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVs
YXRpdmVQYXRoPSIuLlx3dGZcV29ya1F1ZXVlLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUK
IAkJCVJlbGF0aXZlUGF0aD0iLi5cd3RmXFdURlRocmVhZERhdGEuY3BwIgogCQkJPgogCQk8L0Zp
bGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjNDdlYzE5
Li43OTRiZWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTI0MSw2ICsyNDEsOSBAQAogCQlBOEE0NzQ3RTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzM3MDE1
MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yLmggKi87IH07CiAJCUE4QTQ3NDdGMTUxQTgyNUIwMDQx
MjNGRiAvKiBWZWN0b3JUcmFpdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMuaCAq
LzsgfTsKIAkJQThBNDc0ODAxNTFBODI1QjAwNDEyM0ZGIC8qIFZNVGFncy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczNzIxNTFBODI1QjAwNDEy
M0ZGIC8qIFZNVGFncy5oICovOyB9OworCQlCQzJFNkU4RDExNDE5NzE1MDBBNjNCMUUgLyogV29y
a1F1ZXVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDMkU2RTdEMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwICovOyB9OworCQlCQzJF
NkU4RTExNDE5NzE1MDBBNjNCMUUgLyogV29ya1F1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJFNkU3RTExNDE5NzBDMDBBNjNCMUUgLyogV29y
a1F1ZXVlLmggKi87IH07CisJCUJDMDA5MkY4MTE1ODM3QTMwMEUwQUUyQSAvKiBXb3JrUXVldWVN
YWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMw
MDkyRjYxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtRdWV1ZU1hYy5jcHAgKi87IH07CiAJCUE4QTQ3
NDg2MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzdBMTUxQTgyNUIwMDQxMjNGRiAv
KiBXVEZUaHJlYWREYXRhLmNwcCAqLzsgfTsKIAkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8q
IFdURlRocmVhZERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4QTQ3MzdCMTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmggKi87IH07
CiAJCUE4QTQ3NDhDMTUxQTgyNjQwMDQxMjNGRiAvKiBjb25maWcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3NDhCMTUxQTgyNjQwMDQxMjNGRiAv
KiBjb25maWcuaCAqLzsgfTsKQEAgLTQ5MSw2ICs0OTQsOSBAQAogCQlBOEE0NzM3MDE1MUE4MjVC
MDA0MTIzRkYgLyogVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZl
Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzM3MTE1MUE4MjVCMDA0
MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFZlY3RvclRyYWl0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzM3MjE1
MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFZNVGFncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzJFNkU3RDExNDE5
NzBDMDBBNjNCMUUgLyogV29ya1F1ZXVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdvcmtRdWV1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJD
MkU2RTdFMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV29ya1F1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUJDMDA5MkY2MTE1ODM3QTMwMEUwQUUyQSAvKiBXb3JrUXVldWVNYWMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya1F1ZXVlTWFjLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczN0ExNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRocmVhZERh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV1RGVGhyZWFkRGF0
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzdCMTUxQTgyNUIwMDQx
MjNGRiAvKiBXVEZUaHJlYWREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdURlRocmVhZERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDc0OEIx
NTFBODI2NDAwNDEyM0ZGIC8qIGNvbmZpZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBjb25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcyMSw2ICs3Mjcs
OCBAQAogCQkJCUE4QTQ3MzcwMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3IuaCAqLywKIAkJCQlB
OEE0NzM3MTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggKi8sCiAJCQkJQThBNDcz
NzIxNTFBODI1QjAwNDEyM0ZGIC8qIFZNVGFncy5oICovLAorCQkJCUJDMkU2RTdEMTE0MTk3MEMw
MEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwICovLAorCQkJCUJDMkU2RTdFMTE0MTk3MEMwMEE2M0Ix
RSAvKiBXb3JrUXVldWUuaCAqLywKIAkJCQlBOEE0NzM3QTE1MUE4MjVCMDA0MTIzRkYgLyogV1RG
VGhyZWFkRGF0YS5jcHAgKi8sCiAJCQkJQThBNDczN0IxNTFBODI1QjAwNDEyM0ZGIC8qIFdURlRo
cmVhZERhdGEuaCAqLywKIAkJCQlBODc2REJENzE1MTgxNkU1MDBEQURCOTUgLyogUGxhdGZvcm0u
aCAqLywKQEAgLTc2MCw2ICs3NjgsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKIAkJCQlBOEE0NzJDNTE1MUE4MjVBMDA0MTIzRkYgLyogTWFpblRocmVhZE1hYy5tbSAq
LywKKwkJCQlCQzAwOTJGNjExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNwcCAqLywK
IAkJCSk7CiAJCQlwYXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTEw
NDMsNiArMTA1Miw3IEBACiAJCQkJQThBNDc0N0UxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3Rvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0N0YxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRy
YWl0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0ODAxNTFBODI1QjAwNDEyM0ZGIC8qIFZN
VGFncy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkMyRTZFOEUxMTQxOTcxNTAwQTYzQjFFIC8qIFdv
cmtRdWV1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0ODcxNTFBODI1QjAwNDEyM0ZGIC8q
IFdURlRocmVhZERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDhDMTUxQTgyNjQwMDQx
MjNGRiAvKiBjb25maWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0M0Y2MTIwMTU2NUYwRjkwMERC
NTE0QSAvKiBSQU1TaXplLmggaW4gSGVhZGVycyAqLywKQEAgLTExOTMsNiArMTIwMyw4IEBACiAJ
CQkJQThBNDc0NzQxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTENoYXJhY3RlclR5cGVzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE4QTQ3NDc3MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxFc2NhcGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0N0IxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFNlZ21l
bnRzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJDMkU2RThEMTE0MTk3MTUwMEE2M0IxRSAvKiBX
b3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkMwMDkyRjgxMTU4MzdBMzAwRTBBRTJB
IC8qIFdvcmtRdWV1ZU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ4NjE1MUE4MjVC
MDA0MTIzRkYgLyogV1RGVGhyZWFkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDNGNjEx
RjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MTM0
MDEzODE1QjA5MkZEMDAxRkYwQjggLyogQmFzZTY0LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFr
ZUxpc3RzLnR4dAppbmRleCA5ZDM0ZDQ1Li5iMzYxNDNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dApA
QCAtMTAyLDYgKzEwMiw3IEBAIFNFVChXVEZfSEVBREVSUwogICAgIFZhbHVlQ2hlY2suaAogICAg
IFZlY3Rvci5oCiAgICAgVmVjdG9yVHJhaXRzLmgKKyAgICBXb3JrUXVldWUuaAogICAgIFdURlRo
cmVhZERhdGEuaAogICAgIGR0b2EuaAogCkBAIC0xNjIsNiArMTYzLDcgQEAgU0VUKFdURl9TT1VS
Q0VTCiAgICAgU3RyaW5nRXh0cmFzLmNwcAogICAgIFRocmVhZGluZy5jcHAKICAgICBUeXBlVHJh
aXRzLmNwcAorICAgIFdvcmtRdWV1ZS5jcHAKICAgICBXVEZUaHJlYWREYXRhLmNwcAogICAgIGR0
b2EuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRWZsLmNtYWtlIGIv
U291cmNlL1dURi93dGYvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggMWExM2RiYi4uZmQxN2Y1NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNl
L1dURi93dGYvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEsNiArMSw3IEBACiBMSVNUKEFQUEVORCBX
VEZfU09VUkNFUwogICAgIGVmbC9NYWluVGhyZWFkRWZsLmNwcAogICAgIGVmbC9Pd25QdHJFZmwu
Y3BwCisgICAgZWZsL1dvcmtRdWV1ZUVmbC5jcHAKICAgICBnb2JqZWN0L0dPd25QdHIuY3BwCiAg
ICAgZ29iamVjdC9HUmVmUHRyLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVByb2Nlc3NJ
ZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdmZjUzYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZp
ZXIuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFBsYXRmb3JtUHJv
Y2Vzc0lkZW50aWZpZXJfaAorI2RlZmluZSBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyX2gKKwor
I2lmIFBMQVRGT1JNKFFUKQorY2xhc3MgUVByb2Nlc3M7CisjZWxpZiBQTEFURk9STShFRkwpCisj
aW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdURiB7CisKKyNpZiBQTEFU
Rk9STShNQUMpCit0eXBlZGVmIHBpZF90IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CisjZWxp
ZiBQTEFURk9STShXSU4pCit0eXBlZGVmIEhBTkRMRSBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVy
OworI2VsaWYgUExBVEZPUk0oUVQpCit0eXBlZGVmIFFQcm9jZXNzKiBQbGF0Zm9ybVByb2Nlc3NJ
ZGVudGlmaWVyOworI2VsaWYgUExBVEZPUk0oR1RLKQorI2lmZGVmIEdfT1NfV0lOMzIKK3R5cGVk
ZWYgdm9pZCogR1BpZDsKKyNlbHNlCit0eXBlZGVmIGludCBHUGlkOworI2VuZGlmCit0eXBlZGVm
IEdQaWQgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKKyNlbGlmIFBMQVRGT1JNKEVGTCkKK3R5
cGVkZWYgcGlkX3QgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKKyNlbmRpZgorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOworCisj
ZW5kaWYgLy8gUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9Xb3JrUXVldWUuY3BwIGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjVmZDE0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dURi93dGYvV29ya1F1ZXVlLmNwcApAQCAtMCwwICsxLDU1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgorCituYW1l
c3BhY2UgV1RGIHsKKworV29ya1F1ZXVlOjpXb3JrUXVldWUoY29uc3QgY2hhciogbmFtZSkKKyAg
ICA6IG1faXNWYWxpZCh0cnVlKQoreworICAgIHBsYXRmb3JtSW5pdGlhbGl6ZShuYW1lKTsKK30K
KworV29ya1F1ZXVlOjp+V29ya1F1ZXVlKCkKK3sKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1faXNWYWxpZE11dGV4KTsKKyAgICBBU1NFUlQoIW1faXNWYWxp
ZCk7CisjZW5kaWYKK30KKwordm9pZCBXb3JrUXVldWU6OmludmFsaWRhdGUoKQoreworICAgIHsK
KyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faXNWYWxpZE11dGV4KTsKKyAgICAgICAgbV9p
c1ZhbGlkID0gZmFsc2U7CisgICAgfQorCisgICAgcGxhdGZvcm1JbnZhbGlkYXRlKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvV29ya1F1ZXVl
LmggYi9Tb3VyY2UvV1RGL3d0Zi9Xb3JrUXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi41YzBjYjk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvV29y
a1F1ZXVlLmgKQEAgLTAsMCArMSwyMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAy
MDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdvcmtRdWV1ZV9oCisjZGVmaW5lIFdvcmtRdWV1ZV9oCisKKyNpZiBPUyhE
QVJXSU4pCisjaWYgSEFWRShESVNQQVRDSF9IKQorI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNo
Lmg+CisjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRl
IDx3dGYvRnVuY3Rpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiAoUExBVEZP
Uk0oUVQpICYmICFPUyhEQVJXSU4pKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkK
KyNpbmNsdWRlICJQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgiCisjZW5kaWYKKworI2lmIFBM
QVRGT1JNKFFUKSAmJiAhT1MoREFSV0lOKQorI2luY2x1ZGUgPFFTb2NrZXROb3RpZmllcj4KK2Ns
YXNzIFFPYmplY3Q7CitjbGFzcyBRVGhyZWFkOworI2VsaWYgUExBVEZPUk0oR1RLKQorI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KK3R5cGVkZWYgZ2Jvb2xlYW4gKCpHU291cmNlRnVu
YykgKGdwb2ludGVyIGRhdGEpOworI2VsaWYgUExBVEZPUk0oRUZMKQorI2luY2x1ZGUgPEVjb3Jl
Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFdvcmtRdWV1ZSB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoV29ya1F1ZXVlKTsKKworcHVibGljOgorICAgIGV4cGxpY2l0
IFdvcmtRdWV1ZShjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB+V29ya1F1ZXVlKCk7CisKKyAgICAv
LyBXaWxsIGRpc3BhdGNoIHRoZSBnaXZlbiBmdW5jdGlvbiB0byBydW4gYXMgc29vbiBhcyBwb3Nz
aWJsZS4KKyAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKworICAg
IC8vIFdpbGwgZGlzcGF0Y2ggdGhlIGdpdmVuIGZ1bmN0aW9uIGFmdGVyIHRoZSBnaXZlbiBkZWxh
eSAoaW4gc2Vjb25kcykuCisgICAgdm9pZCBkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rp
b248dm9pZCgpPiYsIGRvdWJsZSBkZWxheSk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKwor
I2lmIE9TKERBUldJTikKKyAgICBlbnVtIE1hY2hQb3J0RXZlbnRUeXBlIHsKKyAgICAgICAgLy8g
RmlyZWQgd2hlbiB0aGVyZSBpcyBkYXRhIG9uIHRoZSBnaXZlbiByZWNlaXZlIHJpZ2h0LgorICAg
ICAgICBNYWNoUG9ydERhdGFBdmFpbGFibGUsCisgICAgICAgIAorICAgICAgICAvLyBGaXJlZCB3
aGVuIHRoZSByZWNlaXZlIHJpZ2h0IGZvciB0aGlzIHNlbmQgcmlnaHQgaGFzIGJlZW4gZGVzdHJv
eWVkLgorICAgICAgICBNYWNoUG9ydERlYWROYW1lTm90aWZpY2F0aW9uCisgICAgfTsKKyAgICAK
KyAgICAvLyBXaWxsIGV4ZWN1dGUgdGhlIGdpdmVuIGZ1bmN0aW9uIHdoZW5ldmVyIHRoZSBnaXZl
biBtYWNoIHBvcnQgZXZlbnQgZmlyZXMuCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgd2lsbCBhZG9w
dCB0aGUgbWFjaCBwb3J0IGFuZCBkZXN0cm95IGl0IHdoZW4gdGhlIHdvcmsgcXVldWUgaXMgaW52
YWxpZGF0ZWQuCisgICAgdm9pZCByZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9y
dF90LCBNYWNoUG9ydEV2ZW50VHlwZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZv
aWQgdW5yZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90KTsKKyNlbGlmIFBM
QVRGT1JNKFdJTikKKyAgICB2b2lkIHJlZ2lzdGVySGFuZGxlKEhBTkRMRSwgY29uc3QgRnVuY3Rp
b248dm9pZCgpPiYpOworICAgIHZvaWQgdW5yZWdpc3RlckFuZENsb3NlSGFuZGxlKEhBTkRMRSk7
CisjZWxpZiBQTEFURk9STShRVCkKKyAgICBRU29ja2V0Tm90aWZpZXIqIHJlZ2lzdGVyU29ja2V0
RXZlbnRIYW5kbGVyKGludCwgUVNvY2tldE5vdGlmaWVyOjpUeXBlLCBjb25zdCBGdW5jdGlvbjx2
b2lkKCk+Jik7CisgICAgdm9pZCBkaXNwYXRjaE9uVGVybWluYXRpb24oUGxhdGZvcm1Qcm9jZXNz
SWRlbnRpZmllciwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworI2VsaWYgUExBVEZPUk0oR1RL
KQorICAgIHZvaWQgcmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50LCBpbnQsIGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIo
aW50KTsKKyAgICB2b2lkIGRpc3BhdGNoT25UZXJtaW5hdGlvbihQbGF0Zm9ybVByb2Nlc3NJZGVu
dGlmaWVyLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisjZWxpZiBQTEFURk9STShFRkwpCisg
ICAgdm9pZCByZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQsIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50KTsKKyNl
bmRpZgorCitwcml2YXRlOgorICAgIC8vIEZJWE1FOiBVc2UgYW4gYXRvbWljIGJvb2xlYW4gaGVy
ZSBpbnN0ZWFkLgorICAgIE11dGV4IG1faXNWYWxpZE11dGV4OworICAgIGJvb2wgbV9pc1ZhbGlk
OworCisgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSk7CisgICAg
dm9pZCBwbGF0Zm9ybUludmFsaWRhdGUoKTsKKworI2lmIE9TKERBUldJTikKKyNpZiBIQVZFKERJ
U1BBVENIX0gpCisgICAgc3RhdGljIHZvaWQgZXhlY3V0ZUZ1bmN0aW9uKHZvaWQqKTsKKyAgICBN
dXRleCBtX2V2ZW50U291cmNlc011dGV4OworICAgIGNsYXNzIEV2ZW50U291cmNlOworICAgIEhh
c2hNYXA8bWFjaF9wb3J0X3QsIEV2ZW50U291cmNlKj4gbV9ldmVudFNvdXJjZXM7CisgICAgZGlz
cGF0Y2hfcXVldWVfdCBtX2Rpc3BhdGNoUXVldWU7CisjZW5kaWYKKyNlbGlmIFBMQVRGT1JNKFdJ
TikKKyAgICBjbGFzcyBXb3JrSXRlbVdpbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxX
b3JrSXRlbVdpbj4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29y
a0l0ZW1XaW4+IGNyZWF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7Cisg
ICAgICAgIHZpcnR1YWwgfldvcmtJdGVtV2luKCk7CisKKyAgICAgICAgRnVuY3Rpb248dm9pZCgp
PiYgZnVuY3Rpb24oKSB7IHJldHVybiBtX2Z1bmN0aW9uOyB9CisgICAgICAgIFdvcmtRdWV1ZSog
cXVldWUoKSBjb25zdCB7IHJldHVybiBtX3F1ZXVlOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAg
ICAgIFdvcmtJdGVtV2luKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mLCBXb3JrUXVldWUqKTsKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKKyAgICAg
ICAgV29ya1F1ZXVlKiBtX3F1ZXVlOworICAgIH07CisKKyAgICBjbGFzcyBIYW5kbGVXb3JrSXRl
bSA6IHB1YmxpYyBXb3JrSXRlbVdpbiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxIYW5kbGVXb3JrSXRlbT4gY3JlYXRlQnlBZG9wdGluZ0hhbmRsZShIQU5ETEUsIGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mLCBXb3JrUXVldWUqKTsKKyAgICAgICAgdmlydHVhbCB+SGFu
ZGxlV29ya0l0ZW0oKTsKKworICAgICAgICB2b2lkIHNldFdhaXRIYW5kbGUoSEFORExFIHdhaXRI
YW5kbGUpIHsgbV93YWl0SGFuZGxlID0gd2FpdEhhbmRsZTsgfQorICAgICAgICBIQU5ETEUgd2Fp
dEhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2FpdEhhbmRsZTsgfQorCisgICAgcHJpdmF0ZToK
KyAgICAgICAgSGFuZGxlV29ya0l0ZW0oSEFORExFLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jiwg
V29ya1F1ZXVlKik7CisKKyAgICAgICAgSEFORExFIG1faGFuZGxlOworICAgICAgICBIQU5ETEUg
bV93YWl0SGFuZGxlOworICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBDQUxMQkFDSyBoYW5kbGVD
YWxsYmFjayh2b2lkKiBjb250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpOworICAgIHN0
YXRpYyB2b2lkIENBTExCQUNLIHRpbWVyQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQk9PTEVBTiB0
aW1lck9yV2FpdEZpcmVkKTsKKyAgICBzdGF0aWMgRFdPUkQgV0lOQVBJIHdvcmtUaHJlYWRDYWxs
YmFjayh2b2lkKiBjb250ZXh0KTsKKworICAgIGJvb2wgdHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQo
KTsKKyAgICB2b2lkIHVucmVnaXN0ZXJBc1dvcmtUaHJlYWQoKTsKKyAgICB2b2lkIHBlcmZvcm1X
b3JrT25SZWdpc3RlcmVkV29ya1RocmVhZCgpOworCisgICAgc3RhdGljIHZvaWQgdW5yZWdpc3Rl
cldhaXRBbmREZXN0cm95SXRlbVNvb24oUGFzc1JlZlB0cjxIYW5kbGVXb3JrSXRlbT4pOworICAg
IHN0YXRpYyBEV09SRCBXSU5BUEkgdW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbUNhbGxiYWNr
KHZvaWQqIGNvbnRleHQpOworCisgICAgdm9sYXRpbGUgTE9ORyBtX2lzV29ya1RocmVhZFJlZ2lz
dGVyZWQ7CisKKyAgICBNdXRleCBtX3dvcmtJdGVtUXVldWVMb2NrOworICAgIFZlY3RvcjxSZWZQ
dHI8V29ya0l0ZW1XaW4+ID4gbV93b3JrSXRlbVF1ZXVlOworCisgICAgTXV0ZXggbV9oYW5kbGVz
TG9jazsKKyAgICBIYXNoTWFwPEhBTkRMRSwgUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiA+IG1faGFu
ZGxlczsKKworICAgIEhBTkRMRSBtX3RpbWVyUXVldWU7CisjZWxpZiBQTEFURk9STShRVCkKKyAg
ICBjbGFzcyBXb3JrSXRlbVF0OworICAgIFFUaHJlYWQqIG1fd29ya1RocmVhZDsKKyAgICBmcmll
bmQgY2xhc3MgV29ya0l0ZW1RdDsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICBzdGF0aWMgdm9p
ZCBzdGFydFdvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqKTsKKyAgICB2b2lkIHdvcmtRdWV1ZVRo
cmVhZEJvZHkoKTsKKyAgICB2b2lkIGRpc3BhdGNoT25Tb3VyY2UoR1NvdXJjZSosIGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mLCBHU291cmNlRnVuYyk7CisKKyAgICBUaHJlYWRJZGVudGlmaWVyIG1f
d29ya1F1ZXVlVGhyZWFkOworICAgIEdSZWZQdHI8R01haW5Db250ZXh0PiBtX2V2ZW50Q29udGV4
dDsKKyAgICBNdXRleCBtX2V2ZW50TG9vcExvY2s7CisgICAgR1JlZlB0cjxHTWFpbkxvb3A+IG1f
ZXZlbnRMb29wOworICAgIE11dGV4IG1fZXZlbnRTb3VyY2VzTG9jazsKKyAgICBjbGFzcyBFdmVu
dFNvdXJjZTsKKyAgICBIYXNoTWFwPGludCwgVmVjdG9yPEV2ZW50U291cmNlKj4gPiBtX2V2ZW50
U291cmNlczsKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBWZWN0b3I8RXZlbnRTb3VyY2UqPiA+
OjppdGVyYXRvciBFdmVudFNvdXJjZUl0ZXJhdG9yOyAKKyNlbGlmIFBMQVRGT1JNKEVGTCkKKyAg
ICBmZF9zZXQgbV9maWxlRGVzY3JpcHRvclNldDsKKyAgICBpbnQgbV9tYXhGaWxlRGVzY3JpcHRv
cjsKKyAgICBpbnQgbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOworICAgIGludCBtX3dyaXRlVG9Q
aXBlRGVzY3JpcHRvcjsKKyAgICBib29sIG1fdGhyZWFkTG9vcDsKKworICAgIFZlY3RvcjxGdW5j
dGlvbjx2b2lkKCk+ID4gbV93b3JrSXRlbVF1ZXVlOworICAgIE11dGV4IG1fd29ya0l0ZW1RdWV1
ZUxvY2s7CisKKyAgICBpbnQgbV9zb2NrZXREZXNjcmlwdG9yOworICAgIEZ1bmN0aW9uPHZvaWQo
KT4gbV9zb2NrZXRFdmVudEhhbmRsZXI7CisKKyAgICBIYXNoTWFwPGludCwgT3duUHRyPEVjb3Jl
X1RpbWVyPiA+IG1fdGltZXJzOworCisgICAgdm9pZCBzZW5kTWVzc2FnZVRvVGhyZWFkKGNvbnN0
IGNoYXIqKTsKKyAgICBzdGF0aWMgdm9pZCogd29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSopOwor
ICAgIHZvaWQgcGVyZm9ybVdvcmsoKTsKKyAgICB2b2lkIHBlcmZvcm1GaWxlRGVzY3JpcHRvcldv
cmsoKTsKKyAgICBzdGF0aWMgYm9vbCB0aW1lckZpcmVkKHZvaWQqKTsKKyNlbmRpZgorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6V29ya1F1ZXVlOworCisjZW5kaWYgLy8g
V29ya1F1ZXVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2Nocm9taXVtL01haW5UaHJl
YWRDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9jaHJvbWl1bS9NYWluVGhyZWFkQ2hyb21p
dW0uY3BwCmluZGV4IDllNjU5MmIuLmFlNWZjODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L2Nocm9taXVtL01haW5UaHJlYWRDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvY2hy
b21pdW0vTWFpblRocmVhZENocm9taXVtLmNwcApAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVk
ZSAiQXNzZXJ0aW9ucy5oIgogI2luY2x1ZGUgIkNocm9taXVtVGhyZWFkaW5nLmgiCisjaW5jbHVk
ZSAiRnVuY3Rpb25hbC5oIgogI2luY2x1ZGUgIlRocmVhZGluZy5oIgogCiBuYW1lc3BhY2UgV1RG
IHsKQEAgLTU0LDYgKzU1LDE4IEBAIHZvaWQgY2FsbE9uTWFpblRocmVhZChNYWluVGhyZWFkRnVu
Y3Rpb24qIGZ1bmN0aW9uLCB2b2lkKiBjb250ZXh0KQogICAgIENocm9taXVtVGhyZWFkaW5nOjpj
YWxsT25NYWluVGhyZWFkKGZ1bmN0aW9uLCBjb250ZXh0KTsKIH0KIAorc3RhdGljIHZvaWQgY2Fs
bEZ1bmN0aW9uT2JqZWN0KHZvaWQqIGNvbnRleHQpCit7CisgICAgRnVuY3Rpb248dm9pZCgpPiog
ZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxGdW5jdGlvbjx2b2lkKCk+Kj4oY29udGV4dCk7CisgICAg
KCpmdW5jdGlvbikoKTsKKyAgICBkZWxldGUgZnVuY3Rpb247Cit9CisKK3ZvaWQgY2FsbE9uTWFp
blRocmVhZChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBjYWxsT25N
YWluVGhyZWFkKGNhbGxGdW5jdGlvbk9iamVjdCwgbmV3IEZ1bmN0aW9uPHZvaWQgKCk+KGZ1bmN0
aW9uKSk7Cit9CisKIHZvaWQgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoTWFpblRocmVhZEZ1bmN0
aW9uKiwgdm9pZCopCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9lZmwvV29ya1F1ZXVlRWZsLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2VmbC9X
b3JrUXVldWVFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZmZl
ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9lZmwvV29ya1F1ZXVlRWZsLmNw
cApAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBF
bGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV29ya1F1ZXVl
LmgiCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCitjbGFzcyBUaW1lcldvcmtJdGVt
IHsKK3B1YmxpYzoKKyAgICBUaW1lcldvcmtJdGVtKGludCB0aW1lcklELCBjb25zdCBGdW5jdGlv
bjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKKyAgICAgICAgOiBtX2Z1bmN0
aW9uKGZ1bmN0aW9uKQorICAgICAgICAsIG1fcXVldWUocXVldWUpCisgICAgICAgICwgbV90aW1l
cklEKHRpbWVySUQpCisgICAgeworICAgIH0KKyAgICB+VGltZXJXb3JrSXRlbSgpIHsgfQorCisg
ICAgRnVuY3Rpb248dm9pZCgpPiBmdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb247
IH0KKyAgICBXb3JrUXVldWUqIHF1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9xdWV1ZTsgfQorCisg
ICAgaW50IHRpbWVySUQoKSBjb25zdCB7IHJldHVybiBtX3RpbWVySUQ7IH0KKworcHJpdmF0ZToK
KyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247CisgICAgV29ya1F1ZXVlKiBtX3F1ZXVl
OworICAgIGludCBtX3RpbWVySUQ7Cit9OworCitzdGF0aWMgY29uc3QgaW50IGludmFsaWRTb2Nr
ZXREZXNjcmlwdG9yID0gLTE7CitzdGF0aWMgY29uc3QgaW50IHRocmVhZE1lc3NhZ2VTaXplID0g
MTsKK3N0YXRpYyBjb25zdCBjaGFyIGZpbmlzaFRocmVhZE1lc3NhZ2VbXSA9ICJGIjsKK3N0YXRp
YyBjb25zdCBjaGFyIHdha3VwVGhyZWFkTWVzc2FnZVtdID0gIlciOworCit2b2lkIFdvcmtRdWV1
ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgaW50IGZkc1sy
XTsKKyAgICBpZiAocGlwZShmZHMpKQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKwor
ICAgIG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciA9IGZkc1swXTsKKyAgICBtX3dyaXRlVG9QaXBl
RGVzY3JpcHRvciA9IGZkc1sxXTsKKyAgICBGRF9aRVJPKCZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsK
KyAgICBGRF9TRVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNl
dCk7CisgICAgbV9tYXhGaWxlRGVzY3JpcHRvciA9IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsK
KworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yOworCisg
ICAgbV90aHJlYWRMb29wID0gdHJ1ZTsKKyAgICBjcmVhdGVUaHJlYWQocmVpbnRlcnByZXRfY2Fz
dDxXVEY6OlRocmVhZEZ1bmN0aW9uPigmV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQpLCB0aGlz
LCBuYW1lKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7Cisg
ICAgc2VuZE1lc3NhZ2VUb1RocmVhZChmaW5pc2hUaHJlYWRNZXNzYWdlKTsKK30KKwordm9pZCBX
b3JrUXVldWU6OnBlcmZvcm1Xb3JrKCkKK3sKKyAgICBtX3dvcmtJdGVtUXVldWVMb2NrLmxvY2so
KTsKKworICAgIHdoaWxlICghbV93b3JrSXRlbVF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBW
ZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IHdvcmtJdGVtUXVldWU7CisgICAgICAgIG1fd29ya0l0
ZW1RdWV1ZS5zd2FwKHdvcmtJdGVtUXVldWUpOworCisgICAgICAgIG1fd29ya0l0ZW1RdWV1ZUxv
Y2sudW5sb2NrKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29ya0l0ZW1RdWV1
ZS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHdvcmtJdGVtUXVldWVbaV0oKTsKKyAgICAgICAg
bV93b3JrSXRlbVF1ZXVlTG9jay5sb2NrKCk7CisgICAgfQorICAgIG1fd29ya0l0ZW1RdWV1ZUxv
Y2sudW5sb2NrKCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwZXJmb3JtRmlsZURlc2NyaXB0b3JX
b3JrKCkKK3sKKyAgICBmZF9zZXQgcmVhZEZpbGVEZXNjcmlwdG9yU2V0ID0gbV9maWxlRGVzY3Jp
cHRvclNldDsKKworICAgIGlmIChzZWxlY3QobV9tYXhGaWxlRGVzY3JpcHRvciArIDEsICZyZWFk
RmlsZURlc2NyaXB0b3JTZXQsIDAsIDAsIDApID49IDApIHsKKyAgICAgICAgaWYgKEZEX0lTU0VU
KG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpIHsKKyAg
ICAgICAgICAgIGNoYXIgcmVhZEJ1Zlt0aHJlYWRNZXNzYWdlU2l6ZV07CisgICAgICAgICAgICBp
ZiAocmVhZChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsIHJlYWRCdWYsIHRocmVhZE1lc3NhZ2VT
aXplKSA9PSAtMSkKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGZy
b20gV29ya1F1ZXVlVGhyZWFkIHBpcGUiKTsKKyAgICAgICAgICAgIGlmICghc3RybmNtcChyZWFk
QnVmLCBmaW5pc2hUaHJlYWRNZXNzYWdlLCB0aHJlYWRNZXNzYWdlU2l6ZSkpCisgICAgICAgICAg
ICAgICAgbV90aHJlYWRMb29wID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9z
b2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yICYmIEZEX0lTU0VUKG1f
c29ja2V0RGVzY3JpcHRvciwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCkpCisgICAgICAgICAgICBt
X3NvY2tldEV2ZW50SGFuZGxlcigpOworICAgIH0KK30KKwordm9pZCBXb3JrUXVldWU6OnNlbmRN
ZXNzYWdlVG9UaHJlYWQoY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBpZiAod3JpdGUobV93
cml0ZVRvUGlwZURlc2NyaXB0b3IsIG1lc3NhZ2UsIHRocmVhZE1lc3NhZ2VTaXplKSA9PSAtMSkK
KyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gd2FrZSB1cCBXb3JrUXVldWUgVGhyZWFkIik7
Cit9CisKK3ZvaWQqIFdvcmtRdWV1ZTo6d29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1
ZXVlKQoreworICAgIHdoaWxlICh3b3JrUXVldWUtPm1fdGhyZWFkTG9vcCkgeworICAgICAgICB3
b3JrUXVldWUtPnBlcmZvcm1Xb3JrKCk7CisgICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybUZpbGVE
ZXNjcmlwdG9yV29yaygpOworICAgIH0KKworICAgIGNsb3NlKHdvcmtRdWV1ZS0+bV9yZWFkRnJv
bVBpcGVEZXNjcmlwdG9yKTsKKyAgICBjbG9zZSh3b3JrUXVldWUtPm1fd3JpdGVUb1BpcGVEZXNj
cmlwdG9yKTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJT
b2NrZXRFdmVudEhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yLCBjb25zdCBGdW5jdGlvbjx2b2lk
KCk+JiBmdW5jdGlvbikKK3sKKyAgICBpZiAobV9zb2NrZXREZXNjcmlwdG9yICE9IGludmFsaWRT
b2NrZXREZXNjcmlwdG9yKQorICAgICAgICBMT0dfRVJST1IoIiVkIGlzIGFscmVhZHkgcmVnaXN0
ZXJkLiIsIGZpbGVEZXNjcmlwdG9yKTsKKworICAgIG1fc29ja2V0RGVzY3JpcHRvciA9IGZpbGVE
ZXNjcmlwdG9yOworICAgIG1fc29ja2V0RXZlbnRIYW5kbGVyID0gZnVuY3Rpb247CisKKyAgICBp
ZiAoZmlsZURlc2NyaXB0b3IgPiBtX21heEZpbGVEZXNjcmlwdG9yKQorICAgICAgICBtX21heEZp
bGVEZXNjcmlwdG9yID0gZmlsZURlc2NyaXB0b3I7CisgICAgRkRfU0VUKGZpbGVEZXNjcmlwdG9y
LCAmbV9maWxlRGVzY3JpcHRvclNldCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVy
U29ja2V0RXZlbnRIYW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKK3sKKyAgICBtX3NvY2tldERl
c2NyaXB0b3IgPSBpbnZhbGlkU29ja2V0RGVzY3JpcHRvcjsKKworICAgIGlmIChmaWxlRGVzY3Jp
cHRvciA9PSBtX21heEZpbGVEZXNjcmlwdG9yKQorICAgICAgICBtX21heEZpbGVEZXNjcmlwdG9y
ID0gbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yOworICAgIEZEX0NMUihmaWxlRGVzY3JpcHRvciwg
Jm1fZmlsZURlc2NyaXB0b3JTZXQpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fd29ya0l0ZW1RdWV1ZUxvY2spOworICAgIG1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoZnVuY3Rp
b24pOworICAgIHNlbmRNZXNzYWdlVG9UaHJlYWQod2FrdXBUaHJlYWRNZXNzYWdlKTsKK30KKwor
Ym9vbCBXb3JrUXVldWU6OnRpbWVyRmlyZWQodm9pZCogZGF0YSkKK3sKKyAgICBUaW1lcldvcmtJ
dGVtKiBpdGVtID0gc3RhdGljX2Nhc3Q8VGltZXJXb3JrSXRlbSo+KGRhdGEpOworICAgIGlmIChp
dGVtICYmIGl0ZW0tPnF1ZXVlKCktPm1faXNWYWxpZCkgeworICAgICAgICBpdGVtLT5xdWV1ZSgp
LT5kaXNwYXRjaChpdGVtLT5mdW5jdGlvbigpKTsKKyAgICAgICAgaXRlbS0+cXVldWUoKS0+bV90
aW1lcnMudGFrZShpdGVtLT50aW1lcklEKCkpOworICAgICAgICBkZWxldGUgaXRlbTsKKyAgICB9
CisKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCit2b2lkIFdvcmtRdWV1
ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBk
b3VibGUgZGVsYXkpCit7CisgICAgc3RhdGljIGludCB0aW1lcklkID0gMTsKKyAgICBtX3RpbWVy
cy5zZXQodGltZXJJZCwgYWRvcHRQdHIoZWNvcmVfdGltZXJfYWRkKGRlbGF5LCByZWludGVycHJl
dF9jYXN0PEVjb3JlX1Rhc2tfQ2I+KHRpbWVyRmlyZWQpLCBuZXcgVGltZXJXb3JrSXRlbSh0aW1l
cklkLCBmdW5jdGlvbiwgdGhpcykpKSk7CisgICAgdGltZXJJZCsrOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvZ3RrL1dvcmtRdWV1ZUd0ay5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9ndGsv
V29ya1F1ZXVlR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTFm
NjM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvZ3RrL1dvcmtRdWV1ZUd0ay5j
cHAKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMu
TC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXb3JrUXVldWUuaCIKKworI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxn
bGliLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCisvLyBXb3JrUXVldWU6
OkV2ZW50U291cmNlCitjbGFzcyBXb3JrUXVldWU6OkV2ZW50U291cmNlIHsKK3B1YmxpYzoKKyAg
ICBFdmVudFNvdXJjZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVl
KiB3b3JrUXVldWUsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUpCisgICAgICAgIDogbV9mdW5j
dGlvbihmdW5jdGlvbikKKyAgICAgICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCisgICAgICAg
ICwgbV9jYW5jZWxsYWJsZShjYW5jZWxsYWJsZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBj
YW5jZWwoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NhbmNlbGxhYmxlKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCBleGVjdXRlRXZlbnRTb3VyY2UoRXZlbnRTb3VyY2UqIGV2
ZW50U291cmNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKKyAgICAgICAg
V29ya1F1ZXVlKiBxdWV1ZSA9IGV2ZW50U291cmNlLT5tX3dvcmtRdWV1ZTsKKyAgICAgICAgewor
ICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHF1ZXVlLT5tX2lzVmFsaWRNdXRleCk7Cisg
ICAgICAgICAgICBpZiAoIXF1ZXVlLT5tX2lzVmFsaWQpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgZXZlbnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmtPbmNlKEV2ZW50U291cmNlKiBldmVu
dFNvdXJjZSkKKyAgICB7CisgICAgICAgIGV4ZWN1dGVFdmVudFNvdXJjZShldmVudFNvdXJjZSk7
CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVy
Zm9ybVdvcmsoR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBFdmVudFNv
dXJjZSogZXZlbnRTb3VyY2UpCisgICAgeworICAgICAgICBpZiAoIShjb25kaXRpb24gJiBHX0lP
X0lOKSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fSFVQKSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fRVJS
KSkgeworICAgICAgICAgICAgLy8gRXZlbnRTb3VyY2UgaGFzIGJlZW4gY2FuY2VsbGVkLCByZXR1
cm4gRkFMU0UgdG8gZGVzdHJveSB0aGUgc291cmNlLgorICAgICAgICAgICAgcmV0dXJuIEZBTFNF
OworICAgICAgICB9CisKKyAgICAgICAgZXhlY3V0ZUV2ZW50U291cmNlKGV2ZW50U291cmNlKTsK
KyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIHBlcmZv
cm1Xb3JrT25UZXJtaW5hdGlvbihHUGlkLCBnaW50LCBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2Up
CisgICAgeworICAgICAgICBleGVjdXRlRXZlbnRTb3VyY2UoZXZlbnRTb3VyY2UpOworICAgICAg
ICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVsZXRlRXZlbnRTb3Vy
Y2UoRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKSAKKyAgICB7CisgICAgICAgIEFTU0VSVChldmVu
dFNvdXJjZSk7CisgICAgICAgIGRlbGV0ZSBldmVudFNvdXJjZTsKKyAgICB9CisgICAKK3B1Ymxp
YzoKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247CisgICAgV29ya1F1ZXVlKiBtX3dv
cmtRdWV1ZTsKKyAgICBHQ2FuY2VsbGFibGUqIG1fY2FuY2VsbGFibGU7Cit9OworCisvLyBXb3Jr
UXVldWUKK3N0YXRpYyBjb25zdCBzaXplX3Qga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1pdCA9
IDMxOworCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5h
bWUpCit7CisgICAgbV9ldmVudENvbnRleHQgPSBhZG9wdEdSZWYoZ19tYWluX2NvbnRleHRfbmV3
KCkpOworICAgIEFTU0VSVChtX2V2ZW50Q29udGV4dCk7CisgICAgbV9ldmVudExvb3AgPSBhZG9w
dEdSZWYoZ19tYWluX2xvb3BfbmV3KG1fZXZlbnRDb250ZXh0LmdldCgpLCBGQUxTRSkpOworICAg
IEFTU0VSVChtX2V2ZW50TG9vcCk7CisKKyAgICAvLyBUaGlzIG5hbWUgY2FuIGJlIGNvbS5hcHBs
ZS5XZWJLaXQuUHJvY2Vzc0xhdW5jaGVyIG9yIGNvbS5hcHBsZS5Db3JlSVBDLlJlY2VpdmVRdWV1
ZS4KKyAgICAvLyBXZSBhcmUgdXNpbmcgdGhvc2UgbmFtZXMgZm9yIHRoZSB0aHJlYWQgbmFtZSwg
YnV0IGJvdGggYXJlIGxvbmdlciB0aGFuIDMxIGNoYXJhY3RlcnMsCisgICAgLy8gd2hpY2ggaXMg
dGhlIGxpbWl0IG9mIFZpc3VhbCBTdHVkaW8gZm9yIHRocmVhZCBuYW1lcy4KKyAgICAvLyBXaGVu
IGxvZyBpcyBlbmFibGVkIGNyZWF0ZVRocmVhZCgpIHdpbGwgYXNzZXJ0IGluc3RlYWQgb2YgdHJ1
bmNhdGUgdGhlIG5hbWUsIHNvIHdlIG5lZWQKKyAgICAvLyB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qg
dXNlIGEgbmFtZSBsb25nZXIgdGhhbiAzMSBjaGFyYWN0ZXJzLgorICAgIGNvbnN0IGNoYXIqIHRo
cmVhZE5hbWUgPSBnX3N0cnJzdHIobmFtZSwgIi4iKTsKKyAgICBpZiAodGhyZWFkTmFtZSkKKyAg
ICAgICAgdGhyZWFkTmFtZSsrOworICAgIGVsc2UKKyAgICAgICAgdGhyZWFkTmFtZSA9IG5hbWU7
CisgICAgaWYgKHN0cmxlbih0aHJlYWROYW1lKSA+IGtWaXN1YWxTdHVkaW9UaHJlYWROYW1lTGlt
aXQpCisgICAgICAgIHRocmVhZE5hbWUgKz0gc3RybGVuKHRocmVhZE5hbWUpIC0ga1Zpc3VhbFN0
dWRpb1RocmVhZE5hbWVMaW1pdDsKKworICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gY3JlYXRlVGhy
ZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJldvcmtRdWV1ZTo6c3Rh
cnRXb3JrUXVldWVUaHJlYWQpLCB0aGlzLCB0aHJlYWROYW1lKTsKK30KKwordm9pZCBXb3JrUXVl
dWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXZl
bnRMb29wTG9jayk7CisKKyAgICBpZiAobV9ldmVudExvb3ApIHsKKyAgICAgICAgaWYgKGdfbWFp
bl9sb29wX2lzX3J1bm5pbmcobV9ldmVudExvb3AuZ2V0KCkpKQorICAgICAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdChtX2V2ZW50TG9vcC5nZXQoKSk7CisgICAgICAgIG1fZXZlbnRMb29wLmNsZWFy
KCk7CisgICAgfQorCisgICAgbV9ldmVudENvbnRleHQuY2xlYXIoKTsKK30KKwordm9pZCBXb3Jr
UXVldWU6OnN0YXJ0V29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlKQoreworICAg
IHdvcmtRdWV1ZS0+d29ya1F1ZXVlVGhyZWFkQm9keSgpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6
d29ya1F1ZXVlVGhyZWFkQm9keSgpCit7CisgICAgZ19tYWluX2xvb3BfcnVuKG1fZXZlbnRMb29w
LmdldCgpKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVy
KGludCBmaWxlRGVzY3JpcHRvciwgaW50IGNvbmRpdGlvbiwgY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYgZnVuY3Rpb24pCit7CisgICAgR1JlZlB0cjxHU29ja2V0PiBzb2NrZXQgPSBhZG9wdEdSZWYo
Z19zb2NrZXRfbmV3X2Zyb21fZmQoZmlsZURlc2NyaXB0b3IsIDApKTsKKyAgICBBU1NFUlQoc29j
a2V0KTsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYo
Z19jYW5jZWxsYWJsZV9uZXcoKSk7CisgICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJj
ZSA9IGFkb3B0R1JlZihnX3NvY2tldF9jcmVhdGVfc291cmNlKHNvY2tldC5nZXQoKSwgc3RhdGlj
X2Nhc3Q8R0lPQ29uZGl0aW9uPihjb25kaXRpb24pLCBjYW5jZWxsYWJsZS5nZXQoKSkpOworICAg
IEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7CisgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0g
bmV3IEV2ZW50U291cmNlKGZ1bmN0aW9uLCB0aGlzLCBjYW5jZWxsYWJsZS5nZXQoKSk7CisgICAg
QVNTRVJUKGV2ZW50U291cmNlKTsKKworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhkaXNwYXRj
aFNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6
RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrKSwKKyAgICAgICAgZXZlbnRTb3VyY2UsIHJlaW50ZXJw
cmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpkZWxldGVF
dmVudFNvdXJjZSkpOworCisgICAgLy8gU2V0IHVwIHRoZSBldmVudCBzb3VyY2VzIHVuZGVyIHRo
ZSBtdXRleCBzaW5jZSB0aGlzIGlzIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgdGhyZWFkcy4KKyAg
ICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOworICAg
ICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzOworICAgICAgICBFdmVudFNvdXJjZUl0
ZXJhdG9yIGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRvcik7CisgICAgICAg
IGlmIChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSkgCisgICAgICAgICAgICBzb3VyY2VzID0g
aXQtPnNlY29uZDsKKworICAgICAgICBzb3VyY2VzLmFwcGVuZChldmVudFNvdXJjZSk7CisgICAg
ICAgIG1fZXZlbnRTb3VyY2VzLnNldChmaWxlRGVzY3JpcHRvciwgc291cmNlcyk7CisgICAgfQor
CisgICAgZ19zb3VyY2VfYXR0YWNoKGRpc3BhdGNoU291cmNlLmdldCgpLCBtX2V2ZW50Q29udGV4
dC5nZXQoKSk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5k
bGVyKGludCBmaWxlRGVzY3JpcHRvcikKK3sKKyAgICBBU1NFUlQoZmlsZURlc2NyaXB0b3IpOwor
ICAgIAorICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOworICAgIAor
ICAgIEV2ZW50U291cmNlSXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZpbGVEZXNj
cmlwdG9yKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpOworICAgIEFT
U0VSVChtX2V2ZW50U291cmNlcy5jb250YWlucyhmaWxlRGVzY3JpcHRvcikpOworCisgICAgaWYg
KGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSB7CisgICAgICAgIFZlY3RvcjxFdmVudFNvdXJj
ZSo+IHNvdXJjZXMgPSBpdC0+c2Vjb25kOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc291cmNlcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHNvdXJjZXNbaV0tPmNhbmNlbCgp
OworCisgICAgICAgIG1fZXZlbnRTb3VyY2VzLnJlbW92ZShpdCk7CisgICAgfQorfQorCit2b2lk
IFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblNvdXJjZShHU291cmNlKiBkaXNwYXRjaFNvdXJjZSwgY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIEdTb3VyY2VGdW5jIHNvdXJjZUNhbGxiYWNr
KQoreworICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZShmdW5j
dGlvbiwgdGhpcywgMCk7CisKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0Y2hTb3Vy
Y2UsIHNvdXJjZUNhbGxiYWNrLCBldmVudFNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oJldvcmtRdWV1ZTo6RXZlbnRTb3Vy
Y2U6OmRlbGV0ZUV2ZW50U291cmNlKSk7CisKKyAgICBnX3NvdXJjZV9hdHRhY2goZGlzcGF0Y2hT
b3VyY2UsIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKK30KKwordm9pZCBXb3JrUXVldWU6OmRpc3Bh
dGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIEdSZWZQdHI8R1Nv
dXJjZT4gZGlzcGF0Y2hTb3VyY2UgPSBhZG9wdEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSk7Cisg
ICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKKyAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHkoZGlz
cGF0Y2hTb3VyY2UuZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVMVCk7CisKKyAgICBkaXNwYXRjaE9u
U291cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxH
U291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25jZSkpOwor
fQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZv
aWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCit7CisgICAgR1JlZlB0cjxHU291cmNlPiBk
aXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhzdGF0aWNfY2Fz
dDxndWludD4oZGVsYXkgKiAxMDAwKSkpOworICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7CisK
KyAgICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVp
bnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZv
cm1Xb3JrT25jZSkpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblRlcm1pbmF0aW9u
KFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIgcHJvY2VzcywgY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYgZnVuY3Rpb24pCit7CisgICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNvdXJjZSA9IGFk
b3B0R1JlZihnX2NoaWxkX3dhdGNoX3NvdXJjZV9uZXcocHJvY2VzcykpOworICAgIEFTU0VSVChk
aXNwYXRjaFNvdXJjZSk7CisKKyAgICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNlLmdl
dCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6
RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25UZXJtaW5hdGlvbikpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvbWFjL1dvcmtRdWV1ZU1hYy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9tYWMv
V29ya1F1ZXVlTWFjLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTQ3
M2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvbWFjL1dvcmtRdWV1ZU1hYy5j
cHAKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV29ya1F1ZXVlLmgiCisKKyNpbmNsdWRlIDxtYWNoL21hY2hfaW5pdC5oPgorI2lu
Y2x1ZGUgPG1hY2gvbWFjaF9wb3J0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwor
dm9pZCBXb3JrUXVldWU6OmV4ZWN1dGVGdW5jdGlvbih2b2lkKiBjb250ZXh0KQoreworICAgIFdv
cmtRdWV1ZSogcXVldWUgPSBzdGF0aWNfY2FzdDxXb3JrUXVldWUqPihkaXNwYXRjaF9nZXRfY29u
dGV4dChkaXNwYXRjaF9nZXRfY3VycmVudF9xdWV1ZSgpKSk7CisgICAgT3duUHRyPEZ1bmN0aW9u
PHZvaWQoKT4gPiBmdW5jdGlvbiA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PEZ1bmN0aW9uPHZvaWQo
KT4qPihjb250ZXh0KSk7CisgICAgCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIo
cXVldWUtPm1faXNWYWxpZE11dGV4KTsKKyAgICAgICAgaWYgKCFxdWV1ZS0+bV9pc1ZhbGlkKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICgqZnVuY3Rpb24pKCk7Cit9CisKK3Zv
aWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikK
K3sKKyAgICBkaXNwYXRjaF9hc3luY19mKG1fZGlzcGF0Y2hRdWV1ZSwgbmV3IEZ1bmN0aW9uPHZv
aWQoKT4oZnVuY3Rpb24pLCBleGVjdXRlRnVuY3Rpb24pOworfQorCit2b2lkIFdvcmtRdWV1ZTo6
ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3Vi
bGUgZGVsYXkpCit7CisgICAgZGlzcGF0Y2hfdGltZV90IGRlbGF5VGltZSA9IGRpc3BhdGNoX3Rp
bWUoRElTUEFUQ0hfVElNRV9OT1csIGRlbGF5ICogTlNFQ19QRVJfU0VDKTsKKworICAgIGRpc3Bh
dGNoX2FmdGVyX2YoZGVsYXlUaW1lLCBtX2Rpc3BhdGNoUXVldWUsIG5ldyBGdW5jdGlvbjx2b2lk
KCk+KGZ1bmN0aW9uKSwgZXhlY3V0ZUZ1bmN0aW9uKTsKK30KKworY2xhc3MgV29ya1F1ZXVlOjpF
dmVudFNvdXJjZSB7CitwdWJsaWM6CisgICAgRXZlbnRTb3VyY2UoTWFjaFBvcnRFdmVudFR5cGUg
ZXZlbnRUeXBlLCBkaXNwYXRjaF9zb3VyY2VfdCBkaXNwYXRjaFNvdXJjZSwgY29uc3QgRnVuY3Rp
b248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAgICAgIDogbV9ldmVudFR5cGUoZXZlbnRUeXBlKQor
ICAgICAgICAsIG1fZGlzcGF0Y2hTb3VyY2UoZGlzcGF0Y2hTb3VyY2UpCisgICAgICAgICwgbV9m
dW5jdGlvbihmdW5jdGlvbikKKyAgICB7CisgICAgfQorICAgIAorICAgIGRpc3BhdGNoX3NvdXJj
ZV90IGRpc3BhdGNoU291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwYXRjaFNvdXJjZTsgfQor
ICAgIAorICAgIHN0YXRpYyB2b2lkIGV2ZW50SGFuZGxlcih2b2lkKiBzb3VyY2UpIAorICAgIHsK
KyAgICAgICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gc3RhdGljX2Nhc3Q8RXZlbnRTb3Vy
Y2UqPihzb3VyY2UpOworICAgICAgICAKKyAgICAgICAgZXZlbnRTb3VyY2UtPm1fZnVuY3Rpb24o
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgY2FuY2VsSGFuZGxlcih2b2lkKiBzb3Vy
Y2UpCisgICAgeworICAgICAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBzdGF0aWNfY2Fz
dDxFdmVudFNvdXJjZSo+KHNvdXJjZSk7CisgICAgICAgIAorICAgICAgICBtYWNoX3BvcnRfdCBt
YWNoUG9ydCA9IGRpc3BhdGNoX3NvdXJjZV9nZXRfaGFuZGxlKGV2ZW50U291cmNlLT5tX2Rpc3Bh
dGNoU291cmNlKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoZXZlbnRTb3VyY2UtPm1fZXZl
bnRUeXBlKSB7CisgICAgICAgIGNhc2UgTWFjaFBvcnREYXRhQXZhaWxhYmxlOgorICAgICAgICAg
ICAgLy8gUmVsZWFzZSBvdXIgcmVjZWl2ZSByaWdodC4KKyAgICAgICAgICAgIG1hY2hfcG9ydF9t
b2RfcmVmcyhtYWNoX3Rhc2tfc2VsZigpLCBtYWNoUG9ydCwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJ
VkUsIC0xKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1hY2hQb3J0RGVhZE5h
bWVOb3RpZmljYXRpb246CisgICAgICAgICAgICAvLyBSZWxlYXNlIG91ciBzZW5kIHJpZ2h0Lgor
ICAgICAgICAgICAgbWFjaF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgbWFjaFBv
cnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3Rh
dGljIHZvaWQgZmluYWxpemVIYW5kbGVyKHZvaWQqIHNvdXJjZSkKKyAgICB7CisgICAgICAgIEV2
ZW50U291cmNlKiBldmVudFNvdXJjZSA9IHN0YXRpY19jYXN0PEV2ZW50U291cmNlKj4oc291cmNl
KTsKKyAgICAgICAgCisgICAgICAgIGRlbGV0ZSBldmVudFNvdXJjZTsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIE1hY2hQb3J0RXZlbnRUeXBlIG1fZXZlbnRUeXBlOworICAgIAorICAgIC8v
IFRoaXMgaXMgYSB3ZWFrIHJlZmVyZW5jZSwgc2luY2UgbV9kaXNwYXRjaFNvdXJjZSByZWZlcmVu
Y2VzIHRoZSBldmVudCBzb3VyY2UuCisgICAgZGlzcGF0Y2hfc291cmNlX3QgbV9kaXNwYXRjaFNv
dXJjZTsKKworICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKK307CisKK3ZvaWQgV29y
a1F1ZXVlOjpyZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90IG1hY2hQb3J0
LCBNYWNoUG9ydEV2ZW50VHlwZSBldmVudFR5cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1
bmN0aW9uKQoreworICAgIGRpc3BhdGNoX3NvdXJjZV90eXBlX3Qgc291cmNlVHlwZSA9IDA7Cisg
ICAgc3dpdGNoIChldmVudFR5cGUpIHsKKyAgICBjYXNlIE1hY2hQb3J0RGF0YUF2YWlsYWJsZToK
KyAgICAgICAgc291cmNlVHlwZSA9IERJU1BBVENIX1NPVVJDRV9UWVBFX01BQ0hfUkVDVjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBNYWNoUG9ydERlYWROYW1lTm90aWZpY2F0aW9uOgorICAg
ICAgICBzb3VyY2VUeXBlID0gRElTUEFUQ0hfU09VUkNFX1RZUEVfTUFDSF9TRU5EOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgCisgICAgZGlzcGF0Y2hfc291cmNlX3QgZGlzcGF0Y2hTb3Vy
Y2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKHNvdXJjZVR5cGUsIG1hY2hQb3J0LCAwLCBtX2Rp
c3BhdGNoUXVldWUpOworICAgIAorICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBF
dmVudFNvdXJjZShldmVudFR5cGUsIGRpc3BhdGNoU291cmNlLCBmdW5jdGlvbik7CisgICAgZGlz
cGF0Y2hfc2V0X2NvbnRleHQoZGlzcGF0Y2hTb3VyY2UsIGV2ZW50U291cmNlKTsKKyAgICAKKyAg
ICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXJfZihkaXNwYXRjaFNvdXJjZSwgJkV2
ZW50U291cmNlOjpldmVudEhhbmRsZXIpOworICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfY2FuY2Vs
X2hhbmRsZXJfZihkaXNwYXRjaFNvdXJjZSwgJkV2ZW50U291cmNlOjpjYW5jZWxIYW5kbGVyKTsK
KyAgICBkaXNwYXRjaF9zZXRfZmluYWxpemVyX2YoZGlzcGF0Y2hTb3VyY2UsICZFdmVudFNvdXJj
ZTo6ZmluYWxpemVIYW5kbGVyKTsKKyAgICAKKyAgICAvLyBBZGQgdGhlIHNvdXJjZSB0byBvdXIg
c2V0IG9mIHNvdXJjZXMuCisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVu
dFNvdXJjZXNNdXRleCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIW1fZXZlbnRTb3VyY2Vz
LmNvbnRhaW5zKG1hY2hQb3J0KSk7CisgICAgICAgIAorICAgICAgICBtX2V2ZW50U291cmNlcy5z
ZXQobWFjaFBvcnQsIGV2ZW50U291cmNlKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFuZCBzdGFy
dCBpdCEKKyAgICAgICAgZGlzcGF0Y2hfcmVzdW1lKGRpc3BhdGNoU291cmNlKTsKKyAgICB9Cit9
CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIobWFjaF9w
b3J0X3QgbWFjaFBvcnQpCit7CisgICAgQVNTRVJUKG1hY2hQb3J0KTsKKyAgICAKKyAgICBNdXRl
eExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNNdXRleCk7CisgICAgCisgICAgSGFzaE1hcDxt
YWNoX3BvcnRfdCwgRXZlbnRTb3VyY2UqPjo6aXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5m
aW5kKG1hY2hQb3J0KTsKKyAgICBBU1NFUlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpOwor
ICAgIAorICAgIEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlucyhtYWNoUG9ydCkpOworCisg
ICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlID0gaXQtPnNlY29uZDsKKyAgICAvLyBDYW5jZWwg
YW5kIHJlbGVhc2UgdGhlIHNvdXJjZS4gSXQgd2lsbCBiZSBkZWxldGVkIGluIGl0cyBmaW5hbGl6
ZSBoYW5kbGVyLgorICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwoZXZlbnRTb3VyY2UtPmRpc3Bh
dGNoU291cmNlKCkpOworICAgIGRpc3BhdGNoX3JlbGVhc2UoZXZlbnRTb3VyY2UtPmRpc3BhdGNo
U291cmNlKCkpOworCisgICAgbV9ldmVudFNvdXJjZXMucmVtb3ZlKGl0KTsgICAgCit9CisKK3Zv
aWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkKK3sKKyAg
ICBtX2Rpc3BhdGNoUXVldWUgPSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUobmFtZSwgMCk7CisgICAg
ZGlzcGF0Y2hfc2V0X2NvbnRleHQobV9kaXNwYXRjaFF1ZXVlLCB0aGlzKTsKK30KKwordm9pZCBX
b3JrUXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc011dGV4KTsKKyAgICBBU1NFUlQo
bV9ldmVudFNvdXJjZXMuaXNFbXB0eSgpKTsKKyNlbmRpZgorCisgICAgZGlzcGF0Y2hfcmVsZWFz
ZShtX2Rpc3BhdGNoUXVldWUpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvcXQvV29y
a1F1ZXVlUXQuY3BwIGIvU291cmNlL1dURi93dGYvcXQvV29ya1F1ZXVlUXQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MDkxZmYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9xdC9Xb3JrUXVldWVRdC5jcHAKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV29ya1F1
ZXVlLmgiCisKKyNpbmNsdWRlIDxRT2JqZWN0PgorI2luY2x1ZGUgPFFQcm9jZXNzPgorI2luY2x1
ZGUgPFFUaHJlYWQ+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RG
IHsKKworY2xhc3MgV29ya1F1ZXVlOjpXb3JrSXRlbVF0IDogcHVibGljIFFPYmplY3QgeworICAg
IFFfT0JKRUNUCitwdWJsaWM6CisgICAgV29ya0l0ZW1RdChXb3JrUXVldWUqIHdvcmtRdWV1ZSwg
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAgICAgIDogbV9xdWV1ZSh3b3Jr
UXVldWUpCisgICAgICAgICwgbV9zb3VyY2UoMCkKKyAgICAgICAgLCBtX3NpZ25hbCgwKQorICAg
ICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgeworICAgIH0KKworICAgIFdvcmtJdGVt
UXQoV29ya1F1ZXVlKiB3b3JrUXVldWUsIFFPYmplY3QqIHNvdXJjZSwgY29uc3QgY2hhciogc2ln
bmFsLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKKyAgICAgICAgOiBtX3F1ZXVl
KHdvcmtRdWV1ZSkKKyAgICAgICAgLCBtX3NvdXJjZShzb3VyY2UpCisgICAgICAgICwgbV9zaWdu
YWwoc2lnbmFsKQorICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgeworICAgICAg
ICBjb25uZWN0KG1fc291cmNlLCBtX3NpZ25hbCwgU0xPVChleGVjdXRlKCkpLCBRdDo6UXVldWVk
Q29ubmVjdGlvbik7CisgICAgfQorCisgICAgfldvcmtJdGVtUXQoKQorICAgIHsKKyAgICB9CisK
KyAgICBRX1NMT1Qgdm9pZCBleGVjdXRlKCkgCisgICAgeyAKKyAgICAgICAgaWYgKG1fcXVldWUt
Pm1faXNWYWxpZCkKKyAgICAgICAgICAgIG1fZnVuY3Rpb24oKTsKKyAgICB9CisKKyAgICBRX1NM
T1Qgdm9pZCBleGVjdXRlQW5kRGVsZXRlKCkKKyAgICB7CisgICAgICAgIGV4ZWN1dGUoKTsKKyAg
ICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHRpbWVyRXZlbnQo
UVRpbWVyRXZlbnQqKQorICAgIHsKKyAgICAgICAgZXhlY3V0ZUFuZERlbGV0ZSgpOworICAgIH0K
KworICAgIFdvcmtRdWV1ZSogbV9xdWV1ZTsKKyAgICBRT2JqZWN0KiBtX3NvdXJjZTsKKyAgICBj
b25zdCBjaGFyKiBtX3NpZ25hbDsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247Cit9
OworCitRU29ja2V0Tm90aWZpZXIqIFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRs
ZXIoaW50IHNvY2tldERlc2NyaXB0b3IsIFFTb2NrZXROb3RpZmllcjo6VHlwZSB0eXBlLCBjb25z
dCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBBU1NFUlQobV93b3JrVGhyZWFk
KTsKKworICAgIFFTb2NrZXROb3RpZmllciogbm90aWZpZXIgPSBuZXcgUVNvY2tldE5vdGlmaWVy
KHNvY2tldERlc2NyaXB0b3IsIHR5cGUsIDApOworICAgIG5vdGlmaWVyLT5zZXRFbmFibGVkKGZh
bHNlKTsKKyAgICBub3RpZmllci0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7CisgICAgV29y
a1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KHRo
aXMsIG5vdGlmaWVyLCBTSUdOQUwoYWN0aXZhdGVkKGludCkpLCBmdW5jdGlvbik7CisgICAgaXRl
bVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsKKyAgICBub3RpZmllci0+c2V0RW5hYmxl
ZCh0cnVlKTsKKyAgICByZXR1cm4gbm90aWZpZXI7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwbGF0
Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciopCit7CisgICAgbV93b3JrVGhyZWFkID0gbmV3IFFU
aHJlYWQoKTsKKyAgICBtX3dvcmtUaHJlYWQtPnN0YXJ0KCk7Cit9CisKK3ZvaWQgV29ya1F1ZXVl
OjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworICAgIG1fd29ya1RocmVhZC0+ZXhpdCgpOworICAg
IG1fd29ya1RocmVhZC0+d2FpdCgpOworICAgIGRlbGV0ZSBtX3dvcmtUaHJlYWQ7Cit9CisKK3Zv
aWQgV29ya1F1ZXVlOjpkaXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikK
K3sKKyAgICBXb3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6Oldv
cmtJdGVtUXQodGhpcywgZnVuY3Rpb24pOworICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29y
a1RocmVhZCk7CisgICAgUU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChpdGVtUXQsICJleGVjdXRl
QW5kRGVsZXRlIiwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOworfQorCit2b2lkIFdvcmtRdWV1ZTo6
ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3Vi
bGUgZGVsYXlJblNlY29uZCkKK3sKKyAgICBXb3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9
IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQodGhpcywgZnVuY3Rpb24pOworICAgIGl0ZW1RdC0+
c3RhcnRUaW1lcihzdGF0aWNfY2FzdDxpbnQ+KGRlbGF5SW5TZWNvbmQgKiAxMDAwKSk7CisgICAg
aXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsKK30KKwordm9pZCBXb3JrUXVldWU6
OmRpc3BhdGNoT25UZXJtaW5hdGlvbihQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3Ms
IGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIFdvcmtRdWV1ZTo6V29y
a0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBwcm9jZXNz
LCBTSUdOQUwoZmluaXNoZWQoaW50LCBRUHJvY2Vzczo6RXhpdFN0YXR1cykpLCBmdW5jdGlvbik7
CisgICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNpbmNsdWRlICJXb3JrUXVldWVRdC5tb2MiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi93aW4vV29ya1F1ZXVlV2luLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3dpbi9Xb3Jr
UXVldWVXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYmFkYmQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi93aW4vV29ya1F1ZXVlV2luLmNwcApA
QCAtMCwwICsxLDI5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXb3JrUXVldWUuaCIKKworI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK2lubGluZSBXb3JrUXVldWU6OldvcmtJdGVt
V2luOjpXb3JrSXRlbVdpbihjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1
ZXVlKiBxdWV1ZSkKKyAgICA6IG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgLCBtX3F1ZXVlKHF1
ZXVlKQoreworfQorCitQYXNzUmVmUHRyPFdvcmtRdWV1ZTo6V29ya0l0ZW1XaW4+IFdvcmtRdWV1
ZTo6V29ya0l0ZW1XaW46OmNyZWF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwg
V29ya1F1ZXVlKiBxdWV1ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtJdGVtV2lu
KGZ1bmN0aW9uLCBxdWV1ZSkpOworfQorCitXb3JrUXVldWU6OldvcmtJdGVtV2luOjp+V29ya0l0
ZW1XaW4oKQoreworfQorCitpbmxpbmUgV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6SGFuZGxl
V29ya0l0ZW0oSEFORExFIGhhbmRsZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24s
IFdvcmtRdWV1ZSogcXVldWUpCisgICAgOiBXb3JrSXRlbVdpbihmdW5jdGlvbiwgcXVldWUpCisg
ICAgLCBtX2hhbmRsZShoYW5kbGUpCisgICAgLCBtX3dhaXRIYW5kbGUoMCkKK3sKKyAgICBBU1NF
UlRfQVJHKGhhbmRsZSwgaGFuZGxlKTsKK30KKworUGFzc1JlZlB0cjxXb3JrUXVldWU6OkhhbmRs
ZVdvcmtJdGVtPiBXb3JrUXVldWU6OkhhbmRsZVdvcmtJdGVtOjpjcmVhdGVCeUFkb3B0aW5nSGFu
ZGxlKEhBTkRMRSBoYW5kbGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBXb3Jr
UXVldWUqIHF1ZXVlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGFuZGxlV29ya0l0ZW0o
aGFuZGxlLCBmdW5jdGlvbiwgcXVldWUpKTsKK30KKworV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRl
bTo6fkhhbmRsZVdvcmtJdGVtKCkKK3sKKyAgICA6OkNsb3NlSGFuZGxlKG1faGFuZGxlKTsKK30K
Kwordm9pZCBXb3JrUXVldWU6OmhhbmRsZUNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4g
dGltZXJPcldhaXRGaXJlZCkKK3sKKyAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOwor
ICAgIEFTU0VSVF9BUkcodGltZXJPcldhaXRGaXJlZCwgIXRpbWVyT3JXYWl0RmlyZWQpOworCisg
ICAgV29ya0l0ZW1XaW4qIGl0ZW0gPSBzdGF0aWNfY2FzdDxXb3JrSXRlbVdpbio+KGNvbnRleHQp
OworICAgIFdvcmtRdWV1ZSogcXVldWUgPSBpdGVtLT5xdWV1ZSgpOworCisgICAgeworICAgICAg
ICBNdXRleExvY2tlciBsb2NrKHF1ZXVlLT5tX3dvcmtJdGVtUXVldWVMb2NrKTsKKyAgICAgICAg
cXVldWUtPm1fd29ya0l0ZW1RdWV1ZS5hcHBlbmQoaXRlbSk7CisKKyAgICAgICAgLy8gSWYgbm8g
b3RoZXIgdGhyZWFkIGlzIHBlcmZvcm1pbmcgd29yaywgd2UgY2FuIGRvIGl0IG9uIHRoaXMgdGhy
ZWFkLgorICAgICAgICBpZiAoIXF1ZXVlLT50cnlSZWdpc3RlckFzV29ya1RocmVhZCgpKSB7Cisg
ICAgICAgICAgICAvLyBTb21lIG90aGVyIHRocmVhZCBpcyBwZXJmb3JtaW5nIHdvcmsuIFNpbmNl
IHdlIGhvbGQgdGhlIHF1ZXVlIGxvY2ssIHdlIGNhbiBiZSBzdXJlCisgICAgICAgICAgICAvLyB0
aGF0IHRoZSB3b3JrIHRocmVhZCBpcyBub3QgZXhpdGluZyBkdWUgdG8gYW4gZW1wdHkgcXVldWUg
YW5kIHdpbGwgcHJvY2VzcyB0aGUgd29yaworICAgICAgICAgICAgLy8gaXRlbSB3ZSBqdXN0IGFk
ZGVkIHRvIGl0LiBJZiB3ZSB3ZXJlbid0IGhvbGRpbmcgdGhlIGxvY2sgd2UnZCBoYXZlIHRvIHNp
Z25hbAorICAgICAgICAgICAgLy8gbV9wZXJmb3JtV29ya0V2ZW50IHRvIG1ha2Ugc3VyZSB0aGUg
d29yayBpdGVtIGdvdCBwaWNrZWQgdXAuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBxdWV1ZS0+cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFkKCk7
Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpyZWdpc3RlckhhbmRsZShIQU5ETEUgaGFuZGxlLCBjb25z
dCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBSZWZQdHI8SGFuZGxlV29ya0l0
ZW0+IGhhbmRsZUl0ZW0gPSBIYW5kbGVXb3JrSXRlbTo6Y3JlYXRlQnlBZG9wdGluZ0hhbmRsZSho
YW5kbGUsIGZ1bmN0aW9uLCB0aGlzKTsKKworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9j
ayhtX2hhbmRsZXNMb2NrKTsKKyAgICAgICAgQVNTRVJUX0FSRyhoYW5kbGUsICFtX2hhbmRsZXMu
Y29udGFpbnMoaGFuZGxlKSk7CisgICAgICAgIG1faGFuZGxlcy5zZXQoaGFuZGxlLCBoYW5kbGVJ
dGVtKTsKKyAgICB9CisKKyAgICBIQU5ETEUgd2FpdEhhbmRsZTsKKyAgICBpZiAoITo6UmVnaXN0
ZXJXYWl0Rm9yU2luZ2xlT2JqZWN0KCZ3YWl0SGFuZGxlLCBoYW5kbGUsIGhhbmRsZUNhbGxiYWNr
LCBoYW5kbGVJdGVtLmdldCgpLCBJTkZJTklURSwgV1RfRVhFQ1VURURFRkFVTFQpKSB7CisgICAg
ICAgIERXT1JEIGVycm9yID0gOjpHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorICAgIGhhbmRsZUl0ZW0tPnNldFdhaXRIYW5kbGUod2FpdEhhbmRs
ZSk7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyQW5kQ2xvc2VIYW5kbGUoSEFORExF
IGhhbmRsZSkKK3sKKyAgICBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW07CisgICAgeworICAg
ICAgICBNdXRleExvY2tlciBsb2NrZXIobV9oYW5kbGVzTG9jayk7CisgICAgICAgIEFTU0VSVF9B
UkcoaGFuZGxlLCBtX2hhbmRsZXMuY29udGFpbnMoaGFuZGxlKSk7CisgICAgICAgIGl0ZW0gPSBt
X2hhbmRsZXMudGFrZShoYW5kbGUpOworICAgIH0KKworICAgIHVucmVnaXN0ZXJXYWl0QW5kRGVz
dHJveUl0ZW1Tb29uKGl0ZW0ucmVsZWFzZSgpKTsKK30KKworRFdPUkQgV29ya1F1ZXVlOjp3b3Jr
VGhyZWFkQ2FsbGJhY2sodm9pZCogY29udGV4dCkKK3sKKyAgICBBU1NFUlRfQVJHKGNvbnRleHQs
IGNvbnRleHQpOworCisgICAgV29ya1F1ZXVlKiBxdWV1ZSA9IHN0YXRpY19jYXN0PFdvcmtRdWV1
ZSo+KGNvbnRleHQpOworCisgICAgaWYgKCFxdWV1ZS0+dHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBxdWV1ZS0+cGVyZm9ybVdvcmtPblJlZ2lzdGVy
ZWRXb3JrVGhyZWFkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV29ya1F1ZXVlOjpwZXJm
b3JtV29ya09uUmVnaXN0ZXJlZFdvcmtUaHJlYWQoKQoreworICAgIEFTU0VSVChtX2lzV29ya1Ro
cmVhZFJlZ2lzdGVyZWQpOworCisgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKKworICAgIG1fd29y
a0l0ZW1RdWV1ZUxvY2subG9jaygpOworCisgICAgd2hpbGUgKGlzVmFsaWQgJiYgIW1fd29ya0l0
ZW1RdWV1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxXb3JrSXRlbVdpbj4g
PiB3b3JrSXRlbVF1ZXVlOworICAgICAgICBtX3dvcmtJdGVtUXVldWUuc3dhcCh3b3JrSXRlbVF1
ZXVlKTsKKworICAgICAgICAvLyBBbGxvdyBtb3JlIHdvcmsgdG8gYmUgc2NoZWR1bGVkIHdoaWxl
IHdlJ3JlIG5vdCB1c2luZyB0aGUgcXVldWUgZGlyZWN0bHkuCisgICAgICAgIG1fd29ya0l0ZW1R
dWV1ZUxvY2sudW5sb2NrKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd29ya0l0
ZW1RdWV1ZS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
aXNWYWxpZE11dGV4KTsKKyAgICAgICAgICAgIGlzVmFsaWQgPSBtX2lzVmFsaWQ7CisgICAgICAg
ICAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB3
b3JrSXRlbVF1ZXVlW2ldLT5mdW5jdGlvbigpKCk7CisgICAgICAgIH0KKyAgICAgICAgbV93b3Jr
SXRlbVF1ZXVlTG9jay5sb2NrKCk7CisgICAgfQorCisgICAgLy8gT25lIGludmFyaWFudCB3ZSBt
YWludGFpbiBpcyB0aGF0IGFueSB3b3JrIHNjaGVkdWxlZCB3aGlsZSBhIHdvcmsgdGhyZWFkIGlz
IHJlZ2lzdGVyZWQgd2lsbAorICAgIC8vIGJlIGhhbmRsZWQgYnkgdGhhdCB3b3JrIHRocmVhZC4g
VW5yZWdpc3RlciBhcyB0aGUgd29yayB0aHJlYWQgd2hpbGUgdGhlIHF1ZXVlIGxvY2sgaXMgc3Rp
bGwKKyAgICAvLyBoZWxkIHNvIHRoYXQgbm8gd29yayBjYW4gYmUgc2NoZWR1bGVkIHdoaWxlIHdl
J3JlIHN0aWxsIHJlZ2lzdGVyZWQuCisgICAgdW5yZWdpc3RlckFzV29ya1RocmVhZCgpOworCisg
ICAgbV93b3JrSXRlbVF1ZXVlTG9jay51bmxvY2soKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnBs
YXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIG1faXNXb3JrVGhyZWFk
UmVnaXN0ZXJlZCA9IDA7CisgICAgbV90aW1lclF1ZXVlID0gOjpDcmVhdGVUaW1lclF1ZXVlKCk7
CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3RpbWVyUXVldWUsICI6OkNyZWF0ZVRpbWVyUXVl
dWUgZmFpbGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7Cit9CisKK2Jvb2wg
V29ya1F1ZXVlOjp0cnlSZWdpc3RlckFzV29ya1RocmVhZCgpCit7CisgICAgTE9ORyByZXN1bHQg
PSA6OkludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKCZtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQs
IDEsIDApOworICAgIEFTU0VSVCghcmVzdWx0IHx8IHJlc3VsdCA9PSAxKTsKKyAgICByZXR1cm4g
IXJlc3VsdDsKK30KKwordm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJBc1dvcmtUaHJlYWQoKQor
eworICAgIExPTkcgcmVzdWx0ID0gOjpJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSgmbV9pc1dv
cmtUaHJlYWRSZWdpc3RlcmVkLCAwLCAxKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVz
dWx0ID09IDEpOworfQorCit2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sK
KyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX2hhbmRsZXNMb2Nr
KTsKKyAgICBBU1NFUlQobV9oYW5kbGVzLmlzRW1wdHkoKSk7CisjZW5kaWYKKworICAgIC8vIEZJ
WE1FOiBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGFueSB0aW1lci1xdWV1ZSB0aW1lcnMgdGhhdCBm
aXJlIGFmdGVyIHRoaXMgcG9pbnQgZG9uJ3QgdHJ5IHRvCisgICAgLy8gYWNjZXNzIHRoaXMgV29y
a1F1ZXVlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzQ0NjkwPi4KKyAgICA6OkRlbGV0ZVRpbWVyUXVl
dWVFeChtX3RpbWVyUXVldWUsIDApOworfQorCit2b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2goY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fd29ya0l0ZW1RdWV1ZUxvY2spOworCisgICAgbV93b3JrSXRlbVF1ZXVlLmFwcGVuZChXb3Jr
SXRlbVdpbjo6Y3JlYXRlKGZ1bmN0aW9uLCB0aGlzKSk7CisKKyAgICAvLyBTcGF3biBhIHdvcmsg
dGhyZWFkIHRvIHBlcmZvcm0gdGhlIHdvcmsgd2UganVzdCBhZGRlZC4gQXMgYW4gb3B0aW1pemF0
aW9uLCB3ZSBhdm9pZAorICAgIC8vIHNwYXduaW5nIHRoZSB0aHJlYWQgaWYgYSB3b3JrIHRocmVh
ZCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuIFRoaXMgcHJldmVudHMgbXVsdGlwbGUgd29yaworICAg
IC8vIHRocmVhZHMgZnJvbSBiZWluZyBzcGF3bmVkIGluIG1vc3QgY2FzZXMuIChOb3RlIHRoYXQg
d2hlbiBhIHdvcmsgdGhyZWFkIGhhcyBiZWVuIHNwYXduZWQgYnV0CisgICAgLy8gaGFzbid0IHJl
Z2lzdGVyZWQgaXRzZWxmIHlldCwgbV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkIHdpbGwgYmUgZmFs
c2UgYW5kIHdlJ2xsIGVuZCB1cAorICAgIC8vIHNwYXduaW5nIGEgc2Vjb25kIHdvcmsgdGhyZWFk
IGhlcmUuIEJ1dCB3b3JrIHRocmVhZCByZWdpc3RyYXRpb24gcHJvY2VzcyB3aWxsIGVuc3VyZSB0
aGF0CisgICAgLy8gb25seSBvbmUgdGhyZWFkIGFjdHVhbGx5IGVuZHMgdXAgcGVyZm9ybWluZyB3
b3JrLikKKyAgICBpZiAoIW1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCkKKyAgICAgICAgOjpRdWV1
ZVVzZXJXb3JrSXRlbSh3b3JrVGhyZWFkQ2FsbGJhY2ssIHRoaXMsIFdUX0VYRUNVVEVERUZBVUxU
KTsKK30KKworc3RydWN0IFRpbWVyQ29udGV4dCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxUaW1lckNvbnRleHQ+IHsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaW1lckNvbnRleHQ+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaW1lckNvbnRleHQpOyB9CisKKyAgICBXb3Jr
UXVldWUqIHF1ZXVlOworICAgIEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb247CisgICAgTXV0ZXgg
dGltZXJNdXRleDsKKyAgICBIQU5ETEUgdGltZXI7CisKK3ByaXZhdGU6CisgICAgVGltZXJDb250
ZXh0KCkgOiBxdWV1ZSgwKSwgdGltZXIoMCkgeyB9Cit9OworCit2b2lkIFdvcmtRdWV1ZTo6dGlt
ZXJDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpCit7Cisg
ICAgQVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKKyAgICBBU1NFUlRfVU5VU0VEKHRpbWVy
T3JXYWl0RmlyZWQsIHRpbWVyT3JXYWl0RmlyZWQpOworCisgICAgLy8gQmFsYW5jZWQgYnkgbGVh
a1JlZiBpbiBzY2hlZHVsZVdvcmtBZnRlckRlbGF5LgorICAgIFJlZlB0cjxUaW1lckNvbnRleHQ+
IHRpbWVyQ29udGV4dCA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PFRpbWVyQ29udGV4dCo+KGNvbnRl
eHQpKTsKKworICAgIHRpbWVyQ29udGV4dC0+cXVldWUtPmRpc3BhdGNoKHRpbWVyQ29udGV4dC0+
ZnVuY3Rpb24pOworCisgICAgTXV0ZXhMb2NrZXIgbG9jayh0aW1lckNvbnRleHQtPnRpbWVyTXV0
ZXgpOworICAgIEFTU0VSVCh0aW1lckNvbnRleHQtPnRpbWVyKTsKKyAgICBBU1NFUlQodGltZXJD
b250ZXh0LT5xdWV1ZS0+bV90aW1lclF1ZXVlKTsKKyAgICBpZiAoITo6RGVsZXRlVGltZXJRdWV1
ZVRpbWVyKHRpbWVyQ29udGV4dC0+cXVldWUtPm1fdGltZXJRdWV1ZSwgdGltZXJDb250ZXh0LT50
aW1lciwgMCkpCisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZmFsc2UsICI6OkRlbGV0ZVRp
bWVyUXVldWVUaW1lciBmYWlsZWQgd2l0aCBlcnJvciAlbHUiLCA6OkdldExhc3RFcnJvcigpKTsK
K30KKwordm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoQWZ0ZXJEZWxheShjb25zdCBGdW5jdGlvbjx2
b2lkKCk+JiBmdW5jdGlvbiwgZG91YmxlIGRlbGF5KQoreworICAgIEFTU0VSVChtX3RpbWVyUXVl
dWUpOworCisgICAgUmVmUHRyPFRpbWVyQ29udGV4dD4gY29udGV4dCA9IFRpbWVyQ29udGV4dDo6
Y3JlYXRlKCk7CisgICAgY29udGV4dC0+cXVldWUgPSB0aGlzOworICAgIGNvbnRleHQtPmZ1bmN0
aW9uID0gZnVuY3Rpb247CisKKyAgICB7CisgICAgICAgIC8vIFRoZSB0aW1lciBjYWxsYmFjayBj
b3VsZCBmaXJlIGJlZm9yZSA6OkNyZWF0ZVRpbWVyUXVldWVUaW1lciBldmVuIHJldHVybnMsIHNv
IHdlIHByb3RlY3QKKyAgICAgICAgLy8gY29udGV4dC0+dGltZXIgd2l0aCBhIG11dGV4IHRvIGVu
c3VyZSB0aGUgdGltZXIgY2FsbGJhY2sgZG9lc24ndCBhY2Nlc3MgaXQgYmVmb3JlIHRoZQorICAg
ICAgICAvLyB0aW1lciBoYW5kbGUgaGFzIGJlZW4gc3RvcmVkIGluIGl0LgorICAgICAgICBNdXRl
eExvY2tlciBsb2NrKGNvbnRleHQtPnRpbWVyTXV0ZXgpOworCisgICAgICAgIC8vIFNpbmNlIG91
ciB0aW1lciBjYWxsYmFjayBpcyBxdWljaywgd2UgY2FuIGV4ZWN1dGUgaW4gdGhlIHRpbWVyIHRo
cmVhZCBpdHNlbGYgYW5kIGF2b2lkCisgICAgICAgIC8vIGFuIGV4dHJhIHRocmVhZCBzd2l0Y2gg
b3ZlciB0byBhIHdvcmtlciB0aHJlYWQuCisgICAgICAgIGlmICghOjpDcmVhdGVUaW1lclF1ZXVl
VGltZXIoJmNvbnRleHQtPnRpbWVyLCBtX3RpbWVyUXVldWUsIHRpbWVyQ2FsbGJhY2ssIGNvbnRl
eHQuZ2V0KCksIGRlbGF5ICogMTAwMCwgMCwgV1RfRVhFQ1VURUlOVElNRVJUSFJFQUQpKSB7Cisg
ICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZhbHNlLCAiOjpDcmVhdGVUaW1lclF1ZXVl
VGltZXIgZmFpbGVkIHdpdGggZXJyb3IgJWx1IiwgOjpHZXRMYXN0RXJyb3IoKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGUgdGltZXIgY2FsbGJh
Y2sgd2lsbCBoYW5kbGUgZGVzdHJveWluZyBjb250ZXh0LgorICAgIGNvbnRleHQucmVsZWFzZSgp
LmxlYWtSZWYoKTsKK30KKwordm9pZCBXb3JrUXVldWU6OnVucmVnaXN0ZXJXYWl0QW5kRGVzdHJv
eUl0ZW1Tb29uKFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW0pCit7CisgICAgLy8gV2Un
cmUgZ29pbmcgdG8gbWFrZSBhIGJsb2NraW5nIGNhbGwgdG8gOjpVbnJlZ2lzdGVyV2FpdEV4IGJl
Zm9yZSBjbG9zaW5nIHRoZSBoYW5kbGUuIChUaGUKKyAgICAvLyBibG9ja2luZyB2ZXJzaW9uIG9m
IDo6VW5yZWdpc3RlcldhaXRFeCBpcyBtdWNoIHNpbXBsZXIgdGhhbiB0aGUgbm9uLWJsb2NraW5n
IHZlcnNpb24uKSBJZiB3ZQorICAgIC8vIGRvIHRoaXMgb24gdGhlIGN1cnJlbnQgdGhyZWFkLCB3
ZSdsbCBkZWFkbG9jayBpZiB3ZSdyZSBjdXJyZW50bHkgaW4gYSBjYWxsYmFjayBmdW5jdGlvbiBm
b3IKKyAgICAvLyB0aGUgd2FpdCB3ZSdyZSB1bnJlZ2lzdGVyaW5nLiBTbyBpbnN0ZWFkIHdlIGRv
IGl0IGFzeW5jaHJvbm91c2x5IG9uIHNvbWUgb3RoZXIgd29ya2VyIHRocmVhZC4KKworICAgIDo6
UXVldWVVc2VyV29ya0l0ZW0odW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbUNhbGxiYWNrLCBp
dGVtLmxlYWtSZWYoKSwgV1RfRVhFQ1VURURFRkFVTFQpOworfQorCitEV09SRCBXSU5BUEkgV29y
a1F1ZXVlOjp1bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtQ2FsbGJhY2sodm9pZCogY29udGV4
dCkKK3sKKyAgICBBU1NFUlRfQVJHKGNvbnRleHQsIGNvbnRleHQpOworICAgIFJlZlB0cjxIYW5k
bGVXb3JrSXRlbT4gaXRlbSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PEhhbmRsZVdvcmtJdGVtKj4o
Y29udGV4dCkpOworCisgICAgLy8gTm93IHRoYXQgd2Uga25vdyB3ZSdyZSBub3QgaW4gYSBjYWxs
YmFjayBmdW5jdGlvbiBmb3IgdGhlIHdhaXQgd2UncmUgdW5yZWdpc3RlcmluZywgd2UgY2FuCisg
ICAgLy8gbWFrZSBhIGJsb2NraW5nIGNhbGwgdG8gOjpVbnJlZ2lzdGVyV2FpdEV4LgorICAgIGlm
ICghOjpVbnJlZ2lzdGVyV2FpdEV4KGl0ZW0tPndhaXRIYW5kbGUoKSwgSU5WQUxJRF9IQU5ETEVf
VkFMVUUpKSB7CisgICAgICAgIERXT1JEIGVycm9yID0gOjpHZXRMYXN0RXJyb3IoKTsKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CmluZGV4IDk1MzY3NjYuLjBiMGU0MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CkBAIC0xMjAyLDExICsxMjAyLDE0IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlRGVjb2RlV29ya2VyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlT3JpZW50YXRpb24uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhU
cmF2ZXJzYWxTdGF0ZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1BhcmFsbGVsSW1hZ2VEZWNvZGVyLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1JldGFpbmVkTW9kZUJpdG1hcEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1JlZ2lvbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5
MTUxMDY1Li4wMDFmMWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQ2IEBACisyMDEyLTA3LTE3
ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIE1h
a2UgQ1NTIGJveCBtb2RlbCBiYWNrZ3JvdW5kLCBib3JkZXIgYW5kIG1hc2sgYmUgZGVjb2RlZCBi
eSBwYXJhbGxlbCBpbWFnZSBkZWNvZGVycy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTkxMjAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIHR3byBjaGFuZ2VzLgorCisgICAgICAgIDEuIE1h
a2UgUmVuZGVyQm94TW9kZWxPYmplY3QgdXNlIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlIGlmIHRo
ZSBpbWFnZSBpcworICAgICAgICBhbiBpbnN0YW5jZSBvZiBCaXRtYXBJbWFnZS4KKworICAgICAg
ICAyLiBPcmlnaW5hbGx5LCB0aGUgcmVuZGVyZXIgY2hlY2tlZCBpZiBhIENTUyBpbWFnZSB3YXMg
bG9hZGVkIGluIG9yZGVyIHRvCisgICAgICAgIHJlbmRlciB0aGUgZW50aXJlIGltYWdlLiBXaXRo
IHBhcmFsbGVsIGltYWdlIGRlY29kZXJzLCBsb2FkaW5nIGRvbmUgZG9lcyBub3QgYWx3YXlzCisg
ICAgICAgIG1lYW4gdGhlIHdob2xlIGltYWdlIGNhbiBiZSByZW5kZXJlZC4gTm93IGlmIHRoZSBn
aXZlbiBpbWFnZSBpcyBhIEJpdG1hcEltYWdlLAorICAgICAgICB3ZSBuZWVkIHRvIGNoZWNrIGlm
IGRlY29kaW5nIGlzIGNvbXBsZXRlZCBpbiBhZGRpdGlvbiB0byBsb2FkaW5nIGRvbmUuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
ICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
Rmxvd0JveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVG
bG93Qm94OjpwYWludE1hc2spOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpkZXRlcm1pbmVCYWNrZ3JvdW5kQmxlZWRBdm9p
ZGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYWludE1hc2tJbWFnZXMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnROaW5lUGllY2VJbWFn
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y2FuUmVuZGVyRW50aXJlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjYW5SZW5kZXJFbnRpcmVCb3Jk
ZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om11c3RSZXBhaW50QmFj
a2dyb3VuZE9yQm9yZGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6Cisg
ICAgICAgIChSZW5kZXJPYmplY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9GaWxsTGF5
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsbExheWVyOjpjYW5SZW5kZXJFbnRpcmVJbWFn
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChGaWxsTGF5ZXIpOgorCisyMDEyLTA3LTE3ICBIdWFuZyBEb25nc3Vu
ZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIEFkZCBwYXJhbGxlbCBpbWFn
ZSBkZWNvZGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTA5MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBdXRob3JlZCBieSBIdWFuZyBEb25nc3VuZyBhbmQgS3dhbmcgWXVsIFNlby4KKworICAgICAg
ICBNYWtlIGltYWdlIGRlY29kaW5nIG9mZiB0aGUgbWFpbiB0aHJlYWQsIHNvIHRoYXQgdGhlIG1h
aW4gdGhyZWFkIGNhbiBzcGVuZCBtb3JlCisgICAgICAgIHRpbWUgaW4gbG9hZGluZywgcGFyc2lu
Zywgc2NyaXB0aW5nIGFuZCBsYXlvdXQgd2hpbGUgaW1hZ2UgZGVjb2RpbmcgdGhyZWFkcyBkZWNv
ZGUKKyAgICAgICAgaW1hZ2VzIGluIHRoZSBiYWNrZ3JvdW5kLgorCisgICAgICAgIFJlZmVyIHRv
IGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L3B1Yj9pZD0xMmdmN01oTkhmdXBlUjNH
ZFJGLWgyVnpnODZ2aUNid1hxOF9KQnlIS2xnMAorICAgICAgICBmb3IgZGV0YWlsZWQgZXhwbGFu
YXRpb24uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3Rz
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlz
dC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcElt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6cmV0YWluZWRNb2RlUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRpZFJlY2VpdmVGcmFtZUF0SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmN1cnJlbnRGcmFtZUlzQ29tcGxldGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChCaXRt
YXBJbWFnZSk6IEJpdG1hcEltYWdlIG5vdyBpbXBsZW1lbnRzIEltYWdlU291cmNlT2JzZXJ2ZXIg
YW5kIHBhc3NlcyBpdHNlbGYKKyAgICAgICAgdG8gSW1hZ2VTb3VyY2Ugb24gY29uc3RydWN0aW9u
LiBXaGVuIGltYWdlIGRlY29kaW5nIGlzIGZpbmlzaGVkIG9yIGEgY2FjaGVkIGltYWdlCisgICAg
ICAgIGlzIGF2YWlsYWJsZSwgSW1hZ2VTb3VyY2Ugbm90aWZpZXMgQml0bWFwSW1hZ2UgdmlhCisg
ICAgICAgIEltYWdlU291cmNlT2JzZXJ2ZXI6OmRpZFJlY2VpdmVJbWFnZUZyYW1lRGF0YShzaXpl
X3QsIGNvbnN0IEltYWdlRnJhbWVEYXRhJikuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVNvdXJjZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppc1NpemVBdmFpbGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OnJlcGV0aXRpb25Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVD
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6cmVxdWVzdEZyYW1lQXRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2hvdWxkRGVjb2RlUGFyYWxsZWwp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZpcnN0RnJhbWVJc0NvbXBsZXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpwYXJhbGxlbERlY29kZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZGlkRGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpjcmVhdGVQYXJhbGxlbERlY29kZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6Y2xlYXJQYXJhbGxlbERlY29kZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OnNlcmlhbERlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChJbWFnZVNvdXJjZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2VPYnNlcnZlci5oOgorICAg
ICAgICAoSW1hZ2VTb3VyY2VPYnNlcnZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
UGFyYWxsZWxJbWFnZURlY29kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOiBPbmNl
IFJldGFpbmVkTW9kZUJpdG1hcEltYWdlIGFuZCBJbWFnZVNvdXJjZSBkZWNpZGUgaXQgaXMgb2th
eSB0byB1c2UKKyAgICAgICAgcGFyYWxsZWwgaW1hZ2UgZGVjb2RlcnMsIHRoaXMgY2xhc3MgaW50
ZXJjZXB0cyBkZWNvZGluZyByZXF1ZXN0cyBmcm9tIEltYWdlU291cmNlCisgICAgICAgIGFuZCBw
ZXJmb3JtcyBpbWFnZSBkZWNvZGluZyBvbiB0aGUgZGVjb2RlciB0aHJlYWQuIEluc3RlYWQgb2Yg
cmVpbXBsZW1lbnRpbmcgYWxsCisgICAgICAgIHRoZSBkZWNvZGVycyBmcm9tIHNjcmF0Y2gsIGl0
IHJldXNlcyB0aGUgZXhpc3RpbmcgaW1hZ2UgZGVjb2RlcnMuCisgICAgICAgIChXZWJDb3JlOjpQ
YXJhbGxlbEltYWdlRGVjb2Rlcjo6UGFyYWxsZWxJbWFnZURlY29kZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFyYWxsZWxJbWFnZURlY29kZXI6On5QYXJhbGxlbEltYWdlRGVjb2Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpQYXJhbGxlbEltYWdlRGVjb2Rlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpQYXJhbGxlbEltYWdlRGVjb2Rlcjo6aW52YWxpZGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXJhbGxlbEltYWdlRGVjb2Rlcjo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXJhbGxlbEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhcmFs
bGVsSW1hZ2VEZWNvZGVyOjpleHRyYWN0U2VnbWVudEZvclRhc2spOgorICAgICAgICAoUGFyYWxs
ZWxGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UGFyYWxsZWxGcmFtZURhdGE6OlBhcmFs
bGVsRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBhcmFsbGVsRnJhbWVEYXRhOjp+UGFy
YWxsZWxGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UGFyYWxsZWxJbWFnZURlY29kZXI6
OmRlY29kZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6ZGlkRGVjb2RlVGFza0NhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUltYWdlRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhcmFsbGVsSW1hZ2VEZWNvZGVyOjpkaWREZWNvZGVUYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhcmFsbGVsSW1hZ2VEZWNvZGVyOjpkaWREZWNvZGVQYXJ0aWFsKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhcmFsbGVsSW1hZ2VEZWNvZGVyOjphcHBlbmREZWNvZGVkRGF0YVRvSW1hZ2VGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXJhbGxlbEltYWdlRGVjb2Rlcjo6c3luY0ltYWdlRnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6UGFyYWxsZWxJbWFnZURlY29kZXI6OmRpZERlY29kZUNv
bXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rl
ci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUGFyYWxsZWxJbWFnZURl
Y29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFyYWxsZWxJbWFnZURlY29kZXI6OmZpbGVuYW1l
RXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBhcmFsbGVsSW1hZ2VEZWNvZGVyOjpzaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhcmFsbGVsSW1hZ2VEZWNvZGVyOjp2YWxpZCk6CisgICAg
ICAgIChFbmNvZGVkRGF0YVNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGFyYWxsZWxJbWFn
ZURlY29kZXI6OkVuY29kZWREYXRhU2VnbWVudDo6RW5jb2RlZERhdGFTZWdtZW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlT2Jz
ZXJ2ZXIuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUGFyYWxsZWxJbWFnZURlY29k
ZXJPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpQYXJhbGxlbEltYWdlRGVjb2Rlck9ic2Vy
dmVyOjp+UGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOiBCZWNhdXNlIGltYWdlIGRlY29kaW5nIGlzIHVzZWQgaW4gdmFyaW91cyBjb250ZXh0
cyBpbiBXZWJLaXQsIGl0IGlzIHNpbXBseQorICAgICAgICBpbXBvc3NpYmxlIHRvIG1ha2UgYWxs
IHBhcmFsbGVsIGRlY29kaW5nIHBhcmFsbGVsLiBJbnN0ZWFkLCB3ZSBzZWxlY3RpdmVseSB1c2Ug
cGFyYWxsZWwKKyAgICAgICAgaW1hZ2UgZGVjb2RlcnMgd2hlcmUgcG9zc2libGUgYW5kIHVzZSB0
aGUgZXhpc3Rpbmcgc2VxdWVudGlhbCBpbWFnZSBkZWNvZGVycyBvdGhlcndpc2UuCisgICAgICAg
IFJldGFpbmVkTW9kZUJpdG1hcEltYWdlIHdyYXBzIGEgQml0bWFwSW1hZ2UgYW5kIGhlbHBzIGRl
Y2lkZSB3aGVuIGl0IGlzIHNhZmUgYW5kIGJlbmVmaWNpYWwKKyAgICAgICAgdG8gdXNlIHBhcmFs
bGVsIGltYWdlIGRlY29kZXJzLgorICAgICAgICAoV2ViQ29yZTo6UmV0YWluZWRNb2RlQml0bWFw
SW1hZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXRhaW5lZE1vZGVCaXRtYXBJbWFn
ZTo6UmV0YWluZWRNb2RlQml0bWFwSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmV0YWluZWRN
b2RlQml0bWFwSW1hZ2U6Omhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OlJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
dGFpbmVkTW9kZUJpdG1hcEltYWdlOjpnZXRIb3RTcG90KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
dGFpbmVkTW9kZUJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6ZGVjb2RlZFNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OnN0YXJ0QW5pbWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpzdG9wQW5pbWF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpyZXNldEFuaW1h
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmV0YWluZWRNb2RlQml0
bWFwSW1hZ2U6OmN1cnJlbnRGcmFtZUhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlJldGFp
bmVkTW9kZUJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVJc0NvbXBsZXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6
OlJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjptYXlGaWxsV2l0aFNvbGlkQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6UmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OnNvbGlkQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6UmV0YWluZWRNb2RlU2F2ZXI6OlJldGFpbmVkTW9kZVNhdmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJldGFpbmVkTW9kZVNhdmVyOjp+UmV0YWluZWRNb2RlU2F2ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6dG9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjp0b1JldGFpbmVkTW9kZUJpdG1hcEltYWdlSWZQb3NzaWJsZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFJldGFpbmVkTW9kZUJpdG1hcEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjp+UmV0YWluZWRNb2RlQml0bWFwSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OnJldGFpbmVk
TW9kZVJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZXRhaW5lZE1vZGVCaXRtYXBJbWFn
ZTo6YmVnaW5SZXRhaW5lZE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmV0YWluZWRNb2RlQml0
bWFwSW1hZ2U6OmVuZFJldGFpbmVkTW9kZSk6CisgICAgICAgIChSZXRhaW5lZE1vZGVTYXZlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VTb3VyY2VDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6cmVxdWVzdEZy
YW1lQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0ltYWdlT3Bl
blZHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3d4L0ltYWdlV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1h
cEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6SW1hZ2VGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpzZXRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omxhc3REZWNvZGVkUm93KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldExhc3REZWNvZGVkUm93KToKKyAgICAg
ICAgKEltYWdlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpkYXRhKToK
KyAgICAgICAgKEltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6
OmZpcnN0SW1hZ2VGcmFtZVdpdGhvdXREZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdl
RGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VS
ZWFkZXI6OmRlY29kZUJNUCk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6cHJv
Y2Vzc1JMRURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NO
b25STEVEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1h
Z2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aGF2ZURl
Y29kZWRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRT
Y2FubGluZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFn
ZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFp
bGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNv
ZGVyU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OmJhY2tncm91bmRJc09ic2N1cmVkKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlSW1hZ2VDb250ZW50cyk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJ
bWFnZTo6cGFpbnQpOgorCisyMDEyLTA3LTE3ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNv
bXBhbnkxMDAubmV0PgorCisgICAgICAgIFJlZmFjdG9yaW5nIG1ldGFkYXRhIG9mIEJpdG1hcElt
YWdlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA3
NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGVy
ZSBpcyBubyBwcmVjaXNlIGRlZmluaXRpb24gb2YgRnJhbWVEYXRhJ3MgbWV0YWRhdGEuIFNvIEkg
YXNzdW1lIHRoZSBtZXRhZGF0YQorICAgICAgICBhcyBhIGNvbWJpbmF0aW9uIG9mIG1fb3JpZW50
YXRpb24sIG1fZHVyYXRpb24sIGFuZCBtX2hhc0FscGhhLiBUaGlzIGRlZmluaXRpb24KKyAgICAg
ICAgd29ya3MgZmluZSBiZWNhdXNlIGN1cnJlbnRseSB0aGVyZSBpcyBubyBtZXRob2QgdGhhdCB1
c2VzIG1faGF2ZU1ldGFkYXRhIG9uIGl0cworICAgICAgICBwdXJwb3NlLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggY29udGFpbnMgdGhyZWUgY2hhbmdlczoKKworICAgICAgICAxLiBSZW1vdmUgRnJh
bWVEYXRhOjptX2hhdmVNZXRhZGF0YSBmb3IgcmVhZGFiaWxpdHkuCisgICAgICAgIE9ubHkgQml0
bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkIHVzZXMgbV9oYXZlTWV0YWRhdGEgaW4gb3JkZXIgdG8gY2hl
Y2sgd2hldGhlciB0aGUKKyAgICAgICAgZnJhbWUgaXMgY2xlYXJlZCBvciBub3QsIGFuZCBpdCBp
cyBlbm91Z2ggdG8gY2hlY2sgd2hldGhlciBGcmFtZURhdGE6Om1fZnJhbWUgaXMKKyAgICAgICAg
MC4KKworICAgICAgICAyLiBEb24ndCBkZWNvZGUgYWdhaW4gaWYgbWV0YWRhdGEgZXhpc3QuCisg
ICAgICAgIElmIHRoZSBpbmRleGVkIGZyYW1lIHdhcyBvbmNlIGRlY29kZWQgY29tcGxldGVseSBh
bmQgY2xlYXJlZCBieQorICAgICAgICBkZXN0cm95RGVjb2RlZERhdGEoKSwgV2UgZG9uJ3QgbmVl
ZCB0byBkZWNvZGUgYWdhaW4gaW4gb3JkZXIgdG8ga25vdyBtZXRhZGF0YQorICAgICAgICBiZWNh
dXNlIGRlc3Ryb3lEZWNvZGVkRGF0YSgpIGRvZXMgbm90IHJlc2V0IHRoZSBtZXRhZGF0YS4gU2Vl
CisgICAgICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgpLgorCisgICAgICAgIDMuIFNldCBtX2lzQ29t
cGxldGUgdG8gdHJ1ZSBpbiBCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciwgSW1hZ2VPYnNlcnZl
ciopLgorICAgICAgICBUaGlzIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBCaXRtYXBJbWFnZSBmcm9t
IGEgcGxhdGZvcm0gc3BlY2lmaWMgTmF0aXZlSW1hZ2VQdHIuCisgICAgICAgIEl0IHNldHMgbV9m
cmFtZSBvZiB0aGUgZmlyc3QgZnJhbWUgdG8gdGhlIGdpdmVuIE5hdGl2ZUltYWdlUHRyLgorICAg
ICAgICBUaGUgQml0bWFwSW1hZ2UgY3JlYXRlZCBkb2VzIG5vdCBuZWVkIGRlY29kaW5nIGJlY2F1
c2UgZGVjb2RpbmcgaXMgYWxyZWFkeSBkb25lLgorICAgICAgICBTbywgaXQgaXMgcHJvcGVyIHRv
IHNldCBtX2lzQ29tcGxldGUgdG8gdHJ1ZS4gQ3VycmVudGx5LCBvbmx5IE9wZW5WRworICAgICAg
ICBwb3J0IHNldHMgbV9pc0NvbXBsZXRlIHRvIHRydWUuCisKKyAgICAgICAgVGhlIHRoaXJkIGNo
YW5nZSBpcyBuZWVkZWQgZm9yIHBhcmFsbGVsIGltYWdlIGRlY29kZXJzLiBDdXJyZW50bHksCisg
ICAgICAgIEJpdG1hcEltYWdlIGNoZWNrcyBvbmx5IG1fZnJhbWUgaW4gb3JkZXIgdG8gZGV0ZXJt
aW5lIHdoZXRoZXIgZGVjb2RpbmcKKyAgICAgICAgaXMgbmVlZGVkIG9yIG5vdC4gQnV0IGFmdGVy
IHBhcmFsbGVsIGltYWdlIGRlY29kZXJzIGFyZSBsYW5kZWQsCisgICAgICAgIEJpdG1hcEltYWdl
IGFsc28gbmVlZHMgdG8gY2hlY2sgbV9pc0NvbXBsZXRlLiBJZiBtX2lzQ29tcGxldGUgaXMgZmFs
c2UsCisgICAgICAgIEJpdG1hcEltYWdlIHdpbGwgdHJ5IHRvIGRlY29kZSBhZ2FpbiwgYW5kIGl0
IGNhbid0IGFjdHVhbGx5IGRlY29kZQorICAgICAgICBiZWNhdXNlIHRoZSBCaXRtYXBJbWFnZSBj
cmVhdGVkIGZyb20gYSBOYXRpdmVJbWFnZVB0ciBkb2VzIG5vdCBoYXZlCisgICAgICAgIGVuY29k
ZWQgZGF0YS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlaGF2aW9yIGlzIHVuY2hhbmdlZC4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpmcmFtZU9yaWVudGF0aW9uQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6RnJhbWVE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6c2V0RnJvbUltYWdlRnJhbWVEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAgICAoRnJhbWVE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKToKKyAgICAgICAgKEltYWdlRnJhbWVEYXRhKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyRnJhbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhckZy
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVudmcvSW1hZ2VPcGVuVkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVEYXRhOjpjbGVhckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpC
aXRtYXBJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ltYWdlU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNs
ZWFyRnJhbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlV2luQ0Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhckZyYW1lKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lRGF0YTo6Y2xlYXJGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0
bWFwSW1hZ2UpOgorCisyMDEyLTA3LTE3ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBh
bnkxMDAubmV0PgorCisgICAgICAgIFByZXBhcmUgZm9yIHBhcmFsbGVsIGltYWdlIGRlY29kZXIu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDQ0Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBrZXkg
cG9pbnQgb2YgdGhpcyBwYXRjaCBpcyB0byBjaGFuZ2UgaG93IEJpdG1hcEltYWdlIHVzZXMgSW1h
Z2VTb3VyY2UuCisKKyAgICAgICAgT3JpZ2luYWxseSwgQml0bWFwSW1hZ2UgcmV0cmlldmVzIHRo
ZSBmcmFtZSBkYXRhIGZyb20gSW1hZ2VTb3VyY2UgYnkgY2FsbGluZyB0aGUKKyAgICAgICAgZm9s
bG93aW5nIG1ldGhvZHM6CisgICAgICAgIC0gTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVBdElu
ZGV4KHNpemVfdCk7CisgICAgICAgIC0gZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90
KTsKKyAgICAgICAgLSBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCk7CisgICAgICAg
IC0gYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCk7CisgICAgICAgIC0gSW1hZ2VP
cmllbnRhdGlvbiBvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90KSBjb25zdDsKKworICAgICAgICBV
cG9uIGVhY2ggbWV0aG9kIGNhbGwsIEltYWdlU291cmNlIHN5bmNocm9ub3VzbHkgZGVjb2RlcyB0
aGUgaW1hZ2UgYW5kIHJldHVybnMKKyAgICAgICAgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbi4g
QmVjYXVzZSBhbGwgdGhlIG1ldGhvZHMgYWJvdmUgYXJlIGluaGVyZW50bHkKKyAgICAgICAgc3lu
Y2hyb25vdXMsIGl0IGlzIG5vdCBlYXN5IHRvIG1ha2UgdGhlbSBwYXJhbGxlbC4KKworICAgICAg
ICBUbyBpbXBsZW1lbnQgcGFyYWxsZWwgaW1hZ2UgZGVjb2RlcnMsIHRoZXNlIG1ldGhvZHMgbXVz
dCBiZSBhc3luY2hyb25vdXMuIFNvIEkKKyAgICAgICAgbWVyZ2VkIGFsbCB0aGVzZSBtZXRob2Rz
IGludG8gYSBzaW5nbGUgbWV0aG9kLCByZXF1ZXN0RnJhbWVBdEluZGV4KHNpemVfdCksCisgICAg
ICAgIHdoaWNoIHJlcXVlc3RzIGFsbCB0aGUgZnJhbWUgZGF0YSBhdCBvbmNlLiBOb3RlIHRoYXQg
dGhpcyBtZXRob2QgaGFzIG5vIHJldHVybgorICAgICAgICB2YWx1ZS4KKworICAgICAgICBJbnN0
ZWFkLCBCaXRtYXBJbWFnZSBub3cgaW1wbGVtZW50cyBJbWFnZVNvdXJjZU9ic2VydmVyIGFuZCBw
YXNzZXMgaXRzZWxmIHRvCisgICAgICAgIEltYWdlU291cmNlIGNvbnN0cnVjdG9yLiBPbmNlIGlt
YWdlIGRlY29kaW5nIGlzIGZpbmlzaGVkIG9yIGNhY2hlZCBpbWFnZSBpcworICAgICAgICBhdmFp
bGFibGUsIEltYWdlU291cmNlIG5vdGlmaWVzIEJpdG1hcEltYWdlIHZpYQorICAgICAgICBJbWFn
ZVNvdXJjZU9ic2VydmVyOjpkaWRSZWNlaXZlSW1hZ2VGcmFtZURhdGEoc2l6ZV90LCBjb25zdCBJ
bWFnZUZyYW1lRGF0YSYpLgorICAgICAgICBJbWFnZUZyYW1lRGF0YSBjb250YWlucyBhbGwgdGhl
IGZyYW1lIGRhdGEgaW5jbHVkaW5nIGZyYW1lLCBkdXJhdGlvbiwgaXNBbHBoYSwKKyAgICAgICAg
aXNDb21wbGV0ZSBhbmQgb3JpZW50YXRpb24uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0gZXhp
c3RpbmcgaW1hZ2UgdGVzdHMgY292ZXIgdGhlc2UgY2FzZXMuCisKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Qml0bWFwSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGlk
UmVjZWl2ZUZyYW1lQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFw
SW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6c2V0RnJvbUltYWdlRnJhbWVE
YXRhKToKKyAgICAgICAgKEZyYW1lRGF0YSk6CisgICAgICAgIChCaXRtYXBJbWFnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnJlcXVlc3RGcmFtZUF0SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6Om9yaWVudGF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVNvdXJjZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdl
RnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1l
RGF0YSk6CisgICAgICAgIChJbWFnZVNvdXJjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2VPYnNlcnZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoSW1hZ2VTb3VyY2VPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZU9ic2VydmVyOjp+SW1hZ2VTb3VyY2VPYnNlcnZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0M0RDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6cmVxdWVzdEZyYW1lQXRJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvSW1hZ2VPcGVuVkcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9JbWFnZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpC
aXRtYXBJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0Nv
bnRleHQzRFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorCisyMDEyLTA3
LTExICBLd29uamluIEplb25nICA8Z3JhbUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBBZGQg
SW1hZ2VEZWNvZGVXb3JrZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTkwODY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSW1hZ2VEZWNvZGVXb3JrZXIgaXMgYSB0aHJlYWQgcG9vbCBpbXBsZW1lbnRhdGlv
biBiYXNlZCBvbiBXb3JrUXVldWUuCisgICAgICAgIEltYWdlRGVjb2RlV29ya2VyIGludGVybmFs
bHkgbWFuYWdlcyBhIHBvb2wgb2YgV29ya1F1ZXVlcyAobiA9IG51bWJlcgorICAgICAgICBvZiBj
b3JlcykgYW5kIGFzc2lnbnMgb25lIGZyb20gdGhlIHBvb2wgd2hlbiBhbiBJbWFnZURlY29kZVdv
cmtlcgorICAgICAgICBpbnN0YW5jZSBpcyBjcmVhdGVkLiBTbyB0d28gSW1hZ2VEZWNvZGVXb3Jr
ZXJzIGNhbiBzaGFyZSBvbmUgV29ya1F1ZXVlLgorCisgICAgICAgIFBhcmFsbGVsIGltYWdlIGRl
Y29kZXJzIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBJbWFnZURlY29kZVdvcmtlciBmb3IKKyAgICAg
ICAgZWFjaCBpbWFnZS4gU28gdGhlIG51bWJlciBvZiBJbWFnZURlY29kZVdvcmtlciBpbnN0YW5j
ZXMgY2FuIGJlCisgICAgICAgIGFyYml0cmFyaWx5IGxhcmdlLCBidXQgdGhlIG51bWJlciBvZiBX
b3JrUXVldWVzIGlzIGxpbWl0ZWQgdG8gdGhlCisgICAgICAgIG51bWJlciBvZiBjb3Jlcy4gVGhp
cyBlZmZlY3RpdmVseSB1dGlsaXplcyB0aGUgdW5kZXJseWluZyBjb3Jlcy4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAg
ICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2RlV29y
a2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2RlV29ya2VyOjphY3F1aXJlU2hhcmVkV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2RlV29ya2VyOjppbml0aWFsaXplV29ya1F1ZXVlUG9vbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZURlY29kZVdvcmtlcjo6cXVldWVJZFdpdGhNaW5pbXVtQWNxdWlyZUNvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlV29ya2VyOjpJbWFnZURlY29kZVdvcmtl
cik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZVdvcmtlcjo6fkltYWdlRGVjb2RlV29y
a2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlV29ya2VyOjpoYXNJbnZhbGlkYXRp
b25CZWd1bik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZVdvcmtlcjo6Y2FuY2VsYWJs
ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlV29ya2VyOjpwb3N0VGFz
ayk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZVdvcmtlcjo6aW52YWxpZGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZVdvcmtlcjo6ZW5zdXJlVGVybWluYXRlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZVdvcmtlci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW1hZ2VEZWNvZGVXb3JrZXIpOgorCiAyMDEyLTA3
LTE3ICBQaGlsaXAgUm9nZXJzICA8cGRyQGdvb2dsZS5jb20+CiAKICAgICAgICAgTW92ZSB6ZXJv
LWxlbmd0aC1zdWJwYXRocyBmcm9tIFJlbmRlclNWR1NoYXBlIHRvIFJlbmRlclNWR1BhdGgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDNlYjk0MzkuLmI1N2ViMjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMzIwOSw2ICszMjA5LDExIEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uczNELmggXAorCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhcmFsbGVsSW1hZ2VEZWNvZGVyLmNwcCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURlY29kZXIuaCBcCisJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURlY29kZXJPYnNl
cnZlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZXRhaW5lZE1vZGVC
aXRtYXBJbWFnZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JldGFp
bmVkTW9kZUJpdG1hcEltYWdlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmggXApAQCAtMzM3MiwxMSArMzM3Nywx
NCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyRGF0YS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2RlV29ya2VyLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVXb3JrZXIu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggXAorCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlT2JzZXJ2ZXIuaCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnRIYXNoLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDk3YTNkODguLjJmZTlm
ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQpAQCAtOTQwLDYgKzk0MCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
b250RmVhdHVyZVNldHRpbmdzLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5j
cHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFBvaW50M0QuY3BwIFwKQEAgLTk2MSw5ICs5NjIsMTEgQEAgU09VUkNFUyArPSBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAgXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3Bw
IFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZVdvcmtlci5jcHAgXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3Bw
IFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlci5jcHAgXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRo
VHJhdmVyc2FsU3RhdGUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcCBc
CkBAIC0yMDE2LDYgKzIwMTksNyBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9tb2NrL0dl
b2xvY2F0aW9uQ2xpZW50TW9jay5jcHAgXAogICAgIHBsYXRmb3JtL21vY2svU2Nyb2xsYmFyVGhl
bWVNb2NrLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggXAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1JldGFpbmVkTW9kZUJpdG1hcEltYWdlLmggXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVy
YXRlZEltYWdlLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVy
R2xvYmFsQ29udGV4dC5oIFwKQEAgLTIwNzcsMTIgKzIwODEsMTYgQEAgSEVBREVSUyArPSBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1R5cGVzM0QuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaCBc
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVXb3JrZXIuaCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZU9ic2VydmVy
LmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmggXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ludFBvaW50SGFzaC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0Lmgg
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmggXAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1BhcmFsbGVsSW1hZ2VEZWNvZGVyLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Bh
cmFsbGVsSW1hZ2VEZWNvZGVyT2JzZXJ2ZXIuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuaCBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAzNjY3OGFm
Li5hNGE4ZjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zODQsOSArMzg0LDExIEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJEYXRhLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
RGVjb2RlV29ya2VyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2Jz
ZXJ2ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlv
bi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZU9ic2VydmVyLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL0ludFBvaW50SGFzaC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9JbnRSZWN0LmgnLApAQCAtMzUwMiwxNiArMzUwNCwyMiBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VE
ZWNvZGVXb3JrZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9y
aWVudGF0aW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3Vy
Y2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURlY29kZXIuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlci5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVyc2FsU3RhdGUuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL1JlZ2lvbi5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1JldGFpbmVk
TW9kZUJpdG1hcEltYWdlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvUmV0
YWluZWRNb2RlQml0bWFwSW1hZ2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Um91bmRlZFJlY3QuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50
ZWRGb250RGF0YS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRl
ZEZvbnREYXRhLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagppbmRleCAxOWJlMDU2Li5hYzVkMzIwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMjkzMDYsNiArMjkzMDYsMTQgQEAKIAkJCQkJPgog
CQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXEltYWdlRGVjb2RlV29ya2VyLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEltYWdlRGVjb2Rl
V29ya2VyLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xJbWFnZU9ic2VydmVyLmgiCiAJCQkJCT4KIAkJCQk8
L0ZpbGU+CkBAIC0yOTM1OCw2ICsyOTM2NiwxMCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJ
CTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcSW1hZ2VTb3Vy
Y2VPYnNlcnZlci5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcSW50UG9pbnQuaCIKIAkJCQkJPgogCQkJCTwv
RmlsZT4KQEAgLTI5Mzk0LDYgKzI5NDA2LDE4IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJ
PEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xQYXJhbGxlbElt
YWdlRGVjb2Rlci5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xQYXJhbGxlbEltYWdlRGVjb2Rlci5oIgor
CQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcUGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZlci5oIgorCQkJCQk+CisJ
CQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcUGF0aFRyYXZlcnNhbFN0YXRlLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KQEAgLTI5
NDIyLDYgKzI5NDQ2LDE0IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xSZXRhaW5lZE1vZGVCaXRtYXBJbWFn
ZS5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5oIgorCQkJCQk+
CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcUm91bmRlZFJlY3QuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDkzYmUy
NzUuLmNjYjVmNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTE0MjAsNiArMTQyMCw4IEBACiAJCTRCMzA0M0NEMEFFMDM3M0Iw
MEE4MjY0NyAvKiBFZGl0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRCMzA0M0NCMEFFMDM3M0IwMEE4MjY0NyAvKiBFZGl0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0QjM0ODA5MzBFRUY1MEQ0
MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDR01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCMzQ4MDkxMEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNv
dXJjZUNHTWFjLm1tICovOyB9OwogCQk0QjM0ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VT
b3VyY2VDRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NEIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIEltYWdlU291cmNlQ0cuaCAqLzsgfTsKKwkJNUIz
NDgwOTMwRUVGNTBENDAwQUMxQjQxIC8qIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCMzQ4MDkxMEVFRjUw
RDQwMEFDMUI0MSAvKiBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5jcHAgKi87IH07CisJCTVCMzQ4
MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUIzNDgwOTIwRUVGNTBENDAw
QUMxQjQxIC8qIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlLmggKi87IH07CiAJCTRCNkZBNkY0MEMz
OUU0OEMwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCNkZBNkYyMEMzOUU0OEMwMDA4NzAxMSAvKiBTbWFydFJl
cGxhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk0QjZGQTZGNTBDMzlFNDhDMDAwODcwMTEgLyogU21hcnRSZXBsYWNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCNkZBNkYzMEMzOUU0OEMwMDA4
NzAxMSAvKiBTbWFydFJlcGxhY2UuY3BwICovOyB9OwogCQk0QjZGQTZGNzBDMzlFNEExMDAwODcw
MTEgLyogU21hcnRSZXBsYWNlQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNEI2RkE2RjYwQzM5RTRBMTAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZUNG
LmNwcCAqLzsgfTsKQEAgLTQ4MDUsNiArNDgwNyw3IEBACiAJCUIyNzUzNTZGMEIwNTM4MTQwMDJD
RTY0RiAvKiBJbWFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjc1MzU0MTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2UuY3BwICovOyB9OwogCQlC
Mjc1MzU3MDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQyMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFn
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIy
NzUzNTcxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDMwQjA1MzgxNDAwMkNFNjRGIC8q
IEltYWdlU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJQjI3NTM1NzEwQjA1MzgxNDAwMkNFNjRFIC8qIEltYWdlU291cmNlT2JzZXJ2ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQz
MEIwNTM4MTQwMDJDRTY0RSAvKiBJbWFnZVNvdXJjZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI3NTM1NzIwQjA1MzgxNDAwMkNF
NjRGIC8qIEludFBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMjc1MzU0NDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCMjc1MzU3MzBCMDUzODE0
MDAyQ0U2NEYgLyogSW50UmVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMjc1MzU0NTBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5jcHAgKi87
IH07CiAJCUIyNzUzNTc0MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRSZWN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0NjBCMDUzODE0MDAyQ0U2
NEYgLyogSW50UmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC02NDkyLDYgKzY0OTUsOCBAQAogCQlGRTgwREE3MjBFOUM0NzJGMDAwRDZGNzUg
LyogSlNQb3NpdGlvbkVycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTgwREE2RTBFOUM0NzJGMDAwRDZGNzUgLyogSlNQb3NpdGlvbkVycm9yLmgg
Ki87IH07CiAJCUZGRDVCOTdBMTM1Q0M5NzgwMEQ1RTkyQSAvKiBQYWdlVmlzaWJpbGl0eVN0YXRl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGRDVC
OTc3MTM1Q0M5NzgwMEQ1RTkyQSAvKiBQYWdlVmlzaWJpbGl0eVN0YXRlLmNwcCAqLzsgfTsKIAkJ
RkZENUI5N0IxMzVDQzk3ODAwRDVFOTJBIC8qIFBhZ2VWaXNpYmlsaXR5U3RhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGRDVCOTc4MTM1Q0M5Nzgw
MEQ1RTkyQSAvKiBQYWdlVmlzaWJpbGl0eVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRkZENkI5N0ExMzVDQzk3ODAwRDVFOTJBIC8qIElt
YWdlRGVjb2RlV29ya2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZGRDZCOTZBMTM1Q0M5NzgwMEQ1RTkyQSAvKiBJbWFnZURlY29kZVdvcmtlci5j
cHAgKi87IH07CisJCUZGRDZCOTdCMTM1Q0M5NzgwMEQ1RTkyQSAvKiBJbWFnZURlY29kZVdvcmtl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkZENkI5
NkIxMzVDQzk3ODAwRDVFOTJBIC8qIEltYWdlRGVjb2RlV29ya2VyLmggKi87IH07CiAvKiBFbmQg
UEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5
IHNlY3Rpb24gKi8KQEAgLTg1MjEsNiArODUyNiw4IEBACiAJCTRCMzA0M0NCMEFFMDM3M0IwMEE4
MjY0NyAvKiBFZGl0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QjM0ODA5MTBFRUY1MEQ0MDBBQzFC
NDEgLyogSW1hZ2VTb3VyY2VDR01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IEltYWdlU291cmNlQ0dNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTRCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlU291cmNlQ0cuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNUIzNDgwOTEwRUVGNTBENDAwQUMxQjQxIC8qIFJldGFpbmVkTW9kZUJp
dG1hcEltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJl
dGFpbmVkTW9kZUJpdG1hcEltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NUIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJldGFpbmVkTW9kZUJpdG1hcEltYWdlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCNkZBNkYyMEMzOUU0OEMwMDA4NzAxMSAv
KiBTbWFydFJlcGxhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU21hcnRS
ZXBsYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCNkZBNkYzMEMzOUU0OEMw
MDA4NzAxMSAvKiBTbWFydFJlcGxhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU21hcnRSZXBsYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NEI2RkE2RjYwQzM5RTRBMTAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZUNGLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNtYXJ0UmVwbGFjZUNGLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExOTk5LDYgKzEyMDA2LDcgQEAKIAkJQjI3NTM1NDEwQjA1
MzgxNDAwMkNFNjRGIC8qIEltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTQy
MEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDMwQjA1
MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbWFnZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMjc1
MzU0MzBCMDUzODE0MDAyQ0U2NEUgLyogSW1hZ2VTb3VyY2VPYnNlcnZlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VTb3VyY2VPYnNlcnZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzU0NDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludFBvaW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTQ1MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRSZWN0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRSZWN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDYwQjA1MzgxNDAwMkNFNjRGIC8q
IEludFJlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludFJlY3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzODQwLDYgKzEzODQ4LDggQEAKIAkJRkU4
MERBNkUwRTlDNDcyRjAwMEQ2Rjc1IC8qIEpTUG9zaXRpb25FcnJvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1Bvc2l0aW9uRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkZENUI5NzcxMzVDQzk3ODAwRDVFOTJBIC8qIFBhZ2VWaXNpYmlsaXR5U3Rh
dGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZVZpc2liaWxp
dHlTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZGRDVCOTc4MTM1Q0M5
NzgwMEQ1RTkyQSAvKiBQYWdlVmlzaWJpbGl0eVN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBhZ2VWaXNpYmlsaXR5U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkZENkI5NkExMzVDQzk3ODAwRDVFOTJBIC8qIEltYWdlRGVjb2RlV29ya2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlV29ya2Vy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkZENkI5N0IxMzVDQzk3ODAwRDVF
OTJBIC8qIEltYWdlRGVjb2RlV29ya2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbWFnZURlY29kZVdvcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
LyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdv
cmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC0xOTU2Miw2ICsxOTU3Miw4IEBACiAJCQkJQTgw
QTM4RkQwRTUwQ0M4MjAwQTI1RUJDIC8qIFBhdHRlcm5DRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzYw
QjA1MzgxNDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuY3BwICovLAogCQkJCUIyNzUzNTM3
MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmggKi8sCisJCQkJNUIzNDgwOTEw
RUVGNTBENDAwQUMxQjQxIC8qIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlLmNwcCAqLywKKwkJCQk1
QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaCAqLywK
IAkJCQlCMjc1MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5j
cHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9IGNnOwpAQCAtMTk3MDQsMTEgKzE5NzE2LDE0IEBACiAJ
CQkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJCQlC
MkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkyMkJEOUY3
RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJRkZENkI5NkEx
MzVDQzk3ODAwRDVFOTJBIC8qIEltYWdlRGVjb2RlV29ya2VyLmNwcCAqLworCQkJCUZGRDZCOTZB
MTM1Q0M5NzgwMEQ1RTkyQSAvKiBJbWFnZURlY29kZVdvcmtlci5oICovCiAJCQkJQkM3RjQ0QTcw
QjlFMzI0RTAwQTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCAqLywKIAkJCQlBODc0OEQ3NDEyQ0Mz
Rjg5MDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5jcHAgKi8sCiAJCQkJQTg3NDhENjYxMkND
Mzc2MzAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uaCAqLywKIAkJCQk0OTI5MUU0QTEzNDE3
MkM4MDBFNzUzREUgLyogSW1hZ2VSZW5kZXJpbmdNb2RlLmggKi8sCiAJCQkJQjI3NTM1NDMwQjA1
MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlLmggKi8sCisJCQkJQjI3NTM1NDMwQjA1MzgxNDAw
MkNFNjRFIC8qIEltYWdlU291cmNlT2JzZXJ2ZXIuaCAqLywKIAkJCQlCMjc1MzU0NDBCMDUzODE0
MDAyQ0U2NEYgLyogSW50UG9pbnQuaCAqLywKIAkJCQlFNDYyQTRBMDExM0U3MUJFMDA0QTQyMjAg
LyogSW50UG9pbnRIYXNoLmggKi8sCiAJCQkJQjI3NTM1NDUwQjA1MzgxNDAwMkNFNjRGIC8qIElu
dFJlY3QuY3BwICovLApAQCAtMjM0NTAsNiArMjM0NjUsNyBAQAogCQkJCTJENUE1OTMxMTUyNTI1
RDAwMDM2RUU1MSAvKiBJbWFnZU9yaWVudGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTI5
MUU0QjEzNDE3MkM4MDBFNzUzREUgLyogSW1hZ2VSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMjc1MzU3MTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUIyNzUzNTcxMEIwNTM4MTQwMDJDRTY0RSAvKiBJbWFnZVNvdXJjZU9ic2Vy
dmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0QjM0ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyogSW1h
Z2VTb3VyY2VDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE2RkUxMTgwRTZFMURBNzAwQkY2MDg4
IC8qIEltcGxpY2l0QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlEQjIzQzJDQzBBNTA4
RDI5MDAyNDg5RUIgLyogSW5kZW50T3V0ZGVudENvbW1hbmQuaCBpbiBIZWFkZXJzICovLApAQCAt
MjQ1MTcsNiArMjQ1MzMsNyBAQAogCQkJCTdFRTY4NDZGMTJEMjZFMzgwMEU3OTQxNSAvKiBSZXNv
dXJjZVJlcXVlc3RDRk5ldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0VFNjg0NzAxMkQyNkUzODAw
RTc5NDE1IC8qIFJlc291cmNlUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNEM3NjdG
MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlQmFzZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNUIzNDgwOTQwRUVGNTBENDAwQUMxQjQxIC8qIFJldGFpbmVkTW9kZUJpdG1hcEltYWdl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjBBNTEyQjAyNkY3MDBDMUEzNTkgLyogUmV2ZXJi
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjBBNzEyQjAyNkY3MDBDMUEzNTkgLyogUmV2ZXJi
QWNjdW11bGF0aW9uQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjBBOTEyQjAyNkY3
MDBDMUEzNTkgLyogUmV2ZXJiQ29udm9sdmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI3NzAwLDYg
KzI3NzE3LDcgQEAKIAkJCQk1MTRDNzY3RTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNw
b25zZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0VFNjg0NzExMkQyNkUzODAwRTc5NDE1
IC8qIFJlc291cmNlUmVzcG9uc2VDRk5ldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTRDNzY1
NTBDRTkyMzRGMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZU1hYy5tbSBpbiBTb3VyY2VzICov
LAorCQkJCTVCMzQ4MDkzMEVFRjUwRDQwMEFDMUI0MSAvKiBSZXRhaW5lZE1vZGVCaXRtYXBJbWFn
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDMxNjBBNDEyQjAyNkY3MDBDMUEzNTkgLyogUmV2
ZXJiLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MEE2MTJCMDI2RjcwMEMxQTM1OSAvKiBS
ZXZlcmJBY2N1bXVsYXRpb25CdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwQTgx
MkIwMjZGNzAwQzFBMzU5IC8qIFJldmVyYkNvbnZvbHZlci5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRl
eCA0NTQ2MGY4Li44MDNlMjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC00NSw2ICs0NSw3IEBAIHN0YXRpYyBpbnQgZnJhbWVC
eXRlcyhjb25zdCBJbnRTaXplJiBmcmFtZVNpemUpCiAKIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFn
ZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQorICAgICwg
bV9zb3VyY2UodGhpcykKICAgICAsIG1fY3VycmVudEZyYW1lKDApCiAgICAgLCBtX2ZyYW1lcygw
KQogICAgICwgbV9mcmFtZVRpbWVyKDApCkBAIC02Myw2ICs2NCw3IEBAIEJpdG1hcEltYWdlOjpC
aXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICAsIG1fc2l6ZUF2YWlsYWJs
ZShmYWxzZSkKICAgICAsIG1faGFzVW5pZm9ybUZyYW1lU2l6ZSh0cnVlKQogICAgICwgbV9oYXZl
RnJhbWVDb3VudChmYWxzZSkKKyAgICAsIG1faXNDYWNoaW5nRnJhbWUoZmFsc2UpCiB7CiB9CiAK
QEAgLTEyNiw0MCArMTI4LDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveU1ldGFkYXRhQW5k
Tm90aWZ5KGludCBmcmFtZXNDbGVhcmVkKQogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRlY29k
ZWRTaXplQ2hhbmdlZCh0aGlzLCBkZWx0YUJ5dGVzKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6
Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgpCi17Ci0gICAgc2l6ZV90IG51bUZyYW1lcyA9IGZyYW1l
Q291bnQoKTsKLSAgICBBU1NFUlQobV9kZWNvZGVkU2l6ZSA9PSAwIHx8IG51bUZyYW1lcyA+IDEp
OwotICAgIAotICAgIGlmIChtX2ZyYW1lcy5zaXplKCkgPCBudW1GcmFtZXMpCi0gICAgICAgIG1f
ZnJhbWVzLmdyb3cobnVtRnJhbWVzKTsKLQotICAgIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lID0g
bV9zb3VyY2UuY3JlYXRlRnJhbWVBdEluZGV4KGluZGV4KTsKLSAgICBpZiAobnVtRnJhbWVzID09
IDEgJiYgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUpCi0gICAgICAgIGNoZWNrRm9yU29saWRDb2xv
cigpOwotCi0gICAgbV9mcmFtZXNbaW5kZXhdLm1fb3JpZW50YXRpb24gPSBtX3NvdXJjZS5vcmll
bnRhdGlvbkF0SW5kZXgoaW5kZXgpOwotICAgIG1fZnJhbWVzW2luZGV4XS5tX2hhdmVNZXRhZGF0
YSA9IHRydWU7Ci0gICAgbV9mcmFtZXNbaW5kZXhdLm1faXNDb21wbGV0ZSA9IG1fc291cmNlLmZy
YW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpOwotICAgIGlmIChyZXBldGl0aW9uQ291bnQoZmFs
c2UpICE9IGNBbmltYXRpb25Ob25lKQotICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlv
biA9IG1fc291cmNlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKLSAgICBtX2ZyYW1lc1tp
bmRleF0ubV9oYXNBbHBoYSA9IG1fc291cmNlLmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsK
LQotICAgIGNvbnN0IEludFNpemUgZnJhbWVTaXplKGluZGV4ID8gbV9zb3VyY2UuZnJhbWVTaXpl
QXRJbmRleChpbmRleCkgOiBtX3NpemUpOwotICAgIGlmIChmcmFtZVNpemUgIT0gbV9zaXplKQot
ICAgICAgICBtX2hhc1VuaWZvcm1GcmFtZVNpemUgPSBmYWxzZTsKLSAgICBpZiAobV9mcmFtZXNb
aW5kZXhdLm1fZnJhbWUpIHsKLSAgICAgICAgaW50IGRlbHRhQnl0ZXMgPSBmcmFtZUJ5dGVzKGZy
YW1lU2l6ZSk7Ci0gICAgICAgIG1fZGVjb2RlZFNpemUgKz0gZGVsdGFCeXRlczsKLSAgICAgICAg
Ly8gVGhlIGZ1bGx5LWRlY29kZWQgZnJhbWUgd2lsbCBzdWJzdW1lIHRoZSBwYXJ0aWFsbHkgZGVj
b2RlZCBkYXRhIHVzZWQKLSAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIGltYWdlIHByb3BlcnRpZXMu
Ci0gICAgICAgIGRlbHRhQnl0ZXMgLT0gbV9kZWNvZGVkUHJvcGVydGllc1NpemU7Ci0gICAgICAg
IG1fZGVjb2RlZFByb3BlcnRpZXNTaXplID0gMDsKLSAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIo
KSkKLSAgICAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2VkKHRoaXMs
IGRlbHRhQnl0ZXMpOwotICAgIH0KLX0KLQogdm9pZCBCaXRtYXBJbWFnZTo6ZGlkRGVjb2RlUHJv
cGVydGllcygpIGNvbnN0CiB7CiAgICAgaWYgKG1fZGVjb2RlZFNpemUpCkBAIC0yNDEsNyArMjA5
LDEyIEBAIGJvb2wgQml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVk
KQogICAgICAgICAvLyBOT1RFOiBEb24ndCBjYWxsIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoKSBo
ZXJlLCB0aGF0IHdpbGwgdHJ5IHRvCiAgICAgICAgIC8vIGRlY29kZSBhbnkgdW5jYWNoZWQgKGku
ZS4gbmV2ZXItZGVjb2RlZCBvcgogICAgICAgICAvLyBjbGVhcmVkLW9uLWEtcHJldmlvdXMtcGFz
cykgZnJhbWVzIQotICAgICAgICBpZiAobV9mcmFtZXNbaV0ubV9oYXZlTWV0YWRhdGEgJiYgIW1f
ZnJhbWVzW2ldLm1faXNDb21wbGV0ZSkKKworICAgICAgICAvLyBOT1RFOiBEb24ndCBjbGVhciB0
aGUgY3VycmVudCBmcmFtZSwgYmVjYXVzZSB0aGUgZnJhbWUgbWlnaHQgaGF2ZSBiZWVuIGRlY29k
ZWQKKyAgICAgICAgLy8gaW4gcmV0YWluZWQgbW9kZSBhbmQgUmVuZGVySW1hZ2UgaGFzbid0IHJl
bmRlciB0aGlzIGRlY29kZWQgaW1hZ2UgeWV0LgorICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBm
cmFtZSBpcyByZW1vdmVkIGhlcmUsIHRoZSBpbWFnZSBlbGVtZW50IHdpbGwgYmUgcmVuZGVyZWQg
YXMgd2hpdGUgYm94LgorICAgICAgICAvLyBUaGUgY3VycmVudCBmcmFtZSB3aWxsIGJlIHJlbW92
ZWQgbGF0ZXIgd2hlbiByZXRhaW5lZCBtb2RlIGRlY29kaW5nIGlzIGZpbmlzaGVkLgorICAgICAg
ICBpZiAobV9mcmFtZXNbaV0ubV9mcmFtZSAmJiAhbV9mcmFtZXNbaV0ubV9pc0NvbXBsZXRlICYm
IG1fY3VycmVudEZyYW1lICE9IGkpCiAgICAgICAgICAgICBmcmFtZXNDbGVhcmVkICs9IChtX2Zy
YW1lc1tpXS5jbGVhcih0cnVlKSA/IDEgOiAwKTsKICAgICB9CiAgICAgZGVzdHJveU1ldGFkYXRh
QW5kTm90aWZ5KGZyYW1lc0NsZWFyZWQpOwpAQCAtMjg5LDExICsyNjIsNzMgQEAgYm9vbCBCaXRt
YXBJbWFnZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgpCiAgICAgaWYgKGluZGV4
ID49IGZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGluZGV4
ID49IG1fZnJhbWVzLnNpemUoKSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUpCisgICAgaWYg
KG1faXNDYWNoaW5nRnJhbWUpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gbV9mcmFt
ZSBjYW4gZXhpc3Qgd2hlbiBtX2lzQ29tcGxldGUgaXMgZmFsc2UsIHNvIHdlIG5lZWQgdG8gY2Fj
aGUgYSBuZXcgZnJhbWUgZXZlbiBpZiBtX2ZyYW1lIGV4aXN0cy4KKyAgICAvLyBTZWUgQml0bWFw
SW1hZ2U6OmRhdGFDaGFuZ2VkIGZvciBleHBsYW5hdGlvbi4KKyAgICBib29sIG5lZWRUb0NhY2hl
ID0gaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSB8
fCAhbV9mcmFtZXNbaW5kZXhdLm1faXNDb21wbGV0ZTsKKyAgICBpZiAobmVlZFRvQ2FjaGUpIHsK
KyAgICAgICAgbV9pc0NhY2hpbmdGcmFtZSA9IHRydWU7CiAgICAgICAgIGNhY2hlRnJhbWUoaW5k
ZXgpOworICAgICAgICBtX2lzQ2FjaGluZ0ZyYW1lID0gZmFsc2U7CisgICAgfQorCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK3ZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4
KQoreworICAgIHNpemVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CisgICAgaWYgKG1fZnJh
bWVzLnNpemUoKSA8IG51bUZyYW1lcykKKyAgICAgICAgbV9mcmFtZXMuZ3JvdyhudW1GcmFtZXMp
OworCisgICAgbV9zb3VyY2UucmVxdWVzdEZyYW1lQXRJbmRleChpbmRleCwgcmV0YWluZWRNb2Rl
UmVuZGVyaW5nKCkpOworfQorCitib29sIEJpdG1hcEltYWdlOjpyZXRhaW5lZE1vZGVSZW5kZXJp
bmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3JldGFpbmVkTW9kZUltYWdlLmdldCgpICYmIG1f
cmV0YWluZWRNb2RlSW1hZ2UtPnJldGFpbmVkTW9kZVJlbmRlcmluZygpOworfQorCit2b2lkIEJp
dG1hcEltYWdlOjpkaWRSZWNlaXZlRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCwgY29uc3QgSW1h
Z2VGcmFtZURhdGEmIGltYWdlRnJhbWVEYXRhLCBib29sIHJldGFpbmVkLCBib29sIHBhcmFsbGVs
RGVjb2RlckNhbmNlbGVkKQoreworICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRvIGNhbGwgY2FjaGVG
cmFtZSBpbmRpcmVjdGx5IGluIHRoaXMgbWV0aG9kLgorICAgIFJldGFpbmVkTW9kZVNhdmVyIHJl
dGFpbmVkTW9kZVNhdmVyKG1fcmV0YWluZWRNb2RlSW1hZ2UuZ2V0KCksIHJldGFpbmVkKTsKKwor
ICAgIC8vIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lIG11c3QgYmUgY2xlYXJlZCBiZWZvcmUgaXQg
aXMgcmVwbGFjZWQgd2l0aCBuZXcgZGVjb2RlZCBmcmFtZS4KKyAgICAvLyBJZiB3ZSBmb3JnZXQg
dG8gY2xlYXIgbV9mcmFtZSwgdGhlIG9sZCBtX2ZyYW1lIGxlYWtzLgorICAgIC8vIFNlZSBCaXRt
YXBJbWFnZTo6ZGF0YUNoYW5nZWQgZm9yIGV4cGxhbmF0aW9uIHdoeSB0aGUgZGVjb2RlZCBmcmFt
ZSBtdXN0IGJlIHJlbW92ZWQgaGVyZS4KKyAgICBpbnQgZnJhbWVzQ2xlYXJlZCA9IDA7CisgICAg
aWYgKG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lKQorICAgICAgICBmcmFtZXNDbGVhcmVkICs9ICht
X2ZyYW1lc1tpbmRleF0uY2xlYXIodHJ1ZSkgPyAxIDogMCk7CisgICAgZGVzdHJveU1ldGFkYXRh
QW5kTm90aWZ5KGZyYW1lc0NsZWFyZWQpOworCisgICAgbV9mcmFtZXNbaW5kZXhdLnNldEZyb21J
bWFnZUZyYW1lRGF0YShpbWFnZUZyYW1lRGF0YSk7CisKKyAgICBzaXplX3QgbnVtRnJhbWVzID0g
ZnJhbWVDb3VudCgpOworICAgIGlmIChudW1GcmFtZXMgPT0gMSAmJiBtX2ZyYW1lc1tpbmRleF0u
bV9mcmFtZSkKKyAgICAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7CisKKyAgICBjb25zdCBJbnRT
aXplIGZyYW1lU2l6ZShpbmRleCA/IG1fc291cmNlLmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgpIDog
bV9zaXplKTsKKyAgICBpZiAoZnJhbWVTaXplICE9IG1fc2l6ZSkKKyAgICAgICAgbV9oYXNVbmlm
b3JtRnJhbWVTaXplID0gZmFsc2U7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lKSB7
CisgICAgICAgIGludCBkZWx0YUJ5dGVzID0gZnJhbWVCeXRlcyhmcmFtZVNpemUpOworICAgICAg
ICBtX2RlY29kZWRTaXplICs9IGRlbHRhQnl0ZXM7CisgICAgICAgIC8vIFRoZSBmdWxseS1kZWNv
ZGVkIGZyYW1lIHdpbGwgc3Vic3VtZSB0aGUgcGFydGlhbGx5IGRlY29kZWQgZGF0YSB1c2VkCisg
ICAgICAgIC8vIHRvIGRldGVybWluZSBpbWFnZSBwcm9wZXJ0aWVzLgorICAgICAgICBkZWx0YUJ5
dGVzIC09IG1fZGVjb2RlZFByb3BlcnRpZXNTaXplOworICAgICAgICBtX2RlY29kZWRQcm9wZXJ0
aWVzU2l6ZSA9IDA7CisgICAgICAgIGlmIChpbWFnZU9ic2VydmVyKCkpIHsKKyAgICAgICAgICAg
IGltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2VkKHRoaXMsIGRlbHRhQnl0ZXMpOwor
CisgICAgICAgICAgICBpZiAoKG1fZnJhbWVzW2luZGV4XS5tX2lzQ29tcGxldGUgJiYgcmV0YWlu
ZWQpIHx8IHBhcmFsbGVsRGVjb2RlckNhbmNlbGVkKQorICAgICAgICAgICAgICAgIGltYWdlT2Jz
ZXJ2ZXIoKS0+Y2hhbmdlZEluUmVjdCh0aGlzLCBJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkp
OworICAgICAgICB9CisgICAgfQorfQorCiBOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJh
bWVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQo
aW5kZXgpKQpAQCAtMzAzLDEzICszMzgsMzAgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6
OmZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCiAKIGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSXND
b21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogeworICAgIC8vIFdlIGNhbiBub3QgcmV0dXJu
IGNhY2hlZCBtX2lzQ29tcGxldGUsIGJlY2F1c2UgY2xpZW50cyB0aGF0IGNhbGxzIHRoaXMgbWV0
aG9kIGV4cGVjdAorICAgIC8vIG1fZnJhbWUgaXMgbm90IG51bGwgaWYgdGhpcyBtZXRob2QgcmV0
dXJucyB0cnVlLgorICAgIC8vIElmIHRoZSBpbmRleGVkIGZyYW1lIHdhcyBvbmNlIGRlY29kZWQg
Y29tcGxldGVseSBhbmQgY2xlYXJlZCBieSBkZXN0cm95RGVjb2RlZERhdGEoKSwKKyAgICAvLyB0
aGlzIG1ldGhvZCBjYW4gcmV0dXJuIHRydWUgYWx0aG91Z2ggbV9mcmFtZSBpcyBudWxsLgorICAg
IC8vIChzZWUgZGVzdHJveURlY29kZWREYXRhKCkgYW5kIGZyYW1lRHVyYXRpb25BdEluZGV4KCkp
CiAgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pc0NvbXBsZXRlOworICAgIC8vIElm
IHRoZSBmcmFtZSBhdCB0aGUgZ2l2ZW4gaW5kZXggaXMgZGVjb2RlZCBieSBwYXJhbGxlbCBpbWFn
ZSBkZWNvZGVycywgbV9mcmFtZSBjYW4gYmUgMCBldmVuIGlmIG1faXNDb21wbGV0ZSBpcyB0cnVl
LgorICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pc0NvbXBsZXRlICYmIG1fZnJhbWVzW2lu
ZGV4XS5tX2ZyYW1lOworfQorCitib29sIEJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVJc0NvbXBs
ZXRlKCkKK3sKKyAgICByZXR1cm4gZnJhbWVJc0NvbXBsZXRlQXRJbmRleChtX2N1cnJlbnRGcmFt
ZSk7CiB9CiAKIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3Qg
aW5kZXgpCiB7CisgICAgLy8gSWYgdGhlIGluZGV4ZWQgZnJhbWUgd2FzIG9uY2UgZGVjb2RlZCBj
b21wbGV0ZWx5IGFuZCBjbGVhcmVkIGJ5IGRlc3Ryb3lEZWNvZGVkRGF0YSgpLAorICAgIC8vIFdl
IGRvbid0IG5lZWQgZGVjb2RlIGFnYWluIGluIG9yZGVyIHRvIGtub3cgbWV0YSBkYXRhLgorICAg
IC8vIEl0IGlzIGJlY2F1c2UgZGVzdHJveURlY29kZWREYXRhKCkgZG9lcyBub3QgcmVzZXQgbWV0
YSBkYXRhLiAoc2VlIGRlc3Ryb3lEZWNvZGVkRGF0YSgpKQorICAgIGlmIChpbmRleCA8IG1fZnJh
bWVzLnNpemUoKSAmJiBtX2ZyYW1lc1tpbmRleF0ubV9pc0NvbXBsZXRlKQorICAgICAgICByZXR1
cm4gbV9mcmFtZXNbaW5kZXhdLm1fZHVyYXRpb247CisKICAgICBpZiAoIWVuc3VyZUZyYW1lSXND
YWNoZWQoaW5kZXgpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gbV9mcmFtZXNbaW5k
ZXhdLm1fZHVyYXRpb247CkBAIC0zMjIsNiArMzc0LDEwIEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1h
cEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCiAKIGJvb2wgQml0bWFwSW1hZ2U6
OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKKyAgICAvLyBJZiBjYWNoZWQs
IHJldHVybiBjYWNoZWQgbWV0YSBkYXRhLiAoc2VlIGZyYW1lRHVyYXRpb25BdEluZGV4KCgpKQor
ICAgIGlmIChpbmRleCA8IG1fZnJhbWVzLnNpemUoKSAmJiBtX2ZyYW1lc1tpbmRleF0ubV9pc0Nv
bXBsZXRlKQorICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faGFzQWxwaGE7CisKICAg
ICAvLyBXaGVuIGEgZnJhbWUgaGFzIG5vdCBmaW5pc2hlZCBkZWNvZGluZywgYWx3YXlzIG1hcmsg
aXQgYXMgaGF2aW5nIGFscGhhLgogICAgIC8vIFNlZSBJbWFnZVNvdXJjZTo6ZnJhbWVoYXNBbHBo
YUF0SW5kZXggZm9yIGV4cGxhbmF0aW9uIG9mIHdoeSBpbmNvbXBsZXRlIGltYWdlcyBjbGFpbSB0
byBoYXZlIGFscGhhLgogICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCkpCkBAIC0z
NDEsNiArMzk3LDEwIEBAIEltYWdlT3JpZW50YXRpb24gQml0bWFwSW1hZ2U6OmN1cnJlbnRGcmFt
ZU9yaWVudGF0aW9uKCkKIAogSW1hZ2VPcmllbnRhdGlvbiBCaXRtYXBJbWFnZTo6ZnJhbWVPcmll
bnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogeworICAgIC8vIElmIGNhY2hlZCwgcmV0dXJu
IGNhY2hlZCBtZXRhIGRhdGEuIChzZWUgZnJhbWVEdXJhdGlvbkF0SW5kZXgoKCkpCisgICAgaWYg
KGluZGV4IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5tX2lzQ29tcGxldGUp
CisgICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9vcmllbnRhdGlvbjsKKwogICAgIGlm
ICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCkpCiAgICAgICAgIHJldHVybiBEZWZhdWx0SW1h
Z2VPcmllbnRhdGlvbjsKICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1fb3JpZW50YXRpb247
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaAppbmRl
eCBmNWJmZWIxLi44Y2JjNjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmgKQEAgLTMxLDcgKzMxLDkgQEAKICNpbmNsdWRlICJJbWFnZS5oIgog
I2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgorI2luY2x1
ZGUgIkltYWdlU291cmNlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVk
ZSAiUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaCIKIAogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CkBAIC03MSw5ICs3Myw4IEBAIHB1YmxpYzoKICAgICAgICAg
OiBtX2ZyYW1lKDApCiAgICAgICAgICwgbV9vcmllbnRhdGlvbihEZWZhdWx0SW1hZ2VPcmllbnRh
dGlvbikKICAgICAgICAgLCBtX2R1cmF0aW9uKDApCi0gICAgICAgICwgbV9oYXZlTWV0YWRhdGEo
ZmFsc2UpCisgICAgICAgICwgbV9oYXNBbHBoYSh0cnVlKQogICAgICAgICAsIG1faXNDb21wbGV0
ZShmYWxzZSkKLSAgICAgICAgLCBtX2hhc0FscGhhKHRydWUpIAogICAgIHsKICAgICB9CiAKQEAg
LTgyLDI3ICs4Myw1MCBAQCBwdWJsaWM6CiAgICAgICAgIGNsZWFyKHRydWUpOwogICAgIH0KIAor
ICAgIHZvaWQgc2V0RnJvbUltYWdlRnJhbWVEYXRhKGNvbnN0IEltYWdlRnJhbWVEYXRhJiBkYXRh
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2ZyYW1lKTsKKyAgICAgICAgbV9mcmFtZSA9IGRh
dGEubV9mcmFtZTsKKyAgICAgICAgbV9vcmllbnRhdGlvbiA9IGRhdGEubV9vcmllbnRhdGlvbjsK
KyAgICAgICAgbV9kdXJhdGlvbiA9IGRhdGEubV9kdXJhdGlvbjsKKyAgICAgICAgbV9oYXNBbHBo
YSA9IGRhdGEubV9oYXNBbHBoYTsKKyAgICAgICAgQVNTRVJUKCEobV9pc0NvbXBsZXRlICYmICFk
YXRhLm1faXNDb21wbGV0ZSkpOworICAgICAgICBtX2lzQ29tcGxldGUgPSBkYXRhLm1faXNDb21w
bGV0ZTsKKyAgICB9CisKICAgICAvLyBDbGVhciB0aGUgY2FjaGVkIGltYWdlIGRhdGEgb24gdGhl
IGZyYW1lLCBhbmQgKG9wdGlvbmFsbHkpIHRoZSBtZXRhZGF0YS4KICAgICAvLyBSZXR1cm5zIHdo
ZXRoZXIgdGhlcmUgd2FzIGNhY2hlZCBpbWFnZSBkYXRhIHRvIGNsZWFyLgotICAgIGJvb2wgY2xl
YXIoYm9vbCBjbGVhck1ldGFkYXRhKTsKKyAgICBib29sIGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0
YSkKKyAgICB7CisgICAgICAgIGlmIChjbGVhck1ldGFkYXRhKSB7CisgICAgICAgICAgICBtX29y
aWVudGF0aW9uID0gRGVmYXVsdEltYWdlT3JpZW50YXRpb247CisgICAgICAgICAgICBtX2R1cmF0
aW9uID0gMDsKKyAgICAgICAgICAgIG1faGFzQWxwaGEgPSB0cnVlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBjbGVhckZyYW1lKCk7CisgICAgfQogCiAgICAgTmF0aXZlSW1hZ2VQdHIgbV9m
cmFtZTsKICAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247CiAgICAgZmxvYXQgbV9k
dXJhdGlvbjsKLSAgICBib29sIG1faGF2ZU1ldGFkYXRhIDogMTsKLSAgICBib29sIG1faXNDb21w
bGV0ZSA6IDE7CiAgICAgYm9vbCBtX2hhc0FscGhhIDogMTsKKyAgICBib29sIG1faXNDb21wbGV0
ZSA6IDE7CisKK3ByaXZhdGU6CisgICAgYm9vbCBjbGVhckZyYW1lKCk7CiB9OwogCiAvLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBCaXRtYXBJ
bWFnZSBDbGFzcwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQogCi1jbGFzcyBCaXRtYXBJbWFnZSA6IHB1YmxpYyBJbWFnZSB7CitjbGFzcyBCaXRt
YXBJbWFnZSA6IHB1YmxpYyBJbWFnZSwgcHVibGljIEltYWdlU291cmNlT2JzZXJ2ZXIgeworICAg
IGZyaWVuZCBjbGFzcyBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTsKICAgICBmcmllbmQgY2xhc3Mg
R2VuZXJhdGVkSW1hZ2U7CiAgICAgZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdl
OwogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZTsKICAgICBmcmllbmQg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0OworICAgIGZyaWVuZCBSZXRhaW5lZE1vZGVCaXRtYXBJbWFn
ZSogdG9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZShJbWFnZSopOwogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEJpdG1hcEltYWdlPiBjcmVhdGUoTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1h
Z2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyID0gMCkKICAgICB7CkBAIC0xNzksNiArMjAzLDkg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBub3RTb2xpZENvbG9yKCk7CiAjZW5kaWYKIAor
ICAgIC8vIEltYWdlU291cmNlT2JzZXJ2ZXIKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUZy
YW1lQXRJbmRleChzaXplX3QsIGNvbnN0IEltYWdlRnJhbWVEYXRhJiwgYm9vbCByZXRhaW5lZCA9
IGZhbHNlLCBib29sIHBhcmFsbGVsRGVjb2RlckNhbmNlbGVkID0gZmFsc2UpOworCiBwcml2YXRl
OgogICAgIHZvaWQgdXBkYXRlU2l6ZSgpIGNvbnN0OwogCkBAIC0yMTQsNiArMjQxLDggQEAgcHJv
dGVjdGVkOgogICAgIGJvb2wgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QpOwogICAgIGZs
b2F0IGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCk7CiAKKyAgICBib29sIGN1cnJlbnRGcmFt
ZUlzQ29tcGxldGUoKTsKKwogICAgIC8vIERlY29kZXMgYW5kIGNhY2hlcyBhIGZyYW1lLiBOZXZl
ciBhY2Nlc3NlZCBleGNlcHQgaW50ZXJuYWxseS4KICAgICB2b2lkIGNhY2hlRnJhbWUoc2l6ZV90
IGluZGV4KTsKICAgICAvLyBDYWxsZWQgYmVmb3JlIGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0u
IFJldHVybnMgZmFsc2Ugb24gaW5kZXggb3V0IG9mIGJvdW5kcy4KQEAgLTI2OSw2ICsyOTgsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIG1heUZpbGxXaXRoU29saWRDb2xvcigpOwog
ICAgIHZpcnR1YWwgQ29sb3Igc29saWRDb2xvcigpIGNvbnN0OwogICAgIAorICAgIGJvb2wgcmV0
YWluZWRNb2RlUmVuZGVyaW5nKCkgY29uc3Q7CisKICAgICBJbWFnZVNvdXJjZSBtX3NvdXJjZTsK
ICAgICBtdXRhYmxlIEludFNpemUgbV9zaXplOyAvLyBUaGUgc2l6ZSB0byB1c2UgZm9yIHRoZSBv
dmVyYWxsIGltYWdlICh3aWxsIGp1c3QgYmUgdGhlIHNpemUgb2YgdGhlIGZpcnN0IGltYWdlKS4K
ICAgICBtdXRhYmxlIEludFNpemUgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uOwpAQCAtMjkz
LDYgKzMyNCw4IEBAIHByb3RlY3RlZDoKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fZGVjb2RlZFBy
b3BlcnRpZXNTaXplOyAvLyBUaGUgc2l6ZSBvZiBkYXRhIGRlY29kZWQgYnkgdGhlIHNvdXJjZSB0
byBkZXRlcm1pbmUgaW1hZ2UgcHJvcGVydGllcyAoZS5nLiBzaXplLCBmcmFtZSBjb3VudCwgZXRj
KS4KICAgICBzaXplX3QgbV9mcmFtZUNvdW50OwogCisgICAgUmVmUHRyPFJldGFpbmVkTW9kZUJp
dG1hcEltYWdlPiBtX3JldGFpbmVkTW9kZUltYWdlOworCiAgICAgYm9vbCBtX2lzU29saWRDb2xv
ciA6IDE7IC8vIFdoZXRoZXIgb3Igbm90IHdlIGFyZSBhIDF4MSBzb2xpZCBpbWFnZS4KICAgICBi
b29sIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IgOiAxOyAvLyBXaGV0aGVyIHdlJ3ZlIGNoZWNrZWQg
dGhlIGZyYW1lIGZvciBzb2xpZCBjb2xvci4KIApAQCAtMzAzLDYgKzMzNiw4IEBAIHByb3RlY3Rl
ZDoKICAgICBib29sIG1fc2l6ZUF2YWlsYWJsZSA6IDE7IC8vIFdoZXRoZXIgb3Igbm90IHdlIGNh
biBvYnRhaW4gdGhlIHNpemUgb2YgdGhlIGZpcnN0IGltYWdlIGZyYW1lIHlldCBmcm9tIEltYWdl
SU8uCiAgICAgbXV0YWJsZSBib29sIG1faGFzVW5pZm9ybUZyYW1lU2l6ZSA6IDE7CiAgICAgbXV0
YWJsZSBib29sIG1faGF2ZUZyYW1lQ291bnQgOiAxOworCisgICAgYm9vbCBtX2lzQ2FjaGluZ0Zy
YW1lIDogMTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlRGVjb2RlV29ya2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlRGVjb2RlV29ya2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5kMzJkNDFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVXb3JrZXIuY3BwCkBAIC0wLDAgKzEsMTM4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlRGVjb2RlV29ya2VyLmgiCisKKyNpbmNsdWRlIDxs
aW1pdHM+CisKKyNpbmNsdWRlIDx3dGYvTnVtYmVyT2ZDb3Jlcy5oPgorI2luY2x1ZGUgPHd0Zi9X
b3JrUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVmVjdG9yPFdvcmtR
dWV1ZSo+KiBJbWFnZURlY29kZVdvcmtlcjo6c193b3JrUXVldWVQb29sID0gMDsKK1ZlY3Rvcjxp
bnQ+KiBJbWFnZURlY29kZVdvcmtlcjo6c193b3JrUXVldWVBY3F1aXJlQ291bnQgPSAwOworCitQ
YXNzUmVmUHRyPEltYWdlRGVjb2RlV29ya2VyPiBJbWFnZURlY29kZVdvcmtlcjo6YWNxdWlyZVNo
YXJlZFdvcmtlcigpCit7CisgICAgaWYgKCFzX3dvcmtRdWV1ZVBvb2wpCisgICAgICAgIGluaXRp
YWxpemVXb3JrUXVldWVQb29sKCk7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlRGVj
b2RlV29ya2VyKCkpOworfQorCit2b2lkIEltYWdlRGVjb2RlV29ya2VyOjppbml0aWFsaXplV29y
a1F1ZXVlUG9vbCgpCit7CisgICAgY29uc3QgaW50IG51bUNvcmVzID0gV1RGOjpudW1iZXJPZlBy
b2Nlc3NvckNvcmVzKCk7CisKKyAgICBzX3dvcmtRdWV1ZUFjcXVpcmVDb3VudCA9IG5ldyBWZWN0
b3I8aW50PihudW1Db3JlcywgMCk7CisgICAgc193b3JrUXVldWVQb29sID0gbmV3IFZlY3RvcjxX
b3JrUXVldWUqPigpOworICAgIHNfd29ya1F1ZXVlUG9vbC0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShudW1Db3Jlcyk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db3JlczsgaSsrKSB7Cisg
ICAgICAgIHNfd29ya1F1ZXVlQWNxdWlyZUNvdW50LT5hdChpKSA9IDA7CisgICAgICAgIFN0cmlu
ZyBxdWV1ZU5hbWUgPSAiSW1hZ2VEZWNvZGVXb3JrZXIuIiArIFN0cmluZzo6bnVtYmVyKGkpOwor
ICAgICAgICBzX3dvcmtRdWV1ZVBvb2wtPmFwcGVuZChuZXcgV29ya1F1ZXVlKHF1ZXVlTmFtZS5h
c2NpaSgpLmRhdGEoKSkpOworICAgIH0KK30KKworaW50IEltYWdlRGVjb2RlV29ya2VyOjpxdWV1
ZUlkV2l0aE1pbmltdW1BY3F1aXJlQ291bnQoKQoreworICAgIGludCBtaW5pbXVtQWNxdWlyZUNv
dW50ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICBpbnQgaW5kZXggPSBz
X3dvcmtRdWV1ZVBvb2wtPnNpemUoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc193
b3JrUXVldWVQb29sLT5zaXplKCk7IGkrKykKKyAgICAgICAgaWYgKHNfd29ya1F1ZXVlQWNxdWly
ZUNvdW50LT5hdChpKSA8IG1pbmltdW1BY3F1aXJlQ291bnQpIHsKKyAgICAgICAgICAgIG1pbmlt
dW1BY3F1aXJlQ291bnQgPSBzX3dvcmtRdWV1ZUFjcXVpcmVDb3VudC0+YXQoaSk7CisgICAgICAg
ICAgICBpbmRleCA9IGk7CisgICAgICAgIH0KKworICAgIEFTU0VSVChpbmRleCA8IHNfd29ya1F1
ZXVlUG9vbC0+c2l6ZSgpKTsKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK0ltYWdlRGVjb2RlV29y
a2VyOjpJbWFnZURlY29kZVdvcmtlcigpCisgICAgOiBtX3dvcmtlclN0YXR1cyhSdW5uaW5nKQor
eworICAgIG1fd29ya1F1ZXVlSWQgPSBxdWV1ZUlkV2l0aE1pbmltdW1BY3F1aXJlQ291bnQoKTsK
KyAgICBtX3dvcmtRdWV1ZSA9ICgqc193b3JrUXVldWVQb29sKVttX3dvcmtRdWV1ZUlkXTsKKyAg
ICBzX3dvcmtRdWV1ZUFjcXVpcmVDb3VudC0+YXQobV93b3JrUXVldWVJZCkrKzsKK30KKworSW1h
Z2VEZWNvZGVXb3JrZXI6On5JbWFnZURlY29kZVdvcmtlcigpCit7CisgICAgQVNTRVJUKG1fd29y
a2VyU3RhdHVzID09IEludmFpZGF0aW9uUmVhZHkpOworfQorCitib29sIEltYWdlRGVjb2RlV29y
a2VyOjpoYXNJbnZhbGlkYXRpb25CZWd1bigpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
d29ya2VyU3RhdHVzTXV0ZXgpOworICAgIGlmIChtX3dvcmtlclN0YXR1cyA9PSBJbnZhbGlkYXRp
b25CZWd1bikgeworICAgICAgICBtX3dvcmtlclN0YXR1cyA9IEludmFpZGF0aW9uUmVhZHk7Cisg
ICAgICAgIG1faW52YWxpZGF0aW9uUmVhZHkuc2lnbmFsKCk7CisgICAgfQorICAgIHJldHVybiBt
X3dvcmtlclN0YXR1cyAhPSBSdW5uaW5nOworfQorCit2b2lkIEltYWdlRGVjb2RlV29ya2VyOjpj
YW5jZWxhYmxlRnVuY3Rpb24oY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7Cisg
ICAgaWYgKFVOTElLRUxZKGhhc0ludmFsaWRhdGlvbkJlZ3VuKCkpKQorICAgICAgICByZXR1cm47
CisKKyAgICBmdW5jdGlvbigpOworfQorCit2b2lkIEltYWdlRGVjb2RlV29ya2VyOjpwb3N0VGFz
ayhjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBBU1NFUlQobV93b3Jr
ZXJTdGF0dXMgPT0gUnVubmluZyk7CisgICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKGJpbmQoJklt
YWdlRGVjb2RlV29ya2VyOjpjYW5jZWxhYmxlRnVuY3Rpb24sIHRoaXMsIGZ1bmN0aW9uKSk7Cit9
CisKK3ZvaWQgSW1hZ2VEZWNvZGVXb3JrZXI6OmludmFsaWRhdGUoKQoreworICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX3dvcmtlclN0YXR1c011dGV4KTsKKworICAgIGlmIChtX3dvcmtlclN0YXR1
cyAhPSBSdW5uaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3dvcmtlclN0YXR1cyA9IElu
dmFsaWRhdGlvbkJlZ3VuOworCisgICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKGJpbmQoJkltYWdl
RGVjb2RlV29ya2VyOjplbnN1cmVUZXJtaW5hdGUsIHRoaXMpKTsKKyAgICB3aGlsZSAobV93b3Jr
ZXJTdGF0dXMgIT0gSW52YWlkYXRpb25SZWFkeSkKKyAgICAgICAgbV9pbnZhbGlkYXRpb25SZWFk
eS53YWl0KG1fd29ya2VyU3RhdHVzTXV0ZXgpOworICAgIHNfd29ya1F1ZXVlQWNxdWlyZUNvdW50
LT5hdChtX3dvcmtRdWV1ZUlkKS0tOworfQorCit2b2lkIEltYWdlRGVjb2RlV29ya2VyOjplbnN1
cmVUZXJtaW5hdGUoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtlclN0YXR1c011
dGV4KTsKKyAgICBBU1NFUlQobV93b3JrZXJTdGF0dXMgIT0gUnVubmluZyk7CisgICAgbV93b3Jr
ZXJTdGF0dXMgPSBJbnZhaWRhdGlvblJlYWR5OworICAgIG1faW52YWxpZGF0aW9uUmVhZHkuc2ln
bmFsKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2RlV29ya2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZVdvcmtlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OTFkNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZVdvcmtlci5oCkBAIC0wLDAgKzEs
NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEltYWdlRGVjb2RlV29ya2VyX2gKKyNkZWZpbmUgSW1hZ2VEZWNvZGVXb3JrZXJf
aAorCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKworY2xhc3MgV29ya1F1ZXVlOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlRGVjb2RlV29ya2VyIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGVkPEltYWdlRGVjb2RlV29ya2VyPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW1hZ2VEZWNvZGVXb3JrZXI+IGFjcXVpcmVTaGFyZWRXb3JrZXIoKTsK
KworICAgIHZpcnR1YWwgfkltYWdlRGVjb2RlV29ya2VyKCk7CisKKyAgICB2b2lkIHBvc3RUYXNr
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKworcHJp
dmF0ZToKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplV29ya1F1ZXVlUG9vbCgpOworICAgIHN0
YXRpYyBpbnQgcXVldWVJZFdpdGhNaW5pbXVtQWNxdWlyZUNvdW50KCk7CisKKyAgICBJbWFnZURl
Y29kZVdvcmtlcigpOworCisgICAgYm9vbCBoYXNJbnZhbGlkYXRpb25CZWd1bigpOworCisgICAg
dm9pZCBjYW5jZWxhYmxlRnVuY3Rpb24oY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZv
aWQgZW5zdXJlVGVybWluYXRlKCk7CisKKyAgICBzdGF0aWMgVmVjdG9yPFdvcmtRdWV1ZSo+KiBz
X3dvcmtRdWV1ZVBvb2w7CisgICAgc3RhdGljIFZlY3RvcjxpbnQ+KiBzX3dvcmtRdWV1ZUFjcXVp
cmVDb3VudDsKKworICAgIGVudW0gV29ya2VyU3RhdHVzIHsgUnVubmluZywgSW52YWxpZGF0aW9u
QmVndW4sIEludmFpZGF0aW9uUmVhZHkgfTsKKyAgICBNdXRleCBtX3dvcmtlclN0YXR1c011dGV4
OworICAgIFdvcmtlclN0YXR1cyBtX3dvcmtlclN0YXR1czsKKyAgICBUaHJlYWRDb25kaXRpb24g
bV9pbnZhbGlkYXRpb25SZWFkeTsKKworICAgIGludCBtX3dvcmtRdWV1ZUlkOworICAgIFdvcmtR
dWV1ZSogbV93b3JrUXVldWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBJbWFnZURlY29kZVdvcmtlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKaW5kZXggNzVlZDVhMS4uMTA5OWRiNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAtMyw2
ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xs
YWJvcmEuY28udWs+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIElu
YworICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMTYgKzMzLDMwIEBA
CiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCiAKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9u
LmgiCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiUGFyYWxsZWxJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlIDx3
dGYvTnVtYmVyT2ZDb3Jlcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25z
dCB1bnNpZ25lZCBzX3Jlc29sdXRpb25UaHJlc2hvbGRGb3JQYXJhbGxlbCA9IDUxMiAqIDUxMjsK
KwogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiB1bnNpZ25lZCBJbWFn
ZVNvdXJjZTo6c19tYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2UgPSAxMDI0ICogMTAyNDsKICNlbmRp
ZgogCiBJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFs
cGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFB
bmRDb2xvclByb2ZpbGVPcHRpb24pCiAgICAgOiBtX2RlY29kZXIoMCkKKyAgICAsIG1fb2JzZXJ2
ZXIoMCkKKyAgICAsIG1fYWxwaGFPcHRpb24oYWxwaGFPcHRpb24pCisgICAgLCBtX2dhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uKGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQoreworfQorCitJ
bWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2VPYnNlcnZlciogb2JzZXJ2ZXIsIElt
YWdlU291cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQorICAgIDogbV9k
ZWNvZGVyKDApCisgICAgLCBtX29ic2VydmVyKG9ic2VydmVyKQogICAgICwgbV9hbHBoYU9wdGlv
bihhbHBoYU9wdGlvbikKICAgICAsIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24oZ2FtbWFB
bmRDb2xvclByb2ZpbGVPcHRpb24pCiB7CkBAIC01NSwxMSArNzAsMTUgQEAgSW1hZ2VTb3VyY2U6
On5JbWFnZVNvdXJjZSgpCiB2b2lkIEltYWdlU291cmNlOjpjbGVhcihib29sIGRlc3Ryb3lBbGws
IHNpemVfdCBjbGVhckJlZm9yZUZyYW1lLCBTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0
YVJlY2VpdmVkKQogewogICAgIGlmICghZGVzdHJveUFsbCkgewotICAgICAgICBpZiAobV9kZWNv
ZGVyKQorICAgICAgICAvLyBPbmx5IEdJRiBkZWNvZGVyIGltcGxlbWVudHMgY2xlYXJGcmFtZUJ1
ZmZlckNhY2hlLgorICAgICAgICBpZiAobV9kZWNvZGVyICYmICFtX3BhcmFsbGVsRGVjb2RlcikK
ICAgICAgICAgICAgIG1fZGVjb2Rlci0+Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKGNsZWFyQmVmb3Jl
RnJhbWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKG1fcGFyYWxsZWxEZWNv
ZGVyLmdldCgpKQorICAgICAgICBjbGVhclBhcmFsbGVsRGVjb2RlcigpOworCiAgICAgZGVsZXRl
IG1fZGVjb2RlcjsKICAgICBtX2RlY29kZXIgPSAwOwogICAgIGlmIChkYXRhKQpAQCAtNzcsNiAr
OTYsMTMgQEAgdm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgZXhhbWluZSB0aGUg
ZGF0YSBhbmQgaW5zdGFudGlhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGFwcHJvcHJpYXRlIGRlY29k
ZXIgcGx1Z2luLgogICAgIC8vIElmIGluc3VmZmljaWVudCBieXRlcyBhcmUgYXZhaWxhYmxlIHRv
IGRldGVybWluZSB0aGUgaW1hZ2UgdHlwZSwgbm8gZGVjb2RlciBwbHVnaW4gd2lsbCBiZQogICAg
IC8vIG1hZGUuCisKKyAgICBpZiAobV9wYXJhbGxlbERlY29kZXIuZ2V0KCkpIHsKKyAgICAgICAg
QVNTRVJUKG1fZGVjb2Rlcik7CisgICAgICAgIG1fcGFyYWxsZWxEZWNvZGVyLT5zZXREYXRhKGRh
dGEsIGFsbERhdGFSZWNlaXZlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAo
IW1fZGVjb2RlcikgewogICAgICAgICBtX2RlY29kZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFn
ZVNvdXJjZVB0cj4oSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEsIG1fYWxwaGFPcHRpb24sIG1f
Z2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pKTsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9E
T1dOX1NBTVBMSU5HKQpAQCAtOTEsMTEgKzExNywxNSBAQCB2b2lkIEltYWdlU291cmNlOjpzZXRE
YXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAKIFN0cmluZyBJ
bWFnZVNvdXJjZTo6ZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdAogeworICAgIGlmIChtX3BhcmFs
bGVsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIG1fcGFyYWxsZWxEZWNvZGVyLT5maWxl
bmFtZUV4dGVuc2lvbigpOwogICAgIHJldHVybiBtX2RlY29kZXIgPyBtX2RlY29kZXItPmZpbGVu
YW1lRXh0ZW5zaW9uKCkgOiBTdHJpbmcoKTsKIH0KIAogYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXpl
QXZhaWxhYmxlKCkKIHsKKyAgICBpZiAobV9wYXJhbGxlbERlY29kZXIuZ2V0KCkpCisgICAgICAg
IHJldHVybiB0cnVlOwogICAgIHJldHVybiBtX2RlY29kZXIgJiYgbV9kZWNvZGVyLT5pc1NpemVB
dmFpbGFibGUoKTsKIH0KIApAQCAtMTA1LDYgKzEzNSw4IEBAIEludFNpemUgSW1hZ2VTb3VyY2U6
OnNpemUoUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtIHNob3VsZFJlc3BlY3RPcmllbnRhdGlv
bikKICAgICBpZiAoc2hvdWxkUmVzcGVjdE9yaWVudGF0aW9uID09IFJlc3BlY3RJbWFnZU9yaWVu
dGF0aW9uKQogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogCisgICAgaWYgKG1fcGFyYWxsZWxE
ZWNvZGVyLmdldCgpKQorICAgICAgICByZXR1cm4gbV9wYXJhbGxlbERlY29kZXItPnNpemUoKTsK
ICAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5zaXplKCkgOiBJbnRTaXplKCk7CiB9
CiAKQEAgLTExNCw2ICsxNDYsOCBAQCBJbnRTaXplIEltYWdlU291cmNlOjpmcmFtZVNpemVBdElu
ZGV4KHNpemVfdCBpbmRleCwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtCiAgICAgaWYgKHNo
b3VsZFJlc3BlY3RPcmllbnRhdGlvbiA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKICAgICAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIAorICAgIGlmIChtX3BhcmFsbGVsRGVjb2Rlci5nZXQoKSkK
KyAgICAgICAgcmV0dXJuIG1fcGFyYWxsZWxEZWNvZGVyLT5zaXplKCk7CiAgICAgcmV0dXJuIG1f
ZGVjb2RlciA/IG1fZGVjb2Rlci0+ZnJhbWVTaXplQXRJbmRleChpbmRleCkgOiBJbnRTaXplKCk7
CiB9CiAKQEAgLTEyOSw0MiArMTYzLDE0OCBAQCBzaXplX3QgSW1hZ2VTb3VyY2U6OmJ5dGVzRGVj
b2RlZFRvRGV0ZXJtaW5lUHJvcGVydGllcygpIGNvbnN0CiAKIGludCBJbWFnZVNvdXJjZTo6cmVw
ZXRpdGlvbkNvdW50KCkKIHsKKyAgICBpZiAobV9wYXJhbGxlbERlY29kZXIuZ2V0KCkpCisgICAg
ICAgIHJldHVybiBjQW5pbWF0aW9uTm9uZTsKICAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNv
ZGVyLT5yZXBldGl0aW9uQ291bnQoKSA6IGNBbmltYXRpb25Ob25lOwogfQogCiBzaXplX3QgSW1h
Z2VTb3VyY2U6OmZyYW1lQ291bnQoKSBjb25zdAogeworICAgIGlmIChtX3BhcmFsbGVsRGVjb2Rl
ci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgcmV0dXJuIG1fZGVjb2RlciA/IG1fZGVj
b2Rlci0+ZnJhbWVDb3VudCgpIDogMDsKIH0KIAotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6
OmNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCitJbWFnZUZyYW1lRGF0YSBJbWFnZVNv
dXJjZTo6cmVxdWVzdEZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgsIGJvb2wgcmV0YWluZWRNb2Rl
UmVuZGVyaW5nKQogewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1cm4gMDsKKyAg
ICBBU1NFUlQoIShyZXRhaW5lZE1vZGVSZW5kZXJpbmcgJiYgaW5kZXgpKTsKKyAgICBBU1NFUlQo
IShyZXRhaW5lZE1vZGVSZW5kZXJpbmcgJiYgIW1fb2JzZXJ2ZXIpKTsKIAotICAgIEltYWdlRnJh
bWUqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKLSAgICBp
ZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkp
Ci0gICAgICAgIHJldHVybiAwOworICAgIGlmICghbV9kZWNvZGVyKSB7CisgICAgICAgIG1fb2Jz
ZXJ2ZXItPmRpZFJlY2VpdmVGcmFtZUF0SW5kZXgoaW5kZXgsIEltYWdlRnJhbWVEYXRhKCkpOwor
ICAgICAgICByZXR1cm4gSW1hZ2VGcmFtZURhdGEoKTsKKyAgICB9CiAKLSAgICAvLyBaZXJvLWhl
aWdodCBpbWFnZXMgY2FuIGNhdXNlIHByb2JsZW1zIGZvciBzb21lIHBvcnRzLiAgSWYgd2UgaGF2
ZSBhbgotICAgIC8vIGVtcHR5IGltYWdlIGRpbWVuc2lvbiwganVzdCBiYWlsLgotICAgIGlmIChz
aXplKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIXJldGFpbmVkTW9k
ZVJlbmRlcmluZyB8fCAhbV9vYnNlcnZlciB8fCBmaXJzdEZyYW1lSXNDb21wbGV0ZSgpKQorICAg
ICAgICByZXR1cm4gc2VyaWFsRGVjb2RlKGluZGV4KTsKKworICAgIGlmIChzaG91bGREZWNvZGVQ
YXJhbGxlbCgpKSB7CisgICAgICAgIHBhcmFsbGVsRGVjb2RlKCk7CisgICAgICAgIHJldHVybiBJ
bWFnZUZyYW1lRGF0YSgpOworICAgIH0KKworICAgIHJldHVybiBzZXJpYWxEZWNvZGUoaW5kZXgp
OworfQorCitib29sIEltYWdlU291cmNlOjpzaG91bGREZWNvZGVQYXJhbGxlbCgpCit7CisgICAg
QVNTRVJUKG1fZGVjb2Rlcik7CisKKyAgICBpZiAobV9wYXJhbGxlbERlY29kZXIuZ2V0KCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3Jl
cygpID09IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cmluZyBmaWxlRXh0ID0g
ZmlsZW5hbWVFeHRlbnNpb24oKTsKKyAgICBpZiAoZmlsZUV4dCA9PSAiaWNvIiB8fCBmaWxlRXh0
ID09ICJnaWYiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWlzU2l6ZUF2YWls
YWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc2l6ZSgpLmFyZWEoKSA8
IHNfcmVzb2x1dGlvblRocmVzaG9sZEZvclBhcmFsbGVsKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6Zmlyc3RGcmFtZUlz
Q29tcGxldGUoKQoreworICAgIEFTU0VSVChtX2RlY29kZXIpOworICAgIEltYWdlRnJhbWUqIGlt
YWdlRnJhbWUgPSAwOworICAgIGlmICghbV9wYXJhbGxlbERlY29kZXIpCisgICAgICAgIGltYWdl
RnJhbWUgPSBtX2RlY29kZXItPmZpcnN0SW1hZ2VGcmFtZVdpdGhvdXREZWNvZGUoKTsKKyAgICBy
ZXR1cm4gaW1hZ2VGcmFtZSAmJiBmcmFtZUlzQ29tcGxldGVBdEluZGV4KGltYWdlRnJhbWUpOwor
fQorCit2b2lkIEltYWdlU291cmNlOjpwYXJhbGxlbERlY29kZSgpCit7CisgICAgY3JlYXRlUGFy
YWxsZWxEZWNvZGVySWZOZWVkZWQoKTsKKyAgICBtX3BhcmFsbGVsRGVjb2Rlci0+ZGVjb2RlKCk7
Cit9CisKK3ZvaWQgSW1hZ2VTb3VyY2U6OmRpZERlY29kZShjb25zdCBJbWFnZUZyYW1lRGF0YSYg
aW1hZ2VGcmFtZURhdGEpCit7CisgICAgQVNTRVJUKG1fb2JzZXJ2ZXIpOworICAgIG1fb2JzZXJ2
ZXItPmRpZFJlY2VpdmVGcmFtZUF0SW5kZXgoMCwgaW1hZ2VGcmFtZURhdGEsIHRydWUpOwogCi0g
ICAgLy8gUmV0dXJuIHRoZSBidWZmZXIgY29udGVudHMgYXMgYSBuYXRpdmUgaW1hZ2UuICBGb3Ig
c29tZSBwb3J0cywgdGhlIGRhdGEKLSAgICAvLyBpcyBhbHJlYWR5IGluIGEgbmF0aXZlIGNvbnRh
aW5lciwgYW5kIHRoaXMganVzdCBpbmNyZW1lbnRzIGl0cyByZWZjb3VudC4KLSAgICByZXR1cm4g
YnVmZmVyLT5hc05ld05hdGl2ZUltYWdlKCk7CisgICAgaWYgKGltYWdlRnJhbWVEYXRhLm1faXND
b21wbGV0ZSkKKyAgICAgICAgY2xlYXJQYXJhbGxlbERlY29kZXIoKTsKIH0KIAotZmxvYXQgSW1h
Z2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKK3ZvaWQgSW1hZ2VT
b3VyY2U6OmNyZWF0ZVBhcmFsbGVsRGVjb2RlcklmTmVlZGVkKCkKIHsKKyAgICBpZiAoIW1fcGFy
YWxsZWxEZWNvZGVyKQorICAgICAgICBtX3BhcmFsbGVsRGVjb2RlciA9IGFkb3B0UmVmKG5ldyBQ
YXJhbGxlbEltYWdlRGVjb2Rlcih0aGlzLCBtX2RlY29kZXIpKTsKK30KKwordm9pZCBJbWFnZVNv
dXJjZTo6Y2xlYXJQYXJhbGxlbERlY29kZXIoKQoreworICAgIEFTU0VSVChtX29ic2VydmVyKTsK
KyAgICBtX3BhcmFsbGVsRGVjb2Rlci0+aW52YWxpZGF0ZSgpOworICAgIG1fcGFyYWxsZWxEZWNv
ZGVyLmNsZWFyKCk7Cit9CisKK0ltYWdlRnJhbWVEYXRhIEltYWdlU291cmNlOjpzZXJpYWxEZWNv
ZGUoc2l6ZV90IGluZGV4KQoreworICAgIGJvb2wgcGFyYWxsZWxEZWNvZGVyQ2FuY2VsZWQgPSBm
YWxzZTsKKyAgICAvLyBSZW5kZXJJbWFnZSBhbmQgQ2FudmFzRWxlbWVudCBjYW4gc2hhcmUgdGhl
IHNhbWUgQ2FjaGVkSW1hZ2UuCisgICAgaWYgKG1fcGFyYWxsZWxEZWNvZGVyLmdldCgpKSB7Cisg
ICAgICAgIEFTU0VSVChtX29ic2VydmVyKTsKKyAgICAgICAgY2xlYXJQYXJhbGxlbERlY29kZXIo
KTsKKyAgICAgICAgcGFyYWxsZWxEZWNvZGVyQ2FuY2VsZWQgPSB0cnVlOworICAgIH0KKworICAg
IEltYWdlRnJhbWVEYXRhIGltYWdlRnJhbWVEYXRhID0gY3JlYXRlRnJhbWVBdEluZGV4KGluZGV4
KTsKKworICAgIGlmIChtX29ic2VydmVyKQorICAgICAgICBtX29ic2VydmVyLT5kaWRSZWNlaXZl
RnJhbWVBdEluZGV4KGluZGV4LCBpbWFnZUZyYW1lRGF0YSwgZmFsc2UgLyogcmV0YWluZWRNb2Rl
ICovLCBwYXJhbGxlbERlY29kZXJDYW5jZWxlZCk7CisKKyAgICByZXR1cm4gaW1hZ2VGcmFtZURh
dGE7Cit9CisKK0ltYWdlRnJhbWVEYXRhIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgo
c2l6ZV90IGluZGV4KQoreworICAgIEFTU0VSVCghbV9wYXJhbGxlbERlY29kZXIpOwogICAgIGlm
ICghbV9kZWNvZGVyKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIEltYWdlRnJh
bWVEYXRhKCk7CiAKICAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVm
ZmVyQXRJbmRleChpbmRleCk7CiAgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9
PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIEltYWdlRnJhbWVEYXRhKCk7CisKKyAgICBJbWFnZUZyYW1lRGF0YSBpbWFnZUZyYW1lRGF0
YTsKKworICAgIC8vIFplcm8taGVpZ2h0IGltYWdlcyBjYW4gY2F1c2UgcHJvYmxlbXMgZm9yIHNv
bWUgcG9ydHMuICBJZiB3ZSBoYXZlIGFuCisgICAgLy8gZW1wdHkgaW1hZ2UgZGltZW5zaW9uLCBq
dXN0IGJhaWwuCisgICAgaWYgKCFzaXplKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIFJldHVy
biB0aGUgYnVmZmVyIGNvbnRlbnRzIGFzIGEgbmF0aXZlIGltYWdlLiBGb3Igc29tZSBwb3J0cywg
dGhlIGRhdGEKKyAgICAgICAgLy8gaXMgYWxyZWFkeSBpbiBhIG5hdGl2ZSBjb250YWluZXIsIGFu
ZCB0aGlzIGp1c3QgaW5jcmVtZW50cyBpdHMgcmVmY291bnQuCisgICAgICAgIGltYWdlRnJhbWVE
YXRhLm1fZnJhbWUgPSBidWZmZXItPmFzTmV3TmF0aXZlSW1hZ2UoKTsKKyAgICB9CiAKKyAgICBp
bWFnZUZyYW1lRGF0YS5tX29yaWVudGF0aW9uID0gb3JpZW50YXRpb25BdEluZGV4KGJ1ZmZlcik7
CisgICAgaW1hZ2VGcmFtZURhdGEubV9pc0NvbXBsZXRlID0gZnJhbWVJc0NvbXBsZXRlQXRJbmRl
eChidWZmZXIpOworICAgIGlmIChyZXBldGl0aW9uQ291bnQoKSAhPSBjQW5pbWF0aW9uTm9uZSkK
KyAgICAgICAgaW1hZ2VGcmFtZURhdGEubV9kdXJhdGlvbiA9IGZyYW1lRHVyYXRpb25BdEluZGV4
KGJ1ZmZlcik7CisgICAgaW1hZ2VGcmFtZURhdGEubV9oYXNBbHBoYSA9IGZyYW1lSGFzQWxwaGFB
dEluZGV4KGJ1ZmZlcik7CisKKyAgICByZXR1cm4gaW1hZ2VGcmFtZURhdGE7Cit9CisKK2Zsb2F0
IEltYWdlU291cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChJbWFnZUZyYW1lKiBidWZmZXIpCit7
CiAgICAgLy8gTWFueSBhbm5veWluZyBhZHMgc3BlY2lmeSBhIDAgZHVyYXRpb24gdG8gbWFrZSBh
biBpbWFnZSBmbGFzaCBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLgogICAgIC8vIFdlIGZvbGxvdyBG
aXJlZm94J3MgYmVoYXZpb3IgYW5kIHVzZSBhIGR1cmF0aW9uIG9mIDEwMCBtcyBmb3IgYW55IGZy
YW1lcyB0aGF0IHNwZWNpZnkKICAgICAvLyBhIGR1cmF0aW9uIG9mIDw9IDEwIG1zLiBTZWUgPHJk
YXI6Ly9wcm9ibGVtLzc2ODkzMDA+IGFuZCA8aHR0cDovL3dlYmtpdC5vcmcvYi8zNjA4Mj4KQEAg
LTE3NSwxNCArMzE1LDE0IEBAIGZsb2F0IEltYWdlU291cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRl
eChzaXplX3QgaW5kZXgpCiAgICAgcmV0dXJuIGR1cmF0aW9uOwogfQogCi1JbWFnZU9yaWVudGF0
aW9uIEltYWdlU291cmNlOjpvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAor
SW1hZ2VPcmllbnRhdGlvbiBJbWFnZVNvdXJjZTo6b3JpZW50YXRpb25BdEluZGV4KEltYWdlRnJh
bWUqKSBjb25zdAogewogICAgIC8vIFRoZSBKUEVHIGFuZCBUSUZGIGRlY29kZXJzIG5lZWQgdG8g
YmUgdGF1Z2h0IGhvdyB0byByZWFkIEVYSUYsIFhNUCwgb3IgSVBUQyBkYXRhLgogICAgIG5vdElt
cGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIERlZmF1bHRJbWFnZU9yaWVudGF0aW9uOwogfQogCi1i
b29sIEltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpCitib29s
IEltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleChJbWFnZUZyYW1lKiBidWZmZXIpCiB7
CiAgICAgLy8gV2hlbiBhIGZyYW1lIGhhcyBub3QgZmluaXNoZWQgZGVjb2RpbmcsIGFsd2F5cyBt
YXJrIGl0IGFzIGhhdmluZyBhbHBoYS4KICAgICAvLyBQb3J0cyB0aGF0IGNoZWNrIHRoZSByZXN1
bHQgb2YgdGhpcyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlaXIKQEAgLTE5MCwxNyArMzMwLDEy
IEBAIGJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkK
ICAgICAvLyBibGFjay4KICAgICAvLyBUT0RPOiBQZXJoYXBzIHdlIHNob3VsZCBlbnN1cmUgdGhh
dCBlYWNoIGluZGl2aWR1YWwgZGVjb2RlciByZXR1cm5zIHRydWUKICAgICAvLyBpbiB0aGlzIGNh
c2UuCi0gICAgcmV0dXJuICFmcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4KQotICAgICAgICB8
fCBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCktPmhhc0FscGhhKCk7CisgICAg
cmV0dXJuICFmcmFtZUlzQ29tcGxldGVBdEluZGV4KGJ1ZmZlcikgfHwgYnVmZmVyLT5oYXNBbHBo
YSgpOwogfQogCi1ib29sIEltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVf
dCBpbmRleCkKK2Jvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoSW1hZ2VG
cmFtZSogYnVmZmVyKQogewotICAgIGlmICghbV9kZWNvZGVyKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJ
bmRleChpbmRleCk7Ci0gICAgcmV0dXJuIGJ1ZmZlciAmJiBidWZmZXItPnN0YXR1cygpID09IElt
YWdlRnJhbWU6OkZyYW1lQ29tcGxldGU7CisgICAgcmV0dXJuIGJ1ZmZlci0+c3RhdHVzKCkgPT0g
SW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKaW5kZXggOTEzYTNlNy4uYzQyNzllYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC0x
LDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
Ny0yMDA4IFRvcmNoIE1vYmlsZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkg
MTAwIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjgsNiArMjksOSBAQAogI2RlZmluZSBJbWFnZVNvdXJjZV9oCiAKICNpbmNsdWRl
ICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaWYgIVVTRShDRykKKyNpbmNsdWRlICJQYXJhbGxlbElt
YWdlRGVjb2Rlck9ic2VydmVyLmgiCisjZW5kaWYKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC01Nyw5ICs2MSwxNiBAQCBjbGFzcyBO
YXRpdmVJbWFnZVNraWE7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmICFVU0UoQ0cpCitj
bGFzcyBJbWFnZUZyYW1lOworI2VuZGlmCiBjbGFzcyBJbWFnZU9yaWVudGF0aW9uOworY2xhc3Mg
SW1hZ2VTb3VyY2VPYnNlcnZlcjsKIGNsYXNzIEludFBvaW50OwogY2xhc3MgSW50U2l6ZTsKKyNp
ZiAhVVNFKENHKQorY2xhc3MgUGFyYWxsZWxJbWFnZURlY29kZXI7CisjZW5kaWYKIGNsYXNzIFNo
YXJlZEJ1ZmZlcjsKIAogI2lmIFVTRShDRykKQEAgLTk0LDYgKzEwNSwzMiBAQCB0eXBlZGVmIFFJ
bWFnZSogTmF0aXZlSW1hZ2VQdHI7CiAjZW5kaWYKICNlbmRpZgogCisvLyA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEltYWdlRnJhbWVEYXRhIENs
YXNzCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
Kworc3RydWN0IEltYWdlRnJhbWVEYXRhIHsKK3B1YmxpYzoKKyAgICBJbWFnZUZyYW1lRGF0YSgp
CisgICAgICAgIDogbV9mcmFtZSgwKQorICAgICAgICAsIG1fb3JpZW50YXRpb24oRGVmYXVsdElt
YWdlT3JpZW50YXRpb24pCisgICAgICAgICwgbV9kdXJhdGlvbigwKQorICAgICAgICAsIG1faXND
b21wbGV0ZShmYWxzZSkKKyAgICAgICAgLCBtX2hhc0FscGhhKHRydWUpCisgICAgeworICAgIH0K
KworICAgIE5hdGl2ZUltYWdlUHRyIG1fZnJhbWU7CisgICAgSW1hZ2VPcmllbnRhdGlvbiBtX29y
aWVudGF0aW9uOworICAgIGZsb2F0IG1fZHVyYXRpb247CisgICAgYm9vbCBtX2lzQ29tcGxldGUg
OiAxOworICAgIGJvb2wgbV9oYXNBbHBoYSA6IDE7Cit9OworCisvLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBCaXRtYXBJbWFnZSBDbGFzcwor
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiAv
LyBSaWdodCBub3cgR0lGcyBhcmUgdGhlIG9ubHkgcmVjb2duaXplZCBpbWFnZSBmb3JtYXQgdGhh
dCBzdXBwb3J0cyBhbmltYXRpb24uCiAvLyBUaGUgYW5pbWF0aW9uIHN5c3RlbSBhbmQgdGhlIGNv
bnN0YW50cyBiZWxvdyBhcmUgZGVzaWduZWQgd2l0aCB0aGlzIGluIG1pbmQuCiAvLyBHSUZzIGhh
dmUgYW4gb3B0aW9uYWwgMTYtYml0IHVuc2lnbmVkIGxvb3AgY291bnQgdGhhdCBkZXNjcmliZXMg
aG93IGFuCkBAIC0xMTIsNyArMTQ5LDExIEBAIGNvbnN0IGludCBjQW5pbWF0aW9uTG9vcE9uY2Ug
PSAwOwogY29uc3QgaW50IGNBbmltYXRpb25Mb29wSW5maW5pdGUgPSAtMTsKIGNvbnN0IGludCBj
QW5pbWF0aW9uTm9uZSA9IC0yOwogCi1jbGFzcyBJbWFnZVNvdXJjZSB7CitjbGFzcyBJbWFnZVNv
dXJjZQorI2lmICFVU0UoQ0cpCisgICAgOiBwdWJsaWMgUGFyYWxsZWxJbWFnZURlY29kZXJPYnNl
cnZlcgorI2VuZGlmCit7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VTb3VyY2UpOwog
cHVibGljOgogICAgIGVudW0gQWxwaGFPcHRpb24gewpAQCAtMTMyLDcgKzE3Myw4IEBAIHB1Ymxp
YzoKICAgICB9OwogI2VuZGlmCiAKLSAgICBJbWFnZVNvdXJjZShBbHBoYU9wdGlvbiBhbHBoYU9w
dGlvbiA9IEFscGhhUHJlbXVsdGlwbGllZCwgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2Ft
bWFBbmRDb2xvclByb2ZpbGVPcHRpb24gPSBHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpOwor
ICAgIEltYWdlU291cmNlKEFscGhhT3B0aW9uID0gQWxwaGFQcmVtdWx0aXBsaWVkLCBHYW1tYUFu
ZENvbG9yUHJvZmlsZU9wdGlvbiA9IEdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCk7CisgICAg
SW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2VPYnNlcnZlciosIEFscGhhT3B0aW9uID0gQWxwaGFQcmVt
dWx0aXBsaWVkLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiA9IEdhbW1hQW5kQ29sb3JQcm9m
aWxlQXBwbGllZCk7CiAgICAgfkltYWdlU291cmNlKCk7CiAKICAgICAvLyBUZWxscyB0aGUgSW1h
Z2VTb3VyY2UgdGhhdCB0aGUgSW1hZ2Ugbm8gbG9uZ2VyIGNhcmVzIGFib3V0IGRlY29kZWQgZnJh
bWUKQEAgLTE3OCwyMiArMjIwLDUwIEBAIHB1YmxpYzoKIAogICAgIHNpemVfdCBmcmFtZUNvdW50
KCkgY29uc3Q7CiAKLSAgICAvLyBDYWxsZXJzIHNob3VsZCBub3QgY2FsbCB0aGlzIGFmdGVyIGNh
bGxpbmcgY2xlYXIoKSB3aXRoIGEgaGlnaGVyIGluZGV4OworICAgIC8vIE5PVEU6IENhbGxlcnMg
c2hvdWxkIG5vdCBjYWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyBjbGVhcigpIHdpdGggYSBoaWdoZXIg
aW5kZXg7CiAgICAgLy8gc2VlIGNvbW1lbnRzIG9uIGNsZWFyKCkgYWJvdmUuCi0gICAgTmF0aXZl
SW1hZ2VQdHIgY3JlYXRlRnJhbWVBdEluZGV4KHNpemVfdCk7CisgICAgLy8gTk9URTogSWYgSW1h
Z2VTb3VyY2UgaGFzIEltYWdlU291cmNlT2JzZXJ2ZXIsIHRoaXMgbWV0aG9kIHNlbmRzIHRoZSBy
ZXN1bHQgdmlhIGRpZERlY29kZSgpLgorICAgIC8vIE90aGVyd2lzZSwgdGhpcyBtZXRob2QgcmV0
dXJucyB0aGUgcmVzdWx0LiBlLmcuIEdyYXBoaWNzQ29udGV4dDNECisgICAgSW1hZ2VGcmFtZURh
dGEgcmVxdWVzdEZyYW1lQXRJbmRleChzaXplX3QsIGJvb2wgcmV0YWluZWRNb2RlUmVuZGVyaW5n
ID0gZmFsc2UpOwogCisjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAg
ICBzdGF0aWMgdW5zaWduZWQgbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKCkgeyByZXR1cm4gc19t
YXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2U7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRNYXhQaXhlbHNQ
ZXJEZWNvZGVkSW1hZ2UodW5zaWduZWQgbWF4UGl4ZWxzKSB7IHNfbWF4UGl4ZWxzUGVyRGVjb2Rl
ZEltYWdlID0gbWF4UGl4ZWxzOyB9CisjZW5kaWYKKworI2lmICFVU0UoQ0cpCisgICAgLy8gUGFy
YWxsZWxJbWFnZURlY29kZXJPYnNlcnZlcgorICAgIHZpcnR1YWwgdm9pZCBkaWREZWNvZGUoY29u
c3QgSW1hZ2VGcmFtZURhdGEmKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEltYWdlRnJhbWVE
YXRhIGNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QpOworI2lmIFVTRShDRykKICAgICBmbG9hdCBm
cmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QpOwogICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5k
ZXgoc2l6ZV90KTsgLy8gV2hldGhlciBvciBub3QgdGhlIGZyYW1lIGFjdHVhbGx5IHVzZWQgYW55
IGFscGhhLgogICAgIGJvb2wgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QpOyAvLyBXaGV0
aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgY29tcGxldGVseSBkZWNvZGVkLgogICAgIEltYWdlT3Jp
ZW50YXRpb24gb3JpZW50YXRpb25BdEluZGV4KHNpemVfdCkgY29uc3Q7IC8vIEVYSUYgaW1hZ2Ug
b3JpZW50YXRpb24KKyNlbHNlCisgICAgZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoSW1hZ2VG
cmFtZSopOworICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoSW1hZ2VGcmFtZSopOworICAg
IGJvb2wgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChJbWFnZUZyYW1lKik7CisgICAgSW1hZ2VPcmll
bnRhdGlvbiBvcmllbnRhdGlvbkF0SW5kZXgoSW1hZ2VGcmFtZSopIGNvbnN0OworI2VuZGlmCiAK
LSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgIHN0YXRpYyB1bnNp
Z25lZCBtYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2UoKSB7IHJldHVybiBzX21heFBpeGVsc1BlckRl
Y29kZWRJbWFnZTsgfQotICAgIHN0YXRpYyB2b2lkIHNldE1heFBpeGVsc1BlckRlY29kZWRJbWFn
ZSh1bnNpZ25lZCBtYXhQaXhlbHMpIHsgc19tYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2UgPSBtYXhQ
aXhlbHM7IH0KKyNpZiAhVVNFKENHKQorICAgIHZvaWQgY3JlYXRlUGFyYWxsZWxEZWNvZGVySWZO
ZWVkZWQoKTsKKyAgICB2b2lkIGNsZWFyUGFyYWxsZWxEZWNvZGVyKCk7CisgICAgYm9vbCBzaG91
bGREZWNvZGVQYXJhbGxlbCgpOworICAgIGJvb2wgZmlyc3RGcmFtZUlzQ29tcGxldGUoKTsKKyAg
ICB2b2lkIHBhcmFsbGVsRGVjb2RlKCk7CisgICAgSW1hZ2VGcmFtZURhdGEgc2VyaWFsRGVjb2Rl
KHNpemVfdCk7CisKKyAgICBSZWZQdHI8UGFyYWxsZWxJbWFnZURlY29kZXI+IG1fcGFyYWxsZWxE
ZWNvZGVyOwogI2VuZGlmCiAKLXByaXZhdGU6CiAgICAgTmF0aXZlSW1hZ2VTb3VyY2VQdHIgbV9k
ZWNvZGVyOworICAgIEltYWdlU291cmNlT2JzZXJ2ZXIqIG1fb2JzZXJ2ZXI7CisKICAgICBBbHBo
YU9wdGlvbiBtX2FscGhhT3B0aW9uOwogICAgIEdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIG1f
Z2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb247CiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9X
Tl9TQU1QTElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlT2JzZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlT2JzZXJ2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5kMzIwNzgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2VPYnNlcnZlci5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEltYWdlU291cmNlT2JzZXJ2ZXJfaAorI2RlZmluZSBJbWFnZVNvdXJjZU9i
c2VydmVyX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUZyYW1lRGF0YTsK
KworLy8gSW50ZXJmYWNlIGZvciBub3RpZmljYXRpb24gYWJvdXQgY2hhbmdlcyB0byBhbiBJbWFn
ZVNvdXJjZSwgaW5jbHVkaW5nIGRlY29kaW5nLgorY2xhc3MgSW1hZ2VTb3VyY2VPYnNlcnZlciB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVGcmFtZUF0SW5kZXgoc2l6ZV90
LCBjb25zdCBJbWFnZUZyYW1lRGF0YSYsIGJvb2wgcmV0YWluZWQgPSBmYWxzZSwgYm9vbCBwYXJh
bGxlbERlY29kZXJDYW5jZWxlZCA9IGZhbHNlKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIH5JbWFnZVNvdXJjZU9ic2VydmVyKCkgeyB9Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURlY29k
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURl
Y29kZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiOWNmYWYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxl
bEltYWdlRGVjb2Rlci5jcHAKQEAgLTAsMCArMSwzMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQ29tcGFueSAxMDAgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXJhbGxlbEltYWdlRGVjb2Rlci5oIgorCisjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25BcnJheVB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Ry
dWN0IFBhcmFsbGVsRnJhbWVEYXRhOwordm9pZCBkaWREZWNvZGVUYXNrQ2FsbGJhY2soUGFyYWxs
ZWxGcmFtZURhdGEqKTsKK3N0YXRpYyBJbWFnZUZyYW1lRGF0YSBjcmVhdGVJbWFnZUZyYW1lRGF0
YShQYXJhbGxlbEZyYW1lRGF0YSopOworCitQYXJhbGxlbEltYWdlRGVjb2Rlcjo6UGFyYWxsZWxJ
bWFnZURlY29kZXIoUGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZlciogb2JzZXJ2ZXIsIEltYWdl
RGVjb2RlciogZGVjb2RlcikKKyAgICA6IG1fb2JzZXJ2ZXIob2JzZXJ2ZXIpCisgICAgLCBtX2lz
QWxsRGF0YVJlY2VpdmVkKGZhbHNlKQorICAgICwgbV9ieXRlc09mRGF0YUNvbnN1bWVkKDApCisg
ICAgLCBtX2ltYWdlRGVjb2RlcigwKQoreworICAgIGluaXRpYWxpemUoZGVjb2Rlcik7Cit9CisK
K1BhcmFsbGVsSW1hZ2VEZWNvZGVyOjp+UGFyYWxsZWxJbWFnZURlY29kZXIoKQoreworICAgIEFT
U0VSVCghdmFsaWQoKSk7Cit9CisKK3ZvaWQgUGFyYWxsZWxJbWFnZURlY29kZXI6OmluaXRpYWxp
emUoSW1hZ2VEZWNvZGVyKiBkZWNvZGVyKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgQVNTRVJUKGRlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpICYmICFkZWNvZGVyLT5zaXpl
KCkuaXNFbXB0eSgpKTsKKworICAgIG1fc2l6ZSA9IGRlY29kZXItPnNpemUoKTsKKyAgICBtX2Zp
bGVuYW1lRXh0ZW5zaW9uID0gZGVjb2Rlci0+ZmlsZW5hbWVFeHRlbnNpb24oKTsKKworICAgIHNl
dERhdGEoZGVjb2Rlci0+ZGF0YSgpLCBkZWNvZGVyLT5pc0FsbERhdGFSZWNlaXZlZCgpKTsKKyAg
ICBtX2J5dGVzT2ZEYXRhQ29uc3VtZWQgPSAwOworCisgICAgbV9pbWFnZUZyYW1lLnNldFNpemUo
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisKKyAgICBtX2ltYWdlRGVjb2RlciA9
IGRlY29kZXI7CisgICAgbV9pbWFnZURlY29kZXItPnNldERhdGEoMCwgZmFsc2UpOworICAgIC8v
IEFmdGVyIHRoaXMgbGluZSwgaXQgaXMgaWxsZWdhbCBmb3IgdGhlIG1haW4gdGhyZWFkIHRvIGFj
Y2VzcyBtX2ltYWdlRGVjb2Rlci4KKworICAgIC8vIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBsaW5l
IGJlY2F1c2UgSW1hZ2VEZWNvZGVXb3JrZXIgZ3VhcmFudGVlcworICAgIC8vIHRoZSB2aXNpYmls
aXR5IG9mIG1lbWJlcnMgaW4gdGhlIHRhc2sgdGhyZWFkLgorICAgIG1fZGVjb2RlV29ya2VyID0g
SW1hZ2VEZWNvZGVXb3JrZXI6OmFjcXVpcmVTaGFyZWRXb3JrZXIoKTsKK30KKwordm9pZCBQYXJh
bGxlbEltYWdlRGVjb2Rlcjo6aW52YWxpZGF0ZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBBU1NFUlQobV9pbWFnZURlY29kZXIpOworCisgICAgaWYgKG1fZGVjb2RlV29y
a2VyLmdldCgpKSB7CisgICAgICAgIG1fZGVjb2RlV29ya2VyLT5pbnZhbGlkYXRlKCk7CisgICAg
ICAgIG1fZGVjb2RlV29ya2VyLmNsZWFyKCk7CisgICAgfQorICAgIC8vIFRoZSBtYWluIHRocmVh
ZCBjYW4gdXNlIG1faW1hZ2VEZWNvZGVyIGJlY2F1c2Ugb3RoZXIgdGhyZWFkcyBkbyBub3QgYWNj
ZXNzIG1faW1hZ2VEZWNvZGVyIGFmdGVyIHRoaXMgbGluZS4KKworICAgIG1faW1hZ2VEZWNvZGVy
LT5zZXREYXRhKG1fZGF0YS5nZXQoKSwgbV9pc0FsbERhdGFSZWNlaXZlZCk7CisKKyAgICBtX3Np
emUgPSBJbnRTaXplKCk7CisgICAgbV9maWxlbmFtZUV4dGVuc2lvbiA9ICIiOworCisgICAgbV9p
c0FsbERhdGFSZWNlaXZlZCA9IGZhbHNlOworICAgIG1fZGF0YS5jbGVhcigpOworICAgIG1fYnl0
ZXNPZkRhdGFDb25zdW1lZCA9IDA7CisKKyAgICBtX2ltYWdlRnJhbWUgPSBJbWFnZUZyYW1lKCk7
CisKKyAgICBpZiAobV9kYXRhRm9yVGFzay5nZXQoKSkKKyAgICAgICAgbV9kYXRhRm9yVGFzay5j
bGVhcigpOworCisgICAgbV9pbWFnZURlY29kZXIgPSAwOworfQorCit2b2lkIFBhcmFsbGVsSW1h
Z2VEZWNvZGVyOjpzZXREYXRhKFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2
ZWQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX2lzQWxsRGF0YVJlY2Vp
dmVkID0gYWxsRGF0YVJlY2VpdmVkOworICAgIG1fZGF0YSA9IGRhdGE7Cit9CisKK3ZvaWQgUGFy
YWxsZWxJbWFnZURlY29kZXI6OmRlY29kZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBBU1NFUlQobV9pbWFnZURlY29kZXIpOworICAgIEFTU0VSVCghbV9zaXplLmlzRW1w
dHkoKSk7CisKKyAgICBPd25QdHI8RW5jb2RlZERhdGFTZWdtZW50PiBzZWdtZW50ID0gZXh0cmFj
dFNlZ21lbnRGb3JUYXNrKCk7CisgICAgaWYgKCFzZWdtZW50LmdldCgpKQorICAgICAgICByZXR1
cm47CisgICAgbV9kZWNvZGVXb3JrZXItPnBvc3RUYXNrKGJpbmQoJlBhcmFsbGVsSW1hZ2VEZWNv
ZGVyOjpkZWNvZGVUYXNrLCB0aGlzLCBzZWdtZW50LnJlbGVhc2UoKSkpOworfQorCitQYXNzT3du
UHRyPFBhcmFsbGVsSW1hZ2VEZWNvZGVyOjpFbmNvZGVkRGF0YVNlZ21lbnQ+IFBhcmFsbGVsSW1h
Z2VEZWNvZGVyOjpleHRyYWN0U2VnbWVudEZvclRhc2soKQoreworICAgIEFTU0VSVChtX2J5dGVz
T2ZEYXRhQ29uc3VtZWQgPj0gMCAmJiBtX2J5dGVzT2ZEYXRhQ29uc3VtZWQgPD0gbV9kYXRhLT5z
aXplKCkpOworCisgICAgaW50IHNpemVPZlNlZ21lbnQgPSBtX2RhdGEtPnNpemUoKSAtIG1fYnl0
ZXNPZkRhdGFDb25zdW1lZDsKKyAgICBpZiAoIXNpemVPZlNlZ21lbnQpCisgICAgICAgIHJldHVy
biBQYXNzT3duUHRyPEVuY29kZWREYXRhU2VnbWVudD4oKTsKKworICAgIE93blB0cjxFbmNvZGVk
RGF0YVNlZ21lbnQ+IHNlZ21lbnQoYWRvcHRQdHIobmV3IEVuY29kZWREYXRhU2VnbWVudCgpKSk7
CisgICAgY29uc3QgY2hhciogc3JjUHRyID0gbV9kYXRhLT5kYXRhKCkgKyBtX2J5dGVzT2ZEYXRh
Q29uc3VtZWQ7CisgICAgc2VnbWVudC0+bV9zZWdtZW50LmFwcGVuZChzcmNQdHIsIHNpemVPZlNl
Z21lbnQpOworICAgIG1fYnl0ZXNPZkRhdGFDb25zdW1lZCA9IG1fZGF0YS0+c2l6ZSgpOworCisg
ICAgc2VnbWVudC0+bV9pc0FsbERhdGFSZWNlaXZlZCA9IG1faXNBbGxEYXRhUmVjZWl2ZWQ7CisK
KyAgICByZXR1cm4gc2VnbWVudC5yZWxlYXNlKCk7Cit9CisKK3N0cnVjdCBQYXJhbGxlbEZyYW1l
RGF0YSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFyYWxsZWxGcmFtZURhdGEpOworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IFBhcmFsbGVs
RnJhbWVEYXRhKFBhc3NSZWZQdHI8UGFyYWxsZWxJbWFnZURlY29kZXI+IHBhcmFsbGVsRGVjb2Rl
cikKKyAgICAgICAgOiBtX3BhcmFsbGVsRGVjb2RlcihwYXJhbGxlbERlY29kZXIpCisgICAgICAg
ICwgbV9kZWNvZGVkU2VnbWVudCgpCisgICAgICAgICwgbV9zdGF0dXMoSW1hZ2VGcmFtZTo6RnJh
bWVFbXB0eSkKKyAgICAgICAgLCBtX2hhc0FscGhhKGZhbHNlKQorICAgICAgICAsIG1fcHJlbXVs
dGlwbHlBbHBoYSh0cnVlKQorICAgIHsKKyAgICB9CisKKyAgICB+UGFyYWxsZWxGcmFtZURhdGEo
KQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8UGFyYWxsZWxJbWFnZURlY29kZXI+IG1fcGFy
YWxsZWxEZWNvZGVyOworICAgIE93bkFycmF5UHRyPEltYWdlRnJhbWU6OlBpeGVsRGF0YT4gbV9k
ZWNvZGVkU2VnbWVudDsKKyAgICBJbWFnZUZyYW1lOjpGcmFtZVN0YXR1cyBtX3N0YXR1czsKKyAg
ICBib29sIG1faGFzQWxwaGE7CisgICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGE7CisgICAgSW50
UmVjdCBtX2RlY29kZWRSZWN0OworfTsKKwordm9pZCBQYXJhbGxlbEltYWdlRGVjb2Rlcjo6ZGVj
b2RlVGFzayhQYXNzT3duUHRyPFBhcmFsbGVsSW1hZ2VEZWNvZGVyOjpFbmNvZGVkRGF0YVNlZ21l
bnQ+IHBhc3NTZWdtZW50KQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIEFT
U0VSVChtX2ltYWdlRGVjb2Rlcik7CisKKyAgICBPd25QdHI8RW5jb2RlZERhdGFTZWdtZW50PiBz
ZWdtZW50ID0gcGFzc1NlZ21lbnQ7CisKKyAgICAvLyAxLiBTZW5kIHNlZ21lbnQgZGF0YSB0byBJ
bWFnZURlY29kZXIuCisgICAgaWYgKCFtX2RhdGFGb3JUYXNrKSB7CisgICAgICAgIG1fZGF0YUZv
clRhc2sgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAg
Ly8gVGhyZWFkUmVzdHJpY3Rpb25WZXJpZmllciBkb2VzIG5vdCBhbGxvdyB0d28gdGhyZWFkcyB0
byBhY2Nlc3Mgb25lIFJlZkNvdW50ZWQgb2JqZWN0LgorICAgICAgICAvLyBtX2RhdGFGb3JUYXNr
IGlzIHVzZWQgYnkgYm90aCB0aGUgbWFpbiB0aHJlYWQgYW5kIHRoZSB0YXNrIHRocmVhZDoKKyAg
ICAgICAgLy8gVGhlIHRhc2sgdGhyZWFkIGNyZWF0ZXMsIHVzZXMgYW5kIHJlbW92ZXMgbV9kYXRh
Rm9yVGFzay4gVGhlIG1haW4gdGhyZWFkIG1heSByZW1vdmUKKyAgICAgICAgLy8gbV9kYXRhRm9y
VGFzayBpZiB0aGUgdGFzayB0aHJlYWQgY291bGQgbm90IHJlbW92ZSBtX2RhdGFGb3JUYXNrLgor
ICAgICAgICAvLworICAgICAgICAvLyBQYXJhbGxlbCBpbWFnZSBkZWNvZGVycyBtYW5hZ2UgbV9k
YXRhRm9yVGFzayBpbiBhIHRocmVhZC1zYWZlIHdheS4gSG93ZXZlciwKKyAgICAgICAgLy8gd2Ug
Y2FuJ3QgdGVsbCB0aGUgdmVyaWZpZXIgdGhhdCB3ZSBhcmUgc2FmZSBieSBzaW1wbHkgcGFzc2lu
ZyBhIG11dGV4CisgICAgICAgIC8vIGJlY2F1c2UgbGliZGlzcGF0Y2ggZG9lcyBub3QgZXZlbiBn
dWFyYW50ZWUgZGVjb2RlVGFzayBpcyBjYWxsZWQgYnkgdGhlIHNhbWUgdGhyZWFkCisgICAgICAg
IC8vIGVhY2ggdGltZS4gU28gdHVybiBvZmYgdGhlIHZlcmlmaWVyIGhlcmUuCisgICAgICAgIG1f
ZGF0YUZvclRhc2stPnR1cm5PZmZWZXJpZmllcigpOworI2VuZGlmCisgICAgfQorICAgIG1fZGF0
YUZvclRhc2stPmFwcGVuZChzZWdtZW50LT5tX3NlZ21lbnQpOworICAgIG1faW1hZ2VEZWNvZGVy
LT5zZXREYXRhKG1fZGF0YUZvclRhc2suZ2V0KCksIHNlZ21lbnQtPm1faXNBbGxEYXRhUmVjZWl2
ZWQpOworCisgICAgSW1hZ2VGcmFtZSogb2xkQnVmZmVyID0gbV9pbWFnZURlY29kZXItPmZpcnN0
SW1hZ2VGcmFtZVdpdGhvdXREZWNvZGUoKTsKKyAgICBpbnQgbGFzdERlY29kZWRSb3cgPSBvbGRC
dWZmZXIgPyBvbGRCdWZmZXItPmxhc3REZWNvZGVkUm93KCkgOiAwOworCisgICAgLy8gMi4gRGVj
b2RlIGFuIGltYWdlIGluY3JlbWVudGFsbHkuCisgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gbV9p
bWFnZURlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKTsKKyAgICBpZiAoIWJ1ZmZlciB8fCBi
dWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKKyAgICAgICAgQVNT
RVJUKCFzZWdtZW50LT5tX2lzQWxsRGF0YVJlY2VpdmVkKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIDMuIE1ha2UgYSBQYXJhbGxlbEZyYW1lRGF0YSBpbiBvcmRlciB0byBwYXNz
IGl0IHRvIHRoZSBtYWluIHRocmVhZC4KKyAgICBQYXJhbGxlbEZyYW1lRGF0YSogcGFyYWxsZWxG
cmFtZURhdGEgPSBuZXcgUGFyYWxsZWxGcmFtZURhdGEodGhpcyk7CisgICAgcGFyYWxsZWxGcmFt
ZURhdGEtPm1fc3RhdHVzID0gYnVmZmVyLT5zdGF0dXMoKTsKKyAgICBwYXJhbGxlbEZyYW1lRGF0
YS0+bV9oYXNBbHBoYSA9IGJ1ZmZlci0+aGFzQWxwaGEoKTsKKyAgICBwYXJhbGxlbEZyYW1lRGF0
YS0+bV9wcmVtdWx0aXBseUFscGhhID0gYnVmZmVyLT5wcmVtdWx0aXBseUFscGhhKCk7CisKKyAg
ICBpbnQgbmV3TGFzdERlY29kZWRSb3cgPSBidWZmZXItPmxhc3REZWNvZGVkUm93KCk7CisgICAg
Ly8gT25seSBpbiBCTVAsIGxhc3REZWNvZGVkUm93IGNhbiBiZSBiaWdnZXIgdGhhbiBuZXdMYXN0
RGVjb2RlZFJvdy4KKyAgICBpbnQgbGFzdERlY29kZWRNaW5Sb3cgPSBzdGQ6Om1pbihsYXN0RGVj
b2RlZFJvdywgbmV3TGFzdERlY29kZWRSb3cpOworICAgIGludCBsYXN0RGVjb2RlZE1heFJvdyA9
IHN0ZDo6bWF4KGxhc3REZWNvZGVkUm93LCBuZXdMYXN0RGVjb2RlZFJvdyk7CisgICAgcGFyYWxs
ZWxGcmFtZURhdGEtPm1fZGVjb2RlZFJlY3QgPSBJbnRSZWN0KDAsIGxhc3REZWNvZGVkTWluUm93
LCBtX2ltYWdlRGVjb2Rlci0+c2l6ZSgpLndpZHRoKCksIGxhc3REZWNvZGVkTWF4Um93IC0gbGFz
dERlY29kZWRNaW5Sb3cgKyAxKTsKKworICAgIC8vIDQuIENyZWF0ZSBkZWNvZGVkIHNlZ21lbnQg
ZGF0YSBpbiBvcmRlciB0byBwYXNzIGl0IHRvIHRoZSBtYWluIHRocmVhZC4KKyAgICAvLyAgICBJ
ZiB0aGUgc3RhdHVzIGlzIEZyYW1lQ29tcGxldGUsIHRoaXMgaXMgbm90IG5lZWRlZCBiZWNhdXNl
IGEgTmF0aXZlSW1hZ2Ugd2lsbCBiZSBjcmVhdGVkIHVzaW5nIHRoZSBkZWNvZGVyIG9uIHRoZSBt
YWluIHRocmVhZC4KKyAgICBpZiAocGFyYWxsZWxGcmFtZURhdGEtPm1fc3RhdHVzID09IEltYWdl
RnJhbWU6OkZyYW1lUGFydGlhbCkgeworICAgICAgICBpbnQgc2VnbWVudFNpemUgPSBwYXJhbGxl
bEZyYW1lRGF0YS0+bV9kZWNvZGVkUmVjdC5zaXplKCkuYXJlYSgpOworICAgICAgICBwYXJhbGxl
bEZyYW1lRGF0YS0+bV9kZWNvZGVkU2VnbWVudCA9IGFkb3B0QXJyYXlQdHIobmV3IEltYWdlRnJh
bWU6OlBpeGVsRGF0YVtzZWdtZW50U2l6ZV0pOworCisgICAgICAgIEltYWdlRnJhbWU6OlBpeGVs
RGF0YSogc2VnbWVudEFkZHIgPSBwYXJhbGxlbEZyYW1lRGF0YS0+bV9kZWNvZGVkU2VnbWVudC5n
ZXQoKTsKKyAgICAgICAgbWVtY3B5KHNlZ21lbnRBZGRyLCBidWZmZXItPmdldEFkZHIoMCwgbGFz
dERlY29kZWRNaW5Sb3cpLCBzZWdtZW50U2l6ZSAqIHNpemVvZihJbWFnZUZyYW1lOjpQaXhlbERh
dGEpKTsKKyAgICB9IGVsc2UgeyAvLyBGcmFtZUNvbXBsZXRlCisgICAgICAgIG1faW1hZ2VEZWNv
ZGVyLT5zZXREYXRhKDAsIGZhbHNlKTsKKyAgICAgICAgbV9kYXRhRm9yVGFzay5jbGVhcigpOwor
ICAgIH0KKworICAgIGNhbGxPbk1haW5UaHJlYWQoYmluZChkaWREZWNvZGVUYXNrQ2FsbGJhY2ss
IHBhcmFsbGVsRnJhbWVEYXRhKSk7Cit9CisKK3ZvaWQgZGlkRGVjb2RlVGFza0NhbGxiYWNrKFBh
cmFsbGVsRnJhbWVEYXRhKiBwYXJhbGxlbEZyYW1lRGF0YSkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIC8vIElmIGEgY2xpZW50IGNhbGxlZCBQYXJhbGxlbEltYWdlRGVjb2Rl
cjo6Y2xlYXIoKSwgUGFyYWxsZWxJbWFnZURlY29kZXIgaXMgaW52YWxpZGF0ZWQuCisgICAgaWYg
KHBhcmFsbGVsRnJhbWVEYXRhLT5tX3BhcmFsbGVsRGVjb2Rlci0+dmFsaWQoKSkKKyAgICAgICAg
cGFyYWxsZWxGcmFtZURhdGEtPm1fcGFyYWxsZWxEZWNvZGVyLT5kaWREZWNvZGVUYXNrKHBhcmFs
bGVsRnJhbWVEYXRhKTsKKyAgICBkZWxldGUgcGFyYWxsZWxGcmFtZURhdGE7Cit9CisKK0ltYWdl
RnJhbWVEYXRhIGNyZWF0ZUltYWdlRnJhbWVEYXRhKFBhcmFsbGVsRnJhbWVEYXRhKiBwYXJhbGxl
bEZyYW1lRGF0YSkKK3sKKyAgICBJbWFnZUZyYW1lRGF0YSBpbWFnZUZyYW1lRGF0YTsKKyAgICBp
bWFnZUZyYW1lRGF0YS5tX29yaWVudGF0aW9uID0gRGVmYXVsdEltYWdlT3JpZW50YXRpb247Cisg
ICAgaW1hZ2VGcmFtZURhdGEubV9pc0NvbXBsZXRlID0gcGFyYWxsZWxGcmFtZURhdGEtPm1fc3Rh
dHVzID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGU7CisgICAgaW1hZ2VGcmFtZURhdGEubV9o
YXNBbHBoYSA9ICFpbWFnZUZyYW1lRGF0YS5tX2lzQ29tcGxldGUgfHwgcGFyYWxsZWxGcmFtZURh
dGEtPm1faGFzQWxwaGE7CisgICAgcmV0dXJuIGltYWdlRnJhbWVEYXRhOworfQorCit2b2lkIFBh
cmFsbGVsSW1hZ2VEZWNvZGVyOjpkaWREZWNvZGVUYXNrKFBhcmFsbGVsRnJhbWVEYXRhKiBwYXJh
bGxlbEZyYW1lRGF0YSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VS
VChwYXJhbGxlbEZyYW1lRGF0YS0+bV9zdGF0dXMgIT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSk7
CisKKyAgICBJbWFnZUZyYW1lRGF0YSBpbWFnZUZyYW1lRGF0YSA9IGNyZWF0ZUltYWdlRnJhbWVE
YXRhKHBhcmFsbGVsRnJhbWVEYXRhKTsKKworICAgIGlmICghaW1hZ2VGcmFtZURhdGEubV9pc0Nv
bXBsZXRlKQorICAgICAgICBkaWREZWNvZGVQYXJ0aWFsKGltYWdlRnJhbWVEYXRhLCBwYXJhbGxl
bEZyYW1lRGF0YSk7CisgICAgZWxzZQorICAgICAgICBkaWREZWNvZGVDb21wbGV0ZShpbWFnZUZy
YW1lRGF0YSk7Cit9CisKK3ZvaWQgUGFyYWxsZWxJbWFnZURlY29kZXI6OmRpZERlY29kZVBhcnRp
YWwoSW1hZ2VGcmFtZURhdGEmIGltYWdlRnJhbWVEYXRhLCBQYXJhbGxlbEZyYW1lRGF0YSogcGFy
YWxsZWxGcmFtZURhdGEpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGFw
cGVuZERlY29kZWREYXRhVG9JbWFnZUZyYW1lKHBhcmFsbGVsRnJhbWVEYXRhKTsKKyAgICBzeW5j
SW1hZ2VGcmFtZShwYXJhbGxlbEZyYW1lRGF0YSk7CisKKyAgICBpbWFnZUZyYW1lRGF0YS5tX2Zy
YW1lID0gbV9pbWFnZUZyYW1lLmFzTmV3TmF0aXZlSW1hZ2UoKTsKKyAgICBtX29ic2VydmVyLT5k
aWREZWNvZGUoaW1hZ2VGcmFtZURhdGEpOworfQorCit2b2lkIFBhcmFsbGVsSW1hZ2VEZWNvZGVy
OjphcHBlbmREZWNvZGVkRGF0YVRvSW1hZ2VGcmFtZShQYXJhbGxlbEZyYW1lRGF0YSogcGFyYWxs
ZWxGcmFtZURhdGEpCit7CisgICAgY29uc3QgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBjb25zdCBz
ZWdtZW50QWRkciA9IHBhcmFsbGVsRnJhbWVEYXRhLT5tX2RlY29kZWRTZWdtZW50LmdldCgpOwor
ICAgIGludCBzZWdtZW50U2l6ZSA9IHBhcmFsbGVsRnJhbWVEYXRhLT5tX2RlY29kZWRSZWN0LnNp
emUoKS5hcmVhKCk7CisgICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0QWRkciA9IG1faW1h
Z2VGcmFtZS5nZXRBZGRyKDAsIHBhcmFsbGVsRnJhbWVEYXRhLT5tX2RlY29kZWRSZWN0LnkoKSk7
CisgICAgbWVtY3B5KGRlc3RBZGRyLCBzZWdtZW50QWRkciwgc2VnbWVudFNpemUgKiBzaXplb2Yo
SW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKSk7Cit9CisKK3ZvaWQgUGFyYWxsZWxJbWFnZURlY29kZXI6
OnN5bmNJbWFnZUZyYW1lKFBhcmFsbGVsRnJhbWVEYXRhKiBwYXJhbGxlbEZyYW1lRGF0YSkKK3sK
KyAgICAvLyBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBuZWVkZWQgdG8gY3JlYXRlIGEgdmFsaWQg
bmF0aXZlIGltYWdlIGluIEltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UoKS4KKyAgICBtX2lt
YWdlRnJhbWUuc2V0U3RhdHVzKHBhcmFsbGVsRnJhbWVEYXRhLT5tX3N0YXR1cyk7CisgICAgbV9p
bWFnZUZyYW1lLnNldEhhc0FscGhhKHBhcmFsbGVsRnJhbWVEYXRhLT5tX2hhc0FscGhhKTsKKyAg
ICBtX2ltYWdlRnJhbWUuc2V0UHJlbXVsdGlwbHlBbHBoYShwYXJhbGxlbEZyYW1lRGF0YS0+bV9w
cmVtdWx0aXBseUFscGhhKTsKK30KKwordm9pZCBQYXJhbGxlbEltYWdlRGVjb2Rlcjo6ZGlkRGVj
b2RlQ29tcGxldGUoSW1hZ2VGcmFtZURhdGEmIGltYWdlRnJhbWVEYXRhKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisKKyAgICBtX2RlY29kZVdvcmtlci0+aW52YWxpZGF0ZSgpOwor
ICAgIG1fZGVjb2RlV29ya2VyLmNsZWFyKCk7CisgICAgLy8gVGhlIG1haW4gdGhyZWFkIGNhbiB1
c2UgbV9pbWFnZURlY29kZXIgYmVjYXVzZSBvdGhlciB0aHJlYWRzIGRvIG5vdCBhY2Nlc3MgbV9p
bWFnZURlY29kZXIgYWZ0ZXIgdGhpcyBsaW5lLgorCisgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0g
bV9pbWFnZURlY29kZXItPmZpcnN0SW1hZ2VGcmFtZVdpdGhvdXREZWNvZGUoKTsKKyAgICBBU1NF
UlQoYnVmZmVyKTsKKworICAgIGltYWdlRnJhbWVEYXRhLm1fZnJhbWUgPSBidWZmZXItPmFzTmV3
TmF0aXZlSW1hZ2UoKTsKKyAgICBtX29ic2VydmVyLT5kaWREZWNvZGUoaW1hZ2VGcmFtZURhdGEp
OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
YXJhbGxlbEltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGFyYWxsZWxJbWFnZURlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li45MmYwYTM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGFyYWxsZWxJbWFnZURlY29kZXIuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBQYXJhbGxlbEltYWdlRGVjb2Rlcl9oCisjZGVmaW5lIFBhcmFsbGVsSW1h
Z2VEZWNvZGVyX2gKKworI2luY2x1ZGUgIkltYWdlRGVjb2RlV29ya2VyLmgiCisjaW5jbHVkZSAi
SW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiUGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZlci5o
IgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBJbWFnZUZyYW1lRGF0YTsKK2NsYXNzIFBhcmFsbGVsRnJhbWVEYXRhOworCitjbGFz
cyBQYXJhbGxlbEltYWdlRGVjb2RlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQYXJh
bGxlbEltYWdlRGVjb2Rlcj4geworcHVibGljOgorICAgIFBhcmFsbGVsSW1hZ2VEZWNvZGVyKFBh
cmFsbGVsSW1hZ2VEZWNvZGVyT2JzZXJ2ZXIqLCBJbWFnZURlY29kZXIqKTsKKyAgICB+UGFyYWxs
ZWxJbWFnZURlY29kZXIoKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdm9pZCBz
ZXREYXRhKFNoYXJlZEJ1ZmZlciosIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIHZvaWQg
ZGVjb2RlKCk7CisKKyAgICBpbmxpbmUgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9maWxlbmFtZUV4dGVuc2lvbjsgfQorICAgIGlubGluZSBJbnRTaXplIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXRpYWxp
emUoSW1hZ2VEZWNvZGVyKik7CisKKyAgICBpbmxpbmUgYm9vbCB2YWxpZCgpIGNvbnN0IHsgcmV0
dXJuIG1faW1hZ2VEZWNvZGVyOyB9CisKKyAgICBzdHJ1Y3QgRW5jb2RlZERhdGFTZWdtZW50IHsK
KyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRW5jb2RlZERhdGFTZWdtZW50KTsKKyAgICAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBFbmNvZGVk
RGF0YVNlZ21lbnQoKSB7IH0KKyAgICAgICAgVmVjdG9yPGNoYXI+IG1fc2VnbWVudDsKKyAgICAg
ICAgYm9vbCBtX2lzQWxsRGF0YVJlY2VpdmVkOworICAgIH07CisKKyAgICBQYXNzT3duUHRyPEVu
Y29kZWREYXRhU2VnbWVudD4gZXh0cmFjdFNlZ21lbnRGb3JUYXNrKCk7CisKKyAgICAvLyBPbmx5
IHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgdGFzayB0aHJlYWQuCisgICAgdm9pZCBkZWNv
ZGVUYXNrKFBhc3NPd25QdHI8RW5jb2RlZERhdGFTZWdtZW50Pik7CisKKyAgICB2b2lkIGRpZERl
Y29kZVRhc2soUGFyYWxsZWxGcmFtZURhdGEqKTsKKyAgICB2b2lkIGRpZERlY29kZVBhcnRpYWwo
SW1hZ2VGcmFtZURhdGEmLCBQYXJhbGxlbEZyYW1lRGF0YSopOworICAgIHZvaWQgYXBwZW5kRGVj
b2RlZERhdGFUb0ltYWdlRnJhbWUoUGFyYWxsZWxGcmFtZURhdGEqKTsKKyAgICB2b2lkIHN5bmNJ
bWFnZUZyYW1lKFBhcmFsbGVsRnJhbWVEYXRhKik7CisgICAgdm9pZCBkaWREZWNvZGVDb21wbGV0
ZShJbWFnZUZyYW1lRGF0YSYpOworICAgIGZyaWVuZCB2b2lkIGRpZERlY29kZVRhc2tDYWxsYmFj
ayhQYXJhbGxlbEZyYW1lRGF0YSopOworCisgICAgUGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZl
ciogbV9vYnNlcnZlcjsKKworICAgIEludFNpemUgbV9zaXplOworICAgIFN0cmluZyBtX2ZpbGVu
YW1lRXh0ZW5zaW9uOworCisgICAgLy8gRm9yIGlucHV0IGRhdGEKKyAgICBib29sIG1faXNBbGxE
YXRhUmVjZWl2ZWQ7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOworICAgIGludCBt
X2J5dGVzT2ZEYXRhQ29uc3VtZWQ7CisKKyAgICAvLyBGb3Igb3V0cHV0IGRhdGEKKyAgICBJbWFn
ZUZyYW1lIG1faW1hZ2VGcmFtZTsKKworICAgIC8vIFRoZSB0YXNrIHRocmVhZCBjYW4gYWNjZXNz
IG9ubHkgbV9kYXRhRm9yVGFzayBhbmQgbV9pbWFnZURlY29kZXIuCisgICAgUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gbV9kYXRhRm9yVGFzazsKKworICAgIEltYWdlRGVjb2RlciogbV9pbWFnZURlY29k
ZXI7CisKKyAgICBSZWZQdHI8SW1hZ2VEZWNvZGVXb3JrZXI+IG1fZGVjb2RlV29ya2VyOworCit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURlY29kZXJP
YnNlcnZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhN2UxOTcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxl
bEltYWdlRGVjb2Rlck9ic2VydmVyLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBDb21wYW55IDEwMCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgUGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZlcl9oCisjZGVmaW5lIFBhcmFsbGVs
SW1hZ2VEZWNvZGVyT2JzZXJ2ZXJfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElt
YWdlRnJhbWVEYXRhOworCisvLyBJbnRlcmZhY2UgZm9yIG5vdGlmaWNhdGlvbiBhYm91dCBkZWNv
ZGluZyBjb21wbGV0aW9uIG9mIGFuIFBhcmFsbGVsSW1hZ2VEZWNvZGVyLgorY2xhc3MgUGFyYWxs
ZWxJbWFnZURlY29kZXJPYnNlcnZlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGRpZERl
Y29kZShjb25zdCBJbWFnZUZyYW1lRGF0YSYpID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgflBhcmFsbGVsSW1hZ2VEZWNvZGVyT2JzZXJ2ZXIoKSB7IH0KK307CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZXRhaW5lZE1v
ZGVCaXRtYXBJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZXRh
aW5lZE1vZGVCaXRtYXBJbWFnZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMDliYWI2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1JldGFpbmVkTW9kZUJpdG1hcEltYWdlLmNwcApAQCAtMCwwICsxLDE3MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXRhaW5lZE1vZGVC
aXRtYXBJbWFnZS5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQYXNzUmVmUHRyPFJldGFpbmVkTW9kZUJpdG1hcEltYWdlPiBSZXRhaW5lZE1v
ZGVCaXRtYXBJbWFnZTo6Y3JlYXRlKEJpdG1hcEltYWdlKiBiaXRtYXBJbWFnZSkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFJldGFpbmVkTW9kZUJpdG1hcEltYWdlKGJpdG1hcEltYWdlKSk7
Cit9CisKK1JldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZShC
aXRtYXBJbWFnZSogYml0bWFwSW1hZ2UpCisgICAgOiBtX2JpdG1hcEltYWdlKGJpdG1hcEltYWdl
KQorICAgICwgbV9yZXRhaW5lZE1vZGVDb3VudCgwKQoreworfQorCitib29sIFJldGFpbmVkTW9k
ZUJpdG1hcEltYWdlOjpoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgUmV0
YWluZWRNb2RlU2F2ZXIgcmV0YWluZWRNb2RlU2F2ZXIodGhpcyk7CisgICAgcmV0dXJuIG1fYml0
bWFwSW1hZ2UtPmhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCk7Cit9CisKK0ludFNpemUgUmV0YWlu
ZWRNb2RlQml0bWFwSW1hZ2U6OnNpemUoKSBjb25zdAoreworICAgIFJldGFpbmVkTW9kZVNhdmVy
IHJldGFpbmVkTW9kZVNhdmVyKHRoaXMpOworICAgIHJldHVybiBtX2JpdG1hcEltYWdlLT5zaXpl
KCk7Cit9CisKK2Jvb2wgUmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OmdldEhvdFNwb3QoSW50UG9p
bnQmIHBvaW50KSBjb25zdAoreworICAgIFJldGFpbmVkTW9kZVNhdmVyIHJldGFpbmVkTW9kZVNh
dmVyKHRoaXMpOworICAgIHJldHVybiBtX2JpdG1hcEltYWdlLT5nZXRIb3RTcG90KHBvaW50KTsK
K30KKworYm9vbCBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBhbGxE
YXRhUmVjZWl2ZWQpCit7CisgICAgUmV0YWluZWRNb2RlU2F2ZXIgcmV0YWluZWRNb2RlU2F2ZXIo
dGhpcyk7CisgICAgcmV0dXJuIG1fYml0bWFwSW1hZ2UtPmRhdGFDaGFuZ2VkKGFsbERhdGFSZWNl
aXZlZCk7Cit9CisKK1N0cmluZyBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6ZmlsZW5hbWVFeHRl
bnNpb24oKSBjb25zdAoreworICAgIFJldGFpbmVkTW9kZVNhdmVyIHJldGFpbmVkTW9kZVNhdmVy
KHRoaXMpOworICAgIHJldHVybiBtX2JpdG1hcEltYWdlLT5maWxlbmFtZUV4dGVuc2lvbigpOwor
fQorCit2b2lkIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEoYm9v
bCBkZXN0cm95QWxsKQoreworICAgIFJldGFpbmVkTW9kZVNhdmVyIHJldGFpbmVkTW9kZVNhdmVy
KHRoaXMpOworICAgIG1fYml0bWFwSW1hZ2UtPmRlc3Ryb3lEZWNvZGVkRGF0YShkZXN0cm95QWxs
KTsKK30KKwordW5zaWduZWQgUmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OmRlY29kZWRTaXplKCkg
Y29uc3QKK3sKKyAgICBSZXRhaW5lZE1vZGVTYXZlciByZXRhaW5lZE1vZGVTYXZlcih0aGlzKTsK
KyAgICByZXR1cm4gbV9iaXRtYXBJbWFnZS0+ZGVjb2RlZFNpemUoKTsKK30KKwordm9pZCBSZXRh
aW5lZE1vZGVCaXRtYXBJbWFnZTo6c3RhcnRBbmltYXRpb24oYm9vbCBjYXRjaFVwSWZOZWNlc3Nh
cnkpCit7CisgICAgUmV0YWluZWRNb2RlU2F2ZXIgcmV0YWluZWRNb2RlU2F2ZXIodGhpcyk7Cisg
ICAgbV9iaXRtYXBJbWFnZS0+c3RhcnRBbmltYXRpb24oY2F0Y2hVcElmTmVjZXNzYXJ5KTsKK30K
Kwordm9pZCBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6c3RvcEFuaW1hdGlvbigpCit7CisgICAg
UmV0YWluZWRNb2RlU2F2ZXIgcmV0YWluZWRNb2RlU2F2ZXIodGhpcyk7CisgICAgbV9iaXRtYXBJ
bWFnZS0+c3RvcEFuaW1hdGlvbigpOworfQorCit2b2lkIFJldGFpbmVkTW9kZUJpdG1hcEltYWdl
OjpyZXNldEFuaW1hdGlvbigpCit7CisgICAgUmV0YWluZWRNb2RlU2F2ZXIgcmV0YWluZWRNb2Rl
U2F2ZXIodGhpcyk7CisgICAgbV9iaXRtYXBJbWFnZS0+cmVzZXRBbmltYXRpb24oKTsKK30KKwor
TmF0aXZlSW1hZ2VQdHIgUmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCkKK3sKKyAgICBSZXRhaW5lZE1vZGVTYXZlciByZXRhaW5lZE1vZGVTYXZlcih0
aGlzKTsKKyAgICByZXR1cm4gbV9iaXRtYXBJbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKTsKK30KKworYm9vbCBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lSGFz
QWxwaGEoKQoreworICAgIFJldGFpbmVkTW9kZVNhdmVyIHJldGFpbmVkTW9kZVNhdmVyKHRoaXMp
OworICAgIHJldHVybiBtX2JpdG1hcEltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpOworfQor
Citib29sIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVJc0NvbXBsZXRlKCkK
K3sKKyAgICBSZXRhaW5lZE1vZGVTYXZlciByZXRhaW5lZE1vZGVTYXZlcih0aGlzKTsKKyAgICBy
ZXR1cm4gbV9iaXRtYXBJbWFnZS0+Y3VycmVudEZyYW1lSXNDb21wbGV0ZSgpOworfQorCit2b2lk
IFJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sKKyAgICBSZXRh
aW5lZE1vZGVTYXZlciByZXRhaW5lZE1vZGVTYXZlcih0aGlzKTsKKyAgICBtX2JpdG1hcEltYWdl
LT5kcmF3KGNvbnRleHQsIGRzdFJlY3QsIHNyY1JlY3QsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwor
fQorCitib29sIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjptYXlGaWxsV2l0aFNvbGlkQ29sb3Io
KQoreworICAgIFJldGFpbmVkTW9kZVNhdmVyIHJldGFpbmVkTW9kZVNhdmVyKHRoaXMpOworICAg
IHJldHVybiBtX2JpdG1hcEltYWdlLT5tYXlGaWxsV2l0aFNvbGlkQ29sb3IoKTsKK30KKworQ29s
b3IgUmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OnNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIFJl
dGFpbmVkTW9kZVNhdmVyIHJldGFpbmVkTW9kZVNhdmVyKHRoaXMpOworICAgIHJldHVybiBtX2Jp
dG1hcEltYWdlLT5zb2xpZENvbG9yKCk7Cit9CisKK1JldGFpbmVkTW9kZVNhdmVyOjpSZXRhaW5l
ZE1vZGVTYXZlcihjb25zdCBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZSogaW1hZ2UsIGJvb2wgcmV0
YWluZWQpCisgICAgOiBtX2ltYWdlKGltYWdlKQorICAgICwgbV9yZXRhaW5lZChyZXRhaW5lZCkK
K3sKKyAgICBpZiAobV9yZXRhaW5lZCkKKyAgICAgICAgbV9pbWFnZS0+YmVnaW5SZXRhaW5lZE1v
ZGUoKTsKK30KKworUmV0YWluZWRNb2RlU2F2ZXI6On5SZXRhaW5lZE1vZGVTYXZlcigpCit7Cisg
ICAgaWYgKG1fcmV0YWluZWQpCisgICAgICAgIG1faW1hZ2UtPmVuZFJldGFpbmVkTW9kZSgpOwor
fQorCitSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZSogdG9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZShJ
bWFnZSogaW1hZ2UpCit7CisgICAgQVNTRVJUKGltYWdlLT5pc0JpdG1hcEltYWdlKCkpOworCisg
ICAgQml0bWFwSW1hZ2UqIGJpdG1hcEltYWdlID0gc3RhdGljX2Nhc3Q8Qml0bWFwSW1hZ2UqPihp
bWFnZSk7CisgICAgaWYgKCFiaXRtYXBJbWFnZS0+bV9yZXRhaW5lZE1vZGVJbWFnZS5nZXQoKSkK
KyAgICAgICAgYml0bWFwSW1hZ2UtPm1fcmV0YWluZWRNb2RlSW1hZ2UgPSBSZXRhaW5lZE1vZGVC
aXRtYXBJbWFnZTo6Y3JlYXRlKGJpdG1hcEltYWdlKTsKKworICAgIHJldHVybiBiaXRtYXBJbWFn
ZS0+bV9yZXRhaW5lZE1vZGVJbWFnZS5nZXQoKTsKK30KKworSW1hZ2UqIHRvUmV0YWluZWRNb2Rl
Qml0bWFwSW1hZ2VJZlBvc3NpYmxlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBpZiAoaW1hZ2UgJiYg
aW1hZ2UtPmlzQml0bWFwSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIHRvUmV0YWluZWRNb2RlQml0
bWFwSW1hZ2UoaW1hZ2UpOworICAgIHJldHVybiBpbWFnZTsKK30KKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JldGFpbmVkTW9kZUJpdG1hcElt
YWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNlN2E4YwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JldGFpbmVkTW9k
ZUJpdG1hcEltYWdlLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQ29tcGFueSAxMDAgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFJldGFpbmVkTW9kZUJpdG1hcEltYWdlX2gKKyNkZWZpbmUgUmV0YWluZWRNb2RlQml0bWFwSW1h
Z2VfaAorCisjaW5jbHVkZSAiSW1hZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBCaXRtYXBJbWFnZTsKK2NsYXNzIFJldGFpbmVkTW9kZVNhdmVyOworCitjbGFzcyBSZXRhaW5l
ZE1vZGVCaXRtYXBJbWFnZSA6IHB1YmxpYyBJbWFnZSB7CisgICAgZnJpZW5kIGNsYXNzIFJldGFp
bmVkTW9kZVNhdmVyOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJldGFpbmVkTW9k
ZUJpdG1hcEltYWdlPiBjcmVhdGUoQml0bWFwSW1hZ2UqKTsKKworICAgIHZpcnR1YWwgflJldGFp
bmVkTW9kZUJpdG1hcEltYWdlKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzU2luZ2xlU2Vj
dXJpdHlPcmlnaW4oKSBjb25zdDsKKworICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGdldEhvdFNwb3QoSW50UG9pbnQmKSBjb25zdDsKKworICAgIHZp
cnR1YWwgYm9vbCBkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCk7CisgICAgdmlydHVh
bCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxsID0gdHJ1ZSk7CisgICAgdmlydHVhbCB1
bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0QW5p
bWF0aW9uKGJvb2wgY2F0Y2hVcElmTmVjZXNzYXJ5ID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lk
IHN0b3BBbmltYXRpb24oKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXRBbmltYXRpb24oKTsKKwor
ICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
KyAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEoKTsKKworICAgIGJvb2wgY3Vy
cmVudEZyYW1lSXNDb21wbGV0ZSgpOworCisgICAgaW5saW5lIGJvb2wgcmV0YWluZWRNb2RlUmVu
ZGVyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9yZXRhaW5lZE1vZGVDb3VudDsgfQorCitwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisKKyAgICB2aXJ0dWFsIGJvb2wgbWF5Rmls
bFdpdGhTb2xpZENvbG9yKCk7CisgICAgdmlydHVhbCBDb2xvciBzb2xpZENvbG9yKCkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UoQml0bWFw
SW1hZ2UqKTsKKworICAgIGlubGluZSB2b2lkIGJlZ2luUmV0YWluZWRNb2RlKCkgY29uc3QgeyBt
X3JldGFpbmVkTW9kZUNvdW50Kys7IH0KKyAgICBpbmxpbmUgdm9pZCBlbmRSZXRhaW5lZE1vZGUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgbV9yZXRhaW5lZE1vZGVDb3VudC0tOworICAgICAgICBB
U1NFUlQobV9yZXRhaW5lZE1vZGVDb3VudCA+PSAwKTsKKyAgICB9CisKKyAgICBCaXRtYXBJbWFn
ZSogbV9iaXRtYXBJbWFnZTsKKyAgICBtdXRhYmxlIGludCBtX3JldGFpbmVkTW9kZUNvdW50Owor
fTsKKworY2xhc3MgUmV0YWluZWRNb2RlU2F2ZXIgeworcHVibGljOgorICAgIFJldGFpbmVkTW9k
ZVNhdmVyKGNvbnN0IFJldGFpbmVkTW9kZUJpdG1hcEltYWdlKiwgYm9vbCByZXRhaW5lZCA9IHRy
dWUpOworICAgIH5SZXRhaW5lZE1vZGVTYXZlcigpOworCitwcml2YXRlOgorICAgIGNvbnN0IFJl
dGFpbmVkTW9kZUJpdG1hcEltYWdlKiBtX2ltYWdlOworICAgIGJvb2wgbV9yZXRhaW5lZDsKK307
CisKKworUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UqIHRvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2Uo
SW1hZ2UqKTsKK0ltYWdlKiB0b1JldGFpbmVkTW9kZUJpdG1hcEltYWdlSWZQb3NzaWJsZShJbWFn
ZSopOworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAppbmRleCBlOWZhNWJlLi5k
MDZiMWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9CaXRtYXBJbWFnZUNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcApAQCAtNDIsNiArNDIsNyBAQCBQYXNzUmVm
UHRyPEJpdG1hcEltYWdlPiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNhaXJvX3N1cmZhY2VfdCogc3Vy
ZmFjZSkKIAogQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKE5hdGl2ZUltYWdlQ2Fpcm8qIG5hdGl2
ZUltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQor
ICAgICwgbV9zb3VyY2UodGhpcykKICAgICAsIG1fY3VycmVudEZyYW1lKDApCiAgICAgLCBtX2Zy
YW1lcygwKQogICAgICwgbV9mcmFtZVRpbWVyKDApCkBAIC01Nyw2ICs1OCw3IEBAIEJpdG1hcElt
YWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZUNhaXJvKiBuYXRpdmVJbWFnZSwgSW1hZ2VPYnNl
cnZlciogb2JzZXJ2ZXIpCiAgICAgLCBtX2hhdmVTaXplKHRydWUpCiAgICAgLCBtX3NpemVBdmFp
bGFibGUodHJ1ZSkKICAgICAsIG1faGF2ZUZyYW1lQ291bnQodHJ1ZSkKKyAgICAsIG1faXNDYWNo
aW5nRnJhbWUoZmFsc2UpCiB7CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gbmF0aXZl
SW1hZ2UtPnN1cmZhY2UoKTsKICAgICBpbnQgd2lkdGggPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF93aWR0aChzdXJmYWNlKTsKQEAgLTY3LDcgKzY5LDcgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcElt
YWdlKE5hdGl2ZUltYWdlQ2Fpcm8qIG5hdGl2ZUltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZl
cikKICAgICBtX2ZyYW1lcy5ncm93KDEpOwogICAgIG1fZnJhbWVzWzBdLm1fZnJhbWUgPSBuYXRp
dmVJbWFnZTsKICAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gY2Fpcm9fc3VyZmFjZV9nZXRf
Y29udGVudChzdXJmYWNlKSAhPSBDQUlST19DT05URU5UX0NPTE9SOwotICAgIG1fZnJhbWVzWzBd
Lm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKKyAgICBtX2ZyYW1lc1swXS5tX2lzQ29tcGxldGUgPSB0
cnVlOwogICAgIGNoZWNrRm9yU29saWRDb2xvcigpOwogfQogCkBAIC0xMzIsMTEgKzEzNCw4IEBA
IHZvaWQgQml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiAgICAgbV9pc1NvbGlkQ29s
b3IgPSB0cnVlOwogfQogCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRh
KQorYm9vbCBGcmFtZURhdGE6OmNsZWFyRnJhbWUoKQogewotICAgIGlmIChjbGVhck1ldGFkYXRh
KQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCiAgICAgaWYgKG1fZnJhbWUpIHsK
ICAgICAgICAgZGVsZXRlIG1fZnJhbWU7CiAgICAgICAgIG1fZnJhbWUgPSAwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
M0RDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHQzRENhaXJvLmNwcAppbmRleCA2MmRhMWExLi5iNzQyNWE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQz
RENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHQzRENhaXJvLmNwcApAQCAtMTYzLDkgKzE2MywxMiBAQCBib29sIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLCB1bnNpZ25lZCBpbnQgZm9y
bWF0LCB1bnNpZ25lZAogICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZTsK
ICAgICBpZiAoaW1hZ2UtPmRhdGEoKSkgewogICAgICAgICBkZWNvZGVyLnNldERhdGEoaW1hZ2Ut
PmRhdGEoKSwgdHJ1ZSk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5mcmFtZUNvdW50KCkgfHwgIWRl
Y29kZXIuZnJhbWVJc0NvbXBsZXRlQXRJbmRleCgwKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmZy
YW1lQ291bnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgT3duUHRyPE5h
dGl2ZUltYWdlQ2Fpcm8+IG5hdGl2ZUltYWdlID0gYWRvcHRQdHIoZGVjb2Rlci5jcmVhdGVGcmFt
ZUF0SW5kZXgoMCkpOworICAgICAgICBJbWFnZUZyYW1lRGF0YSBpbWFnZUltYWdlRnJhbWVEYXRh
ID0gZGVjb2Rlci5yZXF1ZXN0RnJhbWVBdEluZGV4KDApOworICAgICAgICBpZiAoIWltYWdlSW1h
Z2VGcmFtZURhdGEubV9pc0NvbXBsZXRlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBPd25QdHI8TmF0aXZlSW1hZ2VDYWlybz4gbmF0aXZlSW1hZ2UgPSBhZG9wdFB0cihpbWFn
ZUltYWdlRnJhbWVEYXRhLm1fZnJhbWUpOwogICAgICAgICBpbWFnZVN1cmZhY2UgPSBuYXRpdmVJ
bWFnZS0+c3VyZmFjZSgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGltYWdlU3VyZmFjZSA9IGlt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpLT5zdXJmYWNlKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENH
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dDNEQ0cuY3BwCmluZGV4IDUwZGU1MWYuLjM4N2YxZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3Bw
CkBAIC0xMDcsNyArMTA3LDggQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRh
KEltYWdlKiBpbWFnZSwKICAgICAgICAgZGVjb2Rlci5zZXREYXRhKGltYWdlLT5kYXRhKCksIHRy
dWUpOwogICAgICAgICBpZiAoIWRlY29kZXIuZnJhbWVDb3VudCgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBkZWNvZGVkSW1hZ2UuYWRvcHRDRihkZWNvZGVyLmNyZWF0ZUZy
YW1lQXRJbmRleCgwKSk7CisgICAgICAgIEltYWdlRnJhbWVEYXRhIGltYWdlRnJhbWVEYXRhID0g
ZGVjb2Rlci5yZXF1ZXN0RnJhbWVBdEluZGV4KDApOworICAgICAgICBkZWNvZGVkSW1hZ2UuYWRv
cHRDRihpbWFnZUZyYW1lRGF0YS5tX2ZyYW1lKTsKICAgICAgICAgY2dJbWFnZSA9IGRlY29kZWRJ
bWFnZS5nZXQoKTsKICAgICB9IGVsc2UKICAgICAgICAgY2dJbWFnZSA9IGltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUNHLmNwcAppbmRleCAyYzBjY2EyLi40MDYzZGYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcApAQCAtNDksMTMgKzQ5
LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9v
bCBjbGVhck1ldGFkYXRhKQorYm9vbCBGcmFtZURhdGE6OmNsZWFyRnJhbWUoKQogewotICAgIGlm
IChjbGVhck1ldGFkYXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCi0gICAg
bV9vcmllbnRhdGlvbiA9IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uOwotCiAgICAgaWYgKG1fZnJh
bWUpIHsKICAgICAgICAgQ0dJbWFnZVJlbGVhc2UobV9mcmFtZSk7CiAgICAgICAgIG1fZnJhbWUg
PSAwOwpAQCAtNzAsNiArNjUsNyBAQCBib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1l
dGFkYXRhKQogCiBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoQ0dJbWFnZVJlZiBjZ0ltYWdlLCBJ
bWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQorICAgICwgbV9z
b3VyY2UodGhpcykKICAgICAsIG1fY3VycmVudEZyYW1lKDApCiAgICAgLCBtX2ZyYW1lcygwKQog
ICAgICwgbV9mcmFtZVRpbWVyKDApCkBAIC04NSw2ICs4MSw3IEBAIEJpdG1hcEltYWdlOjpCaXRt
YXBJbWFnZShDR0ltYWdlUmVmIGNnSW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAg
ICwgbV9oYXZlU2l6ZSh0cnVlKQogICAgICwgbV9zaXplQXZhaWxhYmxlKHRydWUpCiAgICAgLCBt
X2hhdmVGcmFtZUNvdW50KHRydWUpCisgICAgLCBtX2lzQ2FjaGluZ0ZyYW1lKGZhbHNlKQogewog
ICAgIENHRmxvYXQgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZSk7CiAgICAgQ0dGbG9h
dCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1hZ2UpOwpAQCAtOTgsNyArOTUsNyBAQCBC
aXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoQ0dJbWFnZVJlZiBjZ0ltYWdlLCBJbWFnZU9ic2VydmVy
KiBvYnNlcnZlcikKICAgICBtX2ZyYW1lcy5ncm93KDEpOwogICAgIG1fZnJhbWVzWzBdLm1fZnJh
bWUgPSBjZ0ltYWdlOwogICAgIG1fZnJhbWVzWzBdLm1faGFzQWxwaGEgPSB0cnVlOwotICAgIG1f
ZnJhbWVzWzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKKyAgICBtX2ZyYW1lc1swXS5tX2lzQ29t
cGxldGUgPSB0cnVlOwogCiAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCmlu
ZGV4IDdjZjAyOTYuLmZhOWJjM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCkBAIC0zMCw3ICszMCw5IEBACiAjaW5j
bHVkZSAiSW1hZ2VTb3VyY2VDRy5oIgogCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgor
I2luY2x1ZGUgIkltYWdlU291cmNlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgor
I2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiTUlN
RVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgpAQCAtNzIsMTIgKzc0
LDIxIEBAIHZvaWQgc2hhcmVkQnVmZmVyUmVsZWFzZSh2b2lkKiBpbmZvKQogCiBJbWFnZVNvdXJj
ZTo6SW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFn
ZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvclByb2ZpbGVP
cHRpb24pCiAgICAgOiBtX2RlY29kZXIoMCkKKyAgICAsIG1fb2JzZXJ2ZXIoMCkKICAgICAvLyBG
SVhNRTogbV9wcmVtdWx0aXBseUFscGhhIGlzIGlnbm9yZWQgaW4gY2cgYXQgdGhlIG1vbWVudC4K
ICAgICAsIG1fYWxwaGFPcHRpb24oYWxwaGFPcHRpb24pCiAgICAgLCBtX2dhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uKGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogewogfQogCitJbWFnZVNv
dXJjZTo6SW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2VPYnNlcnZlciogb2JzZXJ2ZXIsIEltYWdlU291
cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQorICAgIDogbV9kZWNvZGVy
KDApCisgICAgLCBtX29ic2VydmVyKG9ic2VydmVyKQorICAgICwgbV9hbHBoYU9wdGlvbihhbHBo
YU9wdGlvbikKKyAgICAsIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24oZ2FtbWFBbmRDb2xv
clByb2ZpbGVPcHRpb24pCit7Cit9CisKIEltYWdlU291cmNlOjp+SW1hZ2VTb3VyY2UoKQogewog
ICAgIGNsZWFyKHRydWUpOwpAQCAtMjk5LDI0ICszMTAsNDIgQEAgc2l6ZV90IEltYWdlU291cmNl
OjpmcmFtZUNvdW50KCkgY29uc3QKICAgICByZXR1cm4gbV9kZWNvZGVyID8gQ0dJbWFnZVNvdXJj
ZUdldENvdW50KG1fZGVjb2RlcikgOiAwOwogfQogCi1DR0ltYWdlUmVmIEltYWdlU291cmNlOjpj
cmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4KQorSW1hZ2VGcmFtZURhdGEgSW1hZ2VTb3Vy
Y2U6OnJlcXVlc3RGcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBib29sKQoreworICAgIEFTU0VS
VChtX29ic2VydmVyKTsKKyAgICBJbWFnZUZyYW1lRGF0YSBpbWFnZUZyYW1lRGF0YSA9IGNyZWF0
ZUZyYW1lQXRJbmRleChpbmRleCk7CisgICAgbV9vYnNlcnZlci0+ZGlkUmVjZWl2ZUZyYW1lQXRJ
bmRleChpbmRleCwgaW1hZ2VGcmFtZURhdGEpOworICAgIHJldHVybiBpbWFnZUZyYW1lRGF0YTsK
K30KKworSW1hZ2VGcmFtZURhdGEgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleChzaXpl
X3QgaW5kZXgpCiB7CiAgICAgaWYgKCFpbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIEltYWdlRnJhbWVEYXRhKCk7CisKKyAgICBJbWFnZUZyYW1lRGF0YSBp
bWFnZUZyYW1lRGF0YTsKIAogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZShBZG9wdENG
LCBDR0ltYWdlU291cmNlQ3JlYXRlSW1hZ2VBdEluZGV4KG1fZGVjb2RlciwgaW5kZXgsIGltYWdl
U291cmNlT3B0aW9ucyhTa2lwTWV0YWRhdGEpKSk7CiAgICAgQ0ZTdHJpbmdSZWYgaW1hZ2VVVEkg
PSBDR0ltYWdlU291cmNlR2V0VHlwZShtX2RlY29kZXIpOwogICAgIHN0YXRpYyBjb25zdCBDRlN0
cmluZ1JlZiB4Ym1VVEkgPSBDRlNUUigicHVibGljLnhiaXRtYXAtaW1hZ2UiKTsKICAgICBpZiAo
IWltYWdlVVRJIHx8ICFDRkVxdWFsKGltYWdlVVRJLCB4Ym1VVEkpKQotICAgICAgICByZXR1cm4g
aW1hZ2UubGVha1JlZigpOworICAgICAgICBpbWFnZUZyYW1lRGF0YS5tX2ZyYW1lID0gaW1hZ2Uu
bGVha1JlZigpOwogICAgIAogICAgIC8vIElmIGl0IGlzIGFuIHhibSBpbWFnZSwgbWFzayBvdXQg
YWxsIHRoZSB3aGl0ZSBhcmVhcyB0byByZW5kZXIgdGhlbSB0cmFuc3BhcmVudC4KICAgICBjb25z
dCBDR0Zsb2F0IG1hc2tpbmdDb2xvcnNbNl0gPSB7MjU1LCAyNTUsICAyNTUsIDI1NSwgMjU1LCAy
NTV9OwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBtYXNrZWRJbWFnZShBZG9wdENGLCBDR0lt
YWdlQ3JlYXRlV2l0aE1hc2tpbmdDb2xvcnMoaW1hZ2UuZ2V0KCksIG1hc2tpbmdDb2xvcnMpKTsK
ICAgICBpZiAoIW1hc2tlZEltYWdlKQotICAgICAgICByZXR1cm4gaW1hZ2UubGVha1JlZigpOwor
ICAgICAgICBpbWFnZUZyYW1lRGF0YS5tX2ZyYW1lID0gaW1hZ2UubGVha1JlZigpOworCisgICAg
aW1hZ2VGcmFtZURhdGEubV9mcmFtZSA9IG1hc2tlZEltYWdlLmxlYWtSZWYoKTsKKworICAgIGlt
YWdlRnJhbWVEYXRhLm1fb3JpZW50YXRpb24gPSBvcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOwor
ICAgIGltYWdlRnJhbWVEYXRhLm1faXNDb21wbGV0ZSA9IGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgo
aW5kZXgpOworICAgIGlmIChyZXBldGl0aW9uQ291bnQoKSAhPSBjQW5pbWF0aW9uTm9uZSkKKyAg
ICAgICAgaW1hZ2VGcmFtZURhdGEubV9kdXJhdGlvbiA9IGZyYW1lRHVyYXRpb25BdEluZGV4KGlu
ZGV4KTsKKyAgICBpbWFnZUZyYW1lRGF0YS5tX2hhc0FscGhhID0gZnJhbWVIYXNBbHBoYUF0SW5k
ZXgoaW5kZXgpOwogCi0gICAgcmV0dXJuIG1hc2tlZEltYWdlLmxlYWtSZWYoKTsKKyAgICByZXR1
cm4gaW1hZ2VGcmFtZURhdGE7CiB9CiAKIGJvb2wgSW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0
ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbnZnL0ltYWdlT3BlblZHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW52Zy9JbWFnZU9wZW5WRy5jcHAKaW5kZXggOTUxMDg4Mi4uOTAwMGZj
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0lt
YWdlT3BlblZHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
dmcvSW1hZ2VPcGVuVkcuY3BwCkBAIC0zNywxMSArMzcsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCitib29sIEZy
YW1lRGF0YTo6Y2xlYXJGcmFtZSgpCiB7Ci0gICAgaWYgKGNsZWFyTWV0YWRhdGEpCi0gICAgICAg
IG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7Ci0KICAgICBpZiAobV9mcmFtZSkgewogICAgICAgICBk
ZWxldGUgbV9mcmFtZTsKICAgICAgICAgbV9mcmFtZSA9IDA7CkBAIC01Miw2ICs0OSw3IEBAIGJv
b2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCiAKIEJpdG1hcEltYWdlOjpC
aXRtYXBJbWFnZShUaWxlZEltYWdlT3BlblZHKiB0aWxlZEltYWdlLCBJbWFnZU9ic2VydmVyKiBv
YnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQorICAgICwgbV9zb3VyY2UodGhpcykKICAg
ICAsIG1fc2l6ZSh0aWxlZEltYWdlLT5zaXplKCkpCiAgICAgLCBtX2N1cnJlbnRGcmFtZSgwKQog
ICAgICwgbV9mcmFtZXMoMSkKQEAgLTY5LDYgKzY3LDcgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcElt
YWdlKFRpbGVkSW1hZ2VPcGVuVkcqIHRpbGVkSW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVy
KQogICAgICwgbV9zaXplQXZhaWxhYmxlKHRydWUpCiAgICAgLCBtX2hhc1VuaWZvcm1GcmFtZVNp
emUodHJ1ZSkKICAgICAsIG1faGF2ZUZyYW1lQ291bnQodHJ1ZSkKKyAgICAsIG1faXNDYWNoaW5n
RnJhbWUoZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1fc2l6ZS53aWR0aCgpID4gMCk7CiAgICAgQVNT
RVJUKG1fc2l6ZS5oZWlnaHQoKSA+IDApOwpAQCAtNzgsNyArNzcsNiBAQCBCaXRtYXBJbWFnZTo6
Qml0bWFwSW1hZ2UoVGlsZWRJbWFnZU9wZW5WRyogdGlsZWRJbWFnZSwgSW1hZ2VPYnNlcnZlciog
b2JzZXJ2ZXIpCiAgICAgbV9mcmFtZXNbMF0ubV9mcmFtZSA9IHRpbGVkSW1hZ2U7CiAgICAgbV9m
cmFtZXNbMF0ubV9oYXNBbHBoYSA9IHRydWU7CiAgICAgbV9mcmFtZXNbMF0ubV9pc0NvbXBsZXRl
ID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1swXS5tX2hhdmVNZXRhZGF0YSA9IHRydWU7CiAgICAgY2hl
Y2tGb3JTb2xpZENvbG9yKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VRdC5jcHAKaW5kZXggMTBmZTFmZS4uOTdiNTY1MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKQEAgLTk4LDExICs5
OCw4IEBAIHN0YXRpYyBRSW1hZ2UgbG9hZFJlc291cmNlSW1hZ2UoY29uc3QgY2hhciAqbmFtZSkK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVh
ck1ldGFkYXRhKQorYm9vbCBGcmFtZURhdGE6OmNsZWFyRnJhbWUoKQogewotICAgIGlmIChjbGVh
ck1ldGFkYXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCiAgICAgaWYgKG1f
ZnJhbWUpIHsKICAgICAgICAgZGVsZXRlIG1fZnJhbWU7CiAgICAgICAgIG1fZnJhbWUgPSAwOwpA
QCAtMjAxLDYgKzE5OCw3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QKIAogQml0bWFwSW1hZ2U6
OkJpdG1hcEltYWdlKFFJbWFnZSogaW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAg
IDogSW1hZ2Uob2JzZXJ2ZXIpCisgICAgLCBtX3NvdXJjZSh0aGlzKQogICAgICwgbV9jdXJyZW50
RnJhbWUoMCkKICAgICAsIG1fZnJhbWVzKDApCiAgICAgLCBtX2ZyYW1lVGltZXIoMCkKQEAgLTIx
Niw2ICsyMTQsNyBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoUUltYWdlKiBpbWFnZSwgSW1h
Z2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgLCBtX2hhdmVTaXplKHRydWUpCiAgICAgLCBtX3Np
emVBdmFpbGFibGUodHJ1ZSkKICAgICAsIG1faGF2ZUZyYW1lQ291bnQodHJ1ZSkKKyAgICAsIG1f
aXNDYWNoaW5nRnJhbWUoZmFsc2UpCiB7CiAgICAgaW50IHdpZHRoID0gaW1hZ2UtPndpZHRoKCk7
CiAgICAgaW50IGhlaWdodCA9IGltYWdlLT5oZWlnaHQoKTsKQEAgLTIyNSw3ICsyMjQsNyBAQCBC
aXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoUUltYWdlKiBpbWFnZSwgSW1hZ2VPYnNlcnZlciogb2Jz
ZXJ2ZXIpCiAgICAgbV9mcmFtZXMuZ3JvdygxKTsKICAgICBtX2ZyYW1lc1swXS5tX2ZyYW1lID0g
aW1hZ2U7CiAgICAgbV9mcmFtZXNbMF0ubV9oYXNBbHBoYSA9IGltYWdlLT5oYXNBbHBoYUNoYW5u
ZWwoKTsKLSAgICBtX2ZyYW1lc1swXS5tX2hhdmVNZXRhZGF0YSA9IHRydWU7CisgICAgbV9mcmFt
ZXNbMF0ubV9pc0NvbXBsZXRlID0gdHJ1ZTsKICAgICBjaGVja0ZvclNvbGlkQ29sb3IoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFw
aGljc0NvbnRleHQzRFNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwCmluZGV4IDE3YWQ4M2QuLjFmMDQ1OWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3ND
b250ZXh0M0RTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKQEAgLTYwLDEwICs2MCwxMyBAQCBib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID8gSW1hZ2VTb3VyY2U6
OkdhbW1hQW5kQ29sb3JQcm9maWxlSWdub3JlZCA6IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9y
UHJvZmlsZUFwcGxpZWQpOwogICAgICAgICAvLyBBdHRlbXB0IHRvIGdldCByYXcgdW5wcmVtdWx0
aXBsaWVkIGltYWdlIGRhdGEgCiAgICAgICAgIGRlY29kZXIuc2V0RGF0YShpbWFnZS0+ZGF0YSgp
LCB0cnVlKTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSB8fCAhZGVjb2Rlci5m
cmFtZUlzQ29tcGxldGVBdEluZGV4KDApKQorICAgICAgICBpZiAoIWRlY29kZXIuZnJhbWVDb3Vu
dCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBoYXNBbHBoYSA9IGRlY29k
ZXIuZnJhbWVIYXNBbHBoYUF0SW5kZXgoMCk7Ci0gICAgICAgIHBpeGVscyA9IGFkb3B0UHRyKGRl
Y29kZXIuY3JlYXRlRnJhbWVBdEluZGV4KDApKTsKKyAgICAgICAgSW1hZ2VGcmFtZURhdGEgaW1h
Z2VGcmFtZURhdGEgPSBkZWNvZGVyLnJlcXVlc3RGcmFtZUF0SW5kZXgoMCk7CisgICAgICAgIGlm
ICghaW1hZ2VGcmFtZURhdGEubV9pc0NvbXBsZXRlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBoYXNBbHBoYSA9IGltYWdlRnJhbWVEYXRhLm1faGFzQWxwaGE7CisgICAgICAg
IHBpeGVscyA9IGFkb3B0UHRyKGltYWdlRnJhbWVEYXRhLm1fZnJhbWUpOwogICAgICAgICBpZiAo
IXBpeGVscy5nZXQoKSB8fCAhcGl4ZWxzLT5pc0RhdGFDb21wbGV0ZSgpIHx8ICFwaXhlbHMtPmJp
dG1hcCgpLndpZHRoKCkgfHwgIXBpeGVscy0+Yml0bWFwKCkuaGVpZ2h0KCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZpZyA9IHBp
eGVscy0+Yml0bWFwKCkuY29uZmlnKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKaW5kZXggNmE0YmNiMC4uMDRkZGMzNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lh
LmNwcApAQCAtMzE4LDExICszMTgsOCBAQCBGbG9hdFJlY3Qgbm9ybWFsaXplUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIG5vcm07CiB9CiAKLWJvb2wgRnJhbWVEYXRhOjpj
bGVhcihib29sIGNsZWFyTWV0YWRhdGEpCitib29sIEZyYW1lRGF0YTo6Y2xlYXJGcmFtZSgpCiB7
Ci0gICAgaWYgKGNsZWFyTWV0YWRhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7
Ci0KICAgICBpZiAobV9mcmFtZSkgewogICAgICAgICAvLyBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJh
bWVBdEluZGV4KCkgYWxsb2NhdGVkIHxtX2ZyYW1lfCBhbmQgcGFzc2VkCiAgICAgICAgIC8vIG93
bmVyc2hpcCB0byBCaXRtYXBJbWFnZTsgd2UgbXVzdCBkZWxldGUgaXQgaGVyZS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlV2luQ0UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHAK
aW5kZXggMjNkM2IzYS4uNGU3MzYxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHAKQEAgLTQ2LDExICs0Niw4IEBAIE5h
dGl2ZUltYWdlUHRyIEltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAogICAgIHJl
dHVybiBTaGFyZWRCaXRtYXA6OmNyZWF0ZShtX2JhY2tpbmdTdG9yZSwgbV9zaXplLCBoYXNBbHBo
YSgpKTsKIH0KIAotYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhRGF0YSkKK2Jv
b2wgRnJhbWVEYXRhOjpjbGVhckZyYW1lKCkKIHsKLSAgICBpZiAoY2xlYXJNZXRhRGF0YSkKLSAg
ICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQogICAgIGlmIChtX2ZyYW1lKSB7CiAgICAg
ICAgIG1fZnJhbWUgPSAwOwogICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlV3guY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHAKaW5kZXggNTRiYmRiYi4uYjRiNTdi
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VX
eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5j
cHAKQEAgLTUyLDExICs1Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIHRoaXMgaXMgaW4g
R3JhcGhpY3NDb250ZXh0V3guY3BwCiBpbnQgZ2V0V3hDb21wb3NpdGluZ09wZXJhdGlvbihDb21w
b3NpdGVPcGVyYXRvciBvcCwgYm9vbCBoYXNBbHBoYSk7CiAKLWJvb2wgRnJhbWVEYXRhOjpjbGVh
cihib29sIGNsZWFyTWV0YWRhdGEpCitib29sIEZyYW1lRGF0YTo6Y2xlYXJGcmFtZSgpCiB7Ci0g
ICAgaWYgKGNsZWFyTWV0YWRhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7Ci0K
ICAgICBpZiAobV9mcmFtZSkgewogICAgICAgICBkZWxldGUgbV9mcmFtZTsKICAgICAgICAgbV9m
cmFtZSA9IDA7CkBAIC04Miw2ICs3OSw3IEBAIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlOjpsb2Fk
UGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyICpuYW1lKQogCiBCaXRtYXBJbWFnZTo6Qml0bWFw
SW1hZ2UoY29uc3Qgd3hCaXRtYXAmIGJpdG1hcCkKICAgICA6IEltYWdlKDApCisgICAgLCBtX3Nv
dXJjZSh0aGlzKQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKICAgICAsIG1fZnJhbWVzKDApCiAg
ICAgLCBtX2ZyYW1lVGltZXIoMCkKQEAgLTk3LDYgKzk1LDcgQEAgQml0bWFwSW1hZ2U6OkJpdG1h
cEltYWdlKGNvbnN0IHd4Qml0bWFwJiBiaXRtYXApCiAgICAgLCBtX2RlY29kZWRTaXplKDApCiAg
ICAgLCBtX2hhdmVGcmFtZUNvdW50KHRydWUpCiAgICAgLCBtX2ZyYW1lQ291bnQoMSkKKyAgICAs
IG1faXNDYWNoaW5nRnJhbWUoZmFsc2UpCiB7CiAgICAgbV9kZWNvZGVkU2l6ZSA9IGJpdG1hcC5H
ZXRXaWR0aCgpICogYml0bWFwLkdldEhlaWdodCgpICogNDsKICAgICBtX3NpemUgPSBJbnRTaXpl
KGJpdG1hcC5HZXRXaWR0aCgpLCBiaXRtYXAuR2V0SGVpZ2h0KCkpOwpAQCAtMTEzLDcgKzExMiw3
IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShjb25zdCB3eEJpdG1hcCYgYml0bWFwKQogICAg
IAogICAgICAgICBtX2ZyYW1lcy5ncm93KDEpOwogICAgICAgICBtX2ZyYW1lc1swXS5tX2ZyYW1l
ID0gZ2JtcDsKLSAgICAgICAgbV9mcmFtZXNbMF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOworICAg
ICAgICBtX2ZyYW1lc1swXS5tX2lzQ29tcGxldGUgPSB0cnVlOwogICAgICAgICBjaGVja0ZvclNv
bGlkQ29sb3IoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAppbmRleCA3MmI1ZGRjLi45MDRmODY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L0ltYWdlRGVjb2Rlci5jcHAKQEAgLTE0MCw2ICsxNDAsNyBAQCBJbWFnZURlY29kZXIqIEltYWdl
RGVjb2Rlcjo6Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6OkFs
cGhhTwogCiBJbWFnZUZyYW1lOjpJbWFnZUZyYW1lKCkKICAgICA6IG1faGFzQWxwaGEoZmFsc2Up
CisgICAgLCBtX2xhc3REZWNvZGVkUm93KDApCiAgICAgLCBtX3N0YXR1cyhGcmFtZUVtcHR5KQog
ICAgICwgbV9kdXJhdGlvbigwKQogICAgICwgbV9kaXNwb3NhbE1ldGhvZChEaXNwb3NlTm90U3Bl
Y2lmaWVkKQpAQCAtMTY1LDYgKzE2Niw3IEBAIHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERh
dGEoKQogewogICAgIG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7CiAgICAgbV9ieXRlcyA9IDA7Cisg
ICAgbV9sYXN0RGVjb2RlZFJvdyA9IDA7CiAgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5OwogICAg
IC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7IGNsZWFyRnJhbWVCdWZm
ZXJDYWNoZSgpIGNhbGxzIHRoaXMKICAgICAvLyB0byBmcmVlIHRoZSBiaXRtYXAgZGF0YSwgYnV0
IG90aGVyIGZ1bmN0aW9ucyBsaWtlIGluaXRGcmFtZUJ1ZmZlcigpIGFuZApAQCAtMTg3LDYgKzE4
OSw3IEBAIGJvb2wgSW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEoY29uc3QgSW1hZ2VGcmFtZSYg
b3RoZXIpCiAgICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKICAgICBtX3NpemUg
PSBvdGhlci5tX3NpemU7CiAgICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CisgICAg
bV9sYXN0RGVjb2RlZFJvdyA9IG90aGVyLm1fbGFzdERlY29kZWRSb3c7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTE5OSw2ICsyMDIsNyBAQCBib29sIEltYWdlRnJhbWU6OnNldFNpemUoaW50
IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQogICAgIG1fYmFja2luZ1N0b3JlLnJlc2l6ZShiYWNr
aW5nU3RvcmVTaXplKTsKICAgICBtX2J5dGVzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwogICAg
IG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7CisgICAgbV9sYXN0RGVjb2Rl
ZFJvdyA9IDA7CiAKICAgICB6ZXJvRmlsbFBpeGVsRGF0YSgpOwogICAgIHJldHVybiB0cnVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaAppbmRleCA5MTE4NzhlLi4yNzAzZTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApAQCAtMTE4LDYgKzEx
OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdO
YXRpdmVJbWFnZSgpIGNvbnN0OwogCiAgICAgICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdDsKKyAg
ICAgICAgaW50IGxhc3REZWNvZGVkUm93KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RGVjb2RlZFJv
dzsgfQogICAgICAgICBjb25zdCBJbnRSZWN0JiBvcmlnaW5hbEZyYW1lUmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fb3JpZ2luYWxGcmFtZVJlY3Q7IH0KICAgICAgICAgRnJhbWVTdGF0dXMgc3RhdHVz
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KICAgICAgICAgdW5zaWduZWQgZHVyYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CkBAIC0xMjUsNiArMTI2LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJl
dHVybiBtX3ByZW11bHRpcGx5QWxwaGE7IH0KIAogICAgICAgICB2b2lkIHNldEhhc0FscGhhKGJv
b2wgYWxwaGEpOworICAgICAgICBpbmxpbmUgdm9pZCBzZXRMYXN0RGVjb2RlZFJvdyhpbnQgbGFz
dERlY29kZWRSb3cpIHsgbV9sYXN0RGVjb2RlZFJvdyA9IGxhc3REZWNvZGVkUm93OyB9CiAgICAg
ICAgIHZvaWQgc2V0Q29sb3JQcm9maWxlKGNvbnN0IENvbG9yUHJvZmlsZSYpOwogICAgICAgICB2
b2lkIHNldE9yaWdpbmFsRnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9vcmlnaW5hbEZy
YW1lUmVjdCA9IHI7IH0KICAgICAgICAgdm9pZCBzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVz
KTsKQEAgLTE4MSw2ICsxODMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBEbyB3ZSBuZWVkIG1fY29sb3JQcm9maWxlIGFueW1vcmU/CiAgICAgICAgIENvbG9yUHJv
ZmlsZSBtX2NvbG9yUHJvZmlsZTsKICNlbmRpZgorICAgICAgICBpbnQgbV9sYXN0RGVjb2RlZFJv
dzsKICAgICAgICAgSW50UmVjdCBtX29yaWdpbmFsRnJhbWVSZWN0OyAvLyBUaGlzIHdpbGwgYWx3
YXlzIGp1c3QgYmUgdGhlIGVudGlyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMgd2hvc2UKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRoYW4g
dGhlCkBAIC0yMjgsNiArMjMxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAg
bV9pc0FsbERhdGFSZWNlaXZlZCA9IGFsbERhdGFSZWNlaXZlZDsKICAgICAgICAgfQogCisgICAg
ICAgIFNoYXJlZEJ1ZmZlciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQor
CiAgICAgICAgIC8vIExhemlseS1kZWNvZGVzIGVub3VnaCBvZiB0aGUgaW1hZ2UgdG8gZ2V0IHRo
ZSBzaXplIChpZiBwb3NzaWJsZSkuCiAgICAgICAgIC8vIEZJWE1FOiBSaWdodCBub3cgdGhhdCBo
YXMgdG8gYmUgZG9uZSBieSBlYWNoIHN1YmNsYXNzOyBmYWN0b3IgdGhlCiAgICAgICAgIC8vIGRl
Y29kZSBjYWxsIG91dCBhbmQgdXNlIGl0IGhlcmUuCkBAIC0yNzYsNiArMjgxLDEyIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gSW1hZ2VEZWNvZGVyLW93bmVkIHBvaW50ZXIuCiAg
ICAgICAgIHZpcnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCkgPSAw
OwogCisgICAgICAgIC8vIFJldHVybnMgYW4gSW1hZ2VEZWNvZGVyLW93bmVkIHBvaW50ZXIgd2l0
aG91dCBkZWNvZGluZyBtb3JlLgorICAgICAgICBJbWFnZUZyYW1lKiBmaXJzdEltYWdlRnJhbWVX
aXRob3V0RGVjb2RlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fZnJhbWVCdWZm
ZXJDYWNoZS5pc0VtcHR5KCkgPyAwIDogJm1fZnJhbWVCdWZmZXJDYWNoZVswXTsKKyAgICAgICAg
fQorCiAgICAgICAgIHZvaWQgc2V0SWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUoYm9vbCBmbGFn
KSB7IG1faWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgPSBmbGFnOyB9CiAgICAgICAgIGJvb2wg
aWdub3Jlc0dhbW1hQW5kQ29sb3JQcm9maWxlKCkgY29uc3QgeyByZXR1cm4gbV9pZ25vcmVHYW1t
YUFuZENvbG9yUHJvZmlsZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURlY29kZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNv
ZGVyLmNwcAppbmRleCA2YTY1ZTYxLi5iZGNhZWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURlY29kZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkv
SlBFR0ltYWdlRGVjb2Rlci5jcHAKQEAgLTE1Nyw2ICsxNTcsNyBAQCBpbnQgSW1hZ2VSZWFkZXI6
OmRlY29kZShzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIEltYWdlRnJhbWUqIGFGcmFtZSkK
ICAgICAgICAgICAgIGFGcmFtZS0+c2V0UkdCQShpLCBqLCBjdXJQdHJbMF0sIGN1clB0clsxXSwg
Y3VyUHRyWzJdLCAyNTUpOwogICAgICAgICAgICAgY3VyUHRyICs9IDM7CiAgICAgICAgIH0KKyAg
ICAgICAgYUZyYW1lLT5zZXRMYXN0RGVjb2RlZFJvdyhqKTsKICAgICB9CiAgICAgcmV0dXJuIDA7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9i
bXAvQk1QSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCmluZGV4IDIwYTI0OGMuLmY3NGRkZTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJ
bWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCkBAIC02NCw4ICs2NCwxNSBAQCB2b2lkIEJNUElt
YWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2Vp
dmVkKQogCiBib29sIEJNUEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKIHsKLSAgICBp
ZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkpCisgICAgaWYgKCFJbWFnZURlY29k
ZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKSB7CisgICAgICAgIC8vIE9ubHkgQk1QSW1hZ2VEZWNvZGVy
IG11c3QgbWFrZSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0gaW4gaXNTaXplQXZhaWxhYmxlKCksCisg
ICAgICAgIC8vIGJlY2F1c2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgSW1hZ2VGcmFtZTo6bV9sYXN0
RGVjb2RlZFJvdyBjYW4gYmUgImhlaWdodCAtIDEiLgorICAgICAgICBpZiAobV9mcmFtZUJ1ZmZl
ckNhY2hlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6
ZSgxKTsKKyAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpLnNldFByZW11bHRp
cGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgfQogICAgICAgICBkZWNvZGUo
dHJ1ZSk7CisgICAgfQogCiAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxl
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAppbmRleCA1YzAwNTUzLi40ZjdlMzE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1Q
SW1hZ2VSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAKQEAgLTY0LDggKzY0LDExIEBAIGJvb2wgQk1QSW1h
Z2VSZWFkZXI6OmRlY29kZUJNUChib29sIG9ubHlTaXplKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAvLyBwcm9jZXNzSW5mb0hlYWRlcigpIHNldCB0aGUgc2l6ZSwgc28gaWYgdGhhdCdz
IGFsbCB3ZSBuZWVkZWQsIHdlJ3JlIGRvbmUuCi0gICAgaWYgKG9ubHlTaXplKQorICAgIGlmIChv
bmx5U2l6ZSkgeworICAgICAgICBpZiAoIW1faXNUb3BEb3duKQorICAgICAgICAgICAgbV9idWZm
ZXItPnNldExhc3REZWNvZGVkUm93KG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkgLSAxKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAgLy8gUmVhZCBhbmQgcHJvY2VzcyB0aGUg
Yml0bWFza3MsIGlmIG5lZWRlZC4KICAgICBpZiAobV9uZWVkVG9Qcm9jZXNzQml0bWFza3MgJiYg
IXByb2Nlc3NCaXRtYXNrcygpKQpAQCAtNjI0LDYgKzYyNyw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFk
ZXI6OnByb2Nlc3NSTEVEYXRhKCkKIAogICAgICAgICAgICAgICAgIG1fZGVjb2RlZE9mZnNldCAr
PSAyOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9idWZmZXItPnNldExhc3REZWNvZGVk
Um93KG1fY29vcmQueSgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTcxNyw2ICs3MjEsNyBA
QCBCTVBJbWFnZVJlYWRlcjo6UHJvY2Vzc2luZ1Jlc3VsdCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vz
c05vblJMRURhdGEoYm9vbCBpblJMRSwgaQogICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29t
cG9uZW50KHBpeGVsLCAyKSwgYWxwaGEpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAg
ICAgIG1fYnVmZmVyLT5zZXRMYXN0RGVjb2RlZFJvdyhtX2Nvb3JkLnkoKSk7CiAKICAgICAgICAg
Ly8gU3VjY2Vzcywga2VlcCBnb2luZy4KICAgICAgICAgbV9kZWNvZGVkT2Zmc2V0ICs9IHBhZGRl
ZE51bUJ5dGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAppbmRleCA1ZjYxOTNiLi43MTk4
YTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApAQCAtMjQ5LDEwICsyNDksMTQgQEAg
Ym9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgs
IHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmYKICAgICAgICAgICAgICAgICBidWZmZXIuc2V0UkdCQSh4
LCB5QmVnaW4sIDAsIDAsIDAsIDApOwogICAgICAgICB9CiAgICAgfQorICAgIGJ1ZmZlci5zZXRM
YXN0RGVjb2RlZFJvdyh5QmVnaW4pOwogCiAgICAgLy8gVGVsbCB0aGUgZnJhbWUgdG8gY29weSB0
aGUgcm93IGRhdGEgaWYgbmVlZCBiZS4KLSAgICBpZiAocmVwZWF0Q291bnQgPiAxKQorICAgIGlm
IChyZXBlYXRDb3VudCA+IDEpIHsKICAgICAgICAgYnVmZmVyLmNvcHlSb3dOVGltZXMoeEJlZ2lu
LCB4RW5kLCB5QmVnaW4sIHlFbmQpOworICAgICAgICBBU1NFUlQoKHlFbmQgLSAxKSA+PSAwKTsK
KyAgICAgICAgYnVmZmVyLnNldExhc3REZWNvZGVkUm93KHlFbmQgLSAxKTsKKyAgICB9CiAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM5MCw2ICszOTQsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rl
cjo6aW5pdEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpCiAgICAgICAgICAgICAgIGZv
ciAoaW50IHkgPSBwcmV2UmVjdC55KCk7IHkgPCBwcmV2UmVjdC5tYXhZKCk7ICsreSkgewogICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IHByZXZSZWN0LngoKTsgeCA8IHByZXZSZWN0Lm1h
eFgoKTsgKyt4KQogICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0UkdCQSh4LCB5LCAw
LCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0TGFzdERlY29kZWRSb3co
eSk7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKChwcmV2UmVjdC53aWR0aCgp
ID4gMCkgJiYgKHByZXZSZWN0LmhlaWdodCgpID4gMCkpCiAgICAgICAgICAgICAgICAgICBidWZm
ZXItPnNldEhhc0FscGhhKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKaW5k
ZXggOTFmMTIzNi4uNDg2MWNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCkBA
IC01NzcsNiArNTc3LDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMo
KQogICAgIGlmICh0dXJib1N3aXp6bGVkKGluZm8tPm91dF9jb2xvcl9zcGFjZSkpIHsKICAgICAg
ICAgQVNTRVJUKCFtX3NjYWxlZCk7CiAgICAgICAgIHdoaWxlIChpbmZvLT5vdXRwdXRfc2Nhbmxp
bmUgPCBpbmZvLT5vdXRwdXRfaGVpZ2h0KSB7CisgICAgICAgICAgICBidWZmZXIuc2V0TGFzdERl
Y29kZWRSb3coaW5mby0+b3V0cHV0X3NjYW5saW5lKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGJ1ZmZlci5nZXRBZGRy
KDAsIGluZm8tPm91dHB1dF9zY2FubGluZSkpOwogICAgICAgICAgICAgaWYgKGpwZWdfcmVhZF9z
Y2FubGluZXMoaW5mbywgJnJvdywgMSkgIT0gMSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC02MjgsNiArNjI5LDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2Fu
bGluZXMoKQogICAgICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQorICAgICAgICBidWZmZXIuc2V0TGFzdERlY29kZWRSb3coZGVzdFkpOwog
ICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAppbmRl
eCAxMzhkNWM1Li44MTBjYWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcApAQCAtNTIw
LDYgKzUyMCw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQg
Y2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKIAogICAgIGlmIChub25Ucml2aWFs
QWxwaGEgJiYgIWJ1ZmZlci5oYXNBbHBoYSgpKQogICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEo
bm9uVHJpdmlhbEFscGhhKTsKKyAgICBidWZmZXIuc2V0TGFzdERlY29kZWRSb3coeSk7CiB9CiAK
IHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpwbmdDb21wbGV0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29k
ZXJTa2lhLmNwcAppbmRleCA1Y2MxMzJjLi4xMzMxOGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNv
ZGVyU2tpYS5jcHAKQEAgLTU3LDYgKzU3LDcgQEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3Bl
cmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKQogdm9pZCBJbWFnZUZyYW1lOjpjbGVhclBp
eGVsRGF0YSgpCiB7CiAgICAgbV9iaXRtYXAuYml0bWFwKCkucmVzZXQoKTsKKyAgICBtX2xhc3RE
ZWNvZGVkUm93ID0gMDsKICAgICBtX3N0YXR1cyA9IEZyYW1lRW1wdHk7CiAgICAgLy8gTk9URTog
RG8gbm90IHJlc2V0IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKCkK
ICAgICAvLyBjYWxscyB0aGlzIHRvIGZyZWUgdGhlIGJpdG1hcCBkYXRhLCBidXQgb3RoZXIgZnVu
Y3Rpb25zIGxpa2UKQEAgLTc2LDYgKzc3LDcgQEAgYm9vbCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFw
RGF0YShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKIAogICAgIG1fYml0bWFwLmJpdG1hcCgpLnJl
c2V0KCk7CiAgICAgY29uc3QgTmF0aXZlSW1hZ2VTa2lhJiBvdGhlckJpdG1hcCA9IG90aGVyLm1f
Yml0bWFwOworICAgIG1fbGFzdERlY29kZWRSb3cgPSBvdGhlci5tX2xhc3REZWNvZGVkUm93Owog
ICAgIHJldHVybiBvdGhlckJpdG1hcC5iaXRtYXAoKS5jb3B5VG8oJm1fYml0bWFwLmJpdG1hcCgp
LCBvdGhlckJpdG1hcC5iaXRtYXAoKS5jb25maWcoKSk7CiB9CiAKQEAgLTg0LDYgKzg2LDcgQEAg
Ym9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCkKICAg
ICAvLyBzZXRTaXplKCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UsIGl0IGxlYWtzIG1lbW9y
eSBvdGhlcndpc2UuCiAgICAgQVNTRVJUKCF3aWR0aCgpICYmICFoZWlnaHQoKSk7CiAKKyAgICBt
X2xhc3REZWNvZGVkUm93ID0gMDsKICAgICBtX2JpdG1hcC5iaXRtYXAoKS5zZXRDb25maWcoU2tC
aXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKICAgICBpZiAo
IW1fYml0bWFwLmJpdG1hcCgpLmFsbG9jUGl4ZWxzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAv
V0VCUEltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCmluZGV4IDA4MmUzM2QuLmE5Zjk4YWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VC
UEltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcApAQCAtMTMyLDE5ICsxMzIsMjYgQEAgYm9v
bCBXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5U2l6ZSkKICAgICAgICAgICAgIHJl
dHVybiBzZXRGYWlsZWQoKTsKICAgICB9CiAKLSAgICBzd2l0Y2ggKFdlYlBJVXBkYXRlKG1fZGVj
b2RlciwgZGF0YUJ5dGVzLCBkYXRhU2l6ZSkpIHsKLSAgICBjYXNlIFZQOF9TVEFUVVNfT0s6Ci0g
ICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7Ci0gICAg
ICAgIFdlYlBJRGVsZXRlKG1fZGVjb2Rlcik7Ci0gICAgICAgIG1fZGVjb2RlciA9IDA7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgVlA4X1NUQVRVU19TVVNQRU5ERUQ6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgorICAgIGNvbnN0IFZQOFN0YXR1c0NvZGUgc3Rh
dHVzID0gV2ViUElVcGRhdGUobV9kZWNvZGVyLCBkYXRhQnl0ZXMsIGRhdGFTaXplKTsKKyAgICBp
ZiAoc3RhdHVzICE9IFZQOF9TVEFUVVNfT0sgJiYgc3RhdHVzICE9IFZQOF9TVEFUVVNfU1VTUEVO
REVEKSB7CiAgICAgICAgIFdlYlBJRGVsZXRlKG1fZGVjb2Rlcik7CiAgICAgICAgIG1fZGVjb2Rl
ciA9IDA7CiAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICB9CisgICAgaW50IGxhc3RZ
ID0gMDsKKyAgICBpZiAoIVdlYlBJRGVjR2V0UkdCKG1fZGVjb2RlciwgJmxhc3RZLCAwLCAwLCAw
KSkKKyAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOworICAgIEFTU0VSVChsYXN0WSA+PSAwKTsK
KyAgICBBU1NFUlQobGFzdFkgPD0gc2l6ZSgpLmhlaWdodCgpKTsKKyAgICBidWZmZXIuc2V0TGFz
dERlY29kZWRSb3cobGFzdFkgPyBsYXN0WSAtIDEgOiAwKTsKKworICAgIGlmIChzdGF0dXMgPT0g
VlA4X1NUQVRVU19TVVNQRU5ERUQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJ1ZmZl
ci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CisgICAgV2ViUElEZWxldGUo
bV9kZWNvZGVyKTsKKyAgICBtX2RlY29kZXIgPSAwOworICAgIHJldHVybiB0cnVlOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAKaW5kZXggYTk2ZjYxMi4uMDE1MjczNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVGbG93Qm94LmNwcApAQCAtMTI0NSw4ICsxMjQ1LDggQEAgdm9pZCBJbmxpbmVG
bG93Qm94OjpwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYKICAgICAgICAgICAgIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBib3JkZXJJbWFn
ZSA9IHJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlckltYWdlKCk7CiAgICAgICAgICAgICBTdHls
ZUltYWdlKiBib3JkZXJJbWFnZVNvdXJjZSA9IGJvcmRlckltYWdlLmltYWdlKCk7CiAgICAgICAg
ICAgICBib29sIGhhc0JvcmRlckltYWdlID0gYm9yZGVySW1hZ2VTb3VyY2UgJiYgYm9yZGVySW1h
Z2VTb3VyY2UtPmNhblJlbmRlcihyZW5kZXJlcigpLCBzdHlsZVRvVXNlLT5lZmZlY3RpdmVab29t
KCkpOwotICAgICAgICAgICAgaWYgKGhhc0JvcmRlckltYWdlICYmICFib3JkZXJJbWFnZVNvdXJj
ZS0+aXNMb2FkZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47IC8vIERvbid0IHBhaW50IGFu
eXRoaW5nIHdoaWxlIHdlIHdhaXQgZm9yIHRoZSBpbWFnZSB0byBsb2FkLgorICAgICAgICAgICAg
aWYgKGhhc0JvcmRlckltYWdlICYmICFib3hNb2RlbE9iamVjdCgpLT5jYW5SZW5kZXJFbnRpcmVJ
bWFnZShib3JkZXJJbWFnZVNvdXJjZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBEb24n
dCBwYWludCBhbnl0aGluZyB1bnRpbCB3ZSBjYW4gcmVuZGVyIHRoZSBpbWFnZSBlbnRpcmVseS4K
IAogICAgICAgICAgICAgLy8gVGhlIHNpbXBsZSBjYXNlIGlzIHdoZXJlIHdlIGVpdGhlciBoYXZl
IG5vIGJvcmRlciBpbWFnZSBvciB3ZSBhcmUgdGhlIG9ubHkgYm94IGZvciB0aGlzIG9iamVjdC4g
IEluIHRob3NlCiAgICAgICAgICAgICAvLyBjYXNlcyBvbmx5IGEgc2luZ2xlIGNhbGwgdG8gZHJh
dyBpcyByZXF1aXJlZC4KQEAgLTEzMjAsMTAgKzEzMjAsMTAgQEAgdm9pZCBJbmxpbmVGbG93Qm94
OjpwYWludE1hc2soUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnMKICAgICBwYWludEZpbGxMYXllcnMocGFpbnRJbmZvLCBDb2xvcigpLCByZW5kZXJlcigp
LT5zdHlsZSgpLT5tYXNrTGF5ZXJzKCksIHBhaW50UmVjdCwgY29tcG9zaXRlT3ApOwogICAgIAog
ICAgIGJvb2wgaGFzQm94SW1hZ2UgPSBtYXNrQm94SW1hZ2UgJiYgbWFza0JveEltYWdlLT5jYW5S
ZW5kZXIocmVuZGVyZXIoKSwgcmVuZGVyZXIoKS0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsK
LSAgICBpZiAoIWhhc0JveEltYWdlIHx8ICFtYXNrQm94SW1hZ2UtPmlzTG9hZGVkKCkpIHsKKyAg
ICBpZiAoIWhhc0JveEltYWdlIHx8ICFib3hNb2RlbE9iamVjdCgpLT5jYW5SZW5kZXJFbnRpcmVJ
bWFnZShtYXNrQm94SW1hZ2UpKSB7CiAgICAgICAgIGlmIChwdXNoVHJhbnNwYXJlbmN5TGF5ZXIp
CiAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
LSAgICAgICAgcmV0dXJuOyAvLyBEb24ndCBwYWludCBhbnl0aGluZyB3aGlsZSB3ZSB3YWl0IGZv
ciB0aGUgaW1hZ2UgdG8gbG9hZC4KKyAgICAgICAgcmV0dXJuOyAvLyBEb24ndCBwYWludCBhbnl0
aGluZyB1bnRpbCB3ZSBjYW4gcmVuZGVyIHRoZSBpbWFnZSBlbnRpcmVseS4KICAgICB9CiAKICAg
ICAvLyBUaGUgc2ltcGxlIGNhc2UgaXMgd2hlcmUgd2UgYXJlIHRoZSBvbmx5IGJveCBmb3IgdGhp
cyBvYmplY3QuICBJbiB0aG9zZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApp
bmRleCAxMzFlYmNhLi5iMDEyNzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcApAQCAtNzk3LDcgKzc5Nyw3IEBAIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSBSZW5kZXJC
b3g6OmRldGVybWluZUJhY2tncm91bmRCbGVlZEF2b2lkYW5jZShHcmFwaGljc0NvCiAKICAgICBj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUgPSB0aGlzLT5zdHlsZSgpOwogCi0gICAgaWYgKCFzdHls
ZS0+aGFzQmFja2dyb3VuZCgpIHx8ICFzdHlsZS0+aGFzQm9yZGVyKCkgfHwgIXN0eWxlLT5oYXNC
b3JkZXJSYWRpdXMoKSB8fCBib3JkZXJJbWFnZUlzTG9hZGVkQW5kQ2FuQmVSZW5kZXJlZCgpKQor
ICAgIGlmICghc3R5bGUtPmhhc0JhY2tncm91bmQoKSB8fCAhc3R5bGUtPmhhc0JvcmRlcigpIHx8
ICFzdHlsZS0+aGFzQm9yZGVyUmFkaXVzKCkgfHwgY2FuUmVuZGVyRW50aXJlQm9yZGVySW1hZ2Uo
KSkKICAgICAgICAgcmV0dXJuIEJhY2tncm91bmRCbGVlZE5vbmU7CiAKICAgICBBZmZpbmVUcmFu
c2Zvcm0gY3RtID0gY29udGV4dC0+Z2V0Q1RNKCk7CkBAIC04OTksMjYgKzg5OSwyNiBAQCB2b2lk
IFJlbmRlckJveDo6cGFpbnRNYXNrSW1hZ2VzKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBMYXlvdXRSZWN0JiBwYQogICAgIGJvb2wgZmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzID0g
dmlldygpLT5mcmFtZVZpZXcoKSAmJiB2aWV3KCktPmZyYW1lVmlldygpLT5wYWludEJlaGF2aW9y
KCkgJiBQYWludEJlaGF2aW9yRmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzOwogICAgIENvbXBvc2l0
ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wID0gQ29tcG9zaXRlU291cmNlT3ZlcjsKIAotICAgIGJvb2wg
YWxsTWFza0ltYWdlc0xvYWRlZCA9IHRydWU7CisgICAgYm9vbCBhbGxNYXNrSW1hZ2VzQ2FuQmVS
ZW5kZXJlZEVudGlyZWx5ID0gdHJ1ZTsKICAgICAKICAgICBpZiAoIWNvbXBvc2l0ZWRNYXNrIHx8
IGZsYXR0ZW5Db21wb3NpdGluZ0xheWVycykgewogICAgICAgICBwdXNoVHJhbnNwYXJlbmN5TGF5
ZXIgPSB0cnVlOwogICAgICAgICBTdHlsZUltYWdlKiBtYXNrQm94SW1hZ2UgPSBzdHlsZSgpLT5t
YXNrQm94SW1hZ2UoKS5pbWFnZSgpOwogICAgICAgICBjb25zdCBGaWxsTGF5ZXIqIG1hc2tMYXll
cnMgPSBzdHlsZSgpLT5tYXNrTGF5ZXJzKCk7CiAKLSAgICAgICAgLy8gRG9uJ3QgcmVuZGVyIGEg
bWFza2VkIGVsZW1lbnQgdW50aWwgYWxsIHRoZSBtYXNrIGltYWdlcyBoYXZlIGxvYWRlZCwgdG8g
cHJldmVudCBhIGZsYXNoIG9mIHVubWFza2VkIGNvbnRlbnQuCisgICAgICAgIC8vIERvbid0IHJl
bmRlciBhIG1hc2tlZCBlbGVtZW50IHVudGlsIGFsbCB0aGUgbWFzayBpbWFnZXMgY2FuIGJlIHJl
bmRlcmVkIGVudGlyZWx5LCB0byBwcmV2ZW50IGEgZmxhc2ggb2YgdW5tYXNrZWQgY29udGVudC4K
ICAgICAgICAgaWYgKG1hc2tCb3hJbWFnZSkKLSAgICAgICAgICAgIGFsbE1hc2tJbWFnZXNMb2Fk
ZWQgJj0gbWFza0JveEltYWdlLT5pc0xvYWRlZCgpOworICAgICAgICAgICAgYWxsTWFza0ltYWdl
c0NhbkJlUmVuZGVyZWRFbnRpcmVseSAmPSBjYW5SZW5kZXJFbnRpcmVJbWFnZShtYXNrQm94SW1h
Z2UpOwogCiAgICAgICAgIGlmIChtYXNrTGF5ZXJzKQotICAgICAgICAgICAgYWxsTWFza0ltYWdl
c0xvYWRlZCAmPSBtYXNrTGF5ZXJzLT5pbWFnZXNBcmVMb2FkZWQoKTsKKyAgICAgICAgICAgIGFs
bE1hc2tJbWFnZXNDYW5CZVJlbmRlcmVkRW50aXJlbHkgJj0gbWFza0xheWVycy0+Y2FuUmVuZGVy
RW50aXJlSW1hZ2UodGhpcyk7CiAKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVEZXN0aW5hdGlvbkluKTsKICAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMSk7CiAgICAgICAgIGNvbXBvc2l0ZU9w
ID0gQ29tcG9zaXRlU291cmNlT3ZlcjsKICAgICB9CiAKLSAgICBpZiAoYWxsTWFza0ltYWdlc0xv
YWRlZCkgeworICAgIGlmIChhbGxNYXNrSW1hZ2VzQ2FuQmVSZW5kZXJlZEVudGlyZWx5KSB7CiAg
ICAgICAgIHBhaW50RmlsbExheWVycyhwYWludEluZm8sIENvbG9yKCksIHN0eWxlKCktPm1hc2tM
YXllcnMoKSwgcGFpbnRSZWN0LCBCYWNrZ3JvdW5kQmxlZWROb25lLCBjb21wb3NpdGVPcCk7CiAg
ICAgICAgIHBhaW50TmluZVBpZWNlSW1hZ2UocGFpbnRJbmZvLmNvbnRleHQsIHBhaW50UmVjdCwg
c3R5bGUoKSwgc3R5bGUoKS0+bWFza0JveEltYWdlKCksIGNvbXBvc2l0ZU9wKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApp
bmRleCA4ZjliOWE2Li42MGFkODA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJCb3hNb2RlbE9iamVjdC5oIgogCisjaW5jbHVkZSAi
Qml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCkBA
IC05MTksOSArOTIwLDkgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5
ZXJFeHRlbmRlZChjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY28KICAgICAgICAgaWYgKCFn
ZW9tZXRyeS5kZXN0UmVjdCgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQ29tcG9zaXRlT3Bl
cmF0b3IgY29tcG9zaXRlT3AgPSBvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyID8gYmdMYXllci0+
Y29tcG9zaXRlKCkgOiBvcDsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogY2xpZW50Rm9yQmFj
a2dyb3VuZEltYWdlID0gYmFja2dyb3VuZE9iamVjdCA/IGJhY2tncm91bmRPYmplY3QgOiB0aGlz
OwotICAgICAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJnSW1hZ2UtPmltYWdlKGNsaWVu
dEZvckJhY2tncm91bmRJbWFnZSwgZ2VvbWV0cnkudGlsZVNpemUoKSk7Ci0gICAgICAgICAgICBi
b29sIHVzZUxvd1F1YWxpdHlTY2FsaW5nID0gc2hvdWxkUGFpbnRBdExvd1F1YWxpdHkoY29udGV4
dCwgaW1hZ2UuZ2V0KCksIGJnTGF5ZXIsIGdlb21ldHJ5LnRpbGVTaXplKCkpOwotICAgICAgICAg
ICAgY29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlKCktPmNvbG9yU3Bh
Y2UoKSwgZ2VvbWV0cnkuZGVzdFJlY3QoKSwgZ2VvbWV0cnkucmVsYXRpdmVQaGFzZSgpLCBnZW9t
ZXRyeS50aWxlU2l6ZSgpLCAKKyAgICAgICAgICAgIEltYWdlKiBpbWFnZSA9IHRvUmV0YWluZWRN
b2RlQml0bWFwSW1hZ2VJZlBvc3NpYmxlKGJnSW1hZ2UtPmltYWdlKGNsaWVudEZvckJhY2tncm91
bmRJbWFnZSwgZ2VvbWV0cnkudGlsZVNpemUoKSkuZ2V0KCkpOworICAgICAgICAgICAgYm9vbCB1
c2VMb3dRdWFsaXR5U2NhbGluZyA9IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQsIGlt
YWdlLCBiZ0xheWVyLCBnZW9tZXRyeS50aWxlU2l6ZSgpKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmRyYXdUaWxlZEltYWdlKGltYWdlLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIGdlb21ldHJ5LmRl
c3RSZWN0KCksIGdlb21ldHJ5LnJlbGF0aXZlUGhhc2UoKSwgZ2VvbWV0cnkudGlsZVNpemUoKSwK
ICAgICAgICAgICAgICAgICBjb21wb3NpdGVPcCwgdXNlTG93UXVhbGl0eVNjYWxpbmcpOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMTIyNiw3ICsxMjI3LDcgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9i
amVjdDo6cGFpbnROaW5lUGllY2VJbWFnZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCwKICAgICBpZiAoIXN0eWxlSW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
ICghc3R5bGVJbWFnZS0+aXNMb2FkZWQoKSkKKyAgICBpZiAoIWNhblJlbmRlckVudGlyZUltYWdl
KHN0eWxlSW1hZ2UpKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gTmV2ZXIgcGFpbnQgYSBuaW5l
LXBpZWNlIGltYWdlIGluY3JlbWVudGFsbHksIGJ1dCBkb24ndCBwYWludCB0aGUgZmFsbGJhY2sg
Ym9yZGVycyBlaXRoZXIuCiAKICAgICBpZiAoIXN0eWxlSW1hZ2UtPmNhblJlbmRlcih0aGlzLCBz
dHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSkKQEAgLTEyODIsNyArMTI4Myw3IEBAIGJvb2wgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWNlSW1hZ2UoR3JhcGhpY3NDb250ZXh0KiBncmFw
aGljc0NvbnRleHQsCiAgICAgYm9vbCBkcmF3TWlkZGxlID0gbmluZVBpZWNlSW1hZ2UuZmlsbCgp
ICYmIChpbWFnZVdpZHRoIC0gbGVmdFNsaWNlIC0gcmlnaHRTbGljZSkgPiAwICYmIChib3JkZXJJ
bWFnZVJlY3Qud2lkdGgoKSAtIGxlZnRXaWR0aCAtIHJpZ2h0V2lkdGgpID4gMAogICAgICAgICAg
ICAgICAgICAgICAgICYmIChpbWFnZUhlaWdodCAtIHRvcFNsaWNlIC0gYm90dG9tU2xpY2UpID4g
MCAmJiAoYm9yZGVySW1hZ2VSZWN0LmhlaWdodCgpIC0gdG9wV2lkdGggLSBib3R0b21XaWR0aCkg
PiAwOwogCi0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHN0eWxlSW1hZ2UtPmltYWdlKHRoaXMs
IGltYWdlU2l6ZSk7CisgICAgSW1hZ2UqIGltYWdlID0gdG9SZXRhaW5lZE1vZGVCaXRtYXBJbWFn
ZUlmUG9zc2libGUoc3R5bGVJbWFnZS0+aW1hZ2UodGhpcywgaW1hZ2VTaXplKS5nZXQoKSk7CiAg
ICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gc3R5bGUtPmNvbG9yU3BhY2UoKTsKICAgICAKICAg
ICBmbG9hdCBkZXN0aW5hdGlvbldpZHRoID0gYm9yZGVySW1hZ2VSZWN0LndpZHRoKCkgLSBsZWZ0
V2lkdGggLSByaWdodFdpZHRoOwpAQCAtMTMwMiwxOSArMTMwMywxOSBAQCBib29sIFJlbmRlckJv
eE1vZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjZUltYWdlKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0LAogICAgICAgICAvLyBUaGUgdG9wIGxlZnQgY29ybmVyIHJlY3QgaXMgKHR4LCB0
eSwgbGVmdFdpZHRoLCB0b3BXaWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8gdXNlIGZyb20g
d2l0aGluIHRoZSBpbWFnZSBpcyBvYnRhaW5lZCBmcm9tIG91ciBzbGljZSwgYW5kIGlzICgwLCAw
LCBsZWZ0U2xpY2UsIHRvcFNsaWNlKQogICAgICAgICBpZiAoZHJhd1RvcCkKLSAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRS
ZWN0KGJvcmRlckltYWdlUmVjdC5sb2NhdGlvbigpLCBJbnRTaXplKGxlZnRXaWR0aCwgdG9wV2lk
dGgpKSwKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBjb2xv
clNwYWNlLCBJbnRSZWN0KGJvcmRlckltYWdlUmVjdC5sb2NhdGlvbigpLCBJbnRTaXplKGxlZnRX
aWR0aCwgdG9wV2lkdGgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IExheW91dFJlY3QoMCwgMCwgbGVmdFNsaWNlLCB0b3BTbGljZSksIG9wKTsKIAogICAgICAgICAv
LyBUaGUgYm90dG9tIGxlZnQgY29ybmVyIHJlY3QgaXMgKHR4LCB0eSArIGggLSBib3R0b21XaWR0
aCwgbGVmdFdpZHRoLCBib3R0b21XaWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8gdXNlIGZy
b20gd2l0aGluIHRoZSBpbWFnZSBpcyAoMCwgaW1hZ2VIZWlnaHQgLSBib3R0b21TbGljZSwgbGVm
dFNsaWNlLCBib3RvbVNsaWNlKQogICAgICAgICBpZiAoZHJhd0JvdHRvbSkKLSAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRS
ZWN0KGJvcmRlckltYWdlUmVjdC54KCksIGJvcmRlckltYWdlUmVjdC5tYXhZKCkgLSBib3R0b21X
aWR0aCwgbGVmdFdpZHRoLCBib3R0b21XaWR0aCksCisgICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPmRyYXdJbWFnZShpbWFnZSwgY29sb3JTcGFjZSwgSW50UmVjdChib3JkZXJJbWFnZVJlY3Qu
eCgpLCBib3JkZXJJbWFnZVJlY3QubWF4WSgpIC0gYm90dG9tV2lkdGgsIGxlZnRXaWR0aCwgYm90
dG9tV2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0
UmVjdCgwLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCBsZWZ0U2xpY2UsIGJvdHRvbVNsaWNl
KSwgb3ApOwogCiAgICAgICAgIC8vIFBhaW50IHRoZSBsZWZ0IGVkZ2UuCiAgICAgICAgIC8vIEhh
dmUgdG8gc2NhbGUgYW5kIHRpbGUgaW50byB0aGUgYm9yZGVyIHJlY3QuCiAgICAgICAgIGlmIChz
b3VyY2VIZWlnaHQgPiAwKQotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJ
bWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgSW50UmVjdChib3JkZXJJbWFnZVJlY3QueCgp
LCBib3JkZXJJbWFnZVJlY3QueSgpICsgdG9wV2lkdGgsIGxlZnRXaWR0aCwKKyAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGNvbG9yU3BhY2UsIEludFJl
Y3QoYm9yZGVySW1hZ2VSZWN0LngoKSwgYm9yZGVySW1hZ2VSZWN0LnkoKSArIHRvcFdpZHRoLCBs
ZWZ0V2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RpbmF0aW9uSGVpZ2h0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW50UmVjdCgwLCB0b3BTbGljZSwgbGVmdFNsaWNlLCBzb3VyY2VIZWlnaHQpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUobGVmdFNp
ZGVTY2FsZSwgbGVmdFNpZGVTY2FsZSksIEltYWdlOjpTdHJldGNoVGlsZSwgKEltYWdlOjpUaWxl
UnVsZSl2UnVsZSwgb3ApOwpAQCAtMTMyNSwxOCArMTMyNiwxOCBAQCBib29sIFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjZUltYWdlKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3ND
b250ZXh0LAogICAgICAgICAvLyBUaGUgdG9wIHJpZ2h0IGNvcm5lciByZWN0IGlzICh0eCArIHcg
LSByaWdodFdpZHRoLCB0eSwgcmlnaHRXaWR0aCwgdG9wV2lkdGgpCiAgICAgICAgIC8vIFRoZSBy
ZWN0IHRvIHVzZSBmcm9tIHdpdGhpbiB0aGUgaW1hZ2UgaXMgb2J0YWluZWQgZnJvbSBvdXIgc2xp
Y2UsIGFuZCBpcyAoaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UsIDAsIHJpZ2h0U2xpY2UsIHRvcFNs
aWNlKQogICAgICAgICBpZiAoZHJhd1RvcCkKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0KGJvcmRlckltYWdlUmVj
dC5tYXhYKCkgLSByaWdodFdpZHRoLCBib3JkZXJJbWFnZVJlY3QueSgpLCByaWdodFdpZHRoLCB0
b3BXaWR0aCksCisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwg
Y29sb3JTcGFjZSwgSW50UmVjdChib3JkZXJJbWFnZVJlY3QubWF4WCgpIC0gcmlnaHRXaWR0aCwg
Ym9yZGVySW1hZ2VSZWN0LnkoKSwgcmlnaHRXaWR0aCwgdG9wV2lkdGgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdChpbWFnZVdpZHRoIC0gcmlnaHRT
bGljZSwgMCwgcmlnaHRTbGljZSwgdG9wU2xpY2UpLCBvcCk7CiAKICAgICAgICAgLy8gVGhlIGJv
dHRvbSByaWdodCBjb3JuZXIgcmVjdCBpcyAodHggKyB3IC0gcmlnaHRXaWR0aCwgdHkgKyBoIC0g
Ym90dG9tV2lkdGgsIHJpZ2h0V2lkdGgsIGJvdHRvbVdpZHRoKQogICAgICAgICAvLyBUaGUgcmVj
dCB0byB1c2UgZnJvbSB3aXRoaW4gdGhlIGltYWdlIGlzIChpbWFnZVdpZHRoIC0gcmlnaHRTbGlj
ZSwgaW1hZ2VIZWlnaHQgLSBib3R0b21TbGljZSwgcmlnaHRTbGljZSwgYm90dG9tU2xpY2UpCiAg
ICAgICAgIGlmIChkcmF3Qm90dG9tKQotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3
SW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIEludFJlY3QoYm9yZGVySW1hZ2VSZWN0Lm1h
eFgoKSAtIHJpZ2h0V2lkdGgsIGJvcmRlckltYWdlUmVjdC5tYXhZKCkgLSBib3R0b21XaWR0aCwg
cmlnaHRXaWR0aCwgYm90dG9tV2lkdGgpLAorICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5k
cmF3SW1hZ2UoaW1hZ2UsIGNvbG9yU3BhY2UsIEludFJlY3QoYm9yZGVySW1hZ2VSZWN0Lm1heFgo
KSAtIHJpZ2h0V2lkdGgsIGJvcmRlckltYWdlUmVjdC5tYXhZKCkgLSBib3R0b21XaWR0aCwgcmln
aHRXaWR0aCwgYm90dG9tV2lkdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTGF5b3V0UmVjdChpbWFnZVdpZHRoIC0gcmlnaHRTbGljZSwgaW1hZ2VIZWlnaHQgLSBi
b3R0b21TbGljZSwgcmlnaHRTbGljZSwgYm90dG9tU2xpY2UpLCBvcCk7CiAKICAgICAgICAgLy8g
UGFpbnQgdGhlIHJpZ2h0IGVkZ2UuCiAgICAgICAgIGlmIChzb3VyY2VIZWlnaHQgPiAwKQotICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZS5nZXQoKSwgY29s
b3JTcGFjZSwgSW50UmVjdChib3JkZXJJbWFnZVJlY3QubWF4WCgpIC0gcmlnaHRXaWR0aCwgYm9y
ZGVySW1hZ2VSZWN0LnkoKSArIHRvcFdpZHRoLCByaWdodFdpZHRoLAorICAgICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShpbWFnZSwgY29sb3JTcGFjZSwgSW50UmVjdChi
b3JkZXJJbWFnZVJlY3QubWF4WCgpIC0gcmlnaHRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0LnkoKSAr
IHRvcFdpZHRoLCByaWdodFdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0aW5hdGlvbkhlaWdodCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEludFJlY3QoaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UsIHRvcFNs
aWNlLCByaWdodFNsaWNlLCBzb3VyY2VIZWlnaHQpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUocmlnaHRTaWRlU2NhbGUsIHJpZ2h0U2lkZVNj
YWxlKSwKQEAgLTEzNDUsMTMgKzEzNDYsMTMgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cGFpbnROaW5lUGllY2VJbWFnZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwKIAog
ICAgIC8vIFBhaW50IHRoZSB0b3AgZWRnZS4KICAgICBpZiAoZHJhd1RvcCAmJiBzb3VyY2VXaWR0
aCA+IDApCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0
KCksIGNvbG9yU3BhY2UsIEludFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSArIGxlZnRXaWR0aCwg
Ym9yZGVySW1hZ2VSZWN0LnkoKSwgZGVzdGluYXRpb25XaWR0aCwgdG9wV2lkdGgpLAorICAgICAg
ICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLCBjb2xvclNwYWNlLCBJbnRS
ZWN0KGJvcmRlckltYWdlUmVjdC54KCkgKyBsZWZ0V2lkdGgsIGJvcmRlckltYWdlUmVjdC55KCks
IGRlc3RpbmF0aW9uV2lkdGgsIHRvcFdpZHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbnRSZWN0KGxlZnRTbGljZSwgMCwgc291cmNlV2lkdGgsIHRvcFNsaWNl
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUodG9w
U2lkZVNjYWxlLCB0b3BTaWRlU2NhbGUpLCAoSW1hZ2U6OlRpbGVSdWxlKWhSdWxlLCBJbWFnZTo6
U3RyZXRjaFRpbGUsIG9wKTsKIAogICAgIC8vIFBhaW50IHRoZSBib3R0b20gZWRnZS4KICAgICBp
ZiAoZHJhd0JvdHRvbSAmJiBzb3VyY2VXaWR0aCA+IDApCi0gICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIEludFJlY3QoYm9yZGVy
SW1hZ2VSZWN0LngoKSArIGxlZnRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0Lm1heFkoKSAtIGJvdHRv
bVdpZHRoLAorICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLCBj
b2xvclNwYWNlLCBJbnRSZWN0KGJvcmRlckltYWdlUmVjdC54KCkgKyBsZWZ0V2lkdGgsIGJvcmRl
ckltYWdlUmVjdC5tYXhZKCkgLSBib3R0b21XaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbldpZHRoLCBib3R0b21XaWR0aCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdChsZWZ0U2xpY2UsIGltYWdl
SGVpZ2h0IC0gYm90dG9tU2xpY2UsIHNvdXJjZVdpZHRoLCBib3R0b21TbGljZSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRTaXplKGJvdHRvbVNpZGVTY2Fs
ZSwgYm90dG9tU2lkZVNjYWxlKSwKQEAgLTEzNzksNyArMTM4MCw3IEBAIGJvb2wgUmVuZGVyQm94
TW9kZWxPYmplY3Q6OnBhaW50TmluZVBpZWNlSW1hZ2UoR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQsCiAgICAgICAgIGlmICh2UnVsZSA9PSBTdHJldGNoSW1hZ2VSdWxlKQogICAgICAg
ICAgICAgbWlkZGxlU2NhbGVGYWN0b3Iuc2V0SGVpZ2h0KGRlc3RpbmF0aW9uSGVpZ2h0IC8gc291
cmNlSGVpZ2h0KTsKICAgICAgICAgCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RpbGVk
SW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
ZHJhd1RpbGVkSW1hZ2UoaW1hZ2UsIGNvbG9yU3BhY2UsCiAgICAgICAgICAgICBJbnRSZWN0KGJv
cmRlckltYWdlUmVjdC54KCkgKyBsZWZ0V2lkdGgsIGJvcmRlckltYWdlUmVjdC55KCkgKyB0b3BX
aWR0aCwgZGVzdGluYXRpb25XaWR0aCwgZGVzdGluYXRpb25IZWlnaHQpLAogICAgICAgICAgICAg
SW50UmVjdChsZWZ0U2xpY2UsIHRvcFNsaWNlLCBzb3VyY2VXaWR0aCwgc291cmNlSGVpZ2h0KSwK
ICAgICAgICAgICAgIG1pZGRsZVNjYWxlRmFjdG9yLCAoSW1hZ2U6OlRpbGVSdWxlKWhSdWxlLCAo
SW1hZ2U6OlRpbGVSdWxlKXZSdWxlLCBvcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckltYWdlLmNwcAppbmRleCAzZmViNTdjLi4wMWU1MzI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAKQEAgLTMxMSw3ICszMTEsNyBAQCB2b2lkIFJlbmRlckltYWdl
OjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZgogICAgICAgICAgICAgTGF5b3V0VW5pdCB1c2FibGVXaWR0aCA9IGNXaWR0aCAtIDI7
CiAgICAgICAgICAgICBMYXlvdXRVbml0IHVzYWJsZUhlaWdodCA9IGNIZWlnaHQgLSAyOwogCi0g
ICAgICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gbV9pbWFnZVJlc291cmNlLT5pbWFnZSgp
OworICAgICAgICAgICAgSW1hZ2UqIGltYWdlID0gdG9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZUlm
UG9zc2libGUobV9pbWFnZVJlc291cmNlLT5pbWFnZSgpLmdldCgpKTsKIAogICAgICAgICAgICAg
aWYgKG1faW1hZ2VSZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpICYmICFpbWFnZS0+aXNOdWxsKCkg
JiYgdXNhYmxlV2lkdGggPj0gaW1hZ2UtPndpZHRoKCkgJiYgdXNhYmxlSGVpZ2h0ID49IGltYWdl
LT5oZWlnaHQoKSkgewogICAgICAgICAgICAgICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0g
V2ViQ29yZTo6ZGV2aWNlU2NhbGVGYWN0b3IoZnJhbWUoKSk7CkBAIC0zMjgsNyArMzI4LDcgQEAg
dm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKICAgICAgICAgICAgICAgICBpZiAoY2VudGVyWSA8IDAp
CiAgICAgICAgICAgICAgICAgICAgIGNlbnRlclkgPSAwOwogICAgICAgICAgICAgICAgIGltYWdl
T2Zmc2V0ID0gTGF5b3V0U2l6ZShsZWZ0Qm9yZGVyICsgbGVmdFBhZCArIGNlbnRlclggKyAxLCB0
b3BCb3JkZXIgKyB0b3BQYWQgKyBjZW50ZXJZICsgMSk7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIEludFJlY3Qo
cm91bmRlZEludFBvaW50KHBhaW50T2Zmc2V0ICsgaW1hZ2VPZmZzZXQpLCBpbWFnZVNpemUpLCBD
b21wb3NpdGVTb3VyY2VPdmVyLCBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpKTsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIHN0eWxlKCktPmNvbG9yU3Bh
Y2UoKSwgSW50UmVjdChyb3VuZGVkSW50UG9pbnQocGFpbnRPZmZzZXQgKyBpbWFnZU9mZnNldCks
IGltYWdlU2l6ZSksIENvbXBvc2l0ZVNvdXJjZU92ZXIsIHNob3VsZFJlc3BlY3RJbWFnZU9yaWVu
dGF0aW9uKCkpOwogICAgICAgICAgICAgICAgIGVycm9yUGljdHVyZURyYXduID0gdHJ1ZTsKICAg
ICAgICAgICAgIH0KIApAQCAtNDQyLDcgKzQ0Miw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50
SW50b1JlY3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0
CiAgICAgaWYgKCFtX2ltYWdlUmVzb3VyY2UtPmhhc0ltYWdlKCkgfHwgbV9pbWFnZVJlc291cmNl
LT5lcnJvck9jY3VycmVkKCkgfHwgYWxpZ25lZFJlY3Qud2lkdGgoKSA8PSAwIHx8IGFsaWduZWRS
ZWN0LmhlaWdodCgpIDw9IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxJbWFnZT4g
aW1nID0gbV9pbWFnZVJlc291cmNlLT5pbWFnZShhbGlnbmVkUmVjdC53aWR0aCgpLCBhbGlnbmVk
UmVjdC5oZWlnaHQoKSk7CisgICAgSW1hZ2UqIGltZyA9IHRvUmV0YWluZWRNb2RlQml0bWFwSW1h
Z2VJZlBvc3NpYmxlKG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2UoYWxpZ25lZFJlY3Qud2lkdGgoKSwg
YWxpZ25lZFJlY3QuaGVpZ2h0KCkpLmdldCgpKTsKICAgICBpZiAoIWltZyB8fCBpbWctPmlzTnVs
bCgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ1MCw3ICs0NTAsNyBAQCB2b2lkIFJlbmRlcklt
YWdlOjpwYWludEludG9SZWN0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgTGF5b3V0
UmVjdCYgcmVjdAogICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yID0gaW1h
Z2VFbHQgPyBpbWFnZUVsdC0+Y29tcG9zaXRlT3BlcmF0b3IoKSA6IENvbXBvc2l0ZVNvdXJjZU92
ZXI7CiAgICAgSW1hZ2UqIGltYWdlID0gbV9pbWFnZVJlc291cmNlLT5pbWFnZSgpLmdldCgpOwog
ICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxpbmcgPSBzaG91bGRQYWludEF0TG93UXVhbGl0eShj
b250ZXh0LCBpbWFnZSwgaW1hZ2UsIGFsaWduZWRSZWN0LnNpemUoKSk7Ci0gICAgY29udGV4dC0+
ZHJhd0ltYWdlKG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2UoYWxpZ25lZFJlY3Qud2lkdGgoKSwgYWxp
Z25lZFJlY3QuaGVpZ2h0KCkpLmdldCgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIGFsaWduZWRS
ZWN0LCBjb21wb3NpdGVPcGVyYXRvciwgc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSwg
dXNlTG93UXVhbGl0eVNjYWxpbmcpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWcsIHN0eWxl
KCktPmNvbG9yU3BhY2UoKSwgYWxpZ25lZFJlY3QsIGNvbXBvc2l0ZU9wZXJhdG9yLCBzaG91bGRS
ZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpLCB1c2VMb3dRdWFsaXR5U2NhbGluZyk7CiB9CiAKIGJv
b2wgUmVuZGVySW1hZ2U6OmJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dyb3VuZChCYWNr
Z3JvdW5kQmxlZWRBdm9pZGFuY2UgYmxlZWRBdm9pZGFuY2UsIElubGluZUZsb3dCb3gqKSBjb25z
dApAQCAtNDgxLDcgKzQ4MSw3IEBAIGJvb2wgUmVuZGVySW1hZ2U6OmJhY2tncm91bmRJc09ic2N1
cmVkKCkgY29uc3QKIAogICAgIC8vIENoZWNrIGZvciBiaXRtYXAgaW1hZ2Ugd2l0aCBhbHBoYS4K
ICAgICBJbWFnZSogaW1hZ2UgPSBtX2ltYWdlUmVzb3VyY2UtPmltYWdlKCkuZ2V0KCk7Ci0gICAg
aWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmlzQml0bWFwSW1hZ2UoKSB8fCBpbWFnZS0+Y3VycmVudEZy
YW1lSGFzQWxwaGEoKSkKKyAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+aXNCaXRtYXBJbWFnZSgp
IHx8IHRvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UoaW1hZ2UpLT5jdXJyZW50RnJhbWVIYXNBbHBo
YSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgIHJldHVybiB0cnVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRl
eCA5ODg2ZmIzLi5mMjI0NDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIlJlbmRlckVt
YmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCisjaW5jbHVkZSAiUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRl
ICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNp
bmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKQEAgLTEwNzksNiArMTA4MCwxMCBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlSW1hZ2VDb250ZW50cygpCiAgICAgaWYgKCFjYWNoZWRJbWFn
ZS0+aXNMb2FkZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gV2UgaGF2ZSB0byB3YWl0
IHVudGlsIHRoZSBpbWFnZSBpcyBmdWxseSBkZWNvZGVkIGJlZm9yZSBzZXR0aW5nIGl0IG9uIHRo
ZSBsYXllci4KKyAgICBpZiAoaW1hZ2UtPmlzQml0bWFwSW1hZ2UoKSAmJiAhdG9SZXRhaW5lZE1v
ZGVCaXRtYXBJbWFnZShpbWFnZSktPmN1cnJlbnRGcmFtZUlzQ29tcGxldGUoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgLy8gVGhpcyBpcyBhIG5vLW9wIGlmIHRoZSBsYXllciBkb2Vzbid0IGhh
dmUgYW4gaW5uZXIgbGF5ZXIgZm9yIHRoZSBpbWFnZS4KICAgICBtX2dyYXBoaWNzTGF5ZXItPnNl
dENvbnRlbnRzVG9JbWFnZShpbWFnZSk7CiAgICAgdXBkYXRlRHJhd3NDb250ZW50KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDdhZGVkYTkuLmM3MTVh
ZmMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0yOCw2
ICsyOCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAKICNpbmNsdWRlICJBWE9iamVj
dENhY2hlLmgiCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIK
ICNpbmNsdWRlICJDb250ZW50RGF0YS5oIgogI2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKQEAgLTgw
MywxMiArODA0LDI3IEBAIHN0YXRpYyBib29sIG11c3RSZXBhaW50RmlsbExheWVycyhjb25zdCBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBGaWxsTGF5ZXIqCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIFJlbmRlck9iamVjdDo6Ym9yZGVySW1hZ2VJc0xvYWRlZEFuZENhbkJlUmVu
ZGVyZWQoKSBjb25zdAorLy8gV2l0aCBwYXJhbGxlbCBpbWFnZSBkZWNvZGVycywgbG9hZGluZyBk
b25lIGRvZXMgbm90IGFsd2F5cyBtZWFuIHRoZSB3aG9sZSBpbWFnZSBjYW4gYmUgcmVuZGVyZWQu
CisvLyBJZiB0aGUgZ2l2ZW4gaW1hZ2UgaXMgYSBCaXRtYXBJbWFnZSwgd2UgbmVlZCB0byBjaGVj
ayBpZiBkZWNvZGluZyBpcyBjb21wbGV0ZWQgaW4gYWRkaXRpb24gdG8gbG9hZGluZyBkb25lLgor
Ym9vbCBSZW5kZXJPYmplY3Q6OmNhblJlbmRlckVudGlyZUltYWdlKFN0eWxlSW1hZ2UqIHN0eWxl
SW1hZ2UpIGNvbnN0Cit7CisgICAgaWYgKHN0eWxlSW1hZ2UgJiYgIXN0eWxlSW1hZ2UtPmlzTG9h
ZGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzdHlsZUltYWdlICYmIChz
dHlsZUltYWdlLT5pc0NhY2hlZEltYWdlKCkgfHwgc3R5bGVJbWFnZS0+aXNDYWNoZWRJbWFnZVNl
dCgpKSkgeworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gc3R5bGVJbWFnZS0+aW1hZ2Uo
Y29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPih0aGlzKSwgSW50U2l6ZSgpKTsKKyAgICAgICAgaWYg
KGltYWdlLmdldCgpICYmIGltYWdlLT5pc0JpdG1hcEltYWdlKCkgJiYgIXRvUmV0YWluZWRNb2Rl
Qml0bWFwSW1hZ2UoaW1hZ2UuZ2V0KCkpLT5jdXJyZW50RnJhbWVJc0NvbXBsZXRlKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFJlbmRlck9iamVjdDo6Y2FuUmVuZGVyRW50aXJlQm9yZGVySW1hZ2UoKSBjb25zdAogewogICAg
IEFTU0VSVChzdHlsZSgpLT5oYXNCb3JkZXIoKSk7CiAKICAgICBTdHlsZUltYWdlKiBib3JkZXJJ
bWFnZSA9IHN0eWxlKCktPmJvcmRlckltYWdlKCkuaW1hZ2UoKTsKLSAgICByZXR1cm4gYm9yZGVy
SW1hZ2UgJiYgYm9yZGVySW1hZ2UtPmNhblJlbmRlcih0aGlzLCBzdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCkpICYmIGJvcmRlckltYWdlLT5pc0xvYWRlZCgpOworICAgIHJldHVybiBib3JkZXJJbWFn
ZSAmJiBib3JkZXJJbWFnZS0+Y2FuUmVuZGVyKHRoaXMsIHN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSkgJiYgY2FuUmVuZGVyRW50aXJlSW1hZ2UoYm9yZGVySW1hZ2UpOwogfQogCiBib29sIFJlbmRl
ck9iamVjdDo6bXVzdFJlcGFpbnRCYWNrZ3JvdW5kT3JCb3JkZXIoKSBjb25zdApAQCAtODI0LDcg
Kzg0MCw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjptdXN0UmVwYWludEJhY2tncm91bmRPckJvcmRl
cigpIGNvbnN0CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAKICAgICAvLyBPdXIgZmlsbCBs
YXllcnMgYXJlIG9rLiAgTGV0J3MgY2hlY2sgYm9yZGVyLgotICAgIGlmIChzdHlsZSgpLT5oYXNC
b3JkZXIoKSAmJiBib3JkZXJJbWFnZUlzTG9hZGVkQW5kQ2FuQmVSZW5kZXJlZCgpKQorICAgIGlm
IChzdHlsZSgpLT5oYXNCb3JkZXIoKSAmJiBjYW5SZW5kZXJFbnRpcmVCb3JkZXJJbWFnZSgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCA2MGM1NjkwLi5iNTU1MWRiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC01MTQsNyArNTE0LDggQEAgcHVibGlj
OgogICAgIGJvb2wgaGFzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxkcy5oYXNMYXll
cigpOyB9CiAgICAgCiAgICAgYm9vbCBoYXNCb3hEZWNvcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJu
IG1fYml0ZmllbGRzLnBhaW50QmFja2dyb3VuZCgpOyB9Ci0gICAgYm9vbCBib3JkZXJJbWFnZUlz
TG9hZGVkQW5kQ2FuQmVSZW5kZXJlZCgpIGNvbnN0OworICAgIGJvb2wgY2FuUmVuZGVyRW50aXJl
SW1hZ2UoU3R5bGVJbWFnZSopIGNvbnN0OworICAgIGJvb2wgY2FuUmVuZGVyRW50aXJlQm9yZGVy
SW1hZ2UoKSBjb25zdDsKICAgICBib29sIG11c3RSZXBhaW50QmFja2dyb3VuZE9yQm9yZGVyKCkg
Y29uc3Q7CiAgICAgYm9vbCBoYXNCYWNrZ3JvdW5kKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+
aGFzQmFja2dyb3VuZCgpOyB9CiAgICAgYm9vbCBuZWVkc0xheW91dCgpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuY3BwCmluZGV4IDE5NWEwNWMuLmM0
YWIxY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuY3Bw
CkBAIC0yMiw2ICsyMiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmlsbExh
eWVyLmgiCiAKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBzdHJ1Y3QgU2FtZVNpemVBc0ZpbGxMYXllciB7CkBAIC0yNjksMTEgKzI3MSwxMSBAQCBi
b29sIEZpbGxMYXllcjo6Y29udGFpbnNJbWFnZShTdHlsZUltYWdlKiBzKSBjb25zdAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBGaWxsTGF5ZXI6OmltYWdlc0FyZUxvYWRlZCgpIGNvbnN0
Citib29sIEZpbGxMYXllcjo6Y2FuUmVuZGVyRW50aXJlSW1hZ2UoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlcikgY29uc3QKIHsKICAgICBjb25zdCBGaWxsTGF5ZXIqIGN1cnI7CiAgICAgZm9yIChjdXJy
ID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPm5leHQoKSkgewotICAgICAgICBpZiAoY3Vyci0+
bV9pbWFnZSAmJiAhY3Vyci0+bV9pbWFnZS0+aXNMb2FkZWQoKSkKKyAgICAgICAgaWYgKGN1cnIt
Pm1faW1hZ2UgJiYgIXJlbmRlcmVyLT5jYW5SZW5kZXJFbnRpcmVJbWFnZShjdXJyLT5tX2ltYWdl
LmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuaAppbmRleCA3ZjFjZWIxLi5lMjEwZDYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5oCkBAIC0zNCw2ICsz
NCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgUmVuZGVyT2JqZWN0OworCiBz
dHJ1Y3QgRmlsbFNpemUgewogICAgIEZpbGxTaXplKCkKICAgICAgICAgOiB0eXBlKFNpemVMZW5n
dGgpCkBAIC0xMjgsNyArMTMwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIGJvb2wgY29udGFp
bnNJbWFnZShTdHlsZUltYWdlKikgY29uc3Q7Ci0gICAgYm9vbCBpbWFnZXNBcmVMb2FkZWQoKSBj
b25zdDsKKyAgICBib29sIGNhblJlbmRlckVudGlyZUltYWdlKFJlbmRlck9iamVjdCopIGNvbnN0
OwogCiAgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcAppbmRleCA1NmJlNWNkLi5hMTk2ZTc1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNw
cApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5oIgorI2luY2x1ZGUgIlJldGFpbmVkTW9kZUJpdG1hcEltYWdlLmgiCiAjaW5jbHVk
ZSAiU1ZHSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAi
U1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgpAQCAtMTI3LDE0ICsxMjgsMTQgQEAgdm9pZCBSZW5k
ZXJTVkdJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50
JikKICAgICAgICAgICAgIFNWR1JlbmRlcmluZ0NvbnRleHQgcmVuZGVyaW5nQ29udGV4dCh0aGlz
LCBjaGlsZFBhaW50SW5mbyk7CiAKICAgICAgICAgICAgIGlmIChyZW5kZXJpbmdDb250ZXh0Lmlz
UmVuZGVyaW5nUHJlcGFyZWQoKSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1h
Z2UgPSBtX2ltYWdlUmVzb3VyY2UtPmltYWdlKCk7CisgICAgICAgICAgICAgICAgSW1hZ2UqIGlt
YWdlID0gdG9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZUlmUG9zc2libGUobV9pbWFnZVJlc291cmNl
LT5pbWFnZSgpLmdldCgpKTsKICAgICAgICAgICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSBt
X29iamVjdEJvdW5kaW5nQm94OwogICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0KDAs
IDAsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCkpOwogCiAgICAgICAgICAgICAgICAg
U1ZHSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVsZW1l
bnQqPihub2RlKCkpOwogICAgICAgICAgICAgICAgIGltYWdlRWxlbWVudC0+cHJlc2VydmVBc3Bl
Y3RSYXRpbygpLnRyYW5zZm9ybVJlY3QoZGVzdFJlY3QsIHNyY1JlY3QpOwogCi0gICAgICAgICAg
ICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAgICAgICAgICAgICAgY2hp
bGRQYWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBkZXN0UmVjdCwgc3JjUmVjdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCBmMTE1MTk4Li5mODA2NWRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTA3LTE3ICBIdWFuZyBEb25nc3VuZyAg
PGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIEFkZCBwYXJhbGxlbCBpbWFnZSBk
ZWNvZGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTA5MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
dXRob3JlZCBieSBIdWFuZyBEb25nc3VuZyBhbmQgS3dhbmcgWXVsIFNlby4KKworICAgICAgICBN
YWtlIGltYWdlIGRlY29kaW5nIG9mZiB0aGUgbWFpbiB0aHJlYWQsIHNvIHRoYXQgdGhlIG1haW4g
dGhyZWFkIGNhbiBzcGVuZCBtb3JlCisgICAgICAgIHRpbWUgaW4gbG9hZGluZywgcGFyc2luZywg
c2NyaXB0aW5nIGFuZCBsYXlvdXQgd2hpbGUgaW1hZ2UgZGVjb2RpbmcgdGhyZWFkcyBkZWNvZGUK
KyAgICAgICAgaW1hZ2VzIGluIHRoZSBiYWNrZ3JvdW5kLgorCisgICAgICAgIFJlZmVyIHRvIGh0
dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L3B1Yj9pZD0xMmdmN01oTkhmdXBlUjNHZFJG
LWgyVnpnODZ2aUNid1hxOF9KQnlIS2xnMAorICAgICAgICBmb3IgZGV0YWlsZWQgZXhwbGFuYXRp
b24uCisKKyAgICAgICAgKiBzcmMvV2ViSW1hZ2VDRy5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkltYWdlOjpmcm9tRGF0YSk6CisgICAgICAgICogc3JjL1dlYkltYWdlU2tpYS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkltYWdlOjpmcm9tRGF0YSk6CisKKzIwMTItMDctMTcgIEh1YW5nIERv
bmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgUHJlcGFyZSBmb3Ig
cGFyYWxsZWwgaW1hZ2UgZGVjb2Rlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTkwNDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCByZXR1cm5zIElt
YWdlRnJhbWVEYXRhIGluc3RlYWQgb2YKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIsIHNvIEkgYW1l
bmRlZCBXZWJJbWFnZUNHIGFuZCBXZWJJbWFnZVNraWEgdG8gdXNlCisgICAgICAgIGNoYW5nZWQg
SW1hZ2VTb3VyY2UgY29ycmVjdGx5LgorCisgICAgICAgICogc3JjL1dlYkltYWdlQ0cuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJJbWFnZTo6ZnJvbURhdGEpOgorICAgICAgICAqIHNyYy9XZWJJ
bWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbWFnZTo6ZnJvbURhdGEpOgorCiAy
MDEyLTA3LTE3ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5y
ZXZpZXdlZC4gIFJvbGxlZCBERVBTLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFn
ZUNHLmNwcAppbmRleCAyNDJhNjgzLi5jZGUxMzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJbWFnZUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJJbWFnZUNHLmNwcApAQCAtNzYsNyArNzYsOCBAQCBXZWJJbWFnZSBXZWJJbWFnZTo6
ZnJvbURhdGEoY29uc3QgV2ViRGF0YSYgZGF0YSwgY29uc3QgV2ViU2l6ZSYgZGVzaXJlZFNpemUp
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gZnJhbWUoQWRv
cHRDRiwgc291cmNlLmNyZWF0ZUZyYW1lQXRJbmRleChpbmRleCkpOworICAgIEltYWdlRnJhbWVE
YXRhIGltYWdlRnJhbWVEYXRhID0gc291cmNlLnJlcXVlc3RGcmFtZUF0SW5kZXgoaW5kZXgpOwor
ICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBmcmFtZShBZG9wdENGLCBpbWFnZUZyYW1lRGF0YS5t
X2ZyYW1lKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gV2ViSW1hZ2UoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VTa2lhLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkltYWdlU2tpYS5jcHAKaW5kZXggMzZkYWJh
Yy4uNWQ4NjRhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1h
Z2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFnZVNraWEu
Y3BwCkBAIC03Nyw3ICs3Nyw4IEBAIFdlYkltYWdlIFdlYkltYWdlOjpmcm9tRGF0YShjb25zdCBX
ZWJEYXRhJiBkYXRhLCBjb25zdCBXZWJTaXplJiBkZXNpcmVkU2l6ZSkKICAgICAgICAgfQogICAg
IH0KIAotICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IGZyYW1lID0gYWRvcHRQdHIoc291cmNl
LmNyZWF0ZUZyYW1lQXRJbmRleChpbmRleCkpOworICAgIEltYWdlRnJhbWVEYXRhIGltYWdlRnJh
bWVEYXRhID0gc291cmNlLnJlcXVlc3RGcmFtZUF0SW5kZXgoaW5kZXgpOworICAgIE93blB0cjxO
YXRpdmVJbWFnZVNraWE+IGZyYW1lID0gYWRvcHRQdHIoaW1hZ2VGcmFtZURhdGEubV9mcmFtZSk7
CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIFdlYkltYWdlKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdDIvQ01ha2VM
aXN0cy50eHQKaW5kZXggYzhkMWMzNS4uNTZlZWY1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKQEAg
LTEwNCw3ICsxMDQsNiBAQCBTRVQoV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiBTRVQoV2Vi
S2l0Ml9TT1VSQ0VTCiAgICAgUGxhdGZvcm0vTG9nZ2luZy5jcHAKICAgICBQbGF0Zm9ybS9Nb2R1
bGUuY3BwCi0gICAgUGxhdGZvcm0vV29ya1F1ZXVlLmNwcAogCiAgICAgUGxhdGZvcm0vQ29yZUlQ
Qy9Bcmd1bWVudENvZGVycy5jcHAKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rl
ci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCBkMmE5YzQ0Li4yM2JjYWEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzIgQEAKKzIwMTItMDctMDkgIEt3YW5nIFl1bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5l
dD4KKworICAgICAgICBNb3ZlIFdvcmtRdWV1ZSB0byBXVEYKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNzgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5LCBXb3JrUXVldWUgaXMgaW4gV2Vi
S2l0Mi4gQnkgbW92aW5nIFdvcmtRdWV1ZSBhbmQKKyAgICAgICAgUGxhdGZvcm1Qcm9jZXNzSWRl
bnRpZmllciB0byBXVEYsIFdlYkNvcmUgY29kZSBjYW4gdXNlIGl0LgorCisgICAgICAgIFRoaXMg
cGF0Y2ggaXMgcmVxdWlyZWQgZm9yIHBhcmFsbGVsIGltYWdlIGRlY29kZXJzIGJlY2F1c2UKKyAg
ICAgICAgV29ya1F1ZXVlIGlzIHVzZWQgdG8gbWFrZSBpbWFnZSBkZWNvZGluZyBvZmYgdGhlIG1h
aW4gdGhyZWFkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaDoK
KyAgICAgICAgKENvbm5lY3Rpb24pOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9D
b25uZWN0aW9uVW5peC5jcHA6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpzZXRTaG91
bGRDbG9zZUNvbm5lY3Rpb25PblByb2Nlc3NUZXJtaW5hdGlvbik6CisgICAgICAgICogUGxhdGZv
cm1FZmwuY21ha2U6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
TGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNo
ZXIvUHJvY2Vzc0xhdW5jaGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVh
ZExhdW5jaGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBXZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd2luL1dlYktpdDIudmNwcm9qOgorCiAy
MDEyLTA3LTE3ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+
CiAKICAgICAgICAgW0VGTF0gUmVwbGFjZSAwIGJ5IE5VTEwgaW4gcHVibGljIGhlYWRlcnMgZG9j
dW1lbnRhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5h
bSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZTkzNDhkZS4uMDk3
NzUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yNTYsNyArMjU2LDYgQEAg
d2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3Vu
aXgvQ29ubmVjdGlvblVuaXguY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvTG9n
Z2luZ0d0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Nb2R1bGVHdGsuY3Bw
IFwKLQlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcCBcCiAJU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL0xvZ2dpbmcuaCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTW9kdWxlLmNwcCBcCkBA
IC0yNjQsOCArMjYzLDYgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmggXAogCVNvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL1NoYXJlZE1lbW9yeS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS91bml4L1No
YXJlZE1lbW9yeVVuaXguY3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUu
Y3BwIFwKLQlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaCBcCiAJU291cmNlL1dl
YktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5jcHAgXApAQCAt
MTE4NSwxMSArMTE4Miw4IEBAIHdlYmtpdDJfcGx1Z2luX3Byb2Nlc3Nfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBc
CiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTW9kdWxlLmNwcCBcCiAJU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vTW9kdWxlLmggXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5j
cHAgXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5oIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaCBcCiAJU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Z3RrL01vZHVsZUd0ay5jcHAgXAotCVNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVl
dWVHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVu
aXguY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQ
cm94eS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxl
clByb3h5LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9D
b25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24u
aAppbmRleCA3NzNmNmUwLi5hMDJmOTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9D
b3JlSVBDL0Nvbm5lY3Rpb24uaApAQCAtMzIsMTEgKzMyLDExIEBACiAjaW5jbHVkZSAiQXJndW1l
bnRFbmNvZGVyLmgiCiAjaW5jbHVkZSAiQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlE
LmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiAjaWYg
T1MoREFSV0lOKQogI2luY2x1ZGUgPG1hY2gvbWFjaF9wb3J0Lmg+CkBAIC00Nyw3ICs0Nyw3IEBA
IGNsYXNzIFFTb2NrZXROb3RpZmllcjsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpIHx8IFBM
QVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lk
ZW50aWZpZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oPgog
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEyNyw3ICsxMjcsNyBAQCBwdWJsaWM6
CiAjaWYgT1MoREFSV0lOKQogICAgIHZvaWQgc2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25NYWNo
RXhjZXB0aW9ucygpOwogI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgdm9pZCBzZXRTaG91bGRDbG9z
ZUNvbm5lY3Rpb25PblByb2Nlc3NUZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vzc0lk
ZW50aWZpZXIpOworICAgIHZvaWQgc2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9jZXNzVGVy
bWluYXRpb24oUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcik7CiAjZW5kaWYKIAogICAgIHZvaWQg
c2V0T25seVNlbmRNZXNzYWdlc0FzRGlzcGF0Y2hXaGVuV2FpdGluZ0ZvclN5bmNSZXBseVdoZW5Q
cm9jZXNzaW5nU3VjaEFNZXNzYWdlKGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAKaW5kZXggODg1ZTQ5NS4u
NDlhNTA4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4
L0Nvbm5lY3Rpb25Vbml4LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBD
L3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCkBAIC01NTcsNyArNTU3LDcgQEAgYm9vbCBDb25uZWN0
aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlKE1lc3NhZ2VJRCBtZXNzYWdlSUQsIFBhc3NPd25QdHI8
QXJndW1lbnRFbmMKIH0KIAogI2lmIFBMQVRGT1JNKFFUKQotdm9pZCBDb25uZWN0aW9uOjpzZXRT
aG91bGRDbG9zZUNvbm5lY3Rpb25PblByb2Nlc3NUZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3Jt
UHJvY2Vzc0lkZW50aWZpZXIgcHJvY2VzcykKK3ZvaWQgQ29ubmVjdGlvbjo6c2V0U2hvdWxkQ2xv
c2VDb25uZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24oUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmll
ciBwcm9jZXNzKQogewogICAgIG1fY29ubmVjdGlvblF1ZXVlLmRpc3BhdGNoT25UZXJtaW5hdGlv
bihwcm9jZXNzLCBXVEY6OmJpbmQoJkNvbm5lY3Rpb246OmNvbm5lY3Rpb25EaWRDbG9zZSwgdGhp
cykpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9j
ZXNzSWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNz
SWRlbnRpZmllci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmVjYmU4Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZp
ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5k
ZWYgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcl9oCi0jZGVmaW5lIFBsYXRmb3JtUHJvY2Vzc0lk
ZW50aWZpZXJfaAotCi0jaWYgUExBVEZPUk0oUVQpCi1jbGFzcyBRUHJvY2VzczsKLSNlbGlmIFBM
QVRGT1JNKEVGTCkKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotI2lmIFBMQVRGT1JNKE1BQykKLXR5cGVkZWYgcGlkX3QgUGxhdGZvcm1Qcm9jZXNz
SWRlbnRpZmllcjsKLSNlbGlmIFBMQVRGT1JNKFdJTikKLXR5cGVkZWYgSEFORExFIFBsYXRmb3Jt
UHJvY2Vzc0lkZW50aWZpZXI7Ci0jZWxpZiBQTEFURk9STShRVCkKLXR5cGVkZWYgUVByb2Nlc3Mq
IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7Ci0jZWxpZiBQTEFURk9STShHVEspCi0jaWZkZWYg
R19PU19XSU4zMgotdHlwZWRlZiB2b2lkKiBHUGlkOwotI2Vsc2UKLXR5cGVkZWYgaW50IEdQaWQ7
Ci0jZW5kaWYKLXR5cGVkZWYgR1BpZCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOwotI2VsaWYg
UExBVEZPUk0oRUZMKQotdHlwZWRlZiBwaWRfdCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOwot
I2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdCAKLQotI2VuZGlmIC8vIFBsYXRmb3JtUHJv
Y2Vzc0lkZW50aWZpZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29y
a1F1ZXVlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1ZS5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiY2RkMjIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVl
LmgiCi0KLVdvcmtRdWV1ZTo6V29ya1F1ZXVlKGNvbnN0IGNoYXIqIG5hbWUpCi0gICAgOiBtX2lz
VmFsaWQodHJ1ZSkKLXsKLSAgICBwbGF0Zm9ybUluaXRpYWxpemUobmFtZSk7Ci19Ci0KLVdvcmtR
dWV1ZTo6fldvcmtRdWV1ZSgpCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX2lzVmFsaWRNdXRleCk7Ci0gICAgQVNTRVJUKCFtX2lzVmFsaWQpOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgV29ya1F1ZXVlOjppbnZhbGlkYXRlKCkKLXsKLSAgICB7Ci0gICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRNdXRleCk7Ci0gICAgICAgIG1faXNWYWxpZCA9
IGZhbHNlOwotICAgIH0KLQotICAgIHBsYXRmb3JtSW52YWxpZGF0ZSgpOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmggYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Xb3JrUXVldWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYzMGRj
MC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg
MjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBXb3JrUXVldWVfaAotI2RlZmluZSBXb3JrUXVldWVfaAotCi0jaWYgT1Mo
REFSV0lOKQotI2lmIEhBVkUoRElTUEFUQ0hfSCkKLSNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRj
aC5oPgotI2VuZGlmCi0jZW5kaWYKLQotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Z1bmN0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0jaWYgKFBMQVRG
T1JNKFFUKSAmJiAhT1MoREFSV0lOKSkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwp
Ci0jaW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShRVCkgJiYgIU9TKERBUldJTikKLSNpbmNsdWRlIDxRU29ja2V0Tm90aWZpZXI+Ci1j
bGFzcyBRT2JqZWN0OwotY2xhc3MgUVRocmVhZDsKLSNlbGlmIFBMQVRGT1JNKEdUSykKLSNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci10eXBlZGVmIGdib29sZWFuICgqR1NvdXJjZUZ1
bmMpIChncG9pbnRlciBkYXRhKTsKLSNlbGlmIFBMQVRGT1JNKEVGTCkKLSNpbmNsdWRlIDxFY29y
ZS5oPgotI2VuZGlmCi0KLWNsYXNzIFdvcmtRdWV1ZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoV29ya1F1ZXVlKTsKLQotcHVibGljOgotICAgIGV4cGxpY2l0IFdvcmtRdWV1ZShjb25zdCBj
aGFyKiBuYW1lKTsKLSAgICB+V29ya1F1ZXVlKCk7Ci0KLSAgICAvLyBXaWxsIGRpc3BhdGNoIHRo
ZSBnaXZlbiBmdW5jdGlvbiB0byBydW4gYXMgc29vbiBhcyBwb3NzaWJsZS4KLSAgICB2b2lkIGRp
c3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKLQotICAgIC8vIFdpbGwgZGlzcGF0Y2gg
dGhlIGdpdmVuIGZ1bmN0aW9uIGFmdGVyIHRoZSBnaXZlbiBkZWxheSAoaW4gc2Vjb25kcykuCi0g
ICAgdm9pZCBkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIGRvdWJs
ZSBkZWxheSk7Ci0KLSAgICB2b2lkIGludmFsaWRhdGUoKTsKLQotI2lmIE9TKERBUldJTikKLSAg
ICBlbnVtIE1hY2hQb3J0RXZlbnRUeXBlIHsKLSAgICAgICAgLy8gRmlyZWQgd2hlbiB0aGVyZSBp
cyBkYXRhIG9uIHRoZSBnaXZlbiByZWNlaXZlIHJpZ2h0LgotICAgICAgICBNYWNoUG9ydERhdGFB
dmFpbGFibGUsCi0gICAgICAgIAotICAgICAgICAvLyBGaXJlZCB3aGVuIHRoZSByZWNlaXZlIHJp
Z2h0IGZvciB0aGlzIHNlbmQgcmlnaHQgaGFzIGJlZW4gZGVzdHJveWVkLgotICAgICAgICBNYWNo
UG9ydERlYWROYW1lTm90aWZpY2F0aW9uCi0gICAgfTsKLSAgICAKLSAgICAvLyBXaWxsIGV4ZWN1
dGUgdGhlIGdpdmVuIGZ1bmN0aW9uIHdoZW5ldmVyIHRoZSBnaXZlbiBtYWNoIHBvcnQgZXZlbnQg
ZmlyZXMuCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgd2lsbCBhZG9wdCB0aGUgbWFjaCBwb3J0IGFu
ZCBkZXN0cm95IGl0IHdoZW4gdGhlIHdvcmsgcXVldWUgaXMgaW52YWxpZGF0ZWQuCi0gICAgdm9p
ZCByZWdpc3Rlck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90LCBNYWNoUG9ydEV2ZW50
VHlwZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwotICAgIHZvaWQgdW5yZWdpc3Rlck1hY2hQ
b3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90KTsKLSNlbGlmIFBMQVRGT1JNKFdJTikKLSAgICB2
b2lkIHJlZ2lzdGVySGFuZGxlKEhBTkRMRSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwotICAg
IHZvaWQgdW5yZWdpc3RlckFuZENsb3NlSGFuZGxlKEhBTkRMRSk7Ci0jZWxpZiBQTEFURk9STShR
VCkKLSAgICBRU29ja2V0Tm90aWZpZXIqIHJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCwg
UVNvY2tldE5vdGlmaWVyOjpUeXBlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0gICAgdm9p
ZCBkaXNwYXRjaE9uVGVybWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVy
LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0jZWxpZiBQTEFURk9STShHVEspCi0gICAgdm9p
ZCByZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQsIGludCwgY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYpOwotICAgIHZvaWQgdW5yZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQpOwotICAg
IHZvaWQgZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRp
ZmllciwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwotI2VsaWYgUExBVEZPUk0oRUZMKQotICAg
IHZvaWQgcmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50LCBjb25zdCBGdW5jdGlvbjx2b2lk
KCk+Jik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCk7Ci0jZW5k
aWYKLQotcHJpdmF0ZToKLSAgICAvLyBGSVhNRTogVXNlIGFuIGF0b21pYyBib29sZWFuIGhlcmUg
aW5zdGVhZC4KLSAgICBNdXRleCBtX2lzVmFsaWRNdXRleDsKLSAgICBib29sIG1faXNWYWxpZDsK
LQotICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqIG5hbWUpOwotICAgIHZv
aWQgcGxhdGZvcm1JbnZhbGlkYXRlKCk7Ci0KLSNpZiBPUyhEQVJXSU4pCi0jaWYgSEFWRShESVNQ
QVRDSF9IKQotICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVGdW5jdGlvbih2b2lkKik7Ci0gICAgTXV0
ZXggbV9ldmVudFNvdXJjZXNNdXRleDsKLSAgICBjbGFzcyBFdmVudFNvdXJjZTsKLSAgICBIYXNo
TWFwPG1hY2hfcG9ydF90LCBFdmVudFNvdXJjZSo+IG1fZXZlbnRTb3VyY2VzOwotICAgIGRpc3Bh
dGNoX3F1ZXVlX3QgbV9kaXNwYXRjaFF1ZXVlOwotI2VuZGlmCi0jZWxpZiBQTEFURk9STShXSU4p
Ci0gICAgY2xhc3MgV29ya0l0ZW1XaW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8V29y
a0l0ZW1XaW4+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtJ
dGVtV2luPiBjcmVhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIFdvcmtRdWV1ZSopOwotICAg
ICAgICB2aXJ0dWFsIH5Xb3JrSXRlbVdpbigpOwotCi0gICAgICAgIEZ1bmN0aW9uPHZvaWQoKT4m
IGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbjsgfQotICAgICAgICBXb3JrUXVldWUqIHF1
ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9xdWV1ZTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAg
ICBXb3JrSXRlbVdpbihjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7Ci0KLSAg
ICBwcml2YXRlOgotICAgICAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247Ci0gICAgICAg
IFdvcmtRdWV1ZSogbV9xdWV1ZTsKLSAgICB9OwotCi0gICAgY2xhc3MgSGFuZGxlV29ya0l0ZW0g
OiBwdWJsaWMgV29ya0l0ZW1XaW4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGNyZWF0ZUJ5QWRvcHRpbmdIYW5kbGUoSEFORExFLCBjb25z
dCBGdW5jdGlvbjx2b2lkKCk+JiwgV29ya1F1ZXVlKik7Ci0gICAgICAgIHZpcnR1YWwgfkhhbmRs
ZVdvcmtJdGVtKCk7Ci0KLSAgICAgICAgdm9pZCBzZXRXYWl0SGFuZGxlKEhBTkRMRSB3YWl0SGFu
ZGxlKSB7IG1fd2FpdEhhbmRsZSA9IHdhaXRIYW5kbGU7IH0KLSAgICAgICAgSEFORExFIHdhaXRI
YW5kbGUoKSBjb25zdCB7IHJldHVybiBtX3dhaXRIYW5kbGU7IH0KLQotICAgIHByaXZhdGU6Ci0g
ICAgICAgIEhhbmRsZVdvcmtJdGVtKEhBTkRMRSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYsIFdv
cmtRdWV1ZSopOwotCi0gICAgICAgIEhBTkRMRSBtX2hhbmRsZTsKLSAgICAgICAgSEFORExFIG1f
d2FpdEhhbmRsZTsKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgQ0FMTEJBQ0sgaGFuZGxlQ2Fs
bGJhY2sodm9pZCogY29udGV4dCwgQk9PTEVBTiB0aW1lck9yV2FpdEZpcmVkKTsKLSAgICBzdGF0
aWMgdm9pZCBDQUxMQkFDSyB0aW1lckNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4gdGlt
ZXJPcldhaXRGaXJlZCk7Ci0gICAgc3RhdGljIERXT1JEIFdJTkFQSSB3b3JrVGhyZWFkQ2FsbGJh
Y2sodm9pZCogY29udGV4dCk7Ci0KLSAgICBib29sIHRyeVJlZ2lzdGVyQXNXb3JrVGhyZWFkKCk7
Ci0gICAgdm9pZCB1bnJlZ2lzdGVyQXNXb3JrVGhyZWFkKCk7Ci0gICAgdm9pZCBwZXJmb3JtV29y
a09uUmVnaXN0ZXJlZFdvcmtUaHJlYWQoKTsKLQotICAgIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJX
YWl0QW5kRGVzdHJveUl0ZW1Tb29uKFBhc3NSZWZQdHI8SGFuZGxlV29ya0l0ZW0+KTsKLSAgICBz
dGF0aWMgRFdPUkQgV0lOQVBJIHVucmVnaXN0ZXJXYWl0QW5kRGVzdHJveUl0ZW1DYWxsYmFjayh2
b2lkKiBjb250ZXh0KTsKLQotICAgIHZvbGF0aWxlIExPTkcgbV9pc1dvcmtUaHJlYWRSZWdpc3Rl
cmVkOwotCi0gICAgTXV0ZXggbV93b3JrSXRlbVF1ZXVlTG9jazsKLSAgICBWZWN0b3I8UmVmUHRy
PFdvcmtJdGVtV2luPiA+IG1fd29ya0l0ZW1RdWV1ZTsKLQotICAgIE11dGV4IG1faGFuZGxlc0xv
Y2s7Ci0gICAgSGFzaE1hcDxIQU5ETEUsIFJlZlB0cjxIYW5kbGVXb3JrSXRlbT4gPiBtX2hhbmRs
ZXM7Ci0KLSAgICBIQU5ETEUgbV90aW1lclF1ZXVlOwotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAg
Y2xhc3MgV29ya0l0ZW1RdDsKLSAgICBRVGhyZWFkKiBtX3dvcmtUaHJlYWQ7Ci0gICAgZnJpZW5k
IGNsYXNzIFdvcmtJdGVtUXQ7Ci0jZWxpZiBQTEFURk9STShHVEspCi0gICAgc3RhdGljIHZvaWQg
c3RhcnRXb3JrUXVldWVUaHJlYWQoV29ya1F1ZXVlKik7Ci0gICAgdm9pZCB3b3JrUXVldWVUaHJl
YWRCb2R5KCk7Ci0gICAgdm9pZCBkaXNwYXRjaE9uU291cmNlKEdTb3VyY2UqLCBjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiwgR1NvdXJjZUZ1bmMpOwotCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3dv
cmtRdWV1ZVRocmVhZDsKLSAgICBHUmVmUHRyPEdNYWluQ29udGV4dD4gbV9ldmVudENvbnRleHQ7
Ci0gICAgTXV0ZXggbV9ldmVudExvb3BMb2NrOwotICAgIEdSZWZQdHI8R01haW5Mb29wPiBtX2V2
ZW50TG9vcDsKLSAgICBNdXRleCBtX2V2ZW50U291cmNlc0xvY2s7Ci0gICAgY2xhc3MgRXZlbnRT
b3VyY2U7Ci0gICAgSGFzaE1hcDxpbnQsIFZlY3RvcjxFdmVudFNvdXJjZSo+ID4gbV9ldmVudFNv
dXJjZXM7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGludCwgVmVjdG9yPEV2ZW50U291cmNlKj4gPjo6
aXRlcmF0b3IgRXZlbnRTb3VyY2VJdGVyYXRvcjsgCi0jZWxpZiBQTEFURk9STShFRkwpCi0gICAg
ZmRfc2V0IG1fZmlsZURlc2NyaXB0b3JTZXQ7Ci0gICAgaW50IG1fbWF4RmlsZURlc2NyaXB0b3I7
Ci0gICAgaW50IG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvcjsKLSAgICBpbnQgbV93cml0ZVRvUGlw
ZURlc2NyaXB0b3I7Ci0gICAgYm9vbCBtX3RocmVhZExvb3A7Ci0KLSAgICBWZWN0b3I8RnVuY3Rp
b248dm9pZCgpPiA+IG1fd29ya0l0ZW1RdWV1ZTsKLSAgICBNdXRleCBtX3dvcmtJdGVtUXVldWVM
b2NrOwotCi0gICAgaW50IG1fc29ja2V0RGVzY3JpcHRvcjsKLSAgICBGdW5jdGlvbjx2b2lkKCk+
IG1fc29ja2V0RXZlbnRIYW5kbGVyOwotCi0gICAgSGFzaE1hcDxpbnQsIE93blB0cjxFY29yZV9U
aW1lcj4gPiBtX3RpbWVyczsKLQotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RocmVhZChjb25zdCBj
aGFyKik7Ci0gICAgc3RhdGljIHZvaWQqIHdvcmtRdWV1ZVRocmVhZChXb3JrUXVldWUqKTsKLSAg
ICB2b2lkIHBlcmZvcm1Xb3JrKCk7Ci0gICAgdm9pZCBwZXJmb3JtRmlsZURlc2NyaXB0b3JXb3Jr
KCk7Ci0gICAgc3RhdGljIGJvb2wgdGltZXJGaXJlZCh2b2lkKik7Ci0jZW5kaWYKLX07Ci0KLSNl
bmRpZiAvLyBXb3JrUXVldWVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
ZWZsL1dvcmtRdWV1ZUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1
ZXVlRWZsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFmZmVkZi4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9lZmwvV29ya1F1ZXVlRWZsLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAxMiBT
YW1zdW5nIEVsZWN0cm9uaWNzCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJX
b3JrUXVldWUuaCIKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLWNsYXNzIFRpbWVy
V29ya0l0ZW0gewotcHVibGljOgotICAgIFRpbWVyV29ya0l0ZW0oaW50IHRpbWVySUQsIGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQotICAgICAgICA6
IG1fZnVuY3Rpb24oZnVuY3Rpb24pCi0gICAgICAgICwgbV9xdWV1ZShxdWV1ZSkKLSAgICAgICAg
LCBtX3RpbWVySUQodGltZXJJRCkKLSAgICB7Ci0gICAgfQotICAgIH5UaW1lcldvcmtJdGVtKCkg
eyB9Ci0KLSAgICBGdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9m
dW5jdGlvbjsgfQotICAgIFdvcmtRdWV1ZSogcXVldWUoKSBjb25zdCB7IHJldHVybiBtX3F1ZXVl
OyB9Ci0KLSAgICBpbnQgdGltZXJJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZXJJRDsgfQotCi1w
cml2YXRlOgotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKLSAgICBXb3JrUXVldWUq
IG1fcXVldWU7Ci0gICAgaW50IG1fdGltZXJJRDsKLX07Ci0KLXN0YXRpYyBjb25zdCBpbnQgaW52
YWxpZFNvY2tldERlc2NyaXB0b3IgPSAtMTsKLXN0YXRpYyBjb25zdCBpbnQgdGhyZWFkTWVzc2Fn
ZVNpemUgPSAxOwotc3RhdGljIGNvbnN0IGNoYXIgZmluaXNoVGhyZWFkTWVzc2FnZVtdID0gIkYi
Owotc3RhdGljIGNvbnN0IGNoYXIgd2FrdXBUaHJlYWRNZXNzYWdlW10gPSAiVyI7Ci0KLXZvaWQg
V29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBp
bnQgZmRzWzJdOwotICAgIGlmIChwaXBlKGZkcykpCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotCi0gICAgbV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yID0gZmRzWzBdOwotICAgIG1fd3Jp
dGVUb1BpcGVEZXNjcmlwdG9yID0gZmRzWzFdOwotICAgIEZEX1pFUk8oJm1fZmlsZURlc2NyaXB0
b3JTZXQpOwotICAgIEZEX1NFVChtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3IsICZtX2ZpbGVEZXNj
cmlwdG9yU2V0KTsKLSAgICBtX21heEZpbGVEZXNjcmlwdG9yID0gbV9yZWFkRnJvbVBpcGVEZXNj
cmlwdG9yOwotCi0gICAgbV9zb2NrZXREZXNjcmlwdG9yID0gaW52YWxpZFNvY2tldERlc2NyaXB0
b3I7Ci0KLSAgICBtX3RocmVhZExvb3AgPSB0cnVlOwotICAgIGNyZWF0ZVRocmVhZChyZWludGVy
cHJldF9jYXN0PFdURjo6VGhyZWFkRnVuY3Rpb24+KCZXb3JrUXVldWU6OndvcmtRdWV1ZVRocmVh
ZCksIHRoaXMsIG5hbWUpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1JbnZhbGlkYXRl
KCkKLXsKLSAgICBzZW5kTWVzc2FnZVRvVGhyZWFkKGZpbmlzaFRocmVhZE1lc3NhZ2UpOwotfQot
Ci12b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmsoKQotewotICAgIG1fd29ya0l0ZW1RdWV1ZUxv
Y2subG9jaygpOwotCi0gICAgd2hpbGUgKCFtX3dvcmtJdGVtUXVldWUuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+ID4gd29ya0l0ZW1RdWV1ZTsKLSAgICAgICAg
bV93b3JrSXRlbVF1ZXVlLnN3YXAod29ya0l0ZW1RdWV1ZSk7Ci0KLSAgICAgICAgbV93b3JrSXRl
bVF1ZXVlTG9jay51bmxvY2soKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3Jr
SXRlbVF1ZXVlLnNpemUoKTsgKytpKQotICAgICAgICAgICAgd29ya0l0ZW1RdWV1ZVtpXSgpOwot
ICAgICAgICBtX3dvcmtJdGVtUXVldWVMb2NrLmxvY2soKTsKLSAgICB9Ci0gICAgbV93b3JrSXRl
bVF1ZXVlTG9jay51bmxvY2soKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBlcmZvcm1GaWxlRGVz
Y3JpcHRvcldvcmsoKQotewotICAgIGZkX3NldCByZWFkRmlsZURlc2NyaXB0b3JTZXQgPSBtX2Zp
bGVEZXNjcmlwdG9yU2V0OwotCi0gICAgaWYgKHNlbGVjdChtX21heEZpbGVEZXNjcmlwdG9yICsg
MSwgJnJlYWRGaWxlRGVzY3JpcHRvclNldCwgMCwgMCwgMCkgPj0gMCkgewotICAgICAgICBpZiAo
RkRfSVNTRVQobV9yZWFkRnJvbVBpcGVEZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0
KSkgewotICAgICAgICAgICAgY2hhciByZWFkQnVmW3RocmVhZE1lc3NhZ2VTaXplXTsKLSAgICAg
ICAgICAgIGlmIChyZWFkKG1fcmVhZEZyb21QaXBlRGVzY3JpcHRvciwgcmVhZEJ1ZiwgdGhyZWFk
TWVzc2FnZVNpemUpID09IC0xKQotICAgICAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IHJlYWQgZnJvbSBXb3JrUXVldWVUaHJlYWQgcGlwZSIpOwotICAgICAgICAgICAgaWYgKCFzdHJu
Y21wKHJlYWRCdWYsIGZpbmlzaFRocmVhZE1lc3NhZ2UsIHRocmVhZE1lc3NhZ2VTaXplKSkKLSAg
ICAgICAgICAgICAgICBtX3RocmVhZExvb3AgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChtX3NvY2tldERlc2NyaXB0b3IgIT0gaW52YWxpZFNvY2tldERlc2NyaXB0b3IgJiYgRkRf
SVNTRVQobV9zb2NrZXREZXNjcmlwdG9yLCAmcmVhZEZpbGVEZXNjcmlwdG9yU2V0KSkKLSAgICAg
ICAgICAgIG1fc29ja2V0RXZlbnRIYW5kbGVyKCk7Ci0gICAgfQotfQotCi12b2lkIFdvcmtRdWV1
ZTo6c2VuZE1lc3NhZ2VUb1RocmVhZChjb25zdCBjaGFyKiBtZXNzYWdlKQotewotICAgIGlmICh3
cml0ZShtX3dyaXRlVG9QaXBlRGVzY3JpcHRvciwgbWVzc2FnZSwgdGhyZWFkTWVzc2FnZVNpemUp
ID09IC0xKQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byB3YWtlIHVwIFdvcmtRdWV1ZSBU
aHJlYWQiKTsKLX0KLQotdm9pZCogV29ya1F1ZXVlOjp3b3JrUXVldWVUaHJlYWQoV29ya1F1ZXVl
KiB3b3JrUXVldWUpCi17Ci0gICAgd2hpbGUgKHdvcmtRdWV1ZS0+bV90aHJlYWRMb29wKSB7Ci0g
ICAgICAgIHdvcmtRdWV1ZS0+cGVyZm9ybVdvcmsoKTsKLSAgICAgICAgd29ya1F1ZXVlLT5wZXJm
b3JtRmlsZURlc2NyaXB0b3JXb3JrKCk7Ci0gICAgfQotCi0gICAgY2xvc2Uod29ya1F1ZXVlLT5t
X3JlYWRGcm9tUGlwZURlc2NyaXB0b3IpOwotICAgIGNsb3NlKHdvcmtRdWV1ZS0+bV93cml0ZVRv
UGlwZURlc2NyaXB0b3IpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpy
ZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgZmlsZURlc2NyaXB0b3IsIGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIGlmIChtX3NvY2tldERlc2NyaXB0b3IgIT0g
aW52YWxpZFNvY2tldERlc2NyaXB0b3IpCi0gICAgICAgIExPR19FUlJPUigiJWQgaXMgYWxyZWFk
eSByZWdpc3RlcmQuIiwgZmlsZURlc2NyaXB0b3IpOwotCi0gICAgbV9zb2NrZXREZXNjcmlwdG9y
ID0gZmlsZURlc2NyaXB0b3I7Ci0gICAgbV9zb2NrZXRFdmVudEhhbmRsZXIgPSBmdW5jdGlvbjsK
LQotICAgIGlmIChmaWxlRGVzY3JpcHRvciA+IG1fbWF4RmlsZURlc2NyaXB0b3IpCi0gICAgICAg
IG1fbWF4RmlsZURlc2NyaXB0b3IgPSBmaWxlRGVzY3JpcHRvcjsKLSAgICBGRF9TRVQoZmlsZURl
c2NyaXB0b3IsICZtX2ZpbGVEZXNjcmlwdG9yU2V0KTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnVu
cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IGZpbGVEZXNjcmlwdG9yKQotewotICAgIG1f
c29ja2V0RGVzY3JpcHRvciA9IGludmFsaWRTb2NrZXREZXNjcmlwdG9yOwotCi0gICAgaWYgKGZp
bGVEZXNjcmlwdG9yID09IG1fbWF4RmlsZURlc2NyaXB0b3IpCi0gICAgICAgIG1fbWF4RmlsZURl
c2NyaXB0b3IgPSBtX3JlYWRGcm9tUGlwZURlc2NyaXB0b3I7Ci0gICAgRkRfQ0xSKGZpbGVEZXNj
cmlwdG9yLCAmbV9maWxlRGVzY3JpcHRvclNldCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNw
YXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBNdXRleExvY2tl
ciBsb2NrZXIobV93b3JrSXRlbVF1ZXVlTG9jayk7Ci0gICAgbV93b3JrSXRlbVF1ZXVlLmFwcGVu
ZChmdW5jdGlvbik7Ci0gICAgc2VuZE1lc3NhZ2VUb1RocmVhZCh3YWt1cFRocmVhZE1lc3NhZ2Up
OwotfQotCi1ib29sIFdvcmtRdWV1ZTo6dGltZXJGaXJlZCh2b2lkKiBkYXRhKQotewotICAgIFRp
bWVyV29ya0l0ZW0qIGl0ZW0gPSBzdGF0aWNfY2FzdDxUaW1lcldvcmtJdGVtKj4oZGF0YSk7Ci0g
ICAgaWYgKGl0ZW0gJiYgaXRlbS0+cXVldWUoKS0+bV9pc1ZhbGlkKSB7Ci0gICAgICAgIGl0ZW0t
PnF1ZXVlKCktPmRpc3BhdGNoKGl0ZW0tPmZ1bmN0aW9uKCkpOwotICAgICAgICBpdGVtLT5xdWV1
ZSgpLT5tX3RpbWVycy50YWtlKGl0ZW0tPnRpbWVySUQoKSk7Ci0gICAgICAgIGRlbGV0ZSBpdGVt
OwotICAgIH0KLQotICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Ci19Ci0KLXZvaWQg
V29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVu
Y3Rpb24sIGRvdWJsZSBkZWxheSkKLXsKLSAgICBzdGF0aWMgaW50IHRpbWVySWQgPSAxOwotICAg
IG1fdGltZXJzLnNldCh0aW1lcklkLCBhZG9wdFB0cihlY29yZV90aW1lcl9hZGQoZGVsYXksIHJl
aW50ZXJwcmV0X2Nhc3Q8RWNvcmVfVGFza19DYj4odGltZXJGaXJlZCksIG5ldyBUaW1lcldvcmtJ
dGVtKHRpbWVySWQsIGZ1bmN0aW9uLCB0aGlzKSkpKTsKLSAgICB0aW1lcklkKys7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9ndGsvV29ya1F1ZXVlR3RrLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxZGZhYjgzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL2d0ay9Xb3JrUXVldWVHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjMwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5
cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXb3JrUXVldWUu
aCIKLQotI2luY2x1ZGUgIldLQmFzZS5oIgotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRl
IDxnbGliLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotCi0vLyBXb3JrUXVl
dWU6OkV2ZW50U291cmNlCi1jbGFzcyBXb3JrUXVldWU6OkV2ZW50U291cmNlIHsKLXB1YmxpYzoK
LSAgICBFdmVudFNvdXJjZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbiwgV29ya1F1
ZXVlKiB3b3JrUXVldWUsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUpCi0gICAgICAgIDogbV9m
dW5jdGlvbihmdW5jdGlvbikKLSAgICAgICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCi0gICAg
ICAgICwgbV9jYW5jZWxsYWJsZShjYW5jZWxsYWJsZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9p
ZCBjYW5jZWwoKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2NhbmNlbGxhYmxlKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBleGVjdXRlRXZlbnRTb3VyY2UoRXZlbnRTb3VyY2Uq
IGV2ZW50U291cmNlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGV2ZW50U291cmNlKTsKLSAgICAg
ICAgV29ya1F1ZXVlKiBxdWV1ZSA9IGV2ZW50U291cmNlLT5tX3dvcmtRdWV1ZTsKLSAgICAgICAg
ewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKHF1ZXVlLT5tX2lzVmFsaWRNdXRleCk7
Ci0gICAgICAgICAgICBpZiAoIXF1ZXVlLT5tX2lzVmFsaWQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZXZlbnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4gcGVyZm9ybVdvcmtPbmNlKEV2ZW50U291cmNlKiBl
dmVudFNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGV4ZWN1dGVFdmVudFNvdXJjZShldmVudFNvdXJj
ZSk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZ2Jvb2xlYW4g
cGVyZm9ybVdvcmsoR1NvY2tldCogc29ja2V0LCBHSU9Db25kaXRpb24gY29uZGl0aW9uLCBFdmVu
dFNvdXJjZSogZXZlbnRTb3VyY2UpCi0gICAgewotICAgICAgICBpZiAoIShjb25kaXRpb24gJiBH
X0lPX0lOKSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9fSFVQKSAmJiAhKGNvbmRpdGlvbiAmIEdfSU9f
RVJSKSkgewotICAgICAgICAgICAgLy8gRXZlbnRTb3VyY2UgaGFzIGJlZW4gY2FuY2VsbGVkLCBy
ZXR1cm4gRkFMU0UgdG8gZGVzdHJveSB0aGUgc291cmNlLgotICAgICAgICAgICAgcmV0dXJuIEZB
TFNFOwotICAgICAgICB9Ci0KLSAgICAgICAgZXhlY3V0ZUV2ZW50U291cmNlKGV2ZW50U291cmNl
KTsKLSAgICAgICAgcmV0dXJuIFRSVUU7Ci0gICAgfQotCi0gICAgc3RhdGljIGdib29sZWFuIHBl
cmZvcm1Xb3JrT25UZXJtaW5hdGlvbihHUGlkLCBnaW50LCBFdmVudFNvdXJjZSogZXZlbnRTb3Vy
Y2UpCi0gICAgewotICAgICAgICBleGVjdXRlRXZlbnRTb3VyY2UoZXZlbnRTb3VyY2UpOwotICAg
ICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgZGVsZXRlRXZlbnRT
b3VyY2UoRXZlbnRTb3VyY2UqIGV2ZW50U291cmNlKSAKLSAgICB7Ci0gICAgICAgIEFTU0VSVChl
dmVudFNvdXJjZSk7Ci0gICAgICAgIGRlbGV0ZSBldmVudFNvdXJjZTsKLSAgICB9Ci0gICAKLXB1
YmxpYzoKLSAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247Ci0gICAgV29ya1F1ZXVlKiBt
X3dvcmtRdWV1ZTsKLSAgICBHQ2FuY2VsbGFibGUqIG1fY2FuY2VsbGFibGU7Ci19OwotCi0vLyBX
b3JrUXVldWUKLXN0YXRpYyBjb25zdCBzaXplX3Qga1Zpc3VhbFN0dWRpb1RocmVhZE5hbWVMaW1p
dCA9IDMxOwotCi12b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIq
IG5hbWUpCi17Ci0gICAgbV9ldmVudENvbnRleHQgPSBhZG9wdEdSZWYoZ19tYWluX2NvbnRleHRf
bmV3KCkpOwotICAgIEFTU0VSVChtX2V2ZW50Q29udGV4dCk7Ci0gICAgbV9ldmVudExvb3AgPSBh
ZG9wdEdSZWYoZ19tYWluX2xvb3BfbmV3KG1fZXZlbnRDb250ZXh0LmdldCgpLCBGQUxTRSkpOwot
ICAgIEFTU0VSVChtX2V2ZW50TG9vcCk7Ci0KLSAgICAvLyBUaGlzIG5hbWUgY2FuIGJlIGNvbS5h
cHBsZS5XZWJLaXQuUHJvY2Vzc0xhdW5jaGVyIG9yIGNvbS5hcHBsZS5Db3JlSVBDLlJlY2VpdmVR
dWV1ZS4KLSAgICAvLyBXZSBhcmUgdXNpbmcgdGhvc2UgbmFtZXMgZm9yIHRoZSB0aHJlYWQgbmFt
ZSwgYnV0IGJvdGggYXJlIGxvbmdlciB0aGFuIDMxIGNoYXJhY3RlcnMsCi0gICAgLy8gd2hpY2gg
aXMgdGhlIGxpbWl0IG9mIFZpc3VhbCBTdHVkaW8gZm9yIHRocmVhZCBuYW1lcy4KLSAgICAvLyBX
aGVuIGxvZyBpcyBlbmFibGVkIGNyZWF0ZVRocmVhZCgpIHdpbGwgYXNzZXJ0IGluc3RlYWQgb2Yg
dHJ1bmNhdGUgdGhlIG5hbWUsIHNvIHdlIG5lZWQKLSAgICAvLyB0byBtYWtlIHN1cmUgd2UgZG9u
J3QgdXNlIGEgbmFtZSBsb25nZXIgdGhhbiAzMSBjaGFyYWN0ZXJzLgotICAgIGNvbnN0IGNoYXIq
IHRocmVhZE5hbWUgPSBnX3N0cnJzdHIobmFtZSwgIi4iKTsKLSAgICBpZiAodGhyZWFkTmFtZSkK
LSAgICAgICAgdGhyZWFkTmFtZSsrOwotICAgIGVsc2UKLSAgICAgICAgdGhyZWFkTmFtZSA9IG5h
bWU7Ci0gICAgaWYgKHN0cmxlbih0aHJlYWROYW1lKSA+IGtWaXN1YWxTdHVkaW9UaHJlYWROYW1l
TGltaXQpCi0gICAgICAgIHRocmVhZE5hbWUgKz0gc3RybGVuKHRocmVhZE5hbWUpIC0ga1Zpc3Vh
bFN0dWRpb1RocmVhZE5hbWVMaW1pdDsKLQotICAgIG1fd29ya1F1ZXVlVGhyZWFkID0gY3JlYXRl
VGhyZWFkKHJlaW50ZXJwcmV0X2Nhc3Q8V1RGOjpUaHJlYWRGdW5jdGlvbj4oJldvcmtRdWV1ZTo6
c3RhcnRXb3JrUXVldWVUaHJlYWQpLCB0aGlzLCB0aHJlYWROYW1lKTsKLX0KLQotdm9pZCBXb3Jr
UXVldWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
ZXZlbnRMb29wTG9jayk7Ci0KLSAgICBpZiAobV9ldmVudExvb3ApIHsKLSAgICAgICAgaWYgKGdf
bWFpbl9sb29wX2lzX3J1bm5pbmcobV9ldmVudExvb3AuZ2V0KCkpKQotICAgICAgICAgICAgZ19t
YWluX2xvb3BfcXVpdChtX2V2ZW50TG9vcC5nZXQoKSk7Ci0gICAgICAgIG1fZXZlbnRMb29wLmNs
ZWFyKCk7Ci0gICAgfQotCi0gICAgbV9ldmVudENvbnRleHQuY2xlYXIoKTsKLX0KLQotdm9pZCBX
b3JrUXVldWU6OnN0YXJ0V29ya1F1ZXVlVGhyZWFkKFdvcmtRdWV1ZSogd29ya1F1ZXVlKQotewot
ICAgIHdvcmtRdWV1ZS0+d29ya1F1ZXVlVGhyZWFkQm9keSgpOwotfQotCi12b2lkIFdvcmtRdWV1
ZTo6d29ya1F1ZXVlVGhyZWFkQm9keSgpCi17Ci0gICAgZ19tYWluX2xvb3BfcnVuKG1fZXZlbnRM
b29wLmdldCgpKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5k
bGVyKGludCBmaWxlRGVzY3JpcHRvciwgaW50IGNvbmRpdGlvbiwgY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgR1JlZlB0cjxHU29ja2V0PiBzb2NrZXQgPSBhZG9wdEdS
ZWYoZ19zb2NrZXRfbmV3X2Zyb21fZmQoZmlsZURlc2NyaXB0b3IsIDApKTsKLSAgICBBU1NFUlQo
c29ja2V0KTsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGUgPSBhZG9wdEdS
ZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAgR1JlZlB0cjxHU291cmNlPiBkaXNwYXRjaFNv
dXJjZSA9IGFkb3B0R1JlZihnX3NvY2tldF9jcmVhdGVfc291cmNlKHNvY2tldC5nZXQoKSwgc3Rh
dGljX2Nhc3Q8R0lPQ29uZGl0aW9uPihjb25kaXRpb24pLCBjYW5jZWxsYWJsZS5nZXQoKSkpOwot
ICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7Ci0gICAgRXZlbnRTb3VyY2UqIGV2ZW50U291cmNl
ID0gbmV3IEV2ZW50U291cmNlKGZ1bmN0aW9uLCB0aGlzLCBjYW5jZWxsYWJsZS5nZXQoKSk7Ci0g
ICAgQVNTRVJUKGV2ZW50U291cmNlKTsKLQotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhkaXNw
YXRjaFNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1
ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrKSwKLSAgICAgICAgZXZlbnRTb3VyY2UsIHJlaW50
ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KCZXb3JrUXVldWU6OkV2ZW50U291cmNlOjpkZWxl
dGVFdmVudFNvdXJjZSkpOwotCi0gICAgLy8gU2V0IHVwIHRoZSBldmVudCBzb3VyY2VzIHVuZGVy
IHRoZSBtdXRleCBzaW5jZSB0aGlzIGlzIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgdGhyZWFkcy4K
LSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOwot
ICAgICAgICBWZWN0b3I8RXZlbnRTb3VyY2UqPiBzb3VyY2VzOwotICAgICAgICBFdmVudFNvdXJj
ZUl0ZXJhdG9yIGl0ID0gbV9ldmVudFNvdXJjZXMuZmluZChmaWxlRGVzY3JpcHRvcik7Ci0gICAg
ICAgIGlmIChpdCAhPSBtX2V2ZW50U291cmNlcy5lbmQoKSkgCi0gICAgICAgICAgICBzb3VyY2Vz
ID0gaXQtPnNlY29uZDsKLQotICAgICAgICBzb3VyY2VzLmFwcGVuZChldmVudFNvdXJjZSk7Ci0g
ICAgICAgIG1fZXZlbnRTb3VyY2VzLnNldChmaWxlRGVzY3JpcHRvciwgc291cmNlcyk7Ci0gICAg
fQotCi0gICAgZ19zb3VyY2VfYXR0YWNoKGRpc3BhdGNoU291cmNlLmdldCgpLCBtX2V2ZW50Q29u
dGV4dC5nZXQoKSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lzdGVyRXZlbnRTb3VyY2VI
YW5kbGVyKGludCBmaWxlRGVzY3JpcHRvcikKLXsKLSAgICBBU1NFUlQoZmlsZURlc2NyaXB0b3Ip
OwotICAgIAotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V2ZW50U291cmNlc0xvY2spOwotICAg
IAotICAgIEV2ZW50U291cmNlSXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKGZpbGVE
ZXNjcmlwdG9yKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpOwotICAg
IEFTU0VSVChtX2V2ZW50U291cmNlcy5jb250YWlucyhmaWxlRGVzY3JpcHRvcikpOwotCi0gICAg
aWYgKGl0ICE9IG1fZXZlbnRTb3VyY2VzLmVuZCgpKSB7Ci0gICAgICAgIFZlY3RvcjxFdmVudFNv
dXJjZSo+IHNvdXJjZXMgPSBpdC0+c2Vjb25kOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc291cmNlcy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIHNvdXJjZXNbaV0tPmNhbmNl
bCgpOwotCi0gICAgICAgIG1fZXZlbnRTb3VyY2VzLnJlbW92ZShpdCk7Ci0gICAgfQotfQotCi12
b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblNvdXJjZShHU291cmNlKiBkaXNwYXRjaFNvdXJjZSwg
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIEdTb3VyY2VGdW5jIHNvdXJjZUNhbGxi
YWNrKQotewotICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZShm
dW5jdGlvbiwgdGhpcywgMCk7Ci0KLSAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2soZGlzcGF0Y2hT
b3VyY2UsIHNvdXJjZUNhbGxiYWNrLCBldmVudFNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oJldvcmtRdWV1ZTo6RXZlbnRT
b3VyY2U6OmRlbGV0ZUV2ZW50U291cmNlKSk7Ci0KLSAgICBnX3NvdXJjZV9hdHRhY2goZGlzcGF0
Y2hTb3VyY2UsIG1fZXZlbnRDb250ZXh0LmdldCgpKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OmRp
c3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIEdSZWZQdHI8
R1NvdXJjZT4gZGlzcGF0Y2hTb3VyY2UgPSBhZG9wdEdSZWYoZ19pZGxlX3NvdXJjZV9uZXcoKSk7
Ci0gICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKLSAgICBnX3NvdXJjZV9zZXRfcHJpb3JpdHko
ZGlzcGF0Y2hTb3VyY2UuZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVMVCk7Ci0KLSAgICBkaXNwYXRj
aE9uU291cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwgcmVpbnRlcnByZXRfY2Fz
dDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBlcmZvcm1Xb3JrT25jZSkp
OwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRlbGF5KGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCi17Ci0gICAgR1JlZlB0cjxHU291cmNl
PiBkaXNwYXRjaFNvdXJjZSA9IGFkb3B0R1JlZihnX3RpbWVvdXRfc291cmNlX25ldyhzdGF0aWNf
Y2FzdDxndWludD4oZGVsYXkgKiAxMDAwKSkpOwotICAgIEFTU0VSVChkaXNwYXRjaFNvdXJjZSk7
Ci0KLSAgICBkaXNwYXRjaE9uU291cmNlKGRpc3BhdGNoU291cmNlLmdldCgpLCBmdW5jdGlvbiwg
cmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oJldvcmtRdWV1ZTo6RXZlbnRTb3VyY2U6OnBl
cmZvcm1Xb3JrT25jZSkpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hPblRlcm1pbmF0
aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzLCBjb25zdCBGdW5j
dGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBHUmVmUHRyPEdTb3VyY2U+IGRpc3BhdGNo
U291cmNlID0gYWRvcHRHUmVmKGdfY2hpbGRfd2F0Y2hfc291cmNlX25ldyhwcm9jZXNzKSk7Ci0g
ICAgQVNTRVJUKGRpc3BhdGNoU291cmNlKTsKLQotICAgIGRpc3BhdGNoT25Tb3VyY2UoZGlzcGF0
Y2hTb3VyY2UuZ2V0KCksIGZ1bmN0aW9uLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPigm
V29ya1F1ZXVlOjpFdmVudFNvdXJjZTo6cGVyZm9ybVdvcmtPblRlcm1pbmF0aW9uKSk7Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9tYWMvV29ya1F1ZXVlTWFjLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhZTQ3M2VlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV29ya1F1
ZXVlLmgiCi0KLSNpbmNsdWRlIDxtYWNoL21hY2hfaW5pdC5oPgotI2luY2x1ZGUgPG1hY2gvbWFj
aF9wb3J0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotdm9pZCBXb3JrUXVldWU6
OmV4ZWN1dGVGdW5jdGlvbih2b2lkKiBjb250ZXh0KQotewotICAgIFdvcmtRdWV1ZSogcXVldWUg
PSBzdGF0aWNfY2FzdDxXb3JrUXVldWUqPihkaXNwYXRjaF9nZXRfY29udGV4dChkaXNwYXRjaF9n
ZXRfY3VycmVudF9xdWV1ZSgpKSk7Ci0gICAgT3duUHRyPEZ1bmN0aW9uPHZvaWQoKT4gPiBmdW5j
dGlvbiA9IGFkb3B0UHRyKHN0YXRpY19jYXN0PEZ1bmN0aW9uPHZvaWQoKT4qPihjb250ZXh0KSk7
Ci0gICAgCi0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIocXVldWUtPm1faXNWYWxp
ZE11dGV4KTsKLSAgICAgICAgaWYgKCFxdWV1ZS0+bV9pc1ZhbGlkKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgICgqZnVuY3Rpb24pKCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpk
aXNwYXRjaChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBkaXNwYXRj
aF9hc3luY19mKG1fZGlzcGF0Y2hRdWV1ZSwgbmV3IEZ1bmN0aW9uPHZvaWQoKT4oZnVuY3Rpb24p
LCBleGVjdXRlRnVuY3Rpb24pOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6ZGlzcGF0Y2hBZnRlckRl
bGF5KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uLCBkb3VibGUgZGVsYXkpCi17Ci0g
ICAgZGlzcGF0Y2hfdGltZV90IGRlbGF5VGltZSA9IGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElN
RV9OT1csIGRlbGF5ICogTlNFQ19QRVJfU0VDKTsKLQotICAgIGRpc3BhdGNoX2FmdGVyX2YoZGVs
YXlUaW1lLCBtX2Rpc3BhdGNoUXVldWUsIG5ldyBGdW5jdGlvbjx2b2lkKCk+KGZ1bmN0aW9uKSwg
ZXhlY3V0ZUZ1bmN0aW9uKTsKLX0KLQotY2xhc3MgV29ya1F1ZXVlOjpFdmVudFNvdXJjZSB7Ci1w
dWJsaWM6Ci0gICAgRXZlbnRTb3VyY2UoTWFjaFBvcnRFdmVudFR5cGUgZXZlbnRUeXBlLCBkaXNw
YXRjaF9zb3VyY2VfdCBkaXNwYXRjaFNvdXJjZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVu
Y3Rpb24pCi0gICAgICAgIDogbV9ldmVudFR5cGUoZXZlbnRUeXBlKQotICAgICAgICAsIG1fZGlz
cGF0Y2hTb3VyY2UoZGlzcGF0Y2hTb3VyY2UpCi0gICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlv
bikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGRpc3BhdGNoX3NvdXJjZV90IGRpc3BhdGNoU291
cmNlKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwYXRjaFNvdXJjZTsgfQotICAgIAotICAgIHN0YXRp
YyB2b2lkIGV2ZW50SGFuZGxlcih2b2lkKiBzb3VyY2UpIAotICAgIHsKLSAgICAgICAgRXZlbnRT
b3VyY2UqIGV2ZW50U291cmNlID0gc3RhdGljX2Nhc3Q8RXZlbnRTb3VyY2UqPihzb3VyY2UpOwot
ICAgICAgICAKLSAgICAgICAgZXZlbnRTb3VyY2UtPm1fZnVuY3Rpb24oKTsKLSAgICB9Ci0gICAg
Ci0gICAgc3RhdGljIHZvaWQgY2FuY2VsSGFuZGxlcih2b2lkKiBzb3VyY2UpCi0gICAgewotICAg
ICAgICBFdmVudFNvdXJjZSogZXZlbnRTb3VyY2UgPSBzdGF0aWNfY2FzdDxFdmVudFNvdXJjZSo+
KHNvdXJjZSk7Ci0gICAgICAgIAotICAgICAgICBtYWNoX3BvcnRfdCBtYWNoUG9ydCA9IGRpc3Bh
dGNoX3NvdXJjZV9nZXRfaGFuZGxlKGV2ZW50U291cmNlLT5tX2Rpc3BhdGNoU291cmNlKTsKLSAg
ICAgICAgCi0gICAgICAgIHN3aXRjaCAoZXZlbnRTb3VyY2UtPm1fZXZlbnRUeXBlKSB7Ci0gICAg
ICAgIGNhc2UgTWFjaFBvcnREYXRhQXZhaWxhYmxlOgotICAgICAgICAgICAgLy8gUmVsZWFzZSBv
dXIgcmVjZWl2ZSByaWdodC4KLSAgICAgICAgICAgIG1hY2hfcG9ydF9tb2RfcmVmcyhtYWNoX3Rh
c2tfc2VsZigpLCBtYWNoUG9ydCwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1hY2hQb3J0RGVhZE5hbWVOb3RpZmljYXRpb246
Ci0gICAgICAgICAgICAvLyBSZWxlYXNlIG91ciBzZW5kIHJpZ2h0LgotICAgICAgICAgICAgbWFj
aF9wb3J0X2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgbWFjaFBvcnQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgZmluYWxp
emVIYW5kbGVyKHZvaWQqIHNvdXJjZSkKLSAgICB7Ci0gICAgICAgIEV2ZW50U291cmNlKiBldmVu
dFNvdXJjZSA9IHN0YXRpY19jYXN0PEV2ZW50U291cmNlKj4oc291cmNlKTsKLSAgICAgICAgCi0g
ICAgICAgIGRlbGV0ZSBldmVudFNvdXJjZTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIE1h
Y2hQb3J0RXZlbnRUeXBlIG1fZXZlbnRUeXBlOwotICAgIAotICAgIC8vIFRoaXMgaXMgYSB3ZWFr
IHJlZmVyZW5jZSwgc2luY2UgbV9kaXNwYXRjaFNvdXJjZSByZWZlcmVuY2VzIHRoZSBldmVudCBz
b3VyY2UuCi0gICAgZGlzcGF0Y2hfc291cmNlX3QgbV9kaXNwYXRjaFNvdXJjZTsKLQotICAgIEZ1
bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKLX07Ci0KLXZvaWQgV29ya1F1ZXVlOjpyZWdpc3Rl
ck1hY2hQb3J0RXZlbnRIYW5kbGVyKG1hY2hfcG9ydF90IG1hY2hQb3J0LCBNYWNoUG9ydEV2ZW50
VHlwZSBldmVudFR5cGUsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAg
IGRpc3BhdGNoX3NvdXJjZV90eXBlX3Qgc291cmNlVHlwZSA9IDA7Ci0gICAgc3dpdGNoIChldmVu
dFR5cGUpIHsKLSAgICBjYXNlIE1hY2hQb3J0RGF0YUF2YWlsYWJsZToKLSAgICAgICAgc291cmNl
VHlwZSA9IERJU1BBVENIX1NPVVJDRV9UWVBFX01BQ0hfUkVDVjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBNYWNoUG9ydERlYWROYW1lTm90aWZpY2F0aW9uOgotICAgICAgICBzb3VyY2VUeXBl
ID0gRElTUEFUQ0hfU09VUkNFX1RZUEVfTUFDSF9TRU5EOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgCi0gICAgZGlzcGF0Y2hfc291cmNlX3QgZGlzcGF0Y2hTb3VyY2UgPSBkaXNwYXRjaF9z
b3VyY2VfY3JlYXRlKHNvdXJjZVR5cGUsIG1hY2hQb3J0LCAwLCBtX2Rpc3BhdGNoUXVldWUpOwot
ICAgIAotICAgIEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IG5ldyBFdmVudFNvdXJjZShldmVu
dFR5cGUsIGRpc3BhdGNoU291cmNlLCBmdW5jdGlvbik7Ci0gICAgZGlzcGF0Y2hfc2V0X2NvbnRl
eHQoZGlzcGF0Y2hTb3VyY2UsIGV2ZW50U291cmNlKTsKLSAgICAKLSAgICBkaXNwYXRjaF9zb3Vy
Y2Vfc2V0X2V2ZW50X2hhbmRsZXJfZihkaXNwYXRjaFNvdXJjZSwgJkV2ZW50U291cmNlOjpldmVu
dEhhbmRsZXIpOwotICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfY2FuY2VsX2hhbmRsZXJfZihkaXNw
YXRjaFNvdXJjZSwgJkV2ZW50U291cmNlOjpjYW5jZWxIYW5kbGVyKTsKLSAgICBkaXNwYXRjaF9z
ZXRfZmluYWxpemVyX2YoZGlzcGF0Y2hTb3VyY2UsICZFdmVudFNvdXJjZTo6ZmluYWxpemVIYW5k
bGVyKTsKLSAgICAKLSAgICAvLyBBZGQgdGhlIHNvdXJjZSB0byBvdXIgc2V0IG9mIHNvdXJjZXMu
Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9ldmVudFNvdXJjZXNNdXRleCk7
Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoIW1fZXZlbnRTb3VyY2VzLmNvbnRhaW5zKG1hY2hQ
b3J0KSk7Ci0gICAgICAgIAotICAgICAgICBtX2V2ZW50U291cmNlcy5zZXQobWFjaFBvcnQsIGV2
ZW50U291cmNlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEFuZCBzdGFydCBpdCEKLSAgICAgICAg
ZGlzcGF0Y2hfcmVzdW1lKGRpc3BhdGNoU291cmNlKTsKLSAgICB9Ci19Ci0KLXZvaWQgV29ya1F1
ZXVlOjp1bnJlZ2lzdGVyTWFjaFBvcnRFdmVudEhhbmRsZXIobWFjaF9wb3J0X3QgbWFjaFBvcnQp
Ci17Ci0gICAgQVNTRVJUKG1hY2hQb3J0KTsKLSAgICAKLSAgICBNdXRleExvY2tlciBsb2NrZXIo
bV9ldmVudFNvdXJjZXNNdXRleCk7Ci0gICAgCi0gICAgSGFzaE1hcDxtYWNoX3BvcnRfdCwgRXZl
bnRTb3VyY2UqPjo6aXRlcmF0b3IgaXQgPSBtX2V2ZW50U291cmNlcy5maW5kKG1hY2hQb3J0KTsK
LSAgICBBU1NFUlQoaXQgIT0gbV9ldmVudFNvdXJjZXMuZW5kKCkpOwotICAgIAotICAgIEFTU0VS
VChtX2V2ZW50U291cmNlcy5jb250YWlucyhtYWNoUG9ydCkpOwotCi0gICAgRXZlbnRTb3VyY2Uq
IGV2ZW50U291cmNlID0gaXQtPnNlY29uZDsKLSAgICAvLyBDYW5jZWwgYW5kIHJlbGVhc2UgdGhl
IHNvdXJjZS4gSXQgd2lsbCBiZSBkZWxldGVkIGluIGl0cyBmaW5hbGl6ZSBoYW5kbGVyLgotICAg
IGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOwot
ICAgIGRpc3BhdGNoX3JlbGVhc2UoZXZlbnRTb3VyY2UtPmRpc3BhdGNoU291cmNlKCkpOwotCi0g
ICAgbV9ldmVudFNvdXJjZXMucmVtb3ZlKGl0KTsgICAgCi19Ci0KLXZvaWQgV29ya1F1ZXVlOjpw
bGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBtX2Rpc3BhdGNoUXVl
dWUgPSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUobmFtZSwgMCk7Ci0gICAgZGlzcGF0Y2hfc2V0X2Nv
bnRleHQobV9kaXNwYXRjaFF1ZXVlLCB0aGlzKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBsYXRm
b3JtSW52YWxpZGF0ZSgpCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX2V2ZW50U291cmNlc011dGV4KTsKLSAgICBBU1NFUlQobV9ldmVudFNvdXJjZXMu
aXNFbXB0eSgpKTsKLSNlbmRpZgotCi0gICAgZGlzcGF0Y2hfcmVsZWFzZShtX2Rpc3BhdGNoUXVl
dWUpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvV29ya1F1ZXVl
UXQuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvV29ya1F1ZXVlUXQuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWEyYmUzLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEz
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIldvcmtRdWV1ZS5oIgotCi0jaW5jbHVkZSA8UUxvY2FsU29ja2V0PgotI2luY2x1
ZGUgPFFPYmplY3Q+Ci0jaW5jbHVkZSA8UVRocmVhZD4KLSNpbmNsdWRlIDxRUHJvY2Vzcz4KLSNp
bmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgotCi1jbGFzcyBXb3JrUXVldWU6OldvcmtJdGVtUXQgOiBwdWJsaWMgUU9iamVjdCB7Ci0g
ICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBXb3JrSXRlbVF0KFdvcmtRdWV1ZSogd29ya1F1ZXVl
LCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLSAgICAgICAgOiBtX3F1ZXVlKHdv
cmtRdWV1ZSkKLSAgICAgICAgLCBtX3NvdXJjZSgwKQotICAgICAgICAsIG1fc2lnbmFsKDApCi0g
ICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICB7Ci0gICAgfQotCi0gICAgV29ya0l0
ZW1RdChXb3JrUXVldWUqIHdvcmtRdWV1ZSwgUU9iamVjdCogc291cmNlLCBjb25zdCBjaGFyKiBz
aWduYWwsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotICAgICAgICA6IG1fcXVl
dWUod29ya1F1ZXVlKQotICAgICAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAgICAgICAgLCBtX3Np
Z25hbChzaWduYWwpCi0gICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICB7Ci0gICAg
ICAgIGNvbm5lY3QobV9zb3VyY2UsIG1fc2lnbmFsLCBTTE9UKGV4ZWN1dGUoKSksIFF0OjpRdWV1
ZWRDb25uZWN0aW9uKTsKLSAgICB9Ci0KLSAgICB+V29ya0l0ZW1RdCgpCi0gICAgewotICAgIH0K
LQotICAgIFFfU0xPVCB2b2lkIGV4ZWN1dGUoKSAKLSAgICB7IAotICAgICAgICBpZiAobV9xdWV1
ZS0+bV9pc1ZhbGlkKQotICAgICAgICAgICAgbV9mdW5jdGlvbigpOwotICAgIH0KLQotICAgIFFf
U0xPVCB2b2lkIGV4ZWN1dGVBbmREZWxldGUoKQotICAgIHsKLSAgICAgICAgZXhlY3V0ZSgpOwot
ICAgICAgICBkZWxldGUgdGhpczsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdGltZXJFdmVu
dChRVGltZXJFdmVudCopCi0gICAgewotICAgICAgICBleGVjdXRlQW5kRGVsZXRlKCk7Ci0gICAg
fQotCi0gICAgV29ya1F1ZXVlKiBtX3F1ZXVlOwotICAgIFFPYmplY3QqIG1fc291cmNlOwotICAg
IGNvbnN0IGNoYXIqIG1fc2lnbmFsOwotICAgIEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsK
LX07Ci0KLVFTb2NrZXROb3RpZmllciogV29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50SGFu
ZGxlcihpbnQgc29ja2V0RGVzY3JpcHRvciwgUVNvY2tldE5vdGlmaWVyOjpUeXBlIHR5cGUsIGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIEFTU0VSVChtX3dvcmtUaHJl
YWQpOwotCi0gICAgUVNvY2tldE5vdGlmaWVyKiBub3RpZmllciA9IG5ldyBRU29ja2V0Tm90aWZp
ZXIoc29ja2V0RGVzY3JpcHRvciwgdHlwZSwgMCk7Ci0gICAgbm90aWZpZXItPnNldEVuYWJsZWQo
ZmFsc2UpOwotICAgIG5vdGlmaWVyLT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsKLSAgICBX
b3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQo
dGhpcywgbm90aWZpZXIsIFNJR05BTChhY3RpdmF0ZWQoaW50KSksIGZ1bmN0aW9uKTsKLSAgICBp
dGVtUXQtPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOwotICAgIG5vdGlmaWVyLT5zZXRFbmFi
bGVkKHRydWUpOwotICAgIHJldHVybiBub3RpZmllcjsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBs
YXRmb3JtSW5pdGlhbGl6ZShjb25zdCBjaGFyKikKLXsKLSAgICBtX3dvcmtUaHJlYWQgPSBuZXcg
UVRocmVhZCgpOwotICAgIG1fd29ya1RocmVhZC0+c3RhcnQoKTsKLX0KLQotdm9pZCBXb3JrUXVl
dWU6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgbV93b3JrVGhyZWFkLT5leGl0KCk7Ci0g
ICAgbV93b3JrVGhyZWFkLT53YWl0KCk7Ci0gICAgZGVsZXRlIG1fd29ya1RocmVhZDsKLX0KLQot
dm9pZCBXb3JrUXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
KQotewotICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6
V29ya0l0ZW1RdCh0aGlzLCBmdW5jdGlvbik7Ci0gICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93
b3JrVGhyZWFkKTsKLSAgICBRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKGl0ZW1RdCwgImV4ZWN1
dGVBbmREZWxldGUiLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7Ci19Ci0KLXZvaWQgV29ya1F1ZXVl
OjpkaXNwYXRjaEFmdGVyRGVsYXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRv
dWJsZSBkZWxheUluU2Vjb25kKQotewotICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0
ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBmdW5jdGlvbik7Ci0gICAgaXRlbVF0
LT5zdGFydFRpbWVyKHN0YXRpY19jYXN0PGludD4oZGVsYXlJblNlY29uZCAqIDEwMDApKTsKLSAg
ICBpdGVtUXQtPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOwotfQotCi12b2lkIFdvcmtRdWV1
ZTo6ZGlzcGF0Y2hPblRlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmll
ciBwcm9jZXNzLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBXb3Jr
UXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQodGhp
cywgcHJvY2VzcywgU0lHTkFMKGZpbmlzaGVkKGludCwgUVByb2Nlc3M6OkV4aXRTdGF0dXMpKSwg
ZnVuY3Rpb24pOwotICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7Ci19Ci0K
LSNpbmNsdWRlICJXb3JrUXVldWVRdC5tb2MiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS93aW4vV29ya1F1ZXVlV2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3dp
bi9Xb3JrUXVldWVXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWJhZGJk
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3dpbi9Xb3JrUXVldWVXaW4u
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCi0KLSNpbmNsdWRlIDxXZWJDb3Jl
L05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotCi1pbmxpbmUg
V29ya1F1ZXVlOjpXb3JrSXRlbVdpbjo6V29ya0l0ZW1XaW4oY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUpCi0gICAgOiBtX2Z1bmN0aW9uKGZ1bmN0aW9u
KQotICAgICwgbV9xdWV1ZShxdWV1ZSkKLXsKLX0KLQotUGFzc1JlZlB0cjxXb3JrUXVldWU6Oldv
cmtJdGVtV2luPiBXb3JrUXVldWU6OldvcmtJdGVtV2luOjpjcmVhdGUoY29uc3QgRnVuY3Rpb248
dm9pZCgpPiYgZnVuY3Rpb24sIFdvcmtRdWV1ZSogcXVldWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBXb3JrSXRlbVdpbihmdW5jdGlvbiwgcXVldWUpKTsKLX0KLQotV29ya1F1ZXVlOjpX
b3JrSXRlbVdpbjo6fldvcmtJdGVtV2luKCkKLXsKLX0KLQotaW5saW5lIFdvcmtRdWV1ZTo6SGFu
ZGxlV29ya0l0ZW06OkhhbmRsZVdvcmtJdGVtKEhBTkRMRSBoYW5kbGUsIGNvbnN0IEZ1bmN0aW9u
PHZvaWQoKT4mIGZ1bmN0aW9uLCBXb3JrUXVldWUqIHF1ZXVlKQotICAgIDogV29ya0l0ZW1XaW4o
ZnVuY3Rpb24sIHF1ZXVlKQotICAgICwgbV9oYW5kbGUoaGFuZGxlKQotICAgICwgbV93YWl0SGFu
ZGxlKDApCi17Ci0gICAgQVNTRVJUX0FSRyhoYW5kbGUsIGhhbmRsZSk7Ci19Ci0KLVBhc3NSZWZQ
dHI8V29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbT4gV29ya1F1ZXVlOjpIYW5kbGVXb3JrSXRlbTo6
Y3JlYXRlQnlBZG9wdGluZ0hhbmRsZShIQU5ETEUgaGFuZGxlLCBjb25zdCBGdW5jdGlvbjx2b2lk
KCk+JiBmdW5jdGlvbiwgV29ya1F1ZXVlKiBxdWV1ZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEhhbmRsZVdvcmtJdGVtKGhhbmRsZSwgZnVuY3Rpb24sIHF1ZXVlKSk7Ci19Ci0KLVdvcmtR
dWV1ZTo6SGFuZGxlV29ya0l0ZW06On5IYW5kbGVXb3JrSXRlbSgpCi17Ci0gICAgOjpDbG9zZUhh
bmRsZShtX2hhbmRsZSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpoYW5kbGVDYWxsYmFjayh2b2lk
KiBjb250ZXh0LCBCT09MRUFOIHRpbWVyT3JXYWl0RmlyZWQpCi17Ci0gICAgQVNTRVJUX0FSRyhj
b250ZXh0LCBjb250ZXh0KTsKLSAgICBBU1NFUlRfQVJHKHRpbWVyT3JXYWl0RmlyZWQsICF0aW1l
ck9yV2FpdEZpcmVkKTsKLQotICAgIFdvcmtJdGVtV2luKiBpdGVtID0gc3RhdGljX2Nhc3Q8V29y
a0l0ZW1XaW4qPihjb250ZXh0KTsKLSAgICBXb3JrUXVldWUqIHF1ZXVlID0gaXRlbS0+cXVldWUo
KTsKLQotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhxdWV1ZS0+bV93b3JrSXRlbVF1
ZXVlTG9jayk7Ci0gICAgICAgIHF1ZXVlLT5tX3dvcmtJdGVtUXVldWUuYXBwZW5kKGl0ZW0pOwot
Ci0gICAgICAgIC8vIElmIG5vIG90aGVyIHRocmVhZCBpcyBwZXJmb3JtaW5nIHdvcmssIHdlIGNh
biBkbyBpdCBvbiB0aGlzIHRocmVhZC4KLSAgICAgICAgaWYgKCFxdWV1ZS0+dHJ5UmVnaXN0ZXJB
c1dvcmtUaHJlYWQoKSkgewotICAgICAgICAgICAgLy8gU29tZSBvdGhlciB0aHJlYWQgaXMgcGVy
Zm9ybWluZyB3b3JrLiBTaW5jZSB3ZSBob2xkIHRoZSBxdWV1ZSBsb2NrLCB3ZSBjYW4gYmUgc3Vy
ZQotICAgICAgICAgICAgLy8gdGhhdCB0aGUgd29yayB0aHJlYWQgaXMgbm90IGV4aXRpbmcgZHVl
IHRvIGFuIGVtcHR5IHF1ZXVlIGFuZCB3aWxsIHByb2Nlc3MgdGhlIHdvcmsKLSAgICAgICAgICAg
IC8vIGl0ZW0gd2UganVzdCBhZGRlZCB0byBpdC4gSWYgd2Ugd2VyZW4ndCBob2xkaW5nIHRoZSBs
b2NrIHdlJ2QgaGF2ZSB0byBzaWduYWwKLSAgICAgICAgICAgIC8vIG1fcGVyZm9ybVdvcmtFdmVu
dCB0byBtYWtlIHN1cmUgdGhlIHdvcmsgaXRlbSBnb3QgcGlja2VkIHVwLgotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcXVldWUtPnBlcmZvcm1Xb3JrT25SZWdp
c3RlcmVkV29ya1RocmVhZCgpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6cmVnaXN0ZXJIYW5kbGUo
SEFORExFIGhhbmRsZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAg
UmVmUHRyPEhhbmRsZVdvcmtJdGVtPiBoYW5kbGVJdGVtID0gSGFuZGxlV29ya0l0ZW06OmNyZWF0
ZUJ5QWRvcHRpbmdIYW5kbGUoaGFuZGxlLCBmdW5jdGlvbiwgdGhpcyk7Ci0KLSAgICB7Ci0gICAg
ICAgIE11dGV4TG9ja2VyIGxvY2sobV9oYW5kbGVzTG9jayk7Ci0gICAgICAgIEFTU0VSVF9BUkco
aGFuZGxlLCAhbV9oYW5kbGVzLmNvbnRhaW5zKGhhbmRsZSkpOwotICAgICAgICBtX2hhbmRsZXMu
c2V0KGhhbmRsZSwgaGFuZGxlSXRlbSk7Ci0gICAgfQotCi0gICAgSEFORExFIHdhaXRIYW5kbGU7
Ci0gICAgaWYgKCE6OlJlZ2lzdGVyV2FpdEZvclNpbmdsZU9iamVjdCgmd2FpdEhhbmRsZSwgaGFu
ZGxlLCBoYW5kbGVDYWxsYmFjaywgaGFuZGxlSXRlbS5nZXQoKSwgSU5GSU5JVEUsIFdUX0VYRUNV
VEVERUZBVUxUKSkgewotICAgICAgICBEV09SRCBlcnJvciA9IDo6R2V0TGFzdEVycm9yKCk7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICBoYW5kbGVJdGVtLT5zZXRX
YWl0SGFuZGxlKHdhaXRIYW5kbGUpOwotfQotCi12b2lkIFdvcmtRdWV1ZTo6dW5yZWdpc3RlckFu
ZENsb3NlSGFuZGxlKEhBTkRMRSBoYW5kbGUpCi17Ci0gICAgUmVmUHRyPEhhbmRsZVdvcmtJdGVt
PiBpdGVtOwotICAgIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1faGFuZGxlc0xvY2sp
OwotICAgICAgICBBU1NFUlRfQVJHKGhhbmRsZSwgbV9oYW5kbGVzLmNvbnRhaW5zKGhhbmRsZSkp
OwotICAgICAgICBpdGVtID0gbV9oYW5kbGVzLnRha2UoaGFuZGxlKTsKLSAgICB9Ci0KLSAgICB1
bnJlZ2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtU29vbihpdGVtLnJlbGVhc2UoKSk7Ci19Ci0KLURX
T1JEIFdvcmtRdWV1ZTo6d29ya1RocmVhZENhbGxiYWNrKHZvaWQqIGNvbnRleHQpCi17Ci0gICAg
QVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0KTsKLQotICAgIFdvcmtRdWV1ZSogcXVldWUgPSBz
dGF0aWNfY2FzdDxXb3JrUXVldWUqPihjb250ZXh0KTsKLQotICAgIGlmICghcXVldWUtPnRyeVJl
Z2lzdGVyQXNXb3JrVGhyZWFkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcXVldWUtPnBl
cmZvcm1Xb3JrT25SZWdpc3RlcmVkV29ya1RocmVhZCgpOwotICAgIHJldHVybiAwOwotfQotCi12
b2lkIFdvcmtRdWV1ZTo6cGVyZm9ybVdvcmtPblJlZ2lzdGVyZWRXb3JrVGhyZWFkKCkKLXsKLSAg
ICBBU1NFUlQobV9pc1dvcmtUaHJlYWRSZWdpc3RlcmVkKTsKLQotICAgIGJvb2wgaXNWYWxpZCA9
IHRydWU7Ci0KLSAgICBtX3dvcmtJdGVtUXVldWVMb2NrLmxvY2soKTsKLQotICAgIHdoaWxlIChp
c1ZhbGlkICYmICFtX3dvcmtJdGVtUXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFZlY3RvcjxS
ZWZQdHI8V29ya0l0ZW1XaW4+ID4gd29ya0l0ZW1RdWV1ZTsKLSAgICAgICAgbV93b3JrSXRlbVF1
ZXVlLnN3YXAod29ya0l0ZW1RdWV1ZSk7Ci0KLSAgICAgICAgLy8gQWxsb3cgbW9yZSB3b3JrIHRv
IGJlIHNjaGVkdWxlZCB3aGlsZSB3ZSdyZSBub3QgdXNpbmcgdGhlIHF1ZXVlIGRpcmVjdGx5Lgot
ICAgICAgICBtX3dvcmtJdGVtUXVldWVMb2NrLnVubG9jaygpOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHdvcmtJdGVtUXVldWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX2lzVmFsaWRNdXRleCk7Ci0gICAgICAgICAgICBpc1ZhbGlkID0g
bV9pc1ZhbGlkOwotICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgd29ya0l0ZW1RdWV1ZVtpXS0+ZnVuY3Rpb24oKSgpOwotICAgICAg
ICB9Ci0gICAgICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2subG9jaygpOwotICAgIH0KLQotICAgIC8v
IE9uZSBpbnZhcmlhbnQgd2UgbWFpbnRhaW4gaXMgdGhhdCBhbnkgd29yayBzY2hlZHVsZWQgd2hp
bGUgYSB3b3JrIHRocmVhZCBpcyByZWdpc3RlcmVkIHdpbGwKLSAgICAvLyBiZSBoYW5kbGVkIGJ5
IHRoYXQgd29yayB0aHJlYWQuIFVucmVnaXN0ZXIgYXMgdGhlIHdvcmsgdGhyZWFkIHdoaWxlIHRo
ZSBxdWV1ZSBsb2NrIGlzIHN0aWxsCi0gICAgLy8gaGVsZCBzbyB0aGF0IG5vIHdvcmsgY2FuIGJl
IHNjaGVkdWxlZCB3aGlsZSB3ZSdyZSBzdGlsbCByZWdpc3RlcmVkLgotICAgIHVucmVnaXN0ZXJB
c1dvcmtUaHJlYWQoKTsKLQotICAgIG1fd29ya0l0ZW1RdWV1ZUxvY2sudW5sb2NrKCk7Ci19Ci0K
LXZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciogbmFtZSkKLXsK
LSAgICBtX2lzV29ya1RocmVhZFJlZ2lzdGVyZWQgPSAwOwotICAgIG1fdGltZXJRdWV1ZSA9IDo6
Q3JlYXRlVGltZXJRdWV1ZSgpOwotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV90aW1lclF1ZXVl
LCAiOjpDcmVhdGVUaW1lclF1ZXVlIGZhaWxlZCB3aXRoIGVycm9yICVsdSIsIDo6R2V0TGFzdEVy
cm9yKCkpOwotfQotCi1ib29sIFdvcmtRdWV1ZTo6dHJ5UmVnaXN0ZXJBc1dvcmtUaHJlYWQoKQot
ewotICAgIExPTkcgcmVzdWx0ID0gOjpJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSgmbV9pc1dv
cmtUaHJlYWRSZWdpc3RlcmVkLCAxLCAwKTsKLSAgICBBU1NFUlQoIXJlc3VsdCB8fCByZXN1bHQg
PT0gMSk7Ci0gICAgcmV0dXJuICFyZXN1bHQ7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjp1bnJlZ2lz
dGVyQXNXb3JrVGhyZWFkKCkKLXsKLSAgICBMT05HIHJlc3VsdCA9IDo6SW50ZXJsb2NrZWRDb21w
YXJlRXhjaGFuZ2UoJm1faXNXb3JrVGhyZWFkUmVnaXN0ZXJlZCwgMCwgMSk7Ci0gICAgQVNTRVJU
X1VOVVNFRChyZXN1bHQsIHJlc3VsdCA9PSAxKTsKLX0KLQotdm9pZCBXb3JrUXVldWU6OnBsYXRm
b3JtSW52YWxpZGF0ZSgpCi17Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIE11dGV4TG9ja2Vy
IGxvY2sobV9oYW5kbGVzTG9jayk7Ci0gICAgQVNTRVJUKG1faGFuZGxlcy5pc0VtcHR5KCkpOwot
I2VuZGlmCi0KLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBlbnN1cmUgdGhhdCBhbnkgdGltZXIt
cXVldWUgdGltZXJzIHRoYXQgZmlyZSBhZnRlciB0aGlzIHBvaW50IGRvbid0IHRyeSB0bwotICAg
IC8vIGFjY2VzcyB0aGlzIFdvcmtRdWV1ZSA8aHR0cDovL3dlYmtpdC5vcmcvYi80NDY5MD4uCi0g
ICAgOjpEZWxldGVUaW1lclF1ZXVlRXgobV90aW1lclF1ZXVlLCAwKTsKLX0KLQotdm9pZCBXb3Jr
UXVldWU6OmRpc3BhdGNoKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX3dvcmtJdGVtUXVldWVMb2NrKTsKLQotICAgIG1fd29ya0l0
ZW1RdWV1ZS5hcHBlbmQoV29ya0l0ZW1XaW46OmNyZWF0ZShmdW5jdGlvbiwgdGhpcykpOwotCi0g
ICAgLy8gU3Bhd24gYSB3b3JrIHRocmVhZCB0byBwZXJmb3JtIHRoZSB3b3JrIHdlIGp1c3QgYWRk
ZWQuIEFzIGFuIG9wdGltaXphdGlvbiwgd2UgYXZvaWQKLSAgICAvLyBzcGF3bmluZyB0aGUgdGhy
ZWFkIGlmIGEgd29yayB0aHJlYWQgaXMgYWxyZWFkeSByZWdpc3RlcmVkLiBUaGlzIHByZXZlbnRz
IG11bHRpcGxlIHdvcmsKLSAgICAvLyB0aHJlYWRzIGZyb20gYmVpbmcgc3Bhd25lZCBpbiBtb3N0
IGNhc2VzLiAoTm90ZSB0aGF0IHdoZW4gYSB3b3JrIHRocmVhZCBoYXMgYmVlbiBzcGF3bmVkIGJ1
dAotICAgIC8vIGhhc24ndCByZWdpc3RlcmVkIGl0c2VsZiB5ZXQsIG1faXNXb3JrVGhyZWFkUmVn
aXN0ZXJlZCB3aWxsIGJlIGZhbHNlIGFuZCB3ZSdsbCBlbmQgdXAKLSAgICAvLyBzcGF3bmluZyBh
IHNlY29uZCB3b3JrIHRocmVhZCBoZXJlLiBCdXQgd29yayB0aHJlYWQgcmVnaXN0cmF0aW9uIHBy
b2Nlc3Mgd2lsbCBlbnN1cmUgdGhhdAotICAgIC8vIG9ubHkgb25lIHRocmVhZCBhY3R1YWxseSBl
bmRzIHVwIHBlcmZvcm1pbmcgd29yay4pCi0gICAgaWYgKCFtX2lzV29ya1RocmVhZFJlZ2lzdGVy
ZWQpCi0gICAgICAgIDo6UXVldWVVc2VyV29ya0l0ZW0od29ya1RocmVhZENhbGxiYWNrLCB0aGlz
LCBXVF9FWEVDVVRFREVGQVVMVCk7Ci19Ci0KLXN0cnVjdCBUaW1lckNvbnRleHQgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGltZXJDb250ZXh0PiB7Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8VGltZXJDb250ZXh0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgVGltZXJDb250
ZXh0KTsgfQotCi0gICAgV29ya1F1ZXVlKiBxdWV1ZTsKLSAgICBGdW5jdGlvbjx2b2lkKCk+IGZ1
bmN0aW9uOwotICAgIE11dGV4IHRpbWVyTXV0ZXg7Ci0gICAgSEFORExFIHRpbWVyOwotCi1wcml2
YXRlOgotICAgIFRpbWVyQ29udGV4dCgpIDogcXVldWUoMCksIHRpbWVyKDApIHsgfQotfTsKLQot
dm9pZCBXb3JrUXVldWU6OnRpbWVyQ2FsbGJhY2sodm9pZCogY29udGV4dCwgQk9PTEVBTiB0aW1l
ck9yV2FpdEZpcmVkKQotewotICAgIEFTU0VSVF9BUkcoY29udGV4dCwgY29udGV4dCk7Ci0gICAg
QVNTRVJUX1VOVVNFRCh0aW1lck9yV2FpdEZpcmVkLCB0aW1lck9yV2FpdEZpcmVkKTsKLQotICAg
IC8vIEJhbGFuY2VkIGJ5IGxlYWtSZWYgaW4gc2NoZWR1bGVXb3JrQWZ0ZXJEZWxheS4KLSAgICBS
ZWZQdHI8VGltZXJDb250ZXh0PiB0aW1lckNvbnRleHQgPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxU
aW1lckNvbnRleHQqPihjb250ZXh0KSk7Ci0KLSAgICB0aW1lckNvbnRleHQtPnF1ZXVlLT5kaXNw
YXRjaCh0aW1lckNvbnRleHQtPmZ1bmN0aW9uKTsKLQotICAgIE11dGV4TG9ja2VyIGxvY2sodGlt
ZXJDb250ZXh0LT50aW1lck11dGV4KTsKLSAgICBBU1NFUlQodGltZXJDb250ZXh0LT50aW1lcik7
Ci0gICAgQVNTRVJUKHRpbWVyQ29udGV4dC0+cXVldWUtPm1fdGltZXJRdWV1ZSk7Ci0gICAgaWYg
KCE6OkRlbGV0ZVRpbWVyUXVldWVUaW1lcih0aW1lckNvbnRleHQtPnF1ZXVlLT5tX3RpbWVyUXVl
dWUsIHRpbWVyQ29udGV4dC0+dGltZXIsIDApKQotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KGZhbHNlLCAiOjpEZWxldGVUaW1lclF1ZXVlVGltZXIgZmFpbGVkIHdpdGggZXJyb3IgJWx1Iiwg
OjpHZXRMYXN0RXJyb3IoKSk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjpkaXNwYXRjaEFmdGVyRGVs
YXkoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24sIGRvdWJsZSBkZWxheSkKLXsKLSAg
ICBBU1NFUlQobV90aW1lclF1ZXVlKTsKLQotICAgIFJlZlB0cjxUaW1lckNvbnRleHQ+IGNvbnRl
eHQgPSBUaW1lckNvbnRleHQ6OmNyZWF0ZSgpOwotICAgIGNvbnRleHQtPnF1ZXVlID0gdGhpczsK
LSAgICBjb250ZXh0LT5mdW5jdGlvbiA9IGZ1bmN0aW9uOwotCi0gICAgewotICAgICAgICAvLyBU
aGUgdGltZXIgY2FsbGJhY2sgY291bGQgZmlyZSBiZWZvcmUgOjpDcmVhdGVUaW1lclF1ZXVlVGlt
ZXIgZXZlbiByZXR1cm5zLCBzbyB3ZSBwcm90ZWN0Ci0gICAgICAgIC8vIGNvbnRleHQtPnRpbWVy
IHdpdGggYSBtdXRleCB0byBlbnN1cmUgdGhlIHRpbWVyIGNhbGxiYWNrIGRvZXNuJ3QgYWNjZXNz
IGl0IGJlZm9yZSB0aGUKLSAgICAgICAgLy8gdGltZXIgaGFuZGxlIGhhcyBiZWVuIHN0b3JlZCBp
biBpdC4KLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayhjb250ZXh0LT50aW1lck11dGV4KTsKLQot
ICAgICAgICAvLyBTaW5jZSBvdXIgdGltZXIgY2FsbGJhY2sgaXMgcXVpY2ssIHdlIGNhbiBleGVj
dXRlIGluIHRoZSB0aW1lciB0aHJlYWQgaXRzZWxmIGFuZCBhdm9pZAotICAgICAgICAvLyBhbiBl
eHRyYSB0aHJlYWQgc3dpdGNoIG92ZXIgdG8gYSB3b3JrZXIgdGhyZWFkLgotICAgICAgICBpZiAo
ITo6Q3JlYXRlVGltZXJRdWV1ZVRpbWVyKCZjb250ZXh0LT50aW1lciwgbV90aW1lclF1ZXVlLCB0
aW1lckNhbGxiYWNrLCBjb250ZXh0LmdldCgpLCBkZWxheSAqIDEwMDAsIDAsIFdUX0VYRUNVVEVJ
TlRJTUVSVEhSRUFEKSkgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShmYWxzZSwg
Ijo6Q3JlYXRlVGltZXJRdWV1ZVRpbWVyIGZhaWxlZCB3aXRoIGVycm9yICVsdSIsIDo6R2V0TGFz
dEVycm9yKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gVGhlIHRpbWVyIGNhbGxiYWNrIHdpbGwgaGFuZGxlIGRlc3Ryb3lpbmcgY29udGV4dC4KLSAg
ICBjb250ZXh0LnJlbGVhc2UoKS5sZWFrUmVmKCk7Ci19Ci0KLXZvaWQgV29ya1F1ZXVlOjp1bnJl
Z2lzdGVyV2FpdEFuZERlc3Ryb3lJdGVtU29vbihQYXNzUmVmUHRyPEhhbmRsZVdvcmtJdGVtPiBp
dGVtKQotewotICAgIC8vIFdlJ3JlIGdvaW5nIHRvIG1ha2UgYSBibG9ja2luZyBjYWxsIHRvIDo6
VW5yZWdpc3RlcldhaXRFeCBiZWZvcmUgY2xvc2luZyB0aGUgaGFuZGxlLiAoVGhlCi0gICAgLy8g
YmxvY2tpbmcgdmVyc2lvbiBvZiA6OlVucmVnaXN0ZXJXYWl0RXggaXMgbXVjaCBzaW1wbGVyIHRo
YW4gdGhlIG5vbi1ibG9ja2luZyB2ZXJzaW9uLikgSWYgd2UKLSAgICAvLyBkbyB0aGlzIG9uIHRo
ZSBjdXJyZW50IHRocmVhZCwgd2UnbGwgZGVhZGxvY2sgaWYgd2UncmUgY3VycmVudGx5IGluIGEg
Y2FsbGJhY2sgZnVuY3Rpb24gZm9yCi0gICAgLy8gdGhlIHdhaXQgd2UncmUgdW5yZWdpc3Rlcmlu
Zy4gU28gaW5zdGVhZCB3ZSBkbyBpdCBhc3luY2hyb25vdXNseSBvbiBzb21lIG90aGVyIHdvcmtl
ciB0aHJlYWQuCi0KLSAgICA6OlF1ZXVlVXNlcldvcmtJdGVtKHVucmVnaXN0ZXJXYWl0QW5kRGVz
dHJveUl0ZW1DYWxsYmFjaywgaXRlbS5sZWFrUmVmKCksIFdUX0VYRUNVVEVERUZBVUxUKTsKLX0K
LQotRFdPUkQgV0lOQVBJIFdvcmtRdWV1ZTo6dW5yZWdpc3RlcldhaXRBbmREZXN0cm95SXRlbUNh
bGxiYWNrKHZvaWQqIGNvbnRleHQpCi17Ci0gICAgQVNTRVJUX0FSRyhjb250ZXh0LCBjb250ZXh0
KTsKLSAgICBSZWZQdHI8SGFuZGxlV29ya0l0ZW0+IGl0ZW0gPSBhZG9wdFJlZihzdGF0aWNfY2Fz
dDxIYW5kbGVXb3JrSXRlbSo+KGNvbnRleHQpKTsKLQotICAgIC8vIE5vdyB0aGF0IHdlIGtub3cg
d2UncmUgbm90IGluIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSB3YWl0IHdlJ3JlIHVucmVn
aXN0ZXJpbmcsIHdlIGNhbgotICAgIC8vIG1ha2UgYSBibG9ja2luZyBjYWxsIHRvIDo6VW5yZWdp
c3RlcldhaXRFeC4KLSAgICBpZiAoITo6VW5yZWdpc3RlcldhaXRFeChpdGVtLT53YWl0SGFuZGxl
KCksIElOVkFMSURfSEFORExFX1ZBTFVFKSkgewotICAgICAgICBEV09SRCBlcnJvciA9IDo6R2V0
TGFzdEVycm9yKCk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAg
IHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBmMzI3ZTI2Li5jM2Iz
OTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtOCw3ICs4LDYgQEAgTElTVChBUFBF
TkQgV2ViS2l0Ml9MSU5LX0ZMQUdTCiAKIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAg
IFBsYXRmb3JtL2VmbC9Nb2R1bGVFZmwuY3BwCi0gICAgUGxhdGZvcm0vZWZsL1dvcmtRdWV1ZUVm
bC5jcHAKICAgICBQbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwCiAKICAgICBQbGF0
Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCAyNWQ4
OTRmLi5iNWNkOTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTMwLDkgKzMwLDcgQEAgSEVBREVSUyArPSBc
CiAgICAgUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlU2VuZGVyLmggXAogICAgIFBsYXRmb3JtL0xv
Z2dpbmcuaCBcCiAgICAgUGxhdGZvcm0vTW9kdWxlLmggXAotICAgIFBsYXRmb3JtL1BsYXRmb3Jt
UHJvY2Vzc0lkZW50aWZpZXIuaCBcCiAgICAgUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmggXAotICAg
IFBsYXRmb3JtL1dvcmtRdWV1ZS5oIFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xs
ZXJQcm94eS5oIFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5o
IFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuaCBcCkBAIC00MTAsNyArNDA4LDYg
QEAgU09VUkNFUyArPSBcCiAgICAgUGxhdGZvcm0vQ29yZUlQQy9EYXRhUmVmZXJlbmNlLmNwcCBc
CiAgICAgUGxhdGZvcm0vTG9nZ2luZy5jcHAgXAogICAgIFBsYXRmb3JtL01vZHVsZS5jcHAgXAot
ICAgIFBsYXRmb3JtL1dvcmtRdWV1ZS5jcHAgXAogICAgIFBsYXRmb3JtL3F0L0xvZ2dpbmdRdC5j
cHAgXAogICAgIFBsYXRmb3JtL3F0L01vZHVsZVF0LmNwcCBcCiAgICAgUGx1Z2luUHJvY2Vzcy9Q
bHVnaW5Db250cm9sbGVyUHJveHkuY3BwIFwKQEAgLTgyMSwxNCArODE4LDEyIEBAIG1hYzogewog
ICAgIFNPVVJDRVMgKz0gXAogICAgICAgICBQbGF0Zm9ybS9Db3JlSVBDL21hYy9Db25uZWN0aW9u
TWFjLmNwcCBcCiAgICAgICAgIFBsYXRmb3JtL21hYy9NYWNoVXRpbGl0aWVzLmNwcCBcCi0gICAg
ICAgIFBsYXRmb3JtL21hYy9Xb3JrUXVldWVNYWMuY3BwIFwKICAgICAgICAgUGxhdGZvcm0vbWFj
L1NoYXJlZE1lbW9yeU1hYy5jcHAKIAogfSBlbHNlIHsKICAgICBTT1VSQ0VTICs9IFwKICAgICAg
ICAgUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcCBcCiAgICAgICAgIFBs
YXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAgXAotICAgICAgICBQbGF0Zm9y
bS9xdC9Xb3JrUXVldWVRdC5jcHAgXAogICAgICAgICBQbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9y
eVVuaXguY3BwCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVu
Y2hlci9Qcm9jZXNzTGF1bmNoZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5j
aGVyL1Byb2Nlc3NMYXVuY2hlci5jcHAKaW5kZXggYmEyMmRkYS4uNjdkZWY3NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5j
cHAKQEAgLTI2LDggKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQcm9j
ZXNzTGF1bmNoZXIuaCIKIAotI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgogI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIv
UHJvY2Vzc0xhdW5jaGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvUHJv
Y2Vzc0xhdW5jaGVyLmgKaW5kZXggNzViMmYyNy4uMTg4NjZlZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuaApAQCAtMjcsNyAr
MjcsNyBAQAogI2RlZmluZSBXZWJQcm9jZXNzTGF1bmNoZXJfaAogCiAjaW5jbHVkZSAiQ29ubmVj
dGlvbi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9UaHJlYWRMYXVuY2hlci5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmgKaW5kZXggZjNhNTMxMi4uOWM2YjEy
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExh
dW5jaGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExh
dW5jaGVyLmgKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgVGhyZWFkTGF1bmNoZXJfaAogCiAj
aW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZp
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCAyOWE2YzY1Li5mZjcyZjVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC00MCw3ICs0MCw2IEBACiAj
ZW5kaWYKICNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0
aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVBy
b2Nlc3NJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1
ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldLQmFzZS5oIgpAQCAtNzMsNiArNzIs
NyBAQAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtUHJv
Y2Vzc0lkZW50aWZpZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCmluZGV4IDhlNzY4YmYuLjY0MTlhN2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgKQEAgLTI2LDcgKzI2
LDYgQEAKICNpZm5kZWYgV2ViUHJvY2Vzc1Byb3h5X2gKICNkZWZpbmUgV2ViUHJvY2Vzc1Byb3h5
X2gKIAotI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKICNpbmNsdWRlICJQ
bHVnaW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKICNpbmNsdWRl
ICJQcm9jZXNzTW9kZWwuaCIKQEAgLTM5LDYgKzM4LDcgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MDc3ZjZkLi5l
YWQ0NzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC00NzYsNyArNDc2LDYgQEAKIAkJQjYzNDAzRjkxNDkxMEQ1NzAwMTA3MEI1
IC8qIEFQSU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCNjM0MDNGODE0OTEwRDU3MDAxMDcwQjUgLyogQVBJT2JqZWN0LmNwcCAqLzsgfTsK
IAkJQjg3OEI2MTUxMzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjg3OEI2MTMxMzM0MjhEQzAw
Njg4OEU5IC8qIENvcnJlY3Rpb25QYW5lbC5oICovOyB9OwogCQlCODc4QjYxNjEzMzQyOERDMDA2
ODg4RTkgLyogQ29ycmVjdGlvblBhbmVsLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjg3OEI2MTQxMzM0MjhEQzAwNjg4OEU5IC8qIENvcnJlY3Rpb25Q
YW5lbC5tbSAqLzsgfTsKLQkJQkMwMDkyRjgxMTU4MzdBMzAwRTBBRTJBIC8qIFdvcmtRdWV1ZU1h
Yy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAw
OTJGNjExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNwcCAqLzsgfTsKIAkJQkMwMzJE
NzUxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNocm9tZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMzJENjAxMEY0Mzc4RDAwNThDMTVBIC8q
IFdlYkNocm9tZUNsaWVudC5oICovOyB9OwogCQlCQzAzMkQ3NzEwRjQzNzhEMDA1OEMxNUEgLyog
V2ViQ29udGV4dE1lbnVDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDMDMyRDYyMTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJDb250ZXh0TWVudUNs
aWVudC5oICovOyB9OwogCQlCQzAzMkQ3QjEwRjQzNzhEMDA1OEMxNUEgLyogV2ViRHJhZ0NsaWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMzJE
NjYxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkRyYWdDbGllbnQuaCAqLzsgfTsKQEAgLTU2OSw4ICs1
NjgsNiBAQAogCQlCQzJEMDIxNzEyQUM0MUNCMDBFNzMyQTMgLyogU2FtZURvY3VtZW50TmF2aWdh
dGlvblR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDMkQwMjE2MTJBQzQxQ0IwMEU3MzJBMyAvKiBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5o
ICovOyB9OwogCQlCQzJEMDIxOTEyQUM0MjZDMDBFNzMyQTMgLyogV0tQYWdlTG9hZFR5cGVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJEMDIxODEy
QUM0MjZDMDBFNzMyQTMgLyogV0tQYWdlTG9hZFR5cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMyREZCQTMxMkE3NjFBNTAwRTczMkEzIC8q
IFdlYlByZWZlcmVuY2VzQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkMyREZCQTIxMkE3NjFBNTAwRTczMkEzIC8qIFdlYlByZWZlcmVuY2VzQ0Yu
Y3BwICovOyB9OwotCQlCQzJFNkU4RDExNDE5NzE1MDBBNjNCMUUgLyogV29ya1F1ZXVlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkU2RTdEMTE0
MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuY3BwICovOyB9OwotCQlCQzJFNkU4RTExNDE5NzE1
MDBBNjNCMUUgLyogV29ya1F1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzJFNkU3RTExNDE5NzBDMDBBNjNCMUUgLyogV29ya1F1ZXVlLmggKi87
IH07CiAJCUJDMzA2NUM0MTI1OTJGODkwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzMDY1QzMxMjU5MkY4
OTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNYWMubW0gKi87IH07CiAJCUJDMzA2NUZBMTI1OTM0NEUw
MEU3MTI3OCAvKiBDYWNoZU1vZGVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzMwNjVGOTEyNTkzNDRFMDBFNzEyNzggLyogQ2FjaGVNb2RlbC5oICov
OyB9OwogCQlCQzMwNjZCRTEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzMwNjZCQzEyNUE0NDIxMDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAg
Ki87IH07CkBAIC0xNTE0LDcgKzE1MTEsNiBAQAogCQlCNjM0MDNGODE0OTEwRDU3MDAxMDcwQjUg
LyogQVBJT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFQ
SU9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI4NzhCNjEzMTMzNDI4
REMwMDY4ODhFOSAvKiBDb3JyZWN0aW9uUGFuZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29ycmVjdGlvblBhbmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUI4NzhCNjE0MTMzNDI4REMwMDY4ODhFOSAvKiBDb3JyZWN0aW9uUGFuZWwubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb3JyZWN0aW9uUGFuZWwubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDMDA5MkY2MTE1ODM3QTMwMEUwQUUyQSAvKiBXb3Jr
UXVldWVNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya1F1
ZXVlTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMzJENjAxMEY0Mzc4
RDAwNThDMTVBIC8qIFdlYkNocm9tZUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJDaHJvbWVDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkMwMzJENjIxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNvbnRleHRNZW51Q2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbnRleHRNZW51Q2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDMyRDY2MTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJE
cmFnQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRyYWdDbGll
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MTMsOCArMTYwOSw2IEBACiAJ
CUJDMkQwMjE2MTJBQzQxQ0IwMEU3MzJBMyAvKiBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1lRG9jdW1lbnROYXZpZ2F0aW9u
VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzJEMDIxODEyQUM0MjZDMDBF
NzMyQTMgLyogV0tQYWdlTG9hZFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdLUGFnZUxvYWRUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzJE
RkJBMjEyQTc2MUE1MDBFNzMyQTMgLyogV2ViUHJlZmVyZW5jZXNDRi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJQcmVmZXJlbmNlc0NGLmNwcDsgcGF0aCA9IGNm
L1dlYlByZWZlcmVuY2VzQ0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzJF
NkU3RDExNDE5NzBDMDBBNjNCMUUgLyogV29ya1F1ZXVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtRdWV1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUJDMkU2RTdFMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya1F1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDMzA2NUMzMTI1OTJGODkwMEU3MTI3OCAvKiBXZWJQcm9jZXNzTWFjLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc01hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMzMDY1RjkxMjU5MzQ0RTAwRTcxMjc4IC8q
IENhY2hlTW9kZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVNb2Rl
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzMwNjZCOTEyNUE0MzYzMDBFNzEy
NzggLyogV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJQ
cm9jZXNzLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI5OCw3
ICsyMjkyLDYgQEAKIAkJCQkxQTI0QkYzOTEyMDg5NkE2MDBGQkIwNTkgLyogU2hhcmVkTWVtb3J5
TWFjLmNwcCAqLywKIAkJCQkyOTZCRDg1QjE1MDE5QkMzMDA3MUY0MjQgLyogU3RyaW5nVXRpbGl0
aWVzLmggKi8sCiAJCQkJMjk2QkQ4NUMxNTAxOUJDMzAwNzFGNDI0IC8qIFN0cmluZ1V0aWxpdGll
cy5tbSAqLywKLQkJCQlCQzAwOTJGNjExNTgzN0EzMDBFMEFFMkEgLyogV29ya1F1ZXVlTWFjLmNw
cCAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTMzMzYsOCArMzMyOSw2IEBACiAJCQkJQzBFM0FBNDQxMjA5RTJCQTAwQTQ5RDAxIC8qIE1v
ZHVsZS5oICovLAogCQkJCUJDODc4MEZCMTE2MUMyQjgwMENDMjc2OCAvKiBQbGF0Zm9ybVByb2Nl
c3NJZGVudGlmaWVyLmggKi8sCiAJCQkJMUEyNEJFRDMxMjA4OTREMTAwRkJCMDU5IC8qIFNoYXJl
ZE1lbW9yeS5oICovLAotCQkJCUJDMkU2RTdEMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUu
Y3BwICovLAotCQkJCUJDMkU2RTdFMTE0MTk3MEMwMEE2M0IxRSAvKiBXb3JrUXVldWUuaCAqLywK
IAkJCSk7CiAJCQlwYXRoID0gUGxhdGZvcm07CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtNDE4OSw3ICs0MTgwLDYgQEAKIAkJCQlCQzg2OTlCNTExNkFBREFBMDAyQTkyNUIgLyogV0tW
aWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzg2OTlCNzExNkFBREFBMDAyQTkyNUIgLyogV0tW
aWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJGQTYxNzlGMTJGMEI5OUQwMDMzRTBD
QSAvKiBXS1ZpZXdQcml2YXRlLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzJFNkU4RTExNDE5NzE1
MDBBNjNCMUUgLyogV29ya1F1ZXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTdCRjk5NjE0RDBB
NzNFMDBBNUEwNjkgLyogTmV0c2NhcGVTYW5kYm94RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0UwOTM3ODE0RkIxMjhDMDAxMTM4RDkgLyogTGF5ZXJIb3N0aW5nQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMjk2QkQ4NUQxNTAxOUJDMzAwNzFGNDI0IC8qIFN0cmluZ1V0aWxp
dGllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC00OTM2LDggKzQ5MjYsNiBAQAogCQkJCUJDNDA3NjJD
MTI0RkYwNDAwMDY4RjIwQSAvKiBXS1VSTFJlc3BvbnNlTlMubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlGNjExM0UyODEyNkNFMTlCMDA1N0QwQTcgLyogV0tVc2VyQ29udGVudFVSTFBhdHRlcm4uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4Njk5QjYxMTZBQURBQTAwMkE5MjVCIC8qIFdLVmlldy5t
bSBpbiBTb3VyY2VzICovLAotCQkJCUJDMkU2RThEMTE0MTk3MTUwMEE2M0IxRSAvKiBXb3JrUXVl
dWUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkMwMDkyRjgxMTU4MzdBMzAwRTBBRTJBIC8qIFdv
cmtRdWV1ZU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTdCRjk5ODE0RDBBQTgzMDBBNUEw
NjkgLyogTmV0c2NhcGVTYW5kYm94RnVuY3Rpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNF
MDkzNzcxNEZCMTI4QzAwMTEzOEQ5IC8qIExheWVySG9zdGluZ0NvbnRleHQubW0gaW4gU291cmNl
cyAqLywKIAkJCQkyOTZCRDg1RTE1MDE5QkMzMDA3MUY0MjQgLyogU3RyaW5nVXRpbGl0aWVzLm1t
IGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi52
Y3Byb2ogYi9Tb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oKaW5kZXggMGEzOGM0Yi4u
MzcyNTJiNiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCisr
KyBiL1NvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagpAQCAtMzkzNCwxNCArMzkzNCw2
IEBACiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxQbGF0Zm9ybVxTaGFyZWRNZW1vcnkuaCIKIAkJCQk+
CiAJCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1cV29y
a1F1ZXVlLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0
aD0iLi5cUGxhdGZvcm1cV29ya1F1ZXVlLmgiCi0JCQkJPgotCQkJPC9GaWxlPgogCQkJPEZpbHRl
cgogCQkJCU5hbWU9ImNnIgogCQkJCT4KQEAgLTM5ODEsMTAgKzM5NzMsNiBAQAogCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXFBsYXRmb3JtXHdpblxTaGFyZWRNZW1vcnlXaW4uY3BwIgogCQkJCQk+CiAJ
CQkJPC9GaWxlPgotCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1cd2lu
XFdvcmtRdWV1ZVdpbi5jcHAiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+CiAJCQk8L0ZpbHRlcj4KIAkJ
CTxGaWx0ZXIKIAkJCQlOYW1lPSJDb3JlSVBDIgotLSAKMS43LjkuNQoK
</data>
<flag name="commit-queue"
          id="161707"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154812</attachid>
            <date>2012-07-26 19:25:06 -0700</date>
            <delta_ts>2012-08-02 15:29:39 -0700</delta_ts>
            <desc>Draft patch for refactoring in BitmapImage and Image</desc>
            <filename>webkit-async-decoding.patch</filename>
            <type>text/plain</type>
            <size>35401</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkYTM3OWIwLi4yYTg5YzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTc5
IEBACisyMDEyLTA3LTI2ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgQWRkIEltYWdlU291cmNlT2JzZXJ2ZXIgdG8gSW1hZ2VTb3VyY2UgYW5kIGltcGxlbWVudHMg
YnkgQml0bWFwSW1hZ2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05MDM3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEltYWdlU291cmNlT2JzZXJ2ZXIgaXMgYWRkZWQgdG8gbm90aWZ5IEJpdG1hcEltYWdl
IGFuIGltYWdlIGZyYW1lIGlzCisgICAgICAgIHJlYWR5IHdoZW4gYXN5bmNocm9ub3VzIGltYWdl
IGRlY29kaW5nIGlzIHVzZWQuCisKKyAgICAgICAgVGhlIG9ic2VydmVyIGp1c3QgbmVlZHMgdG8g
a25vdyB0aGUgaW5kZXgsIEJpdG1hcEltYWdlIGNhbiBmZXRjaCBhbmQKKyAgICAgICAgY2FjaGUg
dGhlIGZyYW1lIGJ5IGNhbGxpbmcgY3JlYXRlRnJhbWVBdEluZGV4KCkgYWdhaW4uCisKKyAgICAg
ICAgVGhlIGludGVudGlvbiBvZiB0aGlzIGNoYW5nZSBpcyB0byBoYXZlIEltYWdlU291cmNlIGJl
aW5nIHRoZSBvbmx5CisgICAgICAgIGFzeW5jaHJvbm91cyBpbnRlcmZhY2UuIEltYWdlRGVjb2Rl
ciBpbnRlcmZhY2Ugc2hvdWxkIHN0YXkgc3luY2hyb25vdXMKKyAgICAgICAgdG8gbWluaW1pemUg
bXVsdGlwbGUgb2YgdGhlc2UgaW50ZXJmYWNlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFk
ZGluZyBhIG9ic2VydmVyIGNsYXNzIGFuZCBub3QgYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkaWREZWNvZGVGcmFtZUF0SW5k
ZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAg
IChCaXRtYXBJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1l
QXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldFVzZUFz
eW5jaHJvbm91c0RlY29kaW5nKToKKyAgICAgICAgKEltYWdlU291cmNlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjpJbWFnZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlKToKKworMjAxMi0w
Ny0yNiAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBtZXRo
b2RzIHRvIEJpdG1hcEltYWdlIHRvIGluZGljYXRlIGFzeW5jaHJvbm91cyBpbWFnZSBkZWNvZGlu
ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAzNzUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcg
Qml0bWFwSW1hZ2U6OnNldFVzZUFzeW5jaHJvbm91c0RlY29kaW5nKCkgYW5kCisgICAgICAgIEJp
dG1hcEltYWdlOjp1c2VBc3luY2hyb25vdXNEZWNvZGluZygpIHRvIGluZGljYXRlIGFzeW5jaHJv
bm91cyBkZWNvZGluZworICAgICAgICBpcyBkZXNpcmVkLCBvciBhc3luY2hyb25vdXMgZGVjb2Rp
bmcgc2hvdWxkIG5ldmVyIGJlIHVzZWQuCisKKyAgICAgICAgVGhlc2UgbWV0aG9kcyBhcmUgYWRk
ZWQgdG8gQml0bWFwSW1hZ2UgYmVjYXVzZSBkZWNvZGluZyBpcyBtZWFuaW5nZnVsCisgICAgICAg
IHRvIHRoaXMgY2xhc3MuIFVzZXIgb2YgdGhlc2UgQVBJcyBzaG91bGQgZGV0ZWN0IHRoZSBjYXNl
IG9mIEJpdG1hcEltYWdlCisgICAgICAgIGFuZCBjYWxsIHVzZUFzeW5jaHJvbm91c0RlY29kaW5n
KCkgd2hlbiBkZXNpcmVkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYWRkaW5nIG5ldyBmbGFn
cyBidXQgbm90IHVzZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2V0VXNlQXN5bmNocm9ub3Vz
RGVjb2RpbmcpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6dXNlQXN5bmNocm9ub3VzRGVjb2RpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChCaXRtYXBJbWFnZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OkltYWdlU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldFVzZUFzeW5jaHJvbm91
c0RlY29kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjp1c2VBc3luY2hyb25v
dXNEZWNvZGluZyk6CisgICAgICAgIChJbWFnZVNvdXJjZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6SW1hZ2VTb3VyY2UpOgorCisyMDEyLTA3LTI1ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGNhbGxzIHRvIGZyYW1lQnVmZmVyQXRJbmRleCgp
IGluIG1ldGFkYXRhIGdldHRlcnMgZm9yIEltYWdlU291cmNlLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAzNzUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBmcmFtZUJ1ZmZlckF0SW5kZXgoKSBzaG91bGRu
J3QgYmUgY2FsbGVkIGZvciB0aGVzZSBtZXRhZGF0YSBnZXR0ZXJzLgorICAgICAgICBUaGV5IHNo
b3VsZCBiZSBhbnN3ZXJlZCBieSBkZWNvZGVycyBkaXJlY3RseSwgYW5kIGRlcGVuZGluZyBvbiB0
aGUKKyAgICAgICAgaW1hZ2UgZm9ybWF0IChjb2RlYykgdGhlc2UgbWV0YWRhdGEgZnVuY3Rpb25z
IGNhbiBjb21wbGV0ZSB3aXRob3V0CisgICAgICAgIGEgZnVsbCBkZWNvZGUuCisKKyAgICAgICAg
Rm9yIGV4YW1wbGUgZnJhbWVEdXJhdGlvbkF0SW5kZXgoKSBpcyBvbmx5IG1lYW5pbmdmdWwgZm9y
IEdJRiBhbmQKKyAgICAgICAgZ2V0dGluZyBkdXJhdGlvbiBkb2Vzbid0IHJlcXVpcmUgYSBmdWxs
IGRlY29kZWQuIFRoZSBzYW1lIGdvZXMgZm9yCisgICAgICAgIGZyYW1lSGFzQWxwaGFBdEluZGV4
KCksIG1vc3QgaW1hZ2UgZm9ybWF0cyBkb2Vzbid0IGhhdmUgYWxwaGEgY2hhbmVsCisgICAgICAg
IGFuZCB0aHVzIHBlcmZvcm1pbmcgYSBmdWxsIGRlY29kZSBpcyBub3QgbmVjZXNzYXJ5LgorCisg
ICAgICAgIFRoZSB1bHRpbWF0ZSBnb2FsIGlzIHRvIGRvIGFzIGxpdHRsZSBmdWxsIGRlY29kZSBh
cyBwb3NzaWJsZSBhbmQgc28KKyAgICAgICAgZ2l2aW5nIHRoZSByZXNwb25zaWJpbGl0aWVzIHRv
IGluZGl2aWR1YWwgZGVjb2RlciB0byBhbnN3ZXIgdGhlc2UKKyAgICAgICAgbWV0YWRhdGEgbWV0
aG9kIGNhbGxzIGFsbG93cyBvcHRpbWl6YXRpb24gZm9yIGVhY2ggaW1hZ2UgZm9ybWF0LgorCisg
ICAgICAgIEFub3RoZXIgZWZmb3J0IG9mIHRoaXMgcGF0Y2ggaXMgdGhhdCBmcmFtZUJ1ZmZlckF0
SW5kZXgoKSBpcyBjYWxsZWQKKyAgICAgICAgb25seSBpZiBhIGZyYW1lIGlzIHJlYWxseSBuZWVk
ZWQsIGZvciBleGFtcGxlIGZvciByZW5kZXJpbmcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBy
ZWZhY3RvcmluZyBubyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6
ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZy
YW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFt
ZUlzQ29tcGxldGVBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUR1
cmF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGVyOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKEltYWdlRGVjb2Rlcik6CisK
KzIwMTItMDctMjUgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZW1vdmUgY2FsbHMgdG8gZW5zdXJlRnJhbWVJc0NhY2hlZCgpIGluIG1ldGFkYXRhIGdldHRlcnMg
Zm9yIEJpdG1hcEltYWdlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTAzNzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBlbnN1cmVGcmFtZUlzQ2FjaGVkKCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IEJp
dG1hcEltYWdlOjpmcmFtZUF0SW5kZXgoKS4KKyAgICAgICAgVGhlc2UgbWV0YWRhdGEgZ2V0dGVy
cyBzaG91bGQgY2FsbCBkaXJlY3RseSB0byBJbWFnZVNvdXJjZS4gRmV0Y2hpbmcKKyAgICAgICAg
dGhlc2UgbWV0YWRhdGEgc2hvdWxkbid0IHJlcXVpcmUgYSBmdWxsIGltYWdlIGRlY29kaW5nLCBJ
bWFnZVNvdXJjZQorICAgICAgICBhbmQgSW1hZ2VEZWNvZGVyIHNob3VsZCBkbyB0aGUgYmVzdCBl
ZmZvcnQgdG8gbm90IGRlY29kZSBhbmQgZmV0Y2gKKyAgICAgICAgdGhlc2UgaW5mb3JtYXRpb24g
ZnJvbSBoZWFkZXIuCisKKyAgICAgICAgT25lIGVmZmVjdCBvZiB0aGlzIHBhdGNoIGlzIHRoZSBy
ZXN1bHQgb2YgdGhlc2UgbWV0YWRhdGEgYWNjZXNzb3JzCisgICAgICAgIGFyZSBub3QgY2FjaGVk
LCBpdCBzaG91bGQgYmUgdGhlIGpvYiBvZiB0aGUgZGVjb2RlciB0byBjYWNoZSB0aGVtCisgICAg
ICAgIGludGVybmFsbHkuCisKKyAgICAgICAgT25seSB3aGVuIG5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCkgaXMgY2FsbGVkIHdvdWxkIHRoZXNlIG1ldGFkYXRhCisgICAgICAgIGJlIGNhY2hl
ZC4gVGhpcyBpcyBjb3JyZWN0OiBhZnRlciBhIGZyYW1lIGlzIGNhY2hlZCBpbiBCaXRtYXBJbWFn
ZSBhbmQKKyAgICAgICAgSW1hZ2VTb3VyY2UgaXMgY2xlYXJlZCB3ZSB3YW50IHRvIGNvbnRpbnVl
IHVzaW5nIHRoZSBmcmFtZSB3aXRoIGFsbAorICAgICAgICB0aGUgbWV0YWRhdGEuCisKKyAgICAg
ICAgVGhpcyBjaGFuZ2UgcGFzc2VkIGxheW91dCB0ZXN0cyB3aXRob3V0IGVycm9yLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cywganVzdCByZWZhY3RvcmluZyBubyBiZWhhdmlvciBjaGFuZ2UuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcEltYWdlOjpmcmFtZU9yaWVudGF0aW9uQXRJbmRleCk6CisKKzIwMTItMDctMjUg
IEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZW1vdmUgZGVzdHJv
eURlY29kZWREYXRhKCkgYW5kIGRlY29kZWRTaXplKCkgZnJvbSBJbWFnZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMzc1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBkZXN0cm95RGVjb2RlZERh
dGEoKSBhbmQgZGVjb2RlZFNpemUoKSBmcm9tIEltYWdlIHRvIEJpdG1hcEltYWdlLgorICAgICAg
ICBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKCkgYW5kIEltYWdlOjpkZWNvZGVkU2l6ZSgpIGFy
ZSBub3QgdXNlZCBhbmQKKyAgICAgICAgbm90IGltcGxlbWVudGVkIG90aGVyIHRoYW4gaW4gQml0
bWFwSW1hZ2UuCisKKyAgICAgICAgT3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIEltYWdlIGRvIG5v
dCBoYXZlIGEgY29uY2VwdCBvZiBkZWNvZGVkU2l6ZSgpCisgICAgICAgIGFuZCBpdCBzaG91bGQg
YmUgcmVwb3J0ZWQgdGhyb3VnaCBJbWFnZU9ic2VydmVyOjpkZWNvZGVkU2l6ZUNoYW5nZWQoKQor
ICAgICAgICBhbnl3YXkuCisKKyAgICAgICAgSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSgpIGlz
IG9ubHkgdXNlZCBpbiBDYWNoZWRJbWFnZSBhbmQgb25seQorICAgICAgICBpbXBsZW1lbnRlZCBp
biBCaXRtYXBJbWFnZSwgdGhpcyBzaG91bGQgYmUgb25seSB0aHJvdWdoIGEgc3RhdGljX2Nhc3QK
KyAgICAgICAgdG8gQml0bWFwSW1hZ2UuCisKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVk
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmRlc3Ryb3lEZWNvZGVk
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAg
ICAgKEJpdG1hcEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJ
bWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6CisgICAgICAgIChJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZGF0YUNoYW5nZWQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaDoKKyAgICAgICAgKFBERkRv
Y3VtZW50SW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VR
dC5oOgorICAgICAgICAoU3RpbGxJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oOgorICAgICAgICAoQml0
bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5oOgorICAgICAgICAoU1ZHSW1hZ2UpOgorCiAyMDEyLTA3LTIwICBIYW4gU2hlbiAgPHNoZW5o
YW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBbQ2hyb21pdW1dIENvbXBpbGF0aW9uIGZhaWxzIHVu
ZGVyIGdjYyA0LjcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhMTcyZDVlLi44MTE5MTZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCkBAIC0zODcsNiArMzg3LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZU9ic2VydmVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlT3JpZW50YXRpb24uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2VPYnNl
cnZlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludEhhc2guaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCmluZGV4IGZiMzFmMWIuLjIwMTQ0NzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcApAQCAtNDE2LDggKzQxNiw5IEBA
IHZvaWQgQ2FjaGVkSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSgpCiAgICAgICAgIHNldERlY29k
ZWRTaXplKDApOwogICAgICAgICBpZiAoIU1lbW9yeUNhY2hlOjpzaG91bGRNYWtlUmVzb3VyY2VQ
dXJnZWFibGVPbkV2aWN0aW9uKCkpCiAgICAgICAgICAgICBtYWtlUHVyZ2VhYmxlKHRydWUpOwot
ICAgIH0gZWxzZSBpZiAobV9pbWFnZSAmJiAhZXJyb3JPY2N1cnJlZCgpKQotICAgICAgICBtX2lt
YWdlLT5kZXN0cm95RGVjb2RlZERhdGEoKTsKKyAgICB9IGVsc2UgaWYgKG1faW1hZ2UgJiYgbV9p
bWFnZS0+aXNCaXRtYXBJbWFnZSgpICYmICFlcnJvck9jY3VycmVkKCkpIHsKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8Qml0bWFwSW1hZ2UqPihtX2ltYWdlLmdldCgpKS0+ZGVzdHJveURlY29kZWREYXRh
KCk7CisgICAgfQogfQogCiB2b2lkIENhY2hlZEltYWdlOjpkZWNvZGVkU2l6ZUNoYW5nZWQoY29u
c3QgSW1hZ2UqIGltYWdlLCBpbnQgZGVsdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5kZXggNDU0NjBmOC4uYzczM2Q5NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAt
MzAzLDE2ICszMDMsMjggQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lQXRJbmRl
eChzaXplX3QgaW5kZXgpCiAKIGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5k
ZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faXND
b21wbGV0ZTsKKyAgICBpZiAoaW5kZXggPCBtX2ZyYW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5k
ZXhdLm1faGF2ZU1ldGFkYXRhKQorICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faXND
b21wbGV0ZTsKKyAgICByZXR1cm4gbV9zb3VyY2UuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRl
eCk7CiB9CiAKIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3Qg
aW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkKKyAgICBpZiAo
aW5kZXggPCBtX2ZyYW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRh
KQorICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1fZHVyYXRpb247CisgICAgaWYgKHJl
cGV0aXRpb25Db3VudChmYWxzZSkgPT0gY0FuaW1hdGlvbk5vbmUpCiAgICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKKyAgICByZXR1cm4gbV9z
b3VyY2UuZnJhbWVEdXJhdGlvbkF0SW5kZXgoaW5kZXgpOworfQorCit2b2lkIEJpdG1hcEltYWdl
OjpzZXRVc2VBc3luY2hyb25vdXNEZWNvZGluZyhib29sIHVzZUFzeW5jaHJvbm91c0RlY29kaW5n
KQoreworICAgIHJldHVybiBtX3NvdXJjZS5zZXRVc2VBc3luY2hyb25vdXNEZWNvZGluZyh1c2VB
c3luY2hyb25vdXNEZWNvZGluZyk7Cit9CisKK2Jvb2wgQml0bWFwSW1hZ2U6OnVzZUFzeW5jaHJv
bm91c0RlY29kaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zb3VyY2UudXNlQXN5bmNocm9u
b3VzRGVjb2RpbmcoKTsKIH0KIAogTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCkKQEAgLTMyMiwxMSArMzM0LDkgQEAgTmF0aXZlSW1hZ2VQdHIg
Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKIAogYm9vbCBCaXRtYXBJ
bWFnZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIC8vIFdoZW4g
YSBmcmFtZSBoYXMgbm90IGZpbmlzaGVkIGRlY29kaW5nLCBhbHdheXMgbWFyayBpdCBhcyBoYXZp
bmcgYWxwaGEuCi0gICAgLy8gU2VlIEltYWdlU291cmNlOjpmcmFtZWhhc0FscGhhQXRJbmRleCBm
b3IgZXhwbGFuYXRpb24gb2Ygd2h5IGluY29tcGxldGUgaW1hZ2VzIGNsYWltIHRvIGhhdmUgYWxw
aGEuCi0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2hhc0FscGhhOworICAgIGlmIChp
bmRleCA8IG1fZnJhbWVzLnNpemUoKSAmJiBtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEp
CisgICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9oYXNBbHBoYTsKKyAgICByZXR1cm4g
bV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOwogfQogCiBib29sIEJpdG1hcElt
YWdlOjpjdXJyZW50RnJhbWVIYXNBbHBoYSgpCkBAIC0zNDEsOSArMzUxLDkgQEAgSW1hZ2VPcmll
bnRhdGlvbiBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lT3JpZW50YXRpb24oKQogCiBJbWFnZU9y
aWVudGF0aW9uIEJpdG1hcEltYWdlOjpmcmFtZU9yaWVudGF0aW9uQXRJbmRleChzaXplX3QgaW5k
ZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkKLSAgICAgICAgcmV0
dXJuIERlZmF1bHRJbWFnZU9yaWVudGF0aW9uOwotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0u
bV9vcmllbnRhdGlvbjsKKyAgICBpZiAoaW5kZXggPCBtX2ZyYW1lcy5zaXplKCkgJiYgbV9mcmFt
ZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKQorICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhd
Lm1fb3JpZW50YXRpb247CisgICAgcmV0dXJuIG1fc291cmNlLm9yaWVudGF0aW9uQXRJbmRleChp
bmRleCk7CiB9CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC0zNTMsNyArMzYzLDExIEBAIGJv
b2wgQml0bWFwSW1hZ2U6Om5vdFNvbGlkQ29sb3IoKQogfQogI2VuZGlmCiAKLQordm9pZCBCaXRt
YXBJbWFnZTo6ZGlkRGVjb2RlRnJhbWVBdEluZGV4KHNpemVfdCkKK3sKKyAgICBBU1NFUlQodXNl
QXN5bmNocm9ub3VzRGVjb2RpbmcoKSk7CisgICAgLy8gVE9ETzogQ2FjaGVzIHRoZSBuZXdseSBh
dmFpbGFibGUgZnJhbWUgYW5kIG5vdGlmeSBpbWFnZU9ic2VydmVyKCkuCit9CiAKIGludCBCaXRt
YXBJbWFnZTo6cmVwZXRpdGlvbkNvdW50KGJvb2wgaW1hZ2VLbm93blRvQmVDb21wbGV0ZSkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4
IGY1YmZlYjEuLjRkM2YyNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuaApAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBCaXRtYXBJbWFnZV9o
CiAKICNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdlU291cmNlT2JzZXJ2ZXIuaCIK
ICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNs
dWRlICJJbnRTaXplLmgiCkBAIC03Myw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2R1
cmF0aW9uKDApCiAgICAgICAgICwgbV9oYXZlTWV0YWRhdGEoZmFsc2UpCiAgICAgICAgICwgbV9p
c0NvbXBsZXRlKGZhbHNlKQotICAgICAgICAsIG1faGFzQWxwaGEodHJ1ZSkgCisgICAgICAgICwg
bV9oYXNBbHBoYSh0cnVlKQogICAgIHsKICAgICB9CiAKQEAgLTkyLDEzICs5MywxNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBtX2hhdmVNZXRhZGF0YSA6IDE7CiAgICAgYm9vbCBtX2lzQ29tcGxldGUg
OiAxOwogICAgIGJvb2wgbV9oYXNBbHBoYSA6IDE7CisgICAgYm9vbCBtX2hhdmVEZWZpbmVkT3Jp
ZW50YXRpb24gOiAxOworICAgIGJvb2wgbV9oYXZlRGVmaW5lZER1cmF0aW9uIDogMTsKKyAgICBi
b29sIG1faGF2ZURlZmluZWRJc0NvbXBsZXRlIDogMTsKKyAgICBib29sIG1faGF2ZURlZmluZWRI
YXNBbHBoYSA6IDE7CiB9OwogCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CiAvLyBCaXRtYXBJbWFnZSBDbGFzcwogLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1jbGFzcyBCaXRtYXBJbWFnZSA6
IHB1YmxpYyBJbWFnZSB7CitjbGFzcyBCaXRtYXBJbWFnZSA6IHB1YmxpYyBJbWFnZSwgcHVibGlj
IEltYWdlU291cmNlT2JzZXJ2ZXIgewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsK
ICAgICBmcmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7CiAgICAgZnJpZW5kIGNs
YXNzIEdlbmVyYXRvckdlbmVyYXRlZEltYWdlOwpAQCAtMTMyLDcgKzEzNywxMyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHN0b3BBbmltYXRpb24oKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXRBbmltYXRpb24oKTsKIAotICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25z
dDsKKyAgICAvLyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0YS4gIFdoZW4gfGRlc3Ry
b3lBbGx8IGlzIHRydWUsIHdlIHdpcGUgb3V0CisgICAgLy8gdGhlIGVudGlyZSBmcmFtZSBidWZm
ZXIgY2FjaGUgYW5kIHRlbGwgdGhlIGltYWdlIHNvdXJjZSB0byBkZXN0cm95CisgICAgLy8gZXZl
cnl0aGluZzsgdGhpcyBpcyB1c2VkIHdoZW4gZS5nLiB3ZSB3YW50IHRvIGZyZWUgc29tZSByb29t
IGluIHRoZSBpbWFnZQorICAgIC8vIGNhY2hlLiAgSWYgfGRlc3Ryb3lBbGx8IGlzIGZhbHNlLCB3
ZSBvbmx5IGRlbGV0ZSBmcmFtZXMgdXAgdG8gdGhlIGN1cnJlbnQKKyAgICAvLyBvbmU7IHRoaXMg
aXMgdXNlZCB3aGlsZSBhbmltYXRpbmcgbGFyZ2UgaW1hZ2VzIHRvIGtlZXAgbWVtb3J5IGZvb3Rw
cmludAorICAgIC8vIGxvdyB3aXRob3V0IHJlZGVjb2RpbmcgdGhlIHdob2xlIGltYWdlIG9uIGV2
ZXJ5IGZyYW1lLgorICAgIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCA9
IHRydWUpOwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIC8vIEFjY2Vzc29ycyBmb3IgbmF0aXZl
IGltYWdlIGZvcm1hdHMuCkBAIC0xNjgsMTcgKzE3OSwyOSBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBHZGtQaXhidWYqIGdldEdka1BpeGJ1ZigpOwogI2VuZGlmCiAKKyAgICAvLyBTZXQgdXNpbmcg
YXN5bmNocm9ub3VzIGRlY29kaW5nIGlmIGNhcGFibGUuIE9uIHBsYXRmb3JtIHdoZXJlIHRoaXMg
ZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIHRoaXMgaGFzIG5vIGVmZmVjdC4KKyAgICAvLyBXaGVu
IGFzeW5jaHJvbm91cyBkZWNvZGluZyBpcyBzdXBwb3J0ZWQgYW5kIGVuYWJsZWQsIGNhbGxzIHRv
IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgd2lsbCBzdGFydCBpbWFnZSBkZWNvZGluZwor
ICAgIC8vIGFzeW5jaHJvbm91c2x5LiBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIG1heSBy
ZXR1cm4gbnVsbCBpZiBkZWNvZGVkIGltYWdlIGlzIG5vdCBhdmFpbGFibGUuCisgICAgLy8gV2hl
biBkZWNvZGVkIGltYWdlIGJlY29tZXMgYXZhaWxhYmxlLCBJbWFnZU9ic2VydmVyOjpjaGFuZ2Vk
SW5SZWN0KCkgaXMgY2FsbGVkLgorICAgIC8vCisgICAgLy8gQnkgZGVmYXVsdCBzeW5jaHJvbm91
cyBkZWNvZGluZyBpcyB1c2VkLgorICAgIC8vCisgICAgLy8gSWYgZmFsc2UgaXMgZ2l2ZW4gdG8g
dGhpcyBtZXRob2Qgc3luY2hyb25vdXMgZGVjb2RpbmcgaXMgYWx3YXlzIHVzZWQgYW5kIGNhbm5v
dCBiZSBjaGFuZ2VkIHRvIGFzeW5jaHJvbm91cyBhZ2Fpbi4KKyAgICB2b2lkIHNldFVzZUFzeW5j
aHJvbm91c0RlY29kaW5nKGJvb2wpOworICAgIGJvb2wgdXNlQXN5bmNocm9ub3VzRGVjb2Rpbmco
KSBjb25zdDsKKwogICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKTsKICAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCk7CiAgICAg
dmlydHVhbCBib29sIGN1cnJlbnRGcmFtZUhhc0FscGhhKCk7CiAKICAgICBJbWFnZU9yaWVudGF0
aW9uIGN1cnJlbnRGcmFtZU9yaWVudGF0aW9uKCk7Ci0gICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFt
ZU9yaWVudGF0aW9uQXRJbmRleChzaXplX3QpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAg
IHZpcnR1YWwgYm9vbCBub3RTb2xpZENvbG9yKCk7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgdm9p
ZCBkaWREZWNvZGVGcmFtZUF0SW5kZXgoc2l6ZV90KTsKKwogcHJpdmF0ZToKICAgICB2b2lkIHVw
ZGF0ZVNpemUoKSBjb25zdDsKIApAQCAtMjEzLDIwICsyMzYsMTUgQEAgcHJvdGVjdGVkOgogICAg
IE5hdGl2ZUltYWdlUHRyIGZyYW1lQXRJbmRleChzaXplX3QpOwogICAgIGJvb2wgZnJhbWVJc0Nv
bXBsZXRlQXRJbmRleChzaXplX3QpOwogICAgIGZsb2F0IGZyYW1lRHVyYXRpb25BdEluZGV4KHNp
emVfdCk7CisgICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChzaXpl
X3QpOworCisgICAgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdDsKIAogICAgIC8vIERlY29k
ZXMgYW5kIGNhY2hlcyBhIGZyYW1lLiBOZXZlciBhY2Nlc3NlZCBleGNlcHQgaW50ZXJuYWxseS4K
ICAgICB2b2lkIGNhY2hlRnJhbWUoc2l6ZV90IGluZGV4KTsKICAgICAvLyBDYWxsZWQgYmVmb3Jl
IGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0uIFJldHVybnMgZmFsc2Ugb24gaW5kZXggb3V0IG9m
IGJvdW5kcy4KICAgICBib29sIGVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4KTsKIAot
ICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRhLiAgV2hlbiB8ZGVzdHJveUFs
bHwgaXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKLSAgICAvLyB0aGUgZW50aXJlIGZyYW1lIGJ1ZmZlciBj
YWNoZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ryb3kKLSAgICAvLyBldmVyeXRo
aW5nOyB0aGlzIGlzIHVzZWQgd2hlbiBlLmcuIHdlIHdhbnQgdG8gZnJlZSBzb21lIHJvb20gaW4g
dGhlIGltYWdlCi0gICAgLy8gY2FjaGUuICBJZiB8ZGVzdHJveUFsbHwgaXMgZmFsc2UsIHdlIG9u
bHkgZGVsZXRlIGZyYW1lcyB1cCB0byB0aGUgY3VycmVudAotICAgIC8vIG9uZTsgdGhpcyBpcyB1
c2VkIHdoaWxlIGFuaW1hdGluZyBsYXJnZSBpbWFnZXMgdG8ga2VlcCBtZW1vcnkgZm9vdHByaW50
Ci0gICAgLy8gbG93IHdpdGhvdXQgcmVkZWNvZGluZyB0aGUgd2hvbGUgaW1hZ2Ugb24gZXZlcnkg
ZnJhbWUuCi0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lB
bGwgPSB0cnVlKTsKLQogICAgIC8vIElmIHRoZSBpbWFnZSBpcyBsYXJnZSBlbm91Z2gsIGNhbGxz
IGRlc3Ryb3lEZWNvZGVkRGF0YSgpIGFuZCBwYXNzZXMKICAgICAvLyB8ZGVzdHJveUFsbHwgYWxv
bmcuCiAgICAgdm9pZCBkZXN0cm95RGVjb2RlZERhdGFJZk5lY2Vzc2FyeShib29sIGRlc3Ryb3lB
bGwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJh
dGVkSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZElt
YWdlLmgKaW5kZXggYmVjMzQzYy4uNjE2MzE4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oCkBAIC00NiwxMCArNDYsNiBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQogCi0gICAgLy8gQXNzdW1lIHRoYXQgZ2VuZXJhdGVkIGNvbnRlbnQgaGFzIG5vIGRlY29kZWQg
ZGF0YSB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNv
ZGVkRGF0YShib29sIC8qZGVzdHJveUFsbCovID0gdHJ1ZSkgeyB9Ci0gICAgdmlydHVhbCB1bnNp
Z25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQogcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3IpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2UuaAppbmRleCBiYTk1M2Y1Li5lMjcwZDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlLmgKQEAgLTEwNiwxMyArMTA2LDkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBnZXRIb3RTcG90KEludFBvaW50JikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IAogICAgIGJvb2wgc2V0RGF0YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgYm9vbCBh
bGxEYXRhUmVjZWl2ZWQpOwotICAgIHZpcnR1YWwgYm9vbCBkYXRhQ2hhbmdlZChib29sIC8qYWxs
RGF0YVJlY2VpdmVkKi8pIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgCiAgICAgdmlydHVhbCBTdHJp
bmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfSAvLyBudWxs
IHN0cmluZyBpZiB1bmtub3duCiAKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRh
KGJvb2wgZGVzdHJveUFsbCA9IHRydWUpID0gMDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29k
ZWRTaXplKCkgY29uc3QgPSAwOwotCiAgICAgU2hhcmVkQnVmZmVyKiBkYXRhKCkgeyByZXR1cm4g
bV9kYXRhLmdldCgpOyB9CiAKICAgICAvLyBBbmltYXRpb24gYmVnaW5zIHdoZW5ldmVyIHNvbWVv
bmUgZHJhd3MgdGhlIGltYWdlLCBzbyBzdGFydEFuaW1hdGlvbigpIGlzIG5vdCBub3JtYWxseSBj
YWxsZWQuCkBAIC0xNzYsNiArMTcyLDcgQEAgcHJvdGVjdGVkOgogI2lmIFBMQVRGT1JNKFdJTikK
ICAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyY2VTaXplKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKSB7IH0KICNlbmRp
ZgorICAgIHZpcnR1YWwgYm9vbCBkYXRhQ2hhbmdlZChib29sIC8qYWxsRGF0YVJlY2VpdmVkKi8p
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSk7CiAgICAgdm9p
ZCBkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBj
b25zdCBGbG9hdFBvaW50JiBzcmNQb2ludCwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAppbmRleCA3NWVkNWEx
Li5lMDA5YTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuY3BwCkBAIC00NCw2ICs0NCwxOSBAQCBJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2Uo
SW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbQog
ICAgIDogbV9kZWNvZGVyKDApCiAgICAgLCBtX2FscGhhT3B0aW9uKGFscGhhT3B0aW9uKQogICAg
ICwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbihnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
bikKKyAgICAsIG1fdXNlQXN5bmNocm9ub3VzRGVjb2RpbmcoZmFsc2UpCisgICAgLCBtX25ldmVy
VXNlQXN5bmNocm9ub3VzRGVjb2RpbmcoZmFsc2UpCisgICAgLCBtX29ic2VydmVyKDApCit7Cit9
CisKK0ltYWdlU291cmNlOjpJbWFnZVNvdXJjZShJbWFnZVNvdXJjZU9ic2VydmVyKiBvYnNlcnZl
ciwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2Ft
bWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCisgICAg
OiBtX2RlY29kZXIoMCkKKyAgICAsIG1fYWxwaGFPcHRpb24oYWxwaGFPcHRpb24pCisgICAgLCBt
X2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQor
ICAgICwgbV91c2VBc3luY2hyb25vdXNEZWNvZGluZyhmYWxzZSkKKyAgICAsIG1fbmV2ZXJVc2VB
c3luY2hyb25vdXNEZWNvZGluZyhmYWxzZSkKKyAgICAsIG1fb2JzZXJ2ZXIob2JzZXJ2ZXIpCiB7
CiB9CiAKQEAgLTEzOSw2ICsxNTIsNyBAQCBzaXplX3QgSW1hZ2VTb3VyY2U6OmZyYW1lQ291bnQo
KSBjb25zdAogCiBOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4
KHNpemVfdCBpbmRleCkKIHsKKyAgICAvLyBUT0RPOiBJbXBsZW1lbnQgYXN5bmNocm9ub3VzIGRl
Y29kaW5nIGlmIHVzZUFzeW5jaHJvbm91c0RlY29kaW5nKCkgaXMgc2V0IHRvIHRydWUuCiAgICAg
aWYgKCFtX2RlY29kZXIpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xNjEsMTUgKzE3NSwxMSBA
QCBmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQog
ICAgIGlmICghbV9kZWNvZGVyKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEltYWdlRnJhbWUq
IGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKLSAgICBpZiAo
IWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCi0g
ICAgICAgIHJldHVybiAwOwotCiAgICAgLy8gTWFueSBhbm5veWluZyBhZHMgc3BlY2lmeSBhIDAg
ZHVyYXRpb24gdG8gbWFrZSBhbiBpbWFnZSBmbGFzaCBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLgog
ICAgIC8vIFdlIGZvbGxvdyBGaXJlZm94J3MgYmVoYXZpb3IgYW5kIHVzZSBhIGR1cmF0aW9uIG9m
IDEwMCBtcyBmb3IgYW55IGZyYW1lcyB0aGF0IHNwZWNpZnkKICAgICAvLyBhIGR1cmF0aW9uIG9m
IDw9IDEwIG1zLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzc2ODkzMDA+IGFuZCA8aHR0cDovL3dlYmtp
dC5vcmcvYi8zNjA4Mj4KICAgICAvLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICBjb25zdCBm
bG9hdCBkdXJhdGlvbiA9IGJ1ZmZlci0+ZHVyYXRpb24oKSAvIDEwMDAuMGY7CisgICAgY29uc3Qg
ZmxvYXQgZHVyYXRpb24gPSBtX2RlY29kZXItPmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KSAv
IDEwMDAuMGY7CiAgICAgaWYgKGR1cmF0aW9uIDwgMC4wMTFmKQogICAgICAgICByZXR1cm4gMC4x
MDBmOwogICAgIHJldHVybiBkdXJhdGlvbjsKQEAgLTE5MSwxNiArMjAxLDE0IEBAIGJvb2wgSW1h
Z2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKICAgICAvLyBUT0RP
OiBQZXJoYXBzIHdlIHNob3VsZCBlbnN1cmUgdGhhdCBlYWNoIGluZGl2aWR1YWwgZGVjb2RlciBy
ZXR1cm5zIHRydWUKICAgICAvLyBpbiB0aGlzIGNhc2UuCiAgICAgcmV0dXJuICFmcmFtZUlzQ29t
cGxldGVBdEluZGV4KGluZGV4KQotICAgICAgICB8fCBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJ
bmRleChpbmRleCktPmhhc0FscGhhKCk7CisgICAgICAgIHx8IG1fZGVjb2Rlci0+ZnJhbWVIYXNB
bHBoYUF0SW5kZXgoaW5kZXgpOwogfQogCiBib29sIEltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxl
dGVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoIW1fZGVjb2RlcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFt
ZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwotICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5zdGF0
dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlOworICAgIHJldHVybiBtX2RlY29kZXIt
PmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAppbmRleCA5MTNhM2U3Li5hN2M3OWEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgK
QEAgLTU4LDYgKzU4LDcgQEAgY2xhc3MgTmF0aXZlSW1hZ2VTa2lhOwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBJbWFnZU9yaWVudGF0aW9uOworY2xhc3MgSW1hZ2VTb3VyY2VPYnNlcnZl
cjsKIGNsYXNzIEludFBvaW50OwogY2xhc3MgSW50U2l6ZTsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsK
QEAgLTEzMyw2ICsxMzQsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIEltYWdlU291cmNlKEFs
cGhhT3B0aW9uIGFscGhhT3B0aW9uID0gQWxwaGFQcmVtdWx0aXBsaWVkLCBHYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiA9IEdhbW1hQW5kQ29sb3JQ
cm9maWxlQXBwbGllZCk7CisgICAgSW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2VPYnNlcnZlciosIEFs
cGhhT3B0aW9uIGFscGhhT3B0aW9uID0gQWxwaGFQcmVtdWx0aXBsaWVkLCBHYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiA9IEdhbW1hQW5kQ29sb3JQ
cm9maWxlQXBwbGllZCk7CiAgICAgfkltYWdlU291cmNlKCk7CiAKICAgICAvLyBUZWxscyB0aGUg
SW1hZ2VTb3VyY2UgdGhhdCB0aGUgSW1hZ2Ugbm8gbG9uZ2VyIGNhcmVzIGFib3V0IGRlY29kZWQg
ZnJhbWUKQEAgLTE3OCw2ICsxODAsMTQgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IGZyYW1lQ291
bnQoKSBjb25zdDsKIAorICAgIHZvaWQgc2V0VXNlQXN5bmNocm9ub3VzRGVjb2RpbmcoYm9vbCB1
c2VBc3luY2hyb25vdXNEZWNvZGluZykKKyAgICB7CisgICAgICAgIGlmICghbV9uZXZlclVzZUFz
eW5jaHJvbm91c0RlY29kaW5nICYmIG1fb2JzZXJ2ZXIpCisgICAgICAgICAgICBtX3VzZUFzeW5j
aHJvbm91c0RlY29kaW5nID0gdXNlQXN5bmNocm9ub3VzRGVjb2Rpbmc7CisgICAgICAgIG1fbmV2
ZXJVc2VBc3luY2hyb25vdXNEZWNvZGluZyA9ICF1c2VBc3luY2hyb25vdXNEZWNvZGluZzsKKyAg
ICB9CisgICAgYm9vbCB1c2VBc3luY2hyb25vdXNEZWNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlQXN5bmNocm9ub3VzRGVjb2Rpbmc7IH0KKwogICAgIC8vIENhbGxlcnMgc2hvdWxkIG5vdCBj
YWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyBjbGVhcigpIHdpdGggYSBoaWdoZXIgaW5kZXg7CiAgICAg
Ly8gc2VlIGNvbW1lbnRzIG9uIGNsZWFyKCkgYWJvdmUuCiAgICAgTmF0aXZlSW1hZ2VQdHIgY3Jl
YXRlRnJhbWVBdEluZGV4KHNpemVfdCk7CkBAIC0xOTksNiArMjA5LDkgQEAgcHJpdmF0ZToKICNp
ZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgIHN0YXRpYyB1bnNpZ25l
ZCBzX21heFBpeGVsc1BlckRlY29kZWRJbWFnZTsKICNlbmRpZgorICAgIGJvb2wgbV91c2VBc3lu
Y2hyb25vdXNEZWNvZGluZyA6IDE7CisgICAgYm9vbCBtX25ldmVyVXNlQXN5bmNocm9ub3VzRGVj
b2RpbmcgOiAxOworICAgIEltYWdlU291cmNlT2JzZXJ2ZXIqIG1fb2JzZXJ2ZXI7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNv
dXJjZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291
cmNlQ0cuY3BwCmluZGV4IDdjZjAyOTYuLmJhMjhhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCkBAIC03NSw2ICs3
NSwyMCBAQCBJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9u
IGFscGhhT3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbQogICAgIC8vIEZJWE1FOiBtX3ByZW11bHRp
cGx5QWxwaGEgaXMgaWdub3JlZCBpbiBjZyBhdCB0aGUgbW9tZW50LgogICAgICwgbV9hbHBoYU9w
dGlvbihhbHBoYU9wdGlvbikKICAgICAsIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24oZ2Ft
bWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCisgICAgLCBtX3VzZUFzeW5jaHJvbm91c0RlY29kaW5n
KGZhbHNlKQorICAgICwgbV9uZXZlclVzZUFzeW5jaHJvbm91c0RlY29kaW5nKHRydWUpCisgICAg
LCBtX29ic2VydmVyKDApCit7Cit9CisKK0ltYWdlU291cmNlOjpJbWFnZVNvdXJjZShJbWFnZVNv
dXJjZU9ic2VydmVyKiBvYnNlcnZlciwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0
aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xv
clByb2ZpbGVPcHRpb24pCisgICAgOiBtX2RlY29kZXIoMCkKKyAgICAvLyBGSVhNRTogbV9wcmVt
dWx0aXBseUFscGhhIGlzIGlnbm9yZWQgaW4gY2cgYXQgdGhlIG1vbWVudC4KKyAgICAsIG1fYWxw
aGFPcHRpb24oYWxwaGFPcHRpb24pCisgICAgLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
KGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQorICAgICwgbV91c2VBc3luY2hyb25vdXNEZWNv
ZGluZyhmYWxzZSkKKyAgICAsIG1fbmV2ZXJVc2VBc3luY2hyb25vdXNEZWNvZGluZyh0cnVlKQor
ICAgICwgbV9vYnNlcnZlcihvYnNlcnZlcikKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCmluZGV4IDRhMjhl
MzcuLmRjM2Q3NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BERkRvY3VtZW50SW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKQEAgLTU0LDExICs1NCw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpOwogCi0gICAgICAgIC8vIEZJWE1FOiBQREYgSW1hZ2VzIGFyZSB1bmRlcnJlcG9y
dGluZyBkZWNvZGVkIHNpemVzIGFuZCB3aWxsIGJlIHVuYWJsZQotICAgICAgICAvLyB0byBwcnVu
ZSBiZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IGltcGxlbWVudGVkIHlldC4KLSAgICAg
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIC8qZGVzdHJveUFsbCovID0g
dHJ1ZSkgeyB9Ci0gICAgICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7
IHJldHVybiAwOyB9Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVJbnRyaW5zaWNEaW1l
bnNpb25zKExlbmd0aCYgaW50cmluc2ljV2lkdGgsIExlbmd0aCYgaW50cmluc2ljSGVpZ2h0LCBG
bG9hdFNpemUmIGludHJpbnNpY1JhdGlvKTsKICAgICAgICAgdmlydHVhbCBJbnRTaXplIHNpemUo
KSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvU3RpbGxJbWFnZVF0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9T
dGlsbEltYWdlUXQuaAppbmRleCA4YzllYzBkLi45ZjNjOWUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuaApAQCAtNDYsMTEgKzQ2
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50
RnJhbWVIYXNBbHBoYSgpOwogCi0gICAgICAgIC8vIEZJWE1FOiBTdGlsbEltYWdlcyBhcmUgdW5k
ZXJyZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBhbmQgd2lsbCBiZSB1bmFibGUKLSAgICAgICAgLy8g
dG8gcHJ1bmUgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQu
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxs
ID0gdHJ1ZSkgeyBRX1VOVVNFRChkZXN0cm95QWxsKTsgfQotICAgICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQotCiAgICAgICAgIHZpcnR1YWwg
SW50U2l6ZSBzaXplKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRyYXcoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1h
cEltYWdlU2luZ2xlRnJhbWVTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuY3BwCmluZGV4IDI4ZWFkOGYuLjRk
ZTRkZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuY3BwCkBAIC00LDEx
ICs0LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEJpdG1hcEltYWdlU2luZ2xl
RnJhbWVTa2lhOjppc0JpdG1hcEltYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQogYm9vbCBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3VycmVudEZyYW1lSGFzQWxwaGEo
KQogewogICAgIHJldHVybiAhbV9uYXRpdmVJbWFnZS5iaXRtYXAoKS5pc09wYXF1ZSgpOwpAQCAt
MTksMTcgKzE0LDYgQEAgSW50U2l6ZSBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6c2l6ZSgp
IGNvbnN0CiAgICAgcmV0dXJuIEludFNpemUobV9uYXRpdmVJbWFnZS5iaXRtYXAoKS53aWR0aCgp
LCBtX25hdGl2ZUltYWdlLmJpdG1hcCgpLmhlaWdodCgpKTsKIH0KIAotLy8gRG8gbm90aGluZywg
YXMgd2Ugb25seSBoYXZlIHRoZSBvbmUgcmVwcmVzZW50YXRpb24gb2YgZGF0YSAoZGVjb2RlZCku
Ci12b2lkIEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpkZXN0cm95RGVjb2RlZERhdGEoYm9v
bCBkZXN0cm95QWxsKQotewotCi19Ci0KLXVuc2lnbmVkIEJpdG1hcEltYWdlU2luZ2xlRnJhbWVT
a2lhOjpkZWNvZGVkU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbmF0aXZlSW1hZ2UuZGVj
b2RlZFNpemUoKTsKLX0KLQogLy8gV2Ugb25seSBoYXZlIGEgc2luZ2xlIGZyYW1lLgogTmF0aXZl
SW1hZ2VQdHIgQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6Om5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCkKIHsKQEAgLTQ0LDQgKzI4LDMgQEAgYm9vbCBCaXRtYXBJbWFnZVNpbmdsZUZyYW1l
U2tpYTo6bm90U29saWRDb2xvcigpCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1h
cEltYWdlU2luZ2xlRnJhbWVTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0JpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgKaW5kZXggZjBkMTE5Mi4uYmQ3NDYw
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRt
YXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaApAQCAtNTEsMTcgKzUxLDEw
IEBAIHB1YmxpYzoKICAgICAvLyByZWYnZWQpLgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1h
cEltYWdlU2luZ2xlRnJhbWVTa2lhPiBjcmVhdGUoY29uc3QgU2tCaXRtYXAmLCBib29sIGNvcHlQ
aXhlbHMsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEpOwogCi0gICAgdmlydHVhbCBib29sIGlz
Qml0bWFwSW1hZ2UoKSBjb25zdDsKLQogICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50RnJhbWVIYXNB
bHBoYSgpOwogCiAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdDsKIAotICAgIC8vIERv
IG5vdGhpbmcsIGFzIHdlIG9ubHkgaGF2ZSB0aGUgb25lIHJlcHJlc2VudGF0aW9uIG9mIGRhdGEg
KGRlY29kZWQpLgotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0
cm95QWxsID0gdHJ1ZSk7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29u
c3Q7Ci0KICAgICAvLyBXZSBvbmx5IGhhdmUgYSBzaW5nbGUgZnJhbWUuCiAgICAgdmlydHVhbCBO
YXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNF
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVy
V2luQ0UuY3BwCmluZGV4IDU3MjA3MDUuLjZkMTk0ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3Bw
CkBAIC0zOSw4ICszOSw2IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2aXJ0dWFsIEludFNpemUg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUobV9kYXRhLT5tX2JpdG1hcC0+d2lkdGgoKSwg
bV9kYXRhLT5tX2JpdG1hcC0+aGVpZ2h0KCkpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lE
ZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwgPSB0cnVlKSB7fQotICAgIHZpcnR1YWwgdW5zaWdu
ZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB2b2lkIGRy
YXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVy
YXRvcik7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCmluZGV4IDcyYjVkZGMuLjkzM2Y0
NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvSW1hZ2VEZWNvZGVyLmNwcApAQCAtMjc3LDYgKzI3NywyOCBAQCB0ZW1wbGF0ZSA8TWF0Y2hU
eXBlIHR5cGU+IGludCBnZXRTY2FsZWRWYWx1ZShjb25zdCBWZWN0b3I8aW50PiYgc2NhbGVkVmFs
dWVzLCBpbgogCiB9CiAKK2Zsb2F0IEltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgo
c2l6ZV90IGluZGV4KQoreworICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9IGZyYW1lQnVmZmVyQXRJ
bmRleChpbmRleCk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBJbWFn
ZUZyYW1lOjpGcmFtZUVtcHR5KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYnVmZmVy
LT5kdXJhdGlvbigpOworfQorCitib29sIEltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5k
ZXgoc2l6ZV90IGluZGV4KQoreworICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9IGZyYW1lQnVmZmVy
QXRJbmRleChpbmRleCk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBJ
bWFnZUZyYW1lOjpGcmFtZUVtcHR5KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYnVm
ZmVyLT5oYXNBbHBoYSgpOworfQorCitib29sIEltYWdlRGVjb2Rlcjo6ZnJhbWVJc0NvbXBsZXRl
QXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gZnJhbWVC
dWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICByZXR1cm4gYnVmZmVyICYmIGJ1ZmZlci0+c3RhdHVz
KCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZTsKK30KKwogdm9pZCBJbWFnZURlY29kZXI6
OnByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSgpCiB7CiAgICAgbV9zY2FsZWQgPSBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmgKaW5kZXggOTExODc4ZS4uM2UwZWU0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKQEAgLTI3NSw2ICsy
NzUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIERlY29kZXMgYXMgbXVjaCBv
ZiB0aGUgcmVxdWVzdGVkIGZyYW1lIGFzIHBvc3NpYmxlLCBhbmQgcmV0dXJucyBhbgogICAgICAg
ICAvLyBJbWFnZURlY29kZXItb3duZWQgcG9pbnRlci4KICAgICAgICAgdmlydHVhbCBJbWFnZUZy
YW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90KSA9IDA7CisgICAgICAgIHZpcnR1YWwgZmxv
YXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KTsKKyAgICAgICAgdmlydHVhbCBib29sIGZy
YW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBmcmFtZUlz
Q29tcGxldGVBdEluZGV4KHNpemVfdCk7CiAKICAgICAgICAgdm9pZCBzZXRJZ25vcmVHYW1tYUFu
ZENvbG9yUHJvZmlsZShib29sIGZsYWcpIHsgbV9pZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSA9
IGZsYWc7IH0KICAgICAgICAgYm9vbCBpZ25vcmVzR2FtbWFBbmRDb2xvclByb2ZpbGUoKSBjb25z
dCB7IHJldHVybiBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdJbWFnZS5oCmluZGV4IGU2M2Q2NDEuLjExYjkxZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCkBAIC03NCwxMSArNzQsNiBAQCBwcml2YXRlOgog
CiAgICAgdmlydHVhbCBib29sIGRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKIAot
ICAgIC8vIEZJWE1FOiBTVkdJbWFnZXMgYXJlIHVuZGVycmVwb3J0aW5nIGRlY29kZWQgc2l6ZXMg
YW5kIHdpbGwgYmUgdW5hYmxlCi0gICAgLy8gdG8gcHJ1bmUgYmVjYXVzZSB0aGVzZSBmdW5jdGlv
bnMgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCi0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNv
ZGVkRGF0YShib29sKSB7IH0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29u
c3QgeyByZXR1cm4gMDsgfQotCiAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBmcmFtZUF0SW5k
ZXgoc2l6ZV90KSB7IHJldHVybiAwOyB9CiAKICAgICBTVkdJbWFnZShJbWFnZU9ic2VydmVyKik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwppbmRleCA1OWUxZjQ2Li5lYTA3NmMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wNy0yMCAg
Q3J5c3RhbCBaaGFuZyAgPGhhaXpoYW5nQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNrQmVycnld
IEFkZCBDYW5jZWwgYnV0dG9uIGZvciBTZWxlY3QgcG9wdXAKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
WW9uZyBMaS4KKworICAgICAgICBQUiAxNzc3MDYKKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1NlbGVjdFBvcHVwQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdFBvcHVwQ2xp
ZW50OjpnZW5lcmF0ZUhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0UG9wdXBDbGllbnQ6
OnNldFZhbHVlQW5kQ2xvc2VQb3B1cCk6CisKIDIwMTItMDctMTkgIE1hcnkgV3UgIDxtYXJ5Lnd1
QHRvcmNobW9iaWxlLmNvbS5jbj4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gTWFrZSBzdXJlIHRv
IHNlbmQgZmF2aWNvbiB3aGVuIGdvIGJhY2svZm9yd2FyZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1NlbGVjdFBvcHVwQ2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9TZWxlY3RQb3B1cENsaWVudC5j
cHAKaW5kZXggZjA2OGYxZi4uYWIzNjJjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L1dlYkNvcmVTdXBwb3J0L1NlbGVjdFBvcHVwQ2xpZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvU2VsZWN0UG9wdXBDbGllbnQuY3BwCkBA
IC0xMTUsNiArMTE1LDcgQEAgdm9pZCBTZWxlY3RQb3B1cENsaWVudDo6Z2VuZXJhdGVIVE1MKGJv
b2wgbXVsdGlwbGUsIGludCBzaXplLCBjb25zdCBTY29wZUFycmF5PEIKICAgICAgICAgICAgIHNv
dXJjZS5hcHBlbmQoIiwgIik7CiAgICAgfQogICAgIHNvdXJjZS5hcHBlbmQoIl0gIik7CisgICAg
c291cmNlLmFwcGVuZCgiLCAnQ2FuY2VsJyIpOwogICAgIC8vIElmIG11bHRpLXNlbGVjdCwgYWRk
IE9LIGJ1dHRvbiBmb3IgY29uZmlybS4KICAgICBpZiAobV9tdWx0aXBsZSkKICAgICAgICAgc291
cmNlLmFwcGVuZCgiLCAnT0snIik7CkBAIC0xNDUsNyArMTQ2LDEyIEBAIFN0cmluZyBTZWxlY3RQ
b3B1cENsaWVudDo6aHRtbFNvdXJjZSgpCiB2b2lkIFNlbGVjdFBvcHVwQ2xpZW50OjpzZXRWYWx1
ZUFuZENsb3NlUG9wdXAoaW50LCBjb25zdCBTdHJpbmcmIHN0cmluZ1ZhbHVlKQogewogICAgIEFT
U0VSVChtX2VsZW1lbnQpOwotICAgIEFTU0VSVChtX3NpemUgPT0gc3RyaW5nVmFsdWUubGVuZ3Ro
KCkpOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNhbmNlbFZhbHVlID0gIi0xIjsKKyAgICBp
ZiAoc3RyaW5nVmFsdWUgPT0gY2FuY2VsVmFsdWUpIHsKKyAgICAgICAgY2xvc2VQb3B1cCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgaWYgKG1fc2l6ZSA+IDApIHsKICAgICAgICAg
Ym9vbCBzZWxlY3RlZHNbbV9zaXplXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOGE1
NWZhMy4uYmZjMDE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBA
QAorMjAxMi0wNy0yNSAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJlbW92ZSBkZXN0cm95RGVjb2RlZERhdGEoKSBhbmQgZGVjb2RlZFNpemUoKSBmcm9tIEltYWdl
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAzNzUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBkZWNvZGVk
U2l6ZSgpIGFuZCBkZXN0cm95RGVjb2RlZERhdGEoKSBhcmUgcmVtb3ZlZCBmcm9tIEltYWdlIHNv
IHRoZXJlCisgICAgICAgIGlzIG5vIG5lZWRlZCB0byBpbXBsZW1lbnQgdGhlc2UgbWV0aG9kcyBm
b3IgdGVzdGluZy4KKworICAgICAgICAqIHRlc3RzL0RyYWdJbWFnZVRlc3QuY3BwOgorICAgICAg
ICAqIHRlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorCiAyMDEyLTA3LTIwICBEYW5p
ZWwgTXVycGh5ICA8ZG11cnBoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbnRyb2R1Y2UgV2Vi
Vmlld0JlbmNobWFya1N1cHBvcnQgZm9yIHBlcmZvcm1hbmNlIGV4cGVyaW1lbnRzIG9uIGEgcmVh
bCBXZWJWaWV3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RyYWdJ
bWFnZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EcmFnSW1hZ2VUZXN0
LmNwcAppbmRleCBmNzVlODVjLi42MGY4YmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAKQEAgLTcyLDE2ICs3Miw2IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fbmF0aXZlSW1hZ2UuZ2V0KCk7CiAgICAgfQogCi0gICAgLy8gU3R1YiBp
bXBsZW1lbnRhdGlvbnMgb2YgcHVyZSB2aXJ0dWFsIEltYWdlIGZ1bmN0aW9ucy4KLSAgICB2aXJ0
dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wpCi0gICAgewotICAgIH0KLQotICAgIHZp
cnR1YWwgdW5zaWduZWQgaW50IGRlY29kZWRTaXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAwdTsKLSAgICB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkNvbG9yU3BhY2UsCiAgICAg
ICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNw
cAppbmRleCBhNWNhNTUxLi5jOTdkMzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTg4LDE2ICs4OCw2
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbmF0aXZlSW1hZ2UuZ2V0KCk7CiAgICAgfQog
Ci0gICAgLy8gU3R1YiBpbXBsZW1lbnRhdGlvbnMgb2YgcHVyZSB2aXJ0dWFsIEltYWdlIGZ1bmN0
aW9ucy4KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wpCi0gICAgewot
ICAgIH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGRlY29kZWRTaXplKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAwdTsKLSAgICB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLAogICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkNv
bG9yU3BhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0
b3IpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>155898</attachid>
            <date>2012-08-01 15:12:47 -0700</date>
            <delta_ts>2012-08-01 15:13:36 -0700</delta_ts>
            <desc>Remove Image::currentFrameHasAlpha()</desc>
            <filename>webkit-remove-currentFrameHasAlpha.patch</filename>
            <type>application/octet-stream</type>
            <size>17682</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyYTg5YzA4Li4xMTlhZTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjkg
QEAKKzIwMTItMDctMzEgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZW1vdmUgSW1hZ2U6OmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgYW5kIHVzYWdlIG9mIHRoaXMg
bWV0aG9kLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTAzNzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bWFnZTo6Y3VycmVudEZyYW1lSGFzQWxwaGEoKSBpcyByZW1vdmVkIGFuZCB1c2VyIHNob3VsZCBh
Y2NlcyB0aGlzCisgICAgICAgIG1ldGhvZCBkaXJlY3RseSBmcm9tIEJpdG1hcEltYWdlOjpjdXJy
ZW50RnJhbWVIYXNBbHBoYSgpLCB0aGlzIG1ldGhvZAorICAgICAgICBpcyBtYWRlIGF2YWlsYWJs
ZSBvbmx5IHRvIENHIHBvcnQuCisKKyAgICAgICAgSW1hZ2U6OmN1cnJlbnRGcmFtZUhhc0FscGhh
KCkgaXMgdXNlZCBmb3IgdHdvIHJlYXNvbnM6CisgICAgICAgICgxKSBDaGVjayBhbHBoYSBzdGF0
ZSB3aGVuIHVwbG9hZGluZyBpbWFnZSBjb250ZW50IHRvIHRleHR1cmUgZm9yCisgICAgICAgICAg
ICBvcHRpbWl6YXRpb24KKyAgICAgICAgKDIpIFRvIG9wdGltaXplIGJveCBzaGFkb3cgcGFpbnRp
bmcgZm9yIHRoZSBiYWNrZ3JvdW5kIG9mIGFuIG9wYXF1ZQorICAgICAgICAgICAgaW1hZ2UKKwor
ICAgICAgICBGb3IgY2FzZSAoMSkgdGhpcyBtZXRob2QgaXMgbm90IG5lY2Vzc2FyeSBzaW5jZSB0
aGUgdGV4dHVyZSB1cGxvYWQKKyAgICAgICAgcmVxdWlyZXMgZ2V0dGluZyBhIGZyYW1lIGFuZCB0
aGlzIGZyYW1lIGFscmVhZHkgaGFzIGluZm9ybWF0aW9uIGZvcgorICAgICAgICBvcGFjaXR5LiBU
aGlzIHBhdGNoIHJlbW92ZXMgdGhlIHVzYWdlIG9mIGN1cnJlbnRGcmFtZUhhc0FscGhhKCkgYnkK
KyAgICAgICAgZ2V0dGluZyBvcGFjaXR5IGZyb20gdGhlIHBsYXRmb3JtIGltYWdlLgorCisgICAg
ICAgIEZvciBjYXNlICgyKSB0aGUgb3B0aW1pemF0aW9uIGlzIGZvciBhIHZlcnkgc3BlY2lmaWMg
dXNlIGNhc2Ugb2YKKyAgICAgICAgZHJhd2luZyBib3ggc2hhZG93IHVuZGVyIGFuIG9wYXF1ZSBp
bWFnZS4gU3VjaCB1c2FnZSBibG9ja3MgdGhlIGdvYWwgb2YKKyAgICAgICAgaGF2aW5nIGFzeW5j
aHJvbm91cyBpbWFnZSBkZWNvZGluZyBhbmQgdGhlcmUgaXMgcG9zc2libGUgYmV0dGVyCisgICAg
ICAgIHNvbHV0aW9uIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLiBTdWNoIG9wdGltaXphdGlv
biBpcyBwb3N0cG9uZWQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgaXMgY292ZXJl
ZCBieSBleGlzdGluZyBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgVGVzdGVkIHRoaXMgcGF0Y2gg
d2l0aCBmYXN0L2JveC1zaGFkb3cvaW1hZ2UtYm94LXNoYWRvdy5odG1sIG9uCisgICAgICAgIENo
cm9taXVtIHdpdGggbm8gZXJyb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgY3VycmVudEZyYW1lSGFz
QWxwaGEoKSBvbmx5IGV4aXN0cyBvbmx5IENHIHBvcnQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKEJpdG1hcEltYWdlKToKKyAgICAgICAgTWFr
ZSBjdXJyZW50RnJhbWVIYXNBbHBoYSgpIG5vbiB2aXJ0dWFsIGFuZCBkZWZpbmVkIG9ubHkgb24g
Q0cgcG9ydC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICBS
ZW1vdmUgY3VycmVudEZyYW1lSGFzQWxwaGEoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
cjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQpOgorICAgICAgICBEb24ndCB1c2UgY3Vy
cmVudEZyYW1lSGFzQWxwaGEoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICBEb24ndCB1c2UgY3Vy
cmVudEZyYW1lSGFzQWxwaGEoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGls
bEltYWdlUXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VR
dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVG
cmFtZVNraWEuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1h
Z2VTaW5nbGVGcmFtZVNraWEuaDoKKyAgICAgICAgUmVtb3ZlIGltcGxlbWVudGF0aW9uIG9mIGN1
cnJlbnRGcmFtZUhhc0FscGhhKCkuCisgICAgICAgIChCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tp
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclRpbGU6OnVwZGF0
ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdT
dG9yZTo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICBBc3N1bWUgdGhlIGltYWdlIGhhcyBhbHBo
YS4gQWRkZWQgRklYTUUgdG8gZ2V0IHRoZSBhY3R1YWwgc3RhdGUuCisgICAgICAgIFRoZSByaWdo
dCB3YXkgaXMgdG8gZ2V0IHRoZSBuYXRpdmUgaW1hZ2UgYnkgY2FsbGluZworICAgICAgICBJbWFn
ZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBjaGVjayB0aGUgc3RhdGUgb2YgdGhlIG5h
dGl2ZQorICAgICAgICBpbWFnZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6YmFj
a2dyb3VuZElzT2JzY3VyZWQpOgorICAgICAgICBPbmx5IHVzZSBjdXJyZW50RnJhbWVIYXNBbHBo
YSgpIG9uIENHIHBvcnQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmg6CisgICAg
ICAgIChSZW5kZXJJbWFnZSk6CisKIDIwMTItMDctMjYgIEFscGhhIExhbSAgPGhjbGFtQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBBZGQgSW1hZ2VTb3VyY2VPYnNlcnZlciB0byBJbWFnZVNvdXJj
ZSBhbmQgaW1wbGVtZW50cyBieSBCaXRtYXBJbWFnZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCBjNzMzZDk3Li43MjJhZTg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
CkBAIC0zMzksMTAgKzMzOSwxMiBAQCBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJ
bmRleChzaXplX3QgaW5kZXgpCiAgICAgcmV0dXJuIG1fc291cmNlLmZyYW1lSGFzQWxwaGFBdElu
ZGV4KGluZGV4KTsKIH0KIAorI2lmIFVTRShDRykKIGJvb2wgQml0bWFwSW1hZ2U6OmN1cnJlbnRG
cmFtZUhhc0FscGhhKCkKIHsKICAgICByZXR1cm4gZnJhbWVIYXNBbHBoYUF0SW5kZXgoY3VycmVu
dEZyYW1lKCkpOwogfQorI2VuZGlmCiAKIEltYWdlT3JpZW50YXRpb24gQml0bWFwSW1hZ2U6OmN1
cnJlbnRGcmFtZU9yaWVudGF0aW9uKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IDRkM2YyNzEuLmRlZjkzNGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtMTkyLDcgKzE5
Miw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKICAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCk7
Ci0gICAgdmlydHVhbCBib29sIGN1cnJlbnRGcmFtZUhhc0FscGhhKCk7CisjaWYgVVNFKENHKQor
ICAgIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEoKTsKKyNlbmRpZgogCiAgICAgSW1hZ2VPcmll
bnRhdGlvbiBjdXJyZW50RnJhbWVPcmllbnRhdGlvbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2UuaAppbmRleCBlMjcwZDI3Li41ZjVmYzVlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKQEAgLTg0LDcgKzg0LDYgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBib29sIGlzU1ZHSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc0JpdG1hcEltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEoKSB7IHJldHVybiBmYWxzZTsg
fQogCiAgICAgLy8gRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIGlmIHRoZXkg
Y2FuIGFzc3VyZSB0aGF0IAogICAgIC8vIHRoZSBpbWFnZSBjb250YWlucyBvbmx5IHJlc291cmNl
cyBmcm9tIGl0cyBvd24gc2VjdXJpdHkgb3JpZ2luLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5jcHAKaW5kZXgg
ZGI2ZTc1Yy4uMmI0OGZmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3BwCkBAIC0xNzgsMTIgKzE3OCw5
IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoZG91Ymxl
IHNjYWxlKQogICAgICAgICBjbGVhclRleHR1cmVKb2JzKCk7CiAgICAgfSBlbHNlIGlmICghcmVu
ZGVySm9icy5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKEltYWdlKiBpbWFnZSA9IG1fbGF5ZXIt
PmNvbnRlbnRzKCkpIHsKLSAgICAgICAgICAgIGJvb2wgaXNPcGFxdWUgPSBmYWxzZTsKLSAgICAg
ICAgICAgIGlmIChpbWFnZS0+aXNCaXRtYXBJbWFnZSgpKQotICAgICAgICAgICAgICAgIGlzT3Bh
cXVlID0gIXN0YXRpY19jYXN0PEJpdG1hcEltYWdlKj4oaW1hZ2UpLT5jdXJyZW50RnJhbWVIYXNB
bHBoYSgpOwogICAgICAgICAgICAgaWYgKE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlID0gaW1h
Z2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICBTa0Jp
dG1hcCBiaXRtYXAgPSBTa0JpdG1hcChuYXRpdmVJbWFnZS0+Yml0bWFwKCkpOwotICAgICAgICAg
ICAgICAgIGFkZFRleHR1cmVKb2IoVGV4dHVyZUpvYjo6c2V0Q29udGVudHMoYml0bWFwLCBpc09w
YXF1ZSkpOworICAgICAgICAgICAgICAgIGFkZFRleHR1cmVKb2IoVGV4dHVyZUpvYjo6c2V0Q29u
dGVudHMoYml0bWFwLCBiaXRtYXAuaXNPcGFxdWUoKSkpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGhlcmUgbWlnaHQgc3RpbGwgYmUgc29tZSBwZW5k
aW5nIHJlbmRlciBqb2JzIGR1ZSB0byB2aXNpYmlsaXR5IGNoYW5nZXMuCkBAIC0yMzAsMTQgKzIy
NywxMSBAQCB2b2lkIExheWVyVGlsZXI6OnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKGRv
dWJsZSBzY2FsZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKEltYWdlKiBpbWFnZSA9IG1f
bGF5ZXItPmNvbnRlbnRzKCkpIHsKLSAgICAgICAgYm9vbCBpc09wYXF1ZSA9IGZhbHNlOwotICAg
ICAgICBpZiAoaW1hZ2UtPmlzQml0bWFwSW1hZ2UoKSkKLSAgICAgICAgICAgIGlzT3BhcXVlID0g
IXN0YXRpY19jYXN0PEJpdG1hcEltYWdlKj4oaW1hZ2UpLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgp
OwogICAgICAgICAvLyBObyBwb2ludCBpbiB0aWxpbmcgYW4gaW1hZ2UgbGF5ZXIsIHRoZSBpbWFn
ZSBpcyBhbHJlYWR5IHN0b3JlZCBhcyBhbiBTa0JpdG1hcAogICAgICAgICBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZSA9IG1fbGF5ZXItPmNvbnRlbnRzKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCk7CiAgICAgICAgIGlmIChuYXRpdmVJbWFnZSkgewogICAgICAgICAgICAgU2tCaXRt
YXAgYml0bWFwID0gU2tCaXRtYXAobmF0aXZlSW1hZ2UtPmJpdG1hcCgpKTsKLSAgICAgICAgICAg
IGFkZFRleHR1cmVKb2IoVGV4dHVyZUpvYjo6c2V0Q29udGVudHMoYml0bWFwLCBpc09wYXF1ZSkp
OworICAgICAgICAgICAgYWRkVGV4dHVyZUpvYihUZXh0dXJlSm9iOjpzZXRDb250ZW50cyhiaXRt
YXAsIGJpdG1hcC5pc09wYXF1ZSgpKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDFlYjIzN2MuLjQ2
ODIxZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNDY5LDcg
KzQ2OSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvSW1hZ2Uo
SW1hZ2UqIGltYWdlKQogICAgICAgICBXZWJLaXQ6OldlYkltYWdlTGF5ZXIgaW1hZ2VMYXllciA9
IG1fY29udGVudHNMYXllci50bzxXZWJLaXQ6OldlYkltYWdlTGF5ZXI+KCk7CiAgICAgICAgIE5h
dGl2ZUltYWdlU2tpYSogbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKICAgICAgICAgaW1hZ2VMYXllci5zZXRCaXRtYXAobmF0aXZlSW1hZ2UtPmJpdG1h
cCgpKTsKLSAgICAgICAgaW1hZ2VMYXllci5zZXRPcGFxdWUoaW1hZ2UtPmlzQml0bWFwSW1hZ2Uo
KSAmJiAhaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkpOworICAgICAgICBpbWFnZUxheWVy
LnNldE9wYXF1ZShpbWFnZS0+aXNCaXRtYXBJbWFnZSgpICYmIG5hdGl2ZUltYWdlLT5iaXRtYXAo
KS5pc09wYXF1ZSgpKTsKICAgICAgICAgdXBkYXRlQ29udGVudHNSZWN0KCk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuaXNOdWxsKCkpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwCmluZGV4
IDA0MTI1MjAuLjllMTAxZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcApAQCAtNTIsMTEgKzUyLDYgQEAgU3RpbGxJbWFn
ZTo6flN0aWxsSW1hZ2UoKQogICAgICAgICBkZWxldGUgbV9pbWFnZTsKIH0KIAotYm9vbCBTdGls
bEltYWdlOjpjdXJyZW50RnJhbWVIYXNBbHBoYSgpCi17Ci0gICAgcmV0dXJuIG1faW1hZ2UtPmhh
c0FscGhhQ2hhbm5lbCgpOwotfQotCiBJbnRTaXplIFN0aWxsSW1hZ2U6OnNpemUoKSBjb25zdAog
ewogICAgIHJldHVybiBJbnRTaXplKG1faW1hZ2UtPndpZHRoKCksIG1faW1hZ2UtPmhlaWdodCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxs
SW1hZ2VRdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFn
ZVF0LmgKaW5kZXggOWYzYzllMS4uNTg5NDBmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmgKQEAgLTQ0LDggKzQ0LDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdGlsbElt
YWdlKGltYWdlKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZy
YW1lSGFzQWxwaGEoKTsKLQogICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0Owog
ICAgICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2lu
Z2xlRnJhbWVTa2lhLmNwcAppbmRleCA0ZGU0ZGY4Li5iYjc2NDQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2luZ2xlRnJhbWVT
a2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1h
cEltYWdlU2luZ2xlRnJhbWVTa2lhLmNwcApAQCAtNCwxMSArNCw2IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotYm9vbCBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3VycmVudEZyYW1l
SGFzQWxwaGEoKQotewotICAgIHJldHVybiAhbV9uYXRpdmVJbWFnZS5iaXRtYXAoKS5pc09wYXF1
ZSgpOwotfQotCiBJbnRTaXplIEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpzaXplKCkgY29u
c3QKIHsKICAgICByZXR1cm4gSW50U2l6ZShtX25hdGl2ZUltYWdlLmJpdG1hcCgpLndpZHRoKCks
IG1fbmF0aXZlSW1hZ2UuYml0bWFwKCkuaGVpZ2h0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmds
ZUZyYW1lU2tpYS5oCmluZGV4IGJkNzQ2MGIuLjk5N2I2NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdl
U2luZ2xlRnJhbWVTa2lhLmgKQEAgLTUxLDggKzUxLDYgQEAgcHVibGljOgogICAgIC8vIHJlZidl
ZCkuCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE+IGNy
ZWF0ZShjb25zdCBTa0JpdG1hcCYsIGJvb2wgY29weVBpeGVscywgZmxvYXQgcmVzb2x1dGlvblNj
YWxlID0gMSk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEoKTsKLQog
ICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CiAKICAgICAvLyBXZSBvbmx5IGhhdmUg
YSBzaW5nbGUgZnJhbWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAK
aW5kZXggZWZhNjU5Zi4uNDA3ZmRkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2lu
Z1N0b3JlLmNwcApAQCAtODEsNyArODEsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJUaWxlOjp1cGRh
dGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBJbWFnZSogaW1hZwogICAg
IHRhcmdldFJlY3QubW92ZSgtbV9yZWN0LngoKSwgLW1fcmVjdC55KCkpOwogICAgIGlmICghbV90
ZXh0dXJlKSB7CiAgICAgICAgIG1fdGV4dHVyZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1
cmUoKTsKLSAgICAgICAgbV90ZXh0dXJlLT5yZXNldCh0YXJnZXRSZWN0LnNpemUoKSwgaW1hZ2Ut
PmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBCaXRtYXBUZXh0dXJlOjpTdXBwb3J0c0FscGhhIDog
MCk7CisgICAgICAgIC8vIEZJWE1FOiBHZXQgdGhlIG5hdGl2ZSBpbWFnZSBmb3IgY3VycmVudCBm
cmFtZSBhbmQgY2hlY2sgaWYgaXQgaGFzIGFscGhhIGNoYW5uZWwuCisgICAgICAgIG1fdGV4dHVy
ZS0+cmVzZXQodGFyZ2V0UmVjdC5zaXplKCksIEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxwaGEp
OwogICAgIH0KIAogICAgIG1fdGV4dHVyZS0+dXBkYXRlQ29udGVudHMoaW1hZ2UsIHRhcmdldFJl
Y3QsIHNvdXJjZU9mZnNldCk7CkBAIC0xOTksNyArMjAwLDggQEAgdm9pZCBUZXh0dXJlTWFwcGVy
VGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZU9yRGVzdHJveVRpbGVzSWZOZWVkZWQoY29uc3QgRmxv
YXRTaXoKIAogdm9pZCBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZUNvbnRl
bnRzKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEltYWdlKiBpbWFnZSwgY29uc3QgRmxv
YXRTaXplJiB0b3RhbFNpemUsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKLSAgICBjcmVh
dGVPckRlc3Ryb3lUaWxlc0lmTmVlZGVkKHRvdGFsU2l6ZSwgdGV4dHVyZU1hcHBlci0+bWF4VGV4
dHVyZVNpemUoKSwgaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkpOworICAgIC8vIEZJWE1F
OiBHZXQgdGhlIG5hdGl2ZSBpbWFnZSBmb3IgY3VycmVudCBmcmFtZSBhbmQgY2hlY2sgaWYgaXQg
aGFzIGFscGhhIGNoYW5uZWwuCisgICAgY3JlYXRlT3JEZXN0cm95VGlsZXNJZk5lZWRlZCh0b3Rh
bFNpemUsIHRleHR1cmVNYXBwZXItPm1heFRleHR1cmVTaXplKCksIHRydWUpOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV90aWxlcy5zaXplKCk7ICsraSkKICAgICAgICAgbV90aWxlc1tp
XS51cGRhdGVDb250ZW50cyh0ZXh0dXJlTWFwcGVyLCBpbWFnZSwgZGlydHlSZWN0KTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCmluZGV4IDQ4ZWEwNTQuLjkwYjFk
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcApAQCAtNDYxLDYg
KzQ2MSw3IEBAIGJvb2wgUmVuZGVySW1hZ2U6OmJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFj
a2dyb3VuZChCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UKICAgICByZXR1cm4gIWJhY2tncm91bmRJ
c09ic2N1cmVkKCk7CiB9CiAKKyNpZiBVU0UoQ0cpCiBib29sIFJlbmRlckltYWdlOjpiYWNrZ3Jv
dW5kSXNPYnNjdXJlZCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltYWdlUmVzb3VyY2UtPmhhc0lt
YWdlKCkgfHwgbV9pbWFnZVJlc291cmNlLT5lcnJvck9jY3VycmVkKCkpCkBAIC00ODEsMTEgKzQ4
MiwxMiBAQCBib29sIFJlbmRlckltYWdlOjpiYWNrZ3JvdW5kSXNPYnNjdXJlZCgpIGNvbnN0CiAK
ICAgICAvLyBDaGVjayBmb3IgYml0bWFwIGltYWdlIHdpdGggYWxwaGEuCiAgICAgSW1hZ2UqIGlt
YWdlID0gbV9pbWFnZVJlc291cmNlLT5pbWFnZSgpLmdldCgpOwotICAgIGlmICghaW1hZ2UgfHwg
IWltYWdlLT5pc0JpdG1hcEltYWdlKCkgfHwgaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkp
CisgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmlzQml0bWFwSW1hZ2UoKSB8fCBzdGF0aWNfY2Fz
dDxCaXRtYXBJbWFnZSo+KGltYWdlKS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KKyNlbmRpZgogCiBp
bnQgUmVuZGVySW1hZ2U6Om1pbmltdW1SZXBsYWNlZEhlaWdodCgpIGNvbnN0CiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCmluZGV4IDZiZGRiMGEuLmVhMTQxYjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCkBAIC04Nyw3ICs4Nyw5IEBAIHByaXZh
dGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZXBsYWNlZChQYWludEluZm8mLCBjb25zdCBM
YXlvdXRQb2ludCYpOwogCisjaWYgVVNFKENHKQogICAgIHZpcnR1YWwgYm9vbCBiYWNrZ3JvdW5k
SXNPYnNjdXJlZCgpIGNvbnN0OworI2VuZGlmCiAKICAgICB2aXJ0dWFsIGludCBtaW5pbXVtUmVw
bGFjZWRIZWlnaHQoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBiZmMw
MTdmLi5mZTBhNTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBA
CisyMDEyLTA3LTMxICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmVtb3ZlIGN1cnJlbnRGcmFtZUhhc0FscGhhKCkgZnJvbSBJbWFnZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMzc1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1hZ2U6OmN1cnJlbnRGcmFtZUhhc0Fs
cGhhKCkgaXMgcmVtb3ZlZCBzbyBjbGVhbnVwIGltcGxlbWVudGF0aW9uIGluIHRlc3RzLgorCisg
ICAgICAgICogdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgICogdGVz
dHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6
CisKIDIwMTItMDctMjUgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZW1vdmUgZGVzdHJveURlY29kZWREYXRhKCkgYW5kIGRlY29kZWRTaXplKCkgZnJvbSBJbWFn
ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNo
cm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwCmluZGV4IGM5N2QzOWYuLjA5MGZhYzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcApA
QCAtNzAsMTEgKzcwLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
LSAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuICFtX25hdGl2ZUltYWdlLT5iaXRtYXAoKS5pc09wYXF1ZSgpOwotICAgIH0KLQogICAg
IHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3Np
emU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BsYXRmb3JtQ29u
dGV4dFNraWFUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1D
b250ZXh0U2tpYVRlc3QuY3BwCmluZGV4IGViMmMwNzUuLmQ5MTNmNzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3Qu
Y3BwCkBAIC01NTAsMTQgKzU1MCwxMiBAQCBURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0
cmFja09wYXF1ZUltYWdlVGVzdCkKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBkcmF3Qml0
bWFwLndpZHRoKCk7ICsreCkKICAgICAgICAgICAgICpkcmF3Qml0bWFwLmdldEFkZHIzMih4LCB5
KSA9IDB4RkZGRkZGRkY7CiAgICAgUmVmUHRyPEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhPiBv
cGFxdWVJbWFnZSA9IEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVhdGUoZHJhd0JpdG1h
cCwgdHJ1ZSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG9wYXF1ZUltYWdlLT5jdXJyZW50RnJhbWVIYXNB
bHBoYSgpKTsKIAogICAgIGRyYXdCaXRtYXAuc2V0SXNPcGFxdWUoZmFsc2UpOwogICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgZHJhd0JpdG1hcC5oZWlnaHQoKTsgKyt5KQogICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IGRyYXdCaXRtYXAud2lkdGgoKTsgKyt4KQogICAgICAgICAgICAgKmRyYXdC
aXRtYXAuZ2V0QWRkcjMyKHgsIHkpID0gMHgwMDAwMDAwMDsKICAgICBSZWZQdHI8Qml0bWFwSW1h
Z2VTaW5nbGVGcmFtZVNraWE+IGFscGhhSW1hZ2UgPSBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tp
YTo6Y3JlYXRlKGRyYXdCaXRtYXAsIHRydWUpOwotICAgIEVYUEVDVF9UUlVFKGFscGhhSW1hZ2Ut
PmN1cnJlbnRGcmFtZUhhc0FscGhhKCkpOwogCiAgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJl
Y3QoMTAsIDEwLCA5MCwgOTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0
ZVNvdXJjZU92ZXIpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDEwLCA5MCwgOTAp
LCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4
IGE1NjlkY2UuLmM2M2MzYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wNy0z
MSAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbW92ZSBJbWFn
ZTo6Y3VycmVudEZyYW1lSGFzQWxwaGEoKSBhbmQgdXNhZ2Ugb2YgdGhpcyBtZXRob2QuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDM3NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSB1c2FnZSBv
ZiBjdXJyZW50RnJhbWVIYXNBbHBoYSgpIGZvciBub24tQ0cgcG9ydHMuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6YWRvcHRJbWFn
ZUJhY2tpbmdTdG9yZSk6CisKIDIwMTItMDctMjAgIFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxv
Ym9Ab3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyIHNob3Vs
ZCBub3QgcmVseSBvbiBzaWduYWwgc3NsRXJyb3JzIHdoZW4gUVRfTk9fU1NMIGlzIGRlZmluZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVD
b29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iu
Y3BwCmluZGV4IGEzYjlhMTMuLmZhNjY4N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRv
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNv
b3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAj
aW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaCIKIAorI2luY2x1ZGUgIkJpdG1hcEltYWdl
LmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmgiCkBA
IC00MjQsNyArNDI1LDEzIEBAIGludDY0X3QgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmFkb3B0SW1h
Z2VCYWNraW5nU3RvcmUoSW1hZ2UqIGltYWdlKQogICAgICAgICByZXR1cm4ga2V5OwogICAgIH0K
IAotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlU2hhcmVhYmxlKGltYWdlLT5zaXplKCksIChpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxw
aGEoKSA/IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA6IDApKTsKKyAgICBib29sIGhh
c0FscGhhID0gdHJ1ZTsKKyNpZiBVU0UoQ0cpCisgICAgaWYgKGltYWdlLT5pc0JpdG1hcEltYWdl
KCkpCisgICAgICAgIGhhc0FscGhhID0gc3RhdGljX2Nhc3Q8Qml0bWFwSW1hZ2UqPihpbWFnZSkt
PmN1cnJlbnRGcmFtZUhhc0FscGhhKCk7CisjZW5kaWYKKworICAgIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGltYWdlLT5z
aXplKCksIChoYXNBbHBoYSA/IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA6IDApKTsK
ICAgICB7CiAgICAgICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNz
Q29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CiAgICAgICAgIGdyYXBo
aWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2lu
dDo6emVybygpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155899</attachid>
            <date>2012-08-01 15:13:36 -0700</date>
            <delta_ts>2012-08-02 15:29:39 -0700</delta_ts>
            <desc>Remove Image::currentFrameHasAlpha()</desc>
            <filename>webkit-remove-currentFrameHasAlpha.patch</filename>
            <type>text/plain</type>
            <size>17682</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyYTg5YzA4Li4xMTlhZTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjkg
QEAKKzIwMTItMDctMzEgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZW1vdmUgSW1hZ2U6OmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgYW5kIHVzYWdlIG9mIHRoaXMg
bWV0aG9kLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTAzNzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bWFnZTo6Y3VycmVudEZyYW1lSGFzQWxwaGEoKSBpcyByZW1vdmVkIGFuZCB1c2VyIHNob3VsZCBh
Y2NlcyB0aGlzCisgICAgICAgIG1ldGhvZCBkaXJlY3RseSBmcm9tIEJpdG1hcEltYWdlOjpjdXJy
ZW50RnJhbWVIYXNBbHBoYSgpLCB0aGlzIG1ldGhvZAorICAgICAgICBpcyBtYWRlIGF2YWlsYWJs
ZSBvbmx5IHRvIENHIHBvcnQuCisKKyAgICAgICAgSW1hZ2U6OmN1cnJlbnRGcmFtZUhhc0FscGhh
KCkgaXMgdXNlZCBmb3IgdHdvIHJlYXNvbnM6CisgICAgICAgICgxKSBDaGVjayBhbHBoYSBzdGF0
ZSB3aGVuIHVwbG9hZGluZyBpbWFnZSBjb250ZW50IHRvIHRleHR1cmUgZm9yCisgICAgICAgICAg
ICBvcHRpbWl6YXRpb24KKyAgICAgICAgKDIpIFRvIG9wdGltaXplIGJveCBzaGFkb3cgcGFpbnRp
bmcgZm9yIHRoZSBiYWNrZ3JvdW5kIG9mIGFuIG9wYXF1ZQorICAgICAgICAgICAgaW1hZ2UKKwor
ICAgICAgICBGb3IgY2FzZSAoMSkgdGhpcyBtZXRob2QgaXMgbm90IG5lY2Vzc2FyeSBzaW5jZSB0
aGUgdGV4dHVyZSB1cGxvYWQKKyAgICAgICAgcmVxdWlyZXMgZ2V0dGluZyBhIGZyYW1lIGFuZCB0
aGlzIGZyYW1lIGFscmVhZHkgaGFzIGluZm9ybWF0aW9uIGZvcgorICAgICAgICBvcGFjaXR5LiBU
aGlzIHBhdGNoIHJlbW92ZXMgdGhlIHVzYWdlIG9mIGN1cnJlbnRGcmFtZUhhc0FscGhhKCkgYnkK
KyAgICAgICAgZ2V0dGluZyBvcGFjaXR5IGZyb20gdGhlIHBsYXRmb3JtIGltYWdlLgorCisgICAg
ICAgIEZvciBjYXNlICgyKSB0aGUgb3B0aW1pemF0aW9uIGlzIGZvciBhIHZlcnkgc3BlY2lmaWMg
dXNlIGNhc2Ugb2YKKyAgICAgICAgZHJhd2luZyBib3ggc2hhZG93IHVuZGVyIGFuIG9wYXF1ZSBp
bWFnZS4gU3VjaCB1c2FnZSBibG9ja3MgdGhlIGdvYWwgb2YKKyAgICAgICAgaGF2aW5nIGFzeW5j
aHJvbm91cyBpbWFnZSBkZWNvZGluZyBhbmQgdGhlcmUgaXMgcG9zc2libGUgYmV0dGVyCisgICAg
ICAgIHNvbHV0aW9uIHRvIG9wdGltaXplIHRoaXMgY29kZSBwYXRoLiBTdWNoIG9wdGltaXphdGlv
biBpcyBwb3N0cG9uZWQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgaXMgY292ZXJl
ZCBieSBleGlzdGluZyBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgVGVzdGVkIHRoaXMgcGF0Y2gg
d2l0aCBmYXN0L2JveC1zaGFkb3cvaW1hZ2UtYm94LXNoYWRvdy5odG1sIG9uCisgICAgICAgIENo
cm9taXVtIHdpdGggbm8gZXJyb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgY3VycmVudEZyYW1lSGFz
QWxwaGEoKSBvbmx5IGV4aXN0cyBvbmx5IENHIHBvcnQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKEJpdG1hcEltYWdlKToKKyAgICAgICAgTWFr
ZSBjdXJyZW50RnJhbWVIYXNBbHBoYSgpIG5vbiB2aXJ0dWFsIGFuZCBkZWZpbmVkIG9ubHkgb24g
Q0cgcG9ydC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICBS
ZW1vdmUgY3VycmVudEZyYW1lSGFzQWxwaGEoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxl
cjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQpOgorICAgICAgICBEb24ndCB1c2UgY3Vy
cmVudEZyYW1lSGFzQWxwaGEoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICBEb24ndCB1c2UgY3Vy
cmVudEZyYW1lSGFzQWxwaGEoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGls
bEltYWdlUXQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VR
dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVG
cmFtZVNraWEuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1h
Z2VTaW5nbGVGcmFtZVNraWEuaDoKKyAgICAgICAgUmVtb3ZlIGltcGxlbWVudGF0aW9uIG9mIGN1
cnJlbnRGcmFtZUhhc0FscGhhKCkuCisgICAgICAgIChCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tp
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclRpbGU6OnVwZGF0
ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdT
dG9yZTo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICBBc3N1bWUgdGhlIGltYWdlIGhhcyBhbHBo
YS4gQWRkZWQgRklYTUUgdG8gZ2V0IHRoZSBhY3R1YWwgc3RhdGUuCisgICAgICAgIFRoZSByaWdo
dCB3YXkgaXMgdG8gZ2V0IHRoZSBuYXRpdmUgaW1hZ2UgYnkgY2FsbGluZworICAgICAgICBJbWFn
ZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBjaGVjayB0aGUgc3RhdGUgb2YgdGhlIG5h
dGl2ZQorICAgICAgICBpbWFnZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6YmFj
a2dyb3VuZElzT2JzY3VyZWQpOgorICAgICAgICBPbmx5IHVzZSBjdXJyZW50RnJhbWVIYXNBbHBo
YSgpIG9uIENHIHBvcnQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdlLmg6CisgICAg
ICAgIChSZW5kZXJJbWFnZSk6CisKIDIwMTItMDctMjYgIEFscGhhIExhbSAgPGhjbGFtQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBBZGQgSW1hZ2VTb3VyY2VPYnNlcnZlciB0byBJbWFnZVNvdXJj
ZSBhbmQgaW1wbGVtZW50cyBieSBCaXRtYXBJbWFnZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCBjNzMzZDk3Li43MjJhZTg1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
CkBAIC0zMzksMTAgKzMzOSwxMiBAQCBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJ
bmRleChzaXplX3QgaW5kZXgpCiAgICAgcmV0dXJuIG1fc291cmNlLmZyYW1lSGFzQWxwaGFBdElu
ZGV4KGluZGV4KTsKIH0KIAorI2lmIFVTRShDRykKIGJvb2wgQml0bWFwSW1hZ2U6OmN1cnJlbnRG
cmFtZUhhc0FscGhhKCkKIHsKICAgICByZXR1cm4gZnJhbWVIYXNBbHBoYUF0SW5kZXgoY3VycmVu
dEZyYW1lKCkpOwogfQorI2VuZGlmCiAKIEltYWdlT3JpZW50YXRpb24gQml0bWFwSW1hZ2U6OmN1
cnJlbnRGcmFtZU9yaWVudGF0aW9uKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IDRkM2YyNzEuLmRlZjkzNGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtMTkyLDcgKzE5
Miw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKICAgICBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCk7
Ci0gICAgdmlydHVhbCBib29sIGN1cnJlbnRGcmFtZUhhc0FscGhhKCk7CisjaWYgVVNFKENHKQor
ICAgIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEoKTsKKyNlbmRpZgogCiAgICAgSW1hZ2VPcmll
bnRhdGlvbiBjdXJyZW50RnJhbWVPcmllbnRhdGlvbigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2UuaAppbmRleCBlMjcwZDI3Li41ZjVmYzVlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKQEAgLTg0LDcgKzg0LDYgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBib29sIGlzU1ZHSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc0JpdG1hcEltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEoKSB7IHJldHVybiBmYWxzZTsg
fQogCiAgICAgLy8gRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIGlmIHRoZXkg
Y2FuIGFzc3VyZSB0aGF0IAogICAgIC8vIHRoZSBpbWFnZSBjb250YWlucyBvbmx5IHJlc291cmNl
cyBmcm9tIGl0cyBvd24gc2VjdXJpdHkgb3JpZ2luLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJUaWxlci5jcHAKaW5kZXgg
ZGI2ZTc1Yy4uMmI0OGZmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYmxhY2tiZXJyeS9MYXllclRpbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyVGlsZXIuY3BwCkBAIC0xNzgsMTIgKzE3OCw5
IEBAIHZvaWQgTGF5ZXJUaWxlcjo6dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoZG91Ymxl
IHNjYWxlKQogICAgICAgICBjbGVhclRleHR1cmVKb2JzKCk7CiAgICAgfSBlbHNlIGlmICghcmVu
ZGVySm9icy5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKEltYWdlKiBpbWFnZSA9IG1fbGF5ZXIt
PmNvbnRlbnRzKCkpIHsKLSAgICAgICAgICAgIGJvb2wgaXNPcGFxdWUgPSBmYWxzZTsKLSAgICAg
ICAgICAgIGlmIChpbWFnZS0+aXNCaXRtYXBJbWFnZSgpKQotICAgICAgICAgICAgICAgIGlzT3Bh
cXVlID0gIXN0YXRpY19jYXN0PEJpdG1hcEltYWdlKj4oaW1hZ2UpLT5jdXJyZW50RnJhbWVIYXNB
bHBoYSgpOwogICAgICAgICAgICAgaWYgKE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlID0gaW1h
Z2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICBTa0Jp
dG1hcCBiaXRtYXAgPSBTa0JpdG1hcChuYXRpdmVJbWFnZS0+Yml0bWFwKCkpOwotICAgICAgICAg
ICAgICAgIGFkZFRleHR1cmVKb2IoVGV4dHVyZUpvYjo6c2V0Q29udGVudHMoYml0bWFwLCBpc09w
YXF1ZSkpOworICAgICAgICAgICAgICAgIGFkZFRleHR1cmVKb2IoVGV4dHVyZUpvYjo6c2V0Q29u
dGVudHMoYml0bWFwLCBiaXRtYXAuaXNPcGFxdWUoKSkpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGhlcmUgbWlnaHQgc3RpbGwgYmUgc29tZSBwZW5k
aW5nIHJlbmRlciBqb2JzIGR1ZSB0byB2aXNpYmlsaXR5IGNoYW5nZXMuCkBAIC0yMzAsMTQgKzIy
NywxMSBAQCB2b2lkIExheWVyVGlsZXI6OnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKGRv
dWJsZSBzY2FsZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKEltYWdlKiBpbWFnZSA9IG1f
bGF5ZXItPmNvbnRlbnRzKCkpIHsKLSAgICAgICAgYm9vbCBpc09wYXF1ZSA9IGZhbHNlOwotICAg
ICAgICBpZiAoaW1hZ2UtPmlzQml0bWFwSW1hZ2UoKSkKLSAgICAgICAgICAgIGlzT3BhcXVlID0g
IXN0YXRpY19jYXN0PEJpdG1hcEltYWdlKj4oaW1hZ2UpLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgp
OwogICAgICAgICAvLyBObyBwb2ludCBpbiB0aWxpbmcgYW4gaW1hZ2UgbGF5ZXIsIHRoZSBpbWFn
ZSBpcyBhbHJlYWR5IHN0b3JlZCBhcyBhbiBTa0JpdG1hcAogICAgICAgICBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZSA9IG1fbGF5ZXItPmNvbnRlbnRzKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCk7CiAgICAgICAgIGlmIChuYXRpdmVJbWFnZSkgewogICAgICAgICAgICAgU2tCaXRt
YXAgYml0bWFwID0gU2tCaXRtYXAobmF0aXZlSW1hZ2UtPmJpdG1hcCgpKTsKLSAgICAgICAgICAg
IGFkZFRleHR1cmVKb2IoVGV4dHVyZUpvYjo6c2V0Q29udGVudHMoYml0bWFwLCBpc09wYXF1ZSkp
OworICAgICAgICAgICAgYWRkVGV4dHVyZUpvYihUZXh0dXJlSm9iOjpzZXRDb250ZW50cyhiaXRt
YXAsIGJpdG1hcC5pc09wYXF1ZSgpKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDFlYjIzN2MuLjQ2
ODIxZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtNDY5LDcg
KzQ2OSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDb250ZW50c1RvSW1hZ2Uo
SW1hZ2UqIGltYWdlKQogICAgICAgICBXZWJLaXQ6OldlYkltYWdlTGF5ZXIgaW1hZ2VMYXllciA9
IG1fY29udGVudHNMYXllci50bzxXZWJLaXQ6OldlYkltYWdlTGF5ZXI+KCk7CiAgICAgICAgIE5h
dGl2ZUltYWdlU2tpYSogbmF0aXZlSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKICAgICAgICAgaW1hZ2VMYXllci5zZXRCaXRtYXAobmF0aXZlSW1hZ2UtPmJpdG1h
cCgpKTsKLSAgICAgICAgaW1hZ2VMYXllci5zZXRPcGFxdWUoaW1hZ2UtPmlzQml0bWFwSW1hZ2Uo
KSAmJiAhaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkpOworICAgICAgICBpbWFnZUxheWVy
LnNldE9wYXF1ZShpbWFnZS0+aXNCaXRtYXBJbWFnZSgpICYmIG5hdGl2ZUltYWdlLT5iaXRtYXAo
KS5pc09wYXF1ZSgpKTsKICAgICAgICAgdXBkYXRlQ29udGVudHNSZWN0KCk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIuaXNOdWxsKCkpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwCmluZGV4
IDA0MTI1MjAuLjllMTAxZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcApAQCAtNTIsMTEgKzUyLDYgQEAgU3RpbGxJbWFn
ZTo6flN0aWxsSW1hZ2UoKQogICAgICAgICBkZWxldGUgbV9pbWFnZTsKIH0KIAotYm9vbCBTdGls
bEltYWdlOjpjdXJyZW50RnJhbWVIYXNBbHBoYSgpCi17Ci0gICAgcmV0dXJuIG1faW1hZ2UtPmhh
c0FscGhhQ2hhbm5lbCgpOwotfQotCiBJbnRTaXplIFN0aWxsSW1hZ2U6OnNpemUoKSBjb25zdAog
ewogICAgIHJldHVybiBJbnRTaXplKG1faW1hZ2UtPndpZHRoKCksIG1faW1hZ2UtPmhlaWdodCgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxs
SW1hZ2VRdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFn
ZVF0LmgKaW5kZXggOWYzYzllMS4uNTg5NDBmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmgKQEAgLTQ0LDggKzQ0LDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdGlsbElt
YWdlKGltYWdlKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZy
YW1lSGFzQWxwaGEoKTsKLQogICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0Owog
ICAgICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2lu
Z2xlRnJhbWVTa2lhLmNwcAppbmRleCA0ZGU0ZGY4Li5iYjc2NDQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2luZ2xlRnJhbWVT
a2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1h
cEltYWdlU2luZ2xlRnJhbWVTa2lhLmNwcApAQCAtNCwxMSArNCw2IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotYm9vbCBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3VycmVudEZyYW1l
SGFzQWxwaGEoKQotewotICAgIHJldHVybiAhbV9uYXRpdmVJbWFnZS5iaXRtYXAoKS5pc09wYXF1
ZSgpOwotfQotCiBJbnRTaXplIEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpzaXplKCkgY29u
c3QKIHsKICAgICByZXR1cm4gSW50U2l6ZShtX25hdGl2ZUltYWdlLmJpdG1hcCgpLndpZHRoKCks
IG1fbmF0aXZlSW1hZ2UuYml0bWFwKCkuaGVpZ2h0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmds
ZUZyYW1lU2tpYS5oCmluZGV4IGJkNzQ2MGIuLjk5N2I2NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdl
U2luZ2xlRnJhbWVTa2lhLmgKQEAgLTUxLDggKzUxLDYgQEAgcHVibGljOgogICAgIC8vIHJlZidl
ZCkuCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Qml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE+IGNy
ZWF0ZShjb25zdCBTa0JpdG1hcCYsIGJvb2wgY29weVBpeGVscywgZmxvYXQgcmVzb2x1dGlvblNj
YWxlID0gMSk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEoKTsKLQog
ICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CiAKICAgICAvLyBXZSBvbmx5IGhhdmUg
YSBzaW5nbGUgZnJhbWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAK
aW5kZXggZWZhNjU5Zi4uNDA3ZmRkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2lu
Z1N0b3JlLmNwcApAQCAtODEsNyArODEsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJUaWxlOjp1cGRh
dGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBJbWFnZSogaW1hZwogICAg
IHRhcmdldFJlY3QubW92ZSgtbV9yZWN0LngoKSwgLW1fcmVjdC55KCkpOwogICAgIGlmICghbV90
ZXh0dXJlKSB7CiAgICAgICAgIG1fdGV4dHVyZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1
cmUoKTsKLSAgICAgICAgbV90ZXh0dXJlLT5yZXNldCh0YXJnZXRSZWN0LnNpemUoKSwgaW1hZ2Ut
PmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBCaXRtYXBUZXh0dXJlOjpTdXBwb3J0c0FscGhhIDog
MCk7CisgICAgICAgIC8vIEZJWE1FOiBHZXQgdGhlIG5hdGl2ZSBpbWFnZSBmb3IgY3VycmVudCBm
cmFtZSBhbmQgY2hlY2sgaWYgaXQgaGFzIGFscGhhIGNoYW5uZWwuCisgICAgICAgIG1fdGV4dHVy
ZS0+cmVzZXQodGFyZ2V0UmVjdC5zaXplKCksIEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxwaGEp
OwogICAgIH0KIAogICAgIG1fdGV4dHVyZS0+dXBkYXRlQ29udGVudHMoaW1hZ2UsIHRhcmdldFJl
Y3QsIHNvdXJjZU9mZnNldCk7CkBAIC0xOTksNyArMjAwLDggQEAgdm9pZCBUZXh0dXJlTWFwcGVy
VGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZU9yRGVzdHJveVRpbGVzSWZOZWVkZWQoY29uc3QgRmxv
YXRTaXoKIAogdm9pZCBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZUNvbnRl
bnRzKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEltYWdlKiBpbWFnZSwgY29uc3QgRmxv
YXRTaXplJiB0b3RhbFNpemUsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKLSAgICBjcmVh
dGVPckRlc3Ryb3lUaWxlc0lmTmVlZGVkKHRvdGFsU2l6ZSwgdGV4dHVyZU1hcHBlci0+bWF4VGV4
dHVyZVNpemUoKSwgaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkpOworICAgIC8vIEZJWE1F
OiBHZXQgdGhlIG5hdGl2ZSBpbWFnZSBmb3IgY3VycmVudCBmcmFtZSBhbmQgY2hlY2sgaWYgaXQg
aGFzIGFscGhhIGNoYW5uZWwuCisgICAgY3JlYXRlT3JEZXN0cm95VGlsZXNJZk5lZWRlZCh0b3Rh
bFNpemUsIHRleHR1cmVNYXBwZXItPm1heFRleHR1cmVTaXplKCksIHRydWUpOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV90aWxlcy5zaXplKCk7ICsraSkKICAgICAgICAgbV90aWxlc1tp
XS51cGRhdGVDb250ZW50cyh0ZXh0dXJlTWFwcGVyLCBpbWFnZSwgZGlydHlSZWN0KTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCmluZGV4IDQ4ZWEwNTQuLjkwYjFk
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcApAQCAtNDYxLDYg
KzQ2MSw3IEBAIGJvb2wgUmVuZGVySW1hZ2U6OmJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFj
a2dyb3VuZChCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UKICAgICByZXR1cm4gIWJhY2tncm91bmRJ
c09ic2N1cmVkKCk7CiB9CiAKKyNpZiBVU0UoQ0cpCiBib29sIFJlbmRlckltYWdlOjpiYWNrZ3Jv
dW5kSXNPYnNjdXJlZCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltYWdlUmVzb3VyY2UtPmhhc0lt
YWdlKCkgfHwgbV9pbWFnZVJlc291cmNlLT5lcnJvck9jY3VycmVkKCkpCkBAIC00ODEsMTEgKzQ4
MiwxMiBAQCBib29sIFJlbmRlckltYWdlOjpiYWNrZ3JvdW5kSXNPYnNjdXJlZCgpIGNvbnN0CiAK
ICAgICAvLyBDaGVjayBmb3IgYml0bWFwIGltYWdlIHdpdGggYWxwaGEuCiAgICAgSW1hZ2UqIGlt
YWdlID0gbV9pbWFnZVJlc291cmNlLT5pbWFnZSgpLmdldCgpOwotICAgIGlmICghaW1hZ2UgfHwg
IWltYWdlLT5pc0JpdG1hcEltYWdlKCkgfHwgaW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkp
CisgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmlzQml0bWFwSW1hZ2UoKSB8fCBzdGF0aWNfY2Fz
dDxCaXRtYXBJbWFnZSo+KGltYWdlKS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KKyNlbmRpZgogCiBp
bnQgUmVuZGVySW1hZ2U6Om1pbmltdW1SZXBsYWNlZEhlaWdodCgpIGNvbnN0CiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCmluZGV4IDZiZGRiMGEuLmVhMTQxYjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5oCkBAIC04Nyw3ICs4Nyw5IEBAIHByaXZh
dGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZXBsYWNlZChQYWludEluZm8mLCBjb25zdCBM
YXlvdXRQb2ludCYpOwogCisjaWYgVVNFKENHKQogICAgIHZpcnR1YWwgYm9vbCBiYWNrZ3JvdW5k
SXNPYnNjdXJlZCgpIGNvbnN0OworI2VuZGlmCiAKICAgICB2aXJ0dWFsIGludCBtaW5pbXVtUmVw
bGFjZWRIZWlnaHQoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBiZmMw
MTdmLi5mZTBhNTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBA
CisyMDEyLTA3LTMxICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmVtb3ZlIGN1cnJlbnRGcmFtZUhhc0FscGhhKCkgZnJvbSBJbWFnZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMzc1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1hZ2U6OmN1cnJlbnRGcmFtZUhhc0Fs
cGhhKCkgaXMgcmVtb3ZlZCBzbyBjbGVhbnVwIGltcGxlbWVudGF0aW9uIGluIHRlc3RzLgorCisg
ICAgICAgICogdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgICogdGVz
dHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6
CisKIDIwMTItMDctMjUgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZW1vdmUgZGVzdHJveURlY29kZWREYXRhKCkgYW5kIGRlY29kZWRTaXplKCkgZnJvbSBJbWFn
ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNo
cm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwCmluZGV4IGM5N2QzOWYuLjA5MGZhYzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcApA
QCAtNzAsMTEgKzcwLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
LSAgICB2aXJ0dWFsIGJvb2wgY3VycmVudEZyYW1lSGFzQWxwaGEoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuICFtX25hdGl2ZUltYWdlLT5iaXRtYXAoKS5pc09wYXF1ZSgpOwotICAgIH0KLQogICAg
IHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3Np
emU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BsYXRmb3JtQ29u
dGV4dFNraWFUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1D
b250ZXh0U2tpYVRlc3QuY3BwCmluZGV4IGViMmMwNzUuLmQ5MTNmNzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3Qu
Y3BwCkBAIC01NTAsMTQgKzU1MCwxMiBAQCBURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0
cmFja09wYXF1ZUltYWdlVGVzdCkKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBkcmF3Qml0
bWFwLndpZHRoKCk7ICsreCkKICAgICAgICAgICAgICpkcmF3Qml0bWFwLmdldEFkZHIzMih4LCB5
KSA9IDB4RkZGRkZGRkY7CiAgICAgUmVmUHRyPEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhPiBv
cGFxdWVJbWFnZSA9IEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVhdGUoZHJhd0JpdG1h
cCwgdHJ1ZSk7Ci0gICAgRVhQRUNUX0ZBTFNFKG9wYXF1ZUltYWdlLT5jdXJyZW50RnJhbWVIYXNB
bHBoYSgpKTsKIAogICAgIGRyYXdCaXRtYXAuc2V0SXNPcGFxdWUoZmFsc2UpOwogICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgZHJhd0JpdG1hcC5oZWlnaHQoKTsgKyt5KQogICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IGRyYXdCaXRtYXAud2lkdGgoKTsgKyt4KQogICAgICAgICAgICAgKmRyYXdC
aXRtYXAuZ2V0QWRkcjMyKHgsIHkpID0gMHgwMDAwMDAwMDsKICAgICBSZWZQdHI8Qml0bWFwSW1h
Z2VTaW5nbGVGcmFtZVNraWE+IGFscGhhSW1hZ2UgPSBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tp
YTo6Y3JlYXRlKGRyYXdCaXRtYXAsIHRydWUpOwotICAgIEVYUEVDVF9UUlVFKGFscGhhSW1hZ2Ut
PmN1cnJlbnRGcmFtZUhhc0FscGhhKCkpOwogCiAgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJl
Y3QoMTAsIDEwLCA5MCwgOTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0
ZVNvdXJjZU92ZXIpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoMTAsIDEwLCA5MCwgOTAp
LCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4
IGE1NjlkY2UuLmM2M2MzYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wNy0z
MSAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbW92ZSBJbWFn
ZTo6Y3VycmVudEZyYW1lSGFzQWxwaGEoKSBhbmQgdXNhZ2Ugb2YgdGhpcyBtZXRob2QuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDM3NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSB1c2FnZSBv
ZiBjdXJyZW50RnJhbWVIYXNBbHBoYSgpIGZvciBub24tQ0cgcG9ydHMuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0
b3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVDb29yZGluYXRvcjo6YWRvcHRJbWFn
ZUJhY2tpbmdTdG9yZSk6CisKIDIwMTItMDctMjAgIFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxv
Ym9Ab3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBRdE5ldHdvcmtBY2Nlc3NNYW5hZ2VyIHNob3Vs
ZCBub3QgcmVseSBvbiBzaWduYWwgc3NsRXJyb3JzIHdoZW4gUVRfTk9fU1NMIGlzIGRlZmluZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVD
b29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlQ29vcmRpbmF0b3IvTGF5ZXJUcmVlQ29vcmRpbmF0b3Iu
Y3BwCmluZGV4IGEzYjlhMTMuLmZhNjY4N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVDb29yZGluYXRvci9MYXllclRyZWVDb29yZGluYXRv
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUNv
b3JkaW5hdG9yL0xheWVyVHJlZUNvb3JkaW5hdG9yLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAj
aW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3IuaCIKIAorI2luY2x1ZGUgIkJpdG1hcEltYWdl
LmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2VzLmgiCkBA
IC00MjQsNyArNDI1LDEzIEBAIGludDY0X3QgTGF5ZXJUcmVlQ29vcmRpbmF0b3I6OmFkb3B0SW1h
Z2VCYWNraW5nU3RvcmUoSW1hZ2UqIGltYWdlKQogICAgICAgICByZXR1cm4ga2V5OwogICAgIH0K
IAotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlU2hhcmVhYmxlKGltYWdlLT5zaXplKCksIChpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxw
aGEoKSA/IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA6IDApKTsKKyAgICBib29sIGhh
c0FscGhhID0gdHJ1ZTsKKyNpZiBVU0UoQ0cpCisgICAgaWYgKGltYWdlLT5pc0JpdG1hcEltYWdl
KCkpCisgICAgICAgIGhhc0FscGhhID0gc3RhdGljX2Nhc3Q8Qml0bWFwSW1hZ2UqPihpbWFnZSkt
PmN1cnJlbnRGcmFtZUhhc0FscGhhKCk7CisjZW5kaWYKKworICAgIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGltYWdlLT5z
aXplKCksIChoYXNBbHBoYSA/IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSA6IDApKTsK
ICAgICB7CiAgICAgICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNz
Q29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CiAgICAgICAgIGdyYXBo
aWNzQ29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRQb2lu
dDo6emVybygpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156058</attachid>
            <date>2012-08-02 06:07:10 -0700</date>
            <delta_ts>2012-08-04 01:15:33 -0700</delta_ts>
            <desc>Parallel image decoders based on Lam&apos;s preparation patches.</desc>
            <filename>0001-parallel-image-decoders.patch</filename>
            <type>text/plain</type>
            <size>177152</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">RnJvbSAyMmU0YjliMzVjOGVhYjBhODA5MGExNmIyZDk4ODI1NjJkNWUzNjhmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLd29uamluIEplb25nIDxncmFtQGNvbXBhbnkxMDAubmV0PgpE
YXRlOiBXZWQsIDEgQXVnIDIwMTIgMTg6MjY6MDAgKzA5MDAKU3ViamVjdDogW1BBVENIXSBwYXJh
bGxlbCBpbWFnZSBkZWNvZGVycwoKLS0tCiBTb3VyY2UvV1RGL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAxMTUgKysrKysrCiBTb3VyY2UvV1RGL0dOVW1ha2VmaWxl
Lmxpc3QuYW0gICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKwogU291cmNlL1dURi9XVEYuZ3lw
aSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICsKIFNvdXJjZS9XVEYvV1RG
LnBybyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCiBTb3VyY2UvV1RG
L1dURi52Y3Byb2ovV1RGLnZjcHJvaiAgICAgICAgICAgICAgICAgICB8ICAgMjQgKysKIFNvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogICAgICAgICAgIHwgICAyNCArKwog
U291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAgICAgICAgfCAgICA2
ICsKIFNvdXJjZS9XVEYvd3RmL0Rpc3BhdGNoUXVldWUuY3BwICAgICAgICAgICAgICAgICAgIHwg
IDExNyArKysrKysKIFNvdXJjZS9XVEYvd3RmL0Rpc3BhdGNoUXVldWUuaCAgICAgICAgICAgICAg
ICAgICAgIHwgICA1OSArKysKIFNvdXJjZS9XVEYvd3RmL0Rpc3BhdGNoUXVldWVQcml2YXRlR2Vu
ZXJpYy5jcHAgICAgIHwgIDI2NiArKysrKysrKysrKysKIFNvdXJjZS9XVEYvd3RmL0Rpc3BhdGNo
UXVldWVQcml2YXRlR2VuZXJpYy5oICAgICAgIHwgICA4NyArKysrCiBTb3VyY2UvV1RGL3d0Zi9E
aXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNoLmNwcCB8ICAxMjUgKysrKysrCiBTb3VyY2Uv
V1RGL3d0Zi9EaXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNoLmggICB8ICAgODcgKysrKwog
U291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwICAgICAgICAgICAgICAgfCAgICAy
ICsKIFNvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAgICAgICAgICAgICAgICAgICAgIHwg
ICAgMiArCiBTb3VyY2UvV1RGL3d0Zi9jaHJvbWl1bS9NYWluVGhyZWFkQ2hyb21pdW0uY3BwICAg
ICB8ICAgMTMgKwogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAg
ICAgICAgfCAgICAyICsKIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgIDQyOSArKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbSAgICAgICAgICAgICAgICAgfCAgICA2ICsKIFNvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArCiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKwogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogICAgICAgfCAgIDI0ICsrCiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogICB8ICAgMTIg
KwogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcCAgICAgICAgfCAg
ICA0ICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAg
ICB8ICAgODggKysrLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuaCAgICAgfCAgIDM4ICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5l
cmF0ZWRJbWFnZS5oICB8ICAgIDQgLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2UuaCAgICAgICAgICAgfCAgICA1ICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5jcHAgICB8ICAxMjIgKysrKystCiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oICAgICB8ICAgODQgKystLQogLi4uL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlT2JzZXJ2ZXIuaCAgICAgICAgfCAgIDQ0ICsrCiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oICB8ICAgNzYgKysrKwog
Li4uL3BsYXRmb3JtL2dyYXBoaWNzL1BhcmFsbGVsSW1hZ2VEZWNvZGVyLmNwcCAgICAgfCAgMjc4
ICsrKysrKysrKysrKysKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rl
ci5oICAgICAgIHwgICA5MiArKysrKwogLi4uL2dyYXBoaWNzL1BhcmFsbGVsSW1hZ2VEZWNvZGVy
T2JzZXJ2ZXIuaCAgICAgICAgfCAgIDQ0ICsrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWlu
ZWRNb2RlQml0bWFwSW1hZ2UuY3BwICB8ICAxNzIgKysrKysrKysKIC4uLi9wbGF0Zm9ybS9ncmFw
aGljcy9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5oICAgIHwgIDEwMSArKysrKwogLi4uL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgICAgICAgfCAgICA2ICstCiAuLi4v
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAgICB8ICAgIDMgKwog
Li4uL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwICAgICAgfCAgICAy
ICstCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAgICB8
ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3Bw
ICAgIHwgICAgMyArCiAuLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJj
ZUNHLmNwcCB8ICAgMTkgKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuaCAgICAgICAgfCAgICA1IC0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvSW1hZ2VP
cGVuVkcuY3BwICAgICAgIHwgICAgMiArCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9JbWFnZVF0LmNwcCAgICB8ICAgIDMgKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvU3RpbGxJbWFnZVF0LmggfCAgICA1IC0KIC4uLi9ncmFwaGljcy9za2lhL0JpdG1h
cEltYWdlU2luZ2xlRnJhbWVTa2lhLmNwcCAgIHwgICAxNyAtCiAuLi4vZ3JhcGhpY3Mvc2tpYS9C
aXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oICAgICB8ICAgIDcgLQogLi4uL2dyYXBoaWNzL3Nr
aWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcCAgICAgICAgfCAgICAyICstCiAuLi4vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCB8ICAgIDMgKy0KIC4uLi9w
bGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNFLmNwcCAgIHwgICAgMiAtCiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcCAgICB8ICAgIDMg
KwogLi4uL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAgICAgICAgfCAg
IDQyICsrCiAuLi4vV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIu
aCB8ICAgMTQgKwogLi4uL2ltYWdlLWRlY29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rl
ci5jcHAgfCAgICAxICsKIC4uLi9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNw
cCAgICAgICAgIHwgICAgOSArLQogLi4uL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJ
bWFnZVJlYWRlci5jcHAgfCAgICA3ICstCiAuLi4vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
RGVjb2Rlci5jcHAgICAgICAgICB8ICAgIDcgKy0KIC4uLi9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwICAgICAgIHwgICAgMiArCiAuLi4vaW1hZ2UtZGVjb2RlcnMvcG5n
L1BOR0ltYWdlRGVjb2Rlci5jcHAgICAgICAgICB8ICAgIDEgKwogLi4uL2ltYWdlLWRlY29kZXJz
L3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHAgICAgICAgfCAgICA4ICsKIC4uLi9pbWFnZS1kZWNv
ZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwICAgICAgIHwgICAyNSArLQogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcCAgICAgICAgICAgfCAgICA0ICstCiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCAgICB8ICAgMTYgKy0K
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaCAgICAgIHwgICAg
MiArCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcCAgICB8
ICAgIDMgKy0KIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oICAgICAgICAg
ICAgIHwgICAgNSAtCiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICB8ICAgMTQgKwogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VTa2lh
LmNwcCAgICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RyYWdJ
bWFnZVRlc3QuY3BwICAgICB8ICAgMTAgLQogLi4uL2Nocm9taXVtL3Rlc3RzL0ltYWdlTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwICAgICAgfCAgIDEwIC0KIDcyIGZpbGVzIGNoYW5nZWQsIDI2NjAgaW5z
ZXJ0aW9ucygrKSwgMTg2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
VEYvd3RmL0Rpc3BhdGNoUXVldWUuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dURi93
dGYvRGlzcGF0Y2hRdWV1ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dURi93dGYvRGlz
cGF0Y2hRdWV1ZVByaXZhdGVHZW5lcmljLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
VEYvd3RmL0Rpc3BhdGNoUXVldWVQcml2YXRlR2VuZXJpYy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL1dURi93dGYvRGlzcGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaC5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV1RGL3d0Zi9EaXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3Bh
dGNoLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZU9ic2VydmVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURlY29kZXIuY3Bw
CiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFy
YWxsZWxJbWFnZURlY29kZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BhcmFsbGVsSW1hZ2VEZWNvZGVyT2JzZXJ2ZXIuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JldGFpbmVkTW9kZUJp
dG1hcEltYWdlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1JldGFpbmVkTW9kZUJpdG1hcEltYWdlLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGIzNDkyYmYuLmI5NTY1
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTE4IEBACisyMDEyLTA4LTAxICBLd29uamluIEplb25nICA8Z3Jh
bUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBBZGQgRGlzcGF0Y2hRdWV1ZSBjbGFzcy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNTg0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXV0aG9yZWQgYnkg
S3dvbmppbiBKZW9uZyBhbmQgRG9uZ3N1bmcgSHVhbmcuCisKKyAgICAgICAgRGlzcGF0Y2hRdWV1
ZSBpcyBhIHNpbXBsZSBDKysgd3JhcHBlciBhcm91bmQgbGliZGlzcGF0Y2ggKEdDRCkuIEEgdGhy
ZWFkIHBvb2wgYmFzZWQKKyAgICAgICAgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gaXMgYWxzbyBh
dmFpYWJsZS4gU28gcG9ydHMgd2l0aG91dCBsaWJkaXNwYXRjaCBjYW4gdXNlIHRoZSBzYW1lIEFQ
SS4KKworICAgICAgICBJdCBwcm92aWRlcyBvbmx5IHRoZSBzbWFsbCBzdWJzZXQgb2YgdGhlIG9y
aWdpbmFsIGxpYmRpc3BhdGNoIEFQSS4gVGhlcmUgYXJlIHRocmVlIHR5cGVzCisgICAgICAgIG9m
IERpc3BhdGNoUXVldWU6IHNlcmlhbCwgZ2xvYmFsIGFuZCBtYWluLiBUaGVzZSBxdWV1ZXMgY29y
cmVzcG9uZCB0byB0aGUgc2VyaWFsLAorICAgICAgICBjb25jdXJyZW50IGdsb2JhbCBhbmQgbWFp
biBxdWV1ZSBpbiBsaWJkaXNwYXRjaC4KKworICAgICAgICBEaXNwYXRjaFF1ZXVlOjphc3luYyhj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JikgbWV0aG9kIGlzIHVzZWQgdG8gc2NoZWR1bGUgYSB0YXNr
IHJlZ2FyZGxlc3MKKyAgICAgICAgb2YgdGhlIHF1ZXVlIHR5cGUuCisKKyAgICAgICAgQ3VycmVu
dGx5LCBpdCBpcyB1c2VkIGJ5IHBhcmFsbGVsIGltYWdlIGRlY29kZXJzIHRvIHBlcmZvcm0gaW1h
Z2UgZGVjb2RpbmcgY29uY3VycmVudGx5LgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5h
bToKKyAgICAgICAgKiBXVEYuZ3lwaToKKyAgICAgICAgKiBXVEYucHJvOgorICAgICAgICAqIFdU
Ri52Y3Byb2ovV1RGLnZjcHJvajoKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0Rpc3Bh
dGNoUXVldWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURik6CisgICAgICAgIChEaXNwYXRjaE1h
aW5RdWV1ZSk6CisgICAgICAgIChXVEY6OkRpc3BhdGNoTWFpblF1ZXVlOjp+RGlzcGF0Y2hNYWlu
UXVldWUpOgorICAgICAgICAoV1RGOjpEaXNwYXRjaE1haW5RdWV1ZTo6YXN5bmMpOgorICAgICAg
ICAoV1RGOjpEaXNwYXRjaE1haW5RdWV1ZTo6RGlzcGF0Y2hNYWluUXVldWUpOgorICAgICAgICAo
RGlzcGF0Y2hHbG9iYWxRdWV1ZSk6CisgICAgICAgIChXVEY6OkRpc3BhdGNoR2xvYmFsUXVldWU6
On5EaXNwYXRjaEdsb2JhbFF1ZXVlKToKKyAgICAgICAgKFdURjo6RGlzcGF0Y2hHbG9iYWxRdWV1
ZTo6YXN5bmMpOgorICAgICAgICAoV1RGOjpEaXNwYXRjaEdsb2JhbFF1ZXVlOjpEaXNwYXRjaEds
b2JhbFF1ZXVlKToKKyAgICAgICAgKERpc3BhdGNoU2VyaWFsUXVldWUpOgorICAgICAgICAoV1RG
OjpEaXNwYXRjaFNlcmlhbFF1ZXVlOjp+RGlzcGF0Y2hTZXJpYWxRdWV1ZSk6CisgICAgICAgIChX
VEY6OkRpc3BhdGNoU2VyaWFsUXVldWU6OmFzeW5jKToKKyAgICAgICAgKFdURjo6RGlzcGF0Y2hT
ZXJpYWxRdWV1ZTo6RGlzcGF0Y2hTZXJpYWxRdWV1ZSk6CisgICAgICAgIChXVEY6OkRpc3BhdGNo
UXVldWU6Omdsb2JhbFF1ZXVlKToKKyAgICAgICAgKFdURjo6RGlzcGF0Y2hRdWV1ZTo6bWFpblF1
ZXVlKToKKyAgICAgICAgKFdURjo6RGlzcGF0Y2hRdWV1ZTo6aW5pdGlhbGl6ZURpc3BhdGNoUXVl
dWUpOgorICAgICAgICAoV1RGOjpEaXNwYXRjaFF1ZXVlOjpjcmVhdGVTZXJpYWxRdWV1ZSk6Cisg
ICAgICAgICogd3RmL0Rpc3BhdGNoUXVldWUuaDogQWRkZWQuCisgICAgICAgIChXVEYpOgorICAg
ICAgICAoRGlzcGF0Y2hRdWV1ZSk6CisgICAgICAgIChXVEY6OkRpc3BhdGNoUXVldWU6On5EaXNw
YXRjaFF1ZXVlKToKKyAgICAgICAgKFdURjo6RGlzcGF0Y2hRdWV1ZTo6RGlzcGF0Y2hRdWV1ZSk6
CisgICAgICAgICogd3RmL0Rpc3BhdGNoUXVldWVQcml2YXRlR2VuZXJpYy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV1RGKToKKyAgICAgICAgKEV4ZWN1dG9yKToKKyAgICAgICAgKFdURjo6RXhlY3V0
b3I6OmFjcXVpcmUpOgorICAgICAgICAoV1RGOjpFeGVjdXRvcjo6cmVsZWFzZSk6CisgICAgICAg
IChXVEY6OkV4ZWN1dG9yOjphY3F1aXJlQ291bnQpOgorICAgICAgICAoV1RGOjpFeGVjdXRvcjo6
RXhlY3V0b3IpOgorICAgICAgICAoV1RGOjpFeGVjdXRvcjo6fkV4ZWN1dG9yKToKKyAgICAgICAg
KFdURjo6RXhlY3V0b3I6OmV4ZWN1dGUpOgorICAgICAgICAoV1RGOjpFeGVjdXRvcjo6d29ya2Vy
VGhyZWFkKToKKyAgICAgICAgKEV4ZWN1dG9yUG9vbCk6CisgICAgICAgIChXVEY6OkV4ZWN1dG9y
UG9vbDo6aW5pdGlhbGl6ZUV4ZWN1dG9yUG9vbCk6CisgICAgICAgIChXVEY6OmV4ZWN1dG9yUG9v
bCk6CisgICAgICAgIChXVEY6OkV4ZWN1dG9yUG9vbDo6RXhlY3V0b3JQb29sKToKKyAgICAgICAg
KFdURjo6RXhlY3V0b3JQb29sOjp+RXhlY3V0b3JQb29sKToKKyAgICAgICAgKFdURjo6RXhlY3V0
b3JQb29sOjpleGVjdXRlKToKKyAgICAgICAgKFdURjo6RXhlY3V0b3JQb29sOjpuZXh0RXhlY3V0
b3IpOgorICAgICAgICAoV1RGOjpFeGVjdXRvclBvb2w6OmFjcXVpcmVTZXJpYWxFeGVjdXRvcik6
CisgICAgICAgIChXVEY6OkV4ZWN1dG9yUG9vbDo6cmVsZWFzZVNlcmlhbEV4ZWN1dG9yKToKKyAg
ICAgICAgKFdURjo6RXhlY3V0b3JQb29sOjpzZXJpYWxFeGVjdXRvcldpdGhNaW5pbXVtQWNxdWly
ZUNvdW50KToKKyAgICAgICAgKFdURjo6RGlzcGF0Y2hHbG9iYWxRdWV1ZVByaXZhdGU6OkRpc3Bh
dGNoR2xvYmFsUXVldWVQcml2YXRlKToKKyAgICAgICAgKFdURjo6RGlzcGF0Y2hHbG9iYWxRdWV1
ZVByaXZhdGU6On5EaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0ZSk6CisgICAgICAgIChXVEY6OkRp
c3BhdGNoR2xvYmFsUXVldWVQcml2YXRlOjphc3luYyk6CisgICAgICAgIChXVEY6OkRpc3BhdGNo
U2VyaWFsUXVldWVQcml2YXRlOjpEaXNwYXRjaFNlcmlhbFF1ZXVlUHJpdmF0ZSk6CisgICAgICAg
IChXVEY6OkRpc3BhdGNoU2VyaWFsUXVldWVQcml2YXRlOjp+RGlzcGF0Y2hTZXJpYWxRdWV1ZVBy
aXZhdGUpOgorICAgICAgICAoV1RGOjpEaXNwYXRjaFNlcmlhbFF1ZXVlUHJpdmF0ZTo6ZW5zdXJl
VGVybWluYXRlKToKKyAgICAgICAgKFdURjo6Y2FuY2VsYWJsZUZ1bmN0aW9uKToKKyAgICAgICAg
KFdURjo6RGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGU6OmFzeW5jKToKKyAgICAgICAgKFdURjo6
RGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGU6Omhhc1Rlcm1pbmF0aW9uQmVndW4pOgorICAgICAg
ICAqIHd0Zi9EaXNwYXRjaFF1ZXVlUHJpdmF0ZUdlbmVyaWMuaDogQWRkZWQuCisgICAgICAgIChX
VEYpOgorICAgICAgICAoRGlzcGF0Y2hHbG9iYWxRdWV1ZVByaXZhdGUpOgorICAgICAgICAoV1RG
OjpEaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0ZTo6Y3JlYXRlKToKKyAgICAgICAgKERpc3BhdGNo
U2VyaWFsUXVldWVQcml2YXRlKToKKyAgICAgICAgKFdURjo6RGlzcGF0Y2hTZXJpYWxRdWV1ZVBy
aXZhdGU6OmNyZWF0ZSk6CisgICAgICAgICogd3RmL0Rpc3BhdGNoUXVldWVQcml2YXRlTGliZGlz
cGF0Y2guY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURik6CisgICAgICAgIChXVEY6OkRpc3BhdGNo
R2xvYmFsUXVldWVQcml2YXRlOjpEaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0ZSk6CisgICAgICAg
IChXVEY6OkRpc3BhdGNoR2xvYmFsUXVldWVQcml2YXRlOjp+RGlzcGF0Y2hHbG9iYWxRdWV1ZVBy
aXZhdGUpOgorICAgICAgICAoV1RGOjpGdW5jdGlvbkJveDo6RnVuY3Rpb25Cb3gpOgorICAgICAg
ICAoRnVuY3Rpb25Cb3gpOgorICAgICAgICAoV1RGOjpEaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0
ZTo6YXN5bmMpOgorICAgICAgICAoV1RGOjpEaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0ZTo6aW52
b2tlRnVuY3Rpb24pOgorICAgICAgICAoV1RGOjpEaXNwYXRjaFNlcmlhbFF1ZXVlUHJpdmF0ZTo6
RGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGUpOgorICAgICAgICAoV1RGOjpEaXNwYXRjaFNlcmlh
bFF1ZXVlUHJpdmF0ZTo6fkRpc3BhdGNoU2VyaWFsUXVldWVQcml2YXRlKToKKyAgICAgICAgKFdU
Rjo6RGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGU6OnRlcm1pbmF0ZSk6CisgICAgICAgIChXVEY6
OkNhbmNlbGFibGVGdW5jdGlvbkJveDo6Q2FuY2VsYWJsZUZ1bmN0aW9uQm94KToKKyAgICAgICAg
KENhbmNlbGFibGVGdW5jdGlvbkJveCk6CisgICAgICAgIChXVEY6OkRpc3BhdGNoU2VyaWFsUXVl
dWVQcml2YXRlOjppbnZva2VGdW5jdGlvbik6CisgICAgICAgIChXVEY6OkRpc3BhdGNoU2VyaWFs
UXVldWVQcml2YXRlOjphc3luYyk6CisgICAgICAgICogd3RmL0Rpc3BhdGNoUXVldWVQcml2YXRl
TGliZGlzcGF0Y2guaDogQWRkZWQuCisgICAgICAgIChXVEYpOgorICAgICAgICAoRGlzcGF0Y2hH
bG9iYWxRdWV1ZVByaXZhdGUpOgorICAgICAgICAoV1RGOjpEaXNwYXRjaEdsb2JhbFF1ZXVlUHJp
dmF0ZTo6Y3JlYXRlKToKKyAgICAgICAgKERpc3BhdGNoU2VyaWFsUXVldWVQcml2YXRlKToKKyAg
ICAgICAgKFdURjo6RGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGU6OmNyZWF0ZSk6CisgICAgICAg
ICogd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRo
cmVhZGluZyk6CisgICAgICAgICogd3RmL1RocmVhZGluZ1dpbi5jcHA6CisgICAgICAgIChXVEY6
OmluaXRpYWxpemVUaHJlYWRpbmcpOgorICAgICAgICAqIHd0Zi9jaHJvbWl1bS9NYWluVGhyZWFk
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV1RGOjpjYWxsRnVuY3Rpb25PYmplY3QpOgorICAgICAg
ICAoV1RGKToKKyAgICAgICAgKFdURjo6Y2FsbE9uTWFpblRocmVhZCk6CisKIDIwMTItMDgtMDEg
IFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVwbGFj
ZSBXVEY6OmdldEN1cnJlbnRMb2NhbFRpbWUoKSB3aXRoIEdyZWdvcmlhbkRhdGVUaW1lOjpzZXRU
b0N1cnJlbnRMb2NhbFRpbWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9HTlVtYWtlZmlsZS5s
aXN0LmFtIGIvU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDdkMzRlZTEuLmQ5
OTc2ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9T
b3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTM3LDYgKzM3LDEyIEBAIHd0Zl9zb3Vy
Y2VzICs9IFwKICAgICBTb3VyY2UvV1RGL3d0Zi9EZWNvZGVyLmggXAogICAgIFNvdXJjZS9XVEYv
d3RmL0RlcXVlLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL0Rpc2FsbG93Q1R5cGUuaCBcCisgICAg
U291cmNlL1dURi93dGYvRGlzcGF0Y2hRdWV1ZS5jcHAgXAorICAgIFNvdXJjZS9XVEYvd3RmL0Rp
c3BhdGNoUXVldWUuaCBcCisgICAgU291cmNlL1dURi93dGYvRGlzcGF0Y2hRdWV1ZVByaXZhdGVH
ZW5lcmljLmNwcCBcCisgICAgU291cmNlL1dURi93dGYvRGlzcGF0Y2hRdWV1ZVByaXZhdGVHZW5l
cmljLmggXAorICAgIFNvdXJjZS9XVEYvd3RmL0Rpc3BhdGNoUXVldWVQcml2YXRlTGliZGlzcGF0
Y2guY3BwIFwKKyAgICBTb3VyY2UvV1RGL3d0Zi9EaXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3Bh
dGNoLmggXAogICAgIFNvdXJjZS9XVEYvd3RmL0RvdWJseUxpbmtlZExpc3QuaCBcCiAgICAgU291
cmNlL1dURi93dGYvRHluYW1pY0Fubm90YXRpb25zLmNwcCBcCiAgICAgU291cmNlL1dURi93dGYv
RHluYW1pY0Fubm90YXRpb25zLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYuZ3lwaSBi
L1NvdXJjZS9XVEYvV1RGLmd5cGkKaW5kZXggNWQyNzk3MC4uZDllNDE2OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi9XVEYuZ3lwaQorKysgYi9Tb3VyY2UvV1RGL1dURi5neXBpCkBAIC0xMzksNiAr
MTM5LDEyIEBACiAgICAgICAgICAgICAnd3RmL0RhdGFMb2cuY3BwJywKICAgICAgICAgICAgICd3
dGYvRGF0ZU1hdGguY3BwJywKICAgICAgICAgICAgICd3dGYvRGVjaW1hbE51bWJlci5jcHAnLAor
ICAgICAgICAgICAgJ3d0Zi9EaXNwYXRjaFF1ZXVlLmNwcCcsCisgICAgICAgICAgICAnd3RmL0Rp
c3BhdGNoUXVldWUuaCcsCisgICAgICAgICAgICAnd3RmL0Rpc3BhdGNoUXVldWVQcml2YXRlR2Vu
ZXJpYy5jcHAnLAorICAgICAgICAgICAgJ3d0Zi9EaXNwYXRjaFF1ZXVlUHJpdmF0ZUdlbmVyaWMu
aCcsCisgICAgICAgICAgICAnd3RmL0Rpc3BhdGNoUXVldWVQcml2YXRlTGliZGlzcGF0Y2guY3Bw
JywKKyAgICAgICAgICAgICd3dGYvRGlzcGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaC5oJywK
ICAgICAgICAgICAgICd3dGYvRHluYW1pY0Fubm90YXRpb25zLmNwcCcsCiAgICAgICAgICAgICAn
d3RmL0R5bmFtaWNBbm5vdGF0aW9ucy5oJywKICAgICAgICAgICAgICd3dGYvRmFzdE1hbGxvYy5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYucHJvIGIvU291cmNlL1dURi9XVEYucHJv
CmluZGV4IDAwZGVlNTQuLjdiYTVkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnBybwor
KysgYi9Tb3VyY2UvV1RGL1dURi5wcm8KQEAgLTE4MCw2ICsxODAsOSBAQCBTT1VSQ0VTICs9IFwK
ICAgICBEYXRlTWF0aC5jcHAgXAogICAgIERhdGFMb2cuY3BwIFwKICAgICBEZWNpbWFsTnVtYmVy
LmNwcCBcCisgICAgRGlzcGF0Y2hRdWV1ZS5jcHAgXAorICAgIERpc3BhdGNoUXVldWVQcml2YXRl
TGliZGlzcGF0Y2guY3BwIFwKKyAgICBEaXNwYXRjaFF1ZXVlUHJpdmF0ZUdlbmVyaWMuY3BwIFwK
ICAgICBkdG9hLmNwcCBcCiAgICAgZHRvYS9iaWdudW0tZHRvYS5jYyBcCiAgICAgZHRvYS9iaWdu
dW0uY2MgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYudmNwcm9qL1dURi52Y3Byb2ogYi9T
b3VyY2UvV1RGL1dURi52Y3Byb2ovV1RGLnZjcHJvagppbmRleCAzMzJhMTg0Li4yN2U3YjkxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi52Y3Byb2ovV1RGLnZjcHJvagorKysgYi9Tb3VyY2Uv
V1RGL1dURi52Y3Byb2ovV1RGLnZjcHJvagpAQCAtNzA5LDYgKzcwOSwzMCBAQAogCQkJPgogCQk8
L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXHd0ZlxEaXNwYXRjaFF1ZXVlLmNw
cCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlx3dGZcRGlz
cGF0Y2hRdWV1ZS5oIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHd0ZlxEaXNwYXRjaFF1ZXVlUHJpdmF0ZUdlbmVyaWMuY3BwIgorCQkJPgorCQk8L0ZpbGU+
CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXHd0ZlxEaXNwYXRjaFF1ZXVlUHJpdmF0ZUdl
bmVyaWMuaCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlx3
dGZcRGlzcGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaC5jcHAiCisJCQk+CisJCTwvRmlsZT4K
KwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cd3RmXERpc3BhdGNoUXVldWVQcml2YXRlTGli
ZGlzcGF0Y2guaCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIu
Llx3dGZcRG91Ymx5TGlua2VkTGlzdC5oIgogCQkJPgogCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5N2UyMjUwLi41ZGQwMWI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTUyLDYgKzUyLDEyIEBACiAJ
CUE4QTQ3M0E0MTUxQTgyNUIwMDQxMjNGRiAvKiBEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzI3RDE1MUE4MjVBMDA0MTIzRkYgLyog
RGVjb2Rlci5oICovOyB9OwogCQlBOEE0NzNBNTE1MUE4MjVCMDA0MTIzRkYgLyogRGVxdWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MjdFMTUx
QTgyNUEwMDQxMjNGRiAvKiBEZXF1ZS5oICovOyB9OwogCQlBOEE0NzNBNjE1MUE4MjVCMDA0MTIz
RkYgLyogRGlzYWxsb3dDVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQThBNDcyN0YxNTFBODI1QTAwNDEyM0ZGIC8qIERpc2FsbG93Q1R5cGUuaCAq
LzsgfTsKKwkJQThBNDczQTcxNTFBODI1QjAwNDEyM0Y5IC8qIERpc3BhdGNoUXVldWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyODAxNTFB
ODI1QTAwNDEyM0Y5IC8qIERpc3BhdGNoUXVldWUuY3BwICovOyB9OworCQlBOEE0NzNBNzE1MUE4
MjVCMDA0MTIzRkEgLyogRGlzcGF0Y2hRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyODAxNTFBODI1QTAwNDEyM0ZBIC8qIERpc3BhdGNo
UXVldWUuaCAqLzsgfTsKKwkJQThBNDczQTcxNTFBODI1QjAwNDEyM0ZCIC8qIERpc3BhdGNoUXVl
dWVQcml2YXRlR2VuZXJpYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEE0NzI4MDE1MUE4MjVBMDA0MTIzRkIgLyogRGlzcGF0Y2hRdWV1ZVByaXZh
dGVHZW5lcmljLmNwcCAqLzsgfTsKKwkJQThBNDczQTcxNTFBODI1QjAwNDEyM0ZDIC8qIERpc3Bh
dGNoUXVldWVQcml2YXRlR2VuZXJpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQThBNDcyODAxNTFBODI1QTAwNDEyM0ZDIC8qIERpc3BhdGNoUXVldWVQ
cml2YXRlR2VuZXJpYy5oICovOyB9OworCQlBOEE0NzNBNzE1MUE4MjVCMDA0MTIzRkQgLyogRGlz
cGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzI4MDE1MUE4MjVBMDA0MTIzRkQgLyogRGlzcGF0
Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaC5jcHAgKi87IH07CisJCUE4QTQ3M0E3MTUxQTgyNUIw
MDQxMjNGRSAvKiBEaXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNoLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzI4MDE1MUE4MjVBMDA0MTIz
RkUgLyogRGlzcGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaC5oICovOyB9OwogCQlBOEE0NzNB
NzE1MUE4MjVCMDA0MTIzRkYgLyogRG91Ymx5TGlua2VkTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyODAxNTFBODI1QTAwNDEyM0ZGIC8q
IERvdWJseUxpbmtlZExpc3QuaCAqLzsgfTsKIAkJQThBNDczQTgxNTFBODI1QjAwNDEyM0ZGIC8q
IGJpZ251bS1kdG9hLmNjIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQThBNDcyODIxNTFBODI1QTAwNDEyM0ZGIC8qIGJpZ251bS1kdG9hLmNjICovOyB9Owog
CQlBOEE0NzNBOTE1MUE4MjVCMDA0MTIzRkYgLyogYmlnbnVtLWR0b2EuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MjgzMTUxQTgyNUEwMDQxMjNG
RiAvKiBiaWdudW0tZHRvYS5oICovOyB9OwpAQCAtMzAzLDYgKzMwOSwxMiBAQAogCQlBOEE0NzI3
RDE1MUE4MjVBMDA0MTIzRkYgLyogRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MjdF
MTUxQTgyNUEwMDQxMjNGRiAvKiBEZXF1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZXF1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzI3RjE1MUE4
MjVBMDA0MTIzRkYgLyogRGlzYWxsb3dDVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEaXNhbGxvd0NUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4
QTQ3MjgwMTUxQTgyNUEwMDQxMjNGOSAvKiBEaXNwYXRjaFF1ZXVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGF0Y2hRdWV1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUE4QTQ3MjgwMTUxQTgyNUEwMDQxMjNGQSAvKiBEaXNwYXRjaFF1ZXVlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BhdGNoUXVldWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThBNDcyODAxNTFBODI1QTAwNDEyM0ZCIC8qIERpc3Bh
dGNoUXVldWVQcml2YXRlR2VuZXJpYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpc3BhdGNoUXVldWVQcml2YXRlR2VuZXJpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUE4QTQ3MjgwMTUxQTgyNUEwMDQxMjNGQyAvKiBEaXNwYXRjaFF1ZXVlUHJpdmF0
ZUdlbmVyaWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGF0Y2hRdWV1
ZVByaXZhdGVHZW5lcmljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4QTQ3Mjgw
MTUxQTgyNUEwMDQxMjNGRCAvKiBEaXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNoLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGF0Y2hRdWV1ZVByaXZhdGVMaWJk
aXNwYXRjaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4QTQ3MjgwMTUxQTgy
NUEwMDQxMjNGRSAvKiBEaXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNoLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BhdGNoUXVldWVQcml2YXRlTGliZGlzcGF0Y2gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDcyODAxNTFBODI1QTAwNDEyM0ZG
IC8qIERvdWJseUxpbmtlZExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RG91Ymx5TGlua2VkTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzI4
MjE1MUE4MjVBMDA0MTIzRkYgLyogYmlnbnVtLWR0b2EuY2MgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSAiYmlnbnVtLWR0b2EuY2MiOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBOEE0NzI4MzE1MUE4MjVBMDA0MTIzRkYgLyogYmlnbnVtLWR0b2EuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gImJpZ251bS1kdG9hLmgiOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTk5LDYgKzYxMSwxMiBAQAogCQkJCUE4QTQ3MjdEMTUxQTgyNUEw
MDQxMjNGRiAvKiBEZWNvZGVyLmggKi8sCiAJCQkJQThBNDcyN0UxNTFBODI1QTAwNDEyM0ZGIC8q
IERlcXVlLmggKi8sCiAJCQkJQThBNDcyN0YxNTFBODI1QTAwNDEyM0ZGIC8qIERpc2FsbG93Q1R5
cGUuaCAqLywKKwkJCQlBOEE0NzI4MDE1MUE4MjVBMDA0MTIzRjkgLyogRGlzcGF0Y2hRdWV1ZS5j
cHAgKi8sCisJCQkJQThBNDcyODAxNTFBODI1QTAwNDEyM0ZBIC8qIERpc3BhdGNoUXVldWUuaCAq
LywKKwkJCQlBOEE0NzI4MDE1MUE4MjVBMDA0MTIzRkIgLyogRGlzcGF0Y2hRdWV1ZVByaXZhdGVH
ZW5lcmljLmNwcCAqLywKKwkJCQlBOEE0NzI4MDE1MUE4MjVBMDA0MTIzRkMgLyogRGlzcGF0Y2hR
dWV1ZVByaXZhdGVHZW5lcmljLmggKi8sCisJCQkJQThBNDcyODAxNTFBODI1QTAwNDEyM0ZEIC8q
IERpc3BhdGNoUXVldWVQcml2YXRlTGliZGlzcGF0Y2guY3BwICovLAorCQkJCUE4QTQ3MjgwMTUx
QTgyNUEwMDQxMjNGRSAvKiBEaXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNoLmggKi8sCiAJ
CQkJQThBNDcyODAxNTFBODI1QTAwNDEyM0ZGIC8qIERvdWJseUxpbmtlZExpc3QuaCAqLywKIAkJ
CQlBOEE0NzI5NzE1MUE4MjVBMDA0MTIzRkYgLyogZHRvYS5jcHAgKi8sCiAJCQkJQThBNDcyOTgx
NTFBODI1QTAwNDEyM0ZGIC8qIGR0b2EuaCAqLywKQEAgLTkyMyw2ICs5NDEsOSBAQAogCQkJCUE4
QTQ3M0E0MTUxQTgyNUIwMDQxMjNGRiAvKiBEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OEE0NzNBNTE1MUE4MjVCMDA0MTIzRkYgLyogRGVxdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3M0E2MTUxQTgyNUIwMDQxMjNGRiAvKiBEaXNhbGxvd0NUeXBlLmggaW4gSGVhZGVycyAqLywK
KwkJCQlBOEE0NzNBNzE1MUE4MjVCMDA0MTIzRkEgLyogRGlzcGF0Y2hRdWV1ZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQThBNDczQTcxNTFBODI1QjAwNDEyM0ZDIC8qIERpc3BhdGNoUXVldWVQcml2
YXRlR2VuZXJpYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQThBNDczQTcxNTFBODI1QjAwNDEyM0ZF
IC8qIERpc3BhdGNoUXVldWVQcml2YXRlTGliZGlzcGF0Y2guaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4QTQ3M0FGMTUxQTgyNUIwMDQxMjNGRiAvKiBkaXktZnAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4QTQ3M0IxMTUxQTgyNUIwMDQxMjNGRiAvKiBkb3VibGUtY29udmVyc2lvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThBNDczQjIxNTFBODI1QjAwNDEyM0ZGIC8qIGRvdWJsZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xMTY4LDYgKzExODksOSBAQAogCQkJCUE4QTQ3MzlFMTUxQTgyNUIwMDQxMjNG
RiAvKiBEYXRhTG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0EwMTUxQTgyNUIwMDQx
MjNGRiAvKiBEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNBMjE1MUE4MjVC
MDA0MTIzRkYgLyogRGVjaW1hbE51bWJlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEE0NzNB
NzE1MUE4MjVCMDA0MTIzRjkgLyogRGlzcGF0Y2hRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBOEE0NzNBNzE1MUE4MjVCMDA0MTIzRkIgLyogRGlzcGF0Y2hRdWV1ZVByaXZhdGVHZW5lcmlj
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4QTQ3M0E3MTUxQTgyNUIwMDQxMjNGRCAvKiBEaXNw
YXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3
M0FFMTUxQTgyNUIwMDQxMjNGRiAvKiBkaXktZnAuY2MgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0
NzNCMDE1MUE4MjVCMDA0MTIzRkYgLyogZG91YmxlLWNvbnZlcnNpb24uY2MgaW4gU291cmNlcyAq
LywKIAkJCQlBOEE0NzNCQTE1MUE4MjVCMDA0MTIzRkYgLyogZHRvYS5jcHAgaW4gU291cmNlcyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggMWYxMmZiOC4uNzE1NTQzOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VM
aXN0cy50eHQKQEAgLTIwLDYgKzIwLDkgQEAgU0VUKFdURl9IRUFERVJTCiAgICAgRGVjb2Rlci5o
CiAgICAgRGVxdWUuaAogICAgIERpc2FsbG93Q1R5cGUuaAorICAgIERpc3BhdGNoUXVldWUuaAor
ICAgIERpc3BhdGNoUXVldWVQcml2YXRlR2VuZXJpYy5oCisgICAgRGlzcGF0Y2hRdWV1ZVByaXZh
dGVMaWJkaXNwYXRjaC5oCiAgICAgRG91Ymx5TGlua2VkTGlzdC5oCiAgICAgRHluYW1pY0Fubm90
YXRpb25zLmgKICAgICBFbmNvZGVyLmgKQEAgLTE0NSw2ICsxNDgsOSBAQCBTRVQoV1RGX1NPVVJD
RVMKICAgICBEYXRlTWF0aC5jcHAKICAgICBEYXRhTG9nLmNwcAogICAgIERlY2ltYWxOdW1iZXIu
Y3BwCisgICAgRGlzcGF0Y2hRdWV1ZS5jcHAKKyAgICBEaXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRp
c3BhdGNoLmNwcAorICAgIERpc3BhdGNoUXVldWVQcml2YXRlR2VuZXJpYy5jcHAKICAgICBEeW5h
bWljQW5ub3RhdGlvbnMuY3BwCiAgICAgRmFzdE1hbGxvYy5jcHAKICAgICBHcmVnb3JpYW5EYXRl
VGltZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Rpc3BhdGNoUXVldWUuY3BwIGIv
U291cmNlL1dURi93dGYvRGlzcGF0Y2hRdWV1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNmQ5ZWEzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Rp
c3BhdGNoUXVldWUuY3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIENvbXBhbnkgMTAwIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRpc3BhdGNoUXVldWUuaCIKKworI2lmIEVOQUJMRShUSFJFQURJTkdfTElCRElTUEFUQ0gp
CisjaW5jbHVkZSAiRGlzcGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaC5oIgorI2Vsc2UKKyNp
bmNsdWRlICJEaXNwYXRjaFF1ZXVlUHJpdmF0ZUdlbmVyaWMuaCIKKyNlbmRpZgorCisjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCitjbGFzcyBEaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0ZTsKK2NsYXNzIERpc3Bh
dGNoU2VyaWFsUXVldWVQcml2YXRlOworCitEaXNwYXRjaFF1ZXVlKiBEaXNwYXRjaFF1ZXVlOjpz
X2dsb2JhbFF1ZXVlOworRGlzcGF0Y2hRdWV1ZSogRGlzcGF0Y2hRdWV1ZTo6c19tYWluUXVldWU7
CisKK2NsYXNzIERpc3BhdGNoTWFpblF1ZXVlIDogcHVibGljIERpc3BhdGNoUXVldWUgeworcHVi
bGljOgorICAgIGZyaWVuZCBjbGFzcyBEaXNwYXRjaFF1ZXVlOworICAgIHZpcnR1YWwgfkRpc3Bh
dGNoTWFpblF1ZXVlKCkgeyB9CisKKyAgICAvLyBJbiBjYXNlIG9mIHRoZSBtYWluIHF1ZXVlLCB3
ZSBzaW1wbHkgcmV1c2UgY2FsbE9uTWFpblRocmVhZC4KKyAgICB2aXJ0dWFsIHZvaWQgYXN5bmMo
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAgeworICAgICAgICBjYWxsT25N
YWluVGhyZWFkKGZ1bmN0aW9uKTsKKyAgICB9CisKKworcHJpdmF0ZToKKyAgICBEaXNwYXRjaE1h
aW5RdWV1ZSgpIHsgfQorfTsKKworY2xhc3MgRGlzcGF0Y2hHbG9iYWxRdWV1ZSA6IHB1YmxpYyBE
aXNwYXRjaFF1ZXVlIHsKK3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgRGlzcGF0Y2hRdWV1ZTsK
KyAgICB2aXJ0dWFsIH5EaXNwYXRjaEdsb2JhbFF1ZXVlKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgYXN5bmMoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAgeworICAgICAg
ICBtX3ByaXZhdGUtPmFzeW5jKGZ1bmN0aW9uKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRGlz
cGF0Y2hHbG9iYWxRdWV1ZSgpCisgICAgICAgIDogbV9wcml2YXRlKERpc3BhdGNoR2xvYmFsUXVl
dWVQcml2YXRlOjpjcmVhdGUoKSkgeyB9CisKKyAgICBPd25QdHI8RGlzcGF0Y2hHbG9iYWxRdWV1
ZVByaXZhdGU+IG1fcHJpdmF0ZTsKK307CisKK2NsYXNzIERpc3BhdGNoU2VyaWFsUXVldWUgOiBw
dWJsaWMgRGlzcGF0Y2hRdWV1ZSB7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIERpc3BhdGNo
UXVldWU7CisgICAgdmlydHVhbCB+RGlzcGF0Y2hTZXJpYWxRdWV1ZSgpIHsgfQorCisgICAgdmly
dHVhbCB2b2lkIGFzeW5jKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQorICAgIHsK
KyAgICAgICAgbV9wcml2YXRlLT5hc3luYyhmdW5jdGlvbik7CisgICAgfQorCitwcml2YXRlOgor
ICAgIERpc3BhdGNoU2VyaWFsUXVldWUoKQorICAgICAgICA6IG1fcHJpdmF0ZShEaXNwYXRjaFNl
cmlhbFF1ZXVlUHJpdmF0ZTo6Y3JlYXRlKCkpIHsgfQorCisgICAgT3duUHRyPERpc3BhdGNoU2Vy
aWFsUXVldWVQcml2YXRlPiBtX3ByaXZhdGU7Cit9OworCitEaXNwYXRjaFF1ZXVlKiBEaXNwYXRj
aFF1ZXVlOjpnbG9iYWxRdWV1ZSgpCit7CisgICAgcmV0dXJuIHNfZ2xvYmFsUXVldWU7Cit9CisK
K0Rpc3BhdGNoUXVldWUqIERpc3BhdGNoUXVldWU6Om1haW5RdWV1ZSgpCit7CisgICAgcmV0dXJu
IHNfbWFpblF1ZXVlOworfQorCit2b2lkIERpc3BhdGNoUXVldWU6OmluaXRpYWxpemVEaXNwYXRj
aFF1ZXVlKCkKK3sKKyAgICBzX21haW5RdWV1ZSA9IG5ldyBEaXNwYXRjaE1haW5RdWV1ZSgpOwor
ICAgIHNfZ2xvYmFsUXVldWUgPSBuZXcgRGlzcGF0Y2hHbG9iYWxRdWV1ZSgpOworfQorCitQYXNz
UmVmUHRyPERpc3BhdGNoUXVldWU+IERpc3BhdGNoUXVldWU6OmNyZWF0ZVNlcmlhbFF1ZXVlKCkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IERpc3BhdGNoU2VyaWFsUXVldWUoKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRGlzcGF0Y2hR
dWV1ZS5oIGIvU291cmNlL1dURi93dGYvRGlzcGF0Y2hRdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmNjYzM2YmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9EaXNwYXRjaFF1ZXVlLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBDb21wYW55IDEwMCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGlzcGF0Y2hRdWV1ZV9o
CisjZGVmaW5lIERpc3BhdGNoUXVldWVfaAorCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdURiB7
CisKKy8vIFRoaXMgY2xhc3MgaXMgYSBzaW1wbGUgd3JhcHBlciBhcm91bmQgbGliZGlzcGF0Y2gu
CisvLyBXZSBhbHNvIHByb3ZpZGUgYSBnZW5lcmljICh0aHJlYWQgcG9vbCkgaW1wbGVtZW5ldGF0
aW9uIHNvIHRoYXQKKy8vIGFsbCB0aGUgcG9ydHMgY2FuIHVzZSB0aGUgc2FtZSBBUEkuCitjbGFz
cyBEaXNwYXRjaFF1ZXVlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPERpc3BhdGNoUXVl
dWU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplRGlzcGF0Y2hRdWV1ZSgp
OworICAgIHN0YXRpYyBEaXNwYXRjaFF1ZXVlKiBnbG9iYWxRdWV1ZSgpOworICAgIHN0YXRpYyBE
aXNwYXRjaFF1ZXVlKiBtYWluUXVldWUoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEaXNwYXRj
aFF1ZXVlPiBjcmVhdGVTZXJpYWxRdWV1ZSgpOworCisgICAgdmlydHVhbCB+RGlzcGF0Y2hRdWV1
ZSgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGFzeW5jKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
KSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgRGlzcGF0Y2hRdWV1ZSogc19nbG9iYWxR
dWV1ZTsKKyAgICBzdGF0aWMgRGlzcGF0Y2hRdWV1ZSogc19tYWluUXVldWU7CisKKyAgICBEaXNw
YXRjaFF1ZXVlKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpE
aXNwYXRjaFF1ZXVlOworCisjZW5kaWYgLy8gRGlzcGF0Y2hRdWV1ZV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9EaXNwYXRjaFF1ZXVlUHJpdmF0ZUdlbmVyaWMuY3BwIGIvU291cmNlL1dU
Ri93dGYvRGlzcGF0Y2hRdWV1ZVByaXZhdGVHZW5lcmljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5lNWM3ZDU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvRGlzcGF0Y2hRdWV1ZVByaXZhdGVHZW5lcmljLmNwcApAQCAtMCwwICsxLDI2NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmICFFTkFCTEUoVEhSRUFESU5HX0xJQkRJU1BBVENIKQorCisjaW5j
bHVkZSAiRGlzcGF0Y2hRdWV1ZVByaXZhdGVHZW5lcmljLmgiCisKKyNpbmNsdWRlIDxsaW1pdHM+
CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvTnVtYmVyT2ZDb3Jl
cy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBFeGVjdXRvclBvb2w7CisKK2NsYXNzIEV4ZWN1
dG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFeGVjdXRvcik7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRXhlY3V0b3IoKTsKKyAgICB+RXhlY3V0b3Io
KTsKKworICAgIHZvaWQgZXhlY3V0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisKKyAgICBz
dGF0aWMgdm9pZCB3b3JrZXJUaHJlYWQodm9pZCopOworCisgICAgdm9pZCBhY3F1aXJlKCkgeyBt
X2FjcXVpcmVDb3VudCsrOyB9CisgICAgdm9pZCByZWxlYXNlKCkgeyBtX2FjcXVpcmVDb3VudC0t
OyB9CisgICAgaW50IGFjcXVpcmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNxdWlyZUNvdW50
OyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX3J1bm5pbmc7CisgICAgaW50IG1fYWNxdWlyZUNv
dW50OworCisgICAgTXV0ZXggbV9tdXRleDsKKyAgICBUaHJlYWRDb25kaXRpb24gbV9mdW5jdGlv
blF1ZXVlRW1wdHlDb25kaXRpb247CisgICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiBtX2Z1
bmN0aW9uUXVldWU7Cit9OworCitFeGVjdXRvcjo6RXhlY3V0b3IoKQorICAgIDogbV9ydW5uaW5n
KHRydWUpCisgICAgLCBtX2FjcXVpcmVDb3VudCgxKQoreworICAgIC8vIFdlIG5lZWQgYSBtdXRl
eCBoZXJlIGZvciB2aXNpYmlsaXR5IGluIEV4ZWN1dG9yOjp3b3JrZXJUaHJlYWQuCisgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQg
PSBjcmVhdGVUaHJlYWQoJkV4ZWN1dG9yOjp3b3JrZXJUaHJlYWQsIHRoaXMsICJFeGVjdXRvciB3
b3JrZXIiKTsKKyAgICBkZXRhY2hUaHJlYWQodGhyZWFkSUQpOworfQorCitFeGVjdXRvcjo6fkV4
ZWN1dG9yKCkKK3sKKyAgICAvLyBPbmNlIHdlIGNyZWF0ZSBhbiBleGVjdXRvciwgd2UgbmV2ZXIg
ZGVzdHJveXMgaXQuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgRXhlY3V0
b3I6OmV4ZWN1dGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgIG1fZnVuY3Rpb25RdWV1ZS5hcHBlbmQoZnVu
Y3Rpb24pOworCisgICAgbV9mdW5jdGlvblF1ZXVlRW1wdHlDb25kaXRpb24uc2lnbmFsKCk7Cit9
CisKK3ZvaWQgRXhlY3V0b3I6OndvcmtlclRocmVhZCh2b2lkKiB0aHJlYWREYXRhKQoreworICAg
IEV4ZWN1dG9yKiBleGVjdXRvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXhlY3V0b3IqPih0aHJlYWRE
YXRhKTsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lk
KCk+ID4gZnVuY3Rpb25RdWV1ZTsKKyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKGV4ZWN1dG9yLT5tX211dGV4KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSghZXhl
Y3V0b3ItPm1fcnVubmluZykpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
d2hpbGUgKGV4ZWN1dG9yLT5tX2Z1bmN0aW9uUXVldWUuaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgIGV4ZWN1dG9yLT5tX2Z1bmN0aW9uUXVldWVFbXB0eUNvbmRpdGlvbi53YWl0KGV4ZWN1dG9y
LT5tX211dGV4KTsKKyAgICAgICAgICAgIGV4ZWN1dG9yLT5tX2Z1bmN0aW9uUXVldWUuc3dhcChm
dW5jdGlvblF1ZXVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZnVuY3Rpb25RdWV1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGZ1bmN0aW9uUXVldWVb
aV0oKTsKKyAgICB9Cit9CisKK2NsYXNzIEV4ZWN1dG9yUG9vbCB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoRXhlY3V0b3JQb29sKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplRXhlY3V0b3JQb29sKCk7CisKKyAgICBm
cmllbmQgRXhlY3V0b3JQb29sKiBleGVjdXRvclBvb2woKTsKKyAgICB+RXhlY3V0b3JQb29sKCk7
CisKKyAgICB2b2lkIGV4ZWN1dGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIEV4ZWN1
dG9yKiBhY3F1aXJlU2VyaWFsRXhlY3V0b3IoKTsKKyAgICB2b2lkIHJlbGVhc2VTZXJpYWxFeGVj
dXRvcihFeGVjdXRvciopOworCitwcml2YXRlOgorICAgIHN0YXRpYyBFeGVjdXRvclBvb2wqIHNf
ZXhlY3V0b3JQb29sOworICAgIEV4ZWN1dG9yUG9vbCgpOworICAgIEV4ZWN1dG9yKiBuZXh0RXhl
Y3V0b3IoKTsKKyAgICBFeGVjdXRvciogc2VyaWFsRXhlY3V0b3JXaXRoTWluaW11bUFjcXVpcmVD
b3VudCgpOworCisgICAgTXV0ZXggbV9tdXRleDsKKyAgICBWZWN0b3I8RXhlY3V0b3IqPiBtX2V4
ZWN1dG9yUG9vbDsKK307CisKK0V4ZWN1dG9yUG9vbCogRXhlY3V0b3JQb29sOjpzX2V4ZWN1dG9y
UG9vbDsKKwordm9pZCBFeGVjdXRvclBvb2w6OmluaXRpYWxpemVFeGVjdXRvclBvb2woKQorewor
ICAgIGlmICghc19leGVjdXRvclBvb2wpCisgICAgICAgIHNfZXhlY3V0b3JQb29sID0gbmV3IEV4
ZWN1dG9yUG9vbDsKK30KKworRXhlY3V0b3JQb29sKiBleGVjdXRvclBvb2woKQoreworICAgIHJl
dHVybiBFeGVjdXRvclBvb2w6OnNfZXhlY3V0b3JQb29sOworfQorCitFeGVjdXRvclBvb2w6OkV4
ZWN1dG9yUG9vbCgpCit7CisgICAgbV9leGVjdXRvclBvb2wucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShudW1iZXJPZlByb2Nlc3NvckNvcmVzKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
YmVyT2ZQcm9jZXNzb3JDb3JlcygpOyBpKyspCisgICAgICAgIG1fZXhlY3V0b3JQb29sLmFwcGVu
ZChuZXcgRXhlY3V0b3IoKSk7Cit9CisKK0V4ZWN1dG9yUG9vbDo6fkV4ZWN1dG9yUG9vbCgpCit7
Cit9CisKK3ZvaWQgRXhlY3V0b3JQb29sOjpleGVjdXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
IGZ1bmN0aW9uKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBuZXh0
RXhlY3V0b3IoKS0+ZXhlY3V0ZShmdW5jdGlvbik7Cit9CisKK0V4ZWN1dG9yKiBFeGVjdXRvclBv
b2w6Om5leHRFeGVjdXRvcigpCit7CisgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbmV4dCA9IDA7
CisgICAgaW50IGluZGV4ID0gbmV4dCAlIG1fZXhlY3V0b3JQb29sLnNpemUoKTsKKyAgICBuZXh0
Kys7CisgICAgcmV0dXJuIG1fZXhlY3V0b3JQb29sW2luZGV4XTsKK30KKworRXhlY3V0b3IqIEV4
ZWN1dG9yUG9vbDo6YWNxdWlyZVNlcmlhbEV4ZWN1dG9yKCkKK3sKKyAgICBNdXRleExvY2tlciBs
b2NrZXIobV9tdXRleCk7CisgICAgRXhlY3V0b3IqIGV4ZWN1dG9yID0gc2VyaWFsRXhlY3V0b3JX
aXRoTWluaW11bUFjcXVpcmVDb3VudCgpOworICAgIGV4ZWN1dG9yLT5hY3F1aXJlKCk7CisgICAg
cmV0dXJuIGV4ZWN1dG9yOworfQorCit2b2lkIEV4ZWN1dG9yUG9vbDo6cmVsZWFzZVNlcmlhbEV4
ZWN1dG9yKEV4ZWN1dG9yKiBleGVjdXRvcikKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9t
dXRleCk7CisgICAgZXhlY3V0b3ItPnJlbGVhc2UoKTsKK30KKworLy8gRklYTUU6IFdlIHNpbXBs
eSByZXR1cm5zIHRoZSBleGVjdXRvciB3aXRoIHRoZSBtaW5pbXVtIGFjcXVpcmUgY291bnRzLgor
Ly8gVGhpcyB2YWx1ZSBkb2VzIG5vdCByZWZsZWN0IHRoZSByZWFsIHN5c3RlbSBsb2FkLgorRXhl
Y3V0b3IqIEV4ZWN1dG9yUG9vbDo6c2VyaWFsRXhlY3V0b3JXaXRoTWluaW11bUFjcXVpcmVDb3Vu
dCgpCit7CisgICAgaW50IG1pbmltdW1BY3F1aXJlQ291bnQgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpOworICAgIGludCBpbmRleCA9IG1fZXhlY3V0b3JQb29sLnNpemUoKTsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9leGVjdXRvclBvb2wuc2l6ZSgpOyBpKyspIHsK
KyAgICAgICAgaWYgKG1fZXhlY3V0b3JQb29sW2ldLT5hY3F1aXJlQ291bnQoKSA8IG1pbmltdW1B
Y3F1aXJlQ291bnQpIHsKKyAgICAgICAgICAgIG1pbmltdW1BY3F1aXJlQ291bnQgPSBtX2V4ZWN1
dG9yUG9vbFtpXS0+YWNxdWlyZUNvdW50KCk7CisgICAgICAgICAgICBpbmRleCA9IGk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQoaW5kZXggPCBtX2V4ZWN1dG9yUG9vbC5zaXplKCkp
OworICAgIHJldHVybiBtX2V4ZWN1dG9yUG9vbFtpbmRleF07Cit9CisKK0Rpc3BhdGNoR2xvYmFs
UXVldWVQcml2YXRlOjpEaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0ZSgpCit7CisgICAgRXhlY3V0
b3JQb29sOjppbml0aWFsaXplRXhlY3V0b3JQb29sKCk7Cit9CisKK0Rpc3BhdGNoR2xvYmFsUXVl
dWVQcml2YXRlOjp+RGlzcGF0Y2hHbG9iYWxRdWV1ZVByaXZhdGUoKQoreworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIERpc3BhdGNoR2xvYmFsUXVldWVQcml2YXRlOjphc3lu
Yyhjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBleGVjdXRvclBvb2wo
KS0+ZXhlY3V0ZShmdW5jdGlvbik7Cit9CisKK0Rpc3BhdGNoU2VyaWFsUXVldWVQcml2YXRlOjpE
aXNwYXRjaFNlcmlhbFF1ZXVlUHJpdmF0ZSgpCisgICAgOiBtX2V4ZWN1dG9yU3RhdHVzKFJ1bm5p
bmcpCit7CisgICAgbV9zZXJpYWxFeGVjdXRvciA9IGV4ZWN1dG9yUG9vbCgpLT5hY3F1aXJlU2Vy
aWFsRXhlY3V0b3IoKTsKK30KKworRGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGU6On5EaXNwYXRj
aFNlcmlhbFF1ZXVlUHJpdmF0ZSgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fZXhlY3V0
b3JTdGF0dXNNdXRleCk7CisgICAgbV9leGVjdXRvclN0YXR1cyA9IFRlcm1pbmF0aW9uQmVndW47
CisKKyAgICBtX3NlcmlhbEV4ZWN1dG9yLT5leGVjdXRlKGJpbmQoJkRpc3BhdGNoU2VyaWFsUXVl
dWVQcml2YXRlOjplbnN1cmVUZXJtaW5hdGUsIHRoaXMpKTsKKyAgICB3aGlsZSAobV9leGVjdXRv
clN0YXR1cyAhPSBUZXJtaW5pYXRpb25Db21wbGV0ZWQpCisgICAgICAgIG1fdGVybWluYXRpb25D
b21wbGV0ZWQud2FpdChtX2V4ZWN1dG9yU3RhdHVzTXV0ZXgpOworICAgIGV4ZWN1dG9yUG9vbCgp
LT5yZWxlYXNlU2VyaWFsRXhlY3V0b3IobV9zZXJpYWxFeGVjdXRvcik7Cit9CisKK3ZvaWQgRGlz
cGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGU6OmVuc3VyZVRlcm1pbmF0ZSgpCit7CisgICAgTXV0ZXhM
b2NrZXIgbG9ja2VyKG1fZXhlY3V0b3JTdGF0dXNNdXRleCk7CisgICAgQVNTRVJUKG1fZXhlY3V0
b3JTdGF0dXMgPT0gVGVybWluYXRpb25CZWd1bik7CisgICAgbV9leGVjdXRvclN0YXR1cyA9IFRl
cm1pbmlhdGlvbkNvbXBsZXRlZDsKKyAgICBtX3Rlcm1pbmF0aW9uQ29tcGxldGVkLnNpZ25hbCgp
OworfQorCitzdGF0aWMgdm9pZCBjYW5jZWxhYmxlRnVuY3Rpb24oRGlzcGF0Y2hTZXJpYWxRdWV1
ZVByaXZhdGUqIHNlcmlhbFF1ZXVlLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikK
K3sKKyAgICBpZiAoVU5MSUtFTFkoc2VyaWFsUXVldWUtPmhhc1Rlcm1pbmF0aW9uQmVndW4oKSkp
CisgICAgICAgIHJldHVybjsKKworICAgIGZ1bmN0aW9uKCk7Cit9CisKK3ZvaWQgRGlzcGF0Y2hT
ZXJpYWxRdWV1ZVByaXZhdGU6OmFzeW5jKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
KQoreworICAgIEFTU0VSVChtX2V4ZWN1dG9yU3RhdHVzID09IFJ1bm5pbmcpOworICAgIG1fc2Vy
aWFsRXhlY3V0b3ItPmV4ZWN1dGUoYmluZChjYW5jZWxhYmxlRnVuY3Rpb24sIHRoaXMsIGZ1bmN0
aW9uKSk7Cit9CisKK2Jvb2wgRGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGU6Omhhc1Rlcm1pbmF0
aW9uQmVndW4oKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V4ZWN1dG9yU3RhdHVzTXV0
ZXgpOworICAgIEFTU0VSVChtX2V4ZWN1dG9yU3RhdHVzICE9IFRlcm1pbmlhdGlvbkNvbXBsZXRl
ZCk7CisgICAgcmV0dXJuIG1fZXhlY3V0b3JTdGF0dXMgPT0gVGVybWluYXRpb25CZWd1bjsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoVEhSRUFESU5HX0xJQkRJ
U1BBVENIKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRGlzcGF0Y2hRdWV1ZVByaXZhdGVH
ZW5lcmljLmggYi9Tb3VyY2UvV1RGL3d0Zi9EaXNwYXRjaFF1ZXVlUHJpdmF0ZUdlbmVyaWMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmU0OWE2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dURi93dGYvRGlzcGF0Y2hRdWV1ZVByaXZhdGVHZW5lcmljLmgKQEAgLTAs
MCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgRGlzcGF0Y2hRdWV1ZVByaXZhdGVHZW5lcmljX2gKKyNkZWZpbmUgRGlz
cGF0Y2hRdWV1ZVByaXZhdGVHZW5lcmljX2gKKworI2lmICFFTkFCTEUoVEhSRUFESU5HX0xJQkRJ
U1BBVENIKQorCisjaW5jbHVkZSAiRGlzcGF0Y2hRdWV1ZS5oIgorCisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIERpc3BhdGNoR2xvYmFsUXVl
dWVQcml2YXRlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEaXNwYXRjaEdsb2JhbFF1ZXVl
UHJpdmF0ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8RGlzcGF0Y2hHbG9iYWxRdWV1ZVByaXZhdGU+IGNyZWF0ZSgpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERpc3BhdGNoR2xvYmFsUXVldWVQcml2YXRl
KCkpOworICAgIH0KKworICAgIH5EaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0ZSgpOworCisgICAg
dm9pZCBhc3luYyhjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisKK3ByaXZhdGU6CisgICAgRGlz
cGF0Y2hHbG9iYWxRdWV1ZVByaXZhdGUoKTsKK307CisKK2NsYXNzIEV4ZWN1dG9yOworCitjbGFz
cyBEaXNwYXRjaFNlcmlhbFF1ZXVlUHJpdmF0ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
RGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPERpc3BhdGNoU2VyaWFsUXVldWVQcml2
YXRlPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEaXNwYXRj
aFNlcmlhbFF1ZXVlUHJpdmF0ZSgpKTsKKyAgICB9CisKKyAgICB+RGlzcGF0Y2hTZXJpYWxRdWV1
ZVByaXZhdGUoKTsKKworICAgIHZvaWQgYXN5bmMoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwor
CisgICAgYm9vbCBoYXNUZXJtaW5hdGlvbkJlZ3VuKCk7CisKK3ByaXZhdGU6CisgICAgRGlzcGF0
Y2hTZXJpYWxRdWV1ZVByaXZhdGUoKTsKKyAgICB2b2lkIGVuc3VyZVRlcm1pbmF0ZSgpOworCisg
ICAgZW51bSBFeGVjdXRvclN0YXR1cyB7IFJ1bm5pbmcsIFRlcm1pbmF0aW9uQmVndW4sIFRlcm1p
bmlhdGlvbkNvbXBsZXRlZCB9OworICAgIE11dGV4IG1fZXhlY3V0b3JTdGF0dXNNdXRleDsKKyAg
ICBFeGVjdXRvclN0YXR1cyBtX2V4ZWN1dG9yU3RhdHVzOworICAgIFRocmVhZENvbmRpdGlvbiBt
X3Rlcm1pbmF0aW9uQ29tcGxldGVkOworCisgICAgRXhlY3V0b3IqIG1fc2VyaWFsRXhlY3V0b3I7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vICFFTkFCTEUoVEhSRUFESU5H
X0xJQkRJU1BBVENIKQorCisjZW5kaWYgLy8gRGlzcGF0Y2hRdWV1ZVByaXZhdGVHZW5lcmljX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Rpc3BhdGNoUXVldWVQcml2YXRlTGliZGlzcGF0
Y2guY3BwIGIvU291cmNlL1dURi93dGYvRGlzcGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk5N2NhZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Rpc3BhdGNoUXVldWVQcml2YXRlTGliZGlzcGF0Y2gu
Y3BwCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkg
MTAwIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFRIUkVB
RElOR19MSUJESVNQQVRDSCkKKworI2luY2x1ZGUgIkRpc3BhdGNoUXVldWVQcml2YXRlTGliZGlz
cGF0Y2guaCIKKworbmFtZXNwYWNlIFdURiB7CisKK0Rpc3BhdGNoR2xvYmFsUXVldWVQcml2YXRl
OjpEaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0ZSgpCit7CisgICAgbV9kaXNwYXRjaFF1ZXVlID0g
ZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZBVUxU
LCAwKTsKK30KKworRGlzcGF0Y2hHbG9iYWxRdWV1ZVByaXZhdGU6On5EaXNwYXRjaEdsb2JhbFF1
ZXVlUHJpdmF0ZSgpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0cnVjdCBG
dW5jdGlvbkJveCB7CisgICAgRnVuY3Rpb25Cb3goY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVu
Y3Rpb24pCisgICAgICAgIDogbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICB7CisgICAgfQorCisg
ICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uOworfTsKKwordm9pZCBEaXNwYXRjaEdsb2Jh
bFF1ZXVlUHJpdmF0ZTo6YXN5bmMoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7
CisgICAgRnVuY3Rpb25Cb3gqIGJveCA9IG5ldyBGdW5jdGlvbkJveChmdW5jdGlvbik7CisgICAg
ZGlzcGF0Y2hfYXN5bmNfZihtX2Rpc3BhdGNoUXVldWUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGJveCksICZEaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0ZTo6aW52b2tlRnVuY3Rpb24pOworfQor
Cit2b2lkIERpc3BhdGNoR2xvYmFsUXVldWVQcml2YXRlOjppbnZva2VGdW5jdGlvbih2b2lkKiBj
b250ZXh0KQoreworICAgIEZ1bmN0aW9uQm94KiBib3ggPSByZWludGVycHJldF9jYXN0PEZ1bmN0
aW9uQm94Kj4oY29udGV4dCk7CisgICAgYm94LT5tX2Z1bmN0aW9uKCk7CisgICAgZGVsZXRlIGJv
eDsKK30KKworRGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGU6OkRpc3BhdGNoU2VyaWFsUXVldWVQ
cml2YXRlKCkKKyAgICA6IG1faGFzVGVybWluYXRpb25CZWd1bihmYWxzZSkKK3sKKyAgICBtX2Rp
c3BhdGNoR3JvdXAgPSBkaXNwYXRjaF9ncm91cF9jcmVhdGUoKTsKKyAgICBtX2Rpc3BhdGNoUXVl
dWUgPSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUoMCwgMCk7Cit9CisKK0Rpc3BhdGNoU2VyaWFsUXVl
dWVQcml2YXRlOjp+RGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGUoKQoreworICAgIHRlcm1pbmF0
ZSgpOworICAgIGRpc3BhdGNoX3JlbGVhc2UobV9kaXNwYXRjaEdyb3VwKTsKKyAgICBkaXNwYXRj
aF9yZWxlYXNlKG1fZGlzcGF0Y2hRdWV1ZSk7Cit9CisKK3ZvaWQgRGlzcGF0Y2hTZXJpYWxRdWV1
ZVByaXZhdGU6OnRlcm1pbmF0ZSgpCit7CisgICAgeworICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9oYXNUZXJtaW5hdGlvbkJlZ3VuTXV0ZXgpOworICAgICAgICBtX2hhc1Rlcm1pbmF0aW9u
QmVndW4gPSB0cnVlOworICAgIH0KKyAgICBkaXNwYXRjaF9ncm91cF93YWl0KG1fZGlzcGF0Y2hH
cm91cCwgRElTUEFUQ0hfVElNRV9GT1JFVkVSKTsKK30KKworc3RydWN0IENhbmNlbGFibGVGdW5j
dGlvbkJveCB7CisgICAgQ2FuY2VsYWJsZUZ1bmN0aW9uQm94KGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mIGZ1bmN0aW9uLCBEaXNwYXRjaFNlcmlhbFF1ZXVlUHJpdmF0ZSogcXVldWUpCisgICAgICAg
IDogbV9mdW5jdGlvbihmdW5jdGlvbikKKyAgICAgICAgLCBtX3F1ZXVlKHF1ZXVlKQorICAgIHsK
KyAgICB9CisKKyAgICBGdW5jdGlvbjx2b2lkKCk+IG1fZnVuY3Rpb247CisgICAgRGlzcGF0Y2hT
ZXJpYWxRdWV1ZVByaXZhdGUqIG1fcXVldWU7Cit9OworCit2b2lkIERpc3BhdGNoU2VyaWFsUXVl
dWVQcml2YXRlOjppbnZva2VGdW5jdGlvbih2b2lkKiBjb250ZXh0KQoreworICAgIENhbmNlbGFi
bGVGdW5jdGlvbkJveCogYm94ID0gcmVpbnRlcnByZXRfY2FzdDxDYW5jZWxhYmxlRnVuY3Rpb25C
b3gqPihjb250ZXh0KTsKKworICAgIGJvb2wgaXNDYW5jZWxlZDsKKyAgICB7CisgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihib3gtPm1fcXVldWUtPm1faGFzVGVybWluYXRpb25CZWd1bk11dGV4
KTsKKyAgICAgICAgaXNDYW5jZWxlZCA9IGJveC0+bV9xdWV1ZS0+bV9oYXNUZXJtaW5hdGlvbkJl
Z3VuOworICAgIH0KKyAgICBpZiAoTElLRUxZKCFpc0NhbmNlbGVkKSkKKyAgICAgICAgYm94LT5t
X2Z1bmN0aW9uKCk7CisKKyAgICBkZWxldGUgYm94OworfQorCit2b2lkIERpc3BhdGNoU2VyaWFs
UXVldWVQcml2YXRlOjphc3luYyhjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sK
KyAgICBBU1NFUlQoIW1faGFzVGVybWluYXRpb25CZWd1bik7CisKKyAgICBDYW5jZWxhYmxlRnVu
Y3Rpb25Cb3gqIGJveCA9IG5ldyBDYW5jZWxhYmxlRnVuY3Rpb25Cb3goZnVuY3Rpb24sIHRoaXMp
OworICAgIGRpc3BhdGNoX2dyb3VwX2FzeW5jX2YobV9kaXNwYXRjaEdyb3VwLCBtX2Rpc3BhdGNo
UXVldWUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJveCksICZEaXNwYXRjaFNlcmlhbFF1ZXVl
UHJpdmF0ZTo6aW52b2tlRnVuY3Rpb24pOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShUSFJFQURJTkdfTElCRElTUEFUQ0gpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9EaXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNoLmggYi9Tb3VyY2UvV1RGL3d0
Zi9EaXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZWM5MDdmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0Rpc3BhdGNoUXVldWVQcml2YXRlTGliZGlzcGF0Y2guaApAQCAtMCwwICsxLDg3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBE
aXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNoX2gKKyNkZWZpbmUgRGlzcGF0Y2hRdWV1ZVBy
aXZhdGVMaWJkaXNwYXRjaF9oCisKKyNpZiBFTkFCTEUoVEhSRUFESU5HX0xJQkRJU1BBVENIKQor
CisjaW5jbHVkZSAiRGlzcGF0Y2hRdWV1ZS5oIgorCisjaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0
Y2guaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV1RGIHsKKwor
Y2xhc3MgRGlzcGF0Y2hHbG9iYWxRdWV1ZVByaXZhdGUgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKERpc3BhdGNoR2xvYmFsUXVldWVQcml2YXRlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxEaXNwYXRjaEdsb2JhbFF1ZXVl
UHJpdmF0ZT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGlz
cGF0Y2hHbG9iYWxRdWV1ZVByaXZhdGUoKSk7CisgICAgfQorCisgICAgfkRpc3BhdGNoR2xvYmFs
UXVldWVQcml2YXRlKCk7CisKKyAgICB2b2lkIGFzeW5jKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4m
KTsKKworcHJpdmF0ZToKKyAgICBEaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0ZSgpOworICAgIHN0
YXRpYyB2b2lkIGludm9rZUZ1bmN0aW9uKHZvaWQqIGNvbnRleHQpOworCisgICAgZGlzcGF0Y2hf
cXVldWVfdCBtX2Rpc3BhdGNoUXVldWU7Cit9OworCitjbGFzcyBEaXNwYXRjaFNlcmlhbFF1ZXVl
UHJpdmF0ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGlzcGF0Y2hTZXJpYWxRdWV1ZVBy
aXZhdGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPERpc3BhdGNoU2VyaWFsUXVldWVQcml2YXRlPiBjcmVhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEaXNwYXRjaFNlcmlhbFF1ZXVlUHJpdmF0ZSgp
KTsKKyAgICB9CisKKyAgICB+RGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGUoKTsKKworICAgIHZv
aWQgYXN5bmMoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworCitwcml2YXRlOgorICAgIERpc3Bh
dGNoU2VyaWFsUXVldWVQcml2YXRlKCk7CisgICAgc3RhdGljIHZvaWQgaW52b2tlRnVuY3Rpb24o
dm9pZCogY29udGV4dCk7CisKKyAgICB2b2lkIHRlcm1pbmF0ZSgpOworCisgICAgZGlzcGF0Y2hf
cXVldWVfdCBtX2Rpc3BhdGNoUXVldWU7CisgICAgZGlzcGF0Y2hfZ3JvdXBfdCBtX2Rpc3BhdGNo
R3JvdXA7CisgICAgTXV0ZXggbV9oYXNUZXJtaW5hdGlvbkJlZ3VuTXV0ZXg7CisgICAgYm9vbCBt
X2hhc1Rlcm1pbmF0aW9uQmVndW47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShUSFJFQURJTkdfTElCRElTUEFUQ0gpCisKKyNlbmRpZiAvLyBEaXNwYXRjaFF1
ZXVlUHJpdmF0ZUxpYmRpc3BhdGNoX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcApp
bmRleCA5MjFkZDNiLi4wYmE2N2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmdQdGhyZWFkcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3Bw
CkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFk
cy5oIgogI2luY2x1ZGUgIlRocmVhZFNwZWNpZmljLmgiCiAjaW5jbHVkZSAiVW51c2VkUGFyYW0u
aCIKKyNpbmNsdWRlIDx3dGYvRGlzcGF0Y2hRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWRE
YXRhLmg+CkBAIC04OSw2ICs5MCw3IEBAIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZygpCiAgICAg
d3RmVGhyZWFkRGF0YSgpOwogICAgIHNfZHRvYVA1TXV0ZXggPSBuZXcgTXV0ZXg7CiAgICAgaW5p
dGlhbGl6ZURhdGVzKCk7CisgICAgRGlzcGF0Y2hRdWV1ZTo6aW5pdGlhbGl6ZURpc3BhdGNoUXVl
dWUoKTsKIH0KIAogdm9pZCBsb2NrQXRvbWljYWxseUluaXRpYWxpemVkU3RhdGljTXV0ZXgoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZ1dpbi5jcHAKaW5kZXggZDMzOTczZC4uNDg1NjdkMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvVGhyZWFkaW5nV2luLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmdXaW4uY3BwCkBAIC05Myw2ICs5Myw3IEBACiAjaW5jbHVkZSAiVGhyZWFkRnVuY3Rpb25J
bnZvY2F0aW9uLmgiCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9EaXNwYXRjaFF1ZXVlLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KQEAgLTE3OSw2ICsxODAsNyBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogICAg
IHd0ZlRocmVhZERhdGEoKTsKICAgICBzX2R0b2FQNU11dGV4ID0gbmV3IE11dGV4OwogICAgIGlu
aXRpYWxpemVEYXRlcygpOworICAgIERpc3BhdGNoUXVldWU6OmluaXRpYWxpemVEaXNwYXRjaFF1
ZXVlKCk7CiB9CiAKIHN0YXRpYyBIYXNoTWFwPERXT1JELCBIQU5ETEU+JiB0aHJlYWRNYXAoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvY2hyb21pdW0vTWFpblRocmVhZENocm9taXVtLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL2Nocm9taXVtL01haW5UaHJlYWRDaHJvbWl1bS5jcHAKaW5kZXgg
OWU2NTkyYi4uYWU1ZmM4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvY2hyb21pdW0vTWFp
blRocmVhZENocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9jaHJvbWl1bS9NYWluVGhy
ZWFkQ2hyb21pdW0uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJBc3NlcnRpb25z
LmgiCiAjaW5jbHVkZSAiQ2hyb21pdW1UaHJlYWRpbmcuaCIKKyNpbmNsdWRlICJGdW5jdGlvbmFs
LmgiCiAjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtNTQsNiAr
NTUsMTggQEAgdm9pZCBjYWxsT25NYWluVGhyZWFkKE1haW5UaHJlYWRGdW5jdGlvbiogZnVuY3Rp
b24sIHZvaWQqIGNvbnRleHQpCiAgICAgQ2hyb21pdW1UaHJlYWRpbmc6OmNhbGxPbk1haW5UaHJl
YWQoZnVuY3Rpb24sIGNvbnRleHQpOwogfQogCitzdGF0aWMgdm9pZCBjYWxsRnVuY3Rpb25PYmpl
Y3Qodm9pZCogY29udGV4dCkKK3sKKyAgICBGdW5jdGlvbjx2b2lkKCk+KiBmdW5jdGlvbiA9IHN0
YXRpY19jYXN0PEZ1bmN0aW9uPHZvaWQoKT4qPihjb250ZXh0KTsKKyAgICAoKmZ1bmN0aW9uKSgp
OworICAgIGRlbGV0ZSBmdW5jdGlvbjsKK30KKwordm9pZCBjYWxsT25NYWluVGhyZWFkKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIGNhbGxPbk1haW5UaHJlYWQoY2Fs
bEZ1bmN0aW9uT2JqZWN0LCBuZXcgRnVuY3Rpb248dm9pZCAoKT4oZnVuY3Rpb24pKTsKK30KKwog
dm9pZCBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChNYWluVGhyZWFkRnVuY3Rpb24qLCB2b2lkKikK
IHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYmFj
MzQ4Yi4uZTFkYWYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTE4MTIsOSArMTgxMiwxMSBA
QCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRh
dGlvbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhcmFsbGVs
SW1hZ2VEZWNvZGVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BhdHRlcm4uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFw
SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRl
ZEZvbnREYXRhLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDliZmRjY2QuLjhiMzFiNDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw0MzIgQEAKKzIwMTItMDctMTkgIEh1YW5nIERvbmdzdW5nICA8bHV4dGVsbGFA
Y29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQWRkIHBhcmFsbGVsIGltYWdlIGRlY29kZXJzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDkzNQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEF1dGhvcmVkIGJ5
IEh1YW5nIERvbmdzdW5nIGFuZCBLd2FuZyBZdWwgU2VvLgorCisgICAgICAgIE1ha2UgaW1hZ2Ug
ZGVjb2Rpbmcgb2ZmIHRoZSBtYWluIHRocmVhZCwgc28gdGhhdCB0aGUgbWFpbiB0aHJlYWQgY2Fu
IHNwZW5kIG1vcmUKKyAgICAgICAgdGltZSBpbiBsb2FkaW5nLCBwYXJzaW5nLCBzY3JpcHRpbmcg
YW5kIGxheW91dCB3aGlsZSBpbWFnZSBkZWNvZGluZyB0aHJlYWRzIGRlY29kZQorICAgICAgICBp
bWFnZXMgaW4gdGhlIGJhY2tncm91bmQuCisKKyAgICAgICAgUmVmZXIgdG8gaHR0cHM6Ly9kb2Nz
Lmdvb2dsZS5jb20vZG9jdW1lbnQvcHViP2lkPTEyZ2Y3TWhOSGZ1cGVSM0dkUkYtaDJWemc4NnZp
Q2J3WHE4X0pCeUhLbGcwCisgICAgICAgIGZvciBkZXRhaWxlZCBleHBsYW5hdGlvbi4KKworICAg
ICAgICBObyBuZXcgdGVzdHMsIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpy
ZXRhaW5lZE1vZGVSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6ZGlkUmVjZWl2ZUZyYW1lQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lSXNDb21wbGV0ZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKEJpdG1hcEltYWdlKTogQml0
bWFwSW1hZ2Ugbm93IGltcGxlbWVudHMgSW1hZ2VTb3VyY2VPYnNlcnZlciBhbmQgcGFzc2VzIGl0
c2VsZgorICAgICAgICB0byBJbWFnZVNvdXJjZSBvbiBjb25zdHJ1Y3Rpb24uIFdoZW4gaW1hZ2Ug
ZGVjb2RpbmcgaXMgZmluaXNoZWQgb3IgYSBjYWNoZWQgaW1hZ2UKKyAgICAgICAgaXMgYXZhaWxh
YmxlLCBJbWFnZVNvdXJjZSBub3RpZmllcyBCaXRtYXBJbWFnZSB2aWEKKyAgICAgICAgSW1hZ2VT
b3VyY2VPYnNlcnZlcjo6ZGlkUmVjZWl2ZUltYWdlRnJhbWVEYXRhKHNpemVfdCwgY29uc3QgSW1h
Z2VGcmFtZURhdGEmKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZmlsZW5hbWVFeHRlbnNpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OmlzU2l6ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZVNvdXJjZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVT
aXplQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6cmVwZXRpdGlvbkNv
dW50KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUNvdW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpyZXF1ZXN0RnJhbWVBdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjpzaG91bGREZWNvZGVQYXJhbGxlbCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6Zmlyc3RGcmFtZUlzQ29tcGxldGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OnBhcmFsbGVsRGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpkaWREZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNy
ZWF0ZVBhcmFsbGVsRGVjb2RlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291
cmNlOjpjbGVhclBhcmFsbGVsRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6c2VyaWFsRGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVG
cmFtZUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEltYWdlU291cmNlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZU9ic2VydmVyLmg6CisgICAgICAgIChJbWFnZVNv
dXJjZU9ic2VydmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdl
RGVjb2Rlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6IE9uY2UgUmV0YWluZWRNb2Rl
Qml0bWFwSW1hZ2UgYW5kIEltYWdlU291cmNlIGRlY2lkZSBpdCBpcyBva2F5IHRvIHVzZQorICAg
ICAgICBwYXJhbGxlbCBpbWFnZSBkZWNvZGVycywgdGhpcyBjbGFzcyBpbnRlcmNlcHRzIGRlY29k
aW5nIHJlcXVlc3RzIGZyb20gSW1hZ2VTb3VyY2UKKyAgICAgICAgYW5kIHBlcmZvcm1zIGltYWdl
IGRlY29kaW5nIG9uIHRoZSBkZWNvZGVyIHRocmVhZC4gSW5zdGVhZCBvZiByZWltcGxlbWVudGlu
ZyBhbGwKKyAgICAgICAgdGhlIGRlY29kZXJzIGZyb20gc2NyYXRjaCwgaXQgcmV1c2VzIHRoZSBl
eGlzdGluZyBpbWFnZSBkZWNvZGVycy4KKyAgICAgICAgKFdlYkNvcmU6OlBhcmFsbGVsSW1hZ2VE
ZWNvZGVyOjpQYXJhbGxlbEltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpQYXJhbGxl
bEltYWdlRGVjb2Rlcjo6flBhcmFsbGVsSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhcmFsbGVsSW1hZ2VEZWNvZGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBh
cmFsbGVsSW1hZ2VEZWNvZGVyOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhcmFs
bGVsSW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBhcmFsbGVsSW1h
Z2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFyYWxsZWxJbWFnZURlY29k
ZXI6OmV4dHJhY3RTZWdtZW50Rm9yVGFzayk6CisgICAgICAgIChQYXJhbGxlbEZyYW1lRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpQYXJhbGxlbEZyYW1lRGF0YTo6UGFyYWxsZWxGcmFtZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6UGFyYWxsZWxGcmFtZURhdGE6On5QYXJhbGxlbEZyYW1lRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpQYXJhbGxlbEltYWdlRGVjb2Rlcjo6ZGVjb2RlVGFzayk6
CisgICAgICAgIChXZWJDb3JlOjpkaWREZWNvZGVUYXNrQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlSW1hZ2VGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UGFyYWxsZWxJ
bWFnZURlY29kZXI6OmRpZERlY29kZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6UGFyYWxsZWxJ
bWFnZURlY29kZXI6OmRpZERlY29kZVBhcnRpYWwpOgorICAgICAgICAoV2ViQ29yZTo6UGFyYWxs
ZWxJbWFnZURlY29kZXI6OmFwcGVuZERlY29kZWREYXRhVG9JbWFnZUZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhcmFsbGVsSW1hZ2VEZWNvZGVyOjpzeW5jSW1hZ2VGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpQYXJhbGxlbEltYWdlRGVjb2Rlcjo6ZGlkRGVjb2RlQ29tcGxldGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhcmFsbGVsSW1hZ2VEZWNvZGVyLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQYXJhbGxlbEltYWdlRGVjb2Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpQYXJhbGxlbEltYWdlRGVjb2Rlcjo6ZmlsZW5hbWVFeHRlbnNpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UGFyYWxsZWxJbWFnZURlY29kZXI6OnNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6UGFyYWxsZWxJbWFnZURlY29kZXI6OnZhbGlkKToKKyAgICAgICAgKEVuY29kZWRE
YXRhU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpQYXJhbGxlbEltYWdlRGVjb2Rlcjo6RW5j
b2RlZERhdGFTZWdtZW50OjpFbmNvZGVkRGF0YVNlZ21lbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1BhcmFsbGVsSW1hZ2VEZWNvZGVyT2JzZXJ2ZXIuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2VPYnNlcnZlci5oLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlBhcmFsbGVsSW1hZ2VEZWNvZGVyT2JzZXJ2ZXI6On5QYXJhbGxl
bEltYWdlRGVjb2Rlck9ic2VydmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZXRh
aW5lZE1vZGVCaXRtYXBJbWFnZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6IEJlY2F1
c2UgaW1hZ2UgZGVjb2RpbmcgaXMgdXNlZCBpbiB2YXJpb3VzIGNvbnRleHRzIGluIFdlYktpdCwg
aXQgaXMgc2ltcGx5CisgICAgICAgIGltcG9zc2libGUgdG8gbWFrZSBhbGwgcGFyYWxsZWwgZGVj
b2RpbmcgcGFyYWxsZWwuIEluc3RlYWQsIHdlIHNlbGVjdGl2ZWx5IHVzZSBwYXJhbGxlbAorICAg
ICAgICBpbWFnZSBkZWNvZGVycyB3aGVyZSBwb3NzaWJsZSBhbmQgdXNlIHRoZSBleGlzdGluZyBz
ZXF1ZW50aWFsIGltYWdlIGRlY29kZXJzIG90aGVyd2lzZS4KKyAgICAgICAgUmV0YWluZWRNb2Rl
Qml0bWFwSW1hZ2Ugd3JhcHMgYSBCaXRtYXBJbWFnZSBhbmQgaGVscHMgZGVjaWRlIHdoZW4gaXQg
aXMgc2FmZSBhbmQgYmVuZWZpY2lhbAorICAgICAgICB0byB1c2UgcGFyYWxsZWwgaW1hZ2UgZGVj
b2RlcnMuCisgICAgICAgIChXZWJDb3JlOjpSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpSZXRhaW5lZE1v
ZGVCaXRtYXBJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXRhaW5lZE1vZGVCaXRtYXBJbWFn
ZTo6aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UmV0YWluZWRN
b2RlQml0bWFwSW1hZ2U6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmV0YWluZWRNb2RlQml0
bWFwSW1hZ2U6OmdldEhvdFNwb3QpOgorICAgICAgICAoV2ViQ29yZTo6UmV0YWluZWRNb2RlQml0
bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJldGFpbmVkTW9kZUJp
dG1hcEltYWdlOjpmaWxlbmFtZUV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXRhaW5l
ZE1vZGVCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpkZWNvZGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6c3RhcnRBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OnN0b3BBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OnJlc2V0QW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6Y3Vy
cmVudEZyYW1lSGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6UmV0YWluZWRNb2RlQml0bWFw
SW1hZ2U6OmN1cnJlbnRGcmFtZUlzQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6UmV0YWlu
ZWRNb2RlQml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6UmV0YWluZWRNb2Rl
Qml0bWFwSW1hZ2U6Om1heUZpbGxXaXRoU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6c29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZXRhaW5lZE1vZGVTYXZlcjo6UmV0YWluZWRNb2RlU2F2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmV0YWluZWRNb2RlU2F2ZXI6On5SZXRhaW5lZE1vZGVTYXZlcik6CisgICAgICAgIChXZWJDb3Jl
Ojp0b1JldGFpbmVkTW9kZUJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUmV0YWlu
ZWRNb2RlQml0bWFwSW1hZ2VJZlBvc3NpYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmV0
YWluZWRNb2RlQml0bWFwSW1hZ2U6On5SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6cmV0YWluZWRNb2RlUmVuZGVyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpiZWdpblJldGFp
bmVkTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6ZW5k
UmV0YWluZWRNb2RlKToKKyAgICAgICAgKFJldGFpbmVkTW9kZVNhdmVyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1h
Z2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnJlcXVlc3RGcmFtZUF0SW5kZXgpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9JbWFnZU9wZW5WRy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6
OkJpdG1hcEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNz
Q29udGV4dDNEU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
Qml0bWFwSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVj
b2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpJbWFnZUZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OnNldFNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6bGFzdERlY29kZWRS
b3cpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0TGFzdERlY29kZWRSb3cpOgor
ICAgICAgICAoSW1hZ2VGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmRh
dGEpOgorICAgICAgICAoSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVj
b2Rlcjo6Zmlyc3RJbWFnZUZyYW1lV2l0aG91dERlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1Q
SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCTVBJ
bWFnZVJlYWRlcjo6ZGVjb2RlQk1QKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVy
Ojpwcm9jZXNzUkxFRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6cHJv
Y2Vzc05vblJMRURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9H
SUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpo
YXZlRGVjb2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmluaXRG
cmFtZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVH
SW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6Om91
dHB1dFNjYW5saW5lcyk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BO
R0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJv
d0F2YWlsYWJsZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFn
ZURlY29kZXJTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNsZWFyUGl4
ZWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFNpemUpOgorICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6cGFpbnRSZXBs
YWNlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6cGFpbnRJbnRvUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6YmFja2dyb3VuZElzT2JzY3VyZWQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVJbWFnZUNvbnRlbnRzKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmg6CisgICAgICAgIChSZW5kZXJMYXllckJhY2tp
bmcpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW1hZ2U6OnBhaW50KToKKworMjAxMi0wOC0wMSAgSHVhbmcg
RG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBSZW5hbWUgY3Jl
YXRlRnJhbWVBdEluZGV4IHRvIHJlcXVlc3RGcmFtZUF0SW5kZXguCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDQ0MworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIEltYWdlU291cmNlIGhhcyBJbWFnZVNv
dXJjZU9ic2VydmVyLCB0aGlzIG1ldGhvZCBzZW5kcyB0aGUgcmVzdWx0IHZpYQorICAgICAgICBk
aWREZWNvZGVGcmFtZUF0SW5kZXgoKS4gT3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRo
ZSByZXN1bHQuCisgICAgICAgIGUuZy4gR3JhcGhpY3NDb250ZXh0M0QKKworICAgICAgICBXaGVu
IGltcGxlbWVudGluZyBwYXJhbGxlbCBpbWFnZSBkZWNvZGVycywgd2Ugd2lsbCBzZW5kcyB0aGUg
TmF0aXZlSW1hZ2VQdHIgdmlhCisgICAgICAgIGRpZERlY29kZUZyYW1lQXRhSW5kZXgoKSBhc3lu
Y2hyb25vdXNseS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSBleGlzdGluZyBpbWFnZSB0ZXN0
cyBjb3ZlciB0aGVzZSBjYXNlcy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkaWREZWNvZGVG
cmFtZUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6
CisgICAgICAgIChCaXRtYXBJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnJlcXVlc3RGcmFt
ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKEltYWdlU291cmNlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZU9ic2VydmVyLmg6CisgICAgICAgIChJbWFnZVNvdXJj
ZU9ic2VydmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFn
ZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWly
by5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNl
OjpyZXF1ZXN0RnJhbWVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW52Zy9JbWFnZU9wZW5WRy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0ltYWdlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcElt
YWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNE
U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6CisKKzIwMTItMDgtMDEgIEFs
cGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgSW1hZ2VTb3VyY2VP
YnNlcnZlciB0byBJbWFnZVNvdXJjZSBhbmQgaW1wbGVtZW50cyBieSBCaXRtYXBJbWFnZS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMzc1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VTb3VyY2VP
YnNlcnZlciBpcyBhZGRlZCB0byBub3RpZnkgQml0bWFwSW1hZ2UgYW4gaW1hZ2UgZnJhbWUgaXMK
KyAgICAgICAgcmVhZHkgd2hlbiBhc3luY2hyb25vdXMgaW1hZ2UgZGVjb2RpbmcgaXMgdXNlZC4K
KworICAgICAgICBUaGUgb2JzZXJ2ZXIganVzdCBuZWVkcyB0byBrbm93IHRoZSBpbmRleCwgQml0
bWFwSW1hZ2UgY2FuIGZldGNoIGFuZAorICAgICAgICBjYWNoZSB0aGUgZnJhbWUgYnkgY2FsbGlu
ZyBjcmVhdGVGcmFtZUF0SW5kZXgoKSBhZ2Fpbi4KKworICAgICAgICBUaGUgaW50ZW50aW9uIG9m
IHRoaXMgY2hhbmdlIGlzIHRvIGhhdmUgSW1hZ2VTb3VyY2UgYmVpbmcgdGhlIG9ubHkKKyAgICAg
ICAgYXN5bmNocm9ub3VzIGludGVyZmFjZS4gSW1hZ2VEZWNvZGVyIGludGVyZmFjZSBzaG91bGQg
c3RheSBzeW5jaHJvbm91cworICAgICAgICB0byBtaW5pbWl6ZSBtdWx0aXBsZSBvZiB0aGVzZSBp
bnRlcmZhY2VzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYWRkaW5nIGEgb2JzZXJ2ZXIgY2xh
c3MgYW5kIG5vdCBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmRpZERlY29kZUZyYW1lQXRJbmRleCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKEJpdG1hcEltYWdlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0VXNlQXN5bmNocm9ub3VzRGVjb2Rpbmcp
OgorICAgICAgICAoSW1hZ2VTb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlU291cmNlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OkltYWdl
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmUpOgorCisyMDEyLTA3LTI2ICBBbHBoYSBMYW0gIDxo
Y2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIG1ldGhvZHMgdG8gQml0bWFwSW1hZ2Ug
dG8gaW5kaWNhdGUgYXN5bmNocm9ub3VzIGltYWdlIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDM3NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBCaXRtYXBJbWFnZTo6c2V0VXNl
QXN5bmNocm9ub3VzRGVjb2RpbmcoKSBhbmQKKyAgICAgICAgQml0bWFwSW1hZ2U6OnVzZUFzeW5j
aHJvbm91c0RlY29kaW5nKCkgdG8gaW5kaWNhdGUgYXN5bmNocm9ub3VzIGRlY29kaW5nCisgICAg
ICAgIGlzIGRlc2lyZWQsIG9yIGFzeW5jaHJvbm91cyBkZWNvZGluZyBzaG91bGQgbmV2ZXIgYmUg
dXNlZC4KKworICAgICAgICBUaGVzZSBtZXRob2RzIGFyZSBhZGRlZCB0byBCaXRtYXBJbWFnZSBi
ZWNhdXNlIGRlY29kaW5nIGlzIG1lYW5pbmdmdWwKKyAgICAgICAgdG8gdGhpcyBjbGFzcy4gVXNl
ciBvZiB0aGVzZSBBUElzIHNob3VsZCBkZXRlY3QgdGhlIGNhc2Ugb2YgQml0bWFwSW1hZ2UKKyAg
ICAgICAgYW5kIGNhbGwgdXNlQXN5bmNocm9ub3VzRGVjb2RpbmcoKSB3aGVuIGRlc2lyZWQuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBhZGRpbmcgbmV3IGZsYWdzIGJ1dCBub3QgdXNlZC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpzZXRVc2VBc3luY2hyb25vdXNEZWNvZGluZyk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjp1c2VBc3luY2hyb25v
dXNEZWNvZGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoK
KyAgICAgICAgKEJpdG1hcEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0VXNlQXN5bmNocm9ub3VzRGVjb2RpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnVzZUFzeW5jaHJvbm91c0RlY29kaW5nKToKKyAgICAg
ICAgKEltYWdlU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNv
dXJjZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpJbWFnZVNvdXJjZSk6
CisKKzIwMTItMDctMjUgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZW1vdmUgY2FsbHMgdG8gZnJhbWVCdWZmZXJBdEluZGV4KCkgaW4gbWV0YWRhdGEgZ2V0dGVy
cyBmb3IgSW1hZ2VTb3VyY2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05MDM3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIGZyYW1lQnVmZmVyQXRJbmRleCgpIHNob3VsZG4ndCBiZSBjYWxsZWQgZm9yIHRo
ZXNlIG1ldGFkYXRhIGdldHRlcnMuCisgICAgICAgIFRoZXkgc2hvdWxkIGJlIGFuc3dlcmVkIGJ5
IGRlY29kZXJzIGRpcmVjdGx5LCBhbmQgZGVwZW5kaW5nIG9uIHRoZQorICAgICAgICBpbWFnZSBm
b3JtYXQgKGNvZGVjKSB0aGVzZSBtZXRhZGF0YSBmdW5jdGlvbnMgY2FuIGNvbXBsZXRlIHdpdGhv
dXQKKyAgICAgICAgYSBmdWxsIGRlY29kZS4KKworICAgICAgICBGb3IgZXhhbXBsZSBmcmFtZUR1
cmF0aW9uQXRJbmRleCgpIGlzIG9ubHkgbWVhbmluZ2Z1bCBmb3IgR0lGIGFuZAorICAgICAgICBn
ZXR0aW5nIGR1cmF0aW9uIGRvZXNuJ3QgcmVxdWlyZSBhIGZ1bGwgZGVjb2RlZC4gVGhlIHNhbWUg
Z29lcyBmb3IKKyAgICAgICAgZnJhbWVIYXNBbHBoYUF0SW5kZXgoKSwgbW9zdCBpbWFnZSBmb3Jt
YXRzIGRvZXNuJ3QgaGF2ZSBhbHBoYSBjaGFuZWwKKyAgICAgICAgYW5kIHRodXMgcGVyZm9ybWlu
ZyBhIGZ1bGwgZGVjb2RlIGlzIG5vdCBuZWNlc3NhcnkuCisKKyAgICAgICAgVGhlIHVsdGltYXRl
IGdvYWwgaXMgdG8gZG8gYXMgbGl0dGxlIGZ1bGwgZGVjb2RlIGFzIHBvc3NpYmxlIGFuZCBzbwor
ICAgICAgICBnaXZpbmcgdGhlIHJlc3BvbnNpYmlsaXRpZXMgdG8gaW5kaXZpZHVhbCBkZWNvZGVy
IHRvIGFuc3dlciB0aGVzZQorICAgICAgICBtZXRhZGF0YSBtZXRob2QgY2FsbHMgYWxsb3dzIG9w
dGltaXphdGlvbiBmb3IgZWFjaCBpbWFnZSBmb3JtYXQuCisKKyAgICAgICAgQW5vdGhlciBlZmZv
cnQgb2YgdGhpcyBwYXRjaCBpcyB0aGF0IGZyYW1lQnVmZmVyQXRJbmRleCgpIGlzIGNhbGxlZAor
ICAgICAgICBvbmx5IGlmIGEgZnJhbWUgaXMgcmVhbGx5IG5lZWRlZCwgZm9yIGV4YW1wbGUgZm9y
IHJlbmRlcmluZy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yaW5nIG5vIGNoYW5n
ZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgp
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUhh
c0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lSXND
b21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5oOgorICAgICAgICAoSW1hZ2VEZWNvZGVyKToKKworMjAxMi0wNy0yNSAgQWxwaGEg
TGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbW92ZSBjYWxscyB0byBlbnN1
cmVGcmFtZUlzQ2FjaGVkKCkgaW4gbWV0YWRhdGEgZ2V0dGVycyBmb3IgQml0bWFwSW1hZ2UuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDM3NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGVuc3VyZUZyYW1l
SXNDYWNoZWQoKSBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgQml0bWFwSW1hZ2U6OmZyYW1lQXRJ
bmRleCgpLgorICAgICAgICBUaGVzZSBtZXRhZGF0YSBnZXR0ZXJzIHNob3VsZCBjYWxsIGRpcmVj
dGx5IHRvIEltYWdlU291cmNlLiBGZXRjaGluZworICAgICAgICB0aGVzZSBtZXRhZGF0YSBzaG91
bGRuJ3QgcmVxdWlyZSBhIGZ1bGwgaW1hZ2UgZGVjb2RpbmcsIEltYWdlU291cmNlCisgICAgICAg
IGFuZCBJbWFnZURlY29kZXIgc2hvdWxkIGRvIHRoZSBiZXN0IGVmZm9ydCB0byBub3QgZGVjb2Rl
IGFuZCBmZXRjaAorICAgICAgICB0aGVzZSBpbmZvcm1hdGlvbiBmcm9tIGhlYWRlci4KKworICAg
ICAgICBPbmUgZWZmZWN0IG9mIHRoaXMgcGF0Y2ggaXMgdGhlIHJlc3VsdCBvZiB0aGVzZSBtZXRh
ZGF0YSBhY2Nlc3NvcnMKKyAgICAgICAgYXJlIG5vdCBjYWNoZWQsIGl0IHNob3VsZCBiZSB0aGUg
am9iIG9mIHRoZSBkZWNvZGVyIHRvIGNhY2hlIHRoZW0KKyAgICAgICAgaW50ZXJuYWxseS4KKwor
ICAgICAgICBPbmx5IHdoZW4gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSBpcyBjYWxsZWQg
d291bGQgdGhlc2UgbWV0YWRhdGEKKyAgICAgICAgYmUgY2FjaGVkLiBUaGlzIGlzIGNvcnJlY3Q6
IGFmdGVyIGEgZnJhbWUgaXMgY2FjaGVkIGluIEJpdG1hcEltYWdlIGFuZAorICAgICAgICBJbWFn
ZVNvdXJjZSBpcyBjbGVhcmVkIHdlIHdhbnQgdG8gY29udGludWUgdXNpbmcgdGhlIGZyYW1lIHdp
dGggYWxsCisgICAgICAgIHRoZSBtZXRhZGF0YS4KKworICAgICAgICBUaGlzIGNoYW5nZSBwYXNz
ZWQgbGF5b3V0IHRlc3RzIHdpdGhvdXQgZXJyb3IuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBq
dXN0IHJlZmFjdG9yaW5nIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
ZnJhbWVIYXNBbHBoYUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZy
YW1lT3JpZW50YXRpb25BdEluZGV4KToKKworMjAxMi0wNy0yNSAgQWxwaGEgTGFtICA8aGNsYW1A
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbW92ZSBkZXN0cm95RGVjb2RlZERhdGEoKSBhbmQg
ZGVjb2RlZFNpemUoKSBmcm9tIEltYWdlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTAzNzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNb3ZlIGRlc3Ryb3lEZWNvZGVkRGF0YSgpIGFuZCBkZWNvZGVkU2l6
ZSgpIGZyb20gSW1hZ2UgdG8gQml0bWFwSW1hZ2UuCisgICAgICAgIEltYWdlOjpkZXN0cm95RGVj
b2RlZERhdGEoKSBhbmQgSW1hZ2U6OmRlY29kZWRTaXplKCkgYXJlIG5vdCB1c2VkIGFuZAorICAg
ICAgICBub3QgaW1wbGVtZW50ZWQgb3RoZXIgdGhhbiBpbiBCaXRtYXBJbWFnZS4KKworICAgICAg
ICBPdGhlciBpbXBsZW1lbnRhdGlvbnMgb2YgSW1hZ2UgZG8gbm90IGhhdmUgYSBjb25jZXB0IG9m
IGRlY29kZWRTaXplKCkKKyAgICAgICAgYW5kIGl0IHNob3VsZCBiZSByZXBvcnRlZCB0aHJvdWdo
IEltYWdlT2JzZXJ2ZXI6OmRlY29kZWRTaXplQ2hhbmdlZCgpCisgICAgICAgIGFueXdheS4KKwor
ICAgICAgICBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKCkgaXMgb25seSB1c2VkIGluIENhY2hl
ZEltYWdlIGFuZCBvbmx5CisgICAgICAgIGltcGxlbWVudGVkIGluIEJpdG1hcEltYWdlLCB0aGlz
IHNob3VsZCBiZSBvbmx5IHRocm91Z2ggYSBzdGF0aWNfY2FzdAorICAgICAgICB0byBCaXRtYXBJ
bWFnZS4KKworICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAoQml0bWFwSW1hZ2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaDoKKyAgICAgICAgKEltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUERGRG9jdW1lbnRJbWFnZS5oOgorICAgICAgICAoUERGRG9jdW1lbnRJbWFnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0Lmg6CisgICAgICAgIChTdGls
bEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2lu
Z2xlRnJhbWVTa2lhLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1h
cEltYWdlU2luZ2xlRnJhbWVTa2lhLmg6CisgICAgICAgIChCaXRtYXBJbWFnZVNpbmdsZUZyYW1l
U2tpYSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5D
RS5jcHA6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmg6CisgICAgICAgIChTVkdJ
bWFnZSk6CisKIDIwMTItMDgtMDEgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5j
b20+CiAKICAgICAgICAgSW5kZXhlZERCOiBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjptX21ldGFE
YXRhVHlwZSBzaG91bGQgdXNlIGJ5dGUgdHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
aW5kZXggNGI0Njc0My4uMDNhOTg4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBA
IC0zMjQxLDYgKzMyNDEsMTEgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Rhc2hBcnJheS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9FeHRlbnNpb25zM0QuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGFyYWxsZWxJbWFnZURlY29kZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1JldGFpbmVkTW9kZUJpdG1hcEltYWdlLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0
aWVzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9V
dGlsaXRpZXMuaCBcCkBAIC0zNDA5LDYgKzM0MTQsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZU9ic2VydmVyLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ludFBvaW50SGFzaC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbnRSZWN0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA2YjdlYTM3Li45ZmU3OWI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKQEAgLTk3MiwxMCArOTcyLDEyIEBAIFNPVVJDRVMgKz0gXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3Bw
IFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlci5jcHAgXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRo
VHJhdmVyc2FsU3RhdGUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9S
b3VuZGVkUmVjdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRh
LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgXApAQCAtMjA5Mywx
NiArMjA5NSwyMSBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5o
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmggXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlT2JzZXJ2ZXIuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnRIYXNoLmggXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0ludFJlY3QuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaCBcCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuaCBcCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUGFyYWxsZWxJbWFnZURlY29kZXIuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGFy
YWxsZWxJbWFnZURlY29kZXJPYnNlcnZlci5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRo
LmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5oIFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtTGF5ZXIuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmggXAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1JldGFpbmVkTW9kZUJpdG1hcEltYWdlLmggXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1JvdW5kZWRSZWN0LmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTmF0aXZlSW1hZ2VR
dC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBkMGNmYTExLi5jZGJlODEwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0zODksNiArMzg5LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZU9ic2VydmVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT3Jp
ZW50YXRpb24uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2VPYnNlcnZlci5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludEhhc2guaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oJywKQEAgLTM1MzUsMTEgKzM1MzYsMTYgQEAKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvUGFyYWxsZWxJbWFnZURlY29kZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9QYXRoVHJhdmVyc2FsU3RhdGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9QYXRoVHJhdmVyc2FsU3RhdGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0dGVybi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1JldGFpbmVkTW9kZUJpdG1hcEltYWdl
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFw
SW1hZ2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmgnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA5MTMw
ZTA5Li5hM2MyM2EzIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagpAQCAtMjk1MDYsNiArMjk1MDYsMTAgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJ
CQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEltYWdlU291
cmNlT2JzZXJ2ZXIuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXEludFBvaW50LmgiCiAJCQkJCT4KIAkJCQk8
L0ZpbGU+CkBAIC0yOTU0Miw2ICsyOTU0NiwxOCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJ
CTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcUGFyYWxsZWxJ
bWFnZURlY29kZXIuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcUGFyYWxsZWxJbWFnZURlY29kZXIuaCIK
KwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXGdyYXBoaWNzXFBhcmFsbGVsSW1hZ2VEZWNvZGVyT2JzZXJ2ZXIuaCIKKwkJCQkJPgor
CQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdy
YXBoaWNzXFBhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CkBAIC0y
OTU3MCw2ICsyOTU4NiwxNCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcUmV0YWluZWRNb2RlQml0bWFwSW1h
Z2UuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaCIKKwkJCQkJ
PgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3Jt
XGdyYXBoaWNzXFJvdW5kZWRSZWN0LmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyZWE0
ZjMzLi5iYWU3Y2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0xNDM1LDYgKzE0MzUsOCBAQAogCQk0QjMwNDNDRDBBRTAzNzNC
MDBBODI2NDcgLyogRWRpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QjMwNDNDQjBBRTAzNzNCMDBBODI2NDcgLyogRWRpdG9yLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNEIzNDgwOTMwRUVGNTBE
NDAwQUMxQjQxIC8qIEltYWdlU291cmNlQ0dNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjM0ODA5MTBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VT
b3VyY2VDR01hYy5tbSAqLzsgfTsKIAkJNEIzNDgwOTQwRUVGNTBENDAwQUMxQjQxIC8qIEltYWdl
U291cmNlQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggKi87IH07CisJCTVC
MzQ4MDkzMEVFRjUwRDQwMEFDMUI0MSAvKiBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QjM0ODA5MTBFRUY1
MEQ0MDBBQzFCNDEgLyogUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuY3BwICovOyB9OworCQk1QjM0
ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyogUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCMzQ4MDkyMEVFRjUwRDQw
MEFDMUI0MSAvKiBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5oICovOyB9OwogCQk0QjZGQTZGNDBD
MzlFNDhDMDAwODcwMTEgLyogU21hcnRSZXBsYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjZGQTZGMjBDMzlFNDhDMDAwODcwMTEgLyogU21hcnRS
ZXBsYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNEI2RkE2RjUwQzM5RTQ4QzAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjZGQTZGMzBDMzlFNDhDMDAw
ODcwMTEgLyogU21hcnRSZXBsYWNlLmNwcCAqLzsgfTsKIAkJNEI2RkE2RjcwQzM5RTRBMTAwMDg3
MDExIC8qIFNtYXJ0UmVwbGFjZUNGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDRCNkZBNkY2MEMzOUU0QTEwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2VD
Ri5jcHAgKi87IH07CkBAIC00ODI1LDYgKzQ4MjcsNyBAQAogCQlCMjc1MzU2RjBCMDUzODE0MDAy
Q0U2NEYgLyogSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjI3NTM1NDEwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlLmNwcCAqLzsgfTsKIAkJ
QjI3NTM1NzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0MjBCMDUzODE0MDAyQ0U2NEYgLyogSW1h
Z2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlC
Mjc1MzU3MTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQzMEIwNTM4MTQwMDJDRTY0RiAv
KiBJbWFnZVNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUIyNzUzNTcxMEIwNTM4MTQwMDJDRTY0RSAvKiBJbWFnZVNvdXJjZU9ic2VydmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0
MzBCMDUzODE0MDAyQ0U2NEUgLyogSW1hZ2VTb3VyY2VPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUIyNzUzNTcyMEIwNTM4MTQwMDJD
RTY0RiAvKiBJbnRQb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjI3NTM1NDQwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI3NTM1NzMwQjA1Mzgx
NDAwMkNFNjRGIC8qIEludFJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjI3NTM1NDUwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3QuY3BwICov
OyB9OwogCQlCMjc1MzU3NDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDYwQjA1MzgxNDAwMkNF
NjRGIC8qIEludFJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtODU2Niw2ICs4NTY5LDggQEAKIAkJNEIzMDQzQ0IwQUUwMzczQjAwQTgyNjQ3
IC8qIEVkaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWRpdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCMzQ4MDkxMEVFRjUwRDQwMEFDMUI0MSAv
KiBJbWFnZVNvdXJjZUNHTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gSW1hZ2VTb3VyY2VDR01hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NEIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIEltYWdlU291cmNlQ0cuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VTb3VyY2VDRy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1QjM0ODA5MTBFRUY1MEQ0MDBBQzFCNDEgLyogUmV0YWluZWRNb2RlQml0bWFw
SW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmV0YWlu
ZWRNb2RlQml0bWFwSW1hZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QjM0
ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEI2RkE2RjIwQzM5RTQ4QzAwMDg3MDExIC8qIFNt
YXJ0UmVwbGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbWFydFJlcGxh
Y2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEI2RkE2RjMwQzM5RTQ4QzAwMDg3
MDExIC8qIFNtYXJ0UmVwbGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTbWFydFJlcGxhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QjZG
QTZGNjBDMzlFNEExMDAwODcwMTEgLyogU21hcnRSZXBsYWNlQ0YuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU21hcnRSZXBsYWNlQ0YuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTIwNTcsNiArMTIwNjIsNyBAQAogCQlCMjc1MzU0MTBCMDUzODE0
MDAyQ0U2NEYgLyogSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDIwQjA1
MzgxNDAwMkNFNjRGIC8qIEltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzU0MzBCMDUzODE0
MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEltYWdlU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIyNzUzNTQz
MEIwNTM4MTQwMDJDRTY0RSAvKiBJbWFnZVNvdXJjZU9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVNvdXJjZU9ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyNzUzNTQ0MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50UG9pbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDUwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludFJlY3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzU0NjBCMDUzODE0MDAyQ0U2NEYgLyogSW50
UmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50UmVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk2NjQsNiArMTk2NzAsOCBAQAogCQkJCUE4MEEz
OEZEMEU1MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJCUIyNzUzNTM2MEIw
NTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlCMjc1MzUzNzBC
MDUzODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCTVCMzQ4MDkxMEVF
RjUwRDQwMEFDMUI0MSAvKiBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5jcHAgKi8sCisJCQkJNUIz
NDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlLmggKi8sCiAJ
CQkJQjI3NTM1MkEwQjA1MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3Bw
ICovLAogCQkJKTsKIAkJCXBhdGggPSBjZzsKQEAgLTE5ODA5LDYgKzE5ODE3LDcgQEAKIAkJCQlB
ODc0OEQ2NjEyQ0MzNzYzMDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5oICovLAogCQkJCTQ5
MjkxRTRBMTM0MTcyQzgwMEU3NTNERSAvKiBJbWFnZVJlbmRlcmluZ01vZGUuaCAqLywKIAkJCQlC
Mjc1MzU0MzBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2UuaCAqLywKKwkJCQlCMjc1MzU0
MzBCMDUzODE0MDAyQ0U2NEUgLyogSW1hZ2VTb3VyY2VPYnNlcnZlci5oICovLAogCQkJCUIyNzUz
NTQ0MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludC5oICovLAogCQkJCUU0NjJBNEEwMTEzRTcx
QkUwMDRBNDIyMCAvKiBJbnRQb2ludEhhc2guaCAqLywKIAkJCQlCMjc1MzU0NTBCMDUzODE0MDAy
Q0U2NEYgLyogSW50UmVjdC5jcHAgKi8sCkBAIC0yMzU3Miw2ICsyMzU4MSw3IEBACiAJCQkJMkQ1
QTU5MzExNTI1MjVEMDAwMzZFRTUxIC8qIEltYWdlT3JpZW50YXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTQ5MjkxRTRCMTM0MTcyQzgwMEU3NTNERSAvKiBJbWFnZVJlbmRlcmluZ01vZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyNzUzNTcxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJj
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjI3NTM1NzEwQjA1MzgxNDAwMkNFNjRFIC8qIEltYWdl
U291cmNlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTRCMzQ4MDk0MEVFRjUwRDQwMEFD
MUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTZGRTExODBFNkUx
REE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCURC
MjNDMkNDMEE1MDhEMjkwMDI0ODlFQiAvKiBJbmRlbnRPdXRkZW50Q29tbWFuZC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yNDY0MCw2ICsyNDY1MCw3IEBACiAJCQkJN0VFNjg0NkYxMkQyNkUzODAwRTc5
NDE1IC8qIFJlc291cmNlUmVxdWVzdENGTmV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUU2ODQ3
MDEyRDI2RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTE0Qzc2N0YwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1QjM0ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyogUmV0YWluZWRNb2Rl
Qml0bWFwSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MEE1MTJCMDI2RjcwMEMxQTM1
OSAvKiBSZXZlcmIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MEE3MTJCMDI2RjcwMEMxQTM1
OSAvKiBSZXZlcmJBY2N1bXVsYXRpb25CdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2
MEE5MTJCMDI2RjcwMEMxQTM1OSAvKiBSZXZlcmJDb252b2x2ZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtMjc4MzUsNiArMjc4NDYsNyBAQAogCQkJCTUxNEM3NjdFMENFOTIzQTEwMDdFRjNDRCAvKiBS
ZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RUU2ODQ3MTEyRDI2
RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VSZXNwb25zZUNGTmV0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxNEM3NjU1MENFOTIzNEYwMDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJNUIzNDgwOTMwRUVGNTBENDAwQUMxQjQxIC8qIFJldGFpbmVkTW9k
ZUJpdG1hcEltYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MEE0MTJCMDI2RjcwMEMx
QTM1OSAvKiBSZXZlcmIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwQTYxMkIwMjZGNzAw
QzFBMzU5IC8qIFJldmVyYkFjY3VtdWxhdGlvbkJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGRDMxNjBBODEyQjAyNkY3MDBDMUEzNTkgLyogUmV2ZXJiQ29udm9sdmVyLmNwcCBpbiBTb3Vy
Y2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZElt
YWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKaW5k
ZXggMzEzNDc1Yy4uY2MxYzJhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkSW1hZ2UuY3BwCkBAIC00MDMsOCArNDAzLDggQEAgdm9pZCBDYWNoZWRJbWFnZTo6ZGVzdHJv
eURlY29kZWREYXRhKCkKICAgICAgICAgc2V0RGVjb2RlZFNpemUoMCk7CiAgICAgICAgIGlmICgh
TWVtb3J5Q2FjaGU6OnNob3VsZE1ha2VSZXNvdXJjZVB1cmdlYWJsZU9uRXZpY3Rpb24oKSkKICAg
ICAgICAgICAgIG1ha2VQdXJnZWFibGUodHJ1ZSk7Ci0gICAgfSBlbHNlIGlmIChtX2ltYWdlICYm
ICFlcnJvck9jY3VycmVkKCkpCi0gICAgICAgIG1faW1hZ2UtPmRlc3Ryb3lEZWNvZGVkRGF0YSgp
OworICAgIH0gZWxzZSBpZiAobV9pbWFnZSAmJiBtX2ltYWdlLT5pc0JpdG1hcEltYWdlKCkgJiYg
IWVycm9yT2NjdXJyZWQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8Qml0bWFwSW1hZ2UqPihtX2lt
YWdlLmdldCgpKS0+ZGVzdHJveURlY29kZWREYXRhKCk7CiB9CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6
OmRlY29kZWRTaXplQ2hhbmdlZChjb25zdCBJbWFnZSogaW1hZ2UsIGludCBkZWx0YSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCA0
NTQ2MGY4Li43MmRlOTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuY3BwCkBAIC00NSw2ICs0NSw3IEBAIHN0YXRpYyBpbnQgZnJhbWVCeXRl
cyhjb25zdCBJbnRTaXplJiBmcmFtZVNpemUpCiAKIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShJ
bWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQorICAgICwgbV9z
b3VyY2UodGhpcykKICAgICAsIG1fY3VycmVudEZyYW1lKDApCiAgICAgLCBtX2ZyYW1lcygwKQog
ICAgICwgbV9mcmFtZVRpbWVyKDApCkBAIC02Myw2ICs2NCw3IEBAIEJpdG1hcEltYWdlOjpCaXRt
YXBJbWFnZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICAsIG1fc2l6ZUF2YWlsYWJsZShm
YWxzZSkKICAgICAsIG1faGFzVW5pZm9ybUZyYW1lU2l6ZSh0cnVlKQogICAgICwgbV9oYXZlRnJh
bWVDb3VudChmYWxzZSkKKyAgICAsIG1faXNDYWNoaW5nRnJhbWUoZmFsc2UpCiB7CiB9CiAKQEAg
LTEyOSwxMiArMTMxLDMzIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lNZXRhZGF0YUFuZE5v
dGlmeShpbnQgZnJhbWVzQ2xlYXJlZCkKIHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6
ZV90IGluZGV4KQogewogICAgIHNpemVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7Ci0gICAg
QVNTRVJUKG1fZGVjb2RlZFNpemUgPT0gMCB8fCBudW1GcmFtZXMgPiAxKTsKLSAgICAKICAgICBp
ZiAobV9mcmFtZXMuc2l6ZSgpIDwgbnVtRnJhbWVzKQogICAgICAgICBtX2ZyYW1lcy5ncm93KG51
bUZyYW1lcyk7CiAKLSAgICBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSA9IG1fc291cmNlLmNyZWF0
ZUZyYW1lQXRJbmRleChpbmRleCk7CisgICAgbV9zb3VyY2UucmVxdWVzdEZyYW1lQXRJbmRleChp
bmRleCwgcmV0YWluZWRNb2RlUmVuZGVyaW5nKCkpOworfQorCitib29sIEJpdG1hcEltYWdlOjpy
ZXRhaW5lZE1vZGVSZW5kZXJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3JldGFpbmVkTW9k
ZUltYWdlLmdldCgpICYmIG1fcmV0YWluZWRNb2RlSW1hZ2UtPnJldGFpbmVkTW9kZVJlbmRlcmlu
ZygpOworfQorCit2b2lkIEJpdG1hcEltYWdlOjpkaWREZWNvZGVGcmFtZUF0SW5kZXgoc2l6ZV90
IGluZGV4LCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSwgYm9vbCByZXRhaW5lZCwgYm9vbCBw
YXJhbGxlbERlY29kZXJDYW5jZWxlZCkKK3sKKyAgICAvLyBJdCBpcyBwb3NzaWJsZSB0byBjYWxs
IGNhY2hlRnJhbWUgaW5kaXJlY3RseSBpbiB0aGlzIG1ldGhvZC4KKyAgICBSZXRhaW5lZE1vZGVT
YXZlciByZXRhaW5lZE1vZGVTYXZlcihtX3JldGFpbmVkTW9kZUltYWdlLmdldCgpLCByZXRhaW5l
ZCk7CisKKyAgICAvLyBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSBtdXN0IGJlIGNsZWFyZWQgYmVm
b3JlIGl0IGlzIHJlcGxhY2VkIHdpdGggbmV3IGRlY29kZWQgZnJhbWUuCisgICAgLy8gSWYgd2Ug
Zm9yZ2V0IHRvIGNsZWFyIG1fZnJhbWUsIHRoZSBvbGQgbV9mcmFtZSBsZWFrcy4KKyAgICAvLyBT
ZWUgQml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkIGZvciBleHBsYW5hdGlvbiB3aHkgdGhlIGRlY29k
ZWQgZnJhbWUgbXVzdCBiZSByZW1vdmVkIGhlcmUuCisgICAgaW50IGZyYW1lc0NsZWFyZWQgPSAw
OworICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSkKKyAgICAgICAgZnJhbWVzQ2xlYXJl
ZCArPSAobV9mcmFtZXNbaW5kZXhdLmNsZWFyKHRydWUpID8gMSA6IDApOworICAgIGRlc3Ryb3lN
ZXRhZGF0YUFuZE5vdGlmeShmcmFtZXNDbGVhcmVkKTsKKworICAgIG1fZnJhbWVzW2luZGV4XS5t
X2ZyYW1lID0gbmF0aXZlSW1hZ2U7CisKKyAgICBzaXplX3QgbnVtRnJhbWVzID0gZnJhbWVDb3Vu
dCgpOwogICAgIGlmIChudW1GcmFtZXMgPT0gMSAmJiBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSkK
ICAgICAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7CiAKQEAgLTE1NSw4ICsxNzgsMTIgQEAgdm9p
ZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgpCiAgICAgICAgIC8vIHRvIGRl
dGVybWluZSBpbWFnZSBwcm9wZXJ0aWVzLgogICAgICAgICBkZWx0YUJ5dGVzIC09IG1fZGVjb2Rl
ZFByb3BlcnRpZXNTaXplOwogICAgICAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSA9IDA7Ci0g
ICAgICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgIGlmIChpbWFnZU9ic2VydmVyKCkp
IHsKICAgICAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2VkKHRoaXMs
IGRlbHRhQnl0ZXMpOworCisgICAgICAgICAgICBpZiAoKG1fZnJhbWVzW2luZGV4XS5tX2lzQ29t
cGxldGUgJiYgcmV0YWluZWQpIHx8IHBhcmFsbGVsRGVjb2RlckNhbmNlbGVkKQorICAgICAgICAg
ICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+Y2hhbmdlZEluUmVjdCh0aGlzLCBJbnRSZWN0KEludFBv
aW50KCksIHNpemUoKSkpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0yNDEsOCArMjY4LDE0
IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKQog
ICAgICAgICAvLyBOT1RFOiBEb24ndCBjYWxsIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoKSBoZXJl
LCB0aGF0IHdpbGwgdHJ5IHRvCiAgICAgICAgIC8vIGRlY29kZSBhbnkgdW5jYWNoZWQgKGkuZS4g
bmV2ZXItZGVjb2RlZCBvcgogICAgICAgICAvLyBjbGVhcmVkLW9uLWEtcHJldmlvdXMtcGFzcykg
ZnJhbWVzIQotICAgICAgICBpZiAobV9mcmFtZXNbaV0ubV9oYXZlTWV0YWRhdGEgJiYgIW1fZnJh
bWVzW2ldLm1faXNDb21wbGV0ZSkKKyAgICAgICAgLy8gTk9URTogRG9uJ3QgY2xlYXIgdGhlIGN1
cnJlbnQgZnJhbWUsIGJlY2F1c2UgdGhlIGZyYW1lIG1pZ2h0IGhhdmUgYmVlbiBkZWNvZGVkCisg
ICAgICAgIC8vIGluIHJldGFpbmVkIG1vZGUgYW5kIFJlbmRlckltYWdlIGhhc24ndCByZW5kZXIg
dGhpcyBkZWNvZGVkIGltYWdlIHlldC4KKyAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgZnJhbWUg
aXMgcmVtb3ZlZCBoZXJlLCB0aGUgaW1hZ2UgZWxlbWVudCB3aWxsIGJlIHJlbmRlcmVkIGFzIHdo
aXRlIGJveC4KKyAgICAgICAgLy8gVGhlIGN1cnJlbnQgZnJhbWUgd2lsbCBiZSByZW1vdmVkIGxh
dGVyIHdoZW4gcmV0YWluZWQgbW9kZSBkZWNvZGluZyBpcyBmaW5pc2hlZC4KKyAgICAgICAgaWYg
KG1fZnJhbWVzW2ldLm1fZnJhbWUgJiYgIW1fZnJhbWVzW2ldLm1faXNDb21wbGV0ZSAmJiBtX2N1
cnJlbnRGcmFtZSAhPSBpKSB7CisgICAgICAgICAgICBBU1NFUlQobV9mcmFtZXNbaV0ubV9oYXZl
TWV0YWRhdGEpOwogICAgICAgICAgICAgZnJhbWVzQ2xlYXJlZCArPSAobV9mcmFtZXNbaV0uY2xl
YXIodHJ1ZSkgPyAxIDogMCk7CisgICAgICAgIH0KICAgICB9CiAgICAgZGVzdHJveU1ldGFkYXRh
QW5kTm90aWZ5KGZyYW1lc0NsZWFyZWQpOwogICAgIApAQCAtMjg5LDggKzMyMiwxOCBAQCBib29s
IEJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRleCkKICAgICBpZiAo
aW5kZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAo
aW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZSkKKyAg
ICBpZiAobV9pc0NhY2hpbmdGcmFtZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBt
X2ZyYW1lIGNhbiBleGlzdCB3aGVuIG1faXNDb21wbGV0ZSBpcyBmYWxzZSwgc28gd2UgbmVlZCB0
byBjYWNoZSBhIG5ldyBmcmFtZSBldmVuIGlmIG1fZnJhbWUgZXhpc3RzLgorICAgIC8vIFNlZSBC
aXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQgZm9yIGV4cGxhbmF0aW9uLgorICAgIGJvb2wgbmVlZFRv
Q2FjaGUgPSBpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5tX2Zy
YW1lIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9pc0NvbXBsZXRlOworICAgIGlmIChuZWVkVG9DYWNo
ZSkgeworICAgICAgICBtX2lzQ2FjaGluZ0ZyYW1lID0gdHJ1ZTsKICAgICAgICAgY2FjaGVGcmFt
ZShpbmRleCk7CisgICAgICAgIG1faXNDYWNoaW5nRnJhbWUgPSBmYWxzZTsKKyAgICB9CisKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzAzLDE2ICszNDYsMjMgQEAgTmF0aXZlSW1hZ2VQdHIg
Qml0bWFwSW1hZ2U6OmZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCiAKIGJvb2wgQml0bWFwSW1h
Z2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5z
dXJlRnJhbWVJc0NhY2hlZChpbmRleCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gbV9mcmFtZXNbaW5kZXhdLm1faXNDb21wbGV0ZTsKKyAgICBpZiAoaW5kZXggPCBtX2ZyYW1l
cy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKQorICAgICAgICByZXR1
cm4gbV9mcmFtZXNbaW5kZXhdLm1faXNDb21wbGV0ZTsKKyAgICByZXR1cm4gbV9zb3VyY2UuZnJh
bWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCk7Cit9CisKK2Jvb2wgQml0bWFwSW1hZ2U6OmN1cnJl
bnRGcmFtZUlzQ29tcGxldGUoKQoreworICAgIHJldHVybiBmcmFtZUlzQ29tcGxldGVBdEluZGV4
KG1fY3VycmVudEZyYW1lKTsKIH0KIAogZmxvYXQgQml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25B
dEluZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5k
ZXgpKQorICAgIGlmIChpbmRleCA8IG1fZnJhbWVzLnNpemUoKSAmJiBtX2ZyYW1lc1tpbmRleF0u
bV9oYXZlTWV0YWRhdGEpCisgICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlv
bjsKKyAgICBpZiAocmVwZXRpdGlvbkNvdW50KGZhbHNlKSA9PSBjQW5pbWF0aW9uTm9uZSkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2R1cmF0aW9uOwor
ICAgIHJldHVybiBtX3NvdXJjZS5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7CiB9CiAKIE5h
dGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCkBA
IC0zMjIsMTEgKzM3Miw5IEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpCiAKIGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdElu
ZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICAvLyBXaGVuIGEgZnJhbWUgaGFzIG5vdCBmaW5pc2hl
ZCBkZWNvZGluZywgYWx3YXlzIG1hcmsgaXQgYXMgaGF2aW5nIGFscGhhLgotICAgIC8vIFNlZSBJ
bWFnZVNvdXJjZTo6ZnJhbWVoYXNBbHBoYUF0SW5kZXggZm9yIGV4cGxhbmF0aW9uIG9mIHdoeSBp
bmNvbXBsZXRlIGltYWdlcyBjbGFpbSB0byBoYXZlIGFscGhhLgotICAgIGlmICghZW5zdXJlRnJh
bWVJc0NhY2hlZChpbmRleCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBtX2Zy
YW1lc1tpbmRleF0ubV9oYXNBbHBoYTsKKyAgICBpZiAoaW5kZXggPCBtX2ZyYW1lcy5zaXplKCkg
JiYgbV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKQorICAgICAgICByZXR1cm4gbV9mcmFt
ZXNbaW5kZXhdLm1faGFzQWxwaGE7CisgICAgcmV0dXJuIG1fc291cmNlLmZyYW1lSGFzQWxwaGFB
dEluZGV4KGluZGV4KTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lSGFzQWxw
aGEoKQpAQCAtMzQxLDkgKzM4OSw5IEBAIEltYWdlT3JpZW50YXRpb24gQml0bWFwSW1hZ2U6OmN1
cnJlbnRGcmFtZU9yaWVudGF0aW9uKCkKIAogSW1hZ2VPcmllbnRhdGlvbiBCaXRtYXBJbWFnZTo6
ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJl
RnJhbWVJc0NhY2hlZChpbmRleCkpCi0gICAgICAgIHJldHVybiBEZWZhdWx0SW1hZ2VPcmllbnRh
dGlvbjsKLSAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1fb3JpZW50YXRpb247CisgICAgaWYg
KGluZGV4IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5tX2hhdmVNZXRhZGF0
YSkKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX29yaWVudGF0aW9uOworICAgIHJl
dHVybiBtX3NvdXJjZS5vcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOwogfQogCiAjaWYgIUFTU0VS
VF9ESVNBQkxFRApAQCAtMzUzLDggKzQwMSw2IEBAIGJvb2wgQml0bWFwSW1hZ2U6Om5vdFNvbGlk
Q29sb3IoKQogfQogI2VuZGlmCiAKLQotCiBpbnQgQml0bWFwSW1hZ2U6OnJlcGV0aXRpb25Db3Vu
dChib29sIGltYWdlS25vd25Ub0JlQ29tcGxldGUpCiB7CiAgICAgaWYgKChtX3JlcGV0aXRpb25D
b3VudFN0YXR1cyA9PSBVbmtub3duKSB8fCAoKG1fcmVwZXRpdGlvbkNvdW50U3RhdHVzID09IFVu
Y2VydGFpbikgJiYgaW1hZ2VLbm93blRvQmVDb21wbGV0ZSkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IGY1YmZlYjEuLjgyOWE2MWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApA
QCAtMzEsNyArMzEsOSBAQAogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIK
ICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2VPYnNl
cnZlci5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJSZXRhaW5lZE1vZGVCaXRt
YXBJbWFnZS5oIgogCiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KQEAgLTczLDcgKzc1LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fZHVyYXRpb24oMCkKICAg
ICAgICAgLCBtX2hhdmVNZXRhZGF0YShmYWxzZSkKICAgICAgICAgLCBtX2lzQ29tcGxldGUoZmFs
c2UpCi0gICAgICAgICwgbV9oYXNBbHBoYSh0cnVlKSAKKyAgICAgICAgLCBtX2hhc0FscGhhKHRy
dWUpCiAgICAgewogICAgIH0KIApAQCAtOTgsMTEgKzEwMCwxMyBAQCBwdWJsaWM6CiAvLyBCaXRt
YXBJbWFnZSBDbGFzcwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQogCi1jbGFzcyBCaXRtYXBJbWFnZSA6IHB1YmxpYyBJbWFnZSB7CitjbGFzcyBC
aXRtYXBJbWFnZSA6IHB1YmxpYyBJbWFnZSwgcHVibGljIEltYWdlU291cmNlT2JzZXJ2ZXIgewor
ICAgIGZyaWVuZCBjbGFzcyBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTsKICAgICBmcmllbmQgY2xh
c3MgR2VuZXJhdGVkSW1hZ2U7CiAgICAgZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZElt
YWdlOwogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZTsKICAgICBmcmll
bmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OworICAgIGZyaWVuZCBSZXRhaW5lZE1vZGVCaXRtYXBJ
bWFnZSogdG9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZShJbWFnZSopOwogcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEJpdG1hcEltYWdlPiBjcmVhdGUoTmF0aXZlSW1hZ2VQdHIgbmF0aXZl
SW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyID0gMCkKICAgICB7CkBAIC0xMzIsNyArMTM2
LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3RvcEFuaW1hdGlvbigpOwogICAgIHZp
cnR1YWwgdm9pZCByZXNldEFuaW1hdGlvbigpOwogCi0gICAgdmlydHVhbCB1bnNpZ25lZCBkZWNv
ZGVkU2l6ZSgpIGNvbnN0OworICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRh
LiAgV2hlbiB8ZGVzdHJveUFsbHwgaXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKKyAgICAvLyB0aGUgZW50
aXJlIGZyYW1lIGJ1ZmZlciBjYWNoZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ry
b3kKKyAgICAvLyBldmVyeXRoaW5nOyB0aGlzIGlzIHVzZWQgd2hlbiBlLmcuIHdlIHdhbnQgdG8g
ZnJlZSBzb21lIHJvb20gaW4gdGhlIGltYWdlCisgICAgLy8gY2FjaGUuICBJZiB8ZGVzdHJveUFs
bHwgaXMgZmFsc2UsIHdlIG9ubHkgZGVsZXRlIGZyYW1lcyB1cCB0byB0aGUgY3VycmVudAorICAg
IC8vIG9uZTsgdGhpcyBpcyB1c2VkIHdoaWxlIGFuaW1hdGluZyBsYXJnZSBpbWFnZXMgdG8ga2Vl
cCBtZW1vcnkgZm9vdHByaW50CisgICAgLy8gbG93IHdpdGhvdXQgcmVkZWNvZGluZyB0aGUgd2hv
bGUgaW1hZ2Ugb24gZXZlcnkgZnJhbWUuCisgICAgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9v
bCBkZXN0cm95QWxsID0gdHJ1ZSk7CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgLy8gQWNjZXNz
b3JzIGZvciBuYXRpdmUgaW1hZ2UgZm9ybWF0cy4KQEAgLTE3MSwxNCArMTgxLDE3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CiAgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QpOwogICAgIHZpcnR1YWwg
Ym9vbCBjdXJyZW50RnJhbWVIYXNBbHBoYSgpOworICAgIGJvb2wgY3VycmVudEZyYW1lSXNDb21w
bGV0ZSgpOwogCiAgICAgSW1hZ2VPcmllbnRhdGlvbiBjdXJyZW50RnJhbWVPcmllbnRhdGlvbigp
OwotICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90KTsK
IAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXJ0dWFsIGJvb2wgbm90U29saWRDb2xvcigp
OwogI2VuZGlmCiAKKyAgICAvLyBJbWFnZVNvdXJjZU9ic2VydmVyCisgICAgdmlydHVhbCB2b2lk
IGRpZERlY29kZUZyYW1lQXRJbmRleChzaXplX3QsIE5hdGl2ZUltYWdlUHRyID0gMCwgYm9vbCBy
ZXRhaW5lZCA9IGZhbHNlLCBib29sIHBhcmFsbGVsRGVjb2RlckNhbmNlbGVkID0gZmFsc2UpOwor
CiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlU2l6ZSgpIGNvbnN0OwogCkBAIC0yMTMsMjAgKzIy
NiwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgTmF0aXZlSW1hZ2VQdHIgZnJhbWVBdEluZGV4KHNpemVf
dCk7CiAgICAgYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCk7CiAgICAgZmxvYXQg
ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KTsKKyAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1l
T3JpZW50YXRpb25BdEluZGV4KHNpemVfdCk7CisKKyAgICB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgp
IGNvbnN0OwogCiAgICAgLy8gRGVjb2RlcyBhbmQgY2FjaGVzIGEgZnJhbWUuIE5ldmVyIGFjY2Vz
c2VkIGV4Y2VwdCBpbnRlcm5hbGx5LgogICAgIHZvaWQgY2FjaGVGcmFtZShzaXplX3QgaW5kZXgp
OwogICAgIC8vIENhbGxlZCBiZWZvcmUgYWNjZXNzaW5nIG1fZnJhbWVzW2luZGV4XS4gUmV0dXJu
cyBmYWxzZSBvbiBpbmRleCBvdXQgb2YgYm91bmRzLgogICAgIGJvb2wgZW5zdXJlRnJhbWVJc0Nh
Y2hlZChzaXplX3QgaW5kZXgpOwogCi0gICAgLy8gQ2FsbGVkIHRvIGludmFsaWRhdGUgY2FjaGVk
IGRhdGEuICBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAotICAgIC8vIHRo
ZSBlbnRpcmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2UgdG8g
ZGVzdHJveQotICAgIC8vIGV2ZXJ5dGhpbmc7IHRoaXMgaXMgdXNlZCB3aGVuIGUuZy4gd2Ugd2Fu
dCB0byBmcmVlIHNvbWUgcm9vbSBpbiB0aGUgaW1hZ2UKLSAgICAvLyBjYWNoZS4gIElmIHxkZXN0
cm95QWxsfCBpcyBmYWxzZSwgd2Ugb25seSBkZWxldGUgZnJhbWVzIHVwIHRvIHRoZSBjdXJyZW50
Ci0gICAgLy8gb25lOyB0aGlzIGlzIHVzZWQgd2hpbGUgYW5pbWF0aW5nIGxhcmdlIGltYWdlcyB0
byBrZWVwIG1lbW9yeSBmb290cHJpbnQKLSAgICAvLyBsb3cgd2l0aG91dCByZWRlY29kaW5nIHRo
ZSB3aG9sZSBpbWFnZSBvbiBldmVyeSBmcmFtZS4KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURl
Y29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCA9IHRydWUpOwotCiAgICAgLy8gSWYgdGhlIGltYWdl
IGlzIGxhcmdlIGVub3VnaCwgY2FsbHMgZGVzdHJveURlY29kZWREYXRhKCkgYW5kIHBhc3Nlcwog
ICAgIC8vIHxkZXN0cm95QWxsfCBhbG9uZy4KICAgICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YUlm
TmVjZXNzYXJ5KGJvb2wgZGVzdHJveUFsbCk7CkBAIC0yNjksNiArMjc3LDggQEAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgYm9vbCBtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKTsKICAgICB2aXJ0dWFs
IENvbG9yIHNvbGlkQ29sb3IoKSBjb25zdDsKICAgICAKKyAgICBib29sIHJldGFpbmVkTW9kZVJl
bmRlcmluZygpIGNvbnN0OworCiAgICAgSW1hZ2VTb3VyY2UgbV9zb3VyY2U7CiAgICAgbXV0YWJs
ZSBJbnRTaXplIG1fc2l6ZTsgLy8gVGhlIHNpemUgdG8gdXNlIGZvciB0aGUgb3ZlcmFsbCBpbWFn
ZSAod2lsbCBqdXN0IGJlIHRoZSBzaXplIG9mIHRoZSBmaXJzdCBpbWFnZSkuCiAgICAgbXV0YWJs
ZSBJbnRTaXplIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbjsKQEAgLTI5Myw2ICszMDMsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6
ZTsgLy8gVGhlIHNpemUgb2YgZGF0YSBkZWNvZGVkIGJ5IHRoZSBzb3VyY2UgdG8gZGV0ZXJtaW5l
IGltYWdlIHByb3BlcnRpZXMgKGUuZy4gc2l6ZSwgZnJhbWUgY291bnQsIGV0YykuCiAgICAgc2l6
ZV90IG1fZnJhbWVDb3VudDsKIAorICAgIFJlZlB0cjxSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZT4g
bV9yZXRhaW5lZE1vZGVJbWFnZTsKKwogICAgIGJvb2wgbV9pc1NvbGlkQ29sb3IgOiAxOyAvLyBX
aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYSAxeDEgc29saWQgaW1hZ2UuCiAgICAgYm9vbCBtX2NoZWNr
ZWRGb3JTb2xpZENvbG9yIDogMTsgLy8gV2hldGhlciB3ZSd2ZSBjaGVja2VkIHRoZSBmcmFtZSBm
b3Igc29saWQgY29sb3IuCiAKQEAgLTMwMyw2ICszMTUsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9v
bCBtX3NpemVBdmFpbGFibGUgOiAxOyAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBjYW4gb2J0YWluIHRo
ZSBzaXplIG9mIHRoZSBmaXJzdCBpbWFnZSBmcmFtZSB5ZXQgZnJvbSBJbWFnZUlPLgogICAgIG11
dGFibGUgYm9vbCBtX2hhc1VuaWZvcm1GcmFtZVNpemUgOiAxOwogICAgIG11dGFibGUgYm9vbCBt
X2hhdmVGcmFtZUNvdW50IDogMTsKKworICAgIGJvb2wgbV9pc0NhY2hpbmdGcmFtZSA6IDE7CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5l
cmF0ZWRJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVk
SW1hZ2UuaAppbmRleCBiZWMzNDNjLi42MTYzMTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgKQEAgLTQ2LDEwICs0Niw2IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
OyB9CiAKLSAgICAvLyBBc3N1bWUgdGhhdCBnZW5lcmF0ZWQgY29udGVudCBoYXMgbm8gZGVjb2Rl
ZCBkYXRhIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURl
Y29kZWREYXRhKGJvb2wgLypkZXN0cm95QWxsKi8gPSB0cnVlKSB7IH0KLSAgICB2aXJ0dWFsIHVu
c2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4gMDsgfQotCiBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvcikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCmluZGV4IGJhOTUzZjUuLmUyNzBkMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAtMTA2LDEzICsxMDYsOSBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIGdldEhvdFNwb3QoSW50UG9pbnQmKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogCiAgICAgYm9vbCBzZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBib29s
IGFsbERhdGFSZWNlaXZlZCk7Ci0gICAgdmlydHVhbCBib29sIGRhdGFDaGFuZ2VkKGJvb2wgLyph
bGxEYXRhUmVjZWl2ZWQqLykgeyByZXR1cm4gZmFsc2U7IH0KICAgICAKICAgICB2aXJ0dWFsIFN0
cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9IC8vIG51
bGwgc3RyaW5nIGlmIHVua25vd24KIAotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERh
dGEoYm9vbCBkZXN0cm95QWxsID0gdHJ1ZSkgPSAwOwotICAgIHZpcnR1YWwgdW5zaWduZWQgZGVj
b2RlZFNpemUoKSBjb25zdCA9IDA7Ci0KICAgICBTaGFyZWRCdWZmZXIqIGRhdGEoKSB7IHJldHVy
biBtX2RhdGEuZ2V0KCk7IH0KIAogICAgIC8vIEFuaW1hdGlvbiBiZWdpbnMgd2hlbmV2ZXIgc29t
ZW9uZSBkcmF3cyB0aGUgaW1hZ2UsIHNvIHN0YXJ0QW5pbWF0aW9uKCkgaXMgbm90IG5vcm1hbGx5
IGNhbGxlZC4KQEAgLTE3Niw2ICsxNzIsNyBAQCBwcm90ZWN0ZWQ6CiAjaWYgUExBVEZPUk0oV0lO
KQogICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJhbWVNYXRjaGluZ1NvdXJjZVNpemUoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXpl
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpIHsgfQogI2Vu
ZGlmCisgICAgdmlydHVhbCBib29sIGRhdGFDaGFuZ2VkKGJvb2wgLyphbGxEYXRhUmVjZWl2ZWQq
LykgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBDb21wb3NpdGVPcGVyYXRvciwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtKTsKICAgICB2
b2lkIGRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4IDc1ZWQ1
YTEuLmFmZTk0NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5jcHAKQEAgLTMyLDE2ICszMiwzMCBAQAogI2luY2x1ZGUgIkltYWdlRGVjb2Rl
ci5oIgogCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgorI2luY2x1ZGUgIkltYWdlU291
cmNlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBh
cmFsbGVsSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSA8d3RmL051bWJlck9mQ29yZXMuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgY29uc3QgaW50IHNfcmVzb2x1dGlvblRocmVz
aG9sZEZvclBhcmFsbGVsID0gMzAwICogMzAwOworCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJf
RE9XTl9TQU1QTElORykKIHVuc2lnbmVkIEltYWdlU291cmNlOjpzX21heFBpeGVsc1BlckRlY29k
ZWRJbWFnZSA9IDEwMjQgKiAxMDI0OwogI2VuZGlmCiAKIEltYWdlU291cmNlOjpJbWFnZVNvdXJj
ZShJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKICAgICA6
IG1fZGVjb2RlcigwKQorICAgICwgbV9vYnNlcnZlcigwKQorICAgICwgbV9hbHBoYU9wdGlvbihh
bHBoYU9wdGlvbikKKyAgICAsIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24oZ2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb24pCit7Cit9CisKK0ltYWdlU291cmNlOjpJbWFnZVNvdXJjZShJbWFn
ZVNvdXJjZU9ic2VydmVyKiBvYnNlcnZlciwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhh
T3B0aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRD
b2xvclByb2ZpbGVPcHRpb24pCisgICAgOiBtX2RlY29kZXIoMCkKKyAgICAsIG1fb2JzZXJ2ZXIo
b2JzZXJ2ZXIpCiAgICAgLCBtX2FscGhhT3B0aW9uKGFscGhhT3B0aW9uKQogICAgICwgbV9nYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbihnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKIHsKQEAg
LTYwLDYgKzc0LDEwIEBAIHZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyKGJvb2wgZGVzdHJveUFsbCwg
c2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUsIFNoYXJlZEJ1ZmZlcioKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAorICAgIC8vIFdlIG11c3QgcmVtb3ZlIG1fcGFyYWxsZWxEZWNvZGVyIGJlZm9yZSBt
X2RlY29kZXIsIGJlY2F1c2UgbV9wYXJhbGxlbERlY29kZXIgcmVmZXJzIHRvIG1fZGVjb2Rlci4K
KyAgICBpZiAobV9wYXJhbGxlbERlY29kZXIuZ2V0KCkpCisgICAgICAgIGNsZWFyUGFyYWxsZWxE
ZWNvZGVyKCk7CisKICAgICBkZWxldGUgbV9kZWNvZGVyOwogICAgIG1fZGVjb2RlciA9IDA7CiAg
ICAgaWYgKGRhdGEpCkBAIC03Nyw2ICs5NSw3IEBAIHZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEo
U2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICAvLyBUaGlzIG1l
dGhvZCB3aWxsIGV4YW1pbmUgdGhlIGRhdGEgYW5kIGluc3RhbnRpYXRlIGFuIGluc3RhbmNlIG9m
IHRoZSBhcHByb3ByaWF0ZSBkZWNvZGVyIHBsdWdpbi4KICAgICAvLyBJZiBpbnN1ZmZpY2llbnQg
Ynl0ZXMgYXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5cGUsIG5vIGRlY29k
ZXIgcGx1Z2luIHdpbGwgYmUKICAgICAvLyBtYWRlLgorCiAgICAgaWYgKCFtX2RlY29kZXIpIHsK
ICAgICAgICAgbV9kZWNvZGVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VTb3VyY2VQdHI+KElt
YWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhLCBtX2FscGhhT3B0aW9uLCBtX2dhbW1hQW5kQ29sb3JQ
cm9maWxlT3B0aW9uKSk7CiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykK
QEAgLTEzNyw4ICsxNTYsOTkgQEAgc2l6ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50KCkgY29u
c3QKICAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCkgOiAwOwog
fQogCitOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6cmVxdWVzdEZyYW1lQXRJbmRleChzaXpl
X3QgaW5kZXgsIGJvb2wgcmV0YWluZWRNb2RlUmVuZGVyaW5nKQoreworICAgIEFTU0VSVCghKHJl
dGFpbmVkTW9kZVJlbmRlcmluZyAmJiBpbmRleCkpOworICAgIEFTU0VSVCghKHJldGFpbmVkTW9k
ZVJlbmRlcmluZyAmJiAhbV9vYnNlcnZlcikpOworCisgICAgaWYgKCFtX2RlY29kZXIpIHsKKyAg
ICAgICAgbV9vYnNlcnZlci0+ZGlkRGVjb2RlRnJhbWVBdEluZGV4KGluZGV4KTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFyZXRhaW5lZE1vZGVSZW5kZXJpbmcgfHwgIW1f
b2JzZXJ2ZXIgfHwgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkpCisgICAgICAgIHJldHVy
biBzZXJpYWxEZWNvZGUoaW5kZXgpOworCisgICAgaWYgKHNob3VsZERlY29kZVBhcmFsbGVsKCkp
IHsKKyAgICAgICAgcGFyYWxsZWxEZWNvZGUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgcmV0dXJuIHNlcmlhbERlY29kZShpbmRleCk7Cit9CisKK2Jvb2wgSW1hZ2VTb3VyY2U6
OnNob3VsZERlY29kZVBhcmFsbGVsKCkKK3sKKyAgICBBU1NFUlQobV9kZWNvZGVyKTsKKworICAg
IGlmIChtX3BhcmFsbGVsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBpZiAoV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVzKCkgPT0gMSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgU3RyaW5nIGZpbGVFeHQgPSBmaWxlbmFtZUV4dGVuc2lvbigpOworICAg
IGlmIChmaWxlRXh0ID09ICJpY28iIHx8IGZpbGVFeHQgPT0gImdpZiIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmICghaXNTaXplQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChzaXplKCkuYXJlYSgpIDwgc19yZXNvbHV0aW9uVGhyZXNob2xkRm9y
UGFyYWxsZWwpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIEltYWdlU291cmNlOjpwYXJhbGxlbERlY29kZSgpCit7CisgICAgY3JlYXRlUGFyYWxs
ZWxEZWNvZGVySWZOZWVkZWQoKTsKKyAgICBtX3BhcmFsbGVsRGVjb2Rlci0+ZGVjb2RlKCk7Cit9
CisKK3ZvaWQgSW1hZ2VTb3VyY2U6OmRpZERlY29kZShOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFn
ZVB0cikKK3sKKyAgICBBU1NFUlQobV9vYnNlcnZlcik7CisgICAgbV9vYnNlcnZlci0+ZGlkRGVj
b2RlRnJhbWVBdEluZGV4KDAsIG5hdGl2ZUltYWdlUHRyLCB0cnVlKTsKKworICAgIGlmIChmcmFt
ZUlzQ29tcGxldGVBdEluZGV4KDApICYmIG1fcGFyYWxsZWxEZWNvZGVyLmdldCgpKQorICAgICAg
ICBjbGVhclBhcmFsbGVsRGVjb2RlcigpOworfQorCit2b2lkIEltYWdlU291cmNlOjpjcmVhdGVQ
YXJhbGxlbERlY29kZXJJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX3BhcmFsbGVsRGVjb2RlcikK
KyAgICAgICAgbV9wYXJhbGxlbERlY29kZXIgPSBhZG9wdFJlZihuZXcgUGFyYWxsZWxJbWFnZURl
Y29kZXIodGhpcywgbV9kZWNvZGVyLCBtX2FscGhhT3B0aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9m
aWxlT3B0aW9uKSk7Cit9CisKK3ZvaWQgSW1hZ2VTb3VyY2U6OmNsZWFyUGFyYWxsZWxEZWNvZGVy
KCkKK3sKKyAgICBBU1NFUlQobV9vYnNlcnZlcik7CisgICAgbV9wYXJhbGxlbERlY29kZXItPmlu
dmFsaWRhdGUoKTsKKyAgICBtX3BhcmFsbGVsRGVjb2Rlci5jbGVhcigpOworfQorCitOYXRpdmVJ
bWFnZVB0ciBJbWFnZVNvdXJjZTo6c2VyaWFsRGVjb2RlKHNpemVfdCBpbmRleCkKK3sKKyAgICBi
b29sIHBhcmFsbGVsRGVjb2RlckNhbmNlbGVkID0gZmFsc2U7CisgICAgLy8gUmVuZGVySW1hZ2Ug
YW5kIENhbnZhc0VsZW1lbnQgY2FuIHNoYXJlIHRoZSBzYW1lIENhY2hlZEltYWdlLgorICAgIGlm
IChtX3BhcmFsbGVsRGVjb2Rlci5nZXQoKSkgeworICAgICAgICBBU1NFUlQobV9vYnNlcnZlcik7
CisgICAgICAgIGNsZWFyUGFyYWxsZWxEZWNvZGVyKCk7CisgICAgICAgIHBhcmFsbGVsRGVjb2Rl
ckNhbmNlbGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFn
ZVB0ciA9IGNyZWF0ZUZyYW1lQXRJbmRleChpbmRleCk7CisKKyAgICBpZiAobV9vYnNlcnZlcikK
KyAgICAgICAgbV9vYnNlcnZlci0+ZGlkRGVjb2RlRnJhbWVBdEluZGV4KGluZGV4LCBuYXRpdmVJ
bWFnZVB0ciwgZmFsc2UgLyogcmV0YWluZWRNb2RlICovLCBwYXJhbGxlbERlY29kZXJDYW5jZWxl
ZCk7CisKKyAgICByZXR1cm4gbmF0aXZlSW1hZ2VQdHI7Cit9CisKIE5hdGl2ZUltYWdlUHRyIElt
YWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogeworICAgIEFTU0VS
VCghbV9wYXJhbGxlbERlY29kZXIpOwogICAgIGlmICghbV9kZWNvZGVyKQogICAgICAgICByZXR1
cm4gMDsKIApAQCAtMTYxLDE1ICsyNzEsMTEgQEAgZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVy
YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKICAgICBpZiAoIW1fZGVjb2RlcikKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVm
ZmVyQXRJbmRleChpbmRleCk7Ci0gICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9
PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KQotICAgICAgICByZXR1cm4gMDsKLQogICAgIC8vIE1h
bnkgYW5ub3lpbmcgYWRzIHNwZWNpZnkgYSAwIGR1cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxh
c2ggYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KICAgICAvLyBXZSBmb2xsb3cgRmlyZWZveCdzIGJl
aGF2aW9yIGFuZCB1c2UgYSBkdXJhdGlvbiBvZiAxMDAgbXMgZm9yIGFueSBmcmFtZXMgdGhhdCBz
cGVjaWZ5CiAgICAgLy8gYSBkdXJhdGlvbiBvZiA8PSAxMCBtcy4gU2VlIDxyZGFyOi8vcHJvYmxl
bS83Njg5MzAwPiBhbmQgPGh0dHA6Ly93ZWJraXQub3JnL2IvMzYwODI+CiAgICAgLy8gZm9yIG1v
cmUgaW5mb3JtYXRpb24uCi0gICAgY29uc3QgZmxvYXQgZHVyYXRpb24gPSBidWZmZXItPmR1cmF0
aW9uKCkgLyAxMDAwLjBmOworICAgIGNvbnN0IGZsb2F0IGR1cmF0aW9uID0gbV9kZWNvZGVyLT5m
cmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCkgLyAxMDAwLjBmOwogICAgIGlmIChkdXJhdGlvbiA8
IDAuMDExZikKICAgICAgICAgcmV0dXJuIDAuMTAwZjsKICAgICByZXR1cm4gZHVyYXRpb247CkBA
IC0xOTEsMTYgKzI5NywxNCBAQCBib29sIEltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRl
eChzaXplX3QgaW5kZXgpCiAgICAgLy8gVE9ETzogUGVyaGFwcyB3ZSBzaG91bGQgZW5zdXJlIHRo
YXQgZWFjaCBpbmRpdmlkdWFsIGRlY29kZXIgcmV0dXJucyB0cnVlCiAgICAgLy8gaW4gdGhpcyBj
YXNlLgogICAgIHJldHVybiAhZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkKLSAgICAgICAg
fHwgbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpLT5oYXNBbHBoYSgpOworICAg
ICAgICB8fCBtX2RlY29kZXItPmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsKIH0KIAogYm9v
bCBJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAg
ICAgaWYgKCFtX2RlY29kZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEltYWdlRnJh
bWUqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKLSAgICBy
ZXR1cm4gYnVmZmVyICYmIGJ1ZmZlci0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21w
bGV0ZTsKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5mcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmgKaW5kZXggOTEzYTNlNy4uMjRkNWE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC0yOCw3MCArMjgsMzYgQEAKICNkZWZpbmUg
SW1hZ2VTb3VyY2VfaAogCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgorI2luY2x1ZGUg
Ik5hdGl2ZUltYWdlUHRyLmgiCisjaWYgIVVTRShDRykKKyNpbmNsdWRlICJQYXJhbGxlbEltYWdl
RGVjb2Rlck9ic2VydmVyLmgiCisjZW5kaWYKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi0j
aWYgUExBVEZPUk0oV1gpCi1jbGFzcyB3eEJpdG1hcDsKLWNsYXNzIHd4R3JhcGhpY3NCaXRtYXA7
Ci0jZWxpZiBVU0UoQ0cpCisjaWYgVVNFKENHKQogdHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZVNvdXJj
ZSogQ0dJbWFnZVNvdXJjZVJlZjsKLXR5cGVkZWYgc3RydWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7
CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGRGF0YSogQ0ZEYXRhUmVmOwotI2VsaWYgUExBVEZP
Uk0oUVQpCi0jaW5jbHVkZSA8cWdsb2JhbC5oPgotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBR
SW1hZ2U7Ci1RVF9FTkRfTkFNRVNQQUNFCi0jZWxpZiBVU0UoQ0FJUk8pCi0jaW5jbHVkZSAiTmF0
aXZlSW1hZ2VDYWlyby5oIgotI2VsaWYgVVNFKFNLSUEpCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1j
bGFzcyBOYXRpdmVJbWFnZVNraWE7Ci19Ci0jZWxpZiBPUyhXSU5DRSkKLSNpbmNsdWRlICJTaGFy
ZWRCaXRtYXAuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEltYWdl
T3JpZW50YXRpb247CitjbGFzcyBJbWFnZVNvdXJjZU9ic2VydmVyOwogY2xhc3MgSW50UG9pbnQ7
CiBjbGFzcyBJbnRTaXplOworI2lmICFVU0UoQ0cpCitjbGFzcyBQYXJhbGxlbEltYWdlRGVjb2Rl
cjsKKyNlbmRpZgogY2xhc3MgU2hhcmVkQnVmZmVyOwogCiAjaWYgVVNFKENHKQogdHlwZWRlZiBD
R0ltYWdlU291cmNlUmVmIE5hdGl2ZUltYWdlU291cmNlUHRyOwotdHlwZWRlZiBDR0ltYWdlUmVm
IE5hdGl2ZUltYWdlUHRyOwotI2VsaWYgUExBVEZPUk0oT1BFTlZHKQotY2xhc3MgSW1hZ2VEZWNv
ZGVyOwotY2xhc3MgVGlsZWRJbWFnZU9wZW5WRzsKLXR5cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRp
dmVJbWFnZVNvdXJjZVB0cjsKLXR5cGVkZWYgVGlsZWRJbWFnZU9wZW5WRyogTmF0aXZlSW1hZ2VQ
dHI7CiAjZWxzZQogY2xhc3MgSW1hZ2VEZWNvZGVyOwogdHlwZWRlZiBJbWFnZURlY29kZXIqIE5h
dGl2ZUltYWdlU291cmNlUHRyOwotI2lmIFBMQVRGT1JNKFdYKQotI2lmIFVTRShXWEdDKQotdHlw
ZWRlZiB3eEdyYXBoaWNzQml0bWFwKiBOYXRpdmVJbWFnZVB0cjsKLSNlbHNlCi10eXBlZGVmIHd4
Qml0bWFwKiBOYXRpdmVJbWFnZVB0cjsKLSNlbmRpZgotI2VsaWYgVVNFKENBSVJPKQotdHlwZWRl
ZiBXZWJDb3JlOjpOYXRpdmVJbWFnZUNhaXJvKiBOYXRpdmVJbWFnZVB0cjsKLSNlbGlmIFVTRShT
S0lBKQotdHlwZWRlZiBXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWEqIE5hdGl2ZUltYWdlUHRyOwot
I2VsaWYgT1MoV0lOQ0UpCi10eXBlZGVmIFJlZlB0cjxTaGFyZWRCaXRtYXA+IE5hdGl2ZUltYWdl
UHRyOwotI2VsaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLWNsYXNzIEltYWdlRGVjb2RlcjsKLXR5
cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKLXR5cGVkZWYgdm9pZCog
TmF0aXZlSW1hZ2VQdHI7Ci0jZWxpZiBQTEFURk9STShRVCkKLXR5cGVkZWYgUUltYWdlKiBOYXRp
dmVJbWFnZVB0cjsKLSNlbmRpZgogI2VuZGlmCiAKIC8vIFJpZ2h0IG5vdyBHSUZzIGFyZSB0aGUg
b25seSByZWNvZ25pemVkIGltYWdlIGZvcm1hdCB0aGF0IHN1cHBvcnRzIGFuaW1hdGlvbi4KQEAg
LTExMiw3ICs3OCwxMSBAQCBjb25zdCBpbnQgY0FuaW1hdGlvbkxvb3BPbmNlID0gMDsKIGNvbnN0
IGludCBjQW5pbWF0aW9uTG9vcEluZmluaXRlID0gLTE7CiBjb25zdCBpbnQgY0FuaW1hdGlvbk5v
bmUgPSAtMjsKIAotY2xhc3MgSW1hZ2VTb3VyY2UgeworY2xhc3MgSW1hZ2VTb3VyY2UKKyNpZiAh
VVNFKENHKQorICAgIDogcHVibGljIFBhcmFsbGVsSW1hZ2VEZWNvZGVyT2JzZXJ2ZXIKKyNlbmRp
ZgorewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlU291cmNlKTsKIHB1YmxpYzoKICAg
ICBlbnVtIEFscGhhT3B0aW9uIHsKQEAgLTEzMyw2ICsxMDMsNyBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogICAgIEltYWdlU291cmNlKEFscGhhT3B0aW9uIGFscGhhT3B0aW9uID0gQWxwaGFQcmVtdWx0
aXBsaWVkLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbiA9IEdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCk7CisgICAgSW1hZ2VTb3VyY2UoSW1h
Z2VTb3VyY2VPYnNlcnZlciosIEFscGhhT3B0aW9uIGFscGhhT3B0aW9uID0gQWxwaGFQcmVtdWx0
aXBsaWVkLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9w
dGlvbiA9IEdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCk7CiAgICAgfkltYWdlU291cmNlKCk7
CiAKICAgICAvLyBUZWxscyB0aGUgSW1hZ2VTb3VyY2UgdGhhdCB0aGUgSW1hZ2Ugbm8gbG9uZ2Vy
IGNhcmVzIGFib3V0IGRlY29kZWQgZnJhbWUKQEAgLTE3OCw5ICsxNDksMTEgQEAgcHVibGljOgog
CiAgICAgc2l6ZV90IGZyYW1lQ291bnQoKSBjb25zdDsKIAotICAgIC8vIENhbGxlcnMgc2hvdWxk
IG5vdCBjYWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyBjbGVhcigpIHdpdGggYSBoaWdoZXIgaW5kZXg7
CisgICAgLy8gTk9URTogQ2FsbGVycyBzaG91bGQgbm90IGNhbGwgdGhpcyBhZnRlciBjYWxsaW5n
IGNsZWFyKCkgd2l0aCBhIGhpZ2hlciBpbmRleDsKICAgICAvLyBzZWUgY29tbWVudHMgb24gY2xl
YXIoKSBhYm92ZS4KLSAgICBOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90
KTsKKyAgICAvLyBOT1RFOiBJZiBJbWFnZVNvdXJjZSBoYXMgSW1hZ2VTb3VyY2VPYnNlcnZlciwg
dGhpcyBtZXRob2Qgc2VuZHMgdGhlIHJlc3VsdCB2aWEgZGlkRGVjb2RlRnJhbWVBdEluZGV4KCku
CisgICAgLy8gT3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSByZXN1bHQuIGUuZy4g
R3JhcGhpY3NDb250ZXh0M0QKKyAgICBOYXRpdmVJbWFnZVB0ciByZXF1ZXN0RnJhbWVBdEluZGV4
KHNpemVfdCwgYm9vbCByZXRhaW5lZE1vZGVSZW5kZXJpbmcgPSBmYWxzZSk7CiAKICAgICBmbG9h
dCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QpOwogICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0
SW5kZXgoc2l6ZV90KTsgLy8gV2hldGhlciBvciBub3QgdGhlIGZyYW1lIGFjdHVhbGx5IHVzZWQg
YW55IGFscGhhLgpAQCAtMTkyLDggKzE2NSwyNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQg
c2V0TWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKHVuc2lnbmVkIG1heFBpeGVscykgeyBzX21heFBp
eGVsc1BlckRlY29kZWRJbWFnZSA9IG1heFBpeGVsczsgfQogI2VuZGlmCiAKKyNpZiAhVVNFKENH
KQorICAgIC8vIFBhcmFsbGVsSW1hZ2VEZWNvZGVyT2JzZXJ2ZXIKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkRGVjb2RlKE5hdGl2ZUltYWdlUHRyKTsKKyNlbmRpZgorCiBwcml2YXRlOgorICAgIE5hdGl2
ZUltYWdlUHRyIGNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QpOworCisjaWYgIVVTRShDRykKKyAg
ICB2b2lkIGNyZWF0ZVBhcmFsbGVsRGVjb2RlcklmTmVlZGVkKCk7CisgICAgdm9pZCBjbGVhclBh
cmFsbGVsRGVjb2RlcigpOworICAgIGJvb2wgc2hvdWxkRGVjb2RlUGFyYWxsZWwoKTsKKyAgICB2
b2lkIHBhcmFsbGVsRGVjb2RlKCk7CisgICAgTmF0aXZlSW1hZ2VQdHIgc2VyaWFsRGVjb2RlKHNp
emVfdCk7CisKKyAgICBSZWZQdHI8UGFyYWxsZWxJbWFnZURlY29kZXI+IG1fcGFyYWxsZWxEZWNv
ZGVyOworI2VuZGlmCisKICAgICBOYXRpdmVJbWFnZVNvdXJjZVB0ciBtX2RlY29kZXI7CisgICAg
SW1hZ2VTb3VyY2VPYnNlcnZlciogbV9vYnNlcnZlcjsKKwogICAgIEFscGhhT3B0aW9uIG1fYWxw
aGFPcHRpb247CiAgICAgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gbV9nYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbjsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2VP
YnNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2VP
YnNlcnZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MTVmNTAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZU9ic2VydmVyLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBDb21wYW55IDEwMCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
SW1hZ2VTb3VyY2VPYnNlcnZlcl9oCisjZGVmaW5lIEltYWdlU291cmNlT2JzZXJ2ZXJfaAorCisj
aW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBJ
bnRlcmZhY2UgZm9yIG5vdGlmaWNhdGlvbiBhYm91dCBjaGFuZ2VzIHRvIGFuIEltYWdlU291cmNl
LCBpbmNsdWRpbmcgZGVjb2RpbmcuCitjbGFzcyBJbWFnZVNvdXJjZU9ic2VydmVyIHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRGVjb2RlRnJhbWVBdEluZGV4KHNpemVfdCwgTmF0aXZl
SW1hZ2VQdHIgPSAwLCBib29sIHJldGFpbmVkID0gZmFsc2UsIGJvb2wgcGFyYWxsZWxEZWNvZGVy
Q2FuY2VsZWQgPSBmYWxzZSkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW1hZ2VT
b3VyY2VPYnNlcnZlcigpIHsgfQorfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjQxMDllOGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCkBAIC0wLDAgKzEsNzYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIE5hdGl2ZUltYWdlUHRyX2gKKyNkZWZpbmUgTmF0aXZl
SW1hZ2VQdHJfaAorCisjaWYgUExBVEZPUk0oV1gpCitjbGFzcyB3eEJpdG1hcDsKK2NsYXNzIHd4
R3JhcGhpY3NCaXRtYXA7CisjZWxpZiBVU0UoQ0cpCit0eXBlZGVmIHN0cnVjdCBDR0ltYWdlKiBD
R0ltYWdlUmVmOworI2VsaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8cWdsb2JhbC5oPgorUVRf
QkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRSW1hZ2U7CitRVF9FTkRfTkFNRVNQQUNFCisjZWxpZiBV
U0UoQ0FJUk8pCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VDYWlyby5oIgorI2VsaWYgVVNFKFNLSUEp
CituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBOYXRpdmVJbWFnZVNraWE7Cit9CisjZWxpZiBP
UyhXSU5DRSkKKyNpbmNsdWRlICJTaGFyZWRCaXRtYXAuaCIKKyNlbmRpZgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyNpZiBVU0UoQ0cpCit0eXBlZGVmIENHSW1hZ2VSZWYgTmF0aXZlSW1hZ2VQ
dHI7CisjZWxpZiBQTEFURk9STShPUEVOVkcpCitjbGFzcyBUaWxlZEltYWdlT3BlblZHOwordHlw
ZWRlZiBUaWxlZEltYWdlT3BlblZHKiBOYXRpdmVJbWFnZVB0cjsKKyNlbGlmIFBMQVRGT1JNKFdY
KQorI2lmIFVTRShXWEdDKQordHlwZWRlZiB3eEdyYXBoaWNzQml0bWFwKiBOYXRpdmVJbWFnZVB0
cjsKKyNlbHNlCit0eXBlZGVmIHd4Qml0bWFwKiBOYXRpdmVJbWFnZVB0cjsKKyNlbmRpZgorI2Vs
aWYgVVNFKENBSVJPKQordHlwZWRlZiBXZWJDb3JlOjpOYXRpdmVJbWFnZUNhaXJvKiBOYXRpdmVJ
bWFnZVB0cjsKKyNlbGlmIFVTRShTS0lBKQordHlwZWRlZiBXZWJDb3JlOjpOYXRpdmVJbWFnZVNr
aWEqIE5hdGl2ZUltYWdlUHRyOworI2VsaWYgT1MoV0lOQ0UpCit0eXBlZGVmIFJlZlB0cjxTaGFy
ZWRCaXRtYXA+IE5hdGl2ZUltYWdlUHRyOworI2VsaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKK3R5
cGVkZWYgdm9pZCogTmF0aXZlSW1hZ2VQdHI7CisjZWxpZiBQTEFURk9STShRVCkKK3R5cGVkZWYg
UUltYWdlKiBOYXRpdmVJbWFnZVB0cjsKKyNlbmRpZgorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURlY29kZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURlY29k
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMmU4NWEzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJ
bWFnZURlY29kZXIuY3BwCkBAIC0wLDAgKzEsMjc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIENvbXBhbnkgMTAwIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFyYWxsZWxJbWFnZURlY29kZXIuaCIKKworI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVj
dCBQYXJhbGxlbEZyYW1lRGF0YTsKK3ZvaWQgZGlkRGVjb2RlVGFza0NhbGxiYWNrKFBhcmFsbGVs
RnJhbWVEYXRhKik7CisKK1BhcmFsbGVsSW1hZ2VEZWNvZGVyOjpQYXJhbGxlbEltYWdlRGVjb2Rl
cihQYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyKiBvYnNlcnZlciwgSW1hZ2VEZWNvZGVyKiBk
ZWNvZGVyLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEltYWdlU291cmNl
OjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikK
KyAgICA6IG1fb2JzZXJ2ZXIob2JzZXJ2ZXIpCisgICAgLCBtX2ltYWdlRGVjb2RlcigwKQorICAg
ICwgbV9ieXRlc09mRGF0YUNvbnN1bWVkKDApCisgICAgLCBtX2FscGhhT3B0aW9uKGFscGhhT3B0
aW9uKQorICAgICwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbihnYW1tYUFuZENvbG9yUHJv
ZmlsZU9wdGlvbikKK3sKKyAgICBpbml0aWFsaXplKGRlY29kZXIpOworfQorCitQYXJhbGxlbElt
YWdlRGVjb2Rlcjo6flBhcmFsbGVsSW1hZ2VEZWNvZGVyKCkKK3sKKyAgICBBU1NFUlQoIXZhbGlk
KCkpOworfQorCit2b2lkIFBhcmFsbGVsSW1hZ2VEZWNvZGVyOjppbml0aWFsaXplKEltYWdlRGVj
b2RlciogZGVjb2RlcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VS
VChkZWNvZGVyLT5pc1NpemVBdmFpbGFibGUoKSAmJiAhZGVjb2Rlci0+c2l6ZSgpLmlzRW1wdHko
KSk7CisKKyAgICBtX2ltYWdlRGVjb2RlciA9IGRlY29kZXI7CisgICAgSW1hZ2VGcmFtZSogYnVm
ZmVyID0gbV9pbWFnZURlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleFdpdGhvdXREZWNvZGluZygw
KTsKKyAgICBpZiAoIWJ1ZmZlcikgeworICAgICAgICBtX2ltYWdlRGVjb2Rlci0+ZW5zdXJlRnJh
bWVCdWZmZXJBdEluZGV4KDApOworICAgICAgICBidWZmZXIgPSBtX2ltYWdlRGVjb2Rlci0+ZnJh
bWVCdWZmZXJBdEluZGV4V2l0aG91dERlY29kaW5nKDApOworICAgIH0KKyAgICBpZiAoYnVmZmVy
LT5zaXplKCkuaXNFbXB0eSgpKQorICAgICAgICBidWZmZXItPnNldFNpemUobV9pbWFnZURlY29k
ZXItPnNpemUoKS53aWR0aCgpLCBtX2ltYWdlRGVjb2Rlci0+c2l6ZSgpLmhlaWdodCgpKTsKKwor
ICAgIC8vIEZJWE1FIDogT3B0aW1pemF0aW9uIG9mIHRoZSBmaXJzdCBlbmNvZGVkIHNlZ21lbnQg
cGFzc2luZy4KKyAgICBtX2RhdGFGb3JUYXNrID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKKyNp
Zm5kZWYgTkRFQlVHCisgICAgLy8gVGhyZWFkUmVzdHJpY3Rpb25WZXJpZmllciBkb2VzIG5vdCBh
bGxvdyB0d28gdGhyZWFkcyB0byBhY2Nlc3Mgb25lIFJlZkNvdW50ZWQgb2JqZWN0LgorICAgIC8v
IG1fZGF0YUZvclRhc2sgaXMgdXNlZCBieSBib3RoIHRoZSBtYWluIHRocmVhZCBhbmQgdGhlIHRh
c2sgdGhyZWFkOgorICAgIC8vIFRoZSB0YXNrIHRocmVhZCBjcmVhdGVzLCB1c2VzIGFuZCByZW1v
dmVzIG1fZGF0YUZvclRhc2suIFRoZSBtYWluIHRocmVhZCBtYXkgcmVtb3ZlCisgICAgLy8gbV9k
YXRhRm9yVGFzayBpZiB0aGUgdGFzayB0aHJlYWQgY291bGQgbm90IHJlbW92ZSBtX2RhdGFGb3JU
YXNrLgorICAgIC8vCisgICAgLy8gUGFyYWxsZWwgaW1hZ2UgZGVjb2RlcnMgbWFuYWdlIG1fZGF0
YUZvclRhc2sgaW4gYSB0aHJlYWQtc2FmZSB3YXkuIEhvd2V2ZXIsCisgICAgLy8gd2UgY2FuJ3Qg
dGVsbCB0aGUgdmVyaWZpZXIgdGhhdCB3ZSBhcmUgc2FmZSBieSBzaW1wbHkgcGFzc2luZyBhIG11
dGV4CisgICAgLy8gYmVjYXVzZSBsaWJkaXNwYXRjaCBkb2VzIG5vdCBldmVuIGd1YXJhbnRlZSBk
ZWNvZGVUYXNrIGlzIGNhbGxlZCBieSB0aGUgc2FtZSB0aHJlYWQKKyAgICAvLyBlYWNoIHRpbWUu
IFNvIHR1cm4gb2ZmIHRoZSB2ZXJpZmllciBoZXJlLgorICAgIG1fZGF0YUZvclRhc2stPnR1cm5P
ZmZWZXJpZmllcigpOworI2VuZGlmCisKKyAgICBtX2ltYWdlRGVjb2RlckZvclRhc2sgPSBhZG9w
dFB0cihJbWFnZURlY29kZXI6OmNyZWF0ZSgqbV9pbWFnZURlY29kZXItPmRhdGEoKSwgbV9hbHBo
YU9wdGlvbiwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOworICAgIG1faW1hZ2VEZWNv
ZGVyRm9yVGFzay0+c2V0RGF0YShtX2RhdGFGb3JUYXNrLmdldCgpLCBtX2ltYWdlRGVjb2Rlci0+
aXNBbGxEYXRhUmVjZWl2ZWQoKSk7CisgICAgQVNTRVJUKG1faW1hZ2VEZWNvZGVyRm9yVGFzay5n
ZXQoKSk7CisgICAgbV9ieXRlc09mRGF0YUNvbnN1bWVkID0gMDsKKworICAgIC8vIFRoaXMgbXVz
dCBiZSB0aGUgbGFzdCBsaW5lIGJlY2F1c2UgRGlzcGF0Y2hRdWV1ZSBndWFyYW50ZWVzCisgICAg
Ly8gdGhlIHZpc2liaWxpdHkgb2YgbWVtYmVycyBpbiB0aGUgdGFzayB0aHJlYWQuCisgICAgbV9k
ZWNvZGVRdWV1ZSA9IERpc3BhdGNoUXVldWU6OmNyZWF0ZVNlcmlhbFF1ZXVlKCk7CisgICAgLy8g
QWZ0ZXIgdGhpcyBsaW5lLCBpdCBpcyBpbGxlZ2FsIGZvciB0aGUgbWFpbiB0aHJlYWQgdG8gYWNj
ZXNzIG1faW1hZ2VEZWNvZGVyRm9yVGFzay4KK30KKwordm9pZCBQYXJhbGxlbEltYWdlRGVjb2Rl
cjo6aW52YWxpZGF0ZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NF
UlQobV9pbWFnZURlY29kZXIpOworCisgICAgaWYgKG1fZGVjb2RlUXVldWUuZ2V0KCkpCisgICAg
ICAgIG1fZGVjb2RlUXVldWUuY2xlYXIoKTsKKyAgICAvLyBUaGUgbWFpbiB0aHJlYWQgY2FuIHVz
ZSBtX2ltYWdlRGVjb2RlckZvclRhc2sgYmVjYXVzZSBvdGhlciB0aHJlYWRzIGRvIG5vdCBhY2Nl
c3MgbV9pbWFnZURlY29kZXJGb3JUYXNrIGFmdGVyIHRoaXMgbGluZS4KKworICAgIG1fYnl0ZXNP
ZkRhdGFDb25zdW1lZCA9IDA7CisKKyAgICBtX2RhdGFGb3JUYXNrLmNsZWFyKCk7CisgICAgbV9p
bWFnZURlY29kZXJGb3JUYXNrLmNsZWFyKCk7CisKKyAgICBtX2ltYWdlRGVjb2RlciA9IDA7Cit9
CisKK3ZvaWQgUGFyYWxsZWxJbWFnZURlY29kZXI6OmRlY29kZSgpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9pbWFnZURlY29kZXIpOworCisgICAgT3duUHRy
PEVuY29kZWREYXRhU2VnbWVudD4gc2VnbWVudCA9IGV4dHJhY3RTZWdtZW50Rm9yVGFzaygpOwor
ICAgIGlmICghc2VnbWVudC5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGVjb2RlUXVl
dWUtPmFzeW5jKGJpbmQoJlBhcmFsbGVsSW1hZ2VEZWNvZGVyOjpkZWNvZGVUYXNrLCB0aGlzLCBz
ZWdtZW50LnJlbGVhc2UoKSkpOworfQorCitQYXNzT3duUHRyPFBhcmFsbGVsSW1hZ2VEZWNvZGVy
OjpFbmNvZGVkRGF0YVNlZ21lbnQ+IFBhcmFsbGVsSW1hZ2VEZWNvZGVyOjpleHRyYWN0U2VnbWVu
dEZvclRhc2soKQoreworICAgIFNoYXJlZEJ1ZmZlciogZW5jb2RlZERhdGEgPSBtX2ltYWdlRGVj
b2Rlci0+ZGF0YSgpOworICAgIEFTU0VSVChtX2J5dGVzT2ZEYXRhQ29uc3VtZWQgPD0gZW5jb2Rl
ZERhdGEtPnNpemUoKSk7CisKKyAgICBpbnQgc2l6ZU9mU2VnbWVudCA9IGVuY29kZWREYXRhLT5z
aXplKCkgLSBtX2J5dGVzT2ZEYXRhQ29uc3VtZWQ7CisgICAgaWYgKCFzaXplT2ZTZWdtZW50KQor
ICAgICAgICByZXR1cm4gUGFzc093blB0cjxFbmNvZGVkRGF0YVNlZ21lbnQ+KCk7CisKKyAgICBP
d25QdHI8RW5jb2RlZERhdGFTZWdtZW50PiBzZWdtZW50KGFkb3B0UHRyKG5ldyBFbmNvZGVkRGF0
YVNlZ21lbnQoKSkpOworICAgIGNvbnN0IGNoYXIqIHNyY1B0ciA9IGVuY29kZWREYXRhLT5kYXRh
KCkgKyBtX2J5dGVzT2ZEYXRhQ29uc3VtZWQ7CisgICAgc2VnbWVudC0+bV9zZWdtZW50LmFwcGVu
ZChzcmNQdHIsIHNpemVPZlNlZ21lbnQpOworICAgIG1fYnl0ZXNPZkRhdGFDb25zdW1lZCA9IGVu
Y29kZWREYXRhLT5zaXplKCk7CisKKyAgICBzZWdtZW50LT5tX2lzQWxsRGF0YVJlY2VpdmVkID0g
bV9pbWFnZURlY29kZXItPmlzQWxsRGF0YVJlY2VpdmVkKCk7CisKKyAgICByZXR1cm4gc2VnbWVu
dC5yZWxlYXNlKCk7Cit9CisKK3N0cnVjdCBQYXJhbGxlbEZyYW1lRGF0YSB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoUGFyYWxsZWxGcmFtZURhdGEpOworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IFBhcmFsbGVsRnJhbWVEYXRhKFBhc3NSZWZQ
dHI8UGFyYWxsZWxJbWFnZURlY29kZXI+IHBhcmFsbGVsRGVjb2RlcikKKyAgICAgICAgOiBtX3Bh
cmFsbGVsRGVjb2RlcihwYXJhbGxlbERlY29kZXIpCisgICAgICAgICwgbV9kZWNvZGVkU2VnbWVu
dCgpCisgICAgICAgICwgbV9zdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkKKyAgICAgICAg
LCBtX2hhc0FscGhhKGZhbHNlKQorICAgICAgICAsIG1fcHJlbXVsdGlwbHlBbHBoYSh0cnVlKQor
ICAgIHsKKyAgICB9CisKKyAgICB+UGFyYWxsZWxGcmFtZURhdGEoKQorICAgIHsKKyAgICB9CisK
KyAgICBSZWZQdHI8UGFyYWxsZWxJbWFnZURlY29kZXI+IG1fcGFyYWxsZWxEZWNvZGVyOworICAg
IE93bkFycmF5UHRyPEltYWdlRnJhbWU6OlBpeGVsRGF0YT4gbV9kZWNvZGVkU2VnbWVudDsKKyAg
ICBJbWFnZUZyYW1lOjpGcmFtZVN0YXR1cyBtX3N0YXR1czsKKyAgICBib29sIG1faGFzQWxwaGE7
CisgICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGE7CisgICAgSW50UmVjdCBtX2RlY29kZWRSZWN0
OworfTsKKwordm9pZCBQYXJhbGxlbEltYWdlRGVjb2Rlcjo6ZGVjb2RlVGFzayhQYXNzT3duUHRy
PFBhcmFsbGVsSW1hZ2VEZWNvZGVyOjpFbmNvZGVkRGF0YVNlZ21lbnQ+IHBhc3NTZWdtZW50KQor
eworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAgT3duUHRyPEVuY29kZWREYXRh
U2VnbWVudD4gc2VnbWVudCA9IHBhc3NTZWdtZW50OworCisgICAgLy8gMS4gU2VuZCBzZWdtZW50
IGRhdGEgdG8gSW1hZ2VEZWNvZGVyLgorICAgIGlmIChzZWdtZW50LmdldCgpKSB7CisgICAgICAg
IG1fZGF0YUZvclRhc2stPmFwcGVuZChzZWdtZW50LT5tX3NlZ21lbnQpOworICAgICAgICBtX2lt
YWdlRGVjb2RlckZvclRhc2stPnNldERhdGEobV9kYXRhRm9yVGFzay5nZXQoKSwgc2VnbWVudC0+
bV9pc0FsbERhdGFSZWNlaXZlZCk7CisgICAgfQorCisgICAgSW1hZ2VGcmFtZSogb2xkQnVmZmVy
ID0gbV9pbWFnZURlY29kZXJGb3JUYXNrLT5mcmFtZUJ1ZmZlckF0SW5kZXhXaXRob3V0RGVjb2Rp
bmcoMCk7CisgICAgaW50IGxhc3REZWNvZGVkUm93ID0gb2xkQnVmZmVyID8gb2xkQnVmZmVyLT5s
YXN0RGVjb2RlZFJvdygpIDogMDsKKworICAgIC8vIDIuIERlY29kZSBhbiBpbWFnZSBpbmNyZW1l
bnRhbGx5LgorICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9IG1faW1hZ2VEZWNvZGVyRm9yVGFzay0+
ZnJhbWVCdWZmZXJBdEluZGV4KDApOworICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVz
KCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgeworICAgICAgICBBU1NFUlQoIW1faW1hZ2VE
ZWNvZGVyRm9yVGFzay0+aXNBbGxEYXRhUmVjZWl2ZWQoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyAzLiBNYWtlIGEgUGFyYWxsZWxGcmFtZURhdGEgaW4gb3JkZXIgdG8gcGFz
cyBpdCB0byB0aGUgbWFpbiB0aHJlYWQuCisgICAgUGFyYWxsZWxGcmFtZURhdGEqIHBhcmFsbGVs
RnJhbWVEYXRhID0gbmV3IFBhcmFsbGVsRnJhbWVEYXRhKHRoaXMpOworICAgIHBhcmFsbGVsRnJh
bWVEYXRhLT5tX3N0YXR1cyA9IGJ1ZmZlci0+c3RhdHVzKCk7CisgICAgcGFyYWxsZWxGcmFtZURh
dGEtPm1faGFzQWxwaGEgPSBidWZmZXItPmhhc0FscGhhKCk7CisgICAgcGFyYWxsZWxGcmFtZURh
dGEtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IGJ1ZmZlci0+cHJlbXVsdGlwbHlBbHBoYSgpOworCisg
ICAgaW50IG5ld0xhc3REZWNvZGVkUm93ID0gYnVmZmVyLT5sYXN0RGVjb2RlZFJvdygpOworICAg
IC8vIE9ubHkgaW4gQk1QLCBsYXN0RGVjb2RlZFJvdyBjYW4gYmUgYmlnZ2VyIHRoYW4gbmV3TGFz
dERlY29kZWRSb3cuCisgICAgaW50IGxhc3REZWNvZGVkTWluUm93ID0gc3RkOjptaW4obGFzdERl
Y29kZWRSb3csIG5ld0xhc3REZWNvZGVkUm93KTsKKyAgICBpbnQgbGFzdERlY29kZWRNYXhSb3cg
PSBzdGQ6Om1heChsYXN0RGVjb2RlZFJvdywgbmV3TGFzdERlY29kZWRSb3cpOworICAgIHBhcmFs
bGVsRnJhbWVEYXRhLT5tX2RlY29kZWRSZWN0ID0gSW50UmVjdCgwLCBsYXN0RGVjb2RlZE1pblJv
dywgbV9pbWFnZURlY29kZXJGb3JUYXNrLT5zaXplKCkud2lkdGgoKSwgbGFzdERlY29kZWRNYXhS
b3cgLSBsYXN0RGVjb2RlZE1pblJvdyArIDEpOworCisgICAgLy8gNC4gQ3JlYXRlIGRlY29kZWQg
c2VnbWVudCBkYXRhIGluIG9yZGVyIHRvIHBhc3MgaXQgdG8gdGhlIG1haW4gdGhyZWFkLgorICAg
IC8vICAgIElmIHRoZSBzdGF0dXMgaXMgRnJhbWVDb21wbGV0ZSwgdGhpcyBpcyBub3QgbmVlZGVk
IGJlY2F1c2UgdGhlIG1haW4gdGhyZWFkIGdldHMgdGhlIGxhc3QgZGVjb2RlZCBkYXRhIGRpcmVj
dGx5IGZyb20gbV9pbWFnZURlY29kZXJGb3JUYXNrLgorICAgIGlmIChwYXJhbGxlbEZyYW1lRGF0
YS0+bV9zdGF0dXMgPT0gSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKSB7CisgICAgICAgIGludCBz
ZWdtZW50U2l6ZSA9IHBhcmFsbGVsRnJhbWVEYXRhLT5tX2RlY29kZWRSZWN0LnNpemUoKS5hcmVh
KCk7CisgICAgICAgIHBhcmFsbGVsRnJhbWVEYXRhLT5tX2RlY29kZWRTZWdtZW50ID0gYWRvcHRB
cnJheVB0cihuZXcgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhW3NlZ21lbnRTaXplXSk7CisKKyAgICAg
ICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBzZWdtZW50QWRkciA9IHBhcmFsbGVsRnJhbWVEYXRh
LT5tX2RlY29kZWRTZWdtZW50LmdldCgpOworICAgICAgICBtZW1jcHkoc2VnbWVudEFkZHIsIGJ1
ZmZlci0+Z2V0QWRkcigwLCBsYXN0RGVjb2RlZE1pblJvdyksIHNlZ21lbnRTaXplICogc2l6ZW9m
KEltYWdlRnJhbWU6OlBpeGVsRGF0YSkpOworICAgIH0KKyAgICBjYWxsT25NYWluVGhyZWFkKGJp
bmQoZGlkRGVjb2RlVGFza0NhbGxiYWNrLCBwYXJhbGxlbEZyYW1lRGF0YSkpOworfQorCit2b2lk
IGRpZERlY29kZVRhc2tDYWxsYmFjayhQYXJhbGxlbEZyYW1lRGF0YSogcGFyYWxsZWxGcmFtZURh
dGEpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBJZiBhIGNsaWVudCBj
YWxsZWQgUGFyYWxsZWxJbWFnZURlY29kZXI6OmNsZWFyKCksIFBhcmFsbGVsSW1hZ2VEZWNvZGVy
IGlzIGludmFsaWRhdGVkLgorICAgIGlmIChwYXJhbGxlbEZyYW1lRGF0YS0+bV9wYXJhbGxlbERl
Y29kZXItPnZhbGlkKCkpCisgICAgICAgIHBhcmFsbGVsRnJhbWVEYXRhLT5tX3BhcmFsbGVsRGVj
b2Rlci0+ZGlkRGVjb2RlVGFzayhwYXJhbGxlbEZyYW1lRGF0YSk7CisgICAgZGVsZXRlIHBhcmFs
bGVsRnJhbWVEYXRhOworfQorCit2b2lkIFBhcmFsbGVsSW1hZ2VEZWNvZGVyOjpkaWREZWNvZGVU
YXNrKFBhcmFsbGVsRnJhbWVEYXRhKiBwYXJhbGxlbEZyYW1lRGF0YSkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChwYXJhbGxlbEZyYW1lRGF0YS0+bV9zdGF0dXMg
IT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSk7CisKKyAgICBpZiAocGFyYWxsZWxGcmFtZURhdGEt
Pm1fc3RhdHVzID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpCisgICAgICAgIGFwcGVuZERl
Y29kZWREYXRhVG9JbWFnZUZyYW1lRnJvbUltYWdlRGVjb2RlcihwYXJhbGxlbEZyYW1lRGF0YSk7
CisgICAgZWxzZQorICAgICAgICBhcHBlbmREZWNvZGVkRGF0YVRvSW1hZ2VGcmFtZUZyb21QYXJh
bGxlbEZyYW1lRGF0YShwYXJhbGxlbEZyYW1lRGF0YSk7CisKKyAgICBzeW5jSW1hZ2VGcmFtZShw
YXJhbGxlbEZyYW1lRGF0YSk7CisgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gbV9pbWFnZURlY29k
ZXItPmZyYW1lQnVmZmVyQXRJbmRleFdpdGhvdXREZWNvZGluZygwKTsKKyAgICBtX29ic2VydmVy
LT5kaWREZWNvZGUoYnVmZmVyLT5hc05ld05hdGl2ZUltYWdlKCkpOworfQorCit2b2lkIFBhcmFs
bGVsSW1hZ2VEZWNvZGVyOjphcHBlbmREZWNvZGVkRGF0YVRvSW1hZ2VGcmFtZUZyb21JbWFnZURl
Y29kZXIoUGFyYWxsZWxGcmFtZURhdGEqIHBhcmFsbGVsRnJhbWVEYXRhKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAobV9kZWNvZGVRdWV1ZS5nZXQoKSkKKyAgICAg
ICAgbV9kZWNvZGVRdWV1ZS5jbGVhcigpOworICAgIC8vIFRoZSBtYWluIHRocmVhZCBjYW4gdXNl
IG1faW1hZ2VEZWNvZGVyRm9yVGFzayBiZWNhdXNlIG90aGVyIHRocmVhZHMgZG8gbm90IGFjY2Vz
cyBtX2ltYWdlRGVjb2RlckZvclRhc2sgYWZ0ZXIgdGhpcyBsaW5lLgorCisgICAgLy8gRklYTUUg
OiB3ZSBtdXN0IGNvcHkgb25seSBtZXRhCisgICAgKm1faW1hZ2VEZWNvZGVyLT5mcmFtZUJ1ZmZl
ckF0SW5kZXhXaXRob3V0RGVjb2RpbmcoMCkgPSAqbV9pbWFnZURlY29kZXJGb3JUYXNrLT5mcmFt
ZUJ1ZmZlckF0SW5kZXhXaXRob3V0RGVjb2RpbmcoMCk7CisKKyAgICBpbnQgc2VnbWVudFNpemUg
PSBwYXJhbGxlbEZyYW1lRGF0YS0+bV9kZWNvZGVkUmVjdC5zaXplKCkuYXJlYSgpOworCisgICAg
SW1hZ2VGcmFtZSogc3JjQnVmZmVyID0gbV9pbWFnZURlY29kZXJGb3JUYXNrLT5mcmFtZUJ1ZmZl
ckF0SW5kZXhXaXRob3V0RGVjb2RpbmcoMCk7CisgICAgY29uc3QgSW1hZ2VGcmFtZTo6UGl4ZWxE
YXRhKiBjb25zdCBzcmNBZGRyID0gc3JjQnVmZmVyLT5nZXRBZGRyKDAsIHBhcmFsbGVsRnJhbWVE
YXRhLT5tX2RlY29kZWRSZWN0LnkoKSk7CisKKyAgICBJbWFnZUZyYW1lKiBkZXN0QnVmZmVyID0g
bV9pbWFnZURlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleFdpdGhvdXREZWNvZGluZygwKTsKKyAg
ICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3RBZGRyID0gZGVzdEJ1ZmZlci0+Z2V0QWRkcigw
LCBwYXJhbGxlbEZyYW1lRGF0YS0+bV9kZWNvZGVkUmVjdC55KCkpOworCisgICAgbWVtY3B5KGRl
c3RBZGRyLCBzcmNBZGRyLCBzZWdtZW50U2l6ZSAqIHNpemVvZihJbWFnZUZyYW1lOjpQaXhlbERh
dGEpKTsKKworfQorCit2b2lkIFBhcmFsbGVsSW1hZ2VEZWNvZGVyOjphcHBlbmREZWNvZGVkRGF0
YVRvSW1hZ2VGcmFtZUZyb21QYXJhbGxlbEZyYW1lRGF0YShQYXJhbGxlbEZyYW1lRGF0YSogcGFy
YWxsZWxGcmFtZURhdGEpCit7CisgICAgY29uc3QgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBjb25z
dCBzZWdtZW50QWRkciA9IHBhcmFsbGVsRnJhbWVEYXRhLT5tX2RlY29kZWRTZWdtZW50LmdldCgp
OworICAgIGludCBzZWdtZW50U2l6ZSA9IHBhcmFsbGVsRnJhbWVEYXRhLT5tX2RlY29kZWRSZWN0
LnNpemUoKS5hcmVhKCk7CisgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gbV9pbWFnZURlY29kZXIt
PmZyYW1lQnVmZmVyQXRJbmRleFdpdGhvdXREZWNvZGluZygwKTsKKyAgICBJbWFnZUZyYW1lOjpQ
aXhlbERhdGEqIGRlc3RBZGRyID0gYnVmZmVyLT5nZXRBZGRyKDAsIHBhcmFsbGVsRnJhbWVEYXRh
LT5tX2RlY29kZWRSZWN0LnkoKSk7CisgICAgbWVtY3B5KGRlc3RBZGRyLCBzZWdtZW50QWRkciwg
c2VnbWVudFNpemUgKiBzaXplb2YoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKSk7Cit9CisKK3ZvaWQg
UGFyYWxsZWxJbWFnZURlY29kZXI6OnN5bmNJbWFnZUZyYW1lKFBhcmFsbGVsRnJhbWVEYXRhKiBw
YXJhbGxlbEZyYW1lRGF0YSkKK3sKKyAgICAvLyBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBuZWVk
ZWQgdG8gY3JlYXRlIGEgdmFsaWQgbmF0aXZlIGltYWdlIGluIEltYWdlRnJhbWU6OmFzTmV3TmF0
aXZlSW1hZ2UoKS4KKyAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSBtX2ltYWdlRGVjb2Rlci0+ZnJh
bWVCdWZmZXJBdEluZGV4V2l0aG91dERlY29kaW5nKDApOworICAgIGJ1ZmZlci0+c2V0U3RhdHVz
KHBhcmFsbGVsRnJhbWVEYXRhLT5tX3N0YXR1cyk7CisgICAgYnVmZmVyLT5zZXRIYXNBbHBoYShw
YXJhbGxlbEZyYW1lRGF0YS0+bV9oYXNBbHBoYSk7CisgICAgYnVmZmVyLT5zZXRQcmVtdWx0aXBs
eUFscGhhKHBhcmFsbGVsRnJhbWVEYXRhLT5tX3ByZW11bHRpcGx5QWxwaGEpOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdl
RGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFn
ZURlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmNlYjI3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxs
ZWxJbWFnZURlY29kZXIuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIENvbXBhbnkgMTAwIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFBhcmFsbGVsSW1hZ2VEZWNvZGVyX2gKKyNkZWZpbmUgUGFyYWxsZWxJbWFnZURlY29kZXJfaAor
CisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNp
bmNsdWRlICJQYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyLmgiCisjaW5jbHVkZSA8d3RmL0Rp
c3BhdGNoUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgUGFyYWxsZWxGcmFtZURhdGE7CisKK2NsYXNzIFBhcmFsbGVs
SW1hZ2VEZWNvZGVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBhcmFsbGVsSW1hZ2VE
ZWNvZGVyPiB7CitwdWJsaWM6CisgICAgUGFyYWxsZWxJbWFnZURlY29kZXIoUGFyYWxsZWxJbWFn
ZURlY29kZXJPYnNlcnZlciosIEltYWdlRGVjb2RlciosIEltYWdlU291cmNlOjpBbHBoYU9wdGlv
biwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKTsKKyAgICB+UGFyYWxs
ZWxJbWFnZURlY29kZXIoKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZSgpOworCisgICAgdm9pZCBk
ZWNvZGUoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXRpYWxpemUoSW1hZ2VEZWNvZGVyKik7
CisKKyAgICBpbmxpbmUgYm9vbCB2YWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VEZWNvZGVy
OyB9CisKKyAgICBzdHJ1Y3QgRW5jb2RlZERhdGFTZWdtZW50IHsKKyAgICAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRW5jb2RlZERhdGFTZWdtZW50KTsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBFbmNvZGVkRGF0YVNlZ21lbnQoKSB7IH0K
KyAgICAgICAgVmVjdG9yPGNoYXI+IG1fc2VnbWVudDsKKyAgICAgICAgYm9vbCBtX2lzQWxsRGF0
YVJlY2VpdmVkOworICAgIH07CisKKyAgICBQYXNzT3duUHRyPEVuY29kZWREYXRhU2VnbWVudD4g
ZXh0cmFjdFNlZ21lbnRGb3JUYXNrKCk7CisKKyAgICAvLyBPbmx5IHRoaXMgbWV0aG9kIGlzIGNh
bGxlZCBieSB0aGUgdGFzayB0aHJlYWQuCisgICAgdm9pZCBkZWNvZGVUYXNrKFBhc3NPd25QdHI8
RW5jb2RlZERhdGFTZWdtZW50Pik7CisKKyAgICB2b2lkIGRpZERlY29kZVRhc2soUGFyYWxsZWxG
cmFtZURhdGEqKTsKKyAgICB2b2lkIGFwcGVuZERlY29kZWREYXRhVG9JbWFnZUZyYW1lRnJvbVBh
cmFsbGVsRnJhbWVEYXRhKFBhcmFsbGVsRnJhbWVEYXRhKik7CisgICAgdm9pZCBzeW5jSW1hZ2VG
cmFtZShQYXJhbGxlbEZyYW1lRGF0YSopOworICAgIHZvaWQgYXBwZW5kRGVjb2RlZERhdGFUb0lt
YWdlRnJhbWVGcm9tSW1hZ2VEZWNvZGVyKFBhcmFsbGVsRnJhbWVEYXRhKik7CisgICAgZnJpZW5k
IHZvaWQgZGlkRGVjb2RlVGFza0NhbGxiYWNrKFBhcmFsbGVsRnJhbWVEYXRhKik7CisKKyAgICBQ
YXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyKiBtX29ic2VydmVyOworICAgIEltYWdlRGVjb2Rl
ciogbV9pbWFnZURlY29kZXI7CisKKyAgICAvLyBGb3IgaW5wdXQgZGF0YQorICAgIHVuc2lnbmVk
IG1fYnl0ZXNPZkRhdGFDb25zdW1lZDsKKworICAgIC8vIFRoZSB0YXNrIHRocmVhZCBjYW4gYWNj
ZXNzIG9ubHkgbV9kYXRhRm9yVGFzayBhbmQgbV9pbWFnZURlY29kZXJGb3JUYXNrLgorICAgIFJl
ZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YUZvclRhc2s7CisgICAgT3duUHRyPEltYWdlRGVjb2Rl
cj4gbV9pbWFnZURlY29kZXJGb3JUYXNrOworICAgIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiBt
X2FscGhhT3B0aW9uOworICAgIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlv
biBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uOworCisgICAgUmVmUHRyPERpc3BhdGNoUXVl
dWU+IG1fZGVjb2RlUXVldWU7CisKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxl
bEltYWdlRGVjb2Rlck9ic2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMjEwMTJlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BhcmFsbGVsSW1hZ2VEZWNvZGVyT2JzZXJ2ZXIuaApAQCAtMCwwICsx
LDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQYXJhbGxlbEltYWdlRGVjb2Rlck9ic2Vy
dmVyX2gKKyNkZWZpbmUgUGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZlcl9oCisKKyNpbmNsdWRl
ICJOYXRpdmVJbWFnZVB0ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEludGVyZmFj
ZSBmb3Igbm90aWZpY2F0aW9uIGFib3V0IGRlY29kaW5nIGNvbXBsZXRpb24gb2YgYW4gUGFyYWxs
ZWxJbWFnZURlY29kZXIuCitjbGFzcyBQYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRGVjb2RlKE5hdGl2ZUltYWdlUHRyKSA9IDA7CisK
K3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5QYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyKCkg
eyB9Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YmFiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5jcHAK
QEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaCIKKworI2luY2x1ZGUgIkJpdG1hcElt
YWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxSZXRhaW5lZE1vZGVC
aXRtYXBJbWFnZT4gUmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OmNyZWF0ZShCaXRtYXBJbWFnZSog
Yml0bWFwSW1hZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZXRhaW5lZE1vZGVCaXRt
YXBJbWFnZShiaXRtYXBJbWFnZSkpOworfQorCitSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6UmV0
YWluZWRNb2RlQml0bWFwSW1hZ2UoQml0bWFwSW1hZ2UqIGJpdG1hcEltYWdlKQorICAgIDogbV9i
aXRtYXBJbWFnZShiaXRtYXBJbWFnZSkKKyAgICAsIG1fcmV0YWluZWRNb2RlQ291bnQoMCkKK3sK
K30KKworYm9vbCBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6aGFzU2luZ2xlU2VjdXJpdHlPcmln
aW4oKSBjb25zdAoreworICAgIFJldGFpbmVkTW9kZVNhdmVyIHJldGFpbmVkTW9kZVNhdmVyKHRo
aXMpOworICAgIHJldHVybiBtX2JpdG1hcEltYWdlLT5oYXNTaW5nbGVTZWN1cml0eU9yaWdpbigp
OworfQorCitJbnRTaXplIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpzaXplKCkgY29uc3QKK3sK
KyAgICBSZXRhaW5lZE1vZGVTYXZlciByZXRhaW5lZE1vZGVTYXZlcih0aGlzKTsKKyAgICByZXR1
cm4gbV9iaXRtYXBJbWFnZS0+c2l6ZSgpOworfQorCitib29sIFJldGFpbmVkTW9kZUJpdG1hcElt
YWdlOjpnZXRIb3RTcG90KEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBSZXRhaW5lZE1v
ZGVTYXZlciByZXRhaW5lZE1vZGVTYXZlcih0aGlzKTsKKyAgICByZXR1cm4gbV9iaXRtYXBJbWFn
ZS0+Z2V0SG90U3BvdChwb2ludCk7Cit9CisKK2Jvb2wgUmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6
OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIFJldGFpbmVkTW9kZVNh
dmVyIHJldGFpbmVkTW9kZVNhdmVyKHRoaXMpOworICAgIHJldHVybiBtX2JpdG1hcEltYWdlLT5k
YXRhQ2hhbmdlZChhbGxEYXRhUmVjZWl2ZWQpOworfQorCitTdHJpbmcgUmV0YWluZWRNb2RlQml0
bWFwSW1hZ2U6OmZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QKK3sKKyAgICBSZXRhaW5lZE1vZGVT
YXZlciByZXRhaW5lZE1vZGVTYXZlcih0aGlzKTsKKyAgICByZXR1cm4gbV9iaXRtYXBJbWFnZS0+
ZmlsZW5hbWVFeHRlbnNpb24oKTsKK30KKwordm9pZCBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6
ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCkKK3sKKyAgICBSZXRhaW5lZE1vZGVT
YXZlciByZXRhaW5lZE1vZGVTYXZlcih0aGlzKTsKKyAgICBtX2JpdG1hcEltYWdlLT5kZXN0cm95
RGVjb2RlZERhdGEoZGVzdHJveUFsbCk7Cit9CisKK3Vuc2lnbmVkIFJldGFpbmVkTW9kZUJpdG1h
cEltYWdlOjpkZWNvZGVkU2l6ZSgpIGNvbnN0Cit7CisgICAgUmV0YWluZWRNb2RlU2F2ZXIgcmV0
YWluZWRNb2RlU2F2ZXIodGhpcyk7CisgICAgcmV0dXJuIG1fYml0bWFwSW1hZ2UtPmRlY29kZWRT
aXplKCk7Cit9CisKK3ZvaWQgUmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OnN0YXJ0QW5pbWF0aW9u
KGJvb2wgY2F0Y2hVcElmTmVjZXNzYXJ5KQoreworICAgIFJldGFpbmVkTW9kZVNhdmVyIHJldGFp
bmVkTW9kZVNhdmVyKHRoaXMpOworICAgIG1fYml0bWFwSW1hZ2UtPnN0YXJ0QW5pbWF0aW9uKGNh
dGNoVXBJZk5lY2Vzc2FyeSk7Cit9CisKK3ZvaWQgUmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OnN0
b3BBbmltYXRpb24oKQoreworICAgIFJldGFpbmVkTW9kZVNhdmVyIHJldGFpbmVkTW9kZVNhdmVy
KHRoaXMpOworICAgIG1fYml0bWFwSW1hZ2UtPnN0b3BBbmltYXRpb24oKTsKK30KKwordm9pZCBS
ZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6cmVzZXRBbmltYXRpb24oKQoreworICAgIFJldGFpbmVk
TW9kZVNhdmVyIHJldGFpbmVkTW9kZVNhdmVyKHRoaXMpOworICAgIG1fYml0bWFwSW1hZ2UtPnJl
c2V0QW5pbWF0aW9uKCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIFJldGFpbmVkTW9kZUJpdG1hcElt
YWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCit7CisgICAgUmV0YWluZWRNb2RlU2F2
ZXIgcmV0YWluZWRNb2RlU2F2ZXIodGhpcyk7CisgICAgcmV0dXJuIG1fYml0bWFwSW1hZ2UtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Cit9CisKK2Jvb2wgUmV0YWluZWRNb2RlQml0bWFw
SW1hZ2U6OmN1cnJlbnRGcmFtZUhhc0FscGhhKCkKK3sKKyAgICBSZXRhaW5lZE1vZGVTYXZlciBy
ZXRhaW5lZE1vZGVTYXZlcih0aGlzKTsKKyAgICByZXR1cm4gbV9iaXRtYXBJbWFnZS0+Y3VycmVu
dEZyYW1lSGFzQWxwaGEoKTsKK30KKworYm9vbCBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6Y3Vy
cmVudEZyYW1lSXNDb21wbGV0ZSgpCit7CisgICAgUmV0YWluZWRNb2RlU2F2ZXIgcmV0YWluZWRN
b2RlU2F2ZXIodGhpcyk7CisgICAgcmV0dXJuIG1fYml0bWFwSW1hZ2UtPmN1cnJlbnRGcmFtZUlz
Q29tcGxldGUoKTsKK30KKwordm9pZCBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6ZHJhdyhHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3ApCit7CisgICAgUmV0YWluZWRNb2RlU2F2ZXIgcmV0YWluZWRNb2RlU2F2ZXIodGhp
cyk7CisgICAgbV9iaXRtYXBJbWFnZS0+ZHJhdyhjb250ZXh0LCBkc3RSZWN0LCBzcmNSZWN0LCBz
dHlsZUNvbG9yU3BhY2UsIG9wKTsKK30KKworYm9vbCBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6
bWF5RmlsbFdpdGhTb2xpZENvbG9yKCkKK3sKKyAgICBSZXRhaW5lZE1vZGVTYXZlciByZXRhaW5l
ZE1vZGVTYXZlcih0aGlzKTsKKyAgICByZXR1cm4gbV9iaXRtYXBJbWFnZS0+bWF5RmlsbFdpdGhT
b2xpZENvbG9yKCk7Cit9CisKK0NvbG9yIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpzb2xpZENv
bG9yKCkgY29uc3QKK3sKKyAgICBSZXRhaW5lZE1vZGVTYXZlciByZXRhaW5lZE1vZGVTYXZlcih0
aGlzKTsKKyAgICByZXR1cm4gbV9iaXRtYXBJbWFnZS0+c29saWRDb2xvcigpOworfQorCitSZXRh
aW5lZE1vZGVTYXZlcjo6UmV0YWluZWRNb2RlU2F2ZXIoY29uc3QgUmV0YWluZWRNb2RlQml0bWFw
SW1hZ2UqIGltYWdlLCBib29sIHJldGFpbmVkKQorICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICAs
IG1fcmV0YWluZWQocmV0YWluZWQpCit7CisgICAgaWYgKG1fcmV0YWluZWQpCisgICAgICAgIG1f
aW1hZ2UtPmJlZ2luUmV0YWluZWRNb2RlKCk7Cit9CisKK1JldGFpbmVkTW9kZVNhdmVyOjp+UmV0
YWluZWRNb2RlU2F2ZXIoKQoreworICAgIGlmIChtX3JldGFpbmVkKQorICAgICAgICBtX2ltYWdl
LT5lbmRSZXRhaW5lZE1vZGUoKTsKK30KKworUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UqIHRvUmV0
YWluZWRNb2RlQml0bWFwSW1hZ2UoSW1hZ2UqIGltYWdlKQoreworICAgIEFTU0VSVChpbWFnZS0+
aXNCaXRtYXBJbWFnZSgpKTsKKworICAgIEJpdG1hcEltYWdlKiBiaXRtYXBJbWFnZSA9IHN0YXRp
Y19jYXN0PEJpdG1hcEltYWdlKj4oaW1hZ2UpOworICAgIGlmICghYml0bWFwSW1hZ2UtPm1fcmV0
YWluZWRNb2RlSW1hZ2UuZ2V0KCkpCisgICAgICAgIGJpdG1hcEltYWdlLT5tX3JldGFpbmVkTW9k
ZUltYWdlID0gUmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OmNyZWF0ZShiaXRtYXBJbWFnZSk7CisK
KyAgICByZXR1cm4gYml0bWFwSW1hZ2UtPm1fcmV0YWluZWRNb2RlSW1hZ2UuZ2V0KCk7Cit9CisK
K0ltYWdlKiB0b1JldGFpbmVkTW9kZUJpdG1hcEltYWdlSWZQb3NzaWJsZShJbWFnZSogaW1hZ2Up
Cit7CisgICAgaWYgKGltYWdlICYmIGltYWdlLT5pc0JpdG1hcEltYWdlKCkpCisgICAgICAgIHJl
dHVybiB0b1JldGFpbmVkTW9kZUJpdG1hcEltYWdlKGltYWdlKTsKKyAgICByZXR1cm4gaW1hZ2U7
Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Jl
dGFpbmVkTW9kZUJpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjMzZTdhOGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5oCkBAIC0wLDAgKzEsMTAxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZV9oCisjZGVmaW5l
IFJldGFpbmVkTW9kZUJpdG1hcEltYWdlX2gKKworI2luY2x1ZGUgIkltYWdlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQml0bWFwSW1hZ2U7CitjbGFzcyBSZXRhaW5lZE1vZGVT
YXZlcjsKKworY2xhc3MgUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UgOiBwdWJsaWMgSW1hZ2Ugewor
ICAgIGZyaWVuZCBjbGFzcyBSZXRhaW5lZE1vZGVTYXZlcjsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZT4gY3JlYXRlKEJpdG1hcEltYWdlKik7
CisKKyAgICB2aXJ0dWFsIH5SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZSgpIHsgfQorCisgICAgdmly
dHVhbCBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRIb3RTcG90KEludFBv
aW50JikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpOworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCA9
IHRydWUpOworICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdDsKKworICAg
IHZpcnR1YWwgdm9pZCBzdGFydEFuaW1hdGlvbihib29sIGNhdGNoVXBJZk5lY2Vzc2FyeSA9IHRy
dWUpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wQW5pbWF0aW9uKCk7CisgICAgdmlydHVhbCB2b2lk
IHJlc2V0QW5pbWF0aW9uKCk7CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgdmlydHVhbCBib29sIGN1cnJlbnRGcmFtZUhhc0Fs
cGhhKCk7CisKKyAgICBib29sIGN1cnJlbnRGcmFtZUlzQ29tcGxldGUoKTsKKworICAgIGlubGlu
ZSBib29sIHJldGFpbmVkTW9kZVJlbmRlcmluZygpIGNvbnN0IHsgcmV0dXJuIG1fcmV0YWluZWRN
b2RlQ291bnQ7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworCisg
ICAgdmlydHVhbCBib29sIG1heUZpbGxXaXRoU29saWRDb2xvcigpOworICAgIHZpcnR1YWwgQ29s
b3Igc29saWRDb2xvcigpIGNvbnN0OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFJldGFpbmVk
TW9kZUJpdG1hcEltYWdlKEJpdG1hcEltYWdlKik7CisKKyAgICBpbmxpbmUgdm9pZCBiZWdpblJl
dGFpbmVkTW9kZSgpIGNvbnN0IHsgbV9yZXRhaW5lZE1vZGVDb3VudCsrOyB9CisgICAgaW5saW5l
IHZvaWQgZW5kUmV0YWluZWRNb2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIG1fcmV0YWluZWRN
b2RlQ291bnQtLTsKKyAgICAgICAgQVNTRVJUKG1fcmV0YWluZWRNb2RlQ291bnQgPj0gMCk7Cisg
ICAgfQorCisgICAgQml0bWFwSW1hZ2UqIG1fYml0bWFwSW1hZ2U7CisgICAgbXV0YWJsZSBpbnQg
bV9yZXRhaW5lZE1vZGVDb3VudDsKK307CisKK2NsYXNzIFJldGFpbmVkTW9kZVNhdmVyIHsKK3B1
YmxpYzoKKyAgICBSZXRhaW5lZE1vZGVTYXZlcihjb25zdCBSZXRhaW5lZE1vZGVCaXRtYXBJbWFn
ZSosIGJvb2wgcmV0YWluZWQgPSB0cnVlKTsKKyAgICB+UmV0YWluZWRNb2RlU2F2ZXIoKTsKKwor
cHJpdmF0ZToKKyAgICBjb25zdCBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZSogbV9pbWFnZTsKKyAg
ICBib29sIG1fcmV0YWluZWQ7Cit9OworCisKK1JldGFpbmVkTW9kZUJpdG1hcEltYWdlKiB0b1Jl
dGFpbmVkTW9kZUJpdG1hcEltYWdlKEltYWdlKik7CitJbWFnZSogdG9SZXRhaW5lZE1vZGVCaXRt
YXBJbWFnZUlmUG9zc2libGUoSW1hZ2UqKTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmlu
ZGV4IGUzYTU2NWQuLjZmOTU3NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtNzY2LDEzICs3NjYsMTEg
QEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2Up
CiB7CiAgICAgaWYgKGltYWdlKSB7CiAgICAgICAgIENHSW1hZ2VSZWYgbmV3SW1hZ2UgPSBpbWFn
ZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICAgICAgaWYgKCFuZXdJbWFnZSkK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKG5ld0ltYWdlKTsKIAogICAgICAg
ICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGltYWdlIGNoYW5nZWQ7IHdlIGhhdmUgdG8gZG8gdGhp
cyBiZWNhdXNlIHRoZSBjYWxsIHRvCiAgICAgICAgIC8vIENHSW1hZ2VDcmVhdGVDb3B5V2l0aENv
bG9yU3BhY2UoKSBiZWxvdyBjYW4gY3JlYXRlIGEgbmV3IGltYWdlIGV2ZXJ5IHRpbWUuCi0gICAg
ICAgIGlmIChtX3VuY29ycmVjdGVkQ29udGVudHNJbWFnZSAmJiBtX3VuY29ycmVjdGVkQ29udGVu
dHNJbWFnZS5nZXQoKSA9PSBuZXdJbWFnZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
QVNTRVJUKCFtX3VuY29ycmVjdGVkQ29udGVudHNJbWFnZSB8fCBtX3VuY29ycmVjdGVkQ29udGVu
dHNJbWFnZS5nZXQoKSAhPSBuZXdJbWFnZSk7CiAgICAgICAgIAogICAgICAgICBtX3VuY29ycmVj
dGVkQ29udGVudHNJbWFnZSA9IG5ld0ltYWdlOwogICAgICAgICBtX3BlbmRpbmdDb250ZW50c0lt
YWdlID0gbmV3SW1hZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCmluZGV4IGU5ZmE1YmUuLmY5NTI5
MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Jp
dG1hcEltYWdlQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCkBAIC00Miw2ICs0Miw3IEBAIFBhc3NSZWZQdHI8
Qml0bWFwSW1hZ2U+IEJpdG1hcEltYWdlOjpjcmVhdGUoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNl
KQogCiBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoTmF0aXZlSW1hZ2VDYWlybyogbmF0aXZlSW1h
Z2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCisgICAg
LCBtX3NvdXJjZSh0aGlzKQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKICAgICAsIG1fZnJhbWVz
KDApCiAgICAgLCBtX2ZyYW1lVGltZXIoMCkKQEAgLTU3LDYgKzU4LDcgQEAgQml0bWFwSW1hZ2U6
OkJpdG1hcEltYWdlKE5hdGl2ZUltYWdlQ2Fpcm8qIG5hdGl2ZUltYWdlLCBJbWFnZU9ic2VydmVy
KiBvYnNlcnZlcikKICAgICAsIG1faGF2ZVNpemUodHJ1ZSkKICAgICAsIG1fc2l6ZUF2YWlsYWJs
ZSh0cnVlKQogICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQorICAgICwgbV9pc0NhY2hpbmdG
cmFtZShmYWxzZSkKIHsKICAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBuYXRpdmVJbWFn
ZS0+c3VyZmFjZSgpOwogICAgIGludCB3aWR0aCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dp
ZHRoKHN1cmZhY2UpOwpAQCAtNjgsNiArNzAsNyBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2Uo
TmF0aXZlSW1hZ2VDYWlybyogbmF0aXZlSW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQog
ICAgIG1fZnJhbWVzWzBdLm1fZnJhbWUgPSBuYXRpdmVJbWFnZTsKICAgICBtX2ZyYW1lc1swXS5t
X2hhc0FscGhhID0gY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSAhPSBDQUlST19D
T05URU5UX0NPTE9SOwogICAgIG1fZnJhbWVzWzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKKyAg
ICBtX2ZyYW1lc1swXS5tX2lzQ29tcGxldGUgPSB0cnVlOwogICAgIGNoZWNrRm9yU29saWRDb2xv
cigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCmluZGV4IDYyZGExYTEu
Ljk3ZjU0YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCkBAIC0xNjUsNyAr
MTY1LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFn
ZSwgdW5zaWduZWQgaW50IGZvcm1hdCwgdW5zaWduZWQKICAgICAgICAgZGVjb2Rlci5zZXREYXRh
KGltYWdlLT5kYXRhKCksIHRydWUpOwogICAgICAgICBpZiAoIWRlY29kZXIuZnJhbWVDb3VudCgp
IHx8ICFkZWNvZGVyLmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoMCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIE93blB0cjxOYXRpdmVJbWFnZUNhaXJvPiBuYXRpdmVJbWFnZSA9
IGFkb3B0UHRyKGRlY29kZXIuY3JlYXRlRnJhbWVBdEluZGV4KDApKTsKKyAgICAgICAgT3duUHRy
PE5hdGl2ZUltYWdlQ2Fpcm8+IG5hdGl2ZUltYWdlID0gYWRvcHRQdHIoZGVjb2Rlci5yZXF1ZXN0
RnJhbWVBdEluZGV4KDApKTsKICAgICAgICAgaW1hZ2VTdXJmYWNlID0gbmF0aXZlSW1hZ2UtPnN1
cmZhY2UoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpbWFnZVN1cmZhY2UgPSBpbWFnZS0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKS0+c3VyZmFjZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNw
cAppbmRleCA1MGRlNTFmLi45NzQ1M2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcApAQCAtMTA3
LDcgKzEwNyw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSog
aW1hZ2UsCiAgICAgICAgIGRlY29kZXIuc2V0RGF0YShpbWFnZS0+ZGF0YSgpLCB0cnVlKTsKICAg
ICAgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgZGVjb2RlZEltYWdlLmFkb3B0Q0YoZGVjb2Rlci5jcmVhdGVGcmFtZUF0SW5k
ZXgoMCkpOworICAgICAgICBkZWNvZGVkSW1hZ2UuYWRvcHRDRihkZWNvZGVyLnJlcXVlc3RGcmFt
ZUF0SW5kZXgoMCkpOwogICAgICAgICBjZ0ltYWdlID0gZGVjb2RlZEltYWdlLmdldCgpOwogICAg
IH0gZWxzZQogICAgICAgICBjZ0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cu
Y3BwCmluZGV4IDg4YWRhYmYuLjY1MmEzNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCkBAIC03MCw2ICs3MCw3IEBAIGJvb2wgRnJhbWVE
YXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCiAKIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFn
ZShDR0ltYWdlUmVmIGNnSW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgIDogSW1h
Z2Uob2JzZXJ2ZXIpCisgICAgLCBtX3NvdXJjZSh0aGlzKQogICAgICwgbV9jdXJyZW50RnJhbWUo
MCkKICAgICAsIG1fZnJhbWVzKDApCiAgICAgLCBtX2ZyYW1lVGltZXIoMCkKQEAgLTg2LDYgKzg3
LDcgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKENHSW1hZ2VSZWYgY2dJbWFnZSwgSW1hZ2VP
YnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgLCBtX2hhdmVTaXplKHRydWUpCiAgICAgLCBtX3NpemVB
dmFpbGFibGUodHJ1ZSkKICAgICAsIG1faGF2ZUZyYW1lQ291bnQodHJ1ZSkKKyAgICAsIG1faXND
YWNoaW5nRnJhbWUoZmFsc2UpCiB7CiAgICAgQ0dGbG9hdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0
aChjZ0ltYWdlKTsKICAgICBDR0Zsb2F0IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFn
ZSk7CkBAIC0xMDAsNiArMTAyLDcgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKENHSW1hZ2VS
ZWYgY2dJbWFnZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgbV9mcmFtZXNbMF0ubV9m
cmFtZSA9IGNnSW1hZ2U7CiAgICAgbV9mcmFtZXNbMF0ubV9oYXNBbHBoYSA9IHRydWU7CiAgICAg
bV9mcmFtZXNbMF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOworICAgIG1fZnJhbWVzWzBdLm1faXND
b21wbGV0ZSA9IHRydWU7CiAKICAgICBjaGVja0ZvclNvbGlkQ29sb3IoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAK
aW5kZXggN2NmMDI5Ni4uYzgwOTlkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlICJJbWFnZVNvdXJjZUNHLmgiCiAKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgi
CisjaW5jbHVkZSAiSW1hZ2VTb3VyY2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIkludFBvaW50Lmgi
CiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKQEAg
LTcyLDYgKzczLDE2IEBAIHZvaWQgc2hhcmVkQnVmZmVyUmVsZWFzZSh2b2lkKiBpbmZvKQogCiBJ
bWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0
aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xv
clByb2ZpbGVPcHRpb24pCiAgICAgOiBtX2RlY29kZXIoMCkKKyAgICAsIG1fb2JzZXJ2ZXIoMCkK
KyAgICAvLyBGSVhNRTogbV9wcmVtdWx0aXBseUFscGhhIGlzIGlnbm9yZWQgaW4gY2cgYXQgdGhl
IG1vbWVudC4KKyAgICAsIG1fYWxwaGFPcHRpb24oYWxwaGFPcHRpb24pCisgICAgLCBtX2dhbW1h
QW5kQ29sb3JQcm9maWxlT3B0aW9uKGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQoreworfQor
CitJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2VPYnNlcnZlciogb2JzZXJ2ZXIs
IEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1h
QW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQorICAgIDog
bV9kZWNvZGVyKDApCisgICAgLCBtX29ic2VydmVyKG9ic2VydmVyKQogICAgIC8vIEZJWE1FOiBt
X3ByZW11bHRpcGx5QWxwaGEgaXMgaWdub3JlZCBpbiBjZyBhdCB0aGUgbW9tZW50LgogICAgICwg
bV9hbHBoYU9wdGlvbihhbHBoYU9wdGlvbikKICAgICAsIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVP
cHRpb24oZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCkBAIC0yOTksNiArMzEwLDE0IEBAIHNp
emVfdCBJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGVjb2Rl
ciA/IENHSW1hZ2VTb3VyY2VHZXRDb3VudChtX2RlY29kZXIpIDogMDsKIH0KIAorQ0dJbWFnZVJl
ZiBJbWFnZVNvdXJjZTo6cmVxdWVzdEZyYW1lQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAg
Q0dJbWFnZVJlZiBpbWFnZVJlZiA9IGNyZWF0ZUZyYW1lQXRJbmRleChpbmRleCk7CisgICAgaWYg
KG1fb2JzZXJ2ZXIpCisgICAgICAgIG1fb2JzZXJ2ZXItPmRpZERlY29kZUZyYW1lQXRJbmRleChp
bmRleCwgaW1hZ2VSZWYpOworICAgIHJldHVybiBpbWFnZVJlZjsKK30KKwogQ0dJbWFnZVJlZiBJ
bWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAo
IWluaXRpYWxpemVkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QREZEb2N1bWVudEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKaW5kZXggNGEyOGUzNy4uZGMzZDc2MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFn
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuaApAQCAtNTQsMTEgKzU0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IHZpcnR1YWwgYm9vbCBkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCk7CiAKLSAgICAg
ICAgLy8gRklYTUU6IFBERiBJbWFnZXMgYXJlIHVuZGVycmVwb3J0aW5nIGRlY29kZWQgc2l6ZXMg
YW5kIHdpbGwgYmUgdW5hYmxlCi0gICAgICAgIC8vIHRvIHBydW5lIGJlY2F1c2UgdGhlc2UgZnVu
Y3Rpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0LgotICAgICAgICB2aXJ0dWFsIHZvaWQgZGVz
dHJveURlY29kZWREYXRhKGJvb2wgLypkZXN0cm95QWxsKi8gPSB0cnVlKSB7IH0KLSAgICAgICAg
dmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQogICAg
ICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUludHJpbnNpY0RpbWVuc2lvbnMoTGVuZ3RoJiBpbnRy
aW5zaWNXaWR0aCwgTGVuZ3RoJiBpbnRyaW5zaWNIZWlnaHQsIEZsb2F0U2l6ZSYgaW50cmluc2lj
UmF0aW8pOwogICAgICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvSW1hZ2VPcGVuVkcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0ltYWdlT3BlblZH
LmNwcAppbmRleCA5NTEwODgyLi43MGU1MzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvSW1hZ2VPcGVuVkcuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9JbWFnZU9wZW5WRy5jcHAKQEAgLTUyLDYgKzUy
LDcgQEAgYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKIAogQml0bWFw
SW1hZ2U6OkJpdG1hcEltYWdlKFRpbGVkSW1hZ2VPcGVuVkcqIHRpbGVkSW1hZ2UsIEltYWdlT2Jz
ZXJ2ZXIqIG9ic2VydmVyKQogICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCisgICAgLCBtX3NvdXJjZSh0
aGlzKQogICAgICwgbV9zaXplKHRpbGVkSW1hZ2UtPnNpemUoKSkKICAgICAsIG1fY3VycmVudEZy
YW1lKDApCiAgICAgLCBtX2ZyYW1lcygxKQpAQCAtNjksNiArNzAsNyBAQCBCaXRtYXBJbWFnZTo6
Qml0bWFwSW1hZ2UoVGlsZWRJbWFnZU9wZW5WRyogdGlsZWRJbWFnZSwgSW1hZ2VPYnNlcnZlciog
b2JzZXJ2ZXIpCiAgICAgLCBtX3NpemVBdmFpbGFibGUodHJ1ZSkKICAgICAsIG1faGFzVW5pZm9y
bUZyYW1lU2l6ZSh0cnVlKQogICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQorICAgICwgbV9p
c0NhY2hpbmdGcmFtZShmYWxzZSkKIHsKICAgICBBU1NFUlQobV9zaXplLndpZHRoKCkgPiAwKTsK
ICAgICBBU1NFUlQobV9zaXplLmhlaWdodCgpID4gMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCmluZGV4IDEwZmUxZmUuLjI2NWIzY2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCkBA
IC0yMDEsNiArMjAxLDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdAogCiBCaXRtYXBJbWFnZTo6
Qml0bWFwSW1hZ2UoUUltYWdlKiBpbWFnZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAg
OiBJbWFnZShvYnNlcnZlcikKKyAgICAsIG1fc291cmNlKHRoaXMpCiAgICAgLCBtX2N1cnJlbnRG
cmFtZSgwKQogICAgICwgbV9mcmFtZXMoMCkKICAgICAsIG1fZnJhbWVUaW1lcigwKQpAQCAtMjE2
LDYgKzIxNyw3IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShRSW1hZ2UqIGltYWdlLCBJbWFn
ZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICAsIG1faGF2ZVNpemUodHJ1ZSkKICAgICAsIG1fc2l6
ZUF2YWlsYWJsZSh0cnVlKQogICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQorICAgICwgbV9p
c0NhY2hpbmdGcmFtZShmYWxzZSkKIHsKICAgICBpbnQgd2lkdGggPSBpbWFnZS0+d2lkdGgoKTsK
ICAgICBpbnQgaGVpZ2h0ID0gaW1hZ2UtPmhlaWdodCgpOwpAQCAtMjI2LDYgKzIyOCw3IEBAIEJp
dG1hcEltYWdlOjpCaXRtYXBJbWFnZShRSW1hZ2UqIGltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNl
cnZlcikKICAgICBtX2ZyYW1lc1swXS5tX2ZyYW1lID0gaW1hZ2U7CiAgICAgbV9mcmFtZXNbMF0u
bV9oYXNBbHBoYSA9IGltYWdlLT5oYXNBbHBoYUNoYW5uZWwoKTsKICAgICBtX2ZyYW1lc1swXS5t
X2hhdmVNZXRhZGF0YSA9IHRydWU7CisgICAgbV9mcmFtZXNbMF0ubV9pc0NvbXBsZXRlID0gdHJ1
ZTsKICAgICBjaGVja0ZvclNvbGlkQ29sb3IoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuaAppbmRleCA4YzllYzBkLi45ZjNj
OWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGls
bEltYWdlUXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGls
bEltYWdlUXQuaApAQCAtNDYsMTEgKzQ2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50RnJhbWVIYXNBbHBoYSgpOwogCi0gICAgICAgIC8vIEZJ
WE1FOiBTdGlsbEltYWdlcyBhcmUgdW5kZXJyZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBhbmQgd2ls
bCBiZSB1bmFibGUKLSAgICAgICAgLy8gdG8gcHJ1bmUgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMg
YXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVj
b2RlZERhdGEoYm9vbCBkZXN0cm95QWxsID0gdHJ1ZSkgeyBRX1VOVVNFRChkZXN0cm95QWxsKTsg
fQotICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyByZXR1cm4g
MDsgfQotCiAgICAgICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Q7CiAgICAgICAgIHZp
cnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNr
aWEuY3BwCmluZGV4IDI4ZWFkOGYuLjRkZTRkZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5n
bGVGcmFtZVNraWEuY3BwCkBAIC00LDExICs0LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1ib29sIEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjppc0JpdG1hcEltYWdlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tp
YTo6Y3VycmVudEZyYW1lSGFzQWxwaGEoKQogewogICAgIHJldHVybiAhbV9uYXRpdmVJbWFnZS5i
aXRtYXAoKS5pc09wYXF1ZSgpOwpAQCAtMTksMTcgKzE0LDYgQEAgSW50U2l6ZSBCaXRtYXBJbWFn
ZVNpbmdsZUZyYW1lU2tpYTo6c2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIEludFNpemUobV9uYXRp
dmVJbWFnZS5iaXRtYXAoKS53aWR0aCgpLCBtX25hdGl2ZUltYWdlLmJpdG1hcCgpLmhlaWdodCgp
KTsKIH0KIAotLy8gRG8gbm90aGluZywgYXMgd2Ugb25seSBoYXZlIHRoZSBvbmUgcmVwcmVzZW50
YXRpb24gb2YgZGF0YSAoZGVjb2RlZCkuCi12b2lkIEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lh
OjpkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxsKQotewotCi19Ci0KLXVuc2lnbmVk
IEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpkZWNvZGVkU2l6ZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fbmF0aXZlSW1hZ2UuZGVjb2RlZFNpemUoKTsKLX0KLQogLy8gV2Ugb25seSBoYXZl
IGEgc2luZ2xlIGZyYW1lLgogTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNr
aWE6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKIHsKQEAgLTQ0LDQgKzI4LDMgQEAgYm9v
bCBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6bm90U29saWRDb2xvcigpCiAjZW5kaWYKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lh
LmgKaW5kZXggZjBkMTE5Mi4uYmQ3NDYwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5nbGVGcmFt
ZVNraWEuaApAQCAtNTEsMTcgKzUxLDEwIEBAIHB1YmxpYzoKICAgICAvLyByZWYnZWQpLgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhPiBjcmVhdGUoY29u
c3QgU2tCaXRtYXAmLCBib29sIGNvcHlQaXhlbHMsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEp
OwogCi0gICAgdmlydHVhbCBib29sIGlzQml0bWFwSW1hZ2UoKSBjb25zdDsKLQogICAgIHZpcnR1
YWwgYm9vbCBjdXJyZW50RnJhbWVIYXNBbHBoYSgpOwogCiAgICAgdmlydHVhbCBJbnRTaXplIHNp
emUoKSBjb25zdDsKIAotICAgIC8vIERvIG5vdGhpbmcsIGFzIHdlIG9ubHkgaGF2ZSB0aGUgb25l
IHJlcHJlc2VudGF0aW9uIG9mIGRhdGEgKGRlY29kZWQpLgotICAgIHZpcnR1YWwgdm9pZCBkZXN0
cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxsID0gdHJ1ZSk7Ci0KLSAgICB2aXJ0dWFsIHVu
c2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3Q7Ci0KICAgICAvLyBXZSBvbmx5IGhhdmUgYSBzaW5n
bGUgZnJhbWUuCiAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKaW5kZXggMTdhZDgzZC4u
MTk4OTlhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcApAQCAtNjMsNyArNjMsNyBA
QCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAogICAg
ICAgICBpZiAoIWRlY29kZXIuZnJhbWVDb3VudCgpIHx8ICFkZWNvZGVyLmZyYW1lSXNDb21wbGV0
ZUF0SW5kZXgoMCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGhhc0FscGhh
ID0gZGVjb2Rlci5mcmFtZUhhc0FscGhhQXRJbmRleCgwKTsKLSAgICAgICAgcGl4ZWxzID0gYWRv
cHRQdHIoZGVjb2Rlci5jcmVhdGVGcmFtZUF0SW5kZXgoMCkpOworICAgICAgICBwaXhlbHMgPSBh
ZG9wdFB0cihkZWNvZGVyLnJlcXVlc3RGcmFtZUF0SW5kZXgoMCkpOwogICAgICAgICBpZiAoIXBp
eGVscy5nZXQoKSB8fCAhcGl4ZWxzLT5pc0RhdGFDb21wbGV0ZSgpIHx8ICFwaXhlbHMtPmJpdG1h
cCgpLndpZHRoKCkgfHwgIXBpeGVscy0+Yml0bWFwKCkuaGVpZ2h0KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZpZyA9IHBpeGVs
cy0+Yml0bWFwKCkuY29uZmlnKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyLmNwcAppbmRleCBmNzM1ZGUyLi42MWRjZjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTMyNSw4ICszMjUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgdmFsdWUpCiAq
Lwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb0ltYWdlKElt
YWdlKiBpbWFnZSkKIHsKLSAgICBpZiAoaW1hZ2UgPT0gbV9pbWFnZSkKLSAgICAgICAgcmV0dXJu
OworICAgIEFTU0VSVChpbWFnZSAhPSBtX2ltYWdlKTsKIAogICAgIG1faW1hZ2UgPSBpbWFnZTsK
ICAgICBpZiAobV9pbWFnZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNFLmNwcAppbmRleCA1NzIwNzA1Li42
ZDE5NGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9JbWFnZUJ1ZmZlcldpbkNFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbkNFLmNwcApAQCAtMzksOCArMzksNiBAQCBwdWJsaWM6
CiAgICAgfQogCiAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBJbnRT
aXplKG1fZGF0YS0+bV9iaXRtYXAtPndpZHRoKCksIG1fZGF0YS0+bV9iaXRtYXAtPmhlaWdodCgp
KTsgfQotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxs
ID0gdHJ1ZSkge30KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNl
IHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwogICAgIHZpcnR1YWwgdm9pZCBk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlV3guY3BwCmluZGV4
IDU0YmJkYmIuLjYwMDgzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3d4L0ltYWdlV3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3d4L0ltYWdlV3guY3BwCkBAIC04Miw2ICs4Miw3IEBAIFBhc3NSZWZQdHI8SW1hZ2U+IElt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyICpuYW1lKQogCiBCaXRtYXBJbWFn
ZTo6Qml0bWFwSW1hZ2UoY29uc3Qgd3hCaXRtYXAmIGJpdG1hcCkKICAgICA6IEltYWdlKDApCisg
ICAgLCBtX3NvdXJjZSh0aGlzKQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKICAgICAsIG1fZnJh
bWVzKDApCiAgICAgLCBtX2ZyYW1lVGltZXIoMCkKQEAgLTk3LDYgKzk4LDcgQEAgQml0bWFwSW1h
Z2U6OkJpdG1hcEltYWdlKGNvbnN0IHd4Qml0bWFwJiBiaXRtYXApCiAgICAgLCBtX2RlY29kZWRT
aXplKDApCiAgICAgLCBtX2hhdmVGcmFtZUNvdW50KHRydWUpCiAgICAgLCBtX2ZyYW1lQ291bnQo
MSkKKyAgICAsIG1faXNDYWNoaW5nRnJhbWUoZmFsc2UpCiB7CiAgICAgbV9kZWNvZGVkU2l6ZSA9
IGJpdG1hcC5HZXRXaWR0aCgpICogYml0bWFwLkdldEhlaWdodCgpICogNDsKICAgICBtX3NpemUg
PSBJbnRTaXplKGJpdG1hcC5HZXRXaWR0aCgpLCBiaXRtYXAuR2V0SGVpZ2h0KCkpOwpAQCAtMTE0
LDYgKzExNiw3IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShjb25zdCB3eEJpdG1hcCYgYml0
bWFwKQogICAgICAgICBtX2ZyYW1lcy5ncm93KDEpOwogICAgICAgICBtX2ZyYW1lc1swXS5tX2Zy
YW1lID0gZ2JtcDsKICAgICAgICAgbV9mcmFtZXNbMF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwor
ICAgICAgICBtX2ZyYW1lc1swXS5tX2lzQ29tcGxldGUgPSB0cnVlOwogICAgICAgICBjaGVja0Zv
clNvbGlkQ29sb3IoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAppbmRleCA3MmI1ZGRjLi43ZGI0
MTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5jcHAKQEAgLTE0MCw2ICsxNDAsNyBAQCBJbWFnZURlY29kZXIqIElt
YWdlRGVjb2Rlcjo6Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSwgSW1hZ2VTb3VyY2U6
OkFscGhhTwogCiBJbWFnZUZyYW1lOjpJbWFnZUZyYW1lKCkKICAgICA6IG1faGFzQWxwaGEoZmFs
c2UpCisgICAgLCBtX2xhc3REZWNvZGVkUm93KDApCiAgICAgLCBtX3N0YXR1cyhGcmFtZUVtcHR5
KQogICAgICwgbV9kdXJhdGlvbigwKQogICAgICwgbV9kaXNwb3NhbE1ldGhvZChEaXNwb3NlTm90
U3BlY2lmaWVkKQpAQCAtMTY1LDYgKzE2Niw3IEBAIHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhl
bERhdGEoKQogewogICAgIG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7CiAgICAgbV9ieXRlcyA9IDA7
CisgICAgbV9sYXN0RGVjb2RlZFJvdyA9IDA7CiAgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5Owog
ICAgIC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7IGNsZWFyRnJhbWVC
dWZmZXJDYWNoZSgpIGNhbGxzIHRoaXMKICAgICAvLyB0byBmcmVlIHRoZSBiaXRtYXAgZGF0YSwg
YnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlIGluaXRGcmFtZUJ1ZmZlcigpIGFuZApAQCAtMTg3LDYg
KzE4OSw3IEBAIGJvb2wgSW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEoY29uc3QgSW1hZ2VGcmFt
ZSYgb3RoZXIpCiAgICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKICAgICBtX3Np
emUgPSBvdGhlci5tX3NpemU7CiAgICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7Cisg
ICAgbV9sYXN0RGVjb2RlZFJvdyA9IG90aGVyLm1fbGFzdERlY29kZWRSb3c7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTE5OSwxMSArMjAyLDE3IEBAIGJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6
ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpCiAgICAgbV9iYWNraW5nU3RvcmUucmVzaXpl
KGJhY2tpbmdTdG9yZVNpemUpOwogICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7
CiAgICAgbV9zaXplID0gSW50U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKKyAgICBtX2xhc3RE
ZWNvZGVkUm93ID0gMDsKIAogICAgIHplcm9GaWxsUGl4ZWxEYXRhKCk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK0ludFNpemUgSW1hZ2VGcmFtZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc2l6ZTsKK30KKwogYm9vbCBJbWFnZUZyYW1lOjpoYXNBbHBoYSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1faGFzQWxwaGE7CkBAIC0yNzcsNiArMjg2LDM5IEBAIHRlbXBsYXRlIDxNYXRjaFR5
cGUgdHlwZT4gaW50IGdldFNjYWxlZFZhbHVlKGNvbnN0IFZlY3RvcjxpbnQ+JiBzY2FsZWRWYWx1
ZXMsIGluCiAKIH0KIAorZmxvYXQgSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleChz
aXplX3QgaW5kZXgpCit7CisgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gZnJhbWVCdWZmZXJBdElu
ZGV4V2l0aG91dERlY29kaW5nKGluZGV4KTsKKyAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0
YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiBidWZmZXItPmR1cmF0aW9uKCk7Cit9CisKK2Jvb2wgSW1hZ2VEZWNvZGVyOjpmcmFt
ZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgSW1hZ2VGcmFtZSogYnVmZmVy
ID0gZnJhbWVCdWZmZXJBdEluZGV4V2l0aG91dERlY29kaW5nKGluZGV4KTsKKyAgICBpZiAoIWJ1
ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBidWZmZXItPmhhc0FscGhhKCk7Cit9CisKK2Jv
b2wgSW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKK3sK
KyAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSBmcmFtZUJ1ZmZlckF0SW5kZXhXaXRob3V0RGVjb2Rp
bmcoaW5kZXgpOworICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5zdGF0dXMoKSA9PSBJbWFn
ZUZyYW1lOjpGcmFtZUNvbXBsZXRlOworfQorCitJbWFnZUZyYW1lKiBJbWFnZURlY29kZXI6OmZy
YW1lQnVmZmVyQXRJbmRleFdpdGhvdXREZWNvZGluZyhzaXplX3QgaW5kZXgpCit7CisgICAgcmV0
dXJuIG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgPiBpbmRleCA/ICZtX2ZyYW1lQnVmZmVyQ2Fj
aGVbaW5kZXhdIDogMDsKK30KKwordm9pZCBJbWFnZURlY29kZXI6OmVuc3VyZUZyYW1lQnVmZmVy
QXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXpl
KCkgPD0gaW5kZXgpCisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoaW5kZXggKyAx
KTsKK30KKwogdm9pZCBJbWFnZURlY29kZXI6OnByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSgp
CiB7CiAgICAgbV9zY2FsZWQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXggOTExODc4ZS4uZTVmYTYw
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
SW1hZ2VEZWNvZGVyLmgKQEAgLTExMSw2ICsxMTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIC8vIGFyZSB3cml0dGVuLiAgTXVzdCBvbmx5IGJlIGNhbGxlZCBvbmNlLiAgUmV0dXJu
cyB3aGV0aGVyIGFsbG9jYXRpb24KICAgICAgICAgLy8gc3VjY2VlZGVkLgogICAgICAgICBib29s
IHNldFNpemUoaW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KTsKKyAgICAgICAgSW50U2l6ZSBz
aXplKCkgY29uc3Q7CiAKICAgICAgICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBwb2ludGVy
IHRvIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBpbWFnZSBkYXRhLgogICAgICAgICAvLyAoQWN0dWFs
IHVzZTogVGhpcyBwb2ludGVyIHdpbGwgYmUgb3duZWQgYnkgQml0bWFwSW1hZ2UgYW5kIGZyZWVk
IGluCkBAIC0xMTgsNiArMTE5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBOYXRp
dmVJbWFnZVB0ciBhc05ld05hdGl2ZUltYWdlKCkgY29uc3Q7CiAKICAgICAgICAgYm9vbCBoYXNB
bHBoYSgpIGNvbnN0OworICAgICAgICBpbnQgbGFzdERlY29kZWRSb3coKSBjb25zdCB7IHJldHVy
biBtX2xhc3REZWNvZGVkUm93OyB9CiAgICAgICAgIGNvbnN0IEludFJlY3QmIG9yaWdpbmFsRnJh
bWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hbEZyYW1lUmVjdDsgfQogICAgICAgICBG
cmFtZVN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQogICAgICAgICB1
bnNpZ25lZCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KQEAgLTEyNSw2
ICsxMjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVsdGlwbHlBbHBoYTsgfQogCiAgICAgICAgIHZv
aWQgc2V0SGFzQWxwaGEoYm9vbCBhbHBoYSk7CisgICAgICAgIGlubGluZSB2b2lkIHNldExhc3RE
ZWNvZGVkUm93KGludCBsYXN0RGVjb2RlZFJvdykgeyBtX2xhc3REZWNvZGVkUm93ID0gbGFzdERl
Y29kZWRSb3c7IH0KICAgICAgICAgdm9pZCBzZXRDb2xvclByb2ZpbGUoY29uc3QgQ29sb3JQcm9m
aWxlJik7CiAgICAgICAgIHZvaWQgc2V0T3JpZ2luYWxGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYg
cikgeyBtX29yaWdpbmFsRnJhbWVSZWN0ID0gcjsgfQogICAgICAgICB2b2lkIHNldFN0YXR1cyhG
cmFtZVN0YXR1cyBzdGF0dXMpOwpAQCAtMTgxLDYgKzE4NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgbV9jb2xvclByb2ZpbGUgYW55bW9yZT8K
ICAgICAgICAgQ29sb3JQcm9maWxlIG1fY29sb3JQcm9maWxlOwogI2VuZGlmCisgICAgICAgIGlu
dCBtX2xhc3REZWNvZGVkUm93OwogICAgICAgICBJbnRSZWN0IG1fb3JpZ2luYWxGcmFtZVJlY3Q7
IC8vIFRoaXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZyYW1lcyB3aG9z
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsIHJlY3Qg
d2FzIHNtYWxsZXIgdGhhbiB0aGUKQEAgLTIyOCw2ICsyMzIsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgICAgICBtX2lzQWxsRGF0YVJlY2VpdmVkID0gYWxsRGF0YVJlY2VpdmVkOwog
ICAgICAgICB9CiAKKyAgICAgICAgU2hhcmVkQnVmZmVyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhLmdldCgpOyB9CisKICAgICAgICAgLy8gTGF6aWx5LWRlY29kZXMgZW5vdWdoIG9mIHRo
ZSBpbWFnZSB0byBnZXQgdGhlIHNpemUgKGlmIHBvc3NpYmxlKS4KICAgICAgICAgLy8gRklYTUU6
IFJpZ2h0IG5vdyB0aGF0IGhhcyB0byBiZSBkb25lIGJ5IGVhY2ggc3ViY2xhc3M7IGZhY3RvciB0
aGUKICAgICAgICAgLy8gZGVjb2RlIGNhbGwgb3V0IGFuZCB1c2UgaXQgaGVyZS4KQEAgLTI3NSw2
ICsyODEsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBEZWNvZGVzIGFzIG11
Y2ggb2YgdGhlIHJlcXVlc3RlZCBmcmFtZSBhcyBwb3NzaWJsZSwgYW5kIHJldHVybnMgYW4KICAg
ICAgICAgLy8gSW1hZ2VEZWNvZGVyLW93bmVkIHBvaW50ZXIuCiAgICAgICAgIHZpcnR1YWwgSW1h
Z2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCkgPSAwOworICAgICAgICB2aXJ0dWFs
IGZsb2F0IGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCk7CisgICAgICAgIHZpcnR1YWwgYm9v
bCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QpOworICAgICAgICB2aXJ0dWFsIGJvb2wgZnJh
bWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QpOworCisgICAgICAgIC8vIFJldHVybnMgYW4gSW1h
Z2VEZWNvZGVyLW93bmVkIHBvaW50ZXIgd2l0aG91dCBkZWNvZGluZy4KKyAgICAgICAgSW1hZ2VG
cmFtZSogZnJhbWVCdWZmZXJBdEluZGV4V2l0aG91dERlY29kaW5nKHNpemVfdCk7CisKKyAgICAg
ICAgdm9pZCBlbnN1cmVGcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90KTsKIAogICAgICAgICB2b2lk
IHNldElnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKGJvb2wgZmxhZykgeyBtX2lnbm9yZUdhbW1h
QW5kQ29sb3JQcm9maWxlID0gZmxhZzsgfQogICAgICAgICBib29sIGlnbm9yZXNHYW1tYUFuZENv
bG9yUHJvZmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1faWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGU7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Js
YWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURlY29kZXIuY3BwCmluZGV4IDZhNjVl
NjEuLmJkY2FlZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmNw
cApAQCAtMTU3LDYgKzE1Nyw3IEBAIGludCBJbWFnZVJlYWRlcjo6ZGVjb2RlKHNpemVfdCB3aWR0
aCwgc2l6ZV90IGhlaWdodCwgSW1hZ2VGcmFtZSogYUZyYW1lKQogICAgICAgICAgICAgYUZyYW1l
LT5zZXRSR0JBKGksIGosIGN1clB0clswXSwgY3VyUHRyWzFdLCBjdXJQdHJbMl0sIDI1NSk7CiAg
ICAgICAgICAgICBjdXJQdHIgKz0gMzsKICAgICAgICAgfQorICAgICAgICBhRnJhbWUtPnNldExh
c3REZWNvZGVkUm93KGopOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdl
RGVjb2Rlci5jcHAKaW5kZXggNDNlZjUxOC4uYjJiODE2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVj
b2Rlci5jcHAKQEAgLTY0LDggKzY0LDE1IEBAIHZvaWQgQk1QSW1hZ2VEZWNvZGVyOjpzZXREYXRh
KFNoYXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAKIGJvb2wgQk1QSW1h
Z2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogewotICAgIGlmICghSW1hZ2VEZWNvZGVyOjpp
c1NpemVBdmFpbGFibGUoKSkKKyAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxl
KCkpIHsKKyAgICAgICAgLy8gT25seSBCTVBJbWFnZURlY29kZXIgbXVzdCBtYWtlIG1fZnJhbWVC
dWZmZXJDYWNoZVswXSBpbiBpc1NpemVBdmFpbGFibGUoKSwKKyAgICAgICAgLy8gYmVjYXVzZSB0
aGUgZGVmYXVsdCB2YWx1ZSBvZiBJbWFnZUZyYW1lOjptX2xhc3REZWNvZGVkUm93IGNhbiBiZSAi
aGVpZ2h0IC0gMSIuCisgICAgICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOworICAgICAgICAgICAg
bV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCkuc2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRp
cGx5QWxwaGEpOworICAgICAgICB9CiAgICAgICAgIGRlY29kZSh0cnVlKTsKKyAgICB9CiAKICAg
ICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1h
Z2VSZWFkZXIuY3BwCmluZGV4IDVjMDA1NTMuLjRmN2UzMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVh
ZGVyLmNwcApAQCAtNjQsOCArNjQsMTEgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1Q
KGJvb2wgb25seVNpemUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIHByb2Nlc3NJ
bmZvSGVhZGVyKCkgc2V0IHRoZSBzaXplLCBzbyBpZiB0aGF0J3MgYWxsIHdlIG5lZWRlZCwgd2Un
cmUgZG9uZS4KLSAgICBpZiAob25seVNpemUpCisgICAgaWYgKG9ubHlTaXplKSB7CisgICAgICAg
IGlmICghbV9pc1RvcERvd24pCisgICAgICAgICAgICBtX2J1ZmZlci0+c2V0TGFzdERlY29kZWRS
b3cobV9wYXJlbnQtPnNpemUoKS5oZWlnaHQoKSAtIDEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CiAKICAgICAvLyBSZWFkIGFuZCBwcm9jZXNzIHRoZSBiaXRtYXNrcywgaWYgbmVlZGVk
LgogICAgIGlmIChtX25lZWRUb1Byb2Nlc3NCaXRtYXNrcyAmJiAhcHJvY2Vzc0JpdG1hc2tzKCkp
CkBAIC02MjQsNiArNjI3LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc1JMRURhdGEo
KQogCiAgICAgICAgICAgICAgICAgbV9kZWNvZGVkT2Zmc2V0ICs9IDI7CiAgICAgICAgICAgICB9
CisgICAgICAgICAgICBtX2J1ZmZlci0+c2V0TGFzdERlY29kZWRSb3cobV9jb29yZC55KCkpOwog
ICAgICAgICB9CiAgICAgfQogfQpAQCAtNzE3LDYgKzcyMSw3IEBAIEJNUEltYWdlUmVhZGVyOjpQ
cm9jZXNzaW5nUmVzdWx0IEJNUEltYWdlUmVhZGVyOjpwcm9jZXNzTm9uUkxFRGF0YShib29sIGlu
UkxFLCBpCiAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb21wb25lbnQocGl4ZWwsIDIpLCBh
bHBoYSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgbV9idWZmZXItPnNldExh
c3REZWNvZGVkUm93KG1fY29vcmQueSgpKTsKIAogICAgICAgICAvLyBTdWNjZXNzLCBrZWVwIGdv
aW5nLgogICAgICAgICBtX2RlY29kZWRPZmZzZXQgKz0gcGFkZGVkTnVtQnl0ZXM7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VE
ZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9H
SUZJbWFnZURlY29kZXIuY3BwCmluZGV4IDcyNGVhMGQuLmZiZDUxODYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJ
bWFnZURlY29kZXIuY3BwCkBAIC0yNDksMTAgKzI0OSwxNCBAQCBib29sIEdJRkltYWdlRGVjb2Rl
cjo6aGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgY2hhciogcm93
QnVmZgogICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgsIHlCZWdpbiwgMCwgMCwgMCwg
MCk7CiAgICAgICAgIH0KICAgICB9CisgICAgYnVmZmVyLnNldExhc3REZWNvZGVkUm93KHlCZWdp
bik7CiAKICAgICAvLyBUZWxsIHRoZSBmcmFtZSB0byBjb3B5IHRoZSByb3cgZGF0YSBpZiBuZWVk
IGJlLgotICAgIGlmIChyZXBlYXRDb3VudCA+IDEpCisgICAgaWYgKHJlcGVhdENvdW50ID4gMSkg
ewogICAgICAgICBidWZmZXIuY29weVJvd05UaW1lcyh4QmVnaW4sIHhFbmQsIHlCZWdpbiwgeUVu
ZCk7CisgICAgICAgIEFTU0VSVCgoeUVuZCAtIDEpID49IDApOworICAgICAgICBidWZmZXIuc2V0
TGFzdERlY29kZWRSb3coeUVuZCAtIDEpOworICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtMzkwLDYgKzM5NCw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIo
dW5zaWduZWQgZnJhbWVJbmRleCkKICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHByZXZSZWN0
LnkoKTsgeSA8IHByZXZSZWN0Lm1heFkoKTsgKyt5KSB7CiAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCB4ID0gcHJldlJlY3QueCgpOyB4IDwgcHJldlJlY3QubWF4WCgpOyArK3gpCiAgICAgICAg
ICAgICAgICAgICAgICAgYnVmZmVyLT5zZXRSR0JBKHgsIHksIDAsIDAsIDAsIDApOworICAgICAg
ICAgICAgICAgICAgYnVmZmVyLT5zZXRMYXN0RGVjb2RlZFJvdyh5KTsKICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICBpZiAoKHByZXZSZWN0LndpZHRoKCkgPiAwKSAmJiAocHJldlJlY3Qu
aGVpZ2h0KCkgPiAwKSkKICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0SGFzQWxwaGEodHJ1
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9q
cGVnL0pQRUdJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAppbmRleCBiZWY0MjAzLi40Nzc4YWE2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVn
L0pQRUdJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKQEAgLTU3Nyw2ICs1NzcsNyBAQCBi
b29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAgICAgaWYgKHR1cmJvU3dp
enpsZWQoaW5mby0+b3V0X2NvbG9yX3NwYWNlKSkgewogICAgICAgICBBU1NFUlQoIW1fc2NhbGVk
KTsKICAgICAgICAgd2hpbGUgKGluZm8tPm91dHB1dF9zY2FubGluZSA8IGluZm8tPm91dHB1dF9o
ZWlnaHQpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5zZXRMYXN0RGVjb2RlZFJvdyhpbmZvLT5vdXRw
dXRfc2NhbmxpbmUpOwogICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcm93ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oYnVmZmVyLmdldEFkZHIoMCwgaW5mby0+b3V0cHV0X3Nj
YW5saW5lKSk7CiAgICAgICAgICAgICBpZiAoanBlZ19yZWFkX3NjYW5saW5lcyhpbmZvLCAmcm93
LCAxKSAhPSAxKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTYyOCw2ICs2Mjks
NyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAg
ICAgIGJ1ZmZlci5zZXRMYXN0RGVjb2RlZFJvdyhkZXN0WSk7CiAgICAgfQogCiAgICAgcmV0dXJu
IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCmluZGV4IDE1OGRlYmIuLmY3YzIxMTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9Q
TkdJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCkBAIC01MjAsNiArNTIwLDcgQEAgdm9pZCBQ
TkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVu
c2lnbmVkIHJvd0luZGV4LAogCiAgICAgaWYgKG5vblRyaXZpYWxBbHBoYSAmJiAhYnVmZmVyLmhh
c0FscGhhKCkpCiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShub25Ucml2aWFsQWxwaGEpOwor
ICAgIGJ1ZmZlci5zZXRMYXN0RGVjb2RlZFJvdyh5KTsKIH0KIAogdm9pZCBQTkdJbWFnZURlY29k
ZXI6OnBuZ0NvbXBsZXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3BwCmluZGV4IDVj
YzEzMmMuLjE0NGE4ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcApAQCAtNTcs
NiArNTcsNyBAQCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VG
cmFtZSYgb3RoZXIpCiB2b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkKIHsKICAgICBt
X2JpdG1hcC5iaXRtYXAoKS5yZXNldCgpOworICAgIG1fbGFzdERlY29kZWRSb3cgPSAwOwogICAg
IG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKICAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIg
bWVtYmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKQogICAgIC8vIGNhbGxzIHRoaXMg
dG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZQpAQCAtNzYs
NiArNzcsNyBAQCBib29sIEltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IEltYWdlRnJh
bWUmIG90aGVyKQogCiAgICAgbV9iaXRtYXAuYml0bWFwKCkucmVzZXQoKTsKICAgICBjb25zdCBO
YXRpdmVJbWFnZVNraWEmIG90aGVyQml0bWFwID0gb3RoZXIubV9iaXRtYXA7CisgICAgbV9sYXN0
RGVjb2RlZFJvdyA9IG90aGVyLm1fbGFzdERlY29kZWRSb3c7CiAgICAgcmV0dXJuIG90aGVyQml0
bWFwLmJpdG1hcCgpLmNvcHlUbygmbV9iaXRtYXAuYml0bWFwKCksIG90aGVyQml0bWFwLmJpdG1h
cCgpLmNvbmZpZygpKTsKIH0KIApAQCAtODQsNiArODYsNyBAQCBib29sIEltYWdlRnJhbWU6OnNl
dFNpemUoaW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQogICAgIC8vIHNldFNpemUoKSBzaG91
bGQgb25seSBiZSBjYWxsZWQgb25jZSwgaXQgbGVha3MgbWVtb3J5IG90aGVyd2lzZS4KICAgICBB
U1NFUlQoIXdpZHRoKCkgJiYgIWhlaWdodCgpKTsKIAorICAgIG1fbGFzdERlY29kZWRSb3cgPSAw
OwogICAgIG1fYml0bWFwLmJpdG1hcCgpLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9D
b25maWcsIG5ld1dpZHRoLCBuZXdIZWlnaHQpOwogICAgIGlmICghbV9iaXRtYXAuYml0bWFwKCku
YWxsb2NQaXhlbHMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTIsNiArOTUsMTEgQEAg
Ym9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAorSW50U2l6ZSBJbWFnZUZyYW1lOjpzaXplKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7Cit9CisKIE5hdGl2ZUltYWdl
UHRyIEltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAogewogICAgIHJldHVybiBu
ZXcgTmF0aXZlSW1hZ2VTa2lhKG1fYml0bWFwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIu
Y3BwCmluZGV4IDYxMjg5MGYuLmExNDI3NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVy
LmNwcApAQCAtMTMyLDE5ICsxMzIsMjYgQEAgYm9vbCBXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUo
Ym9vbCBvbmx5U2l6ZSkKICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICB9CiAK
LSAgICBzd2l0Y2ggKFdlYlBJVXBkYXRlKG1fZGVjb2RlciwgZGF0YUJ5dGVzLCBkYXRhU2l6ZSkp
IHsKLSAgICBjYXNlIFZQOF9TVEFUVVNfT0s6Ci0gICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1h
Z2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7Ci0gICAgICAgIFdlYlBJRGVsZXRlKG1fZGVjb2Rlcik7
Ci0gICAgICAgIG1fZGVjb2RlciA9IDA7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2Ug
VlA4X1NUQVRVU19TVVNQRU5ERUQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0
OgorICAgIGNvbnN0IFZQOFN0YXR1c0NvZGUgc3RhdHVzID0gV2ViUElVcGRhdGUobV9kZWNvZGVy
LCBkYXRhQnl0ZXMsIGRhdGFTaXplKTsKKyAgICBpZiAoc3RhdHVzICE9IFZQOF9TVEFUVVNfT0sg
JiYgc3RhdHVzICE9IFZQOF9TVEFUVVNfU1VTUEVOREVEKSB7CiAgICAgICAgIFdlYlBJRGVsZXRl
KG1fZGVjb2Rlcik7CiAgICAgICAgIG1fZGVjb2RlciA9IDA7CiAgICAgICAgIHJldHVybiBzZXRG
YWlsZWQoKTsKICAgICB9CisgICAgaW50IGxhc3RZID0gMDsKKyAgICBpZiAoIVdlYlBJRGVjR2V0
UkdCKG1fZGVjb2RlciwgJmxhc3RZLCAwLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuIHNldEZhaWxl
ZCgpOworICAgIEFTU0VSVChsYXN0WSA+PSAwKTsKKyAgICBBU1NFUlQobGFzdFkgPD0gc2l6ZSgp
LmhlaWdodCgpKTsKKyAgICBidWZmZXIuc2V0TGFzdERlY29kZWRSb3cobGFzdFkgPyBsYXN0WSAt
IDEgOiAwKTsKKworICAgIGlmIChzdGF0dXMgPT0gVlA4X1NUQVRVU19TVVNQRU5ERUQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJh
bWVDb21wbGV0ZSk7CisgICAgV2ViUElEZWxldGUobV9kZWNvZGVyKTsKKyAgICBtX2RlY29kZXIg
PSAwOworICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAppbmRleCA0OGVhMDU0Li40MDUyYmNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKQEAgLTMyOCw3ICsz
MjgsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZgogICAgICAgICAgICAgICAgIGlmIChjZW50
ZXJZIDwgMCkKICAgICAgICAgICAgICAgICAgICAgY2VudGVyWSA9IDA7CiAgICAgICAgICAgICAg
ICAgaW1hZ2VPZmZzZXQgPSBMYXlvdXRTaXplKGxlZnRCb3JkZXIgKyBsZWZ0UGFkICsgY2VudGVy
WCArIDEsIHRvcEJvcmRlciArIHRvcFBhZCArIGNlbnRlclkgKyAxKTsKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwg
SW50UmVjdChyb3VuZGVkSW50UG9pbnQocGFpbnRPZmZzZXQgKyBpbWFnZU9mZnNldCksIGltYWdl
U2l6ZSksIENvbXBvc2l0ZVNvdXJjZU92ZXIsIHNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
KCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZSh0b1JldGFpbmVkTW9kZUJp
dG1hcEltYWdlSWZQb3NzaWJsZShpbWFnZS5nZXQoKSksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwg
SW50UmVjdChyb3VuZGVkSW50UG9pbnQocGFpbnRPZmZzZXQgKyBpbWFnZU9mZnNldCksIGltYWdl
U2l6ZSksIENvbXBvc2l0ZVNvdXJjZU92ZXIsIHNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
KCkpOwogICAgICAgICAgICAgICAgIGVycm9yUGljdHVyZURyYXduID0gdHJ1ZTsKICAgICAgICAg
ICAgIH0KIApAQCAtNDUwLDcgKzQ1MCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50SW50b1Jl
Y3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZWN0CiAgICAg
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IgPSBpbWFnZUVsdCA/IGltYWdlRWx0
LT5jb21wb3NpdGVPcGVyYXRvcigpIDogQ29tcG9zaXRlU291cmNlT3ZlcjsKICAgICBJbWFnZSog
aW1hZ2UgPSBtX2ltYWdlUmVzb3VyY2UtPmltYWdlKCkuZ2V0KCk7CiAgICAgYm9vbCB1c2VMb3dR
dWFsaXR5U2NhbGluZyA9IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRleHQsIGltYWdlLCBp
bWFnZSwgYWxpZ25lZFJlY3Quc2l6ZSgpKTsKLSAgICBjb250ZXh0LT5kcmF3SW1hZ2UobV9pbWFn
ZVJlc291cmNlLT5pbWFnZShhbGlnbmVkUmVjdC53aWR0aCgpLCBhbGlnbmVkUmVjdC5oZWlnaHQo
KSkuZ2V0KCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgYWxpZ25lZFJlY3QsIGNvbXBvc2l0ZU9w
ZXJhdG9yLCBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpLCB1c2VMb3dRdWFsaXR5U2Nh
bGluZyk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKHRvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2VJ
ZlBvc3NpYmxlKGltZy5nZXQoKSksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgYWxpZ25lZFJlY3Qs
IGNvbXBvc2l0ZU9wZXJhdG9yLCBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpLCB1c2VM
b3dRdWFsaXR5U2NhbGluZyk7CiB9CiAKIGJvb2wgUmVuZGVySW1hZ2U6OmJveFNoYWRvd1Nob3Vs
ZEJlQXBwbGllZFRvQmFja2dyb3VuZChCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgYmxlZWRBdm9p
ZGFuY2UsIElubGluZUZsb3dCb3gqKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCA1N2I4M2UzLi42MWMzMTgwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogCiAjaW5jbHVkZSAi
QW5pbWF0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAjaW5jbHVk
ZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMu
aCIKICNpbmNsdWRlICJDaHJvbWUuaCIKQEAgLTEwODEsOCArMTA4MiwxOSBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlSW1hZ2VDb250ZW50cygpCiAgICAgaWYgKCFjYWNoZWRJbWFn
ZS0+aXNMb2FkZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gVGhpcyBpcyBhIG5vLW9w
IGlmIHRoZSBsYXllciBkb2Vzbid0IGhhdmUgYW4gaW5uZXIgbGF5ZXIgZm9yIHRoZSBpbWFnZS4K
LSAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzVG9JbWFnZShpbWFnZSk7CisgICAgaWYg
KGltYWdlICE9IG1fY29tcG9zaXRlZEltYWdlKSB7CisgICAgICAgIC8vIFdlIGhhdmUgdG8gd2Fp
dCB1bnRpbCB0aGUgaW1hZ2UgaXMgZnVsbHkgZGVjb2RlZCBiZWZvcmUgc2V0dGluZyBpdCBvbiB0
aGUgbGF5ZXIuCisgICAgICAgIGlmIChpbWFnZS0+aXNCaXRtYXBJbWFnZSgpICYmICFzdGF0aWNf
Y2FzdDxCaXRtYXBJbWFnZSo+KGltYWdlKS0+Y3VycmVudEZyYW1lSXNDb21wbGV0ZSgpKSB7Cisg
ICAgICAgICAgICAvLyBUcmlnZ2VyIHJldGFpbmVkIG1vZGUgaW1hZ2UgZGVjb2RpbmcuCisgICAg
ICAgICAgICB0b1JldGFpbmVkTW9kZUJpdG1hcEltYWdlSWZQb3NzaWJsZShpbWFnZSktPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AgaWYgdGhlIGxheWVyIGRvZXNuJ3QgaGF2ZSBh
biBpbm5lciBsYXllciBmb3IgdGhlIGltYWdlLgorICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNl
dENvbnRlbnRzVG9JbWFnZShpbWFnZSk7CisgICAgICAgIG1fY29tcG9zaXRlZEltYWdlID0gaW1h
Z2U7CisgICAgfQorCiAgICAgdXBkYXRlRHJhd3NDb250ZW50KCk7CiAgICAgCiAgICAgLy8gSW1h
Z2UgYW5pbWF0aW9uIGlzICJsYXp5IiwgaW4gdGhhdCBpdCBhdXRvbWF0aWNhbGx5IHN0b3BzIHVu
bGVzcyBzb21lb25lIGlzIGRyYXdpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuaAppbmRleCAwZjQyZDNmLi4wNzI4MGRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCkBAIC0yNDEsNiArMjQxLDggQEAg
cHJpdmF0ZToKICAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9sYXllckZvclZlcnRpY2FsU2Ny
b2xsYmFyOwogICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX2xheWVyRm9yU2Nyb2xsQ29ybmVy
OwogCisgICAgUmVmUHRyPEltYWdlPiBtX2NvbXBvc2l0ZWRJbWFnZTsKKwogICAgIEludFJlY3Qg
bV9jb21wb3NpdGVkQm91bmRzOwogCiAgICAgYm9vbCBtX2FydGlmaWNpYWxseUluZmxhdGVkQm91
bmRzOyAgICAgIC8vIGJvdW5kcyBoYWQgdG8gYmUgbWFkZSBub24temVybyB0byBtYWtlIHRyYW5z
Zm9ybS1vcmlnaW4gd29yawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0ltYWdlLmNwcAppbmRleCA1NmJlNWNkLi4yYWU3Y2VmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcApAQCAtMzgsNiArMzgsNyBAQAog
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDb250
YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIgorI2luY2x1ZGUg
IlJldGFpbmVkTW9kZUJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2VFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRp
by5oIgpAQCAtMTM0LDcgKzEzNSw3IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYpCiAgICAgICAgICAgICAgICAgU1ZH
SW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVsZW1lbnQq
Pihub2RlKCkpOwogICAgICAgICAgICAgICAgIGltYWdlRWxlbWVudC0+cHJlc2VydmVBc3BlY3RS
YXRpbygpLnRyYW5zZm9ybVJlY3QoZGVzdFJlY3QsIHNyY1JlY3QpOwogCi0gICAgICAgICAgICAg
ICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAgICAgICAgICAgICAgY2hpbGRQ
YWludEluZm8uY29udGV4dC0+ZHJhd0ltYWdlKHRvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2VJZlBv
c3NpYmxlKGltYWdlLmdldCgpKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJlY3QsIHNyY1Jl
Y3QpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmgKaW5kZXggZTYzZDY0MS4uMTFiOTFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmgKQEAgLTc0LDExICs3NCw2IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0
dWFsIGJvb2wgZGF0YUNoYW5nZWQoYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogCi0gICAgLy8gRklY
TUU6IFNWR0ltYWdlcyBhcmUgdW5kZXJyZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBhbmQgd2lsbCBi
ZSB1bmFibGUKLSAgICAvLyB0byBwcnVuZSBiZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90
IGltcGxlbWVudGVkIHlldC4KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29kZWREYXRhKGJv
b2wpIHsgfQotICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVy
biAwOyB9Ci0KICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGZyYW1lQXRJbmRleChzaXplX3Qp
IHsgcmV0dXJuIDA7IH0KIAogICAgIFNWR0ltYWdlKEltYWdlT2JzZXJ2ZXIqKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKaW5kZXggMDMxMGQ0OC4uY2QyMjBmMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wOC0wMSAgSHVhbmcgRG9uZ3N1bmcgIDxs
dXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBSZW5hbWUgY3JlYXRlRnJhbWVBdElu
ZGV4IHRvIHJlcXVlc3RGcmFtZUF0SW5kZXguCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05MDQ0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVwbGFjZWQgSW1hZ2VTb3VyY2U6OmNyZWF0
ZUZyYW1lQXRJbmRleCB0bworICAgICAgICBJbWFnZVNvdXJjZTo6cmVxdWVzdEZyYW1lQXRJbmRl
eCwgc28gSSBhbWVuZGVkIFdlYkltYWdlU2tpYSB0byB1c2UKKyAgICAgICAgY2hhbmdlZCBJbWFn
ZVNvdXJjZSBjb3JyZWN0bHkuCisKKyAgICAgICAgKiBzcmMvV2ViSW1hZ2VTa2lhLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW1hZ2U6OmZyb21EYXRhKToKKwogMjAxMi0wOC0wMSAgWGluZ25h
biBXYW5nICA8eGluZ25hbi53YW5nQGludGVsLmNvbT4KIAogICAgICAgICBJbmRleGVkREI6IE9i
amVjdFN0b3JlTWV0YURhdGFLZXk6Om1fbWV0YURhdGFUeXBlIHNob3VsZCB1c2UgYnl0ZSB0eXBl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFnZVNraWEuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VTa2lhLmNwcAppbmRleCAzNmRh
YmFjLi5kMWNjMGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJ
bWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkltYWdlU2tp
YS5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgV2ViSW1hZ2UgV2ViSW1hZ2U6OmZyb21EYXRhKGNvbnN0
IFdlYkRhdGEmIGRhdGEsIGNvbnN0IFdlYlNpemUmIGRlc2lyZWRTaXplKQogICAgICAgICB9CiAg
ICAgfQogCi0gICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4gZnJhbWUgPSBhZG9wdFB0cihzb3Vy
Y2UuY3JlYXRlRnJhbWVBdEluZGV4KGluZGV4KSk7CisgICAgT3duUHRyPE5hdGl2ZUltYWdlU2tp
YT4gZnJhbWUgPSBhZG9wdFB0cihzb3VyY2UucmVxdWVzdEZyYW1lQXRJbmRleChpbmRleCkpOwog
ICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBXZWJJbWFnZSgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcAppbmRleCBmNzVlODVjLi42
MGY4YmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RyYWdJbWFn
ZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRHJhZ0ltYWdlVGVz
dC5jcHAKQEAgLTcyLDE2ICs3Miw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbmF0aXZl
SW1hZ2UuZ2V0KCk7CiAgICAgfQogCi0gICAgLy8gU3R1YiBpbXBsZW1lbnRhdGlvbnMgb2YgcHVy
ZSB2aXJ0dWFsIEltYWdlIGZ1bmN0aW9ucy4KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURlY29k
ZWREYXRhKGJvb2wpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGRl
Y29kZWRTaXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAwdTsKLSAgICB9Ci0KICAg
ICB2aXJ0dWFsIHZvaWQgZHJhdyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYsIFdlYkNvcmU6OkNvbG9yU3BhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgV2Vi
Q29yZTo6Q29tcG9zaXRlT3BlcmF0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCBhNWNhNTUxLi5jOTdk
MzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VM
YXllckNocm9taXVtVGVzdC5jcHAKQEAgLTg4LDE2ICs4OCw2IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1fbmF0aXZlSW1hZ2UuZ2V0KCk7CiAgICAgfQogCi0gICAgLy8gU3R1YiBpbXBsZW1l
bnRhdGlvbnMgb2YgcHVyZSB2aXJ0dWFsIEltYWdlIGZ1bmN0aW9ucy4KLSAgICB2aXJ0dWFsIHZv
aWQgZGVzdHJveURlY29kZWREYXRhKGJvb2wpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwg
dW5zaWduZWQgaW50IGRlY29kZWRTaXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAw
dTsKLSAgICB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLAogICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkNvbG9yU3BhY2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IpCi0tIAoxLjcuOS41Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156182</attachid>
            <date>2012-08-02 15:29:39 -0700</date>
            <delta_ts>2012-08-02 15:29:39 -0700</delta_ts>
            <desc>Remove sync image decoding from currentFrameHasAlpha and currentFrameOrientation</desc>
            <filename>webkit-async-decoding.patch</filename>
            <type>text/plain</type>
            <size>6054</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkYTM3OWIwLi4xOWVmM2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEg
QEAKKzIwMTItMDgtMDIgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lT3JpZW50YXRpb24oKSBzaG91bGRuJ3QgZGVjb2Rl
IHRoZSBjdXJyZW50IGZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05MDQ0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFJlYWRpbmcgaW1hZ2UgaGVhZGVycyBpcyBlbm91Z2ggdG8gZGV0ZXJtaW5lIHRo
ZSBvcmllbnRhdGlvbi4gQWxzbworICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiBJbWFnZVNvdXJj
ZTo6b3JpZW50YXRpb25BdEluZGV4KCkgcmV0dXJucyBhIGRlZmF1bHQKKyAgICAgICAgdmFsdWUg
YWxsIHRoZSB0aW1lLiBUaGVyZSBpcyBubyBuZWVkIHRvIGRlY29kZSBhbiBlbnRpcmUgZnJhbWUg
dG8KKyAgICAgICAgZGV0ZXJtaW5lIG9yaWVudGF0aW9uLgorCisgICAgICAgIENoYW5nZWQgdGhl
IGltcGxlbWVudGF0aW9uIGluIEJpdG1hcEltYWdlIHRoYXQgcmV0dXJucyB0aGUgY2FjaGVkIHZh
bHVlCisgICAgICAgIGlmIHRoZSBmcmFtZSB3YXMgcHJldmlvdXNseSBkZWNvZGVkLCBvdGhlcndp
c2UgYXNrIEltYWdlU291cmNlIGZvciB0aGlzCisgICAgICAgIHZhbHVlLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gVGhlcmUgaXMgbm8gd2ViIHBsYXRmb3JtIHVzZSBvZiB0aGlzIG1ldGhvZCBh
dCB0aGUgbW9tZW50LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lT3JpZW50YXRpb25BdElu
ZGV4KToKKworMjAxMi0wOC0wMSAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIEJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVIYXNBbHBoYSgpIHNob3VsZG4ndCBkZWNv
ZGUgdGhlIGN1cnJlbnQgZnJhbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTkwNDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBtZXRob2QgY2FsbCBzaG91bGQgZG8gdGhlIGJlc3QgZWZmb3J0IHRv
IGRldGVybWluZSB0aGUgYWxwaGEgc3RhdGUuCisgICAgICAgIEluIHRoaXMgcGF0Y2ggYW4gaW1h
Z2UgYWx3YXlzIGhhcyBhbHBoYSBpZiBpdCBpcyBub3QgZnVsbHkgZG93bmxvYWRlZC4KKworICAg
ICAgICBXaGVuIHRoZSBpbWFnZSBpcyBmaW5hbGx5IGRvd25sb2FkZWQsIGltYWdlIGRlY29kZXIg
aXMgYXNrZWQgdG8gY2hlY2sgaWYKKyAgICAgICAgdGhlIGltYWdlIGhhcyBhbHBoYS4gSW4gdGhl
IGNhc2Ugd2hlbiBhbiBpbWFnZSBpcyBub3QgZGVjb2RlZCB5ZXQgdGhpcworICAgICAgICB3aWxs
IHJldHVybiB0cnVlLgorCisgICAgICAgIE9ubHkgd2hlbiBhbiBpbWFnZSBpcyBmdWxseSBkb3du
bG9hZGVkIGFuZCBkZWNvZGVkIHRoYXQgdGhlIGFscGhhIHN0YXRlCisgICAgICAgIGlzIGNvcnJl
Y3QuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLiBS
YW4gYWxsIHBpeGVsIHRlc3RzIHdpdGggQ2hyb21pdW0gcG9ydCBhbmQgcGFzc2VkLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAg
KEltYWdlRGVjb2Rlcik6CisKIDIwMTItMDctMjAgIEhhbiBTaGVuICA8c2hlbmhhbkBnb29nbGUu
Y29tPgogCiAgICAgICAgIFtDaHJvbWl1bV0gQ29tcGlsYXRpb24gZmFpbHMgdW5kZXIgZ2NjIDQu
NwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
CmluZGV4IDQ1NDYwZjguLmUyODZhN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKQEAgLTMyMiwxMSArMzIyLDEzIEBAIE5hdGl2ZUlt
YWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCiAKIGJvb2wg
Qml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICAv
LyBXaGVuIGEgZnJhbWUgaGFzIG5vdCBmaW5pc2hlZCBkZWNvZGluZywgYWx3YXlzIG1hcmsgaXQg
YXMgaGF2aW5nIGFscGhhLgotICAgIC8vIFNlZSBJbWFnZVNvdXJjZTo6ZnJhbWVoYXNBbHBoYUF0
SW5kZXggZm9yIGV4cGxhbmF0aW9uIG9mIHdoeSBpbmNvbXBsZXRlIGltYWdlcyBjbGFpbSB0byBo
YXZlIGFscGhhLgotICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCkpCisgICAgaWYg
KG1fZnJhbWVzLnNpemUoKSA8PSBpbmRleCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0
dXJuIG1fZnJhbWVzW2luZGV4XS5tX2hhc0FscGhhOworCisgICAgaWYgKG1fZnJhbWVzW2luZGV4
XS5tX2hhdmVNZXRhZGF0YSkKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2hhc0Fs
cGhhOworCisgICAgcmV0dXJuIG1fc291cmNlLmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsK
IH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lSGFzQWxwaGEoKQpAQCAtMzQxLDkg
KzM0MywxMyBAQCBJbWFnZU9yaWVudGF0aW9uIEJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVPcmll
bnRhdGlvbigpCiAKIEltYWdlT3JpZW50YXRpb24gQml0bWFwSW1hZ2U6OmZyYW1lT3JpZW50YXRp
b25BdEluZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQo
aW5kZXgpKQorICAgIGlmIChtX2ZyYW1lcy5zaXplKCkgPD0gaW5kZXgpCiAgICAgICAgIHJldHVy
biBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKLSAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1f
b3JpZW50YXRpb247CisKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKQor
ICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1fb3JpZW50YXRpb247CisKKyAgICByZXR1
cm4gbV9zb3VyY2Uub3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsKIH0KIAogI2lmICFBU1NFUlRf
RElTQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291
cmNlLmNwcAppbmRleCA3NWVkNWExLi41YTMyYzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0xODQsMTQgKzE4NCwxNyBAQCBJ
bWFnZU9yaWVudGF0aW9uIEltYWdlU291cmNlOjpvcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGlu
ZGV4KSBjb25zdAogCiBib29sIEltYWdlU291cmNlOjpmcmFtZUhhc0FscGhhQXRJbmRleChzaXpl
X3QgaW5kZXgpCiB7CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybiB0cnVlOwor
CiAgICAgLy8gV2hlbiBhIGZyYW1lIGhhcyBub3QgZmluaXNoZWQgZGVjb2RpbmcsIGFsd2F5cyBt
YXJrIGl0IGFzIGhhdmluZyBhbHBoYS4KICAgICAvLyBQb3J0cyB0aGF0IGNoZWNrIHRoZSByZXN1
bHQgb2YgdGhpcyBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlaXIKICAgICAvLyBjb21wb3NpdGlu
ZyBvcCBuZWVkIHRoaXMgaW4gb3JkZXIgdG8gbm90IGRyYXcgdGhlIHVuZGVjb2RlZCBwb3J0aW9u
IGFzCiAgICAgLy8gYmxhY2suCiAgICAgLy8gVE9ETzogUGVyaGFwcyB3ZSBzaG91bGQgZW5zdXJl
IHRoYXQgZWFjaCBpbmRpdmlkdWFsIGRlY29kZXIgcmV0dXJucyB0cnVlCiAgICAgLy8gaW4gdGhp
cyBjYXNlLgotICAgIHJldHVybiAhZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkKLSAgICAg
ICAgfHwgbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpLT5oYXNBbHBoYSgpOwor
ICAgIHJldHVybiAhbV9kZWNvZGVyLT5pc0FsbERhdGFSZWNlaXZlZCgpCisgICAgICAgIHx8IG1f
ZGVjb2Rlci0+ZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOwogfQogCiBib29sIEltYWdlU291
cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCmlu
ZGV4IDcyYjVkZGMuLmRjMDQ0MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcApAQCAtMjc3LDYgKzI3NywxMyBA
QCB0ZW1wbGF0ZSA8TWF0Y2hUeXBlIHR5cGU+IGludCBnZXRTY2FsZWRWYWx1ZShjb25zdCBWZWN0
b3I8aW50PiYgc2NhbGVkVmFsdWVzLCBpbgogCiB9CiAKK2Jvb2wgSW1hZ2VEZWNvZGVyOjpmcmFt
ZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKG1fZnJhbWVCdWZmZXJD
YWNoZS5zaXplKCkgPD0gaW5kZXgpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBt
X2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdLmhhc0FscGhhKCk7Cit9CisKIHZvaWQgSW1hZ2VEZWNv
ZGVyOjpwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKQogewogICAgIG1fc2NhbGVkID0gZmFs
c2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5oCmluZGV4IDkxMTg3OGUuLjU5MGEwNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0yNzYs
NiArMjc2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBJbWFnZURlY29kZXIt
b3duZWQgcG9pbnRlci4KICAgICAgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0
SW5kZXgoc2l6ZV90KSA9IDA7CiAKKyAgICAgICAgLy8gTWFrZSB0aGUgYmVzdCBlZmZvcnQgZ3Vl
c3MgdG8gY2hlY2sgaWYgdGhlIHJlcXVlc3RlZCBmcmFtZSBoYXMgYWxwaGEgY2hhbm5lbC4KKyAg
ICAgICAgdmlydHVhbCBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCk7CisKICAgICAg
ICAgdm9pZCBzZXRJZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZShib29sIGZsYWcpIHsgbV9pZ25v
cmVHYW1tYUFuZENvbG9yUHJvZmlsZSA9IGZsYWc7IH0KICAgICAgICAgYm9vbCBpZ25vcmVzR2Ft
bWFBbmRDb2xvclByb2ZpbGUoKSBjb25zdCB7IHJldHVybiBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQ
cm9maWxlOyB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156525</attachid>
            <date>2012-08-04 01:15:33 -0700</date>
            <delta_ts>2012-08-04 01:15:33 -0700</delta_ts>
            <desc>Parallel image decoders based on Lam&apos;s preparation patches.</desc>
            <filename>0001-parallel-image-decoders.patch</filename>
            <type>text/plain</type>
            <size>210583</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">RnJvbSAyZTRjMzEyNTQxNjUyMzFlNzZmMWUxYTk3YTZkNDhiNzEzYzY3MDM3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBIdWFuZyBEb25nc3VuZyA8bHV4dGVsbGFAY29tcGFueTEwMC5u
ZXQ+CkRhdGU6IEZyaSwgMyBBdWcgMjAxMiAxNjo1MDo0MiArMDkwMApTdWJqZWN0OiBbUEFUQ0hd
IHBhcmFsbGVsIGltYWdlIGRlY29kZXJzCgotLS0KIFNvdXJjZS9XVEYvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDExNSArKysrCiBTb3VyY2UvV1RGL0dOVW1ha2Vm
aWxlLmxpc3QuYW0gICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKwogU291cmNlL1dURi9XVEYu
Z3lwaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICsKIFNvdXJjZS9XVEYv
V1RGLnBybyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCiBTb3VyY2Uv
V1RGL1dURi52Y3Byb2ovV1RGLnZjcHJvaiAgICAgICAgICAgICAgICAgICB8ICAgMjQgKwogU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiAgICAgICAgICAgfCAgIDI0ICsK
IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0ICAgICAgICAgICAgICAgICAgICAgIHwgICAg
NiArCiBTb3VyY2UvV1RGL3d0Zi9EaXNwYXRjaFF1ZXVlLmNwcCAgICAgICAgICAgICAgICAgICB8
ICAxMTcgKysrKwogU291cmNlL1dURi93dGYvRGlzcGF0Y2hRdWV1ZS5oICAgICAgICAgICAgICAg
ICAgICAgfCAgIDU5ICsrCiBTb3VyY2UvV1RGL3d0Zi9EaXNwYXRjaFF1ZXVlUHJpdmF0ZUdlbmVy
aWMuY3BwICAgICB8ICAyNjYgKysrKysrKysrCiBTb3VyY2UvV1RGL3d0Zi9EaXNwYXRjaFF1ZXVl
UHJpdmF0ZUdlbmVyaWMuaCAgICAgICB8ICAgODcgKysrCiBTb3VyY2UvV1RGL3d0Zi9EaXNwYXRj
aFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNoLmNwcCB8ICAxMjUgKysrKwogU291cmNlL1dURi93dGYv
RGlzcGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaC5oICAgfCAgIDg3ICsrKwogU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwICAgICAgICAgICAgICAgfCAgICAyICsKIFNvdXJj
ZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBT
b3VyY2UvV1RGL3d0Zi9jaHJvbWl1bS9NYWluVGhyZWFkQ2hyb21pdW0uY3BwICAgICB8ICAgMTMg
KwogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAyICsKIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgIDYwNSArKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbSAgICAgICAgICAgICAgICAgfCAgICA3ICsKIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArCiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKwogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogICAgICAgfCAgIDI4ICsKIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiAgIHwgICAxNiArCiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwICAgICAgICB8ICAgIDQgKy0KIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAgICAgICAgICAgIHwgICAxMSAr
LQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwICAgfCAg
MTA3ICsrKy0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgg
ICAgIHwgICA0MSArLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVk
SW1hZ2UuaCAgfCAgICA0IC0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmggICAgICAgICAgIHwgICAgNSArLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuY3BwICAgfCAgMTI1ICsrKy0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmggICAgIHwgICA4NCArKy0KIC4uLi9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZU9ic2VydmVyLmggICAgICAgIHwgICA0NCArKwogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaCAgfCAgIDc2ICsrKwogLi4uL3BsYXRm
b3JtL2dyYXBoaWNzL1BhcmFsbGVsSW1hZ2VEZWNvZGVyLmNwcCAgICAgfCAgMjY4ICsrKysrKysr
KwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL1BhcmFsbGVsSW1hZ2VEZWNvZGVyLmggICAgICAgfCAg
IDkyICsrKwogLi4uL2dyYXBoaWNzL1BhcmFsbGVsSW1hZ2VEZWNvZGVyT2JzZXJ2ZXIuaCAgICAg
ICAgfCAgIDQ0ICsrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1h
Z2UuY3BwICB8ICAxNjYgKysrKysrCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2Rl
Qml0bWFwSW1hZ2UuaCAgICB8ICAxMDQgKysrKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dy
YXBoaWNzTGF5ZXJDQS5jcHAgICAgICAgfCAgICA2ICstCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAgICB8ICAgIDMgKwogLi4uL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwICAgICAgfCAgICAyICstCiAuLi4vcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAgICB8ICAgIDIgKy0KIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwICAgIHwgICAgMyArCiAuLi4v
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcCB8ICAgMTkgKwog
Li4uL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaCAgICAgICAgfCAgICA1
IC0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudmcvSW1hZ2VPcGVuVkcuY3BwICAgICAgIHwg
ICAgMiArCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcCAg
ICB8ICAgIDMgKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFn
ZVF0LmggfCAgICA1IC0KIC4uLi9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2luZ2xlRnJhbWVT
a2lhLmNwcCAgIHwgICAxNyAtCiAuLi4vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZy
YW1lU2tpYS5oICAgICB8ICAgIDcgLQogLi4uL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0
M0RTa2lhLmNwcCAgICAgICAgfCAgICAyICstCiAuLi4vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCB8ICAgMTQgKy0KIC4uLi9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCAgIHwgICAgMyArLQogLi4uL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwICAgfCAgICAyIC0KIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlV3guY3BwICAgIHwgICAgMyArCiAuLi4vcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcCAgICAgICB8ICAgNDcgKy0KIC4uLi9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oIHwgICAyNyArCiAu
Li4vaW1hZ2UtZGVjb2RlcnMvYmxhY2tiZXJyeS9KUEVHSW1hZ2VEZWNvZGVyLmNwcCB8ICAgIDEg
KwogLi4uL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwICAgICAgICAgfCAg
ICA5ICstCiAuLi4vcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNw
cCB8ICAgIDcgKy0KIC4uLi9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCAg
ICAgICAgIHwgICAgNyArLQogLi4uL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rl
ci5jcHAgICAgICAgfCAgICAyICsKIC4uLi9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNv
ZGVyLmNwcCAgICAgICAgIHwgICAgMSArCiAuLi4vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURl
Y29kZXJTa2lhLmNwcCAgICAgICB8ICAgMTQgKy0KIC4uLi9pbWFnZS1kZWNvZGVycy93ZWJwL1dF
QlBJbWFnZURlY29kZXIuY3BwICAgICAgIHwgICAyNSArLQogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwICAgICAgICAgfCAgICA4ICstCiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcCAgICAgICAgICAgICB8ICAgMTIgKy0KIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgIHwgICAyMyArLQogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcCAgICAgICAgICAgfCAgICA0ICstCiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCAgICB8ICAgMjAg
Ky0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaCAgICAgIHwg
ICAgMiArCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCAgICAgICAg
ICB8ICAgMjUgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCAgICAg
ICAgICAgIHwgICAgMyArLQogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXll
ci5jcHAgICAgICAgfCAgICA2ICstCiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmls
bExheWVyLmggICAgICAgICB8ICAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW1hZ2UuY3BwICAgIHwgICAgMyArLQogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL1NWR0ltYWdlLmggICAgICAgICAgICAgfCAgICA1IC0KIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgIHwgICAxNCArCiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJbWFnZVNraWEuY3BwICAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAgICAgIHwgICAxMCAtCiAuLi4vY2hy
b21pdW0vdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAgICAgICB8ICAgMTAgLQogODEg
ZmlsZXMgY2hhbmdlZCwgMjkzNSBpbnNlcnRpb25zKCspLCAyNDMgZGVsZXRpb25zKC0pCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dURi93dGYvRGlzcGF0Y2hRdWV1ZS5jcHAKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV1RGL3d0Zi9EaXNwYXRjaFF1ZXVlLmgKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV1RGL3d0Zi9EaXNwYXRjaFF1ZXVlUHJpdmF0ZUdlbmVyaWMuY3BwCiBjcmVh
dGUgbW9kZSAxMDA2NDQgU291cmNlL1dURi93dGYvRGlzcGF0Y2hRdWV1ZVByaXZhdGVHZW5lcmlj
LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV1RGL3d0Zi9EaXNwYXRjaFF1ZXVlUHJpdmF0
ZUxpYmRpc3BhdGNoLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XVEYvd3RmL0Rpc3Bh
dGNoUXVldWVQcml2YXRlTGliZGlzcGF0Y2guaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlT2JzZXJ2ZXIuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRy
LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
YXJhbGxlbEltYWdlRGVjb2Rlci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlci5oCiBjcmVhdGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURlY29k
ZXJPYnNlcnZlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2Uu
aAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VM
b2cKaW5kZXggMjA1M2UwYy4uMWI0YzI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTggQEAKKzIwMTItMDgt
MDEgIEt3b25qaW4gSmVvbmcgIDxncmFtQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIEFkZCBE
aXNwYXRjaFF1ZXVlIGNsYXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTA1ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBdXRob3JlZCBieSBLd29uamluIEplb25nIGFuZCBEb25nc3VuZyBIdWFuZy4K
KworICAgICAgICBEaXNwYXRjaFF1ZXVlIGlzIGEgc2ltcGxlIEMrKyB3cmFwcGVyIGFyb3VuZCBs
aWJkaXNwYXRjaCAoR0NEKS4gQSB0aHJlYWQgcG9vbCBiYXNlZAorICAgICAgICBmYWxsYmFjayBp
bXBsZW1lbnRhdGlvbiBpcyBhbHNvIGF2YWlhYmxlLiBTbyBwb3J0cyB3aXRob3V0IGxpYmRpc3Bh
dGNoIGNhbiB1c2UgdGhlIHNhbWUgQVBJLgorCisgICAgICAgIEl0IHByb3ZpZGVzIG9ubHkgdGhl
IHNtYWxsIHN1YnNldCBvZiB0aGUgb3JpZ2luYWwgbGliZGlzcGF0Y2ggQVBJLiBUaGVyZSBhcmUg
dGhyZWUgdHlwZXMKKyAgICAgICAgb2YgRGlzcGF0Y2hRdWV1ZTogc2VyaWFsLCBnbG9iYWwgYW5k
IG1haW4uIFRoZXNlIHF1ZXVlcyBjb3JyZXNwb25kIHRvIHRoZSBzZXJpYWwsCisgICAgICAgIGNv
bmN1cnJlbnQgZ2xvYmFsIGFuZCBtYWluIHF1ZXVlIGluIGxpYmRpc3BhdGNoLgorCisgICAgICAg
IERpc3BhdGNoUXVldWU6OmFzeW5jKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKSBtZXRob2QgaXMg
dXNlZCB0byBzY2hlZHVsZSBhIHRhc2sgcmVnYXJkbGVzcworICAgICAgICBvZiB0aGUgcXVldWUg
dHlwZS4KKworICAgICAgICBDdXJyZW50bHksIGl0IGlzIHVzZWQgYnkgcGFyYWxsZWwgaW1hZ2Ug
ZGVjb2RlcnMgdG8gcGVyZm9ybSBpbWFnZSBkZWNvZGluZyBjb25jdXJyZW50bHkuCisKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdURi5neXBpOgorICAgICAgICAq
IFdURi5wcm86CisgICAgICAgICogV1RGLnZjcHJvai9XVEYudmNwcm9qOgorICAgICAgICAqIFdU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiB3dGYvRGlzcGF0Y2hRdWV1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RG
KToKKyAgICAgICAgKERpc3BhdGNoTWFpblF1ZXVlKToKKyAgICAgICAgKFdURjo6RGlzcGF0Y2hN
YWluUXVldWU6On5EaXNwYXRjaE1haW5RdWV1ZSk6CisgICAgICAgIChXVEY6OkRpc3BhdGNoTWFp
blF1ZXVlOjphc3luYyk6CisgICAgICAgIChXVEY6OkRpc3BhdGNoTWFpblF1ZXVlOjpEaXNwYXRj
aE1haW5RdWV1ZSk6CisgICAgICAgIChEaXNwYXRjaEdsb2JhbFF1ZXVlKToKKyAgICAgICAgKFdU
Rjo6RGlzcGF0Y2hHbG9iYWxRdWV1ZTo6fkRpc3BhdGNoR2xvYmFsUXVldWUpOgorICAgICAgICAo
V1RGOjpEaXNwYXRjaEdsb2JhbFF1ZXVlOjphc3luYyk6CisgICAgICAgIChXVEY6OkRpc3BhdGNo
R2xvYmFsUXVldWU6OkRpc3BhdGNoR2xvYmFsUXVldWUpOgorICAgICAgICAoRGlzcGF0Y2hTZXJp
YWxRdWV1ZSk6CisgICAgICAgIChXVEY6OkRpc3BhdGNoU2VyaWFsUXVldWU6On5EaXNwYXRjaFNl
cmlhbFF1ZXVlKToKKyAgICAgICAgKFdURjo6RGlzcGF0Y2hTZXJpYWxRdWV1ZTo6YXN5bmMpOgor
ICAgICAgICAoV1RGOjpEaXNwYXRjaFNlcmlhbFF1ZXVlOjpEaXNwYXRjaFNlcmlhbFF1ZXVlKToK
KyAgICAgICAgKFdURjo6RGlzcGF0Y2hRdWV1ZTo6Z2xvYmFsUXVldWUpOgorICAgICAgICAoV1RG
OjpEaXNwYXRjaFF1ZXVlOjptYWluUXVldWUpOgorICAgICAgICAoV1RGOjpEaXNwYXRjaFF1ZXVl
Ojppbml0aWFsaXplRGlzcGF0Y2hRdWV1ZSk6CisgICAgICAgIChXVEY6OkRpc3BhdGNoUXVldWU6
OmNyZWF0ZVNlcmlhbFF1ZXVlKToKKyAgICAgICAgKiB3dGYvRGlzcGF0Y2hRdWV1ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdURik6CisgICAgICAgIChEaXNwYXRjaFF1ZXVlKToKKyAgICAgICAgKFdU
Rjo6RGlzcGF0Y2hRdWV1ZTo6fkRpc3BhdGNoUXVldWUpOgorICAgICAgICAoV1RGOjpEaXNwYXRj
aFF1ZXVlOjpEaXNwYXRjaFF1ZXVlKToKKyAgICAgICAgKiB3dGYvRGlzcGF0Y2hRdWV1ZVByaXZh
dGVHZW5lcmljLmNwcDogQWRkZWQuCisgICAgICAgIChXVEYpOgorICAgICAgICAoRXhlY3V0b3Ip
OgorICAgICAgICAoV1RGOjpFeGVjdXRvcjo6YWNxdWlyZSk6CisgICAgICAgIChXVEY6OkV4ZWN1
dG9yOjpyZWxlYXNlKToKKyAgICAgICAgKFdURjo6RXhlY3V0b3I6OmFjcXVpcmVDb3VudCk6Cisg
ICAgICAgIChXVEY6OkV4ZWN1dG9yOjpFeGVjdXRvcik6CisgICAgICAgIChXVEY6OkV4ZWN1dG9y
Ojp+RXhlY3V0b3IpOgorICAgICAgICAoV1RGOjpFeGVjdXRvcjo6ZXhlY3V0ZSk6CisgICAgICAg
IChXVEY6OkV4ZWN1dG9yOjp3b3JrZXJUaHJlYWQpOgorICAgICAgICAoRXhlY3V0b3JQb29sKToK
KyAgICAgICAgKFdURjo6RXhlY3V0b3JQb29sOjppbml0aWFsaXplRXhlY3V0b3JQb29sKToKKyAg
ICAgICAgKFdURjo6ZXhlY3V0b3JQb29sKToKKyAgICAgICAgKFdURjo6RXhlY3V0b3JQb29sOjpF
eGVjdXRvclBvb2wpOgorICAgICAgICAoV1RGOjpFeGVjdXRvclBvb2w6On5FeGVjdXRvclBvb2wp
OgorICAgICAgICAoV1RGOjpFeGVjdXRvclBvb2w6OmV4ZWN1dGUpOgorICAgICAgICAoV1RGOjpF
eGVjdXRvclBvb2w6Om5leHRFeGVjdXRvcik6CisgICAgICAgIChXVEY6OkV4ZWN1dG9yUG9vbDo6
YWNxdWlyZVNlcmlhbEV4ZWN1dG9yKToKKyAgICAgICAgKFdURjo6RXhlY3V0b3JQb29sOjpyZWxl
YXNlU2VyaWFsRXhlY3V0b3IpOgorICAgICAgICAoV1RGOjpFeGVjdXRvclBvb2w6OnNlcmlhbEV4
ZWN1dG9yV2l0aE1pbmltdW1BY3F1aXJlQ291bnQpOgorICAgICAgICAoV1RGOjpEaXNwYXRjaEds
b2JhbFF1ZXVlUHJpdmF0ZTo6RGlzcGF0Y2hHbG9iYWxRdWV1ZVByaXZhdGUpOgorICAgICAgICAo
V1RGOjpEaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0ZTo6fkRpc3BhdGNoR2xvYmFsUXVldWVQcml2
YXRlKToKKyAgICAgICAgKFdURjo6RGlzcGF0Y2hHbG9iYWxRdWV1ZVByaXZhdGU6OmFzeW5jKToK
KyAgICAgICAgKFdURjo6RGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGU6OkRpc3BhdGNoU2VyaWFs
UXVldWVQcml2YXRlKToKKyAgICAgICAgKFdURjo6RGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGU6
On5EaXNwYXRjaFNlcmlhbFF1ZXVlUHJpdmF0ZSk6CisgICAgICAgIChXVEY6OkRpc3BhdGNoU2Vy
aWFsUXVldWVQcml2YXRlOjplbnN1cmVUZXJtaW5hdGUpOgorICAgICAgICAoV1RGOjpjYW5jZWxh
YmxlRnVuY3Rpb24pOgorICAgICAgICAoV1RGOjpEaXNwYXRjaFNlcmlhbFF1ZXVlUHJpdmF0ZTo6
YXN5bmMpOgorICAgICAgICAoV1RGOjpEaXNwYXRjaFNlcmlhbFF1ZXVlUHJpdmF0ZTo6aGFzVGVy
bWluYXRpb25CZWd1bik6CisgICAgICAgICogd3RmL0Rpc3BhdGNoUXVldWVQcml2YXRlR2VuZXJp
Yy5oOiBBZGRlZC4KKyAgICAgICAgKFdURik6CisgICAgICAgIChEaXNwYXRjaEdsb2JhbFF1ZXVl
UHJpdmF0ZSk6CisgICAgICAgIChXVEY6OkRpc3BhdGNoR2xvYmFsUXVldWVQcml2YXRlOjpjcmVh
dGUpOgorICAgICAgICAoRGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGUpOgorICAgICAgICAoV1RG
OjpEaXNwYXRjaFNlcmlhbFF1ZXVlUHJpdmF0ZTo6Y3JlYXRlKToKKyAgICAgICAgKiB3dGYvRGlz
cGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGKToK
KyAgICAgICAgKFdURjo6RGlzcGF0Y2hHbG9iYWxRdWV1ZVByaXZhdGU6OkRpc3BhdGNoR2xvYmFs
UXVldWVQcml2YXRlKToKKyAgICAgICAgKFdURjo6RGlzcGF0Y2hHbG9iYWxRdWV1ZVByaXZhdGU6
On5EaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0ZSk6CisgICAgICAgIChXVEY6OkZ1bmN0aW9uQm94
OjpGdW5jdGlvbkJveCk6CisgICAgICAgIChGdW5jdGlvbkJveCk6CisgICAgICAgIChXVEY6OkRp
c3BhdGNoR2xvYmFsUXVldWVQcml2YXRlOjphc3luYyk6CisgICAgICAgIChXVEY6OkRpc3BhdGNo
R2xvYmFsUXVldWVQcml2YXRlOjppbnZva2VGdW5jdGlvbik6CisgICAgICAgIChXVEY6OkRpc3Bh
dGNoU2VyaWFsUXVldWVQcml2YXRlOjpEaXNwYXRjaFNlcmlhbFF1ZXVlUHJpdmF0ZSk6CisgICAg
ICAgIChXVEY6OkRpc3BhdGNoU2VyaWFsUXVldWVQcml2YXRlOjp+RGlzcGF0Y2hTZXJpYWxRdWV1
ZVByaXZhdGUpOgorICAgICAgICAoV1RGOjpEaXNwYXRjaFNlcmlhbFF1ZXVlUHJpdmF0ZTo6dGVy
bWluYXRlKToKKyAgICAgICAgKFdURjo6Q2FuY2VsYWJsZUZ1bmN0aW9uQm94OjpDYW5jZWxhYmxl
RnVuY3Rpb25Cb3gpOgorICAgICAgICAoQ2FuY2VsYWJsZUZ1bmN0aW9uQm94KToKKyAgICAgICAg
KFdURjo6RGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGU6Omludm9rZUZ1bmN0aW9uKToKKyAgICAg
ICAgKFdURjo6RGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGU6OmFzeW5jKToKKyAgICAgICAgKiB3
dGYvRGlzcGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaC5oOiBBZGRlZC4KKyAgICAgICAgKFdU
Rik6CisgICAgICAgIChEaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0ZSk6CisgICAgICAgIChXVEY6
OkRpc3BhdGNoR2xvYmFsUXVldWVQcml2YXRlOjpjcmVhdGUpOgorICAgICAgICAoRGlzcGF0Y2hT
ZXJpYWxRdWV1ZVByaXZhdGUpOgorICAgICAgICAoV1RGOjpEaXNwYXRjaFNlcmlhbFF1ZXVlUHJp
dmF0ZTo6Y3JlYXRlKToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwOgorICAg
ICAgICAoV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5n
V2luLmNwcDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZyk6CisgICAgICAgICog
d3RmL2Nocm9taXVtL01haW5UaHJlYWRDaHJvbWl1bS5jcHA6CisgICAgICAgIChXVEY6OmNhbGxG
dW5jdGlvbk9iamVjdCk6CisgICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjpjYWxsT25NYWlu
VGhyZWFkKToKKwogMjAxMi0wOC0wMiAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBNb3ZlIGdldExvY2FsVGltZSgpIGFzIHN0YXRpYyBpbmxpbmUgZnVu
Y3Rpb24gdG8gRGF0ZU1hdGgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlz
dC5hbSBiL1NvdXJjZS9XVEYvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA3ZDM0ZWUxLi5kOTk3
NmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291
cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0zNyw2ICszNywxMiBAQCB3dGZfc291cmNl
cyArPSBcCiAgICAgU291cmNlL1dURi93dGYvRGVjb2Rlci5oIFwKICAgICBTb3VyY2UvV1RGL3d0
Zi9EZXF1ZS5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9EaXNhbGxvd0NUeXBlLmggXAorICAgIFNv
dXJjZS9XVEYvd3RmL0Rpc3BhdGNoUXVldWUuY3BwIFwKKyAgICBTb3VyY2UvV1RGL3d0Zi9EaXNw
YXRjaFF1ZXVlLmggXAorICAgIFNvdXJjZS9XVEYvd3RmL0Rpc3BhdGNoUXVldWVQcml2YXRlR2Vu
ZXJpYy5jcHAgXAorICAgIFNvdXJjZS9XVEYvd3RmL0Rpc3BhdGNoUXVldWVQcml2YXRlR2VuZXJp
Yy5oIFwKKyAgICBTb3VyY2UvV1RGL3d0Zi9EaXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNo
LmNwcCBcCisgICAgU291cmNlL1dURi93dGYvRGlzcGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRj
aC5oIFwKICAgICBTb3VyY2UvV1RGL3d0Zi9Eb3VibHlMaW5rZWRMaXN0LmggXAogICAgIFNvdXJj
ZS9XVEYvd3RmL0R5bmFtaWNBbm5vdGF0aW9ucy5jcHAgXAogICAgIFNvdXJjZS9XVEYvd3RmL0R5
bmFtaWNBbm5vdGF0aW9ucy5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLmd5cGkgYi9T
b3VyY2UvV1RGL1dURi5neXBpCmluZGV4IDVkMjc5NzAuLmQ5ZTQxNjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvV1RGLmd5cGkKKysrIGIvU291cmNlL1dURi9XVEYuZ3lwaQpAQCAtMTM5LDYgKzEz
OSwxMiBAQAogICAgICAgICAgICAgJ3d0Zi9EYXRhTG9nLmNwcCcsCiAgICAgICAgICAgICAnd3Rm
L0RhdGVNYXRoLmNwcCcsCiAgICAgICAgICAgICAnd3RmL0RlY2ltYWxOdW1iZXIuY3BwJywKKyAg
ICAgICAgICAgICd3dGYvRGlzcGF0Y2hRdWV1ZS5jcHAnLAorICAgICAgICAgICAgJ3d0Zi9EaXNw
YXRjaFF1ZXVlLmgnLAorICAgICAgICAgICAgJ3d0Zi9EaXNwYXRjaFF1ZXVlUHJpdmF0ZUdlbmVy
aWMuY3BwJywKKyAgICAgICAgICAgICd3dGYvRGlzcGF0Y2hRdWV1ZVByaXZhdGVHZW5lcmljLmgn
LAorICAgICAgICAgICAgJ3d0Zi9EaXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNoLmNwcCcs
CisgICAgICAgICAgICAnd3RmL0Rpc3BhdGNoUXVldWVQcml2YXRlTGliZGlzcGF0Y2guaCcsCiAg
ICAgICAgICAgICAnd3RmL0R5bmFtaWNBbm5vdGF0aW9ucy5jcHAnLAogICAgICAgICAgICAgJ3d0
Zi9EeW5hbWljQW5ub3RhdGlvbnMuaCcsCiAgICAgICAgICAgICAnd3RmL0Zhc3RNYWxsb2MuY3Bw
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnBybyBiL1NvdXJjZS9XVEYvV1RGLnBybwpp
bmRleCAwMGRlZTU0Li43YmE1ZGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi5wcm8KKysr
IGIvU291cmNlL1dURi9XVEYucHJvCkBAIC0xODAsNiArMTgwLDkgQEAgU09VUkNFUyArPSBcCiAg
ICAgRGF0ZU1hdGguY3BwIFwKICAgICBEYXRhTG9nLmNwcCBcCiAgICAgRGVjaW1hbE51bWJlci5j
cHAgXAorICAgIERpc3BhdGNoUXVldWUuY3BwIFwKKyAgICBEaXNwYXRjaFF1ZXVlUHJpdmF0ZUxp
YmRpc3BhdGNoLmNwcCBcCisgICAgRGlzcGF0Y2hRdWV1ZVByaXZhdGVHZW5lcmljLmNwcCBcCiAg
ICAgZHRvYS5jcHAgXAogICAgIGR0b2EvYmlnbnVtLWR0b2EuY2MgXAogICAgIGR0b2EvYmlnbnVt
LmNjIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnZjcHJvai9XVEYudmNwcm9qIGIvU291
cmNlL1dURi9XVEYudmNwcm9qL1dURi52Y3Byb2oKaW5kZXggMzMyYTE4NC4uMjdlN2I5MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9XVEYudmNwcm9qL1dURi52Y3Byb2oKKysrIGIvU291cmNlL1dU
Ri9XVEYudmNwcm9qL1dURi52Y3Byb2oKQEAgLTcwOSw2ICs3MDksMzAgQEAKIAkJCT4KIAkJPC9G
aWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlx3dGZcRGlzcGF0Y2hRdWV1ZS5jcHAi
CisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cd3RmXERpc3Bh
dGNoUXVldWUuaCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIu
Llx3dGZcRGlzcGF0Y2hRdWV1ZVByaXZhdGVHZW5lcmljLmNwcCIKKwkJCT4KKwkJPC9GaWxlPgor
CQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlx3dGZcRGlzcGF0Y2hRdWV1ZVByaXZhdGVHZW5l
cmljLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cd3Rm
XERpc3BhdGNoUXVldWVQcml2YXRlTGliZGlzcGF0Y2guY3BwIgorCQkJPgorCQk8L0ZpbGU+CisJ
CTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXHd0ZlxEaXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRp
c3BhdGNoLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5c
d3RmXERvdWJseUxpbmtlZExpc3QuaCIKIAkJCT4KIAkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOTdlMjI1MC4uNWRkMDFiOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01Miw2ICs1MiwxMiBAQAogCQlB
OEE0NzNBNDE1MUE4MjVCMDA0MTIzRkYgLyogRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyN0QxNTFBODI1QTAwNDEyM0ZGIC8qIERl
Y29kZXIuaCAqLzsgfTsKIAkJQThBNDczQTUxNTFBODI1QjAwNDEyM0ZGIC8qIERlcXVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzI3RTE1MUE4
MjVBMDA0MTIzRkYgLyogRGVxdWUuaCAqLzsgfTsKIAkJQThBNDczQTYxNTFBODI1QjAwNDEyM0ZG
IC8qIERpc2FsbG93Q1R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QTQ3MjdGMTUxQTgyNUEwMDQxMjNGRiAvKiBEaXNhbGxvd0NUeXBlLmggKi87
IH07CisJCUE4QTQ3M0E3MTUxQTgyNUIwMDQxMjNGOSAvKiBEaXNwYXRjaFF1ZXVlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MjgwMTUxQTgy
NUEwMDQxMjNGOSAvKiBEaXNwYXRjaFF1ZXVlLmNwcCAqLzsgfTsKKwkJQThBNDczQTcxNTFBODI1
QjAwNDEyM0ZBIC8qIERpc3BhdGNoUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MjgwMTUxQTgyNUEwMDQxMjNGQSAvKiBEaXNwYXRjaFF1
ZXVlLmggKi87IH07CisJCUE4QTQ3M0E3MTUxQTgyNUIwMDQxMjNGQiAvKiBEaXNwYXRjaFF1ZXVl
UHJpdmF0ZUdlbmVyaWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThBNDcyODAxNTFBODI1QTAwNDEyM0ZCIC8qIERpc3BhdGNoUXVldWVQcml2YXRl
R2VuZXJpYy5jcHAgKi87IH07CisJCUE4QTQ3M0E3MTUxQTgyNUIwMDQxMjNGQyAvKiBEaXNwYXRj
aFF1ZXVlUHJpdmF0ZUdlbmVyaWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4QTQ3MjgwMTUxQTgyNUEwMDQxMjNGQyAvKiBEaXNwYXRjaFF1ZXVlUHJp
dmF0ZUdlbmVyaWMuaCAqLzsgfTsKKwkJQThBNDczQTcxNTFBODI1QjAwNDEyM0ZEIC8qIERpc3Bh
dGNoUXVldWVQcml2YXRlTGliZGlzcGF0Y2guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyODAxNTFBODI1QTAwNDEyM0ZEIC8qIERpc3BhdGNo
UXVldWVQcml2YXRlTGliZGlzcGF0Y2guY3BwICovOyB9OworCQlBOEE0NzNBNzE1MUE4MjVCMDA0
MTIzRkUgLyogRGlzcGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyODAxNTFBODI1QTAwNDEyM0ZF
IC8qIERpc3BhdGNoUXVldWVQcml2YXRlTGliZGlzcGF0Y2guaCAqLzsgfTsKIAkJQThBNDczQTcx
NTFBODI1QjAwNDEyM0ZGIC8qIERvdWJseUxpbmtlZExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MjgwMTUxQTgyNUEwMDQxMjNGRiAvKiBE
b3VibHlMaW5rZWRMaXN0LmggKi87IH07CiAJCUE4QTQ3M0E4MTUxQTgyNUIwMDQxMjNGRiAvKiBi
aWdudW0tZHRvYS5jYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4QTQ3MjgyMTUxQTgyNUEwMDQxMjNGRiAvKiBiaWdudW0tZHRvYS5jYyAqLzsgfTsKIAkJ
QThBNDczQTkxNTFBODI1QjAwNDEyM0ZGIC8qIGJpZ251bS1kdG9hLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzI4MzE1MUE4MjVBMDA0MTIzRkYg
LyogYmlnbnVtLWR0b2EuaCAqLzsgfTsKQEAgLTMwMyw2ICszMDksMTIgQEAKIAkJQThBNDcyN0Qx
NTFBODI1QTAwNDEyM0ZGIC8qIERlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzI3RTE1
MUE4MjVBMDA0MTIzRkYgLyogRGVxdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGVxdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDcyN0YxNTFBODI1
QTAwNDEyM0ZGIC8qIERpc2FsbG93Q1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGlzYWxsb3dDVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEE0
NzI4MDE1MUE4MjVBMDA0MTIzRjkgLyogRGlzcGF0Y2hRdWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BhdGNoUXVldWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBOEE0NzI4MDE1MUE4MjVBMDA0MTIzRkEgLyogRGlzcGF0Y2hRdWV1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwYXRjaFF1ZXVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4QTQ3MjgwMTUxQTgyNUEwMDQxMjNGQiAvKiBEaXNwYXRj
aFF1ZXVlUHJpdmF0ZUdlbmVyaWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEaXNwYXRjaFF1ZXVlUHJpdmF0ZUdlbmVyaWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBOEE0NzI4MDE1MUE4MjVBMDA0MTIzRkMgLyogRGlzcGF0Y2hRdWV1ZVByaXZhdGVH
ZW5lcmljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BhdGNoUXVldWVQ
cml2YXRlR2VuZXJpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEE0NzI4MDE1
MUE4MjVBMDA0MTIzRkQgLyogRGlzcGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BhdGNoUXVldWVQcml2YXRlTGliZGlz
cGF0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOEE0NzI4MDE1MUE4MjVB
MDA0MTIzRkUgLyogRGlzcGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNoLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MjgwMTUxQTgyNUEwMDQxMjNGRiAv
KiBEb3VibHlMaW5rZWRMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERv
dWJseUxpbmtlZExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDcyODIx
NTFBODI1QTAwNDEyM0ZGIC8qIGJpZ251bS1kdG9hLmNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gImJpZ251bS1kdG9hLmNjIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQThBNDcyODMxNTFBODI1QTAwNDEyM0ZGIC8qIGJpZ251bS1kdG9hLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9ICJiaWdudW0tZHRvYS5oIjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTU5OSw2ICs2MTEsMTIgQEAKIAkJCQlBOEE0NzI3RDE1MUE4MjVBMDA0
MTIzRkYgLyogRGVjb2Rlci5oICovLAogCQkJCUE4QTQ3MjdFMTUxQTgyNUEwMDQxMjNGRiAvKiBE
ZXF1ZS5oICovLAogCQkJCUE4QTQ3MjdGMTUxQTgyNUEwMDQxMjNGRiAvKiBEaXNhbGxvd0NUeXBl
LmggKi8sCisJCQkJQThBNDcyODAxNTFBODI1QTAwNDEyM0Y5IC8qIERpc3BhdGNoUXVldWUuY3Bw
ICovLAorCQkJCUE4QTQ3MjgwMTUxQTgyNUEwMDQxMjNGQSAvKiBEaXNwYXRjaFF1ZXVlLmggKi8s
CisJCQkJQThBNDcyODAxNTFBODI1QTAwNDEyM0ZCIC8qIERpc3BhdGNoUXVldWVQcml2YXRlR2Vu
ZXJpYy5jcHAgKi8sCisJCQkJQThBNDcyODAxNTFBODI1QTAwNDEyM0ZDIC8qIERpc3BhdGNoUXVl
dWVQcml2YXRlR2VuZXJpYy5oICovLAorCQkJCUE4QTQ3MjgwMTUxQTgyNUEwMDQxMjNGRCAvKiBE
aXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNoLmNwcCAqLywKKwkJCQlBOEE0NzI4MDE1MUE4
MjVBMDA0MTIzRkUgLyogRGlzcGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaC5oICovLAogCQkJ
CUE4QTQ3MjgwMTUxQTgyNUEwMDQxMjNGRiAvKiBEb3VibHlMaW5rZWRMaXN0LmggKi8sCiAJCQkJ
QThBNDcyOTcxNTFBODI1QTAwNDEyM0ZGIC8qIGR0b2EuY3BwICovLAogCQkJCUE4QTQ3Mjk4MTUx
QTgyNUEwMDQxMjNGRiAvKiBkdG9hLmggKi8sCkBAIC05MjMsNiArOTQxLDkgQEAKIAkJCQlBOEE0
NzNBNDE1MUE4MjVCMDA0MTIzRkYgLyogRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDczQTUxNTFBODI1QjAwNDEyM0ZGIC8qIERlcXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzNBNjE1MUE4MjVCMDA0MTIzRkYgLyogRGlzYWxsb3dDVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQThBNDczQTcxNTFBODI1QjAwNDEyM0ZBIC8qIERpc3BhdGNoUXVldWUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUE4QTQ3M0E3MTUxQTgyNUIwMDQxMjNGQyAvKiBEaXNwYXRjaFF1ZXVlUHJpdmF0
ZUdlbmVyaWMuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4QTQ3M0E3MTUxQTgyNUIwMDQxMjNGRSAv
KiBEaXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNoLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OEE0NzNBRjE1MUE4MjVCMDA0MTIzRkYgLyogZGl5LWZwLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OEE0NzNCMTE1MUE4MjVCMDA0MTIzRkYgLyogZG91YmxlLWNvbnZlcnNpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4QTQ3M0IyMTUxQTgyNUIwMDQxMjNGRiAvKiBkb3VibGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTE2OCw2ICsxMTg5LDkgQEAKIAkJCQlBOEE0NzM5RTE1MUE4MjVCMDA0MTIzRkYg
LyogRGF0YUxvZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNBMDE1MUE4MjVCMDA0MTIz
RkYgLyogRGF0ZU1hdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQTIxNTFBODI1QjAw
NDEyM0ZGIC8qIERlY2ltYWxOdW1iZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQThBNDczQTcx
NTFBODI1QjAwNDEyM0Y5IC8qIERpc3BhdGNoUXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QThBNDczQTcxNTFBODI1QjAwNDEyM0ZCIC8qIERpc3BhdGNoUXVldWVQcml2YXRlR2VuZXJpYy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBOEE0NzNBNzE1MUE4MjVCMDA0MTIzRkQgLyogRGlzcGF0
Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNB
RTE1MUE4MjVCMDA0MTIzRkYgLyogZGl5LWZwLmNjIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDcz
QjAxNTFBODI1QjAwNDEyM0ZGIC8qIGRvdWJsZS1jb252ZXJzaW9uLmNjIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThBNDczQkExNTFBODI1QjAwNDEyM0ZGIC8qIGR0b2EuY3BwIGluIFNvdXJjZXMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IDFmMTJmYjguLjcxNTU0MzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlz
dHMudHh0CkBAIC0yMCw2ICsyMCw5IEBAIFNFVChXVEZfSEVBREVSUwogICAgIERlY29kZXIuaAog
ICAgIERlcXVlLmgKICAgICBEaXNhbGxvd0NUeXBlLmgKKyAgICBEaXNwYXRjaFF1ZXVlLmgKKyAg
ICBEaXNwYXRjaFF1ZXVlUHJpdmF0ZUdlbmVyaWMuaAorICAgIERpc3BhdGNoUXVldWVQcml2YXRl
TGliZGlzcGF0Y2guaAogICAgIERvdWJseUxpbmtlZExpc3QuaAogICAgIER5bmFtaWNBbm5vdGF0
aW9ucy5oCiAgICAgRW5jb2Rlci5oCkBAIC0xNDUsNiArMTQ4LDkgQEAgU0VUKFdURl9TT1VSQ0VT
CiAgICAgRGF0ZU1hdGguY3BwCiAgICAgRGF0YUxvZy5jcHAKICAgICBEZWNpbWFsTnVtYmVyLmNw
cAorICAgIERpc3BhdGNoUXVldWUuY3BwCisgICAgRGlzcGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNw
YXRjaC5jcHAKKyAgICBEaXNwYXRjaFF1ZXVlUHJpdmF0ZUdlbmVyaWMuY3BwCiAgICAgRHluYW1p
Y0Fubm90YXRpb25zLmNwcAogICAgIEZhc3RNYWxsb2MuY3BwCiAgICAgR3JlZ29yaWFuRGF0ZVRp
bWUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9EaXNwYXRjaFF1ZXVlLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL0Rpc3BhdGNoUXVldWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjZkOWVhMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9EaXNw
YXRjaFF1ZXVlLmNwcApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBDb21wYW55IDEwMCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJEaXNwYXRjaFF1ZXVlLmgiCisKKyNpZiBFTkFCTEUoVEhSRUFESU5HX0xJQkRJU1BBVENIKQor
I2luY2x1ZGUgIkRpc3BhdGNoUXVldWVQcml2YXRlTGliZGlzcGF0Y2guaCIKKyNlbHNlCisjaW5j
bHVkZSAiRGlzcGF0Y2hRdWV1ZVByaXZhdGVHZW5lcmljLmgiCisjZW5kaWYKKworI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2Ug
V1RGIHsKKworY2xhc3MgRGlzcGF0Y2hHbG9iYWxRdWV1ZVByaXZhdGU7CitjbGFzcyBEaXNwYXRj
aFNlcmlhbFF1ZXVlUHJpdmF0ZTsKKworRGlzcGF0Y2hRdWV1ZSogRGlzcGF0Y2hRdWV1ZTo6c19n
bG9iYWxRdWV1ZTsKK0Rpc3BhdGNoUXVldWUqIERpc3BhdGNoUXVldWU6OnNfbWFpblF1ZXVlOwor
CitjbGFzcyBEaXNwYXRjaE1haW5RdWV1ZSA6IHB1YmxpYyBEaXNwYXRjaFF1ZXVlIHsKK3B1Ymxp
YzoKKyAgICBmcmllbmQgY2xhc3MgRGlzcGF0Y2hRdWV1ZTsKKyAgICB2aXJ0dWFsIH5EaXNwYXRj
aE1haW5RdWV1ZSgpIHsgfQorCisgICAgLy8gSW4gY2FzZSBvZiB0aGUgbWFpbiBxdWV1ZSwgd2Ug
c2ltcGx5IHJldXNlIGNhbGxPbk1haW5UaHJlYWQuCisgICAgdmlydHVhbCB2b2lkIGFzeW5jKGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgY2FsbE9uTWFp
blRocmVhZChmdW5jdGlvbik7CisgICAgfQorCisKK3ByaXZhdGU6CisgICAgRGlzcGF0Y2hNYWlu
UXVldWUoKSB7IH0KK307CisKK2NsYXNzIERpc3BhdGNoR2xvYmFsUXVldWUgOiBwdWJsaWMgRGlz
cGF0Y2hRdWV1ZSB7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIERpc3BhdGNoUXVldWU7Cisg
ICAgdmlydHVhbCB+RGlzcGF0Y2hHbG9iYWxRdWV1ZSgpIHsgfQorCisgICAgdmlydHVhbCB2b2lk
IGFzeW5jKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAg
bV9wcml2YXRlLT5hc3luYyhmdW5jdGlvbik7CisgICAgfQorCitwcml2YXRlOgorICAgIERpc3Bh
dGNoR2xvYmFsUXVldWUoKQorICAgICAgICA6IG1fcHJpdmF0ZShEaXNwYXRjaEdsb2JhbFF1ZXVl
UHJpdmF0ZTo6Y3JlYXRlKCkpIHsgfQorCisgICAgT3duUHRyPERpc3BhdGNoR2xvYmFsUXVldWVQ
cml2YXRlPiBtX3ByaXZhdGU7Cit9OworCitjbGFzcyBEaXNwYXRjaFNlcmlhbFF1ZXVlIDogcHVi
bGljIERpc3BhdGNoUXVldWUgeworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBEaXNwYXRjaFF1
ZXVlOworICAgIHZpcnR1YWwgfkRpc3BhdGNoU2VyaWFsUXVldWUoKSB7IH0KKworICAgIHZpcnR1
YWwgdm9pZCBhc3luYyhjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKKyAgICB7Cisg
ICAgICAgIG1fcHJpdmF0ZS0+YXN5bmMoZnVuY3Rpb24pOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBEaXNwYXRjaFNlcmlhbFF1ZXVlKCkKKyAgICAgICAgOiBtX3ByaXZhdGUoRGlzcGF0Y2hTZXJp
YWxRdWV1ZVByaXZhdGU6OmNyZWF0ZSgpKSB7IH0KKworICAgIE93blB0cjxEaXNwYXRjaFNlcmlh
bFF1ZXVlUHJpdmF0ZT4gbV9wcml2YXRlOworfTsKKworRGlzcGF0Y2hRdWV1ZSogRGlzcGF0Y2hR
dWV1ZTo6Z2xvYmFsUXVldWUoKQoreworICAgIHJldHVybiBzX2dsb2JhbFF1ZXVlOworfQorCitE
aXNwYXRjaFF1ZXVlKiBEaXNwYXRjaFF1ZXVlOjptYWluUXVldWUoKQoreworICAgIHJldHVybiBz
X21haW5RdWV1ZTsKK30KKwordm9pZCBEaXNwYXRjaFF1ZXVlOjppbml0aWFsaXplRGlzcGF0Y2hR
dWV1ZSgpCit7CisgICAgc19tYWluUXVldWUgPSBuZXcgRGlzcGF0Y2hNYWluUXVldWUoKTsKKyAg
ICBzX2dsb2JhbFF1ZXVlID0gbmV3IERpc3BhdGNoR2xvYmFsUXVldWUoKTsKK30KKworUGFzc1Jl
ZlB0cjxEaXNwYXRjaFF1ZXVlPiBEaXNwYXRjaFF1ZXVlOjpjcmVhdGVTZXJpYWxRdWV1ZSgpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEaXNwYXRjaFNlcmlhbFF1ZXVlKCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Rpc3BhdGNoUXVl
dWUuaCBiL1NvdXJjZS9XVEYvd3RmL0Rpc3BhdGNoUXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5jY2MzNmJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvRGlzcGF0Y2hRdWV1ZS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQ29tcGFueSAxMDAgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERpc3BhdGNoUXVldWVfaAor
I2RlZmluZSBEaXNwYXRjaFF1ZXVlX2gKKworI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXVEYgewor
CisvLyBUaGlzIGNsYXNzIGlzIGEgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIGxpYmRpc3BhdGNoLgor
Ly8gV2UgYWxzbyBwcm92aWRlIGEgZ2VuZXJpYyAodGhyZWFkIHBvb2wpIGltcGxlbWVuZXRhdGlv
biBzbyB0aGF0CisvLyBhbGwgdGhlIHBvcnRzIGNhbiB1c2UgdGhlIHNhbWUgQVBJLgorY2xhc3Mg
RGlzcGF0Y2hRdWV1ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxEaXNwYXRjaFF1ZXVl
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZURpc3BhdGNoUXVldWUoKTsK
KyAgICBzdGF0aWMgRGlzcGF0Y2hRdWV1ZSogZ2xvYmFsUXVldWUoKTsKKyAgICBzdGF0aWMgRGlz
cGF0Y2hRdWV1ZSogbWFpblF1ZXVlKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGlzcGF0Y2hR
dWV1ZT4gY3JlYXRlU2VyaWFsUXVldWUoKTsKKworICAgIHZpcnR1YWwgfkRpc3BhdGNoUXVldWUo
KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhc3luYyhjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jikg
PSAwOworCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIERpc3BhdGNoUXVldWUqIHNfZ2xvYmFsUXVl
dWU7CisgICAgc3RhdGljIERpc3BhdGNoUXVldWUqIHNfbWFpblF1ZXVlOworCisgICAgRGlzcGF0
Y2hRdWV1ZSgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6RGlz
cGF0Y2hRdWV1ZTsKKworI2VuZGlmIC8vIERpc3BhdGNoUXVldWVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvRGlzcGF0Y2hRdWV1ZVByaXZhdGVHZW5lcmljLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL0Rpc3BhdGNoUXVldWVQcml2YXRlR2VuZXJpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZTVjN2Q1OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0Rpc3BhdGNoUXVldWVQcml2YXRlR2VuZXJpYy5jcHAKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiAhRU5BQkxFKFRIUkVBRElOR19MSUJESVNQQVRDSCkKKworI2luY2x1
ZGUgIkRpc3BhdGNoUXVldWVQcml2YXRlR2VuZXJpYy5oIgorCisjaW5jbHVkZSA8bGltaXRzPgor
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL051bWJlck9mQ29yZXMu
aD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgRXhlY3V0b3JQb29sOworCitjbGFzcyBFeGVjdXRv
ciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRXhlY3V0b3IpOworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEV4ZWN1dG9yKCk7CisgICAgfkV4ZWN1dG9yKCk7
CisKKyAgICB2b2lkIGV4ZWN1dGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworCisgICAgc3Rh
dGljIHZvaWQgd29ya2VyVGhyZWFkKHZvaWQqKTsKKworICAgIHZvaWQgYWNxdWlyZSgpIHsgbV9h
Y3F1aXJlQ291bnQrKzsgfQorICAgIHZvaWQgcmVsZWFzZSgpIHsgbV9hY3F1aXJlQ291bnQtLTsg
fQorICAgIGludCBhY3F1aXJlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2FjcXVpcmVDb3VudDsg
fQorCitwcml2YXRlOgorICAgIGJvb2wgbV9ydW5uaW5nOworICAgIGludCBtX2FjcXVpcmVDb3Vu
dDsKKworICAgIE11dGV4IG1fbXV0ZXg7CisgICAgVGhyZWFkQ29uZGl0aW9uIG1fZnVuY3Rpb25R
dWV1ZUVtcHR5Q29uZGl0aW9uOworICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+ID4gbV9mdW5j
dGlvblF1ZXVlOworfTsKKworRXhlY3V0b3I6OkV4ZWN1dG9yKCkKKyAgICA6IG1fcnVubmluZyh0
cnVlKQorICAgICwgbV9hY3F1aXJlQ291bnQoMSkKK3sKKyAgICAvLyBXZSBuZWVkIGEgbXV0ZXgg
aGVyZSBmb3IgdmlzaWJpbGl0eSBpbiBFeGVjdXRvcjo6d29ya2VyVGhyZWFkLgorICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0g
Y3JlYXRlVGhyZWFkKCZFeGVjdXRvcjo6d29ya2VyVGhyZWFkLCB0aGlzLCAiRXhlY3V0b3Igd29y
a2VyIik7CisgICAgZGV0YWNoVGhyZWFkKHRocmVhZElEKTsKK30KKworRXhlY3V0b3I6On5FeGVj
dXRvcigpCit7CisgICAgLy8gT25jZSB3ZSBjcmVhdGUgYW4gZXhlY3V0b3IsIHdlIG5ldmVyIGRl
c3Ryb3lzIGl0LgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEV4ZWN1dG9y
OjpleGVjdXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICBtX2Z1bmN0aW9uUXVldWUuYXBwZW5kKGZ1bmN0
aW9uKTsKKworICAgIG1fZnVuY3Rpb25RdWV1ZUVtcHR5Q29uZGl0aW9uLnNpZ25hbCgpOworfQor
Cit2b2lkIEV4ZWN1dG9yOjp3b3JrZXJUaHJlYWQodm9pZCogdGhyZWFkRGF0YSkKK3sKKyAgICBF
eGVjdXRvciogZXhlY3V0b3IgPSByZWludGVycHJldF9jYXN0PEV4ZWN1dG9yKj4odGhyZWFkRGF0
YSk7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgp
PiA+IGZ1bmN0aW9uUXVldWU7CisgICAgICAgIHsKKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2tlcihleGVjdXRvci0+bV9tdXRleCk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1
dG9yLT5tX3J1bm5pbmcpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHdo
aWxlIChleGVjdXRvci0+bV9mdW5jdGlvblF1ZXVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICBleGVjdXRvci0+bV9mdW5jdGlvblF1ZXVlRW1wdHlDb25kaXRpb24ud2FpdChleGVjdXRvci0+
bV9tdXRleCk7CisgICAgICAgICAgICBleGVjdXRvci0+bV9mdW5jdGlvblF1ZXVlLnN3YXAoZnVu
Y3Rpb25RdWV1ZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZ1bmN0aW9uUXVldWUuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBmdW5jdGlvblF1ZXVlW2ld
KCk7CisgICAgfQorfQorCitjbGFzcyBFeGVjdXRvclBvb2wgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEV4ZWN1dG9yUG9vbCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUV4ZWN1dG9yUG9vbCgpOworCisgICAgZnJp
ZW5kIEV4ZWN1dG9yUG9vbCogZXhlY3V0b3JQb29sKCk7CisgICAgfkV4ZWN1dG9yUG9vbCgpOwor
CisgICAgdm9pZCBleGVjdXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICBFeGVjdXRv
ciogYWNxdWlyZVNlcmlhbEV4ZWN1dG9yKCk7CisgICAgdm9pZCByZWxlYXNlU2VyaWFsRXhlY3V0
b3IoRXhlY3V0b3IqKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgRXhlY3V0b3JQb29sKiBzX2V4
ZWN1dG9yUG9vbDsKKyAgICBFeGVjdXRvclBvb2woKTsKKyAgICBFeGVjdXRvciogbmV4dEV4ZWN1
dG9yKCk7CisgICAgRXhlY3V0b3IqIHNlcmlhbEV4ZWN1dG9yV2l0aE1pbmltdW1BY3F1aXJlQ291
bnQoKTsKKworICAgIE11dGV4IG1fbXV0ZXg7CisgICAgVmVjdG9yPEV4ZWN1dG9yKj4gbV9leGVj
dXRvclBvb2w7Cit9OworCitFeGVjdXRvclBvb2wqIEV4ZWN1dG9yUG9vbDo6c19leGVjdXRvclBv
b2w7CisKK3ZvaWQgRXhlY3V0b3JQb29sOjppbml0aWFsaXplRXhlY3V0b3JQb29sKCkKK3sKKyAg
ICBpZiAoIXNfZXhlY3V0b3JQb29sKQorICAgICAgICBzX2V4ZWN1dG9yUG9vbCA9IG5ldyBFeGVj
dXRvclBvb2w7Cit9CisKK0V4ZWN1dG9yUG9vbCogZXhlY3V0b3JQb29sKCkKK3sKKyAgICByZXR1
cm4gRXhlY3V0b3JQb29sOjpzX2V4ZWN1dG9yUG9vbDsKK30KKworRXhlY3V0b3JQb29sOjpFeGVj
dXRvclBvb2woKQoreworICAgIG1fZXhlY3V0b3JQb29sLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bnVtYmVyT2ZQcm9jZXNzb3JDb3JlcygpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJl
ck9mUHJvY2Vzc29yQ29yZXMoKTsgaSsrKQorICAgICAgICBtX2V4ZWN1dG9yUG9vbC5hcHBlbmQo
bmV3IEV4ZWN1dG9yKCkpOworfQorCitFeGVjdXRvclBvb2w6On5FeGVjdXRvclBvb2woKQorewor
fQorCit2b2lkIEV4ZWN1dG9yUG9vbDo6ZXhlY3V0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBm
dW5jdGlvbikKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgbmV4dEV4
ZWN1dG9yKCktPmV4ZWN1dGUoZnVuY3Rpb24pOworfQorCitFeGVjdXRvciogRXhlY3V0b3JQb29s
OjpuZXh0RXhlY3V0b3IoKQoreworICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5leHQgPSAwOwor
ICAgIGludCBpbmRleCA9IG5leHQgJSBtX2V4ZWN1dG9yUG9vbC5zaXplKCk7CisgICAgbmV4dCsr
OworICAgIHJldHVybiBtX2V4ZWN1dG9yUG9vbFtpbmRleF07Cit9CisKK0V4ZWN1dG9yKiBFeGVj
dXRvclBvb2w6OmFjcXVpcmVTZXJpYWxFeGVjdXRvcigpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fbXV0ZXgpOworICAgIEV4ZWN1dG9yKiBleGVjdXRvciA9IHNlcmlhbEV4ZWN1dG9yV2l0
aE1pbmltdW1BY3F1aXJlQ291bnQoKTsKKyAgICBleGVjdXRvci0+YWNxdWlyZSgpOworICAgIHJl
dHVybiBleGVjdXRvcjsKK30KKwordm9pZCBFeGVjdXRvclBvb2w6OnJlbGVhc2VTZXJpYWxFeGVj
dXRvcihFeGVjdXRvciogZXhlY3V0b3IpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0
ZXgpOworICAgIGV4ZWN1dG9yLT5yZWxlYXNlKCk7Cit9CisKKy8vIEZJWE1FOiBXZSBzaW1wbHkg
cmV0dXJucyB0aGUgZXhlY3V0b3Igd2l0aCB0aGUgbWluaW11bSBhY3F1aXJlIGNvdW50cy4KKy8v
IFRoaXMgdmFsdWUgZG9lcyBub3QgcmVmbGVjdCB0aGUgcmVhbCBzeXN0ZW0gbG9hZC4KK0V4ZWN1
dG9yKiBFeGVjdXRvclBvb2w6OnNlcmlhbEV4ZWN1dG9yV2l0aE1pbmltdW1BY3F1aXJlQ291bnQo
KQoreworICAgIGludCBtaW5pbXVtQWNxdWlyZUNvdW50ID0gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKTsKKyAgICBpbnQgaW5kZXggPSBtX2V4ZWN1dG9yUG9vbC5zaXplKCk7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZXhlY3V0b3JQb29sLnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgIGlmIChtX2V4ZWN1dG9yUG9vbFtpXS0+YWNxdWlyZUNvdW50KCkgPCBtaW5pbXVtQWNx
dWlyZUNvdW50KSB7CisgICAgICAgICAgICBtaW5pbXVtQWNxdWlyZUNvdW50ID0gbV9leGVjdXRv
clBvb2xbaV0tPmFjcXVpcmVDb3VudCgpOworICAgICAgICAgICAgaW5kZXggPSBpOworICAgICAg
ICB9CisgICAgfQorCisgICAgQVNTRVJUKGluZGV4IDwgbV9leGVjdXRvclBvb2wuc2l6ZSgpKTsK
KyAgICByZXR1cm4gbV9leGVjdXRvclBvb2xbaW5kZXhdOworfQorCitEaXNwYXRjaEdsb2JhbFF1
ZXVlUHJpdmF0ZTo6RGlzcGF0Y2hHbG9iYWxRdWV1ZVByaXZhdGUoKQoreworICAgIEV4ZWN1dG9y
UG9vbDo6aW5pdGlhbGl6ZUV4ZWN1dG9yUG9vbCgpOworfQorCitEaXNwYXRjaEdsb2JhbFF1ZXVl
UHJpdmF0ZTo6fkRpc3BhdGNoR2xvYmFsUXVldWVQcml2YXRlKCkKK3sKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBEaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0ZTo6YXN5bmMo
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgZXhlY3V0b3JQb29sKCkt
PmV4ZWN1dGUoZnVuY3Rpb24pOworfQorCitEaXNwYXRjaFNlcmlhbFF1ZXVlUHJpdmF0ZTo6RGlz
cGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGUoKQorICAgIDogbV9leGVjdXRvclN0YXR1cyhSdW5uaW5n
KQoreworICAgIG1fc2VyaWFsRXhlY3V0b3IgPSBleGVjdXRvclBvb2woKS0+YWNxdWlyZVNlcmlh
bEV4ZWN1dG9yKCk7Cit9CisKK0Rpc3BhdGNoU2VyaWFsUXVldWVQcml2YXRlOjp+RGlzcGF0Y2hT
ZXJpYWxRdWV1ZVByaXZhdGUoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2V4ZWN1dG9y
U3RhdHVzTXV0ZXgpOworICAgIG1fZXhlY3V0b3JTdGF0dXMgPSBUZXJtaW5hdGlvbkJlZ3VuOwor
CisgICAgbV9zZXJpYWxFeGVjdXRvci0+ZXhlY3V0ZShiaW5kKCZEaXNwYXRjaFNlcmlhbFF1ZXVl
UHJpdmF0ZTo6ZW5zdXJlVGVybWluYXRlLCB0aGlzKSk7CisgICAgd2hpbGUgKG1fZXhlY3V0b3JT
dGF0dXMgIT0gVGVybWluaWF0aW9uQ29tcGxldGVkKQorICAgICAgICBtX3Rlcm1pbmF0aW9uQ29t
cGxldGVkLndhaXQobV9leGVjdXRvclN0YXR1c011dGV4KTsKKyAgICBleGVjdXRvclBvb2woKS0+
cmVsZWFzZVNlcmlhbEV4ZWN1dG9yKG1fc2VyaWFsRXhlY3V0b3IpOworfQorCit2b2lkIERpc3Bh
dGNoU2VyaWFsUXVldWVQcml2YXRlOjplbnN1cmVUZXJtaW5hdGUoKQoreworICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtX2V4ZWN1dG9yU3RhdHVzTXV0ZXgpOworICAgIEFTU0VSVChtX2V4ZWN1dG9y
U3RhdHVzID09IFRlcm1pbmF0aW9uQmVndW4pOworICAgIG1fZXhlY3V0b3JTdGF0dXMgPSBUZXJt
aW5pYXRpb25Db21wbGV0ZWQ7CisgICAgbV90ZXJtaW5hdGlvbkNvbXBsZXRlZC5zaWduYWwoKTsK
K30KKworc3RhdGljIHZvaWQgY2FuY2VsYWJsZUZ1bmN0aW9uKERpc3BhdGNoU2VyaWFsUXVldWVQ
cml2YXRlKiBzZXJpYWxRdWV1ZSwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7
CisgICAgaWYgKFVOTElLRUxZKHNlcmlhbFF1ZXVlLT5oYXNUZXJtaW5hdGlvbkJlZ3VuKCkpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBmdW5jdGlvbigpOworfQorCit2b2lkIERpc3BhdGNoU2Vy
aWFsUXVldWVQcml2YXRlOjphc3luYyhjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikK
K3sKKyAgICBBU1NFUlQobV9leGVjdXRvclN0YXR1cyA9PSBSdW5uaW5nKTsKKyAgICBtX3Nlcmlh
bEV4ZWN1dG9yLT5leGVjdXRlKGJpbmQoY2FuY2VsYWJsZUZ1bmN0aW9uLCB0aGlzLCBmdW5jdGlv
bikpOworfQorCitib29sIERpc3BhdGNoU2VyaWFsUXVldWVQcml2YXRlOjpoYXNUZXJtaW5hdGlv
bkJlZ3VuKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9leGVjdXRvclN0YXR1c011dGV4
KTsKKyAgICBBU1NFUlQobV9leGVjdXRvclN0YXR1cyAhPSBUZXJtaW5pYXRpb25Db21wbGV0ZWQp
OworICAgIHJldHVybiBtX2V4ZWN1dG9yU3RhdHVzID09IFRlcm1pbmF0aW9uQmVndW47Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKFRIUkVBRElOR19MSUJESVNQ
QVRDSCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0Rpc3BhdGNoUXVldWVQcml2YXRlR2Vu
ZXJpYy5oIGIvU291cmNlL1dURi93dGYvRGlzcGF0Y2hRdWV1ZVByaXZhdGVHZW5lcmljLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZlNDlhNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0Rpc3BhdGNoUXVldWVQcml2YXRlR2VuZXJpYy5oCkBAIC0wLDAg
KzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIERpc3BhdGNoUXVldWVQcml2YXRlR2VuZXJpY19oCisjZGVmaW5lIERpc3Bh
dGNoUXVldWVQcml2YXRlR2VuZXJpY19oCisKKyNpZiAhRU5BQkxFKFRIUkVBRElOR19MSUJESVNQ
QVRDSCkKKworI2luY2x1ZGUgIkRpc3BhdGNoUXVldWUuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBEaXNwYXRjaEdsb2JhbFF1ZXVl
UHJpdmF0ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGlzcGF0Y2hHbG9iYWxRdWV1ZVBy
aXZhdGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPERpc3BhdGNoR2xvYmFsUXVldWVQcml2YXRlPiBjcmVhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0ZSgp
KTsKKyAgICB9CisKKyAgICB+RGlzcGF0Y2hHbG9iYWxRdWV1ZVByaXZhdGUoKTsKKworICAgIHZv
aWQgYXN5bmMoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworCitwcml2YXRlOgorICAgIERpc3Bh
dGNoR2xvYmFsUXVldWVQcml2YXRlKCk7Cit9OworCitjbGFzcyBFeGVjdXRvcjsKKworY2xhc3Mg
RGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERp
c3BhdGNoU2VyaWFsUXVldWVQcml2YXRlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxEaXNwYXRjaFNlcmlhbFF1ZXVlUHJpdmF0
ZT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGlzcGF0Y2hT
ZXJpYWxRdWV1ZVByaXZhdGUoKSk7CisgICAgfQorCisgICAgfkRpc3BhdGNoU2VyaWFsUXVldWVQ
cml2YXRlKCk7CisKKyAgICB2b2lkIGFzeW5jKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKwor
ICAgIGJvb2wgaGFzVGVybWluYXRpb25CZWd1bigpOworCitwcml2YXRlOgorICAgIERpc3BhdGNo
U2VyaWFsUXVldWVQcml2YXRlKCk7CisgICAgdm9pZCBlbnN1cmVUZXJtaW5hdGUoKTsKKworICAg
IGVudW0gRXhlY3V0b3JTdGF0dXMgeyBSdW5uaW5nLCBUZXJtaW5hdGlvbkJlZ3VuLCBUZXJtaW5p
YXRpb25Db21wbGV0ZWQgfTsKKyAgICBNdXRleCBtX2V4ZWN1dG9yU3RhdHVzTXV0ZXg7CisgICAg
RXhlY3V0b3JTdGF0dXMgbV9leGVjdXRvclN0YXR1czsKKyAgICBUaHJlYWRDb25kaXRpb24gbV90
ZXJtaW5hdGlvbkNvbXBsZXRlZDsKKworICAgIEV4ZWN1dG9yKiBtX3NlcmlhbEV4ZWN1dG9yOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyAhRU5BQkxFKFRIUkVBRElOR19M
SUJESVNQQVRDSCkKKworI2VuZGlmIC8vIERpc3BhdGNoUXVldWVQcml2YXRlR2VuZXJpY19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9EaXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNo
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL0Rpc3BhdGNoUXVldWVQcml2YXRlTGliZGlzcGF0Y2guY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OTdjYWUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9EaXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNoLmNw
cApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEw
MCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShUSFJFQURJ
TkdfTElCRElTUEFUQ0gpCisKKyNpbmNsdWRlICJEaXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3Bh
dGNoLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitEaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0ZTo6
RGlzcGF0Y2hHbG9iYWxRdWV1ZVByaXZhdGUoKQoreworICAgIG1fZGlzcGF0Y2hRdWV1ZSA9IGRp
c3BhdGNoX2dldF9nbG9iYWxfcXVldWUoRElTUEFUQ0hfUVVFVUVfUFJJT1JJVFlfREVGQVVMVCwg
MCk7Cit9CisKK0Rpc3BhdGNoR2xvYmFsUXVldWVQcml2YXRlOjp+RGlzcGF0Y2hHbG9iYWxRdWV1
ZVByaXZhdGUoKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitzdHJ1Y3QgRnVu
Y3Rpb25Cb3ggeworICAgIEZ1bmN0aW9uQm94KGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0
aW9uKQorICAgICAgICA6IG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgeworICAgIH0KKworICAg
IEZ1bmN0aW9uPHZvaWQoKT4gbV9mdW5jdGlvbjsKK307CisKK3ZvaWQgRGlzcGF0Y2hHbG9iYWxR
dWV1ZVByaXZhdGU6OmFzeW5jKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQorewor
ICAgIEZ1bmN0aW9uQm94KiBib3ggPSBuZXcgRnVuY3Rpb25Cb3goZnVuY3Rpb24pOworICAgIGRp
c3BhdGNoX2FzeW5jX2YobV9kaXNwYXRjaFF1ZXVlLCByZWludGVycHJldF9jYXN0PHZvaWQqPihi
b3gpLCAmRGlzcGF0Y2hHbG9iYWxRdWV1ZVByaXZhdGU6Omludm9rZUZ1bmN0aW9uKTsKK30KKwor
dm9pZCBEaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0ZTo6aW52b2tlRnVuY3Rpb24odm9pZCogY29u
dGV4dCkKK3sKKyAgICBGdW5jdGlvbkJveCogYm94ID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlv
bkJveCo+KGNvbnRleHQpOworICAgIGJveC0+bV9mdW5jdGlvbigpOworICAgIGRlbGV0ZSBib3g7
Cit9CisKK0Rpc3BhdGNoU2VyaWFsUXVldWVQcml2YXRlOjpEaXNwYXRjaFNlcmlhbFF1ZXVlUHJp
dmF0ZSgpCisgICAgOiBtX2hhc1Rlcm1pbmF0aW9uQmVndW4oZmFsc2UpCit7CisgICAgbV9kaXNw
YXRjaEdyb3VwID0gZGlzcGF0Y2hfZ3JvdXBfY3JlYXRlKCk7CisgICAgbV9kaXNwYXRjaFF1ZXVl
ID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKDAsIDApOworfQorCitEaXNwYXRjaFNlcmlhbFF1ZXVl
UHJpdmF0ZTo6fkRpc3BhdGNoU2VyaWFsUXVldWVQcml2YXRlKCkKK3sKKyAgICB0ZXJtaW5hdGUo
KTsKKyAgICBkaXNwYXRjaF9yZWxlYXNlKG1fZGlzcGF0Y2hHcm91cCk7CisgICAgZGlzcGF0Y2hf
cmVsZWFzZShtX2Rpc3BhdGNoUXVldWUpOworfQorCit2b2lkIERpc3BhdGNoU2VyaWFsUXVldWVQ
cml2YXRlOjp0ZXJtaW5hdGUoKQoreworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1faGFzVGVybWluYXRpb25CZWd1bk11dGV4KTsKKyAgICAgICAgbV9oYXNUZXJtaW5hdGlvbkJl
Z3VuID0gdHJ1ZTsKKyAgICB9CisgICAgZGlzcGF0Y2hfZ3JvdXBfd2FpdChtX2Rpc3BhdGNoR3Jv
dXAsIERJU1BBVENIX1RJTUVfRk9SRVZFUik7Cit9CisKK3N0cnVjdCBDYW5jZWxhYmxlRnVuY3Rp
b25Cb3ggeworICAgIENhbmNlbGFibGVGdW5jdGlvbkJveChjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiBmdW5jdGlvbiwgRGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGUqIHF1ZXVlKQorICAgICAgICA6
IG1fZnVuY3Rpb24oZnVuY3Rpb24pCisgICAgICAgICwgbV9xdWV1ZShxdWV1ZSkKKyAgICB7Cisg
ICAgfQorCisgICAgRnVuY3Rpb248dm9pZCgpPiBtX2Z1bmN0aW9uOworICAgIERpc3BhdGNoU2Vy
aWFsUXVldWVQcml2YXRlKiBtX3F1ZXVlOworfTsKKwordm9pZCBEaXNwYXRjaFNlcmlhbFF1ZXVl
UHJpdmF0ZTo6aW52b2tlRnVuY3Rpb24odm9pZCogY29udGV4dCkKK3sKKyAgICBDYW5jZWxhYmxl
RnVuY3Rpb25Cb3gqIGJveCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FuY2VsYWJsZUZ1bmN0aW9uQm94
Kj4oY29udGV4dCk7CisKKyAgICBib29sIGlzQ2FuY2VsZWQ7CisgICAgeworICAgICAgICBNdXRl
eExvY2tlciBsb2NrZXIoYm94LT5tX3F1ZXVlLT5tX2hhc1Rlcm1pbmF0aW9uQmVndW5NdXRleCk7
CisgICAgICAgIGlzQ2FuY2VsZWQgPSBib3gtPm1fcXVldWUtPm1faGFzVGVybWluYXRpb25CZWd1
bjsKKyAgICB9CisgICAgaWYgKExJS0VMWSghaXNDYW5jZWxlZCkpCisgICAgICAgIGJveC0+bV9m
dW5jdGlvbigpOworCisgICAgZGVsZXRlIGJveDsKK30KKwordm9pZCBEaXNwYXRjaFNlcmlhbFF1
ZXVlUHJpdmF0ZTo6YXN5bmMoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7Cisg
ICAgQVNTRVJUKCFtX2hhc1Rlcm1pbmF0aW9uQmVndW4pOworCisgICAgQ2FuY2VsYWJsZUZ1bmN0
aW9uQm94KiBib3ggPSBuZXcgQ2FuY2VsYWJsZUZ1bmN0aW9uQm94KGZ1bmN0aW9uLCB0aGlzKTsK
KyAgICBkaXNwYXRjaF9ncm91cF9hc3luY19mKG1fZGlzcGF0Y2hHcm91cCwgbV9kaXNwYXRjaFF1
ZXVlLCByZWludGVycHJldF9jYXN0PHZvaWQqPihib3gpLCAmRGlzcGF0Y2hTZXJpYWxRdWV1ZVBy
aXZhdGU6Omludm9rZUZ1bmN0aW9uKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBFTkFCTEUoVEhSRUFESU5HX0xJQkRJU1BBVENIKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvRGlzcGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaC5oIGIvU291cmNlL1dURi93dGYv
RGlzcGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmVjOTA3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9E
aXNwYXRjaFF1ZXVlUHJpdmF0ZUxpYmRpc3BhdGNoLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRGlz
cGF0Y2hRdWV1ZVByaXZhdGVMaWJkaXNwYXRjaF9oCisjZGVmaW5lIERpc3BhdGNoUXVldWVQcml2
YXRlTGliZGlzcGF0Y2hfaAorCisjaWYgRU5BQkxFKFRIUkVBRElOR19MSUJESVNQQVRDSCkKKwor
I2luY2x1ZGUgIkRpc3BhdGNoUXVldWUuaCIKKworI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNo
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2Ns
YXNzIERpc3BhdGNoR2xvYmFsUXVldWVQcml2YXRlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShEaXNwYXRjaEdsb2JhbFF1ZXVlUHJpdmF0ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RGlzcGF0Y2hHbG9iYWxRdWV1ZVBy
aXZhdGU+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERpc3Bh
dGNoR2xvYmFsUXVldWVQcml2YXRlKCkpOworICAgIH0KKworICAgIH5EaXNwYXRjaEdsb2JhbFF1
ZXVlUHJpdmF0ZSgpOworCisgICAgdm9pZCBhc3luYyhjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7
CisKK3ByaXZhdGU6CisgICAgRGlzcGF0Y2hHbG9iYWxRdWV1ZVByaXZhdGUoKTsKKyAgICBzdGF0
aWMgdm9pZCBpbnZva2VGdW5jdGlvbih2b2lkKiBjb250ZXh0KTsKKworICAgIGRpc3BhdGNoX3F1
ZXVlX3QgbV9kaXNwYXRjaFF1ZXVlOworfTsKKworY2xhc3MgRGlzcGF0Y2hTZXJpYWxRdWV1ZVBy
aXZhdGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERpc3BhdGNoU2VyaWFsUXVldWVQcml2
YXRlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxEaXNwYXRjaFNlcmlhbFF1ZXVlUHJpdmF0ZT4gY3JlYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgRGlzcGF0Y2hTZXJpYWxRdWV1ZVByaXZhdGUoKSk7
CisgICAgfQorCisgICAgfkRpc3BhdGNoU2VyaWFsUXVldWVQcml2YXRlKCk7CisKKyAgICB2b2lk
IGFzeW5jKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKworcHJpdmF0ZToKKyAgICBEaXNwYXRj
aFNlcmlhbFF1ZXVlUHJpdmF0ZSgpOworICAgIHN0YXRpYyB2b2lkIGludm9rZUZ1bmN0aW9uKHZv
aWQqIGNvbnRleHQpOworCisgICAgdm9pZCB0ZXJtaW5hdGUoKTsKKworICAgIGRpc3BhdGNoX3F1
ZXVlX3QgbV9kaXNwYXRjaFF1ZXVlOworICAgIGRpc3BhdGNoX2dyb3VwX3QgbV9kaXNwYXRjaEdy
b3VwOworICAgIE11dGV4IG1faGFzVGVybWluYXRpb25CZWd1bk11dGV4OworICAgIGJvb2wgbV9o
YXNUZXJtaW5hdGlvbkJlZ3VuOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBFTkFCTEUoVEhSRUFESU5HX0xJQkRJU1BBVENIKQorCisjZW5kaWYgLy8gRGlzcGF0Y2hRdWV1
ZVByaXZhdGVMaWJkaXNwYXRjaF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmdQdGhyZWFkcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKaW5k
ZXggOTIxZGQzYi4uMGJhNjdjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5n
UHRocmVhZHMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcApA
QCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIlRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMu
aCIKICNpbmNsdWRlICJUaHJlYWRTcGVjaWZpYy5oIgogI2luY2x1ZGUgIlVudXNlZFBhcmFtLmgi
CisjaW5jbHVkZSA8d3RmL0Rpc3BhdGNoUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0
YS5oPgpAQCAtODksNiArOTAsNyBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmcoKQogICAgIHd0
ZlRocmVhZERhdGEoKTsKICAgICBzX2R0b2FQNU11dGV4ID0gbmV3IE11dGV4OwogICAgIGluaXRp
YWxpemVEYXRlcygpOworICAgIERpc3BhdGNoUXVldWU6OmluaXRpYWxpemVEaXNwYXRjaFF1ZXVl
KCk7CiB9CiAKIHZvaWQgbG9ja0F0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpY011dGV4KCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmdXaW4uY3BwCmluZGV4IGQzMzk3M2QuLjQ4NTY3ZDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZGluZ1dpbi5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFk
aW5nV2luLmNwcApAQCAtOTMsNiArOTMsNyBAQAogI2luY2x1ZGUgIlRocmVhZEZ1bmN0aW9uSW52
b2NhdGlvbi5oIgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KKyNpbmNsdWRlIDx3dGYvRGlzcGF0Y2hRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CkBAIC0xNzksNiArMTgwLDcgQEAgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nKCkKICAgICB3
dGZUaHJlYWREYXRhKCk7CiAgICAgc19kdG9hUDVNdXRleCA9IG5ldyBNdXRleDsKICAgICBpbml0
aWFsaXplRGF0ZXMoKTsKKyAgICBEaXNwYXRjaFF1ZXVlOjppbml0aWFsaXplRGlzcGF0Y2hRdWV1
ZSgpOwogfQogCiBzdGF0aWMgSGFzaE1hcDxEV09SRCwgSEFORExFPiYgdGhyZWFkTWFwKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2Nocm9taXVtL01haW5UaHJlYWRDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV1RGL3d0Zi9jaHJvbWl1bS9NYWluVGhyZWFkQ2hyb21pdW0uY3BwCmluZGV4IDll
NjU5MmIuLmFlNWZjODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2Nocm9taXVtL01haW5U
aHJlYWRDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvY2hyb21pdW0vTWFpblRocmVh
ZENocm9taXVtLmNwcApAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiQXNzZXJ0aW9ucy5o
IgogI2luY2x1ZGUgIkNocm9taXVtVGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25hbC5o
IgogI2luY2x1ZGUgIlRocmVhZGluZy5oIgogCiBuYW1lc3BhY2UgV1RGIHsKQEAgLTU0LDYgKzU1
LDE4IEBAIHZvaWQgY2FsbE9uTWFpblRocmVhZChNYWluVGhyZWFkRnVuY3Rpb24qIGZ1bmN0aW9u
LCB2b2lkKiBjb250ZXh0KQogICAgIENocm9taXVtVGhyZWFkaW5nOjpjYWxsT25NYWluVGhyZWFk
KGZ1bmN0aW9uLCBjb250ZXh0KTsKIH0KIAorc3RhdGljIHZvaWQgY2FsbEZ1bmN0aW9uT2JqZWN0
KHZvaWQqIGNvbnRleHQpCit7CisgICAgRnVuY3Rpb248dm9pZCgpPiogZnVuY3Rpb24gPSBzdGF0
aWNfY2FzdDxGdW5jdGlvbjx2b2lkKCk+Kj4oY29udGV4dCk7CisgICAgKCpmdW5jdGlvbikoKTsK
KyAgICBkZWxldGUgZnVuY3Rpb247Cit9CisKK3ZvaWQgY2FsbE9uTWFpblRocmVhZChjb25zdCBG
dW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBjYWxsT25NYWluVGhyZWFkKGNhbGxG
dW5jdGlvbk9iamVjdCwgbmV3IEZ1bmN0aW9uPHZvaWQgKCk+KGZ1bmN0aW9uKSk7Cit9CisKIHZv
aWQgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoTWFpblRocmVhZEZ1bmN0aW9uKiwgdm9pZCopCiB7
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDI0MTEx
ZTIuLmM4M2FkNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xODEyLDkgKzE4MTIsMTEgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRp
b24uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbElt
YWdlRGVjb2Rlci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9QYXR0ZXJuLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JldGFpbmVkTW9kZUJpdG1hcElt
YWdlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Sb3VuZGVkUmVjdC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRG
b250RGF0YS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlODQzZWUwLi45MzJmZDJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNjA4IEBACisyMDEyLTA3LTE3ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNv
bXBhbnkxMDAubmV0PgorCisgICAgICAgIE1ha2UgQ1NTIGJveCBtb2RlbCBiYWNrZ3JvdW5kLCBi
b3JkZXIgYW5kIG1hc2sgYmUgZGVjb2RlZCBieSBwYXJhbGxlbCBpbWFnZSBkZWNvZGVycy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMjAzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIHR3
byBjaGFuZ2VzLgorCisgICAgICAgIDEuIE1ha2UgUmVuZGVyQm94TW9kZWxPYmplY3QgdXNlIFJl
dGFpbmVkTW9kZUJpdG1hcEltYWdlIGlmIHRoZSBpbWFnZSBpcworICAgICAgICBhbiBpbnN0YW5j
ZSBvZiBCaXRtYXBJbWFnZS4KKworICAgICAgICAyLiBPcmlnaW5hbGx5LCB0aGUgcmVuZGVyZXIg
Y2hlY2tlZCBpZiBhIENTUyBpbWFnZSB3YXMgbG9hZGVkIGluIG9yZGVyIHRvCisgICAgICAgIHJl
bmRlciB0aGUgZW50aXJlIGltYWdlLiBXaXRoIHBhcmFsbGVsIGltYWdlIGRlY29kZXJzLCBsb2Fk
aW5nIGRvbmUgZG9lcyBub3QgYWx3YXlzCisgICAgICAgIG1lYW4gdGhlIHdob2xlIGltYWdlIGNh
biBiZSByZW5kZXJlZC4gTm93IGlmIHRoZSBnaXZlbiBpbWFnZSBpcyBhIEJpdG1hcEltYWdlLAor
ICAgICAgICB3ZSBuZWVkIHRvIGNoZWNrIGlmIGRlY29kaW5nIGlzIGNvbXBsZXRlZCBpbiBhZGRp
dGlvbiB0byBsb2FkaW5nIGRvbmUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5
IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpwYWludE1hc2spOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpk
ZXRlcm1pbmVCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpwYWludE1hc2tJbWFnZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6
cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6cGFpbnROaW5lUGllY2VJbWFnZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6Y2FuUmVuZGVyRW50aXJlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpjYW5SZW5kZXJFbnRpcmVCb3JkZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6Om11c3RSZXBhaW50QmFja2dyb3VuZE9yQm9yZGVyKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChSZW5kZXJPYmplY3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rmls
bExheWVyOjpjYW5SZW5kZXJFbnRpcmVJbWFnZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxl
L0ZpbGxMYXllci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChGaWxsTGF5ZXIpOgor
CisyMDEyLTA3LTE5ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0Pgor
CisgICAgICAgIEFkZCBwYXJhbGxlbCBpbWFnZSBkZWNvZGVycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA5MzUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBdXRob3JlZCBieSBIdWFuZyBEb25nc3VuZyBh
bmQgS3dhbmcgWXVsIFNlby4KKworICAgICAgICBNYWtlIGltYWdlIGRlY29kaW5nIG9mZiB0aGUg
bWFpbiB0aHJlYWQsIHNvIHRoYXQgdGhlIG1haW4gdGhyZWFkIGNhbiBzcGVuZCBtb3JlCisgICAg
ICAgIHRpbWUgaW4gbG9hZGluZywgcGFyc2luZywgc2NyaXB0aW5nIGFuZCBsYXlvdXQgd2hpbGUg
aW1hZ2UgZGVjb2RpbmcgdGhyZWFkcyBkZWNvZGUKKyAgICAgICAgaW1hZ2VzIGluIHRoZSBiYWNr
Z3JvdW5kLgorCisgICAgICAgIFJlZmVyIHRvIGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3Vt
ZW50L3B1Yj9pZD0xMmdmN01oTkhmdXBlUjNHZFJGLWgyVnpnODZ2aUNid1hxOF9KQnlIS2xnMAor
ICAgICAgICBmb3IgZGV0YWlsZWQgZXhwbGFuYXRpb24uCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgor
ICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZW5z
dXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Y2FjaGVG
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6cmV0YWluZWRNb2RlUmVuZGVy
aW5nKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6
OmRpZFJlY2VpdmVGcmFtZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6
OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6
OmN1cnJlbnRGcmFtZUlzQ29tcGxldGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmg6CisgICAgICAgIChCaXRtYXBJbWFnZSk6IEJpdG1hcEltYWdlIG5vdyBpbXBs
ZW1lbnRzIEltYWdlU291cmNlT2JzZXJ2ZXIgYW5kIHBhc3NlcyBpdHNlbGYKKyAgICAgICAgdG8g
SW1hZ2VTb3VyY2Ugb24gY29uc3RydWN0aW9uLiBXaGVuIGltYWdlIGRlY29kaW5nIGlzIGZpbmlz
aGVkIG9yIGEgY2FjaGVkIGltYWdlCisgICAgICAgIGlzIGF2YWlsYWJsZSwgSW1hZ2VTb3VyY2Ug
bm90aWZpZXMgQml0bWFwSW1hZ2UgdmlhCisgICAgICAgIEltYWdlU291cmNlT2JzZXJ2ZXI6OmRp
ZFJlY2VpdmVJbWFnZUZyYW1lRGF0YShzaXplX3QsIGNvbnN0IEltYWdlRnJhbWVEYXRhJikuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y2xlYXIpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNl
Ojppc1NpemVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lU2l6ZUF0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVNvdXJjZTo6cmVxdWVzdEZyYW1lQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6c2hvdWxkRGVjb2RlUGFyYWxsZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3Vy
Y2U6OmZpcnN0RnJhbWVJc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNl
OjpwYXJhbGxlbERlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZGlkRGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVQYXJhbGxlbERlY29k
ZXJJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y2xlYXJQYXJhbGxl
bERlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNlcmlhbERlY29kZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChJbWFnZVNvdXJjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2VPYnNlcnZlci5oOgorICAgICAgICAoSW1hZ2VTb3VyY2VPYnNlcnZlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURlY29kZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOiBPbmNlIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlIGFuZCBJ
bWFnZVNvdXJjZSBkZWNpZGUgaXQgaXMgb2theSB0byB1c2UKKyAgICAgICAgcGFyYWxsZWwgaW1h
Z2UgZGVjb2RlcnMsIHRoaXMgY2xhc3MgaW50ZXJjZXB0cyBkZWNvZGluZyByZXF1ZXN0cyBmcm9t
IEltYWdlU291cmNlCisgICAgICAgIGFuZCBwZXJmb3JtcyBpbWFnZSBkZWNvZGluZyBvbiB0aGUg
ZGVjb2RlciB0aHJlYWQuIEluc3RlYWQgb2YgcmVpbXBsZW1lbnRpbmcgYWxsCisgICAgICAgIHRo
ZSBkZWNvZGVycyBmcm9tIHNjcmF0Y2gsIGl0IHJldXNlcyB0aGUgZXhpc3RpbmcgaW1hZ2UgZGVj
b2RlcnMuCisgICAgICAgIChXZWJDb3JlOjpQYXJhbGxlbEltYWdlRGVjb2Rlcjo6UGFyYWxsZWxJ
bWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFyYWxsZWxJbWFnZURlY29kZXI6On5Q
YXJhbGxlbEltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpQYXJhbGxlbEltYWdlRGVj
b2Rlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXJhbGxlbEltYWdlRGVjb2Rl
cjo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXJhbGxlbEltYWdlRGVjb2Rlcjo6
c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQYXJhbGxlbEltYWdlRGVjb2Rlcjo6ZGVjb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhcmFsbGVsSW1hZ2VEZWNvZGVyOjpleHRyYWN0U2VnbWVu
dEZvclRhc2spOgorICAgICAgICAoUGFyYWxsZWxGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFyYWxsZWxGcmFtZURhdGE6OlBhcmFsbGVsRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhcmFsbGVsRnJhbWVEYXRhOjp+UGFyYWxsZWxGcmFtZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFyYWxsZWxJbWFnZURlY29kZXI6OmRlY29kZVRhc2spOgorICAgICAgICAoV2ViQ29y
ZTo6ZGlkRGVjb2RlVGFza0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUltYWdl
RnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBhcmFsbGVsSW1hZ2VEZWNvZGVyOjpkaWRE
ZWNvZGVUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlBhcmFsbGVsSW1hZ2VEZWNvZGVyOjpkaWRE
ZWNvZGVQYXJ0aWFsKToKKyAgICAgICAgKFdlYkNvcmU6OlBhcmFsbGVsSW1hZ2VEZWNvZGVyOjph
cHBlbmREZWNvZGVkRGF0YVRvSW1hZ2VGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXJhbGxl
bEltYWdlRGVjb2Rlcjo6c3luY0ltYWdlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGFyYWxs
ZWxJbWFnZURlY29kZXI6OmRpZERlY29kZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoUGFyYWxsZWxJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFy
YWxsZWxJbWFnZURlY29kZXI6OmZpbGVuYW1lRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhcmFsbGVsSW1hZ2VEZWNvZGVyOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBhcmFsbGVs
SW1hZ2VEZWNvZGVyOjp2YWxpZCk6CisgICAgICAgIChFbmNvZGVkRGF0YVNlZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFyYWxsZWxJbWFnZURlY29kZXI6OkVuY29kZWREYXRhU2VnbWVudDo6
RW5jb2RlZERhdGFTZWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxl
bEltYWdlRGVjb2Rlck9ic2VydmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlT2JzZXJ2ZXIuaC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoUGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpQYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyOjp+UGFyYWxsZWxJbWFnZURlY29kZXJPYnNl
cnZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1h
Z2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOiBCZWNhdXNlIGltYWdlIGRlY29kaW5n
IGlzIHVzZWQgaW4gdmFyaW91cyBjb250ZXh0cyBpbiBXZWJLaXQsIGl0IGlzIHNpbXBseQorICAg
ICAgICBpbXBvc3NpYmxlIHRvIG1ha2UgYWxsIHBhcmFsbGVsIGRlY29kaW5nIHBhcmFsbGVsLiBJ
bnN0ZWFkLCB3ZSBzZWxlY3RpdmVseSB1c2UgcGFyYWxsZWwKKyAgICAgICAgaW1hZ2UgZGVjb2Rl
cnMgd2hlcmUgcG9zc2libGUgYW5kIHVzZSB0aGUgZXhpc3Rpbmcgc2VxdWVudGlhbCBpbWFnZSBk
ZWNvZGVycyBvdGhlcndpc2UuCisgICAgICAgIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlIHdyYXBz
IGEgQml0bWFwSW1hZ2UgYW5kIGhlbHBzIGRlY2lkZSB3aGVuIGl0IGlzIHNhZmUgYW5kIGJlbmVm
aWNpYWwKKyAgICAgICAgdG8gdXNlIHBhcmFsbGVsIGltYWdlIGRlY29kZXJzLgorICAgICAgICAo
V2ViQ29yZTo6UmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6UmV0YWluZWRNb2RlQml0bWFwSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6Omhhc1NpbmdsZVNlY3Vy
aXR5T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpz
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpnZXRIb3RT
cG90KToKKyAgICAgICAgKFdlYkNvcmU6OlJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpkYXRhQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6ZmlsZW5h
bWVFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6
OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXRhaW5lZE1vZGVCaXRt
YXBJbWFnZTo6ZGVjb2RlZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmV0YWluZWRNb2RlQml0
bWFwSW1hZ2U6OnN0YXJ0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJldGFpbmVkTW9k
ZUJpdG1hcEltYWdlOjpzdG9wQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJldGFpbmVk
TW9kZUJpdG1hcEltYWdlOjpyZXNldEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZXRh
aW5lZE1vZGVCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OmN1cnJlbnRGcmFtZUhhc0FscGhh
KToKKyAgICAgICAgKFdlYkNvcmU6OlJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpjdXJyZW50RnJh
bWVJc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJldGFpbmVkTW9kZUJpdG1hcEltYWdl
OjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OlJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjptYXlG
aWxsV2l0aFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmV0YWluZWRNb2RlQml0bWFw
SW1hZ2U6OnNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmV0YWluZWRNb2RlU2F2ZXI6
OlJldGFpbmVkTW9kZVNhdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJldGFpbmVkTW9kZVNhdmVy
Ojp+UmV0YWluZWRNb2RlU2F2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6dG9SZXRhaW5lZE1vZGVC
aXRtYXBJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JldGFpbmVkTW9kZUJpdG1hcEltYWdl
SWZQb3NzaWJsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0
bWFwSW1hZ2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFJldGFpbmVk
TW9kZUJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJldGFpbmVkTW9kZUJpdG1hcElt
YWdlOjp+UmV0YWluZWRNb2RlQml0bWFwSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmV0YWlu
ZWRNb2RlQml0bWFwSW1hZ2U6OnJldGFpbmVkTW9kZVJlbmRlcmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6YmVnaW5SZXRhaW5lZE1vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OmVuZFJldGFpbmVkTW9kZSk6Cisg
ICAgICAgIChSZXRhaW5lZE1vZGVTYXZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
QTo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9CaXRtYXBJbWFnZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpC
aXRtYXBJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0M0RDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHQzRENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJ
bWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjpyZXF1ZXN0RnJhbWVBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVudmcvSW1hZ2VPcGVuVkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFn
ZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpz
ZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdl
V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6SW1hZ2VGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojpjb3B5Qml0bWFwRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRTaXpl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omxhc3REZWNvZGVkUm93KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWU6OnNldExhc3REZWNvZGVkUm93KToKKyAgICAgICAgKEltYWdlRnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpkYXRhKToKKyAgICAgICAgKElt
YWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZpcnN0SW1hZ2VG
cmFtZVdpdGhvdXREZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Js
YWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVJl
YWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1Q
SW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlRGVjb2Rlcjo6aXNT
aXplQXZhaWxhYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1Q
SW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OmRlY29k
ZUJNUCk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc1JMRURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NOb25STEVEYXRhKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpzZXRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0VCUEltYWdl
RGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVySW1hZ2U6OmJhY2tncm91bmRJc09ic2N1cmVkKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFj
a2luZzo6dXBkYXRlSW1hZ2VDb250ZW50cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5oOgorICAgICAgICAoUmVuZGVyTGF5ZXJCYWNraW5nKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR0ltYWdlOjpwYWludCk6CisKKzIwMTItMDgtMDMgIEh1YW5nIERvbmdzdW5nICA8bHV4dGVs
bGFAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgUmVuZGVyTGF5ZXJCYWNraW5nIG11c3QgY2Fs
bCBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2Ugd2hlbiB0aGUgaW1hZ2UgaXMgY2hh
bmdlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkz
MTc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50
ZXJuYWwgcmV2aWV3IGJ5IEphZSBIeXVuIFBhcmsuCisKKyAgICAgICAgQ3VycmVudGx5LCBsYXlv
dXQgaW5kaXJlY3RseSBjYWxsIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhpY3NMYXll
ckNvbmZpZ3VyYXRpb24oKQorICAgICAgICBhbmQgdXBkYXRlR3JhcGhpY3NMYXllckNvbmZpZ3Vy
YXRpb24oKSBpbmRpcmVjdGx5IGNhbGwgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdl
KCkuCisgICAgICAgIEl0IGJ1cmRlbnMgYWxsIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGltcGxl
bWVudGF0aW9ucyBiZWNhdXNlIGVhY2ggaW1wbGVtZW50YXRpb24KKyAgICAgICAgc2hvdWxkIGNo
ZWNrIGlmIHRoZSBpbWFnZSBpcyBjaGFuZ2VkLgorICAgICAgICBUaGlzIHBhdGNoIGNhbGxzIEdy
YXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZSgpIHdoZW4gdGhlIGNvbnRlbnRzIG9mIHRo
ZQorICAgICAgICBpbWFnZSBpcyBhY3R1YWxseSBjaGFuZ2VkLgorICAgICAgICBUZXhtYXAgY2hl
Y2tzIHRoZSBwb2ludGVyIHRvIHRoZSBpbWFnZSwgbm90IG5hdGl2ZUltYWdlUHRyLCBzbyBUZXht
YXAgY3VycmVudGx5CisgICAgICAgIGRyYXdzIG9ubHkgdGhlIGZpcnN0IGZyYW1lIG9mIEdJRiBh
bmltYXRpb25zLiBUaGlzIHBhdGNoIG1ha2VzIFRleG1hcCBkcmF3IEdJRgorICAgICAgICBhbmlt
YXRpb25zLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtIGV4aXN0aW5nIGltYWdlIHRlc3RzIGNv
dmVyIHRoZXNlIGNhc2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhp
Y3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29u
dGVudHNUb0ltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ci5oOgorICAgICAgICAoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjp1cGRhdGVJbWFnZUNvbnRlbnRzKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmg6CisgICAgICAgIChSZW5kZXJMYXllckJhY2tpbmcpOgorCisy
MDEyLTA4LTAxICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisg
ICAgICAgIFJlbmFtZSBjcmVhdGVGcmFtZUF0SW5kZXggdG8gcmVxdWVzdEZyYW1lQXRJbmRleC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNDQzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSWYgSW1hZ2VT
b3VyY2UgaGFzIEltYWdlU291cmNlT2JzZXJ2ZXIsIHRoaXMgbWV0aG9kIHNlbmRzIHRoZSByZXN1
bHQgdmlhCisgICAgICAgIGRpZERlY29kZUZyYW1lQXRJbmRleCgpLiBPdGhlcndpc2UsIHRoaXMg
bWV0aG9kIHJldHVybnMgdGhlIHJlc3VsdC4KKyAgICAgICAgZS5nLiBHcmFwaGljc0NvbnRleHQz
RAorCisgICAgICAgIFdoZW4gaW1wbGVtZW50aW5nIHBhcmFsbGVsIGltYWdlIGRlY29kZXJzLCB3
ZSB3aWxsIHNlbmRzIHRoZSBOYXRpdmVJbWFnZVB0ciB2aWEKKyAgICAgICAgZGlkRGVjb2RlRnJh
bWVBdGFJbmRleCgpIGFzeW5jaHJvbm91c2x5LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtIGV4
aXN0aW5nIGltYWdlIHRlc3RzIGNvdmVyIHRoZXNlIGNhc2VzLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpj
YWNoZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmRpZERlY29kZUZyYW1lQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKEJpdG1hcEltYWdlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNv
dXJjZTo6cmVxdWVzdEZyYW1lQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAoSW1hZ2VTb3VyY2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlT2JzZXJ2ZXIuaDoKKyAg
ICAgICAgKEltYWdlU291cmNlT2JzZXJ2ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHQzRENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dDNEQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OnJlcXVlc3RGcmFtZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0ltYWdlT3BlblZHLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0lt
YWdlV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToK
KworMjAxMi0wOC0wNCAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4K
KworICAgICAgICBSZW5hbWUgdHdvIG1ldGhvZHMgb2YgQml0bWFwSW1hZ2UgaW4gb3JkZXIgdG8g
aW1wbHkgY2F1c2VzaW5nIGRlY29kaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTAzNzUKKworICAgICAgICBUaGVyZSBhcmUgdGhyZWUgbWV0aG9k
cyB3aGljaCBjYW4gdHJpZ2dlciBpbWFnZSBkZWNvZGluZy4KKyAgICAgICAgQml0bWFwSW1hZ2U6
OmZyYW1lQXRJbmRleCgpCisgICAgICAgIEJpdG1hcEltYWdlOjpmcmFtZUlzQ29tcGxldGVBdElu
ZGV4KCkKKyAgICAgICAgQml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KCkKKworICAg
ICAgICBmcmFtZUlzQ29tcGxldGVBdEluZGV4KCkgYW5kIGZyYW1lRHVyYXRpb25BdEluZGV4KCkg
YXJlIGNhbGxlZCBvbmx5IGZyb20KKyAgICAgICAgc3RhcnRBbmltYXRpb24oKS4gVHdvIG1ldGhv
ZHMgbWFrZSB1cyBiZSBjb25mdXNpbmcgYmVjYXVzZSBib3RoIG1ldGhvZHMgY2FuCisgICAgICAg
IHRyaWdnZXIgaW1hZ2UgZGVjb2RpbmcgYWx0aG91Z2ggdGhlIG5hbWUgb2YgYm90aCBtZXRob2Rz
IGRvIG5vdCBpbXBseSB0bworICAgICAgICB0cmlnZ2VyIGltYWdlIGRlY29kaW5nLgorICAgICAg
ICBUaGlzIHBhdGNoIHJlbmFtZXMgZnJhbWVEdXJhdGlvbkF0SW5kZXgoKSBhbmQgZnJhbWVJc0Nv
bXBsZXRlQXRJbmRleCgpIHRvCisgICAgICAgIGZyYW1lRHVyYXRpb25BdEluZGV4RGVjb2RpbmdJ
Zk5lY2Vzc2FyeSgpIGFuZAorICAgICAgICBmcmFtZUlzQ29tcGxldGVBdEluZGV4RGVjb2RpbmdJ
Zk5lY2Vzc2FyeSgpLgorCisgICAgICAgIEl0IGlzIHRoZSBwcmVwYXJhdGlvbiBwYXRjaCBmb3Ig
aW1wbGVtZW50aW5nIGFuIGFzeW5jIGltYWdlIGRlY29kZXIuCisgICAgICAgIGZyYW1lSXNDb21w
bGV0ZUF0SW5kZXgoKSBpcyBub3QgcGxhbmUgZ2V0dGVyLCBzbyBkZXZlbG9wZXJzIG5lZWQgdG8g
YmUgY2FyZWZ1bAorICAgICAgICB0byB1c2UgYm90aCBtZXRob2RzLiBPdGhlcndpc2UsIGJvdGgg
bWV0aG9kcyB0cmlnZ2VyIHN5bmMgb3IgYXN5bmMgaW1hZ2UKKyAgICAgICAgZGVjb2RpbmcgYW5k
IGl0IHdpbGwgYmUgdW5zdXNwZWN0ZWQgYmVoYXZpb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
ZnJhbWVEdXJhdGlvbkF0SW5kZXhEZWNvZGluZ0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcEltYWdlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4RGVjb2RpbmdJZk5lY2Vzc2Fy
eSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpz
dGFydEFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
aDoKKyAgICAgICAgKEJpdG1hcEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpm
cmFtZUR1cmF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZy
YW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorCisyMDEyLTA4LTAzICBBbHBoYSBMYW0gIDxoY2xhbUBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgQml0bWFwSW1hZ2U6OmN1cnJlbnRGcmFtZU9yaWVudGF0
aW9uKCkgc2hvdWxkbid0IGRlY29kZSB0aGUgY3VycmVudCBmcmFtZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA0NDMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWFkaW5nIGltYWdlIGhlYWRlcnMgaXMg
ZW5vdWdoIHRvIGRldGVybWluZSB0aGUgb3JpZW50YXRpb24uIEFsc28KKyAgICAgICAgaW1wbGVt
ZW50YXRpb24gb2YgSW1hZ2VTb3VyY2U6Om9yaWVudGF0aW9uQXRJbmRleCgpIHJldHVybnMgYSBk
ZWZhdWx0CisgICAgICAgIHZhbHVlIGFsbCB0aGUgdGltZS4gVGhlcmUgaXMgbm8gbmVlZCB0byBk
ZWNvZGUgYW4gZW50aXJlIGZyYW1lIHRvCisgICAgICAgIGRldGVybWluZSBvcmllbnRhdGlvbi4K
KworICAgICAgICBDaGFuZ2VkIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBCaXRtYXBJbWFnZSB0aGF0
IHJldHVybnMgdGhlIGNhY2hlZCB2YWx1ZQorICAgICAgICBpZiB0aGUgZnJhbWUgd2FzIHByZXZp
b3VzbHkgZGVjb2RlZCwgb3RoZXJ3aXNlIGFzayBJbWFnZVNvdXJjZSBmb3IgdGhpcworICAgICAg
ICB2YWx1ZS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoZXJlIGlzIG5vIHdlYiBwbGF0Zm9y
bSB1c2Ugb2YgdGhpcyBtZXRob2QgYXQgdGhlIG1vbWVudC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpmcmFtZU9yaWVudGF0aW9uQXRJbmRleCk6CisKKzIwMTItMDgtMDEgIEFscGhhIExhbSAgPGhj
bGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lSGFz
QWxwaGEoKSBzaG91bGRuJ3QgZGVjb2RlIHRoZSBjdXJyZW50IGZyYW1lCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDQ0MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGNhbGwgc2hvdWxk
IGRvIHRoZSBiZXN0IGVmZm9ydCB0byBkZXRlcm1pbmUgdGhlIGFscGhhIHN0YXRlLgorICAgICAg
ICBJbiB0aGlzIHBhdGNoIGFuIGltYWdlIGFsd2F5cyBoYXMgYWxwaGEgaWYgaXQgaXMgbm90IGZ1
bGx5IGRvd25sb2FkZWQuCisKKyAgICAgICAgV2hlbiB0aGUgaW1hZ2UgaXMgZmluYWxseSBkb3du
bG9hZGVkLCBpbWFnZSBkZWNvZGVyIGlzIGFza2VkIHRvIGNoZWNrIGlmCisgICAgICAgIHRoZSBp
bWFnZSBoYXMgYWxwaGEuIEluIHRoZSBjYXNlIHdoZW4gYW4gaW1hZ2UgaXMgbm90IGRlY29kZWQg
eWV0IHRoaXMKKyAgICAgICAgd2lsbCByZXR1cm4gdHJ1ZS4KKworICAgICAgICBPbmx5IHdoZW4g
YW4gaW1hZ2UgaXMgZnVsbHkgZG93bmxvYWRlZCBhbmQgZGVjb2RlZCB0aGF0IHRoZSBhbHBoYSBz
dGF0ZQorICAgICAgICBpcyBjb3JyZWN0LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgY292ZXJl
ZCBieSBleGlzdGluZyB0ZXN0cy4gUmFuIGFsbCBwaXhlbCB0ZXN0cyB3aXRoIENocm9taXVtIHBv
cnQgYW5kIHBhc3NlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRl
eCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmg6CisgICAgICAgIChJbWFnZURlY29kZXIpOgorCisyMDEyLTA4LTAxICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIEltYWdlU291cmNlT2Jz
ZXJ2ZXIgdG8gSW1hZ2VTb3VyY2UgYW5kIGltcGxlbWVudHMgYnkgQml0bWFwSW1hZ2UuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDM3NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltYWdlU291cmNlT2Jz
ZXJ2ZXIgaXMgYWRkZWQgdG8gbm90aWZ5IEJpdG1hcEltYWdlIGFuIGltYWdlIGZyYW1lIGlzCisg
ICAgICAgIHJlYWR5IHdoZW4gYXN5bmNocm9ub3VzIGltYWdlIGRlY29kaW5nIGlzIHVzZWQuCisK
KyAgICAgICAgVGhlIG9ic2VydmVyIGp1c3QgbmVlZHMgdG8ga25vdyB0aGUgaW5kZXgsIEJpdG1h
cEltYWdlIGNhbiBmZXRjaCBhbmQKKyAgICAgICAgY2FjaGUgdGhlIGZyYW1lIGJ5IGNhbGxpbmcg
Y3JlYXRlRnJhbWVBdEluZGV4KCkgYWdhaW4uCisKKyAgICAgICAgVGhlIGludGVudGlvbiBvZiB0
aGlzIGNoYW5nZSBpcyB0byBoYXZlIEltYWdlU291cmNlIGJlaW5nIHRoZSBvbmx5CisgICAgICAg
IGFzeW5jaHJvbm91cyBpbnRlcmZhY2UuIEltYWdlRGVjb2RlciBpbnRlcmZhY2Ugc2hvdWxkIHN0
YXkgc3luY2hyb25vdXMKKyAgICAgICAgdG8gbWluaW1pemUgbXVsdGlwbGUgb2YgdGhlc2UgaW50
ZXJmYWNlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFkZGluZyBhIG9ic2VydmVyIGNsYXNz
IGFuZCBub3QgYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcEltYWdlOjpkaWREZWNvZGVGcmFtZUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChCaXRtYXBJbWFnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNldFVzZUFzeW5jaHJvbm91c0RlY29kaW5nKToK
KyAgICAgICAgKEltYWdlU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZVNvdXJjZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpJbWFnZVNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlKToKKworMjAxMi0wNy0yNiAgQWxwaGEgTGFtICA8aGNs
YW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBtZXRob2RzIHRvIEJpdG1hcEltYWdlIHRv
IGluZGljYXRlIGFzeW5jaHJvbm91cyBpbWFnZSBkZWNvZGluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAzNzUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgQml0bWFwSW1hZ2U6OnNldFVzZUFz
eW5jaHJvbm91c0RlY29kaW5nKCkgYW5kCisgICAgICAgIEJpdG1hcEltYWdlOjp1c2VBc3luY2hy
b25vdXNEZWNvZGluZygpIHRvIGluZGljYXRlIGFzeW5jaHJvbm91cyBkZWNvZGluZworICAgICAg
ICBpcyBkZXNpcmVkLCBvciBhc3luY2hyb25vdXMgZGVjb2Rpbmcgc2hvdWxkIG5ldmVyIGJlIHVz
ZWQuCisKKyAgICAgICAgVGhlc2UgbWV0aG9kcyBhcmUgYWRkZWQgdG8gQml0bWFwSW1hZ2UgYmVj
YXVzZSBkZWNvZGluZyBpcyBtZWFuaW5nZnVsCisgICAgICAgIHRvIHRoaXMgY2xhc3MuIFVzZXIg
b2YgdGhlc2UgQVBJcyBzaG91bGQgZGV0ZWN0IHRoZSBjYXNlIG9mIEJpdG1hcEltYWdlCisgICAg
ICAgIGFuZCBjYWxsIHVzZUFzeW5jaHJvbm91c0RlY29kaW5nKCkgd2hlbiBkZXNpcmVkLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cywgYWRkaW5nIG5ldyBmbGFncyBidXQgbm90IHVzZWQuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6c2V0VXNlQXN5bmNocm9ub3VzRGVjb2RpbmcpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6dXNlQXN5bmNocm9ub3Vz
RGVjb2RpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6Cisg
ICAgICAgIChCaXRtYXBJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OnNldFVzZUFzeW5jaHJvbm91c0RlY29kaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjp1c2VBc3luY2hyb25vdXNEZWNvZGluZyk6CisgICAgICAg
IChJbWFnZVNvdXJjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3Vy
Y2VDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UpOgor
CisyMDEyLTA3LTI1ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmVtb3ZlIGNhbGxzIHRvIGZyYW1lQnVmZmVyQXRJbmRleCgpIGluIG1ldGFkYXRhIGdldHRlcnMg
Zm9yIEltYWdlU291cmNlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTAzNzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBmcmFtZUJ1ZmZlckF0SW5kZXgoKSBzaG91bGRuJ3QgYmUgY2FsbGVkIGZvciB0aGVz
ZSBtZXRhZGF0YSBnZXR0ZXJzLgorICAgICAgICBUaGV5IHNob3VsZCBiZSBhbnN3ZXJlZCBieSBk
ZWNvZGVycyBkaXJlY3RseSwgYW5kIGRlcGVuZGluZyBvbiB0aGUKKyAgICAgICAgaW1hZ2UgZm9y
bWF0IChjb2RlYykgdGhlc2UgbWV0YWRhdGEgZnVuY3Rpb25zIGNhbiBjb21wbGV0ZSB3aXRob3V0
CisgICAgICAgIGEgZnVsbCBkZWNvZGUuCisKKyAgICAgICAgRm9yIGV4YW1wbGUgZnJhbWVEdXJh
dGlvbkF0SW5kZXgoKSBpcyBvbmx5IG1lYW5pbmdmdWwgZm9yIEdJRiBhbmQKKyAgICAgICAgZ2V0
dGluZyBkdXJhdGlvbiBkb2Vzbid0IHJlcXVpcmUgYSBmdWxsIGRlY29kZWQuIFRoZSBzYW1lIGdv
ZXMgZm9yCisgICAgICAgIGZyYW1lSGFzQWxwaGFBdEluZGV4KCksIG1vc3QgaW1hZ2UgZm9ybWF0
cyBkb2Vzbid0IGhhdmUgYWxwaGEgY2hhbmVsCisgICAgICAgIGFuZCB0aHVzIHBlcmZvcm1pbmcg
YSBmdWxsIGRlY29kZSBpcyBub3QgbmVjZXNzYXJ5LgorCisgICAgICAgIFRoZSB1bHRpbWF0ZSBn
b2FsIGlzIHRvIGRvIGFzIGxpdHRsZSBmdWxsIGRlY29kZSBhcyBwb3NzaWJsZSBhbmQgc28KKyAg
ICAgICAgZ2l2aW5nIHRoZSByZXNwb25zaWJpbGl0aWVzIHRvIGluZGl2aWR1YWwgZGVjb2RlciB0
byBhbnN3ZXIgdGhlc2UKKyAgICAgICAgbWV0YWRhdGEgbWV0aG9kIGNhbGxzIGFsbG93cyBvcHRp
bWl6YXRpb24gZm9yIGVhY2ggaW1hZ2UgZm9ybWF0LgorCisgICAgICAgIEFub3RoZXIgZWZmb3J0
IG9mIHRoaXMgcGF0Y2ggaXMgdGhhdCBmcmFtZUJ1ZmZlckF0SW5kZXgoKSBpcyBjYWxsZWQKKyAg
ICAgICAgb25seSBpZiBhIGZyYW1lIGlzIHJlYWxseSBuZWVkZWQsIGZvciBleGFtcGxlIGZvciBy
ZW5kZXJpbmcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCByZWZhY3RvcmluZyBubyBjaGFuZ2Ug
aW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNB
bHBoYUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29t
cGxldGVBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaDoKKyAgICAgICAgKEltYWdlRGVjb2Rlcik6CisKKzIwMTItMDctMjUgIEFscGhhIExh
bSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZW1vdmUgY2FsbHMgdG8gZW5zdXJl
RnJhbWVJc0NhY2hlZCgpIGluIG1ldGFkYXRhIGdldHRlcnMgZm9yIEJpdG1hcEltYWdlLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAzNzUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBlbnN1cmVGcmFtZUlz
Q2FjaGVkKCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IEJpdG1hcEltYWdlOjpmcmFtZUF0SW5k
ZXgoKS4KKyAgICAgICAgVGhlc2UgbWV0YWRhdGEgZ2V0dGVycyBzaG91bGQgY2FsbCBkaXJlY3Rs
eSB0byBJbWFnZVNvdXJjZS4gRmV0Y2hpbmcKKyAgICAgICAgdGhlc2UgbWV0YWRhdGEgc2hvdWxk
bid0IHJlcXVpcmUgYSBmdWxsIGltYWdlIGRlY29kaW5nLCBJbWFnZVNvdXJjZQorICAgICAgICBh
bmQgSW1hZ2VEZWNvZGVyIHNob3VsZCBkbyB0aGUgYmVzdCBlZmZvcnQgdG8gbm90IGRlY29kZSBh
bmQgZmV0Y2gKKyAgICAgICAgdGhlc2UgaW5mb3JtYXRpb24gZnJvbSBoZWFkZXIuCisKKyAgICAg
ICAgT25lIGVmZmVjdCBvZiB0aGlzIHBhdGNoIGlzIHRoZSByZXN1bHQgb2YgdGhlc2UgbWV0YWRh
dGEgYWNjZXNzb3JzCisgICAgICAgIGFyZSBub3QgY2FjaGVkLCBpdCBzaG91bGQgYmUgdGhlIGpv
YiBvZiB0aGUgZGVjb2RlciB0byBjYWNoZSB0aGVtCisgICAgICAgIGludGVybmFsbHkuCisKKyAg
ICAgICAgT25seSB3aGVuIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgaXMgY2FsbGVkIHdv
dWxkIHRoZXNlIG1ldGFkYXRhCisgICAgICAgIGJlIGNhY2hlZC4gVGhpcyBpcyBjb3JyZWN0OiBh
ZnRlciBhIGZyYW1lIGlzIGNhY2hlZCBpbiBCaXRtYXBJbWFnZSBhbmQKKyAgICAgICAgSW1hZ2VT
b3VyY2UgaXMgY2xlYXJlZCB3ZSB3YW50IHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBmcmFtZSB3aXRo
IGFsbAorICAgICAgICB0aGUgbWV0YWRhdGEuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgcGFzc2Vk
IGxheW91dCB0ZXN0cyB3aXRob3V0IGVycm9yLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywganVz
dCByZWZhY3RvcmluZyBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZy
YW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFt
ZU9yaWVudGF0aW9uQXRJbmRleCk6CisKKzIwMTItMDctMjUgIEFscGhhIExhbSAgPGhjbGFtQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZW1vdmUgZGVzdHJveURlY29kZWREYXRhKCkgYW5kIGRl
Y29kZWRTaXplKCkgZnJvbSBJbWFnZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTkwMzc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTW92ZSBkZXN0cm95RGVjb2RlZERhdGEoKSBhbmQgZGVjb2RlZFNpemUo
KSBmcm9tIEltYWdlIHRvIEJpdG1hcEltYWdlLgorICAgICAgICBJbWFnZTo6ZGVzdHJveURlY29k
ZWREYXRhKCkgYW5kIEltYWdlOjpkZWNvZGVkU2l6ZSgpIGFyZSBub3QgdXNlZCBhbmQKKyAgICAg
ICAgbm90IGltcGxlbWVudGVkIG90aGVyIHRoYW4gaW4gQml0bWFwSW1hZ2UuCisKKyAgICAgICAg
T3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIEltYWdlIGRvIG5vdCBoYXZlIGEgY29uY2VwdCBvZiBk
ZWNvZGVkU2l6ZSgpCisgICAgICAgIGFuZCBpdCBzaG91bGQgYmUgcmVwb3J0ZWQgdGhyb3VnaCBJ
bWFnZU9ic2VydmVyOjpkZWNvZGVkU2l6ZUNoYW5nZWQoKQorICAgICAgICBhbnl3YXkuCisKKyAg
ICAgICAgSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSgpIGlzIG9ubHkgdXNlZCBpbiBDYWNoZWRJ
bWFnZSBhbmQgb25seQorICAgICAgICBpbXBsZW1lbnRlZCBpbiBCaXRtYXBJbWFnZSwgdGhpcyBz
aG91bGQgYmUgb25seSB0aHJvdWdoIGEgc3RhdGljX2Nhc3QKKyAgICAgICAgdG8gQml0bWFwSW1h
Z2UuCisKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKEJpdG1hcEltYWdlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6CisgICAgICAgIChJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZTo6ZGF0YUNoYW5nZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BERkRvY3VtZW50SW1hZ2UuaDoKKyAgICAgICAgKFBERkRvY3VtZW50SW1hZ2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5oOgorICAgICAgICAoU3RpbGxJ
bWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmds
ZUZyYW1lU2tpYS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJ
bWFnZVNpbmdsZUZyYW1lU2tpYS5oOgorICAgICAgICAoQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNr
aWEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0Uu
Y3BwOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5oOgorICAgICAgICAoU1ZHSW1h
Z2UpOgorCisyMDEyLTA4LTAzICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAu
bmV0PgorCisgICAgICAgIFNoYXJlZEJ1ZmZlcjo6Y29weSgpIGNhbiBjYXVzZSBzZWdtZW50YXRp
b24gZmF1bHQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05MzA3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEludGVybmFsIHJldmlldyBieSBKYWUgSHl1biBQYXJrLgorCisgICAgICAgIEFmdGVyIFNoYXJl
ZEJ1ZmZlcjo6Y29weSgpLCBTaGFyZWRCdWZmZXI6OmFwcGVuZCgpIG9mdGVuIGNhdXNlcyBzZWdt
ZW50YXRpb24gZmF1bHQsCisgICAgICAgIGJlY2F1c2UgY29weSgpIGNhbGxzIGNsb25lLT5tX2J1
ZmZlci5hcHBlbmQobV9zZWdtZW50c1tpXSwgc2VnbWVudFNpemUpIGV2ZW4gaWYKKyAgICAgICAg
J2knIGlzIHRoZSBsYXN0IGluZGV4LiBUaGUgZGF0YSBzaXplIG9mIG1fc2VnbWVudHMubGFzdCgp
IGlzIG9mdGVuIGxlc3MgdGhhbgorICAgICAgICBzZWdtZW50U2l6ZS4gU28sIGluIHRoZSBjbG9u
ZWQgaW5zdGFuY2UgbV9zaXplIDwgKG1fYnVmZmVyLnNpemUoKSArIFNVTShtX3NlZ21lbnRzW2ld
LnNpemUoKSkpLgorICAgICAgICBUaGlzIHBhdGNoIGFwcGVuZHMgdGhlIGV4YWN0IHNpemUgb2Yg
dGhlIGxhc3Qgc2VnbWVudCBpbnN0ZWFkIG9mIHNlZ21lbnRTaXplLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyAtIG5vIG5ldyB0ZXN0YWJsZSBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6
Y29weSk6CisKIDIwMTItMDgtMDMgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBWOFByb3h5OjpyZXRyaWV2ZSgqKSBsZWFkcyB0byByZWFsbHkgb2JmdXNjYXRlZCBj
b2RlIGFuZCBzaG91bGQgYmUgcmVtb3ZlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5k
ZXggNWQ4NDNlOS4uYjQzZjU4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0z
MjM5LDYgKzMyMzksMTIgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Rhc2hBcnJheS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9FeHRlbnNpb25zM0QuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0
aXZlSW1hZ2VQdHIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxs
ZWxJbWFnZURlY29kZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
YXJhbGxlbEltYWdlRGVjb2Rlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1JldGFpbmVkTW9kZUJpdG1hcEltYWdlLmNwcCBcCisJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRp
ZXMuaCBcCkBAIC0zNDA3LDYgKzM0MTMsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uaCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZU9ic2VydmVyLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ludFBvaW50SGFzaC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbnRSZWN0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
IGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA2YjdlYTM3Li45ZmU3OWI2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKQEAgLTk3MiwxMCArOTcyLDEyIEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwIFwKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlci5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1BhdGguY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVHJhdmVy
c2FsU3RhdGUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcCBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmV0
YWluZWRNb2RlQml0bWFwSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVk
UmVjdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NlZ21lbnRlZEZvbnREYXRhLmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgXApAQCAtMjA5MywxNiArMjA5
NSwyMSBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmggXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlU291cmNlLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNl
T2JzZXJ2ZXIuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UG9pbnRIYXNoLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0lu
dFJlY3QuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaCBcCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
UGFyYWxsZWxJbWFnZURlY29kZXIuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJ
bWFnZURlY29kZXJPYnNlcnZlci5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmggXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5oIFwKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9QYXR0ZXJuLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtTGF5
ZXIuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmggXAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1JldGFpbmVkTW9kZUJpdG1hcEltYWdlLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1JvdW5kZWRSZWN0LmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTmF0aXZlSW1hZ2VRdC5oIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCAzMTliMmFkLi4zODY0MDNmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBA
IC0zODksNiArMzg5LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9i
c2VydmVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRp
b24uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2VPYnNlcnZlci5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludEhhc2guaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvSW50UmVjdC5oJywKQEAgLTM1MzYsMTEgKzM1MzcsMTcgQEAKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllclByaXZhdGUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
TmF0aXZlSW1hZ2VQdHIuaCcgLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1BhcmFs
bGVsSW1hZ2VEZWNvZGVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvUGFy
YWxsZWxJbWFnZURlY29kZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvUGFy
YWxsZWxJbWFnZURlY29kZXJPYnNlcnZlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9QYXRoLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZl
cnNhbFN0YXRlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZl
cnNhbFN0YXRlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5jcHAnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1JldGFpbmVkTW9kZUJpdG1hcEltYWdlLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvU2VnbWVudGVkRm9udERhdGEuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9TZWdtZW50ZWRGb250RGF0YS5oJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggZTE3OTRiYS4uYzc4NmRj
MCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAg
LTI5NTA2LDYgKzI5NTA2LDEwIEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xJbWFnZVNvdXJjZU9ic2VydmVy
LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xJbnRQb2ludC5oIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpAQCAt
Mjk1MzQsNiArMjk1MzgsMTAgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXE5hdGl2ZUltYWdlUHRyLmgiCisJ
CQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xQYXRoLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KQEAgLTI5NTQyLDYg
KzI5NTUwLDE4IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xQYXJhbGxlbEltYWdlRGVjb2Rlci5jcHAiCisJ
CQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxncmFwaGljc1xQYXJhbGxlbEltYWdlRGVjb2Rlci5oIgorCQkJCQk+CisJCQkJPC9GaWxl
PgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcUGFy
YWxsZWxJbWFnZURlY29kZXJPYnNlcnZlci5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxG
aWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcUGF0aFRyYXZlcnNh
bFN0YXRlLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KQEAgLTI5NTcwLDYgKzI5NTkwLDE0IEBA
CiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5jcHAiCisJCQkJCT4KKwkJ
CQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1xSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJ
CTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcUm91bmRlZFJl
Y3QuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDcyZmIyNDUuLmRhM2JjNWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTE0MzUsNiArMTQzNSw5IEBACiAJCTRCMzA0M0NEMEFFMDM3M0IwMEE4MjY0NyAvKiBFZGl0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCMzA0M0NC
MEFFMDM3M0IwMEE4MjY0NyAvKiBFZGl0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk0QjM0ODA5MzBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VT
b3VyY2VDR01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRCMzQ4MDkxMEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHTWFjLm1tICovOyB9
OwogCQk0QjM0ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDRy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEIzNDgwOTIwRUVGNTBENDAw
QUMxQjQxIC8qIEltYWdlU291cmNlQ0cuaCAqLzsgfTsKKwkJNkIzNDgwOTQwRUVGNTBENDAwQUMx
QjQxIC8qIE5hdGl2ZUltYWdlUHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2VQdHIu
aCAqLzsgfTsKKwkJNUIzNDgwOTMwRUVGNTBENDAwQUMxQjQxIC8qIFJldGFpbmVkTW9kZUJpdG1h
cEltYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVCMzQ4MDkxMEVFRjUwRDQwMEFDMUI0MSAvKiBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5jcHAg
Ki87IH07CisJCTVCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBSZXRhaW5lZE1vZGVCaXRtYXBJ
bWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUIz
NDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlLmggKi87IH07
CiAJCTRCNkZBNkY0MEMzOUU0OEMwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCNkZBNkYyMEMzOUU0OEMwMDA4
NzAxMSAvKiBTbWFydFJlcGxhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk0QjZGQTZGNTBDMzlFNDhDMDAwODcwMTEgLyogU21hcnRSZXBsYWNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCNkZB
NkYzMEMzOUU0OEMwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2UuY3BwICovOyB9OwogCQk0QjZGQTZG
NzBDMzlFNEExMDAwODcwMTEgLyogU21hcnRSZXBsYWNlQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEI2RkE2RjYwQzM5RTRBMTAwMDg3MDExIC8q
IFNtYXJ0UmVwbGFjZUNGLmNwcCAqLzsgfTsKQEAgLTQ4MjEsNiArNDgyNCw3IEBACiAJCUIyNzUz
NTZGMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0MTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2Uu
Y3BwICovOyB9OwogCQlCMjc1MzU3MDBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTQyMEIwNTM4MTQw
MDJDRTY0RiAvKiBJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUIyNzUzNTcxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI3NTM1NDMwQjA1
MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQjI3NTM1NzEwQjA1MzgxNDAwMkNFNjRFIC8qIEltYWdl
U291cmNlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEIyNzUzNTQzMEIwNTM4MTQwMDJDRTY0RSAvKiBJbWFnZVNvdXJjZU9ic2VydmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjI3NTM1
NzIwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0NDBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9p
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlC
Mjc1MzU3MzBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0NTBCMDUzODE0MDAyQ0U2NEYgLyog
SW50UmVjdC5jcHAgKi87IH07CiAJCUIyNzUzNTc0MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRSZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzU0
NjBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04NTYxLDYgKzg1NjUsOSBAQAogCQk0QjMwNDNDQjBB
RTAzNzNCMDBBODI2NDcgLyogRWRpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFZGl0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEIzNDgwOTEwRUVG
NTBENDAwQUMxQjQxIC8qIEltYWdlU291cmNlQ0dNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBJbWFnZVNvdXJjZUNHTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDRy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVNvdXJjZUNHLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRp
dmVJbWFnZVB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXRpdmVJbWFn
ZVB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QjM0ODA5MTBFRUY1MEQ0MDBB
QzFCNDEgLyogUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogUmV0YWlu
ZWRNb2RlQml0bWFwSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmV0
YWluZWRNb2RlQml0bWFwSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEI2
RkE2RjIwQzM5RTQ4QzAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTbWFydFJlcGxhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNEI2RkE2RjMwQzM5RTQ4QzAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbWFydFJlcGxhY2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0QjZGQTZGNjBDMzlFNEExMDAwODcwMTEgLyogU21hcnRS
ZXBsYWNlQ0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU21hcnRS
ZXBsYWNlQ0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIwNDksNiArMTIw
NTYsNyBAQAogCQlCMjc1MzU0MTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDIwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMjc1MzU0MzBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlU291cmNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUIyNzUzNTQzMEIwNTM4MTQwMDJDRTY0RSAvKiBJbWFnZVNvdXJj
ZU9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVNvdXJj
ZU9ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTQ0MEIwNTM4
MTQwMDJDRTY0RiAvKiBJbnRQb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW50UG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1NDUwQjA1
MzgxNDAwMkNFNjRGIC8qIEludFJlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEludFJlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1
MzU0NjBCMDUzODE0MDAyQ0U2NEYgLyogSW50UmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW50UmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk2
NTIsMTAgKzE5NjYwLDEzIEBACiAJCQkJQjI3NTM1MzIwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBv
aW50Q0cuY3BwICovLAogCQkJCUIyNzUzNTMzMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRSZWN0Q0cu
Y3BwICovLAogCQkJCUIyNzUzNTM0MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXplQ0cuY3BwICov
LAorCQkJCTZCMzQ4MDkyMEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZVB0ci5oICovLAog
CQkJCUIyNzUzNTM1MEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoQ0cuY3BwICovLAogCQkJCUE4MEEz
OEZEMEU1MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJCUIyNzUzNTM2MEIw
NTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlCMjc1MzUzNzBC
MDUzODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCTVCMzQ4MDkxMEVF
RjUwRDQwMEFDMUI0MSAvKiBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5jcHAgKi8sCisJCQkJNUIz
NDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlLmggKi8sCiAJ
CQkJQjI3NTM1MkEwQjA1MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3Bw
ICovLAogCQkJKTsKIAkJCXBhdGggPSBjZzsKQEAgLTE5ODAxLDYgKzE5ODEyLDcgQEAKIAkJCQlB
ODc0OEQ2NjEyQ0MzNzYzMDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5oICovLAogCQkJCTQ5
MjkxRTRBMTM0MTcyQzgwMEU3NTNERSAvKiBJbWFnZVJlbmRlcmluZ01vZGUuaCAqLywKIAkJCQlC
Mjc1MzU0MzBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2UuaCAqLywKKwkJCQlCMjc1MzU0
MzBCMDUzODE0MDAyQ0U2NEUgLyogSW1hZ2VTb3VyY2VPYnNlcnZlci5oICovLAogCQkJCUIyNzUz
NTQ0MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRQb2ludC5oICovLAogCQkJCUU0NjJBNEEwMTEzRTcx
QkUwMDRBNDIyMCAvKiBJbnRQb2ludEhhc2guaCAqLywKIAkJCQlCMjc1MzU0NTBCMDUzODE0MDAy
Q0U2NEYgLyogSW50UmVjdC5jcHAgKi8sCkBAIC0yMzU1OSw2ICsyMzU3MSw3IEBACiAJCQkJMkQ1
QTU5MzExNTI1MjVEMDAwMzZFRTUxIC8qIEltYWdlT3JpZW50YXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTQ5MjkxRTRCMTM0MTcyQzgwMEU3NTNERSAvKiBJbWFnZVJlbmRlcmluZ01vZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyNzUzNTcxMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZVNvdXJj
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjI3NTM1NzEwQjA1MzgxNDAwMkNFNjRFIC8qIEltYWdl
U291cmNlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTRCMzQ4MDk0MEVFRjUwRDQwMEFD
MUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTZGRTExODBFNkUx
REE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCURC
MjNDMkNDMEE1MDhEMjkwMDI0ODlFQiAvKiBJbmRlbnRPdXRkZW50Q29tbWFuZC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yNDMwMSw2ICsyNDMxNCw3IEBACiAJCQkJQzZGMDhGQkQxNDMwRkU4RjAwNjg1
ODQ5IC8qIE11dGF0aW9uUmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODE4NzIyMzA5NzdE
M0MwMDA1ODI2RDkgLyogTmFtZWROb2RlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODE4NzIx
RTA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk2
QjM0ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyogTmF0aXZlSW1hZ2VQdHIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUxMEI5QjZDMEI3NDc1OTkwMDNFRDg5MCAvKiBOYXRpdmVYUGF0aE5TUmVzb2x2ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzQ0NGMDI3MEFGNkM1MjkwMDAxOEU4OSAvKiBOYXZpZ2F0
aW9uQWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzlGNDNENDEwNzVFNDRBMDAwMEY4M0Ig
LyogTmF2aWdhdGlvblNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDYzMyw2ICsyNDY0
Nyw3IEBACiAJCQkJN0VFNjg0NkYxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlUmVxdWVzdENG
TmV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3RUU2ODQ3MDEyRDI2RTM4MDBFNzk0MTUgLyogUmVz
b3VyY2VSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0Qzc2N0YwQ0U5MjNBMTAwN0VG
M0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1QjM0ODA5
NDBFRUY1MEQ0MDBBQzFCNDEgLyogUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZEMzE2MEE1MTJCMDI2RjcwMEMxQTM1OSAvKiBSZXZlcmIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZEMzE2MEE3MTJCMDI2RjcwMEMxQTM1OSAvKiBSZXZlcmJBY2N1bXVsYXRpb25C
dWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MEE5MTJCMDI2RjcwMEMxQTM1OSAvKiBS
ZXZlcmJDb252b2x2ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjc4MjksNiArMjc4NDQsNyBAQAog
CQkJCTUxNEM3NjdFMENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3RUU2ODQ3MTEyRDI2RTM4MDBFNzk0MTUgLyogUmVzb3VyY2VS
ZXNwb25zZUNGTmV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNEM3NjU1MENFOTIzNEYwMDdF
RjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNUIzNDgw
OTMwRUVGNTBENDAwQUMxQjQxIC8qIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUZEMzE2MEE0MTJCMDI2RjcwMEMxQTM1OSAvKiBSZXZlcmIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkQzMTYwQTYxMkIwMjZGNzAwQzFBMzU5IC8qIFJldmVyYkFjY3VtdWxh
dGlvbkJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDMxNjBBODEyQjAyNkY3MDBDMUEz
NTkgLyogUmV2ZXJiQ29udm9sdmVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAKaW5kZXggMzEzNDc1Yy4uY2MxYzJhMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCkBAIC00MDMsOCAr
NDAzLDggQEAgdm9pZCBDYWNoZWRJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKCkKICAgICAgICAg
c2V0RGVjb2RlZFNpemUoMCk7CiAgICAgICAgIGlmICghTWVtb3J5Q2FjaGU6OnNob3VsZE1ha2VS
ZXNvdXJjZVB1cmdlYWJsZU9uRXZpY3Rpb24oKSkKICAgICAgICAgICAgIG1ha2VQdXJnZWFibGUo
dHJ1ZSk7Ci0gICAgfSBlbHNlIGlmIChtX2ltYWdlICYmICFlcnJvck9jY3VycmVkKCkpCi0gICAg
ICAgIG1faW1hZ2UtPmRlc3Ryb3lEZWNvZGVkRGF0YSgpOworICAgIH0gZWxzZSBpZiAobV9pbWFn
ZSAmJiBtX2ltYWdlLT5pc0JpdG1hcEltYWdlKCkgJiYgIWVycm9yT2NjdXJyZWQoKSkKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8Qml0bWFwSW1hZ2UqPihtX2ltYWdlLmdldCgpKS0+ZGVzdHJveURlY29k
ZWREYXRhKCk7CiB9CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmRlY29kZWRTaXplQ2hhbmdlZChjb25z
dCBJbWFnZSogaW1hZ2UsIGludCBkZWx0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuY3BwCmluZGV4IDliOGQ1MDMuLjA0ZDEyOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2hhcmVkQnVmZmVyLmNwcApAQCAtMjEzLDggKzIxMywxNSBAQCBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjb3B5KCkgY29uc3QKICAgICBjbG9uZS0+bV9zaXplID0g
bV9zaXplOwogICAgIGNsb25lLT5tX2J1ZmZlci5yZXNlcnZlQ2FwYWNpdHkobV9zaXplKTsKICAg
ICBjbG9uZS0+bV9idWZmZXIuYXBwZW5kKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgp
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zZWdtZW50cy5zaXplKCk7ICsraSkK
LSAgICAgICAgY2xvbmUtPm1fYnVmZmVyLmFwcGVuZChtX3NlZ21lbnRzW2ldLCBzZWdtZW50U2l6
ZSk7CisgICAgaWYgKCFtX3NlZ21lbnRzLmlzRW1wdHkoKSkgeworICAgICAgICB1bnNpZ25lZCBz
ZWNvbmRUb0xhc3QgPSBtX3NlZ21lbnRzLnNpemUoKSAtIDE7CisgICAgICAgIEFTU0VSVChzZWNv
bmRUb0xhc3QgPiBtX3NlZ21lbnRzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzZWNvbmRUb0xhc3Q7ICsraSkKKyAgICAgICAgICAgIGNsb25lLT5tX2J1ZmZlci5h
cHBlbmQobV9zZWdtZW50c1tpXSwgc2VnbWVudFNpemUpOworCisgICAgICAgIHVuc2lnbmVkIHBv
c2l0aW9uSW5TZWdtZW50ID0gb2Zmc2V0SW5TZWdtZW50KG1fc2l6ZSAtIG1fYnVmZmVyLnNpemUo
KSk7CisgICAgICAgIGNsb25lLT5tX2J1ZmZlci5hcHBlbmQobV9zZWdtZW50cy5sYXN0KCksIHBv
c2l0aW9uSW5TZWdtZW50KTsKKyAgICB9CiAgICAgcmV0dXJuIGNsb25lOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5kZXggNDU0
NjBmOC4uYmEzZWQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4K
KyNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NSw2ICs0Niw3IEBAIHN0YXRpYyBpbnQgZnJh
bWVCeXRlcyhjb25zdCBJbnRTaXplJiBmcmFtZVNpemUpCiAKIEJpdG1hcEltYWdlOjpCaXRtYXBJ
bWFnZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQorICAg
ICwgbV9zb3VyY2UodGhpcykKICAgICAsIG1fY3VycmVudEZyYW1lKDApCiAgICAgLCBtX2ZyYW1l
cygwKQogICAgICwgbV9mcmFtZVRpbWVyKDApCkBAIC02Myw2ICs2NSw3IEBAIEJpdG1hcEltYWdl
OjpCaXRtYXBJbWFnZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICAsIG1fc2l6ZUF2YWls
YWJsZShmYWxzZSkKICAgICAsIG1faGFzVW5pZm9ybUZyYW1lU2l6ZSh0cnVlKQogICAgICwgbV9o
YXZlRnJhbWVDb3VudChmYWxzZSkKKyAgICAsIG1faXNDYWNoaW5nRnJhbWUoZmFsc2UpCiB7CiB9
CiAKQEAgLTEyOCwxMyArMTMxLDM5IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lNZXRhZGF0
YUFuZE5vdGlmeShpbnQgZnJhbWVzQ2xlYXJlZCkKIAogdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVG
cmFtZShzaXplX3QgaW5kZXgpCiB7CisgICAgaWYgKG1faXNDYWNoaW5nRnJhbWUpCisgICAgICAg
IHJldHVybjsKKworICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiByZWVudHJhbmN5UHJvdGVjdG9y
KG1faXNDYWNoaW5nRnJhbWUsIHRydWUpOworCiAgICAgc2l6ZV90IG51bUZyYW1lcyA9IGZyYW1l
Q291bnQoKTsKLSAgICBBU1NFUlQobV9kZWNvZGVkU2l6ZSA9PSAwIHx8IG51bUZyYW1lcyA+IDEp
OwotICAgIAogICAgIGlmIChtX2ZyYW1lcy5zaXplKCkgPCBudW1GcmFtZXMpCiAgICAgICAgIG1f
ZnJhbWVzLmdyb3cobnVtRnJhbWVzKTsKIAotICAgIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lID0g
bV9zb3VyY2UuY3JlYXRlRnJhbWVBdEluZGV4KGluZGV4KTsKKyAgICBtX3NvdXJjZS5yZXF1ZXN0
RnJhbWVBdEluZGV4KGluZGV4LCByZXRhaW5lZE1vZGVSZW5kZXJpbmcoKSk7Cit9CisKK2Jvb2wg
Qml0bWFwSW1hZ2U6OnJldGFpbmVkTW9kZVJlbmRlcmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcmV0YWluZWRNb2RlSW1hZ2UuZ2V0KCkgJiYgbV9yZXRhaW5lZE1vZGVJbWFnZS0+cmV0YWlu
ZWRNb2RlUmVuZGVyaW5nKCk7Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmRpZERlY29kZUZyYW1l
QXRJbmRleChzaXplX3QgaW5kZXgsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlLCBib29sIHJl
dGFpbmVkLCBib29sIHBhcmFsbGVsRGVjb2RlckNhbmNlbGVkKQoreworICAgIC8vIEl0IGlzIHBv
c3NpYmxlIHRvIGNhbGwgY2FjaGVGcmFtZSBpbmRpcmVjdGx5IGluIHRoaXMgbWV0aG9kLgorICAg
IFRlbXBvcmFyeUNoYW5nZTxib29sPiByZWVudHJhbmN5UHJvdGVjdG9yKG1faXNDYWNoaW5nRnJh
bWUsIHRydWUpOworCisgICAgLy8gbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUgbXVzdCBiZSBjbGVh
cmVkIGJlZm9yZSBpdCBpcyByZXBsYWNlZCB3aXRoIG5ldyBkZWNvZGVkIGZyYW1lLgorICAgIC8v
IElmIHdlIGZvcmdldCB0byBjbGVhciBtX2ZyYW1lLCB0aGUgb2xkIG1fZnJhbWUgbGVha3MuCisg
ICAgLy8gU2VlIEJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCBmb3IgZXhwbGFuYXRpb24gd2h5IHRo
ZSBkZWNvZGVkIGZyYW1lIG11c3QgYmUgcmVtb3ZlZCBoZXJlLgorICAgIGludCBmcmFtZXNDbGVh
cmVkID0gMDsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLm1fZnJhbWUpCisgICAgICAgIGZyYW1l
c0NsZWFyZWQgKz0gKG1fZnJhbWVzW2luZGV4XS5jbGVhcih0cnVlKSA/IDEgOiAwKTsKKyAgICBk
ZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZnJhbWVzQ2xlYXJlZCk7CisKKyAgICBtX2ZyYW1lc1tp
bmRleF0ubV9mcmFtZSA9IG5hdGl2ZUltYWdlOworCisgICAgc2l6ZV90IG51bUZyYW1lcyA9IGZy
YW1lQ291bnQoKTsKICAgICBpZiAobnVtRnJhbWVzID09IDEgJiYgbV9mcmFtZXNbaW5kZXhdLm1f
ZnJhbWUpCiAgICAgICAgIGNoZWNrRm9yU29saWRDb2xvcigpOwogCkBAIC0xNTUsOCArMTg0LDEy
IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4KQogICAgICAgICAv
LyB0byBkZXRlcm1pbmUgaW1hZ2UgcHJvcGVydGllcy4KICAgICAgICAgZGVsdGFCeXRlcyAtPSBt
X2RlY29kZWRQcm9wZXJ0aWVzU2l6ZTsKICAgICAgICAgbV9kZWNvZGVkUHJvcGVydGllc1NpemUg
PSAwOwotICAgICAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBpZiAoaW1hZ2VPYnNl
cnZlcigpKSB7CiAgICAgICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRlY29kZWRTaXplQ2hhbmdl
ZCh0aGlzLCBkZWx0YUJ5dGVzKTsKKworICAgICAgICAgICAgaWYgKChtX2ZyYW1lc1tpbmRleF0u
bV9pc0NvbXBsZXRlICYmIHJldGFpbmVkKSB8fCBwYXJhbGxlbERlY29kZXJDYW5jZWxlZCkKKyAg
ICAgICAgICAgICAgICBpbWFnZU9ic2VydmVyKCktPmNoYW5nZWRJblJlY3QodGhpcywgSW50UmVj
dChJbnRQb2ludCgpLCBzaXplKCkpKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMjQxLDgg
KzI3NCwxNCBAQCBib29sIEJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNl
aXZlZCkKICAgICAgICAgLy8gTk9URTogRG9uJ3QgY2FsbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4
KCkgaGVyZSwgdGhhdCB3aWxsIHRyeSB0bwogICAgICAgICAvLyBkZWNvZGUgYW55IHVuY2FjaGVk
IChpLmUuIG5ldmVyLWRlY29kZWQgb3IKICAgICAgICAgLy8gY2xlYXJlZC1vbi1hLXByZXZpb3Vz
LXBhc3MpIGZyYW1lcyEKLSAgICAgICAgaWYgKG1fZnJhbWVzW2ldLm1faGF2ZU1ldGFkYXRhICYm
ICFtX2ZyYW1lc1tpXS5tX2lzQ29tcGxldGUpCisgICAgICAgIC8vIE5PVEU6IERvbid0IGNsZWFy
IHRoZSBjdXJyZW50IGZyYW1lLCBiZWNhdXNlIHRoZSBmcmFtZSBtaWdodCBoYXZlIGJlZW4gZGVj
b2RlZAorICAgICAgICAvLyBpbiByZXRhaW5lZCBtb2RlIGFuZCBSZW5kZXJJbWFnZSBoYXNuJ3Qg
cmVuZGVyIHRoaXMgZGVjb2RlZCBpbWFnZSB5ZXQuCisgICAgICAgIC8vIElmIHRoZSBjdXJyZW50
IGZyYW1lIGlzIHJlbW92ZWQgaGVyZSwgdGhlIGltYWdlIGVsZW1lbnQgd2lsbCBiZSByZW5kZXJl
ZCBhcyB3aGl0ZSBib3guCisgICAgICAgIC8vIFRoZSBjdXJyZW50IGZyYW1lIHdpbGwgYmUgcmVt
b3ZlZCBsYXRlciB3aGVuIHJldGFpbmVkIG1vZGUgZGVjb2RpbmcgaXMgZmluaXNoZWQuCisgICAg
ICAgIGlmIChtX2ZyYW1lc1tpXS5tX2ZyYW1lICYmICFtX2ZyYW1lc1tpXS5tX2lzQ29tcGxldGUg
JiYgbV9jdXJyZW50RnJhbWUgIT0gaSkgeworICAgICAgICAgICAgQVNTRVJUKG1fZnJhbWVzW2ld
Lm1faGF2ZU1ldGFkYXRhKTsKICAgICAgICAgICAgIGZyYW1lc0NsZWFyZWQgKz0gKG1fZnJhbWVz
W2ldLmNsZWFyKHRydWUpID8gMSA6IDApOworICAgICAgICB9CiAgICAgfQogICAgIGRlc3Ryb3lN
ZXRhZGF0YUFuZE5vdGlmeShmcmFtZXNDbGVhcmVkKTsKICAgICAKQEAgLTI4OSw4ICszMjgsMTIg
QEAgYm9vbCBCaXRtYXBJbWFnZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgpCiAg
ICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1fZnJh
bWUpCisgICAgLy8gbV9mcmFtZSBjYW4gZXhpc3Qgd2hlbiBtX2lzQ29tcGxldGUgaXMgZmFsc2Us
IHNvIHdlIG5lZWQgdG8gY2FjaGUgYSBuZXcgZnJhbWUgZXZlbiBpZiBtX2ZyYW1lIGV4aXN0cy4K
KyAgICAvLyBTZWUgQml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkIGZvciBleHBsYW5hdGlvbi4KKyAg
ICBib29sIG5lZWRUb0NhY2hlID0gaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1l
c1tpbmRleF0ubV9mcmFtZSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1faXNDb21wbGV0ZTsKKyAgICBp
ZiAobmVlZFRvQ2FjaGUpCiAgICAgICAgIGNhY2hlRnJhbWUoaW5kZXgpOworCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTMwMywxNiArMzQ2LDE0IEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1hcElt
YWdlOjpmcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogCiBib29sIEJpdG1hcEltYWdlOjpmcmFt
ZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICBpZiAoIWVuc3VyZUZyYW1l
SXNDYWNoZWQoaW5kZXgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5tX2lzQ29tcGxldGU7CisgICAgaWYgKGluZGV4IDwgbV9mcmFtZXMuc2l6ZSgp
ICYmIG1fZnJhbWVzW2luZGV4XS5tX2hhdmVNZXRhZGF0YSkKKyAgICAgICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5tX2lzQ29tcGxldGU7CisgICAgcmV0dXJuIG1fc291cmNlLmZyYW1lSXNDb21w
bGV0ZUF0SW5kZXgoaW5kZXgpOwogfQogCi1mbG9hdCBCaXRtYXBJbWFnZTo6ZnJhbWVEdXJhdGlv
bkF0SW5kZXgoc2l6ZV90IGluZGV4KQorYm9vbCBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lSXND
b21wbGV0ZSgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2R1cmF0aW9uOworICAg
IHJldHVybiBmcmFtZUlzQ29tcGxldGVBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKIH0KIAogTmF0
aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKQEAg
LTMyMiwxMSArMzYzLDkgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCkKIAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBoYUF0SW5k
ZXgoc2l6ZV90IGluZGV4KQogewotICAgIC8vIFdoZW4gYSBmcmFtZSBoYXMgbm90IGZpbmlzaGVk
IGRlY29kaW5nLCBhbHdheXMgbWFyayBpdCBhcyBoYXZpbmcgYWxwaGEuCi0gICAgLy8gU2VlIElt
YWdlU291cmNlOjpmcmFtZWhhc0FscGhhQXRJbmRleCBmb3IgZXhwbGFuYXRpb24gb2Ygd2h5IGlu
Y29tcGxldGUgaW1hZ2VzIGNsYWltIHRvIGhhdmUgYWxwaGEuCi0gICAgaWYgKCFlbnN1cmVGcmFt
ZUlzQ2FjaGVkKGluZGV4KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5tX2hhc0FscGhhOworICAgIGlmIChpbmRleCA8IG1fZnJhbWVzLnNpemUoKSAm
JiBtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCisgICAgICAgIHJldHVybiBtX2ZyYW1l
c1tpbmRleF0ubV9oYXNBbHBoYTsKKyAgICByZXR1cm4gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0
SW5kZXgoaW5kZXgpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVIYXNBbHBo
YSgpCkBAIC0zNDEsOSArMzgwLDI3IEBAIEltYWdlT3JpZW50YXRpb24gQml0bWFwSW1hZ2U6OmN1
cnJlbnRGcmFtZU9yaWVudGF0aW9uKCkKIAogSW1hZ2VPcmllbnRhdGlvbiBCaXRtYXBJbWFnZTo6
ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogeworICAgIGlmIChpbmRleCA8
IG1fZnJhbWVzLnNpemUoKSAmJiBtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCisgICAg
ICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9vcmllbnRhdGlvbjsKKyAgICByZXR1cm4gbV9z
b3VyY2Uub3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsKK30KKworYm9vbCBCaXRtYXBJbWFnZTo6
ZnJhbWVJc0NvbXBsZXRlQXRJbmRleERlY29kaW5nSWZOZWNlc3Nhcnkoc2l6ZV90IGluZGV4KQor
ewogICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCkpCi0gICAgICAgIHJldHVybiBE
ZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKLSAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1fb3Jp
ZW50YXRpb247CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZnJhbWVJc0NvbXBs
ZXRlQXRJbmRleChpbmRleCk7Cit9CisKK2Zsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9u
QXRJbmRleERlY29kaW5nSWZOZWNlc3Nhcnkoc2l6ZV90IGluZGV4KQoreworICAgIGlmICghZW5z
dXJlRnJhbWVJc0NhY2hlZChpbmRleCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChpbmRl
eCA8IG1fZnJhbWVzLnNpemUoKSAmJiBtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCisg
ICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKKyAgICBpZiAocmVwZXRp
dGlvbkNvdW50KGZhbHNlKSA9PSBjQW5pbWF0aW9uTm9uZSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIG1fc291cmNlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKIH0KIAogI2lm
ICFBU1NFUlRfRElTQUJMRUQKQEAgLTM1Myw4ICs0MTAsNiBAQCBib29sIEJpdG1hcEltYWdlOjpu
b3RTb2xpZENvbG9yKCkKIH0KICNlbmRpZgogCi0KLQogaW50IEJpdG1hcEltYWdlOjpyZXBldGl0
aW9uQ291bnQoYm9vbCBpbWFnZUtub3duVG9CZUNvbXBsZXRlKQogewogICAgIGlmICgobV9yZXBl
dGl0aW9uQ291bnRTdGF0dXMgPT0gVW5rbm93bikgfHwgKChtX3JlcGV0aXRpb25Db3VudFN0YXR1
cyA9PSBVbmNlcnRhaW4pICYmIGltYWdlS25vd25Ub0JlQ29tcGxldGUpKSB7CkBAIC0zODYsNyAr
NDQxLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6c3RhcnRBbmltYXRpb24oYm9vbCBjYXRjaFVwSWZO
ZWNlc3NhcnkpCiAKICAgICAvLyBEb24ndCBhZHZhbmNlIHRoZSBhbmltYXRpb24gdG8gYW4gaW5j
b21wbGV0ZSBmcmFtZS4KICAgICBzaXplX3QgbmV4dEZyYW1lID0gKG1fY3VycmVudEZyYW1lICsg
MSkgJSBmcmFtZUNvdW50KCk7Ci0gICAgaWYgKCFtX2FsbERhdGFSZWNlaXZlZCAmJiAhZnJhbWVJ
c0NvbXBsZXRlQXRJbmRleChuZXh0RnJhbWUpKQorICAgIGlmICghbV9hbGxEYXRhUmVjZWl2ZWQg
JiYgIWZyYW1lSXNDb21wbGV0ZUF0SW5kZXhEZWNvZGluZ0lmTmVjZXNzYXJ5KG5leHRGcmFtZSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIERvbid0IGFkdmFuY2UgcGFzdCB0aGUgbGFzdCBm
cmFtZSBpZiB3ZSBoYXZlbid0IGRlY29kZWQgdGhlIHdob2xlIGltYWdlCkBAIC0zOTksNyArNDU0
LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6c3RhcnRBbmltYXRpb24oYm9vbCBjYXRjaFVwSWZOZWNl
c3NhcnkpCiAgICAgLy8gRGV0ZXJtaW5lIHRpbWUgZm9yIG5leHQgZnJhbWUgdG8gc3RhcnQuICBC
eSBpZ25vcmluZyBwYWludCBhbmQgdGltZXIgbGFnCiAgICAgLy8gaW4gdGhpcyBjYWxjdWxhdGlv
biwgd2UgbWFrZSB0aGUgYW5pbWF0aW9uIGFwcGVhciB0byBydW4gYXQgaXRzIGRlc2lyZWQKICAg
ICAvLyByYXRlIHJlZ2FyZGxlc3Mgb2YgaG93IGZhc3QgaXQncyBiZWluZyByZXBhaW50ZWQuCi0g
ICAgY29uc3QgZG91YmxlIGN1cnJlbnREdXJhdGlvbiA9IGZyYW1lRHVyYXRpb25BdEluZGV4KG1f
Y3VycmVudEZyYW1lKTsKKyAgICBjb25zdCBkb3VibGUgY3VycmVudER1cmF0aW9uID0gZnJhbWVE
dXJhdGlvbkF0SW5kZXhEZWNvZGluZ0lmTmVjZXNzYXJ5KG1fY3VycmVudEZyYW1lKTsKICAgICBt
X2Rlc2lyZWRGcmFtZVN0YXJ0VGltZSArPSBjdXJyZW50RHVyYXRpb247CiAKICAgICAvLyBXaGVu
IGFuIGFuaW1hdGVkIGltYWdlIGlzIG1vcmUgdGhhbiBmaXZlIG1pbnV0ZXMgb3V0IG9mIGRhdGUs
IHRoZQpAQCAtNDMxLDkgKzQ4Niw5IEBAIHZvaWQgQml0bWFwSW1hZ2U6OnN0YXJ0QW5pbWF0aW9u
KGJvb2wgY2F0Y2hVcElmTmVjZXNzYXJ5KQogICAgICAgICAvLyBTZWUgaWYgd2UndmUgYWxzbyBw
YXNzZWQgdGhlIHRpbWUgZm9yIGZyYW1lcyBhZnRlciB0aGF0IHRvIHN0YXJ0LCBpbgogICAgICAg
ICAvLyBjYXNlIHdlIG5lZWQgdG8gc2tpcCBzb21lIGZyYW1lcyBlbnRpcmVseS4gIFJlbWVtYmVy
IG5vdCB0byBhZHZhbmNlCiAgICAgICAgIC8vIHRvIGFuIGluY29tcGxldGUgZnJhbWUuCi0gICAg
ICAgIGZvciAoc2l6ZV90IGZyYW1lQWZ0ZXJOZXh0ID0gKG5leHRGcmFtZSArIDEpICUgZnJhbWVD
b3VudCgpOyBmcmFtZUlzQ29tcGxldGVBdEluZGV4KGZyYW1lQWZ0ZXJOZXh0KTsgZnJhbWVBZnRl
ck5leHQgPSAobmV4dEZyYW1lICsgMSkgJSBmcmFtZUNvdW50KCkpIHsKKyAgICAgICAgZm9yIChz
aXplX3QgZnJhbWVBZnRlck5leHQgPSAobmV4dEZyYW1lICsgMSkgJSBmcmFtZUNvdW50KCk7IGZy
YW1lSXNDb21wbGV0ZUF0SW5kZXhEZWNvZGluZ0lmTmVjZXNzYXJ5KGZyYW1lQWZ0ZXJOZXh0KTsg
ZnJhbWVBZnRlck5leHQgPSAobmV4dEZyYW1lICsgMSkgJSBmcmFtZUNvdW50KCkpIHsKICAgICAg
ICAgICAgIC8vIFNob3VsZCB3ZSBza2lwIHRoZSBuZXh0IGZyYW1lPwotICAgICAgICAgICAgZG91
YmxlIGZyYW1lQWZ0ZXJOZXh0U3RhcnRUaW1lID0gbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUgKyBm
cmFtZUR1cmF0aW9uQXRJbmRleChuZXh0RnJhbWUpOworICAgICAgICAgICAgZG91YmxlIGZyYW1l
QWZ0ZXJOZXh0U3RhcnRUaW1lID0gbV9kZXNpcmVkRnJhbWVTdGFydFRpbWUgKyBmcmFtZUR1cmF0
aW9uQXRJbmRleERlY29kaW5nSWZOZWNlc3NhcnkobmV4dEZyYW1lKTsKICAgICAgICAgICAgIGlm
ICh0aW1lIDwgZnJhbWVBZnRlck5leHRTdGFydFRpbWUpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmlu
ZGV4IGY1YmZlYjEuLjhiZWZiNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtMzEsNyArMzEsOSBAQAogI2luY2x1ZGUgIkltYWdlLmgi
CiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5j
bHVkZSAiSW1hZ2VTb3VyY2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNs
dWRlICJSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5oIgogCiAjaWYgUExBVEZPUk0oTUFDKQogI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTczLDcgKzc1LDcgQEAgcHVibGljOgogICAgICAg
ICAsIG1fZHVyYXRpb24oMCkKICAgICAgICAgLCBtX2hhdmVNZXRhZGF0YShmYWxzZSkKICAgICAg
ICAgLCBtX2lzQ29tcGxldGUoZmFsc2UpCi0gICAgICAgICwgbV9oYXNBbHBoYSh0cnVlKSAKKyAg
ICAgICAgLCBtX2hhc0FscGhhKHRydWUpCiAgICAgewogICAgIH0KIApAQCAtOTgsMTEgKzEwMCwx
MyBAQCBwdWJsaWM6CiAvLyBCaXRtYXBJbWFnZSBDbGFzcwogLy8gPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1jbGFzcyBCaXRtYXBJbWFnZSA6IHB1
YmxpYyBJbWFnZSB7CitjbGFzcyBCaXRtYXBJbWFnZSA6IHB1YmxpYyBJbWFnZSwgcHVibGljIElt
YWdlU291cmNlT2JzZXJ2ZXIgeworICAgIGZyaWVuZCBjbGFzcyBSZXRhaW5lZE1vZGVCaXRtYXBJ
bWFnZTsKICAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7CiAgICAgZnJpZW5kIGNsYXNz
IENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0b3JHZW5l
cmF0ZWRJbWFnZTsKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OworICAgIGZyaWVu
ZCBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZSogdG9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZShJbWFn
ZSopOwogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1hcEltYWdlPiBjcmVhdGUo
TmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyID0gMCkK
ICAgICB7CkBAIC0xMzIsNyArMTM2LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc3Rv
cEFuaW1hdGlvbigpOwogICAgIHZpcnR1YWwgdm9pZCByZXNldEFuaW1hdGlvbigpOwogCi0gICAg
dmlydHVhbCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0OworICAgIC8vIENhbGxlZCB0byBp
bnZhbGlkYXRlIGNhY2hlZCBkYXRhLiAgV2hlbiB8ZGVzdHJveUFsbHwgaXMgdHJ1ZSwgd2Ugd2lw
ZSBvdXQKKyAgICAvLyB0aGUgZW50aXJlIGZyYW1lIGJ1ZmZlciBjYWNoZSBhbmQgdGVsbCB0aGUg
aW1hZ2Ugc291cmNlIHRvIGRlc3Ryb3kKKyAgICAvLyBldmVyeXRoaW5nOyB0aGlzIGlzIHVzZWQg
d2hlbiBlLmcuIHdlIHdhbnQgdG8gZnJlZSBzb21lIHJvb20gaW4gdGhlIGltYWdlCisgICAgLy8g
Y2FjaGUuICBJZiB8ZGVzdHJveUFsbHwgaXMgZmFsc2UsIHdlIG9ubHkgZGVsZXRlIGZyYW1lcyB1
cCB0byB0aGUgY3VycmVudAorICAgIC8vIG9uZTsgdGhpcyBpcyB1c2VkIHdoaWxlIGFuaW1hdGlu
ZyBsYXJnZSBpbWFnZXMgdG8ga2VlcCBtZW1vcnkgZm9vdHByaW50CisgICAgLy8gbG93IHdpdGhv
dXQgcmVkZWNvZGluZyB0aGUgd2hvbGUgaW1hZ2Ugb24gZXZlcnkgZnJhbWUuCisgICAgdm9pZCBk
ZXN0cm95RGVjb2RlZERhdGEoYm9vbCBkZXN0cm95QWxsID0gdHJ1ZSk7CiAKICNpZiBQTEFURk9S
TShNQUMpCiAgICAgLy8gQWNjZXNzb3JzIGZvciBuYXRpdmUgaW1hZ2UgZm9ybWF0cy4KQEAgLTE3
MSwxNCArMTgxLDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChz
aXplX3QpOwogICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50RnJhbWVIYXNBbHBoYSgpOworICAgIGJv
b2wgY3VycmVudEZyYW1lSXNDb21wbGV0ZSgpOwogCiAgICAgSW1hZ2VPcmllbnRhdGlvbiBjdXJy
ZW50RnJhbWVPcmllbnRhdGlvbigpOwotICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRh
dGlvbkF0SW5kZXgoc2l6ZV90KTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXJ0dWFs
IGJvb2wgbm90U29saWRDb2xvcigpOwogI2VuZGlmCiAKKyAgICAvLyBJbWFnZVNvdXJjZU9ic2Vy
dmVyCisgICAgdmlydHVhbCB2b2lkIGRpZERlY29kZUZyYW1lQXRJbmRleChzaXplX3QsIE5hdGl2
ZUltYWdlUHRyID0gMCwgYm9vbCByZXRhaW5lZCA9IGZhbHNlLCBib29sIHBhcmFsbGVsRGVjb2Rl
ckNhbmNlbGVkID0gZmFsc2UpOworCiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlU2l6ZSgpIGNv
bnN0OwogCkBAIC0yMTEsMjIgKzIyNCwxOCBAQCBwcm90ZWN0ZWQ6CiAgICAgc2l6ZV90IGN1cnJl
bnRGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEZyYW1lOyB9CiAgICAgc2l6ZV90IGZy
YW1lQ291bnQoKTsKICAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUF0SW5kZXgoc2l6ZV90KTsKKyAg
ICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb25BdEluZGV4KHNpemVfdCk7CiAgICAg
Ym9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCk7Ci0gICAgZmxvYXQgZnJhbWVEdXJh
dGlvbkF0SW5kZXgoc2l6ZV90KTsKKyAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXhEZWNv
ZGluZ0lmTmVjZXNzYXJ5KHNpemVfdCk7CisgICAgZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5kZXhE
ZWNvZGluZ0lmTmVjZXNzYXJ5KHNpemVfdCk7CisKKyAgICB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgp
IGNvbnN0OwogCiAgICAgLy8gRGVjb2RlcyBhbmQgY2FjaGVzIGEgZnJhbWUuIE5ldmVyIGFjY2Vz
c2VkIGV4Y2VwdCBpbnRlcm5hbGx5LgogICAgIHZvaWQgY2FjaGVGcmFtZShzaXplX3QgaW5kZXgp
OwogICAgIC8vIENhbGxlZCBiZWZvcmUgYWNjZXNzaW5nIG1fZnJhbWVzW2luZGV4XS4gUmV0dXJu
cyBmYWxzZSBvbiBpbmRleCBvdXQgb2YgYm91bmRzLgogICAgIGJvb2wgZW5zdXJlRnJhbWVJc0Nh
Y2hlZChzaXplX3QgaW5kZXgpOwogCi0gICAgLy8gQ2FsbGVkIHRvIGludmFsaWRhdGUgY2FjaGVk
IGRhdGEuICBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAotICAgIC8vIHRo
ZSBlbnRpcmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2UgdG8g
ZGVzdHJveQotICAgIC8vIGV2ZXJ5dGhpbmc7IHRoaXMgaXMgdXNlZCB3aGVuIGUuZy4gd2Ugd2Fu
dCB0byBmcmVlIHNvbWUgcm9vbSBpbiB0aGUgaW1hZ2UKLSAgICAvLyBjYWNoZS4gIElmIHxkZXN0
cm95QWxsfCBpcyBmYWxzZSwgd2Ugb25seSBkZWxldGUgZnJhbWVzIHVwIHRvIHRoZSBjdXJyZW50
Ci0gICAgLy8gb25lOyB0aGlzIGlzIHVzZWQgd2hpbGUgYW5pbWF0aW5nIGxhcmdlIGltYWdlcyB0
byBrZWVwIG1lbW9yeSBmb290cHJpbnQKLSAgICAvLyBsb3cgd2l0aG91dCByZWRlY29kaW5nIHRo
ZSB3aG9sZSBpbWFnZSBvbiBldmVyeSBmcmFtZS4KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURl
Y29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCA9IHRydWUpOwotCiAgICAgLy8gSWYgdGhlIGltYWdl
IGlzIGxhcmdlIGVub3VnaCwgY2FsbHMgZGVzdHJveURlY29kZWREYXRhKCkgYW5kIHBhc3Nlcwog
ICAgIC8vIHxkZXN0cm95QWxsfCBhbG9uZy4KICAgICB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YUlm
TmVjZXNzYXJ5KGJvb2wgZGVzdHJveUFsbCk7CkBAIC0yNjksNiArMjc4LDggQEAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgYm9vbCBtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKTsKICAgICB2aXJ0dWFs
IENvbG9yIHNvbGlkQ29sb3IoKSBjb25zdDsKICAgICAKKyAgICBib29sIHJldGFpbmVkTW9kZVJl
bmRlcmluZygpIGNvbnN0OworCiAgICAgSW1hZ2VTb3VyY2UgbV9zb3VyY2U7CiAgICAgbXV0YWJs
ZSBJbnRTaXplIG1fc2l6ZTsgLy8gVGhlIHNpemUgdG8gdXNlIGZvciB0aGUgb3ZlcmFsbCBpbWFn
ZSAod2lsbCBqdXN0IGJlIHRoZSBzaXplIG9mIHRoZSBmaXJzdCBpbWFnZSkuCiAgICAgbXV0YWJs
ZSBJbnRTaXplIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbjsKQEAgLTI5Myw2ICszMDQsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6
ZTsgLy8gVGhlIHNpemUgb2YgZGF0YSBkZWNvZGVkIGJ5IHRoZSBzb3VyY2UgdG8gZGV0ZXJtaW5l
IGltYWdlIHByb3BlcnRpZXMgKGUuZy4gc2l6ZSwgZnJhbWUgY291bnQsIGV0YykuCiAgICAgc2l6
ZV90IG1fZnJhbWVDb3VudDsKIAorICAgIFJlZlB0cjxSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZT4g
bV9yZXRhaW5lZE1vZGVJbWFnZTsKKwogICAgIGJvb2wgbV9pc1NvbGlkQ29sb3IgOiAxOyAvLyBX
aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYSAxeDEgc29saWQgaW1hZ2UuCiAgICAgYm9vbCBtX2NoZWNr
ZWRGb3JTb2xpZENvbG9yIDogMTsgLy8gV2hldGhlciB3ZSd2ZSBjaGVja2VkIHRoZSBmcmFtZSBm
b3Igc29saWQgY29sb3IuCiAKQEAgLTMwMyw2ICszMTYsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9v
bCBtX3NpemVBdmFpbGFibGUgOiAxOyAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBjYW4gb2J0YWluIHRo
ZSBzaXplIG9mIHRoZSBmaXJzdCBpbWFnZSBmcmFtZSB5ZXQgZnJvbSBJbWFnZUlPLgogICAgIG11
dGFibGUgYm9vbCBtX2hhc1VuaWZvcm1GcmFtZVNpemUgOiAxOwogICAgIG11dGFibGUgYm9vbCBt
X2hhdmVGcmFtZUNvdW50IDogMTsKKworICAgIGJvb2wgbV9pc0NhY2hpbmdGcmFtZTsKIH07CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRl
ZEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFn
ZS5oCmluZGV4IGJlYzM0M2MuLjYxNjMxODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaApAQCAtNDYsMTAgKzQ2LDYgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
IAotICAgIC8vIEFzc3VtZSB0aGF0IGdlbmVyYXRlZCBjb250ZW50IGhhcyBubyBkZWNvZGVkIGRh
dGEgd2UgbmVlZCB0byB3b3JyeSBhYm91dAotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2Rl
ZERhdGEoYm9vbCAvKmRlc3Ryb3lBbGwqLyA9IHRydWUpIHsgfQotICAgIHZpcnR1YWwgdW5zaWdu
ZWQgZGVjb2RlZFNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlLmgKaW5kZXggYmE5NTNmNS4uZTI3MGQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oCkBAIC0xMDYsMTMgKzEwNiw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0SG90U3BvdChJbnRQb2ludCYpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAK
ICAgICBib29sIHNldERhdGEoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGJvb2wgYWxs
RGF0YVJlY2VpdmVkKTsKLSAgICB2aXJ0dWFsIGJvb2wgZGF0YUNoYW5nZWQoYm9vbCAvKmFsbERh
dGFSZWNlaXZlZCovKSB7IHJldHVybiBmYWxzZTsgfQogICAgIAogICAgIHZpcnR1YWwgU3RyaW5n
IGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0gLy8gbnVsbCBz
dHJpbmcgaWYgdW5rbm93bgogCi0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShi
b29sIGRlc3Ryb3lBbGwgPSB0cnVlKSA9IDA7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBkZWNvZGVk
U2l6ZSgpIGNvbnN0ID0gMDsKLQogICAgIFNoYXJlZEJ1ZmZlciogZGF0YSgpIHsgcmV0dXJuIG1f
ZGF0YS5nZXQoKTsgfQogCiAgICAgLy8gQW5pbWF0aW9uIGJlZ2lucyB3aGVuZXZlciBzb21lb25l
IGRyYXdzIHRoZSBpbWFnZSwgc28gc3RhcnRBbmltYXRpb24oKSBpcyBub3Qgbm9ybWFsbHkgY2Fs
bGVkLgpAQCAtMTc2LDYgKzE3Miw3IEBAIHByb3RlY3RlZDoKICNpZiBQTEFURk9STShXSU4pCiAg
ICAgdmlydHVhbCB2b2lkIGRyYXdGcmFtZU1hdGNoaW5nU291cmNlU2l6ZShHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcikgeyB9CiAjZW5kaWYK
KyAgICB2aXJ0dWFsIGJvb2wgZGF0YUNoYW5nZWQoYm9vbCAvKmFsbERhdGFSZWNlaXZlZCovKSB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0pOwogICAgIHZvaWQg
ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29u
c3QgRmxvYXRQb2ludCYgc3JjUG9pbnQsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKaW5kZXggNzVlZDVhMS4u
NzQwOWNmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmNwcApAQCAtMzIsMTYgKzMyLDMwIEBACiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgi
CiAKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2VP
YnNlcnZlci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFyYWxs
ZWxJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlIDx3dGYvTnVtYmVyT2ZDb3Jlcy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25zdCBpbnQgc19yZXNvbHV0aW9uVGhyZXNob2xk
Rm9yUGFyYWxsZWwgPSAzMDAgKiAzMDA7CisKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dO
X1NBTVBMSU5HKQogdW5zaWduZWQgSW1hZ2VTb3VyY2U6OnNfbWF4UGl4ZWxzUGVyRGVjb2RlZElt
YWdlID0gMTAyNCAqIDEwMjQ7CiAjZW5kaWYKIAogSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKElt
YWdlU291cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogICAgIDogbV9k
ZWNvZGVyKDApCisgICAgLCBtX29ic2VydmVyKDApCisgICAgLCBtX2FscGhhT3B0aW9uKGFscGhh
T3B0aW9uKQorICAgICwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbihnYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbikKK3sKK30KKworSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKEltYWdlU291
cmNlT2JzZXJ2ZXIqIG9ic2VydmVyLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRp
b24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbikKKyAgICA6IG1fZGVjb2RlcigwKQorICAgICwgbV9vYnNlcnZlcihvYnNl
cnZlcikKICAgICAsIG1fYWxwaGFPcHRpb24oYWxwaGFPcHRpb24pCiAgICAgLCBtX2dhbW1hQW5k
Q29sb3JQcm9maWxlT3B0aW9uKGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogewpAQCAtNjAs
NiArNzQsMTAgQEAgdm9pZCBJbWFnZVNvdXJjZTo6Y2xlYXIoYm9vbCBkZXN0cm95QWxsLCBzaXpl
X3QgY2xlYXJCZWZvcmVGcmFtZSwgU2hhcmVkQnVmZmVyKgogICAgICAgICByZXR1cm47CiAgICAg
fQogCisgICAgLy8gV2UgbXVzdCByZW1vdmUgbV9wYXJhbGxlbERlY29kZXIgYmVmb3JlIG1fZGVj
b2RlciwgYmVjYXVzZSBtX3BhcmFsbGVsRGVjb2RlciByZWZlcnMgdG8gbV9kZWNvZGVyLgorICAg
IGlmIChtX3BhcmFsbGVsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgY2xlYXJQYXJhbGxlbERlY29k
ZXIoKTsKKwogICAgIGRlbGV0ZSBtX2RlY29kZXI7CiAgICAgbV9kZWNvZGVyID0gMDsKICAgICBp
ZiAoZGF0YSkKQEAgLTc3LDYgKzk1LDcgQEAgdm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShTaGFy
ZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIFRoaXMgbWV0aG9k
IHdpbGwgZXhhbWluZSB0aGUgZGF0YSBhbmQgaW5zdGFudGlhdGUgYW4gaW5zdGFuY2Ugb2YgdGhl
IGFwcHJvcHJpYXRlIGRlY29kZXIgcGx1Z2luLgogICAgIC8vIElmIGluc3VmZmljaWVudCBieXRl
cyBhcmUgYXZhaWxhYmxlIHRvIGRldGVybWluZSB0aGUgaW1hZ2UgdHlwZSwgbm8gZGVjb2RlciBw
bHVnaW4gd2lsbCBiZQogICAgIC8vIG1hZGUuCisKICAgICBpZiAoIW1fZGVjb2RlcikgewogICAg
ICAgICBtX2RlY29kZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNvdXJjZVB0cj4oSW1hZ2VE
ZWNvZGVyOjpjcmVhdGUoKmRhdGEsIG1fYWxwaGFPcHRpb24sIG1fZ2FtbWFBbmRDb2xvclByb2Zp
bGVPcHRpb24pKTsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQpAQCAt
MTM3LDggKzE1NiwxMDIgQEAgc2l6ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50KCkgY29uc3QK
ICAgICByZXR1cm4gbV9kZWNvZGVyID8gbV9kZWNvZGVyLT5mcmFtZUNvdW50KCkgOiAwOwogfQog
CitOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6cmVxdWVzdEZyYW1lQXRJbmRleChzaXplX3Qg
aW5kZXgsIGJvb2wgcmV0YWluZWRNb2RlUmVuZGVyaW5nKQoreworICAgIEFTU0VSVCghKHJldGFp
bmVkTW9kZVJlbmRlcmluZyAmJiBpbmRleCkpOworICAgIEFTU0VSVCghKHJldGFpbmVkTW9kZVJl
bmRlcmluZyAmJiAhbV9vYnNlcnZlcikpOworCisgICAgaWYgKCFtX2RlY29kZXIpIHsKKyAgICAg
ICAgbV9vYnNlcnZlci0+ZGlkRGVjb2RlRnJhbWVBdEluZGV4KGluZGV4KTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFyZXRhaW5lZE1vZGVSZW5kZXJpbmcgfHwgIW1fb2Jz
ZXJ2ZXIgfHwgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkpCisgICAgICAgIHJldHVybiBz
ZXJpYWxEZWNvZGUoaW5kZXgpOworCisgICAgaWYgKHNob3VsZERlY29kZVBhcmFsbGVsKCkpIHsK
KyAgICAgICAgcGFyYWxsZWxEZWNvZGUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgcmV0dXJuIHNlcmlhbERlY29kZShpbmRleCk7Cit9CisKK2Jvb2wgSW1hZ2VTb3VyY2U6OnNo
b3VsZERlY29kZVBhcmFsbGVsKCkKK3sKKyAgICBBU1NFUlQobV9kZWNvZGVyKTsKKworICAgIGlm
IChtX3BhcmFsbGVsRGVjb2Rlci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoV1RGOjpudW1iZXJPZlByb2Nlc3NvckNvcmVzKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisKKyAgICAvLyBUaGUgYmVuZWZpdCBvZiBzdXBwb3J0aW5nIElDTyBhbmQgR0lGIHNl
ZW1zIHNtYWxsIGdpdmVuIHRoZSBjb21wbGV4aXR5IHRvIGRvIGl0IGNvcnJlY3RseS4KKyAgICBB
U1NFUlQoIWZyYW1lQ291bnQoKSk7CisgICAgaWYgKGZyYW1lQ291bnQoKSAhPSAxKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWlzU2l6ZUF2YWlsYWJsZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc2l6ZSgpLmFyZWEoKSA8IHNfcmVzb2x1dGlvblRocmVz
aG9sZEZvclBhcmFsbGVsKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBJbWFnZVNvdXJjZTo6cGFyYWxsZWxEZWNvZGUoKQoreworICAgIGNyZWF0
ZVBhcmFsbGVsRGVjb2RlcklmTmVlZGVkKCk7CisgICAgbV9wYXJhbGxlbERlY29kZXItPmRlY29k
ZSgpOworfQorCit2b2lkIEltYWdlU291cmNlOjpkaWREZWNvZGUoTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2VQdHIpCit7CisgICAgQVNTRVJUKG1fb2JzZXJ2ZXIpOworICAgIG1fb2JzZXJ2ZXIt
PmRpZERlY29kZUZyYW1lQXRJbmRleCgwLCBuYXRpdmVJbWFnZVB0ciwgdHJ1ZSk7CisKKyAgICBp
ZiAoZnJhbWVJc0NvbXBsZXRlQXRJbmRleCgwKSkKKyAgICAgICAgY2xlYXJQYXJhbGxlbERlY29k
ZXIoKTsKK30KKwordm9pZCBJbWFnZVNvdXJjZTo6Y3JlYXRlUGFyYWxsZWxEZWNvZGVySWZOZWVk
ZWQoKQoreworICAgIGlmICghbV9wYXJhbGxlbERlY29kZXIpCisgICAgICAgIG1fcGFyYWxsZWxE
ZWNvZGVyID0gYWRvcHRSZWYobmV3IFBhcmFsbGVsSW1hZ2VEZWNvZGVyKHRoaXMsIG1fZGVjb2Rl
ciwgbV9hbHBoYU9wdGlvbiwgbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikpOworfQorCit2
b2lkIEltYWdlU291cmNlOjpjbGVhclBhcmFsbGVsRGVjb2RlcigpCit7CisgICAgQVNTRVJUKG1f
b2JzZXJ2ZXIpOworICAgIEFTU0VSVChtX3BhcmFsbGVsRGVjb2Rlci5nZXQoKSk7CisgICAgbV9w
YXJhbGxlbERlY29kZXItPmludmFsaWRhdGUoKTsKKyAgICBtX3BhcmFsbGVsRGVjb2Rlci5jbGVh
cigpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6c2VyaWFsRGVjb2RlKHNpemVf
dCBpbmRleCkKK3sKKyAgICBib29sIHBhcmFsbGVsRGVjb2RlckNhbmNlbGVkID0gZmFsc2U7Cisg
ICAgLy8gUmVuZGVySW1hZ2UgYW5kIENhbnZhc0VsZW1lbnQgY2FuIHNoYXJlIHRoZSBzYW1lIENh
Y2hlZEltYWdlLgorICAgIGlmIChtX3BhcmFsbGVsRGVjb2Rlci5nZXQoKSkgeworICAgICAgICBB
U1NFUlQobV9vYnNlcnZlcik7CisgICAgICAgIGNsZWFyUGFyYWxsZWxEZWNvZGVyKCk7CisgICAg
ICAgIHBhcmFsbGVsRGVjb2RlckNhbmNlbGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBOYXRpdmVJ
bWFnZVB0ciBuYXRpdmVJbWFnZVB0ciA9IGNyZWF0ZUZyYW1lQXRJbmRleChpbmRleCk7CisKKyAg
ICBpZiAobV9vYnNlcnZlcikKKyAgICAgICAgbV9vYnNlcnZlci0+ZGlkRGVjb2RlRnJhbWVBdElu
ZGV4KGluZGV4LCBuYXRpdmVJbWFnZVB0ciwgZmFsc2UgLyogcmV0YWluZWRNb2RlICovLCBwYXJh
bGxlbERlY29kZXJDYW5jZWxlZCk7CisKKyAgICByZXR1cm4gbmF0aXZlSW1hZ2VQdHI7Cit9CisK
IE5hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90IGlu
ZGV4KQogeworICAgIEFTU0VSVCghbV9wYXJhbGxlbERlY29kZXIpOwogICAgIGlmICghbV9kZWNv
ZGVyKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTYxLDE1ICsyNzQsMTEgQEAgZmxvYXQgSW1h
Z2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKICAgICBpZiAoIW1f
ZGVjb2RlcikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSBt
X2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7Ci0gICAgaWYgKCFidWZmZXIgfHwg
YnVmZmVyLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KQotICAgICAgICByZXR1
cm4gMDsKLQogICAgIC8vIE1hbnkgYW5ub3lpbmcgYWRzIHNwZWNpZnkgYSAwIGR1cmF0aW9uIHRv
IG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KICAgICAvLyBXZSBm
b2xsb3cgRmlyZWZveCdzIGJlaGF2aW9yIGFuZCB1c2UgYSBkdXJhdGlvbiBvZiAxMDAgbXMgZm9y
IGFueSBmcmFtZXMgdGhhdCBzcGVjaWZ5CiAgICAgLy8gYSBkdXJhdGlvbiBvZiA8PSAxMCBtcy4g
U2VlIDxyZGFyOi8vcHJvYmxlbS83Njg5MzAwPiBhbmQgPGh0dHA6Ly93ZWJraXQub3JnL2IvMzYw
ODI+CiAgICAgLy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgY29uc3QgZmxvYXQgZHVyYXRp
b24gPSBidWZmZXItPmR1cmF0aW9uKCkgLyAxMDAwLjBmOworICAgIGNvbnN0IGZsb2F0IGR1cmF0
aW9uID0gbV9kZWNvZGVyLT5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCkgLyAxMDAwLjBmOwog
ICAgIGlmIChkdXJhdGlvbiA8IDAuMDExZikKICAgICAgICAgcmV0dXJuIDAuMTAwZjsKICAgICBy
ZXR1cm4gZHVyYXRpb247CkBAIC0xOTEsMTYgKzMwMCwxNCBAQCBib29sIEltYWdlU291cmNlOjpm
cmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgLy8gVE9ETzogUGVyaGFwcyB3
ZSBzaG91bGQgZW5zdXJlIHRoYXQgZWFjaCBpbmRpdmlkdWFsIGRlY29kZXIgcmV0dXJucyB0cnVl
CiAgICAgLy8gaW4gdGhpcyBjYXNlLgogICAgIHJldHVybiAhZnJhbWVJc0NvbXBsZXRlQXRJbmRl
eChpbmRleCkKLSAgICAgICAgfHwgbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgp
LT5oYXNBbHBoYSgpOworICAgICAgICB8fCBtX2RlY29kZXItPmZyYW1lSGFzQWxwaGFBdEluZGV4
KGluZGV4KTsKIH0KIAogYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChz
aXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKCFtX2RlY29kZXIpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdElu
ZGV4KGluZGV4KTsKLSAgICByZXR1cm4gYnVmZmVyICYmIGJ1ZmZlci0+c3RhdHVzKCkgPT0gSW1h
Z2VGcmFtZTo6RnJhbWVDb21wbGV0ZTsKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5mcmFtZUlzQ29t
cGxldGVBdEluZGV4KGluZGV4KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmgKaW5kZXggOTEzYTNlNy4uMjRkNWE4NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC0yOCw3MCAr
MjgsMzYgQEAKICNkZWZpbmUgSW1hZ2VTb3VyY2VfaAogCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRh
dGlvbi5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisjaWYgIVVTRShDRykKKyNpbmNs
dWRlICJQYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyLmgiCisjZW5kaWYKIAogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCi0jaWYgUExBVEZPUk0oV1gpCi1jbGFzcyB3eEJpdG1hcDsKLWNsYXNz
IHd4R3JhcGhpY3NCaXRtYXA7Ci0jZWxpZiBVU0UoQ0cpCisjaWYgVVNFKENHKQogdHlwZWRlZiBz
dHJ1Y3QgQ0dJbWFnZVNvdXJjZSogQ0dJbWFnZVNvdXJjZVJlZjsKLXR5cGVkZWYgc3RydWN0IENH
SW1hZ2UqIENHSW1hZ2VSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NGRGF0YSogQ0ZEYXRh
UmVmOwotI2VsaWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSA8cWdsb2JhbC5oPgotUVRfQkVHSU5f
TkFNRVNQQUNFCi1jbGFzcyBRSW1hZ2U7Ci1RVF9FTkRfTkFNRVNQQUNFCi0jZWxpZiBVU0UoQ0FJ
Uk8pCi0jaW5jbHVkZSAiTmF0aXZlSW1hZ2VDYWlyby5oIgotI2VsaWYgVVNFKFNLSUEpCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBOYXRpdmVJbWFnZVNraWE7Ci19Ci0jZWxpZiBPUyhXSU5D
RSkKLSNpbmNsdWRlICJTaGFyZWRCaXRtYXAuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEltYWdlT3JpZW50YXRpb247CitjbGFzcyBJbWFnZVNvdXJjZU9ic2VydmVy
OwogY2xhc3MgSW50UG9pbnQ7CiBjbGFzcyBJbnRTaXplOworI2lmICFVU0UoQ0cpCitjbGFzcyBQ
YXJhbGxlbEltYWdlRGVjb2RlcjsKKyNlbmRpZgogY2xhc3MgU2hhcmVkQnVmZmVyOwogCiAjaWYg
VVNFKENHKQogdHlwZWRlZiBDR0ltYWdlU291cmNlUmVmIE5hdGl2ZUltYWdlU291cmNlUHRyOwot
dHlwZWRlZiBDR0ltYWdlUmVmIE5hdGl2ZUltYWdlUHRyOwotI2VsaWYgUExBVEZPUk0oT1BFTlZH
KQotY2xhc3MgSW1hZ2VEZWNvZGVyOwotY2xhc3MgVGlsZWRJbWFnZU9wZW5WRzsKLXR5cGVkZWYg
SW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0cjsKLXR5cGVkZWYgVGlsZWRJbWFnZU9w
ZW5WRyogTmF0aXZlSW1hZ2VQdHI7CiAjZWxzZQogY2xhc3MgSW1hZ2VEZWNvZGVyOwogdHlwZWRl
ZiBJbWFnZURlY29kZXIqIE5hdGl2ZUltYWdlU291cmNlUHRyOwotI2lmIFBMQVRGT1JNKFdYKQot
I2lmIFVTRShXWEdDKQotdHlwZWRlZiB3eEdyYXBoaWNzQml0bWFwKiBOYXRpdmVJbWFnZVB0cjsK
LSNlbHNlCi10eXBlZGVmIHd4Qml0bWFwKiBOYXRpdmVJbWFnZVB0cjsKLSNlbmRpZgotI2VsaWYg
VVNFKENBSVJPKQotdHlwZWRlZiBXZWJDb3JlOjpOYXRpdmVJbWFnZUNhaXJvKiBOYXRpdmVJbWFn
ZVB0cjsKLSNlbGlmIFVTRShTS0lBKQotdHlwZWRlZiBXZWJDb3JlOjpOYXRpdmVJbWFnZVNraWEq
IE5hdGl2ZUltYWdlUHRyOwotI2VsaWYgT1MoV0lOQ0UpCi10eXBlZGVmIFJlZlB0cjxTaGFyZWRC
aXRtYXA+IE5hdGl2ZUltYWdlUHRyOwotI2VsaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLWNsYXNz
IEltYWdlRGVjb2RlcjsKLXR5cGVkZWYgSW1hZ2VEZWNvZGVyKiBOYXRpdmVJbWFnZVNvdXJjZVB0
cjsKLXR5cGVkZWYgdm9pZCogTmF0aXZlSW1hZ2VQdHI7Ci0jZWxpZiBQTEFURk9STShRVCkKLXR5
cGVkZWYgUUltYWdlKiBOYXRpdmVJbWFnZVB0cjsKLSNlbmRpZgogI2VuZGlmCiAKIC8vIFJpZ2h0
IG5vdyBHSUZzIGFyZSB0aGUgb25seSByZWNvZ25pemVkIGltYWdlIGZvcm1hdCB0aGF0IHN1cHBv
cnRzIGFuaW1hdGlvbi4KQEAgLTExMiw3ICs3OCwxMSBAQCBjb25zdCBpbnQgY0FuaW1hdGlvbkxv
b3BPbmNlID0gMDsKIGNvbnN0IGludCBjQW5pbWF0aW9uTG9vcEluZmluaXRlID0gLTE7CiBjb25z
dCBpbnQgY0FuaW1hdGlvbk5vbmUgPSAtMjsKIAotY2xhc3MgSW1hZ2VTb3VyY2UgeworY2xhc3Mg
SW1hZ2VTb3VyY2UKKyNpZiAhVVNFKENHKQorICAgIDogcHVibGljIFBhcmFsbGVsSW1hZ2VEZWNv
ZGVyT2JzZXJ2ZXIKKyNlbmRpZgorewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlU291
cmNlKTsKIHB1YmxpYzoKICAgICBlbnVtIEFscGhhT3B0aW9uIHsKQEAgLTEzMyw2ICsxMDMsNyBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIEltYWdlU291cmNlKEFscGhhT3B0aW9uIGFscGhhT3B0
aW9uID0gQWxwaGFQcmVtdWx0aXBsaWVkLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbiA9IEdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCk7Cisg
ICAgSW1hZ2VTb3VyY2UoSW1hZ2VTb3VyY2VPYnNlcnZlciosIEFscGhhT3B0aW9uIGFscGhhT3B0
aW9uID0gQWxwaGFQcmVtdWx0aXBsaWVkLCBHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbiBnYW1t
YUFuZENvbG9yUHJvZmlsZU9wdGlvbiA9IEdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCk7CiAg
ICAgfkltYWdlU291cmNlKCk7CiAKICAgICAvLyBUZWxscyB0aGUgSW1hZ2VTb3VyY2UgdGhhdCB0
aGUgSW1hZ2Ugbm8gbG9uZ2VyIGNhcmVzIGFib3V0IGRlY29kZWQgZnJhbWUKQEAgLTE3OCw5ICsx
NDksMTEgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IGZyYW1lQ291bnQoKSBjb25zdDsKIAotICAg
IC8vIENhbGxlcnMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyBjbGVhcigpIHdp
dGggYSBoaWdoZXIgaW5kZXg7CisgICAgLy8gTk9URTogQ2FsbGVycyBzaG91bGQgbm90IGNhbGwg
dGhpcyBhZnRlciBjYWxsaW5nIGNsZWFyKCkgd2l0aCBhIGhpZ2hlciBpbmRleDsKICAgICAvLyBz
ZWUgY29tbWVudHMgb24gY2xlYXIoKSBhYm92ZS4KLSAgICBOYXRpdmVJbWFnZVB0ciBjcmVhdGVG
cmFtZUF0SW5kZXgoc2l6ZV90KTsKKyAgICAvLyBOT1RFOiBJZiBJbWFnZVNvdXJjZSBoYXMgSW1h
Z2VTb3VyY2VPYnNlcnZlciwgdGhpcyBtZXRob2Qgc2VuZHMgdGhlIHJlc3VsdCB2aWEgZGlkRGVj
b2RlRnJhbWVBdEluZGV4KCkuCisgICAgLy8gT3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCByZXR1cm5z
IHRoZSByZXN1bHQuIGUuZy4gR3JhcGhpY3NDb250ZXh0M0QKKyAgICBOYXRpdmVJbWFnZVB0ciBy
ZXF1ZXN0RnJhbWVBdEluZGV4KHNpemVfdCwgYm9vbCByZXRhaW5lZE1vZGVSZW5kZXJpbmcgPSBm
YWxzZSk7CiAKICAgICBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QpOwogICAgIGJv
b2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90KTsgLy8gV2hldGhlciBvciBub3QgdGhlIGZy
YW1lIGFjdHVhbGx5IHVzZWQgYW55IGFscGhhLgpAQCAtMTkyLDggKzE2NSwyNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgc2V0TWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKHVuc2lnbmVkIG1h
eFBpeGVscykgeyBzX21heFBpeGVsc1BlckRlY29kZWRJbWFnZSA9IG1heFBpeGVsczsgfQogI2Vu
ZGlmCiAKKyNpZiAhVVNFKENHKQorICAgIC8vIFBhcmFsbGVsSW1hZ2VEZWNvZGVyT2JzZXJ2ZXIK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkRGVjb2RlKE5hdGl2ZUltYWdlUHRyKTsKKyNlbmRpZgorCiBw
cml2YXRlOgorICAgIE5hdGl2ZUltYWdlUHRyIGNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3QpOwor
CisjaWYgIVVTRShDRykKKyAgICB2b2lkIGNyZWF0ZVBhcmFsbGVsRGVjb2RlcklmTmVlZGVkKCk7
CisgICAgdm9pZCBjbGVhclBhcmFsbGVsRGVjb2RlcigpOworICAgIGJvb2wgc2hvdWxkRGVjb2Rl
UGFyYWxsZWwoKTsKKyAgICB2b2lkIHBhcmFsbGVsRGVjb2RlKCk7CisgICAgTmF0aXZlSW1hZ2VQ
dHIgc2VyaWFsRGVjb2RlKHNpemVfdCk7CisKKyAgICBSZWZQdHI8UGFyYWxsZWxJbWFnZURlY29k
ZXI+IG1fcGFyYWxsZWxEZWNvZGVyOworI2VuZGlmCisKICAgICBOYXRpdmVJbWFnZVNvdXJjZVB0
ciBtX2RlY29kZXI7CisgICAgSW1hZ2VTb3VyY2VPYnNlcnZlciogbV9vYnNlcnZlcjsKKwogICAg
IEFscGhhT3B0aW9uIG1fYWxwaGFPcHRpb247CiAgICAgR2FtbWFBbmRDb2xvclByb2ZpbGVPcHRp
b24gbV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RF
Ul9ET1dOX1NBTVBMSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2VPYnNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2VPYnNlcnZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmI5MTVmNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZU9ic2VydmVyLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSW1hZ2VTb3VyY2VPYnNlcnZlcl9oCisjZGVmaW5lIEltYWdlU291
cmNlT2JzZXJ2ZXJfaAorCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBJbnRlcmZhY2UgZm9yIG5vdGlmaWNhdGlvbiBhYm91dCBjaGFuZ2Vz
IHRvIGFuIEltYWdlU291cmNlLCBpbmNsdWRpbmcgZGVjb2RpbmcuCitjbGFzcyBJbWFnZVNvdXJj
ZU9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRGVjb2RlRnJhbWVBdElu
ZGV4KHNpemVfdCwgTmF0aXZlSW1hZ2VQdHIgPSAwLCBib29sIHJldGFpbmVkID0gZmFsc2UsIGJv
b2wgcGFyYWxsZWxEZWNvZGVyQ2FuY2VsZWQgPSBmYWxzZSkgPSAwOworCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB+SW1hZ2VTb3VyY2VPYnNlcnZlcigpIHsgfQorfTsKKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdl
UHRyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMDllOGMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5o
CkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE5hdGl2ZUltYWdlUHRy
X2gKKyNkZWZpbmUgTmF0aXZlSW1hZ2VQdHJfaAorCisjaWYgUExBVEZPUk0oV1gpCitjbGFzcyB3
eEJpdG1hcDsKK2NsYXNzIHd4R3JhcGhpY3NCaXRtYXA7CisjZWxpZiBVU0UoQ0cpCit0eXBlZGVm
IHN0cnVjdCBDR0ltYWdlKiBDR0ltYWdlUmVmOworI2VsaWYgUExBVEZPUk0oUVQpCisjaW5jbHVk
ZSA8cWdsb2JhbC5oPgorUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRSW1hZ2U7CitRVF9FTkRf
TkFNRVNQQUNFCisjZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VDYWlyby5o
IgorI2VsaWYgVVNFKFNLSUEpCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBOYXRpdmVJbWFn
ZVNraWE7Cit9CisjZWxpZiBPUyhXSU5DRSkKKyNpbmNsdWRlICJTaGFyZWRCaXRtYXAuaCIKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQ0cpCit0eXBlZGVmIENHSW1h
Z2VSZWYgTmF0aXZlSW1hZ2VQdHI7CisjZWxpZiBQTEFURk9STShPUEVOVkcpCitjbGFzcyBUaWxl
ZEltYWdlT3BlblZHOwordHlwZWRlZiBUaWxlZEltYWdlT3BlblZHKiBOYXRpdmVJbWFnZVB0cjsK
KyNlbGlmIFBMQVRGT1JNKFdYKQorI2lmIFVTRShXWEdDKQordHlwZWRlZiB3eEdyYXBoaWNzQml0
bWFwKiBOYXRpdmVJbWFnZVB0cjsKKyNlbHNlCit0eXBlZGVmIHd4Qml0bWFwKiBOYXRpdmVJbWFn
ZVB0cjsKKyNlbmRpZgorI2VsaWYgVVNFKENBSVJPKQordHlwZWRlZiBXZWJDb3JlOjpOYXRpdmVJ
bWFnZUNhaXJvKiBOYXRpdmVJbWFnZVB0cjsKKyNlbGlmIFVTRShTS0lBKQordHlwZWRlZiBXZWJD
b3JlOjpOYXRpdmVJbWFnZVNraWEqIE5hdGl2ZUltYWdlUHRyOworI2VsaWYgT1MoV0lOQ0UpCit0
eXBlZGVmIFJlZlB0cjxTaGFyZWRCaXRtYXA+IE5hdGl2ZUltYWdlUHRyOworI2VsaWYgUExBVEZP
Uk0oQkxBQ0tCRVJSWSkKK3R5cGVkZWYgdm9pZCogTmF0aXZlSW1hZ2VQdHI7CisjZWxpZiBQTEFU
Rk9STShRVCkKK3R5cGVkZWYgUUltYWdlKiBOYXRpdmVJbWFnZVB0cjsKKyNlbmRpZgorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFy
YWxsZWxJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGFyYWxsZWxJbWFnZURlY29kZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmU2NDJlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlci5jcHAKQEAgLTAsMCArMSwyNjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXJhbGxlbEltYWdlRGVj
b2Rlci5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvT3du
QXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25BcnJheVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RydWN0IFBhcmFsbGVsRnJhbWVEYXRhOwordm9pZCBkaWREZWNvZGVUYXNr
Q2FsbGJhY2soUGFyYWxsZWxGcmFtZURhdGEqKTsKKworUGFyYWxsZWxJbWFnZURlY29kZXI6OlBh
cmFsbGVsSW1hZ2VEZWNvZGVyKFBhcmFsbGVsSW1hZ2VEZWNvZGVyT2JzZXJ2ZXIqIG9ic2VydmVy
LCBJbWFnZURlY29kZXIqIGRlY29kZXIsIEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9w
dGlvbiwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uKQorICAgIDogbV9vYnNlcnZlcihvYnNlcnZlcikKKyAgICAsIG1faW1h
Z2VEZWNvZGVyKDApCisgICAgLCBtX2J5dGVzT2ZEYXRhQ29uc3VtZWQoMCkKKyAgICAsIG1fYWxw
aGFPcHRpb24oYWxwaGFPcHRpb24pCisgICAgLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9u
KGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQoreworICAgIGluaXRpYWxpemUoZGVjb2Rlcik7
Cit9CisKK1BhcmFsbGVsSW1hZ2VEZWNvZGVyOjp+UGFyYWxsZWxJbWFnZURlY29kZXIoKQorewor
ICAgIEFTU0VSVCghdmFsaWQoKSk7Cit9CisKK3ZvaWQgUGFyYWxsZWxJbWFnZURlY29kZXI6Omlu
aXRpYWxpemUoSW1hZ2VEZWNvZGVyKiBkZWNvZGVyKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgQVNTRVJUKGRlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgpICYmICFkZWNvZGVy
LT5zaXplKCkuaXNFbXB0eSgpKTsKKworICAgIG1faW1hZ2VEZWNvZGVyID0gZGVjb2RlcjsKKyAg
ICBJbWFnZUZyYW1lKiBidWZmZXIgPSBtX2ltYWdlRGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4
V2l0aG91dERlY29kaW5nKDApOworICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgIG1faW1hZ2VE
ZWNvZGVyLT5lbnN1cmVGcmFtZUJ1ZmZlckF0SW5kZXgoMCk7CisgICAgICAgIGJ1ZmZlciA9IG1f
aW1hZ2VEZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXhXaXRob3V0RGVjb2RpbmcoMCk7CisgICAg
fQorICAgIGlmIChidWZmZXItPnNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIGJ1ZmZlci0+c2V0
U2l6ZShtX2ltYWdlRGVjb2Rlci0+c2l6ZSgpLndpZHRoKCksIG1faW1hZ2VEZWNvZGVyLT5zaXpl
KCkuaGVpZ2h0KCkpOworCisgICAgLy8gV2UgcGFzcyB0aGUgZmlyc3QgZW5jb2RlZCBzZWdtZW50
IHRvIHRoZSB0YXNrIHRocmVhZCBpbiBoZXJlLiBJdCBpcyBvcHRpbWl6YXRpb24gdG8gcmVkdWNl
IGEgY29weS4KKyAgICBtX2RhdGFGb3JUYXNrID0gbV9pbWFnZURlY29kZXItPmRhdGEoKS0+Y29w
eSgpOworI2lmbmRlZiBOREVCVUcKKyAgICAvLyBUaHJlYWRSZXN0cmljdGlvblZlcmlmaWVyIGRv
ZXMgbm90IGFsbG93IHR3byB0aHJlYWRzIHRvIGFjY2VzcyBvbmUgUmVmQ291bnRlZCBvYmplY3Qu
CisgICAgLy8gbV9kYXRhRm9yVGFzayBpcyB1c2VkIGJ5IGJvdGggdGhlIG1haW4gdGhyZWFkIGFu
ZCB0aGUgdGFzayB0aHJlYWQ6CisgICAgLy8gVGhlIHRhc2sgdGhyZWFkIGNyZWF0ZXMsIHVzZXMg
YW5kIHJlbW92ZXMgbV9kYXRhRm9yVGFzay4gVGhlIG1haW4gdGhyZWFkIG1heSByZW1vdmUKKyAg
ICAvLyBtX2RhdGFGb3JUYXNrIGlmIHRoZSB0YXNrIHRocmVhZCBjb3VsZCBub3QgcmVtb3ZlIG1f
ZGF0YUZvclRhc2suCisgICAgLy8KKyAgICAvLyBQYXJhbGxlbCBpbWFnZSBkZWNvZGVycyBtYW5h
Z2UgbV9kYXRhRm9yVGFzayBpbiBhIHRocmVhZC1zYWZlIHdheS4gSG93ZXZlciwKKyAgICAvLyB3
ZSBjYW4ndCB0ZWxsIHRoZSB2ZXJpZmllciB0aGF0IHdlIGFyZSBzYWZlIGJ5IHNpbXBseSBwYXNz
aW5nIGEgbXV0ZXgKKyAgICAvLyBiZWNhdXNlIGxpYmRpc3BhdGNoIGRvZXMgbm90IGV2ZW4gZ3Vh
cmFudGVlIGRlY29kZVRhc2sgaXMgY2FsbGVkIGJ5IHRoZSBzYW1lIHRocmVhZAorICAgIC8vIGVh
Y2ggdGltZS4gU28gdHVybiBvZmYgdGhlIHZlcmlmaWVyIGhlcmUuCisgICAgbV9kYXRhRm9yVGFz
ay0+dHVybk9mZlZlcmlmaWVyKCk7CisjZW5kaWYKKworICAgIG1faW1hZ2VEZWNvZGVyRm9yVGFz
ayA9IGFkb3B0UHRyKEltYWdlRGVjb2Rlcjo6Y3JlYXRlKCptX2RhdGFGb3JUYXNrLmdldCgpLCBt
X2FscGhhT3B0aW9uLCBtX2dhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKSk7CisgICAgbV9pbWFn
ZURlY29kZXJGb3JUYXNrLT5zZXREYXRhKG1fZGF0YUZvclRhc2suZ2V0KCksIG1faW1hZ2VEZWNv
ZGVyLT5pc0FsbERhdGFSZWNlaXZlZCgpKTsKKyAgICBBU1NFUlQobV9pbWFnZURlY29kZXJGb3JU
YXNrLmdldCgpKTsKKyAgICBtX2J5dGVzT2ZEYXRhQ29uc3VtZWQgPSBtX2RhdGFGb3JUYXNrLT5z
aXplKCk7CisKKyAgICAvLyBUaGlzIG11c3QgYmUgdGhlIGxhc3QgbGluZSBiZWNhdXNlIERpc3Bh
dGNoUXVldWUgZ3VhcmFudGVlcworICAgIC8vIHRoZSB2aXNpYmlsaXR5IG9mIG1lbWJlcnMgaW4g
dGhlIHRhc2sgdGhyZWFkLgorICAgIG1fZGVjb2RlUXVldWUgPSBEaXNwYXRjaFF1ZXVlOjpjcmVh
dGVTZXJpYWxRdWV1ZSgpOworICAgIC8vIEFmdGVyIHRoaXMgbGluZSwgaXQgaXMgaWxsZWdhbCBm
b3IgdGhlIG1haW4gdGhyZWFkIHRvIGFjY2VzcyBtX2ltYWdlRGVjb2RlckZvclRhc2suCisKKyAg
ICBtX2RlY29kZVF1ZXVlLT5hc3luYyhiaW5kKCZQYXJhbGxlbEltYWdlRGVjb2Rlcjo6ZGVjb2Rl
VGFzaywgdGhpcywgUGFzc093blB0cjxFbmNvZGVkRGF0YVNlZ21lbnQ+KCkpKTsKK30KKwordm9p
ZCBQYXJhbGxlbEltYWdlRGVjb2Rlcjo6aW52YWxpZGF0ZSgpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9pbWFnZURlY29kZXIpOworCisgICAgaWYgKG1fZGVj
b2RlUXVldWUuZ2V0KCkpCisgICAgICAgIG1fZGVjb2RlUXVldWUuY2xlYXIoKTsKKyAgICAvLyBU
aGUgbWFpbiB0aHJlYWQgY2FuIHVzZSBtX2ltYWdlRGVjb2RlckZvclRhc2sgYmVjYXVzZSBvdGhl
ciB0aHJlYWRzIGRvIG5vdCBhY2Nlc3MgbV9pbWFnZURlY29kZXJGb3JUYXNrIGFmdGVyIHRoaXMg
bGluZS4KKworICAgIG1fYnl0ZXNPZkRhdGFDb25zdW1lZCA9IDA7CisKKyAgICBtX2RhdGFGb3JU
YXNrLmNsZWFyKCk7CisgICAgbV9pbWFnZURlY29kZXJGb3JUYXNrLmNsZWFyKCk7CisKKyAgICBt
X2ltYWdlRGVjb2RlciA9IDA7Cit9CisKK3ZvaWQgUGFyYWxsZWxJbWFnZURlY29kZXI6OmRlY29k
ZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9pbWFnZURl
Y29kZXIpOworCisgICAgT3duUHRyPEVuY29kZWREYXRhU2VnbWVudD4gc2VnbWVudCA9IGV4dHJh
Y3RTZWdtZW50Rm9yVGFzaygpOworICAgIGlmICghc2VnbWVudC5nZXQoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fZGVjb2RlUXVldWUtPmFzeW5jKGJpbmQoJlBhcmFsbGVsSW1hZ2VEZWNvZGVy
OjpkZWNvZGVUYXNrLCB0aGlzLCBzZWdtZW50LnJlbGVhc2UoKSkpOworfQorCitQYXNzT3duUHRy
PFBhcmFsbGVsSW1hZ2VEZWNvZGVyOjpFbmNvZGVkRGF0YVNlZ21lbnQ+IFBhcmFsbGVsSW1hZ2VE
ZWNvZGVyOjpleHRyYWN0U2VnbWVudEZvclRhc2soKQoreworICAgIFNoYXJlZEJ1ZmZlciogZW5j
b2RlZERhdGEgPSBtX2ltYWdlRGVjb2Rlci0+ZGF0YSgpOworICAgIEFTU0VSVChtX2J5dGVzT2ZE
YXRhQ29uc3VtZWQgPD0gZW5jb2RlZERhdGEtPnNpemUoKSk7CisKKyAgICBpbnQgc2l6ZU9mU2Vn
bWVudCA9IGVuY29kZWREYXRhLT5zaXplKCkgLSBtX2J5dGVzT2ZEYXRhQ29uc3VtZWQ7CisgICAg
aWYgKCFzaXplT2ZTZWdtZW50KQorICAgICAgICByZXR1cm4gUGFzc093blB0cjxFbmNvZGVkRGF0
YVNlZ21lbnQ+KCk7CisKKyAgICBPd25QdHI8RW5jb2RlZERhdGFTZWdtZW50PiBzZWdtZW50KGFk
b3B0UHRyKG5ldyBFbmNvZGVkRGF0YVNlZ21lbnQoKSkpOworICAgIGNvbnN0IGNoYXIqIHNyY1B0
ciA9IGVuY29kZWREYXRhLT5kYXRhKCkgKyBtX2J5dGVzT2ZEYXRhQ29uc3VtZWQ7CisgICAgc2Vn
bWVudC0+bV9zZWdtZW50LmFwcGVuZChzcmNQdHIsIHNpemVPZlNlZ21lbnQpOworICAgIG1fYnl0
ZXNPZkRhdGFDb25zdW1lZCA9IGVuY29kZWREYXRhLT5zaXplKCk7CisKKyAgICBzZWdtZW50LT5t
X2lzQWxsRGF0YVJlY2VpdmVkID0gbV9pbWFnZURlY29kZXItPmlzQWxsRGF0YVJlY2VpdmVkKCk7
CisKKyAgICByZXR1cm4gc2VnbWVudC5yZWxlYXNlKCk7Cit9CisKK3N0cnVjdCBQYXJhbGxlbEZy
YW1lRGF0YSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFyYWxsZWxGcmFtZURhdGEpOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IFBhcmFs
bGVsRnJhbWVEYXRhKFBhc3NSZWZQdHI8UGFyYWxsZWxJbWFnZURlY29kZXI+IHBhcmFsbGVsRGVj
b2RlcikKKyAgICAgICAgOiBtX3BhcmFsbGVsRGVjb2RlcihwYXJhbGxlbERlY29kZXIpCisgICAg
ICAgICwgbV9kZWNvZGVkU2VnbWVudCgpCisgICAgeworICAgIH0KKworICAgIH5QYXJhbGxlbEZy
YW1lRGF0YSgpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxQYXJhbGxlbEltYWdlRGVjb2Rl
cj4gbV9wYXJhbGxlbERlY29kZXI7CisgICAgT3duQXJyYXlQdHI8SW1hZ2VGcmFtZTo6UGl4ZWxE
YXRhPiBtX2RlY29kZWRTZWdtZW50OworICAgIEltYWdlRnJhbWUgbV9pbWFnZUZyYW1lOworICAg
IEludFJlY3QgbV9kZWNvZGVkUmVjdDsKK307CisKK3ZvaWQgUGFyYWxsZWxJbWFnZURlY29kZXI6
OmRlY29kZVRhc2soUGFzc093blB0cjxQYXJhbGxlbEltYWdlRGVjb2Rlcjo6RW5jb2RlZERhdGFT
ZWdtZW50PiBwYXNzU2VnbWVudCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAg
ICBPd25QdHI8RW5jb2RlZERhdGFTZWdtZW50PiBzZWdtZW50ID0gcGFzc1NlZ21lbnQ7CisKKyAg
ICAvLyAxLiBTZW5kIHNlZ21lbnQgZGF0YSB0byBJbWFnZURlY29kZXIuCisgICAgaWYgKHNlZ21l
bnQuZ2V0KCkpIHsKKyAgICAgICAgbV9kYXRhRm9yVGFzay0+YXBwZW5kKHNlZ21lbnQtPm1fc2Vn
bWVudCk7CisgICAgICAgIG1faW1hZ2VEZWNvZGVyRm9yVGFzay0+c2V0RGF0YShtX2RhdGFGb3JU
YXNrLmdldCgpLCBzZWdtZW50LT5tX2lzQWxsRGF0YVJlY2VpdmVkKTsKKyAgICB9CisKKyAgICBJ
bWFnZUZyYW1lKiBvbGRCdWZmZXIgPSBtX2ltYWdlRGVjb2RlckZvclRhc2stPmZyYW1lQnVmZmVy
QXRJbmRleFdpdGhvdXREZWNvZGluZygwKTsKKyAgICBpbnQgbGFzdERlY29kZWRSb3cgPSBvbGRC
dWZmZXIgPyBvbGRCdWZmZXItPmxhc3REZWNvZGVkUm93KCkgOiAwOworCisgICAgLy8gMi4gRGVj
b2RlIGFuIGltYWdlIGluY3JlbWVudGFsbHkuCisgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gbV9p
bWFnZURlY29kZXJGb3JUYXNrLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7CisgICAgaWYgKCFidWZm
ZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB7CisgICAg
ICAgIEFTU0VSVCghbV9pbWFnZURlY29kZXJGb3JUYXNrLT5pc0FsbERhdGFSZWNlaXZlZCgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIDMuIE1ha2UgYSBQYXJhbGxlbEZyYW1l
RGF0YSBpbiBvcmRlciB0byBwYXNzIGl0IHRvIHRoZSBtYWluIHRocmVhZC4KKyAgICBQYXJhbGxl
bEZyYW1lRGF0YSogcGFyYWxsZWxGcmFtZURhdGEgPSBuZXcgUGFyYWxsZWxGcmFtZURhdGEodGhp
cyk7CisgICAgcGFyYWxsZWxGcmFtZURhdGEtPm1faW1hZ2VGcmFtZS5jb3B5V2l0aG91dEJpdG1h
cERhdGEoKmJ1ZmZlcik7CisKKyAgICBpbnQgbmV3TGFzdERlY29kZWRSb3cgPSBidWZmZXItPmxh
c3REZWNvZGVkUm93KCk7CisgICAgLy8gT25seSBpbiBCTVAsIGxhc3REZWNvZGVkUm93IGNhbiBi
ZSBiaWdnZXIgdGhhbiBuZXdMYXN0RGVjb2RlZFJvdy4KKyAgICBpbnQgbGFzdERlY29kZWRNaW5S
b3cgPSBzdGQ6Om1pbihsYXN0RGVjb2RlZFJvdywgbmV3TGFzdERlY29kZWRSb3cpOworICAgIGlu
dCBsYXN0RGVjb2RlZE1heFJvdyA9IHN0ZDo6bWF4KGxhc3REZWNvZGVkUm93LCBuZXdMYXN0RGVj
b2RlZFJvdyk7CisgICAgcGFyYWxsZWxGcmFtZURhdGEtPm1fZGVjb2RlZFJlY3QgPSBJbnRSZWN0
KDAsIGxhc3REZWNvZGVkTWluUm93LCBtX2ltYWdlRGVjb2RlckZvclRhc2stPnNpemUoKS53aWR0
aCgpLCBsYXN0RGVjb2RlZE1heFJvdyAtIGxhc3REZWNvZGVkTWluUm93ICsgMSk7CisKKyAgICAv
LyA0LiBDcmVhdGUgZGVjb2RlZCBzZWdtZW50IGRhdGEgaW4gb3JkZXIgdG8gcGFzcyBpdCB0byB0
aGUgbWFpbiB0aHJlYWQuCisgICAgLy8gICAgSWYgdGhlIHN0YXR1cyBpcyBGcmFtZUNvbXBsZXRl
LCB0aGlzIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgbWFpbiB0aHJlYWQgZ2V0cyB0aGUgbGFz
dCBkZWNvZGVkIGRhdGEgZGlyZWN0bHkgZnJvbSBtX2ltYWdlRGVjb2RlckZvclRhc2suCisgICAg
aWYgKHBhcmFsbGVsRnJhbWVEYXRhLT5tX2ltYWdlRnJhbWUuc3RhdHVzKCkgPT0gSW1hZ2VGcmFt
ZTo6RnJhbWVQYXJ0aWFsKSB7CisgICAgICAgIGludCBzZWdtZW50U2l6ZSA9IHBhcmFsbGVsRnJh
bWVEYXRhLT5tX2RlY29kZWRSZWN0LnNpemUoKS5hcmVhKCk7CisgICAgICAgIHBhcmFsbGVsRnJh
bWVEYXRhLT5tX2RlY29kZWRTZWdtZW50ID0gYWRvcHRBcnJheVB0cihuZXcgSW1hZ2VGcmFtZTo6
UGl4ZWxEYXRhW3NlZ21lbnRTaXplXSk7CisKKyAgICAgICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRh
KiBzZWdtZW50QWRkciA9IHBhcmFsbGVsRnJhbWVEYXRhLT5tX2RlY29kZWRTZWdtZW50LmdldCgp
OworICAgICAgICBtZW1jcHkoc2VnbWVudEFkZHIsIGJ1ZmZlci0+Z2V0QWRkcigwLCBsYXN0RGVj
b2RlZE1pblJvdyksIHNlZ21lbnRTaXplICogc2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSkp
OworICAgIH0KKworICAgIGNhbGxPbk1haW5UaHJlYWQoYmluZChkaWREZWNvZGVUYXNrQ2FsbGJh
Y2ssIHBhcmFsbGVsRnJhbWVEYXRhKSk7Cit9CisKK3ZvaWQgZGlkRGVjb2RlVGFza0NhbGxiYWNr
KFBhcmFsbGVsRnJhbWVEYXRhKiBwYXJhbGxlbEZyYW1lRGF0YSkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIC8vIElmIGEgY2xpZW50IGNhbGxlZCBQYXJhbGxlbEltYWdlRGVj
b2Rlcjo6Y2xlYXIoKSwgUGFyYWxsZWxJbWFnZURlY29kZXIgaXMgaW52YWxpZGF0ZWQuCisgICAg
aWYgKHBhcmFsbGVsRnJhbWVEYXRhLT5tX3BhcmFsbGVsRGVjb2Rlci0+dmFsaWQoKSkKKyAgICAg
ICAgcGFyYWxsZWxGcmFtZURhdGEtPm1fcGFyYWxsZWxEZWNvZGVyLT5kaWREZWNvZGVUYXNrKHBh
cmFsbGVsRnJhbWVEYXRhKTsKKyAgICBkZWxldGUgcGFyYWxsZWxGcmFtZURhdGE7Cit9CisKK3Zv
aWQgUGFyYWxsZWxJbWFnZURlY29kZXI6OmRpZERlY29kZVRhc2soUGFyYWxsZWxGcmFtZURhdGEq
IHBhcmFsbGVsRnJhbWVEYXRhKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
QVNTRVJUKHBhcmFsbGVsRnJhbWVEYXRhLT5tX3N0YXR1cyAhPSBJbWFnZUZyYW1lOjpGcmFtZUVt
cHR5KTsKKworICAgIGlmIChwYXJhbGxlbEZyYW1lRGF0YS0+bV9pbWFnZUZyYW1lLnN0YXR1cygp
ID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpCisgICAgICAgIGFwcGVuZERlY29kZWREYXRh
VG9JbWFnZUZyYW1lRnJvbUltYWdlRGVjb2RlcihwYXJhbGxlbEZyYW1lRGF0YSk7CisgICAgZWxz
ZQorICAgICAgICBhcHBlbmREZWNvZGVkRGF0YVRvSW1hZ2VGcmFtZUZyb21QYXJhbGxlbEZyYW1l
RGF0YShwYXJhbGxlbEZyYW1lRGF0YSk7CisKKyAgICBzeW5jSW1hZ2VGcmFtZShwYXJhbGxlbEZy
YW1lRGF0YSk7CisgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gbV9pbWFnZURlY29kZXItPmZyYW1l
QnVmZmVyQXRJbmRleFdpdGhvdXREZWNvZGluZygwKTsKKyAgICBtX29ic2VydmVyLT5kaWREZWNv
ZGUoYnVmZmVyLT5hc05ld05hdGl2ZUltYWdlKCkpOworfQorCit2b2lkIFBhcmFsbGVsSW1hZ2VE
ZWNvZGVyOjphcHBlbmREZWNvZGVkRGF0YVRvSW1hZ2VGcmFtZUZyb21JbWFnZURlY29kZXIoUGFy
YWxsZWxGcmFtZURhdGEqIHBhcmFsbGVsRnJhbWVEYXRhKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisKKyAgICBpZiAobV9kZWNvZGVRdWV1ZS5nZXQoKSkKKyAgICAgICAgbV9kZWNv
ZGVRdWV1ZS5jbGVhcigpOworICAgIC8vIFRoZSBtYWluIHRocmVhZCBjYW4gdXNlIG1faW1hZ2VE
ZWNvZGVyRm9yVGFzayBiZWNhdXNlIG90aGVyIHRocmVhZHMgZG8gbm90IGFjY2VzcyBtX2ltYWdl
RGVjb2RlckZvclRhc2sgYWZ0ZXIgdGhpcyBsaW5lLgorCisgICAgaW50IHNlZ21lbnRTaXplID0g
cGFyYWxsZWxGcmFtZURhdGEtPm1fZGVjb2RlZFJlY3Quc2l6ZSgpLmFyZWEoKTsKKworICAgIElt
YWdlRnJhbWUqIHNyY0J1ZmZlciA9IG1faW1hZ2VEZWNvZGVyRm9yVGFzay0+ZnJhbWVCdWZmZXJB
dEluZGV4V2l0aG91dERlY29kaW5nKDApOworICAgIGNvbnN0IEltYWdlRnJhbWU6OlBpeGVsRGF0
YSogY29uc3Qgc3JjQWRkciA9IHNyY0J1ZmZlci0+Z2V0QWRkcigwLCBwYXJhbGxlbEZyYW1lRGF0
YS0+bV9kZWNvZGVkUmVjdC55KCkpOworCisgICAgSW1hZ2VGcmFtZSogZGVzdEJ1ZmZlciA9IG1f
aW1hZ2VEZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXhXaXRob3V0RGVjb2RpbmcoMCk7CisgICAg
SW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0QWRkciA9IGRlc3RCdWZmZXItPmdldEFkZHIoMCwg
cGFyYWxsZWxGcmFtZURhdGEtPm1fZGVjb2RlZFJlY3QueSgpKTsKKworICAgIG1lbWNweShkZXN0
QWRkciwgc3JjQWRkciwgc2VnbWVudFNpemUgKiBzaXplb2YoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRh
KSk7CisKK30KKwordm9pZCBQYXJhbGxlbEltYWdlRGVjb2Rlcjo6YXBwZW5kRGVjb2RlZERhdGFU
b0ltYWdlRnJhbWVGcm9tUGFyYWxsZWxGcmFtZURhdGEoUGFyYWxsZWxGcmFtZURhdGEqIHBhcmFs
bGVsRnJhbWVEYXRhKQoreworICAgIGNvbnN0IEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY29uc3Qg
c2VnbWVudEFkZHIgPSBwYXJhbGxlbEZyYW1lRGF0YS0+bV9kZWNvZGVkU2VnbWVudC5nZXQoKTsK
KyAgICBpbnQgc2VnbWVudFNpemUgPSBwYXJhbGxlbEZyYW1lRGF0YS0+bV9kZWNvZGVkUmVjdC5z
aXplKCkuYXJlYSgpOworICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9IG1faW1hZ2VEZWNvZGVyLT5m
cmFtZUJ1ZmZlckF0SW5kZXhXaXRob3V0RGVjb2RpbmcoMCk7CisgICAgSW1hZ2VGcmFtZTo6UGl4
ZWxEYXRhKiBkZXN0QWRkciA9IGJ1ZmZlci0+Z2V0QWRkcigwLCBwYXJhbGxlbEZyYW1lRGF0YS0+
bV9kZWNvZGVkUmVjdC55KCkpOworICAgIG1lbWNweShkZXN0QWRkciwgc2VnbWVudEFkZHIsIHNl
Z21lbnRTaXplICogc2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSkpOworfQorCit2b2lkIFBh
cmFsbGVsSW1hZ2VEZWNvZGVyOjpzeW5jSW1hZ2VGcmFtZShQYXJhbGxlbEZyYW1lRGF0YSogcGFy
YWxsZWxGcmFtZURhdGEpCit7CisgICAgLy8gVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgbmVlZGVk
IHRvIGNyZWF0ZSBhIHZhbGlkIG5hdGl2ZSBpbWFnZSBpbiBJbWFnZUZyYW1lOjphc05ld05hdGl2
ZUltYWdlKCkuCisgICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gbV9pbWFnZURlY29kZXItPmZyYW1l
QnVmZmVyQXRJbmRleFdpdGhvdXREZWNvZGluZygwKTsKKyAgICBidWZmZXItPmNvcHlXaXRob3V0
Qml0bWFwRGF0YShwYXJhbGxlbEZyYW1lRGF0YS0+bV9pbWFnZUZyYW1lKTsKK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJbWFnZURl
Y29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhcmFsbGVsSW1hZ2VE
ZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJjZWIyNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhcmFsbGVs
SW1hZ2VEZWNvZGVyLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBDb21wYW55IDEwMCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQ
YXJhbGxlbEltYWdlRGVjb2Rlcl9oCisjZGVmaW5lIFBhcmFsbGVsSW1hZ2VEZWNvZGVyX2gKKwor
I2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCisjaW5j
bHVkZSAiUGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZlci5oIgorI2luY2x1ZGUgPHd0Zi9EaXNw
YXRjaFF1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIFBhcmFsbGVsRnJhbWVEYXRhOworCitjbGFzcyBQYXJhbGxlbElt
YWdlRGVjb2RlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQYXJhbGxlbEltYWdlRGVj
b2Rlcj4geworcHVibGljOgorICAgIFBhcmFsbGVsSW1hZ2VEZWNvZGVyKFBhcmFsbGVsSW1hZ2VE
ZWNvZGVyT2JzZXJ2ZXIqLCBJbWFnZURlY29kZXIqLCBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24s
IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbik7CisgICAgflBhcmFsbGVs
SW1hZ2VEZWNvZGVyKCk7CisKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKKworICAgIHZvaWQgZGVj
b2RlKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplKEltYWdlRGVjb2RlciopOwor
CisgICAgaW5saW5lIGJvb2wgdmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlRGVjb2Rlcjsg
fQorCisgICAgc3RydWN0IEVuY29kZWREYXRhU2VnbWVudCB7CisgICAgICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEVuY29kZWREYXRhU2VnbWVudCk7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgRW5jb2RlZERhdGFTZWdtZW50KCkgeyB9Cisg
ICAgICAgIFZlY3RvcjxjaGFyPiBtX3NlZ21lbnQ7CisgICAgICAgIGJvb2wgbV9pc0FsbERhdGFS
ZWNlaXZlZDsKKyAgICB9OworCisgICAgUGFzc093blB0cjxFbmNvZGVkRGF0YVNlZ21lbnQ+IGV4
dHJhY3RTZWdtZW50Rm9yVGFzaygpOworCisgICAgLy8gT25seSB0aGlzIG1ldGhvZCBpcyBjYWxs
ZWQgYnkgdGhlIHRhc2sgdGhyZWFkLgorICAgIHZvaWQgZGVjb2RlVGFzayhQYXNzT3duUHRyPEVu
Y29kZWREYXRhU2VnbWVudD4pOworCisgICAgdm9pZCBkaWREZWNvZGVUYXNrKFBhcmFsbGVsRnJh
bWVEYXRhKik7CisgICAgdm9pZCBhcHBlbmREZWNvZGVkRGF0YVRvSW1hZ2VGcmFtZUZyb21QYXJh
bGxlbEZyYW1lRGF0YShQYXJhbGxlbEZyYW1lRGF0YSopOworICAgIHZvaWQgc3luY0ltYWdlRnJh
bWUoUGFyYWxsZWxGcmFtZURhdGEqKTsKKyAgICB2b2lkIGFwcGVuZERlY29kZWREYXRhVG9JbWFn
ZUZyYW1lRnJvbUltYWdlRGVjb2RlcihQYXJhbGxlbEZyYW1lRGF0YSopOworICAgIGZyaWVuZCB2
b2lkIGRpZERlY29kZVRhc2tDYWxsYmFjayhQYXJhbGxlbEZyYW1lRGF0YSopOworCisgICAgUGFy
YWxsZWxJbWFnZURlY29kZXJPYnNlcnZlciogbV9vYnNlcnZlcjsKKyAgICBJbWFnZURlY29kZXIq
IG1faW1hZ2VEZWNvZGVyOworCisgICAgLy8gRm9yIGlucHV0IGRhdGEKKyAgICB1bnNpZ25lZCBt
X2J5dGVzT2ZEYXRhQ29uc3VtZWQ7CisKKyAgICAvLyBUaGUgdGFzayB0aHJlYWQgY2FuIGFjY2Vz
cyBvbmx5IG1fZGF0YUZvclRhc2sgYW5kIG1faW1hZ2VEZWNvZGVyRm9yVGFzay4KKyAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBtX2RhdGFGb3JUYXNrOworICAgIE93blB0cjxJbWFnZURlY29kZXI+
IG1faW1hZ2VEZWNvZGVyRm9yVGFzazsKKyAgICBJbWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gbV9h
bHBoYU9wdGlvbjsKKyAgICBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24g
bV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbjsKKworICAgIFJlZlB0cjxEaXNwYXRjaFF1ZXVl
PiBtX2RlY29kZVF1ZXVlOworCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGFyYWxsZWxJ
bWFnZURlY29kZXJPYnNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjIxMDEyZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXJhbGxlbEltYWdlRGVjb2Rlck9ic2VydmVyLmgKQEAgLTAsMCArMSw0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZl
cl9oCisjZGVmaW5lIFBhcmFsbGVsSW1hZ2VEZWNvZGVyT2JzZXJ2ZXJfaAorCisjaW5jbHVkZSAi
TmF0aXZlSW1hZ2VQdHIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBJbnRlcmZhY2Ug
Zm9yIG5vdGlmaWNhdGlvbiBhYm91dCBkZWNvZGluZyBjb21wbGV0aW9uIG9mIGFuIFBhcmFsbGVs
SW1hZ2VEZWNvZGVyLgorY2xhc3MgUGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZlciB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB2b2lkIGRpZERlY29kZShOYXRpdmVJbWFnZVB0cikgPSAwOworCitw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+UGFyYWxsZWxJbWFnZURlY29kZXJPYnNlcnZlcigpIHsg
fQorfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1JldGFpbmVkTW9kZUJpdG1hcEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1JldGFpbmVkTW9kZUJpdG1hcEltYWdlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njc4NTc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuY3BwCkBA
IC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJldGFpbmVkTW9kZUJpdG1hcEltYWdlLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8UmV0YWluZWRNb2RlQml0
bWFwSW1hZ2U+IFJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpjcmVhdGUoQml0bWFwSW1hZ2UqIGJp
dG1hcEltYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmV0YWluZWRNb2RlQml0bWFw
SW1hZ2UoYml0bWFwSW1hZ2UpKTsKK30KKworUmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OlJldGFp
bmVkTW9kZUJpdG1hcEltYWdlKEJpdG1hcEltYWdlKiBiaXRtYXBJbWFnZSkKKyAgICA6IG1fYml0
bWFwSW1hZ2UoYml0bWFwSW1hZ2UpCisgICAgLCBtX3JldGFpbmVkTW9kZUNvdW50KDApCit7Cit9
CisKK2Jvb2wgUmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6Omhhc1NpbmdsZVNlY3VyaXR5T3JpZ2lu
KCkgY29uc3QKK3sKKyAgICBSZXRhaW5lZE1vZGVTYXZlciByZXRhaW5lZE1vZGVTYXZlcih0aGlz
KTsKKyAgICByZXR1cm4gbV9iaXRtYXBJbWFnZS0+aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKTsK
K30KKworSW50U2l6ZSBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6c2l6ZSgpIGNvbnN0Cit7Cisg
ICAgUmV0YWluZWRNb2RlU2F2ZXIgcmV0YWluZWRNb2RlU2F2ZXIodGhpcyk7CisgICAgcmV0dXJu
IG1fYml0bWFwSW1hZ2UtPnNpemUoKTsKK30KKworYm9vbCBSZXRhaW5lZE1vZGVCaXRtYXBJbWFn
ZTo6Z2V0SG90U3BvdChJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgUmV0YWluZWRNb2Rl
U2F2ZXIgcmV0YWluZWRNb2RlU2F2ZXIodGhpcyk7CisgICAgcmV0dXJuIG1fYml0bWFwSW1hZ2Ut
PmdldEhvdFNwb3QocG9pbnQpOworfQorCitib29sIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpk
YXRhQ2hhbmdlZChib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICBSZXRhaW5lZE1vZGVTYXZl
ciByZXRhaW5lZE1vZGVTYXZlcih0aGlzKTsKKyAgICByZXR1cm4gbV9iaXRtYXBJbWFnZS0+ZGF0
YUNoYW5nZWQoYWxsRGF0YVJlY2VpdmVkKTsKK30KKworU3RyaW5nIFJldGFpbmVkTW9kZUJpdG1h
cEltYWdlOjpmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0Cit7CisgICAgUmV0YWluZWRNb2RlU2F2
ZXIgcmV0YWluZWRNb2RlU2F2ZXIodGhpcyk7CisgICAgcmV0dXJuIG1fYml0bWFwSW1hZ2UtPmZp
bGVuYW1lRXh0ZW5zaW9uKCk7Cit9CisKK3ZvaWQgUmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OmRl
c3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwpCit7CisgICAgUmV0YWluZWRNb2RlU2F2
ZXIgcmV0YWluZWRNb2RlU2F2ZXIodGhpcyk7CisgICAgbV9iaXRtYXBJbWFnZS0+ZGVzdHJveURl
Y29kZWREYXRhKGRlc3Ryb3lBbGwpOworfQorCit1bnNpZ25lZCBSZXRhaW5lZE1vZGVCaXRtYXBJ
bWFnZTo6ZGVjb2RlZFNpemUoKSBjb25zdAoreworICAgIFJldGFpbmVkTW9kZVNhdmVyIHJldGFp
bmVkTW9kZVNhdmVyKHRoaXMpOworICAgIHJldHVybiBtX2JpdG1hcEltYWdlLT5kZWNvZGVkU2l6
ZSgpOworfQorCit2b2lkIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpzdGFydEFuaW1hdGlvbihi
b29sIGNhdGNoVXBJZk5lY2Vzc2FyeSkKK3sKKyAgICBSZXRhaW5lZE1vZGVTYXZlciByZXRhaW5l
ZE1vZGVTYXZlcih0aGlzKTsKKyAgICBtX2JpdG1hcEltYWdlLT5zdGFydEFuaW1hdGlvbihjYXRj
aFVwSWZOZWNlc3NhcnkpOworfQorCit2b2lkIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpzdG9w
QW5pbWF0aW9uKCkKK3sKKyAgICBSZXRhaW5lZE1vZGVTYXZlciByZXRhaW5lZE1vZGVTYXZlcih0
aGlzKTsKKyAgICBtX2JpdG1hcEltYWdlLT5zdG9wQW5pbWF0aW9uKCk7Cit9CisKK3ZvaWQgUmV0
YWluZWRNb2RlQml0bWFwSW1hZ2U6OnJlc2V0QW5pbWF0aW9uKCkKK3sKKyAgICBSZXRhaW5lZE1v
ZGVTYXZlciByZXRhaW5lZE1vZGVTYXZlcih0aGlzKTsKKyAgICBtX2JpdG1hcEltYWdlLT5yZXNl
dEFuaW1hdGlvbigpOworfQorCitOYXRpdmVJbWFnZVB0ciBSZXRhaW5lZE1vZGVCaXRtYXBJbWFn
ZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQoreworICAgIFJldGFpbmVkTW9kZVNhdmVy
IHJldGFpbmVkTW9kZVNhdmVyKHRoaXMpOworICAgIHJldHVybiBtX2JpdG1hcEltYWdlLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworfQorCitib29sIFJldGFpbmVkTW9kZUJpdG1hcElt
YWdlOjpjdXJyZW50RnJhbWVIYXNBbHBoYSgpCit7CisgICAgUmV0YWluZWRNb2RlU2F2ZXIgcmV0
YWluZWRNb2RlU2F2ZXIodGhpcyk7CisgICAgcmV0dXJuIG1fYml0bWFwSW1hZ2UtPmN1cnJlbnRG
cmFtZUhhc0FscGhhKCk7Cit9CisKK3ZvaWQgUmV0YWluZWRNb2RlQml0bWFwSW1hZ2U6OmRyYXco
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wKQoreworICAgIFJldGFpbmVkTW9kZVNhdmVyIHJldGFpbmVkTW9kZVNhdmVy
KHRoaXMpOworICAgIG1fYml0bWFwSW1hZ2UtPmRyYXcoY29udGV4dCwgZHN0UmVjdCwgc3JjUmVj
dCwgc3R5bGVDb2xvclNwYWNlLCBvcCk7Cit9CisKK2Jvb2wgUmV0YWluZWRNb2RlQml0bWFwSW1h
Z2U6Om1heUZpbGxXaXRoU29saWRDb2xvcigpCit7CisgICAgUmV0YWluZWRNb2RlU2F2ZXIgcmV0
YWluZWRNb2RlU2F2ZXIodGhpcyk7CisgICAgcmV0dXJuIG1fYml0bWFwSW1hZ2UtPm1heUZpbGxX
aXRoU29saWRDb2xvcigpOworfQorCitDb2xvciBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZTo6c29s
aWRDb2xvcigpIGNvbnN0Cit7CisgICAgUmV0YWluZWRNb2RlU2F2ZXIgcmV0YWluZWRNb2RlU2F2
ZXIodGhpcyk7CisgICAgcmV0dXJuIG1fYml0bWFwSW1hZ2UtPnNvbGlkQ29sb3IoKTsKK30KKwor
UmV0YWluZWRNb2RlU2F2ZXI6OlJldGFpbmVkTW9kZVNhdmVyKGNvbnN0IFJldGFpbmVkTW9kZUJp
dG1hcEltYWdlKiBpbWFnZSwgYm9vbCByZXRhaW5lZCkKKyAgICA6IG1faW1hZ2UoaW1hZ2UpCisg
ICAgLCBtX3JldGFpbmVkKHJldGFpbmVkKQoreworICAgIGlmIChtX3JldGFpbmVkKQorICAgICAg
ICBtX2ltYWdlLT5iZWdpblJldGFpbmVkTW9kZSgpOworfQorCitSZXRhaW5lZE1vZGVTYXZlcjo6
flJldGFpbmVkTW9kZVNhdmVyKCkKK3sKKyAgICBpZiAobV9yZXRhaW5lZCkKKyAgICAgICAgbV9p
bWFnZS0+ZW5kUmV0YWluZWRNb2RlKCk7Cit9CisKK1JldGFpbmVkTW9kZUJpdG1hcEltYWdlKiB0
b1JldGFpbmVkTW9kZUJpdG1hcEltYWdlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBBU1NFUlQoaW1h
Z2UtPmlzQml0bWFwSW1hZ2UoKSk7CisKKyAgICBCaXRtYXBJbWFnZSogYml0bWFwSW1hZ2UgPSBz
dGF0aWNfY2FzdDxCaXRtYXBJbWFnZSo+KGltYWdlKTsKKyAgICBpZiAoIWJpdG1hcEltYWdlLT5t
X3JldGFpbmVkTW9kZUltYWdlLmdldCgpKQorICAgICAgICBiaXRtYXBJbWFnZS0+bV9yZXRhaW5l
ZE1vZGVJbWFnZSA9IFJldGFpbmVkTW9kZUJpdG1hcEltYWdlOjpjcmVhdGUoYml0bWFwSW1hZ2Up
OworCisgICAgcmV0dXJuIGJpdG1hcEltYWdlLT5tX3JldGFpbmVkTW9kZUltYWdlLmdldCgpOwor
fQorCitJbWFnZSogdG9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZUlmUG9zc2libGUoSW1hZ2UqIGlt
YWdlKQoreworICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+aXNCaXRtYXBJbWFnZSgpKQorICAgICAg
ICByZXR1cm4gdG9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZShpbWFnZSk7CisgICAgcmV0dXJuIGlt
YWdlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4xMzViMGIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UuaApAQCAtMCwwICsxLDEwNCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmV0YWluZWRNb2RlQml0bWFwSW1hZ2VfaAorI2Rl
ZmluZSBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZV9oCisKKyNpbmNsdWRlICJJbWFnZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJpdG1hcEltYWdlOworY2xhc3MgUmV0YWluZWRN
b2RlU2F2ZXI7CisKKy8vIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlIGlzIHVzZWQgaW4gb3JkZXIg
dG8gZGVjb2RlIGFuIGltYWdlIGFzeW5jaHJvbm91c2x5LgorLy8gQ2xpZW50cyBvbmx5IHVzZSB0
aGlzIGNsYXNzIHdoZW4gdGhleSBjYWxscyBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIGFu
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSgpLgorLy8gSXQgaXMgaWxsZWdhbCBmb3IgY2xp
ZW50cyB0byBjYWxsIG90aGVyIG1ldGhvZHMgb2YgSW1hZ2UuCisvLyBIb3dldmVyLCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZSBjYWxscyBzaXplKCksIGFuZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZSBjYW4gY2FsbCBvdGhlciB2aXJ0dWFsIG1ldGhvZHMgaW4gdGhlIGZ1dHVyZS4KKy8v
IFNvLCBSZXRhaW5lZE1vZGVCaXRtYXBJbWFnZSBvdmVycmlkZXMgYWxsIHZpcnR1YWwgbWV0aG9k
cyBvZiBJbWFnZS4KK2NsYXNzIFJldGFpbmVkTW9kZUJpdG1hcEltYWdlIDogcHVibGljIEltYWdl
IHsKKyAgICBmcmllbmQgY2xhc3MgUmV0YWluZWRNb2RlU2F2ZXI7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8UmV0YWluZWRNb2RlQml0bWFwSW1hZ2U+IGNyZWF0ZShCaXRtYXBJbWFn
ZSopOworCisgICAgdmlydHVhbCB+UmV0YWluZWRNb2RlQml0bWFwSW1hZ2UoKSB7IH0KKworICAg
IHZpcnR1YWwgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0OworCisgICAgdmly
dHVhbCBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0SG90U3BvdChJ
bnRQb2ludCYpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGRhdGFDaGFuZ2VkKGJvb2wgYWxs
RGF0YVJlY2VpdmVkKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNv
bnN0OworCisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lB
bGwgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRBbmltYXRpb24oYm9vbCBjYXRjaFVwSWZOZWNlc3Nhcnkg
PSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcEFuaW1hdGlvbigpOworICAgIHZpcnR1YWwg
dm9pZCByZXNldEFuaW1hdGlvbigpOworCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50RnJhbWVI
YXNBbHBoYSgpOworCisgICAgaW5saW5lIGJvb2wgcmV0YWluZWRNb2RlUmVuZGVyaW5nKCkgY29u
c3QgeyByZXR1cm4gbV9yZXRhaW5lZE1vZGVDb3VudDsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBD
b21wb3NpdGVPcGVyYXRvcik7CisKKyAgICB2aXJ0dWFsIGJvb2wgbWF5RmlsbFdpdGhTb2xpZENv
bG9yKCk7CisgICAgdmlydHVhbCBDb2xvciBzb2xpZENvbG9yKCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgZXhwbGljaXQgUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UoQml0bWFwSW1hZ2UqKTsKKwor
ICAgIGlubGluZSB2b2lkIGJlZ2luUmV0YWluZWRNb2RlKCkgY29uc3QgeyBtX3JldGFpbmVkTW9k
ZUNvdW50Kys7IH0KKyAgICBpbmxpbmUgdm9pZCBlbmRSZXRhaW5lZE1vZGUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgbV9yZXRhaW5lZE1vZGVDb3VudC0tOworICAgICAgICBBU1NFUlQobV9yZXRh
aW5lZE1vZGVDb3VudCA+PSAwKTsKKyAgICB9CisKKyAgICBCaXRtYXBJbWFnZSogbV9iaXRtYXBJ
bWFnZTsKKyAgICBtdXRhYmxlIGludCBtX3JldGFpbmVkTW9kZUNvdW50OworfTsKKworY2xhc3Mg
UmV0YWluZWRNb2RlU2F2ZXIgeworcHVibGljOgorICAgIFJldGFpbmVkTW9kZVNhdmVyKGNvbnN0
IFJldGFpbmVkTW9kZUJpdG1hcEltYWdlKiwgYm9vbCByZXRhaW5lZCA9IHRydWUpOworICAgIH5S
ZXRhaW5lZE1vZGVTYXZlcigpOworCitwcml2YXRlOgorICAgIGNvbnN0IFJldGFpbmVkTW9kZUJp
dG1hcEltYWdlKiBtX2ltYWdlOworICAgIGJvb2wgbV9yZXRhaW5lZDsKK307CisKKworUmV0YWlu
ZWRNb2RlQml0bWFwSW1hZ2UqIHRvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2UoSW1hZ2UqKTsKK0lt
YWdlKiB0b1JldGFpbmVkTW9kZUJpdG1hcEltYWdlSWZQb3NzaWJsZShJbWFnZSopOworCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
R3JhcGhpY3NMYXllckNBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5jcHAKaW5kZXggZTNhNTY1ZC4uNmY5NTc0MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0Eu
Y3BwCkBAIC03NjYsMTMgKzc2NiwxMSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0Q29udGVu
dHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKIHsKICAgICBpZiAoaW1hZ2UpIHsKICAgICAgICAgQ0dJ
bWFnZVJlZiBuZXdJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwot
ICAgICAgICBpZiAoIW5ld0ltYWdlKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NF
UlQobmV3SW1hZ2UpOwogCiAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgaW1hZ2UgY2hh
bmdlZDsgd2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1c2UgdGhlIGNhbGwgdG8KICAgICAgICAgLy8g
Q0dJbWFnZUNyZWF0ZUNvcHlXaXRoQ29sb3JTcGFjZSgpIGJlbG93IGNhbiBjcmVhdGUgYSBuZXcg
aW1hZ2UgZXZlcnkgdGltZS4KLSAgICAgICAgaWYgKG1fdW5jb3JyZWN0ZWRDb250ZW50c0ltYWdl
ICYmIG1fdW5jb3JyZWN0ZWRDb250ZW50c0ltYWdlLmdldCgpID09IG5ld0ltYWdlKQotICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQoIW1fdW5jb3JyZWN0ZWRDb250ZW50c0ltYWdl
IHx8IG1fdW5jb3JyZWN0ZWRDb250ZW50c0ltYWdlLmdldCgpICE9IG5ld0ltYWdlKTsKICAgICAg
ICAgCiAgICAgICAgIG1fdW5jb3JyZWN0ZWRDb250ZW50c0ltYWdlID0gbmV3SW1hZ2U7CiAgICAg
ICAgIG1fcGVuZGluZ0NvbnRlbnRzSW1hZ2UgPSBuZXdJbWFnZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5j
cHAKaW5kZXggZTlmYTViZS4uZjk1MjkzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKQEAgLTQy
LDYgKzQyLDcgQEAgUGFzc1JlZlB0cjxCaXRtYXBJbWFnZT4gQml0bWFwSW1hZ2U6OmNyZWF0ZShj
YWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCiAKIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShOYXRp
dmVJbWFnZUNhaXJvKiBuYXRpdmVJbWFnZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAg
OiBJbWFnZShvYnNlcnZlcikKKyAgICAsIG1fc291cmNlKHRoaXMpCiAgICAgLCBtX2N1cnJlbnRG
cmFtZSgwKQogICAgICwgbV9mcmFtZXMoMCkKICAgICAsIG1fZnJhbWVUaW1lcigwKQpAQCAtNTcs
NiArNTgsNyBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoTmF0aXZlSW1hZ2VDYWlybyogbmF0
aXZlSW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgICwgbV9oYXZlU2l6ZSh0cnVl
KQogICAgICwgbV9zaXplQXZhaWxhYmxlKHRydWUpCiAgICAgLCBtX2hhdmVGcmFtZUNvdW50KHRy
dWUpCisgICAgLCBtX2lzQ2FjaGluZ0ZyYW1lKGZhbHNlKQogewogICAgIGNhaXJvX3N1cmZhY2Vf
dCogc3VyZmFjZSA9IG5hdGl2ZUltYWdlLT5zdXJmYWNlKCk7CiAgICAgaW50IHdpZHRoID0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSk7CkBAIC02OCw2ICs3MCw3IEBAIEJp
dG1hcEltYWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZUNhaXJvKiBuYXRpdmVJbWFnZSwgSW1h
Z2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgbV9mcmFtZXNbMF0ubV9mcmFtZSA9IG5hdGl2ZUlt
YWdlOwogICAgIG1fZnJhbWVzWzBdLm1faGFzQWxwaGEgPSBjYWlyb19zdXJmYWNlX2dldF9jb250
ZW50KHN1cmZhY2UpICE9IENBSVJPX0NPTlRFTlRfQ09MT1I7CiAgICAgbV9mcmFtZXNbMF0ubV9o
YXZlTWV0YWRhdGEgPSB0cnVlOworICAgIG1fZnJhbWVzWzBdLm1faXNDb21wbGV0ZSA9IHRydWU7
CiAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RD
YWlyby5jcHAKaW5kZXggNjJkYTFhMS4uOTdmNTRjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
M0RDYWlyby5jcHAKQEAgLTE2NSw3ICsxNjUsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLCB1bnNpZ25lZCBpbnQgZm9ybWF0LCB1bnNpZ25lZAog
ICAgICAgICBkZWNvZGVyLnNldERhdGEoaW1hZ2UtPmRhdGEoKSwgdHJ1ZSk7CiAgICAgICAgIGlm
ICghZGVjb2Rlci5mcmFtZUNvdW50KCkgfHwgIWRlY29kZXIuZnJhbWVJc0NvbXBsZXRlQXRJbmRl
eCgwKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgT3duUHRyPE5hdGl2ZUlt
YWdlQ2Fpcm8+IG5hdGl2ZUltYWdlID0gYWRvcHRQdHIoZGVjb2Rlci5jcmVhdGVGcmFtZUF0SW5k
ZXgoMCkpOworICAgICAgICBPd25QdHI8TmF0aXZlSW1hZ2VDYWlybz4gbmF0aXZlSW1hZ2UgPSBh
ZG9wdFB0cihkZWNvZGVyLnJlcXVlc3RGcmFtZUF0SW5kZXgoMCkpOwogICAgICAgICBpbWFnZVN1
cmZhY2UgPSBuYXRpdmVJbWFnZS0+c3VyZmFjZSgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlt
YWdlU3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpLT5zdXJmYWNl
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHQzRENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCmluZGV4IDUwZGU1MWYuLjk3NDUzYWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNE
Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dDNEQ0cuY3BwCkBAIC0xMDcsNyArMTA3LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKICAgICAgICAgZGVjb2Rlci5zZXREYXRhKGlt
YWdlLT5kYXRhKCksIHRydWUpOwogICAgICAgICBpZiAoIWRlY29kZXIuZnJhbWVDb3VudCgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkZWNvZGVkSW1hZ2UuYWRvcHRDRihk
ZWNvZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgwKSk7CisgICAgICAgIGRlY29kZWRJbWFnZS5hZG9w
dENGKGRlY29kZXIucmVxdWVzdEZyYW1lQXRJbmRleCgwKSk7CiAgICAgICAgIGNnSW1hZ2UgPSBk
ZWNvZGVkSW1hZ2UuZ2V0KCk7CiAgICAgfSBlbHNlCiAgICAgICAgIGNnSW1hZ2UgPSBpbWFnZS0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAKaW5kZXggODhhZGFiZi4uNjUyYTM2NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAKQEAgLTcw
LDYgKzcwLDcgQEAgYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKIAog
Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKENHSW1hZ2VSZWYgY2dJbWFnZSwgSW1hZ2VPYnNlcnZl
ciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShvYnNlcnZlcikKKyAgICAsIG1fc291cmNlKHRoaXMp
CiAgICAgLCBtX2N1cnJlbnRGcmFtZSgwKQogICAgICwgbV9mcmFtZXMoMCkKICAgICAsIG1fZnJh
bWVUaW1lcigwKQpAQCAtODYsNiArODcsNyBAQCBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoQ0dJ
bWFnZVJlZiBjZ0ltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICAsIG1faGF2ZVNp
emUodHJ1ZSkKICAgICAsIG1fc2l6ZUF2YWlsYWJsZSh0cnVlKQogICAgICwgbV9oYXZlRnJhbWVD
b3VudCh0cnVlKQorICAgICwgbV9pc0NhY2hpbmdGcmFtZShmYWxzZSkKIHsKICAgICBDR0Zsb2F0
IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpOwogICAgIENHRmxvYXQgaGVpZ2h0ID0g
Q0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKTsKQEAgLTEwMCw2ICsxMDIsNyBAQCBCaXRtYXBJbWFn
ZTo6Qml0bWFwSW1hZ2UoQ0dJbWFnZVJlZiBjZ0ltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZl
cikKICAgICBtX2ZyYW1lc1swXS5tX2ZyYW1lID0gY2dJbWFnZTsKICAgICBtX2ZyYW1lc1swXS5t
X2hhc0FscGhhID0gdHJ1ZTsKICAgICBtX2ZyYW1lc1swXS5tX2hhdmVNZXRhZGF0YSA9IHRydWU7
CisgICAgbV9mcmFtZXNbMF0ubV9pc0NvbXBsZXRlID0gdHJ1ZTsKIAogICAgIGNoZWNrRm9yU29s
aWRDb2xvcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZVNvdXJjZUNHLmNwcAppbmRleCA3Y2YwMjk2Li5jODA5OWQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNw
cApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkltYWdlU291cmNlQ0cuaCIKIAogI2luY2x1
ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZU9ic2VydmVyLmgi
CiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgpAQCAtNzIsNiArNzMsMTYgQEAgdm9pZCBzaGFyZWRCdWZmZXJS
ZWxlYXNlKHZvaWQqIGluZm8pCiAKIEltYWdlU291cmNlOjpJbWFnZVNvdXJjZShJbWFnZVNvdXJj
ZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJv
ZmlsZU9wdGlvbiBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKICAgICA6IG1fZGVjb2Rlcigw
KQorICAgICwgbV9vYnNlcnZlcigwKQorICAgIC8vIEZJWE1FOiBtX3ByZW11bHRpcGx5QWxwaGEg
aXMgaWdub3JlZCBpbiBjZyBhdCB0aGUgbW9tZW50LgorICAgICwgbV9hbHBoYU9wdGlvbihhbHBo
YU9wdGlvbikKKyAgICAsIG1fZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24oZ2FtbWFBbmRDb2xv
clByb2ZpbGVPcHRpb24pCit7Cit9CisKK0ltYWdlU291cmNlOjpJbWFnZVNvdXJjZShJbWFnZVNv
dXJjZU9ic2VydmVyKiBvYnNlcnZlciwgSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0
aW9uLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24gZ2FtbWFBbmRDb2xv
clByb2ZpbGVPcHRpb24pCisgICAgOiBtX2RlY29kZXIoMCkKKyAgICAsIG1fb2JzZXJ2ZXIob2Jz
ZXJ2ZXIpCiAgICAgLy8gRklYTUU6IG1fcHJlbXVsdGlwbHlBbHBoYSBpcyBpZ25vcmVkIGluIGNn
IGF0IHRoZSBtb21lbnQuCiAgICAgLCBtX2FscGhhT3B0aW9uKGFscGhhT3B0aW9uKQogICAgICwg
bV9nYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbihnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikK
QEAgLTI5OSw2ICszMTAsMTQgQEAgc2l6ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50KCkgY29u
c3QKICAgICByZXR1cm4gbV9kZWNvZGVyID8gQ0dJbWFnZVNvdXJjZUdldENvdW50KG1fZGVjb2Rl
cikgOiAwOwogfQogCitDR0ltYWdlUmVmIEltYWdlU291cmNlOjpyZXF1ZXN0RnJhbWVBdEluZGV4
KHNpemVfdCBpbmRleCkKK3sKKyAgICBDR0ltYWdlUmVmIGltYWdlUmVmID0gY3JlYXRlRnJhbWVB
dEluZGV4KGluZGV4KTsKKyAgICBpZiAobV9vYnNlcnZlcikKKyAgICAgICAgbV9vYnNlcnZlci0+
ZGlkRGVjb2RlRnJhbWVBdEluZGV4KGluZGV4LCBpbWFnZVJlZik7CisgICAgcmV0dXJuIGltYWdl
UmVmOworfQorCiBDR0ltYWdlUmVmIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5kZXgoc2l6
ZV90IGluZGV4KQogewogICAgIGlmICghaW5pdGlhbGl6ZWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAppbmRleCA0
YTI4ZTM3Li5kYzNkNzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCkBAIC01NCwxMSArNTQsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCBib29sIGRhdGFDaGFuZ2VkKGJvb2wgYWxs
RGF0YVJlY2VpdmVkKTsKIAotICAgICAgICAvLyBGSVhNRTogUERGIEltYWdlcyBhcmUgdW5kZXJy
ZXBvcnRpbmcgZGVjb2RlZCBzaXplcyBhbmQgd2lsbCBiZSB1bmFibGUKLSAgICAgICAgLy8gdG8g
cHJ1bmUgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCAvKmRlc3Ryb3lBbGwq
LyA9IHRydWUpIHsgfQotICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGRlY29kZWRTaXplKCkgY29u
c3QgeyByZXR1cm4gMDsgfQotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlSW50cmluc2lj
RGltZW5zaW9ucyhMZW5ndGgmIGludHJpbnNpY1dpZHRoLCBMZW5ndGgmIGludHJpbnNpY0hlaWdo
dCwgRmxvYXRTaXplJiBpbnRyaW5zaWNSYXRpbyk7CiAgICAgICAgIHZpcnR1YWwgSW50U2l6ZSBz
aXplKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW52Zy9JbWFnZU9wZW5WRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVudmcvSW1hZ2VPcGVuVkcuY3BwCmluZGV4IDk1MTA4ODIuLjcwZTUzM2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW52Zy9JbWFnZU9wZW5W
Ry5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnZnL0ltYWdl
T3BlblZHLmNwcApAQCAtNTIsNiArNTIsNyBAQCBib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBj
bGVhck1ldGFkYXRhKQogCiBCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoVGlsZWRJbWFnZU9wZW5W
RyogdGlsZWRJbWFnZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFnZShvYnNl
cnZlcikKKyAgICAsIG1fc291cmNlKHRoaXMpCiAgICAgLCBtX3NpemUodGlsZWRJbWFnZS0+c2l6
ZSgpKQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKICAgICAsIG1fZnJhbWVzKDEpCkBAIC02OSw2
ICs3MCw3IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShUaWxlZEltYWdlT3BlblZHKiB0aWxl
ZEltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICAsIG1fc2l6ZUF2YWlsYWJsZSh0
cnVlKQogICAgICwgbV9oYXNVbmlmb3JtRnJhbWVTaXplKHRydWUpCiAgICAgLCBtX2hhdmVGcmFt
ZUNvdW50KHRydWUpCisgICAgLCBtX2lzQ2FjaGluZ0ZyYW1lKGZhbHNlKQogewogICAgIEFTU0VS
VChtX3NpemUud2lkdGgoKSA+IDApOwogICAgIEFTU0VSVChtX3NpemUuaGVpZ2h0KCkgPiAwKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKaW5k
ZXggMTBmZTFmZS4uMjY1YjNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VRdC5jcHAKQEAgLTIwMSw2ICsyMDEsNyBAQCB2b2lkIEltYWdlOjpkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0CiAKIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShRSW1hZ2UqIGltYWdlLCBJbWFnZU9i
c2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQorICAgICwgbV9zb3VyY2Uo
dGhpcykKICAgICAsIG1fY3VycmVudEZyYW1lKDApCiAgICAgLCBtX2ZyYW1lcygwKQogICAgICwg
bV9mcmFtZVRpbWVyKDApCkBAIC0yMTYsNiArMjE3LDcgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcElt
YWdlKFFJbWFnZSogaW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgICwgbV9oYXZl
U2l6ZSh0cnVlKQogICAgICwgbV9zaXplQXZhaWxhYmxlKHRydWUpCiAgICAgLCBtX2hhdmVGcmFt
ZUNvdW50KHRydWUpCisgICAgLCBtX2lzQ2FjaGluZ0ZyYW1lKGZhbHNlKQogewogICAgIGludCB3
aWR0aCA9IGltYWdlLT53aWR0aCgpOwogICAgIGludCBoZWlnaHQgPSBpbWFnZS0+aGVpZ2h0KCk7
CkBAIC0yMjYsNiArMjI4LDcgQEAgQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKFFJbWFnZSogaW1h
Z2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgIG1fZnJhbWVzWzBdLm1fZnJhbWUgPSBp
bWFnZTsKICAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gaW1hZ2UtPmhhc0FscGhhQ2hhbm5l
bCgpOwogICAgIG1fZnJhbWVzWzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKKyAgICBtX2ZyYW1l
c1swXS5tX2lzQ29tcGxldGUgPSB0cnVlOwogICAgIGNoZWNrRm9yU29saWRDb2xvcigpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbElt
YWdlUXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VR
dC5oCmluZGV4IDhjOWVjMGQuLjlmM2M5ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5oCkBAIC00NiwxMSArNDYsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCBib29sIGN1cnJlbnRGcmFtZUhhc0Fs
cGhhKCk7CiAKLSAgICAgICAgLy8gRklYTUU6IFN0aWxsSW1hZ2VzIGFyZSB1bmRlcnJlcG9ydGlu
ZyBkZWNvZGVkIHNpemVzIGFuZCB3aWxsIGJlIHVuYWJsZQotICAgICAgICAvLyB0byBwcnVuZSBi
ZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IGltcGxlbWVudGVkIHlldC4KLSAgICAgICAg
dmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwgPSB0cnVlKSB7
IFFfVU5VU0VEKGRlc3Ryb3lBbGwpOyB9Ci0gICAgICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2Rl
ZFNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0KICAgICAgICAgdmlydHVhbCBJbnRTaXplIHNp
emUoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5n
bGVGcmFtZVNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9C
aXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5jcHAKaW5kZXggMjhlYWQ4Zi4uNGRlNGRmOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9CaXRtYXBJbWFn
ZVNpbmdsZUZyYW1lU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5jcHAKQEAgLTQsMTEgKzQsNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6
OmlzQml0bWFwSW1hZ2UoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIEJp
dG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpjdXJyZW50RnJhbWVIYXNBbHBoYSgpCiB7CiAgICAg
cmV0dXJuICFtX25hdGl2ZUltYWdlLmJpdG1hcCgpLmlzT3BhcXVlKCk7CkBAIC0xOSwxNyArMTQs
NiBAQCBJbnRTaXplIEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpzaXplKCkgY29uc3QKICAg
ICByZXR1cm4gSW50U2l6ZShtX25hdGl2ZUltYWdlLmJpdG1hcCgpLndpZHRoKCksIG1fbmF0aXZl
SW1hZ2UuYml0bWFwKCkuaGVpZ2h0KCkpOwogfQogCi0vLyBEbyBub3RoaW5nLCBhcyB3ZSBvbmx5
IGhhdmUgdGhlIG9uZSByZXByZXNlbnRhdGlvbiBvZiBkYXRhIChkZWNvZGVkKS4KLXZvaWQgQml0
bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lB
bGwpCi17Ci0KLX0KLQotdW5zaWduZWQgQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmRlY29k
ZWRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9uYXRpdmVJbWFnZS5kZWNvZGVkU2l6ZSgp
OwotfQotCiAvLyBXZSBvbmx5IGhhdmUgYSBzaW5nbGUgZnJhbWUuCiBOYXRpdmVJbWFnZVB0ciBC
aXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQog
ewpAQCAtNDQsNCArMjgsMyBAQCBib29sIEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpub3RT
b2xpZENvbG9yKCkKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0bWFwSW1hZ2VTaW5n
bGVGcmFtZVNraWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvQml0
bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaAppbmRleCBmMGQxMTkyLi5iZDc0NjBiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0JpdG1hcEltYWdlU2lu
Z2xlRnJhbWVTa2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9CaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oCkBAIC01MSwxNyArNTEsMTAgQEAgcHVibGlj
OgogICAgIC8vIHJlZidlZCkuCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Qml0bWFwSW1hZ2VTaW5n
bGVGcmFtZVNraWE+IGNyZWF0ZShjb25zdCBTa0JpdG1hcCYsIGJvb2wgY29weVBpeGVscywgZmxv
YXQgcmVzb2x1dGlvblNjYWxlID0gMSk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNCaXRtYXBJbWFn
ZSgpIGNvbnN0OwotCiAgICAgdmlydHVhbCBib29sIGN1cnJlbnRGcmFtZUhhc0FscGhhKCk7CiAK
ICAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OwogCi0gICAgLy8gRG8gbm90aGluZywg
YXMgd2Ugb25seSBoYXZlIHRoZSBvbmUgcmVwcmVzZW50YXRpb24gb2YgZGF0YSAoZGVjb2RlZCku
Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwgPSB0
cnVlKTsKLQotICAgIHZpcnR1YWwgdW5zaWduZWQgZGVjb2RlZFNpemUoKSBjb25zdDsKLQogICAg
IC8vIFdlIG9ubHkgaGF2ZSBhIHNpbmdsZSBmcmFtZS4KICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdl
UHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RT
a2lhLmNwcAppbmRleCAxN2FkODNkLi4xOTg5OWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNr
aWEuY3BwCkBAIC02Myw3ICs2Myw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdl
RGF0YShJbWFnZSogaW1hZ2UsCiAgICAgICAgIGlmICghZGVjb2Rlci5mcmFtZUNvdW50KCkgfHwg
IWRlY29kZXIuZnJhbWVJc0NvbXBsZXRlQXRJbmRleCgwKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgaGFzQWxwaGEgPSBkZWNvZGVyLmZyYW1lSGFzQWxwaGFBdEluZGV4KDAp
OwotICAgICAgICBwaXhlbHMgPSBhZG9wdFB0cihkZWNvZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgw
KSk7CisgICAgICAgIHBpeGVscyA9IGFkb3B0UHRyKGRlY29kZXIucmVxdWVzdEZyYW1lQXRJbmRl
eCgwKSk7CiAgICAgICAgIGlmICghcGl4ZWxzLmdldCgpIHx8ICFwaXhlbHMtPmlzRGF0YUNvbXBs
ZXRlKCkgfHwgIXBpeGVscy0+Yml0bWFwKCkud2lkdGgoKSB8fCAhcGl4ZWxzLT5iaXRtYXAoKS5o
ZWlnaHQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgU2tCaXRtYXA6OkNv
bmZpZyBza2lhQ29uZmlnID0gcGl4ZWxzLT5iaXRtYXAoKS5jb25maWcoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCmluZGV4IGY3MzVkZTIuLjE2ZjhhM2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtODQsOCArODQs
NiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXkoKQog
Ki8KIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzTmVlZHNEaXNw
bGF5KCkKIHsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgc2V0Q29udGVudHNUb0ltYWdlKG1f
aW1hZ2UuZ2V0KCkpOwogICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkRpc3Bs
YXlDaGFuZ2UpOwogfQogCkBAIC0zMjUsMTQgKzMyMywxMCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYgdmFsdWUpCiAqLwog
dm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdl
KiBpbWFnZSkKIHsKLSAgICBpZiAoaW1hZ2UgPT0gbV9pbWFnZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9pbWFnZSA9IGltYWdlOwotICAgIGlmIChtX2ltYWdlKSB7Ci0gICAgICAgIFJlZlB0
cjxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IFRleHR1cmVN
YXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7Ci0gICAgICAgIGJhY2tpbmdTdG9yZS0+
c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKLSAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2UgPSBi
YWNraW5nU3RvcmU7CisgICAgaWYgKGltYWdlKSB7CisgICAgICAgIGlmICghbV9jb21wb3NpdGVk
SW1hZ2UpCisgICAgICAgICAgICBtX2NvbXBvc2l0ZWRJbWFnZSA9IFRleHR1cmVNYXBwZXJUaWxl
ZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7CisgICAgICAgIG1fY29tcG9zaXRlZEltYWdlLT5zZXRD
b250ZW50c1RvSW1hZ2UoaW1hZ2UpOwogICAgIH0gZWxzZQogICAgICAgICBtX2NvbXBvc2l0ZWRJ
bWFnZSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKaW5kZXgg
YzRkNDJmMS4uZmIzN2EyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
LmgKQEAgLTEwMCw4ICsxMDAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVE
ZXN0cm95ZWQoKTsKIAogICAgIE93blB0cjxUZXh0dXJlTWFwcGVyTGF5ZXI+IG1fbGF5ZXI7Ci0g
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IG1fY29tcG9zaXRlZEltYWdlOwot
ICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclRpbGVk
QmFja2luZ1N0b3JlPiBtX2NvbXBvc2l0ZWRJbWFnZTsKICAgICBpbnQgbV9jaGFuZ2VNYXNrOwog
ICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXk7CiAgICAgYm9vbCBtX2ZpeGVkVG9WaWV3cG9ydDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVm
ZmVyV2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1h
Z2VCdWZmZXJXaW5DRS5jcHAKaW5kZXggNTcyMDcwNS4uNmQxOTRkOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJX
aW5DRS5jcHAKQEAgLTM5LDggKzM5LDYgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZpcnR1YWwg
SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShtX2RhdGEtPm1fYml0bWFwLT53
aWR0aCgpLCBtX2RhdGEtPm1fYml0bWFwLT5oZWlnaHQoKSk7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCA9IHRydWUpIHt9Ci0gICAgdmlydHVh
bCB1bnNpZ25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFs
IHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yKTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0
b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcAppbmRleCA1NGJiZGJiLi42MDA4MzE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZVd4LmNwcApAQCAt
ODIsNiArODIsNyBAQCBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3Vy
Y2UoY29uc3QgY2hhciAqbmFtZSkKIAogQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKGNvbnN0IHd4
Qml0bWFwJiBiaXRtYXApCiAgICAgOiBJbWFnZSgwKQorICAgICwgbV9zb3VyY2UodGhpcykKICAg
ICAsIG1fY3VycmVudEZyYW1lKDApCiAgICAgLCBtX2ZyYW1lcygwKQogICAgICwgbV9mcmFtZVRp
bWVyKDApCkBAIC05Nyw2ICs5OCw3IEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShjb25zdCB3
eEJpdG1hcCYgYml0bWFwKQogICAgICwgbV9kZWNvZGVkU2l6ZSgwKQogICAgICwgbV9oYXZlRnJh
bWVDb3VudCh0cnVlKQogICAgICwgbV9mcmFtZUNvdW50KDEpCisgICAgLCBtX2lzQ2FjaGluZ0Zy
YW1lKGZhbHNlKQogewogICAgIG1fZGVjb2RlZFNpemUgPSBiaXRtYXAuR2V0V2lkdGgoKSAqIGJp
dG1hcC5HZXRIZWlnaHQoKSAqIDQ7CiAgICAgbV9zaXplID0gSW50U2l6ZShiaXRtYXAuR2V0V2lk
dGgoKSwgYml0bWFwLkdldEhlaWdodCgpKTsKQEAgLTExNCw2ICsxMTYsNyBAQCBCaXRtYXBJbWFn
ZTo6Qml0bWFwSW1hZ2UoY29uc3Qgd3hCaXRtYXAmIGJpdG1hcCkKICAgICAgICAgbV9mcmFtZXMu
Z3JvdygxKTsKICAgICAgICAgbV9mcmFtZXNbMF0ubV9mcmFtZSA9IGdibXA7CiAgICAgICAgIG1f
ZnJhbWVzWzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKKyAgICAgICAgbV9mcmFtZXNbMF0ubV9p
c0NvbXBsZXRlID0gdHJ1ZTsKICAgICAgICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5jcHAKaW5kZXggNzJiNWRkYy4uNGE5NDQ1ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCkBA
IC0xNDAsNiArMTQwLDcgQEAgSW1hZ2VEZWNvZGVyKiBJbWFnZURlY29kZXI6OmNyZWF0ZShjb25z
dCBTaGFyZWRCdWZmZXImIGRhdGEsIEltYWdlU291cmNlOjpBbHBoYU8KIAogSW1hZ2VGcmFtZTo6
SW1hZ2VGcmFtZSgpCiAgICAgOiBtX2hhc0FscGhhKGZhbHNlKQorICAgICwgbV9sYXN0RGVjb2Rl
ZFJvdygwKQogICAgICwgbV9zdGF0dXMoRnJhbWVFbXB0eSkKICAgICAsIG1fZHVyYXRpb24oMCkK
ICAgICAsIG1fZGlzcG9zYWxNZXRob2QoRGlzcG9zZU5vdFNwZWNpZmllZCkKQEAgLTE1MywxMSAr
MTU0LDcgQEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJh
bWUmIG90aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICBjb3B5Qml0bWFwRGF0YShv
dGhlcik7Ci0gICAgc2V0T3JpZ2luYWxGcmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3Qo
KSk7Ci0gICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKLSAgICBzZXREdXJhdGlvbihvdGhl
ci5kdXJhdGlvbigpKTsKLSAgICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhv
ZCgpKTsKLSAgICBzZXRQcmVtdWx0aXBseUFscGhhKG90aGVyLnByZW11bHRpcGx5QWxwaGEoKSk7
CisgICAgY29weVdpdGhvdXRCaXRtYXBEYXRhKG90aGVyKTsKICAgICByZXR1cm4gKnRoaXM7CiB9
CiAKQEAgLTE2NSw2ICsxNjIsNyBAQCB2b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkK
IHsKICAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOwogICAgIG1fYnl0ZXMgPSAwOworICAgIG1f
bGFzdERlY29kZWRSb3cgPSAwOwogICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKICAgICAvLyBO
T1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVtYmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2Fj
aGUoKSBjYWxscyB0aGlzCiAgICAgLy8gdG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhl
ciBmdW5jdGlvbnMgbGlrZSBpbml0RnJhbWVCdWZmZXIoKSBhbmQKQEAgLTE4Nyw2ICsxODUsNyBA
QCBib29sIEltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IEltYWdlRnJhbWUmIG90aGVy
KQogICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CiAgICAgbV9zaXplID0gb3Ro
ZXIubV9zaXplOwogICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxwaGEpOworICAgIG1fbGFz
dERlY29kZWRSb3cgPSBvdGhlci5tX2xhc3REZWNvZGVkUm93OwogICAgIHJldHVybiB0cnVlOwog
fQogCkBAIC0xOTksMTEgKzE5OCwxNyBAQCBib29sIEltYWdlRnJhbWU6OnNldFNpemUoaW50IG5l
d1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQogICAgIG1fYmFja2luZ1N0b3JlLnJlc2l6ZShiYWNraW5n
U3RvcmVTaXplKTsKICAgICBtX2J5dGVzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwogICAgIG1f
c2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7CisgICAgbV9sYXN0RGVjb2RlZFJv
dyA9IDA7CiAKICAgICB6ZXJvRmlsbFBpeGVsRGF0YSgpOwogICAgIHJldHVybiB0cnVlOwogfQog
CitJbnRTaXplIEltYWdlRnJhbWU6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3NpemU7
Cit9CisKIGJvb2wgSW1hZ2VGcmFtZTo6aGFzQWxwaGEoKSBjb25zdAogewogICAgIHJldHVybiBt
X2hhc0FscGhhOwpAQCAtMjc3LDYgKzI4MiwzOCBAQCB0ZW1wbGF0ZSA8TWF0Y2hUeXBlIHR5cGU+
IGludCBnZXRTY2FsZWRWYWx1ZShjb25zdCBWZWN0b3I8aW50PiYgc2NhbGVkVmFsdWVzLCBpbgog
CiB9CiAKK2Zsb2F0IEltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGlu
ZGV4KQoreworICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIDw9IGluZGV4KQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XS5kdXJh
dGlvbigpOworfQorCitib29sIEltYWdlRGVjb2Rlcjo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChz
aXplX3QgaW5kZXgpCit7CisgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgPD0gaW5k
ZXgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9mcmFtZUJ1ZmZlckNhY2hl
W2luZGV4XS5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlOworfQorCitib29s
IEltYWdlRGVjb2Rlcjo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAg
IGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIDw9IGluZGV4KQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XS5oYXNBbHBoYSgpOwor
fQorCitJbWFnZUZyYW1lKiBJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleFdpdGhvdXRE
ZWNvZGluZyhzaXplX3QgaW5kZXgpCit7CisgICAgcmV0dXJuIG1fZnJhbWVCdWZmZXJDYWNoZS5z
aXplKCkgPiBpbmRleCA/ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdIDogMDsKK30KKwordm9p
ZCBJbWFnZURlY29kZXI6OmVuc3VyZUZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCit7
CisgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgPD0gaW5kZXgpCisgICAgICAgIG1f
ZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoaW5kZXggKyAxKTsKK30KKwogdm9pZCBJbWFnZURlY29k
ZXI6OnByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSgpCiB7CiAgICAgbV9zY2FsZWQgPSBmYWxz
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmgKaW5kZXggOTExODc4ZS4uZWM1NDQxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKQEAgLTg3LDYg
Kzg3LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGVhclBpeGVsRGF0
YSgpOwogICAgICAgICB2b2lkIHplcm9GaWxsUGl4ZWxEYXRhKCk7CiAKKyAgICAgICAgLy8gQ29w
eSBhbGwgaW5mb3JtYXRpb25zIHdpdGhvdXQgYml0bWFwIGRhdGEuCisgICAgICAgIHZvaWQgY29w
eVdpdGhvdXRCaXRtYXBEYXRhKGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzZXRPcmlnaW5hbEZyYW1lUmVjdChvdGhlci5vcmlnaW5hbEZyYW1lUmVjdCgp
KTsKKyAgICAgICAgICAgIHNldFN0YXR1cyhvdGhlci5zdGF0dXMoKSk7CisgICAgICAgICAgICBz
ZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKKyAgICAgICAgICAgIHNldERpc3Bvc2FsTWV0
aG9kKG90aGVyLmRpc3Bvc2FsTWV0aG9kKCkpOworICAgICAgICAgICAgc2V0UHJlbXVsdGlwbHlB
bHBoYShvdGhlci5wcmVtdWx0aXBseUFscGhhKCkpOworICAgICAgICAgICAgc2V0TGFzdERlY29k
ZWRSb3cob3RoZXIubGFzdERlY29kZWRSb3coKSk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBN
YWtlcyB0aGlzIGZyYW1lIGhhdmUgYW4gaW5kZXBlbmRlbnQgY29weSBvZiB0aGUgcHJvdmlkZWQg
aW1hZ2UncwogICAgICAgICAvLyBwaXhlbCBkYXRhLCBzbyB0aGF0IG1vZGlmaWNhdGlvbnMgaW4g
b25lIGZyYW1lIGFyZSBub3QgcmVmbGVjdGVkIGluCiAgICAgICAgIC8vIHRoZSBvdGhlci4gIFJl
dHVybnMgd2hldGhlciB0aGUgY29weSBzdWNjZWVkZWQuCkBAIC0xMTEsNiArMTIyLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBhcmUgd3JpdHRlbi4gIE11c3Qgb25seSBiZSBj
YWxsZWQgb25jZS4gIFJldHVybnMgd2hldGhlciBhbGxvY2F0aW9uCiAgICAgICAgIC8vIHN1Y2Nl
ZWRlZC4KICAgICAgICAgYm9vbCBzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCk7
CisgICAgICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OwogCiAgICAgICAgIC8vIFJldHVybnMgYSBj
YWxsZXItb3duZWQgcG9pbnRlciB0byB0aGUgdW5kZXJseWluZyBuYXRpdmUgaW1hZ2UgZGF0YS4K
ICAgICAgICAgLy8gKEFjdHVhbCB1c2U6IFRoaXMgcG9pbnRlciB3aWxsIGJlIG93bmVkIGJ5IEJp
dG1hcEltYWdlIGFuZCBmcmVlZCBpbgpAQCAtMTE4LDYgKzEzMCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0Owog
CiAgICAgICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdDsKKyAgICAgICAgaW50IGxhc3REZWNvZGVk
Um93KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RGVjb2RlZFJvdzsgfQogICAgICAgICBjb25zdCBJ
bnRSZWN0JiBvcmlnaW5hbEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxGcmFt
ZVJlY3Q7IH0KICAgICAgICAgRnJhbWVTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0dXM7IH0KICAgICAgICAgdW5zaWduZWQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1
cmF0aW9uOyB9CkBAIC0xMjUsNiArMTM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBib29sIHByZW11bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3ByZW11bHRpcGx5QWxw
aGE7IH0KIAogICAgICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEpOworICAgICAgICBp
bmxpbmUgdm9pZCBzZXRMYXN0RGVjb2RlZFJvdyhpbnQgbGFzdERlY29kZWRSb3cpIHsgbV9sYXN0
RGVjb2RlZFJvdyA9IGxhc3REZWNvZGVkUm93OyB9CiAgICAgICAgIHZvaWQgc2V0Q29sb3JQcm9m
aWxlKGNvbnN0IENvbG9yUHJvZmlsZSYpOwogICAgICAgICB2b2lkIHNldE9yaWdpbmFsRnJhbWVS
ZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9vcmlnaW5hbEZyYW1lUmVjdCA9IHI7IH0KICAgICAg
ICAgdm9pZCBzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKTsKQEAgLTE4MSw2ICsxOTUsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIG1fY29s
b3JQcm9maWxlIGFueW1vcmU/CiAgICAgICAgIENvbG9yUHJvZmlsZSBtX2NvbG9yUHJvZmlsZTsK
ICNlbmRpZgorICAgICAgICBpbnQgbV9sYXN0RGVjb2RlZFJvdzsKICAgICAgICAgSW50UmVjdCBt
X29yaWdpbmFsRnJhbWVSZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGly
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1ZmZlciBleGNlcHQg
Zm9yIEdJRiBmcmFtZXMgd2hvc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRoYW4gdGhlCkBAIC0yMjgsNiArMjQzLDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgbV9pc0FsbERhdGFSZWNlaXZlZCA9
IGFsbERhdGFSZWNlaXZlZDsKICAgICAgICAgfQogCisgICAgICAgIFNoYXJlZEJ1ZmZlciogZGF0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXQoKTsgfQorCiAgICAgICAgIC8vIExhemlseS1k
ZWNvZGVzIGVub3VnaCBvZiB0aGUgaW1hZ2UgdG8gZ2V0IHRoZSBzaXplIChpZiBwb3NzaWJsZSku
CiAgICAgICAgIC8vIEZJWE1FOiBSaWdodCBub3cgdGhhdCBoYXMgdG8gYmUgZG9uZSBieSBlYWNo
IHN1YmNsYXNzOyBmYWN0b3IgdGhlCiAgICAgICAgIC8vIGRlY29kZSBjYWxsIG91dCBhbmQgdXNl
IGl0IGhlcmUuCkBAIC0yNzYsNiArMjkzLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgLy8gSW1hZ2VEZWNvZGVyLW93bmVkIHBvaW50ZXIuCiAgICAgICAgIHZpcnR1YWwgSW1hZ2VG
cmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCkgPSAwOwogCisgICAgICAgIHZpcnR1YWwg
ZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KTsKKyAgICAgICAgdmlydHVhbCBib29s
IGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KTsKKyAgICAgICAgLy8gTWFrZSB0aGUgYmVz
dCBlZmZvcnQgZ3Vlc3MgdG8gY2hlY2sgaWYgdGhlIHJlcXVlc3RlZCBmcmFtZSBoYXMgYWxwaGEg
Y2hhbm5lbC4KKyAgICAgICAgdmlydHVhbCBib29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVf
dCk7CisKKyAgICAgICAgLy8gUmV0dXJucyBhbiBJbWFnZURlY29kZXItb3duZWQgcG9pbnRlciB3
aXRob3V0IGRlY29kaW5nLgorICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXhX
aXRob3V0RGVjb2Rpbmcoc2l6ZV90KTsKKworICAgICAgICB2b2lkIGVuc3VyZUZyYW1lQnVmZmVy
QXRJbmRleChzaXplX3QpOworCiAgICAgICAgIHZvaWQgc2V0SWdub3JlR2FtbWFBbmRDb2xvclBy
b2ZpbGUoYm9vbCBmbGFnKSB7IG1faWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgPSBmbGFnOyB9
CiAgICAgICAgIGJvb2wgaWdub3Jlc0dhbW1hQW5kQ29sb3JQcm9maWxlKCkgY29uc3QgeyByZXR1
cm4gbV9pZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJbWFnZURlY29k
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYmxhY2tiZXJy
eS9KUEVHSW1hZ2VEZWNvZGVyLmNwcAppbmRleCA2YTY1ZTYxLi5iZGNhZWYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibGFja2JlcnJ5L0pQRUdJ
bWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JsYWNrYmVycnkvSlBFR0ltYWdlRGVjb2Rlci5jcHAKQEAgLTE1Nyw2ICsxNTcsNyBAQCBp
bnQgSW1hZ2VSZWFkZXI6OmRlY29kZShzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIEltYWdl
RnJhbWUqIGFGcmFtZSkKICAgICAgICAgICAgIGFGcmFtZS0+c2V0UkdCQShpLCBqLCBjdXJQdHJb
MF0sIGN1clB0clsxXSwgY3VyUHRyWzJdLCAyNTUpOwogICAgICAgICAgICAgY3VyUHRyICs9IDM7
CiAgICAgICAgIH0KKyAgICAgICAgYUZyYW1lLT5zZXRMYXN0RGVjb2RlZFJvdyhqKTsKICAgICB9
CiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCmluZGV4IDQzZWY1
MTguLmIyYjgxNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCkBAIC02NCw4ICs2NCwx
NSBAQCB2b2lkIEJNUEltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogCiBib29sIEJNUEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxh
YmxlKCkKIHsKLSAgICBpZiAoIUltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkpCisgICAg
aWYgKCFJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpKSB7CisgICAgICAgIC8vIE9ubHkg
Qk1QSW1hZ2VEZWNvZGVyIG11c3QgbWFrZSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0gaW4gaXNTaXpl
QXZhaWxhYmxlKCksCisgICAgICAgIC8vIGJlY2F1c2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgSW1h
Z2VGcmFtZTo6bV9sYXN0RGVjb2RlZFJvdyBjYW4gYmUgImhlaWdodCAtIDEiLgorICAgICAgICBp
ZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9mcmFtZUJ1
ZmZlckNhY2hlLnJlc2l6ZSgxKTsKKyAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5maXJz
dCgpLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgfQog
ICAgICAgICBkZWNvZGUodHJ1ZSk7CisgICAgfQogCiAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6
aXNTaXplQXZhaWxhYmxlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAppbmRleCA1YzAw
NTUzLi40ZjdlMzE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAKQEAgLTY0LDggKzY0LDEx
IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OmRlY29kZUJNUChib29sIG9ubHlTaXplKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBwcm9jZXNzSW5mb0hlYWRlcigpIHNldCB0aGUgc2l6
ZSwgc28gaWYgdGhhdCdzIGFsbCB3ZSBuZWVkZWQsIHdlJ3JlIGRvbmUuCi0gICAgaWYgKG9ubHlT
aXplKQorICAgIGlmIChvbmx5U2l6ZSkgeworICAgICAgICBpZiAoIW1faXNUb3BEb3duKQorICAg
ICAgICAgICAgbV9idWZmZXItPnNldExhc3REZWNvZGVkUm93KG1fcGFyZW50LT5zaXplKCkuaGVp
Z2h0KCkgLSAxKTsKICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAgLy8gUmVhZCBh
bmQgcHJvY2VzcyB0aGUgYml0bWFza3MsIGlmIG5lZWRlZC4KICAgICBpZiAobV9uZWVkVG9Qcm9j
ZXNzQml0bWFza3MgJiYgIXByb2Nlc3NCaXRtYXNrcygpKQpAQCAtNjI0LDYgKzYyNyw3IEBAIGJv
b2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NSTEVEYXRhKCkKIAogICAgICAgICAgICAgICAgIG1f
ZGVjb2RlZE9mZnNldCArPSAyOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9idWZmZXIt
PnNldExhc3REZWNvZGVkUm93KG1fY29vcmQueSgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAg
LTcxNyw2ICs3MjEsNyBAQCBCTVBJbWFnZVJlYWRlcjo6UHJvY2Vzc2luZ1Jlc3VsdCBCTVBJbWFn
ZVJlYWRlcjo6cHJvY2Vzc05vblJMRURhdGEoYm9vbCBpblJMRSwgaQogICAgICAgICAgICAgICAg
ICAgICAgICAgZ2V0Q29tcG9uZW50KHBpeGVsLCAyKSwgYWxwaGEpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CisgICAgICAgIG1fYnVmZmVyLT5zZXRMYXN0RGVjb2RlZFJvdyhtX2Nvb3JkLnko
KSk7CiAKICAgICAgICAgLy8gU3VjY2Vzcywga2VlcCBnb2luZy4KICAgICAgICAgbV9kZWNvZGVk
T2Zmc2V0ICs9IHBhZGRlZE51bUJ5dGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAppbmRl
eCA3MjRlYTBkLi5mYmQ1MTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApAQCAtMjQ5
LDEwICsyNDksMTQgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2ln
bmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmYKICAgICAgICAgICAgICAgICBi
dWZmZXIuc2V0UkdCQSh4LCB5QmVnaW4sIDAsIDAsIDAsIDApOwogICAgICAgICB9CiAgICAgfQor
ICAgIGJ1ZmZlci5zZXRMYXN0RGVjb2RlZFJvdyh5QmVnaW4pOwogCiAgICAgLy8gVGVsbCB0aGUg
ZnJhbWUgdG8gY29weSB0aGUgcm93IGRhdGEgaWYgbmVlZCBiZS4KLSAgICBpZiAocmVwZWF0Q291
bnQgPiAxKQorICAgIGlmIChyZXBlYXRDb3VudCA+IDEpIHsKICAgICAgICAgYnVmZmVyLmNvcHlS
b3dOVGltZXMoeEJlZ2luLCB4RW5kLCB5QmVnaW4sIHlFbmQpOworICAgICAgICBBU1NFUlQoKHlF
bmQgLSAxKSA+PSAwKTsKKyAgICAgICAgYnVmZmVyLnNldExhc3REZWNvZGVkUm93KHlFbmQgLSAx
KTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM5MCw2ICszOTQsNyBAQCBib29s
IEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpCiAg
ICAgICAgICAgICAgIGZvciAoaW50IHkgPSBwcmV2UmVjdC55KCk7IHkgPCBwcmV2UmVjdC5tYXhZ
KCk7ICsreSkgewogICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IHByZXZSZWN0LngoKTsg
eCA8IHByZXZSZWN0Lm1heFgoKTsgKyt4KQogICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+
c2V0UkdCQSh4LCB5LCAwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0
TGFzdERlY29kZWRSb3coeSk7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKChw
cmV2UmVjdC53aWR0aCgpID4gMCkgJiYgKHByZXZSZWN0LmhlaWdodCgpID4gMCkpCiAgICAgICAg
ICAgICAgICAgICBidWZmZXItPnNldEhhc0FscGhhKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5jcHAKaW5kZXggYmVmNDIwMy4uNDc3OGFhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFn
ZURlY29kZXIuY3BwCkBAIC01NzcsNiArNTc3LDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpv
dXRwdXRTY2FubGluZXMoKQogICAgIGlmICh0dXJib1N3aXp6bGVkKGluZm8tPm91dF9jb2xvcl9z
cGFjZSkpIHsKICAgICAgICAgQVNTRVJUKCFtX3NjYWxlZCk7CiAgICAgICAgIHdoaWxlIChpbmZv
LT5vdXRwdXRfc2NhbmxpbmUgPCBpbmZvLT5vdXRwdXRfaGVpZ2h0KSB7CisgICAgICAgICAgICBi
dWZmZXIuc2V0TGFzdERlY29kZWRSb3coaW5mby0+b3V0cHV0X3NjYW5saW5lKTsKICAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+
KGJ1ZmZlci5nZXRBZGRyKDAsIGluZm8tPm91dHB1dF9zY2FubGluZSkpOwogICAgICAgICAgICAg
aWYgKGpwZWdfcmVhZF9zY2FubGluZXMoaW5mbywgJnJvdywgMSkgIT0gMSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC02MjgsNiArNjI5LDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNv
ZGVyOjpvdXRwdXRTY2FubGluZXMoKQogICAgICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBidWZmZXIuc2V0TGFzdERlY29k
ZWRSb3coZGVzdFkpOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VE
ZWNvZGVyLmNwcAppbmRleCAxNThkZWJiLi5mN2MyMTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNv
ZGVyLmNwcApAQCAtNTIwLDYgKzUyMCw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFp
bGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKIAogICAg
IGlmIChub25Ucml2aWFsQWxwaGEgJiYgIWJ1ZmZlci5oYXNBbHBoYSgpKQogICAgICAgICBidWZm
ZXIuc2V0SGFzQWxwaGEobm9uVHJpdmlhbEFscGhhKTsKKyAgICBidWZmZXIuc2V0TGFzdERlY29k
ZWRSb3coeSk7CiB9CiAKIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpwbmdDb21wbGV0ZSgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdl
RGVjb2RlclNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
c2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcAppbmRleCA1Y2MxMzJjLi5iZDI4MTBiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVj
b2RlclNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHAKQEAgLTQ2LDE3ICs0NiwxNCBAQCBJbWFnZUZyYW1l
JiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAgICAgLy8g
S2VlcCB0aGUgcGl4ZWxzIGxvY2tlZCBzaW5jZSB3ZSB3aWxsIGJlIHdyaXRpbmcgZGlyZWN0bHkg
aW50byB0aGUKICAgICAvLyBiaXRtYXAgdGhyb3VnaG91dCB0aGlzIG9iamVjdCdzIGxpZmV0aW1l
LgogICAgIG1fYml0bWFwLmJpdG1hcCgpLmxvY2tQaXhlbHMoKTsKLSAgICBzZXRPcmlnaW5hbEZy
YW1lUmVjdChvdGhlci5vcmlnaW5hbEZyYW1lUmVjdCgpKTsKLSAgICBzZXRTdGF0dXMob3RoZXIu
c3RhdHVzKCkpOwotICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOwotICAgIHNldERp
c3Bvc2FsTWV0aG9kKG90aGVyLmRpc3Bvc2FsTWV0aG9kKCkpOwotICAgIHNldFByZW11bHRpcGx5
QWxwaGEob3RoZXIucHJlbXVsdGlwbHlBbHBoYSgpKTsKKyAgICBjb3B5V2l0aG91dEJpdG1hcERh
dGEob3RoZXIpOwogICAgIHJldHVybiAqdGhpczsKIH0KIAogdm9pZCBJbWFnZUZyYW1lOjpjbGVh
clBpeGVsRGF0YSgpCiB7CiAgICAgbV9iaXRtYXAuYml0bWFwKCkucmVzZXQoKTsKKyAgICBtX2xh
c3REZWNvZGVkUm93ID0gMDsKICAgICBtX3N0YXR1cyA9IEZyYW1lRW1wdHk7CiAgICAgLy8gTk9U
RTogRG8gbm90IHJlc2V0IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNhY2hl
KCkKICAgICAvLyBjYWxscyB0aGlzIHRvIGZyZWUgdGhlIGJpdG1hcCBkYXRhLCBidXQgb3RoZXIg
ZnVuY3Rpb25zIGxpa2UKQEAgLTc2LDYgKzczLDcgQEAgYm9vbCBJbWFnZUZyYW1lOjpjb3B5Qml0
bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKIAogICAgIG1fYml0bWFwLmJpdG1hcCgp
LnJlc2V0KCk7CiAgICAgY29uc3QgTmF0aXZlSW1hZ2VTa2lhJiBvdGhlckJpdG1hcCA9IG90aGVy
Lm1fYml0bWFwOworICAgIG1fbGFzdERlY29kZWRSb3cgPSBvdGhlci5tX2xhc3REZWNvZGVkUm93
OwogICAgIHJldHVybiBvdGhlckJpdG1hcC5iaXRtYXAoKS5jb3B5VG8oJm1fYml0bWFwLmJpdG1h
cCgpLCBvdGhlckJpdG1hcC5iaXRtYXAoKS5jb25maWcoKSk7CiB9CiAKQEAgLTg0LDYgKzgyLDcg
QEAgYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCkK
ICAgICAvLyBzZXRTaXplKCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UsIGl0IGxlYWtzIG1l
bW9yeSBvdGhlcndpc2UuCiAgICAgQVNTRVJUKCF3aWR0aCgpICYmICFoZWlnaHQoKSk7CiAKKyAg
ICBtX2xhc3REZWNvZGVkUm93ID0gMDsKICAgICBtX2JpdG1hcC5iaXRtYXAoKS5zZXRDb25maWco
U2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKICAgICBp
ZiAoIW1fYml0bWFwLmJpdG1hcCgpLmFsbG9jUGl4ZWxzKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTkyLDYgKzkxLDExIEBAIGJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShpbnQgbmV3V2lk
dGgsIGludCBuZXdIZWlnaHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0ludFNpemUgSW1hZ2VG
cmFtZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFNpemUod2lkdGgoKSwgaGVpZ2h0
KCkpOworfQorCiBOYXRpdmVJbWFnZVB0ciBJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbmV3IE5hdGl2ZUltYWdlU2tpYShtX2JpdG1hcCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJ
bWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
d2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAppbmRleCA2MTI4OTBmLi5hMTQyNzZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFn
ZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAKQEAgLTEzMiwxOSArMTMyLDI2IEBAIGJvb2wgV0VC
UEltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVNpemUpCiAgICAgICAgICAgICByZXR1cm4g
c2V0RmFpbGVkKCk7CiAgICAgfQogCi0gICAgc3dpdGNoIChXZWJQSVVwZGF0ZShtX2RlY29kZXIs
IGRhdGFCeXRlcywgZGF0YVNpemUpKSB7Ci0gICAgY2FzZSBWUDhfU1RBVFVTX09LOgotICAgICAg
ICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOwotICAgICAgICBX
ZWJQSURlbGV0ZShtX2RlY29kZXIpOwotICAgICAgICBtX2RlY29kZXIgPSAwOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIFZQOF9TVEFUVVNfU1VTUEVOREVEOgotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKKyAgICBjb25zdCBWUDhTdGF0dXNDb2RlIHN0YXR1cyA9
IFdlYlBJVXBkYXRlKG1fZGVjb2RlciwgZGF0YUJ5dGVzLCBkYXRhU2l6ZSk7CisgICAgaWYgKHN0
YXR1cyAhPSBWUDhfU1RBVFVTX09LICYmIHN0YXR1cyAhPSBWUDhfU1RBVFVTX1NVU1BFTkRFRCkg
ewogICAgICAgICBXZWJQSURlbGV0ZShtX2RlY29kZXIpOwogICAgICAgICBtX2RlY29kZXIgPSAw
OwogICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgfQorICAgIGludCBsYXN0WSA9IDA7
CisgICAgaWYgKCFXZWJQSURlY0dldFJHQihtX2RlY29kZXIsICZsYXN0WSwgMCwgMCwgMCkpCisg
ICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKKyAgICBBU1NFUlQobGFzdFkgPj0gMCk7CisgICAg
QVNTRVJUKGxhc3RZIDw9IHNpemUoKS5oZWlnaHQoKSk7CisgICAgYnVmZmVyLnNldExhc3REZWNv
ZGVkUm93KGxhc3RZID8gbGFzdFkgLSAxIDogMCk7CisKKyAgICBpZiAoc3RhdHVzID09IFZQOF9T
VEFUVVNfU1VTUEVOREVEKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBidWZmZXIuc2V0
U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOworICAgIFdlYlBJRGVsZXRlKG1fZGVj
b2Rlcik7CisgICAgbV9kZWNvZGVyID0gMDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3gu
Y3BwCmluZGV4IGE5NmY2MTIuLjAxNTI3MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5jcHAKQEAgLTEyNDUsOCArMTI0NSw4IEBAIHZvaWQgSW5saW5lRmxvd0Jv
eDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmCiAgICAgICAgICAgICBjb25zdCBOaW5lUGllY2VJbWFnZSYgYm9yZGVySW1hZ2UgPSBy
ZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJJbWFnZSgpOwogICAgICAgICAgICAgU3R5bGVJbWFn
ZSogYm9yZGVySW1hZ2VTb3VyY2UgPSBib3JkZXJJbWFnZS5pbWFnZSgpOwogICAgICAgICAgICAg
Ym9vbCBoYXNCb3JkZXJJbWFnZSA9IGJvcmRlckltYWdlU291cmNlICYmIGJvcmRlckltYWdlU291
cmNlLT5jYW5SZW5kZXIocmVuZGVyZXIoKSwgc3R5bGVUb1VzZS0+ZWZmZWN0aXZlWm9vbSgpKTsK
LSAgICAgICAgICAgIGlmIChoYXNCb3JkZXJJbWFnZSAmJiAhYm9yZGVySW1hZ2VTb3VyY2UtPmlz
TG9hZGVkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBEb24ndCBwYWludCBhbnl0aGlu
ZyB3aGlsZSB3ZSB3YWl0IGZvciB0aGUgaW1hZ2UgdG8gbG9hZC4KKyAgICAgICAgICAgIGlmICho
YXNCb3JkZXJJbWFnZSAmJiAhYm94TW9kZWxPYmplY3QoKS0+Y2FuUmVuZGVyRW50aXJlSW1hZ2Uo
Ym9yZGVySW1hZ2VTb3VyY2UpKQorICAgICAgICAgICAgICAgIHJldHVybjsgLy8gRG9uJ3QgcGFp
bnQgYW55dGhpbmcgdW50aWwgd2UgY2FuIHJlbmRlciB0aGUgaW1hZ2UgZW50aXJlbHkuCiAKICAg
ICAgICAgICAgIC8vIFRoZSBzaW1wbGUgY2FzZSBpcyB3aGVyZSB3ZSBlaXRoZXIgaGF2ZSBubyBi
b3JkZXIgaW1hZ2Ugb3Igd2UgYXJlIHRoZSBvbmx5IGJveCBmb3IgdGhpcyBvYmplY3QuICBJbiB0
aG9zZQogICAgICAgICAgICAgLy8gY2FzZXMgb25seSBhIHNpbmdsZSBjYWxsIHRvIGRyYXcgaXMg
cmVxdWlyZWQuCkBAIC0xMzIwLDEwICsxMzIwLDEwIEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGFp
bnRNYXNrKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZz
CiAgICAgcGFpbnRGaWxsTGF5ZXJzKHBhaW50SW5mbywgQ29sb3IoKSwgcmVuZGVyZXIoKS0+c3R5
bGUoKS0+bWFza0xheWVycygpLCBwYWludFJlY3QsIGNvbXBvc2l0ZU9wKTsKICAgICAKICAgICBi
b29sIGhhc0JveEltYWdlID0gbWFza0JveEltYWdlICYmIG1hc2tCb3hJbWFnZS0+Y2FuUmVuZGVy
KHJlbmRlcmVyKCksIHJlbmRlcmVyKCktPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7Ci0gICAg
aWYgKCFoYXNCb3hJbWFnZSB8fCAhbWFza0JveEltYWdlLT5pc0xvYWRlZCgpKSB7CisgICAgaWYg
KCFoYXNCb3hJbWFnZSB8fCAhYm94TW9kZWxPYmplY3QoKS0+Y2FuUmVuZGVyRW50aXJlSW1hZ2Uo
bWFza0JveEltYWdlKSkgewogICAgICAgICBpZiAocHVzaFRyYW5zcGFyZW5jeUxheWVyKQogICAg
ICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAg
ICAgIHJldHVybjsgLy8gRG9uJ3QgcGFpbnQgYW55dGhpbmcgd2hpbGUgd2Ugd2FpdCBmb3IgdGhl
IGltYWdlIHRvIGxvYWQuCisgICAgICAgIHJldHVybjsgLy8gRG9uJ3QgcGFpbnQgYW55dGhpbmcg
dW50aWwgd2UgY2FuIHJlbmRlciB0aGUgaW1hZ2UgZW50aXJlbHkuCiAgICAgfQogCiAgICAgLy8g
VGhlIHNpbXBsZSBjYXNlIGlzIHdoZXJlIHdlIGFyZSB0aGUgb25seSBib3ggZm9yIHRoaXMgb2Jq
ZWN0LiAgSW4gdGhvc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXgg
OWIzYjdkZS4uNDg4OGMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAK
QEAgLTc5Nyw3ICs3OTcsNyBAQCBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgUmVuZGVyQm94Ojpk
ZXRlcm1pbmVCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UoR3JhcGhpY3NDbwogCiAgICAgY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlID0gdGhpcy0+c3R5bGUoKTsKIAotICAgIGlmICghc3R5bGUtPmhh
c0JhY2tncm91bmQoKSB8fCAhc3R5bGUtPmhhc0JvcmRlcigpIHx8ICFzdHlsZS0+aGFzQm9yZGVy
UmFkaXVzKCkgfHwgYm9yZGVySW1hZ2VJc0xvYWRlZEFuZENhbkJlUmVuZGVyZWQoKSkKKyAgICBp
ZiAoIXN0eWxlLT5oYXNCYWNrZ3JvdW5kKCkgfHwgIXN0eWxlLT5oYXNCb3JkZXIoKSB8fCAhc3R5
bGUtPmhhc0JvcmRlclJhZGl1cygpIHx8IGNhblJlbmRlckVudGlyZUJvcmRlckltYWdlKCkpCiAg
ICAgICAgIHJldHVybiBCYWNrZ3JvdW5kQmxlZWROb25lOwogCiAgICAgQWZmaW5lVHJhbnNmb3Jt
IGN0bSA9IGNvbnRleHQtPmdldENUTSgpOwpAQCAtODk5LDI2ICs4OTksMjYgQEAgdm9pZCBSZW5k
ZXJCb3g6OnBhaW50TWFza0ltYWdlcyhjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
TGF5b3V0UmVjdCYgcGEKICAgICBib29sIGZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyA9IHZpZXco
KS0+ZnJhbWVWaWV3KCkgJiYgdmlldygpLT5mcmFtZVZpZXcoKS0+cGFpbnRCZWhhdmlvcigpICYg
UGFpbnRCZWhhdmlvckZsYXR0ZW5Db21wb3NpdGluZ0xheWVyczsKICAgICBDb21wb3NpdGVPcGVy
YXRvciBjb21wb3NpdGVPcCA9IENvbXBvc2l0ZVNvdXJjZU92ZXI7CiAKLSAgICBib29sIGFsbE1h
c2tJbWFnZXNMb2FkZWQgPSB0cnVlOworICAgIGJvb2wgYWxsTWFza0ltYWdlc0NhbkJlUmVuZGVy
ZWRFbnRpcmVseSA9IHRydWU7CiAgICAgCiAgICAgaWYgKCFjb21wb3NpdGVkTWFzayB8fCBmbGF0
dGVuQ29tcG9zaXRpbmdMYXllcnMpIHsKICAgICAgICAgcHVzaFRyYW5zcGFyZW5jeUxheWVyID0g
dHJ1ZTsKICAgICAgICAgU3R5bGVJbWFnZSogbWFza0JveEltYWdlID0gc3R5bGUoKS0+bWFza0Jv
eEltYWdlKCkuaW1hZ2UoKTsKICAgICAgICAgY29uc3QgRmlsbExheWVyKiBtYXNrTGF5ZXJzID0g
c3R5bGUoKS0+bWFza0xheWVycygpOwogCi0gICAgICAgIC8vIERvbid0IHJlbmRlciBhIG1hc2tl
ZCBlbGVtZW50IHVudGlsIGFsbCB0aGUgbWFzayBpbWFnZXMgaGF2ZSBsb2FkZWQsIHRvIHByZXZl
bnQgYSBmbGFzaCBvZiB1bm1hc2tlZCBjb250ZW50LgorICAgICAgICAvLyBEb24ndCByZW5kZXIg
YSBtYXNrZWQgZWxlbWVudCB1bnRpbCBhbGwgdGhlIG1hc2sgaW1hZ2VzIGNhbiBiZSByZW5kZXJl
ZCBlbnRpcmVseSwgdG8gcHJldmVudCBhIGZsYXNoIG9mIHVubWFza2VkIGNvbnRlbnQuCiAgICAg
ICAgIGlmIChtYXNrQm94SW1hZ2UpCi0gICAgICAgICAgICBhbGxNYXNrSW1hZ2VzTG9hZGVkICY9
IG1hc2tCb3hJbWFnZS0+aXNMb2FkZWQoKTsKKyAgICAgICAgICAgIGFsbE1hc2tJbWFnZXNDYW5C
ZVJlbmRlcmVkRW50aXJlbHkgJj0gY2FuUmVuZGVyRW50aXJlSW1hZ2UobWFza0JveEltYWdlKTsK
IAogICAgICAgICBpZiAobWFza0xheWVycykKLSAgICAgICAgICAgIGFsbE1hc2tJbWFnZXNMb2Fk
ZWQgJj0gbWFza0xheWVycy0+aW1hZ2VzQXJlTG9hZGVkKCk7CisgICAgICAgICAgICBhbGxNYXNr
SW1hZ2VzQ2FuQmVSZW5kZXJlZEVudGlyZWx5ICY9IG1hc2tMYXllcnMtPmNhblJlbmRlckVudGly
ZUltYWdlKHRoaXMpOwogCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRDb21wb3NpdGVP
cGVyYXRpb24oQ29tcG9zaXRlRGVzdGluYXRpb25Jbik7CiAgICAgICAgIHBhaW50SW5mby5jb250
ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEpOwogICAgICAgICBjb21wb3NpdGVPcCA9IENv
bXBvc2l0ZVNvdXJjZU92ZXI7CiAgICAgfQogCi0gICAgaWYgKGFsbE1hc2tJbWFnZXNMb2FkZWQp
IHsKKyAgICBpZiAoYWxsTWFza0ltYWdlc0NhbkJlUmVuZGVyZWRFbnRpcmVseSkgewogICAgICAg
ICBwYWludEZpbGxMYXllcnMocGFpbnRJbmZvLCBDb2xvcigpLCBzdHlsZSgpLT5tYXNrTGF5ZXJz
KCksIHBhaW50UmVjdCwgQmFja2dyb3VuZEJsZWVkTm9uZSwgY29tcG9zaXRlT3ApOwogICAgICAg
ICBwYWludE5pbmVQaWVjZUltYWdlKHBhaW50SW5mby5jb250ZXh0LCBwYWludFJlY3QsIHN0eWxl
KCksIHN0eWxlKCktPm1hc2tCb3hJbWFnZSgpLCBjb21wb3NpdGVPcCk7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXgg
NWVlZjNjYy4uY2NhNDI4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94TW9kZWxPYmplY3QuaCIKIAorI2luY2x1ZGUgIkJpdG1h
cEltYWdlLmgiCiAjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgpAQCAtOTIx
LDcgKzkyMiw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0
ZW5kZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvCiAgICAgICAgICAgICBSZW5kZXJP
YmplY3QqIGNsaWVudEZvckJhY2tncm91bmRJbWFnZSA9IGJhY2tncm91bmRPYmplY3QgPyBiYWNr
Z3JvdW5kT2JqZWN0IDogdGhpczsKICAgICAgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBi
Z0ltYWdlLT5pbWFnZShjbGllbnRGb3JCYWNrZ3JvdW5kSW1hZ2UsIGdlb21ldHJ5LnRpbGVTaXpl
KCkpOwogICAgICAgICAgICAgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGluZyA9IHNob3VsZFBhaW50
QXRMb3dRdWFsaXR5KGNvbnRleHQsIGltYWdlLmdldCgpLCBiZ0xheWVyLCBnZW9tZXRyeS50aWxl
U2l6ZSgpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgp
LCBzdHlsZSgpLT5jb2xvclNwYWNlKCksIGdlb21ldHJ5LmRlc3RSZWN0KCksIGdlb21ldHJ5LnJl
bGF0aXZlUGhhc2UoKSwgZ2VvbWV0cnkudGlsZVNpemUoKSwgCisgICAgICAgICAgICBjb250ZXh0
LT5kcmF3VGlsZWRJbWFnZSh0b1JldGFpbmVkTW9kZUJpdG1hcEltYWdlSWZQb3NzaWJsZShpbWFn
ZS5nZXQoKSksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgZ2VvbWV0cnkuZGVzdFJlY3QoKSwgZ2Vv
bWV0cnkucmVsYXRpdmVQaGFzZSgpLCBnZW9tZXRyeS50aWxlU2l6ZSgpLAogICAgICAgICAgICAg
ICAgIGNvbXBvc2l0ZU9wLCB1c2VMb3dRdWFsaXR5U2NhbGluZyk7CiAgICAgICAgIH0KICAgICB9
CkBAIC0xMjI0LDcgKzEyMjUsNyBAQCBib29sIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludE5p
bmVQaWVjZUltYWdlKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LAogICAgIGlmICgh
c3R5bGVJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFzdHlsZUltYWdl
LT5pc0xvYWRlZCgpKQorICAgIGlmICghY2FuUmVuZGVyRW50aXJlSW1hZ2Uoc3R5bGVJbWFnZSkp
CiAgICAgICAgIHJldHVybiB0cnVlOyAvLyBOZXZlciBwYWludCBhIG5pbmUtcGllY2UgaW1hZ2Ug
aW5jcmVtZW50YWxseSwgYnV0IGRvbid0IHBhaW50IHRoZSBmYWxsYmFjayBib3JkZXJzIGVpdGhl
ci4KIAogICAgIGlmICghc3R5bGVJbWFnZS0+Y2FuUmVuZGVyKHRoaXMsIHN0eWxlLT5lZmZlY3Rp
dmVab29tKCkpKQpAQCAtMTMwMCwxOSArMTMwMSwxOSBAQCBib29sIFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludE5pbmVQaWVjZUltYWdlKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0
LAogICAgICAgICAvLyBUaGUgdG9wIGxlZnQgY29ybmVyIHJlY3QgaXMgKHR4LCB0eSwgbGVmdFdp
ZHRoLCB0b3BXaWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8gdXNlIGZyb20gd2l0aGluIHRo
ZSBpbWFnZSBpcyBvYnRhaW5lZCBmcm9tIG91ciBzbGljZSwgYW5kIGlzICgwLCAwLCBsZWZ0U2xp
Y2UsIHRvcFNsaWNlKQogICAgICAgICBpZiAoZHJhd1RvcCkKLSAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0KGJvcmRl
ckltYWdlUmVjdC5sb2NhdGlvbigpLCBJbnRTaXplKGxlZnRXaWR0aCwgdG9wV2lkdGgpKSwKKyAg
ICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKHRvUmV0YWluZWRNb2RlQml0bWFw
SW1hZ2VJZlBvc3NpYmxlKGltYWdlLmdldCgpKSwgY29sb3JTcGFjZSwgSW50UmVjdChib3JkZXJJ
bWFnZVJlY3QubG9jYXRpb24oKSwgSW50U2l6ZShsZWZ0V2lkdGgsIHRvcFdpZHRoKSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0KDAsIDAsIGxlZnRT
bGljZSwgdG9wU2xpY2UpLCBvcCk7CiAKICAgICAgICAgLy8gVGhlIGJvdHRvbSBsZWZ0IGNvcm5l
ciByZWN0IGlzICh0eCwgdHkgKyBoIC0gYm90dG9tV2lkdGgsIGxlZnRXaWR0aCwgYm90dG9tV2lk
dGgpCiAgICAgICAgIC8vIFRoZSByZWN0IHRvIHVzZSBmcm9tIHdpdGhpbiB0aGUgaW1hZ2UgaXMg
KDAsIGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2UsIGxlZnRTbGljZSwgYm90b21TbGljZSkKICAg
ICAgICAgaWYgKGRyYXdCb3R0b20pCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJ
bWFnZShpbWFnZS5nZXQoKSwgY29sb3JTcGFjZSwgSW50UmVjdChib3JkZXJJbWFnZVJlY3QueCgp
LCBib3JkZXJJbWFnZVJlY3QubWF4WSgpIC0gYm90dG9tV2lkdGgsIGxlZnRXaWR0aCwgYm90dG9t
V2lkdGgpLAorICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3SW1hZ2UodG9SZXRhaW5l
ZE1vZGVCaXRtYXBJbWFnZUlmUG9zc2libGUoaW1hZ2UuZ2V0KCkpLCBjb2xvclNwYWNlLCBJbnRS
ZWN0KGJvcmRlckltYWdlUmVjdC54KCksIGJvcmRlckltYWdlUmVjdC5tYXhZKCkgLSBib3R0b21X
aWR0aCwgbGVmdFdpZHRoLCBib3R0b21XaWR0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBMYXlvdXRSZWN0KDAsIGltYWdlSGVpZ2h0IC0gYm90dG9tU2xpY2UsIGxl
ZnRTbGljZSwgYm90dG9tU2xpY2UpLCBvcCk7CiAKICAgICAgICAgLy8gUGFpbnQgdGhlIGxlZnQg
ZWRnZS4KICAgICAgICAgLy8gSGF2ZSB0byBzY2FsZSBhbmQgdGlsZSBpbnRvIHRoZSBib3JkZXIg
cmVjdC4KICAgICAgICAgaWYgKHNvdXJjZUhlaWdodCA+IDApCi0gICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0
KGJvcmRlckltYWdlUmVjdC54KCksIGJvcmRlckltYWdlUmVjdC55KCkgKyB0b3BXaWR0aCwgbGVm
dFdpZHRoLAorICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZSh0b1Jl
dGFpbmVkTW9kZUJpdG1hcEltYWdlSWZQb3NzaWJsZShpbWFnZS5nZXQoKSksIGNvbG9yU3BhY2Us
IEludFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSwgYm9yZGVySW1hZ2VSZWN0LnkoKSArIHRvcFdp
ZHRoLCBsZWZ0V2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RpbmF0aW9uSGVpZ2h0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW50UmVjdCgwLCB0b3BTbGljZSwgbGVmdFNsaWNlLCBzb3VyY2VIZWlnaHQp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUo
bGVmdFNpZGVTY2FsZSwgbGVmdFNpZGVTY2FsZSksIEltYWdlOjpTdHJldGNoVGlsZSwgKEltYWdl
OjpUaWxlUnVsZSl2UnVsZSwgb3ApOwpAQCAtMTMyMywxOCArMTMyNCwxOCBAQCBib29sIFJlbmRl
ckJveE1vZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjZUltYWdlKEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0LAogICAgICAgICAvLyBUaGUgdG9wIHJpZ2h0IGNvcm5lciByZWN0IGlzICh0
eCArIHcgLSByaWdodFdpZHRoLCB0eSwgcmlnaHRXaWR0aCwgdG9wV2lkdGgpCiAgICAgICAgIC8v
IFRoZSByZWN0IHRvIHVzZSBmcm9tIHdpdGhpbiB0aGUgaW1hZ2UgaXMgb2J0YWluZWQgZnJvbSBv
dXIgc2xpY2UsIGFuZCBpcyAoaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UsIDAsIHJpZ2h0U2xpY2Us
IHRvcFNsaWNlKQogICAgICAgICBpZiAoZHJhd1RvcCkKLSAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0KGJvcmRlcklt
YWdlUmVjdC5tYXhYKCkgLSByaWdodFdpZHRoLCBib3JkZXJJbWFnZVJlY3QueSgpLCByaWdodFdp
ZHRoLCB0b3BXaWR0aCksCisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdJbWFnZSh0
b1JldGFpbmVkTW9kZUJpdG1hcEltYWdlSWZQb3NzaWJsZShpbWFnZS5nZXQoKSksIGNvbG9yU3Bh
Y2UsIEludFJlY3QoYm9yZGVySW1hZ2VSZWN0Lm1heFgoKSAtIHJpZ2h0V2lkdGgsIGJvcmRlcklt
YWdlUmVjdC55KCksIHJpZ2h0V2lkdGgsIHRvcFdpZHRoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIExheW91dFJlY3QoaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UsIDAs
IHJpZ2h0U2xpY2UsIHRvcFNsaWNlKSwgb3ApOwogCiAgICAgICAgIC8vIFRoZSBib3R0b20gcmln
aHQgY29ybmVyIHJlY3QgaXMgKHR4ICsgdyAtIHJpZ2h0V2lkdGgsIHR5ICsgaCAtIGJvdHRvbVdp
ZHRoLCByaWdodFdpZHRoLCBib3R0b21XaWR0aCkKICAgICAgICAgLy8gVGhlIHJlY3QgdG8gdXNl
IGZyb20gd2l0aGluIHRoZSBpbWFnZSBpcyAoaW1hZ2VXaWR0aCAtIHJpZ2h0U2xpY2UsIGltYWdl
SGVpZ2h0IC0gYm90dG9tU2xpY2UsIHJpZ2h0U2xpY2UsIGJvdHRvbVNsaWNlKQogICAgICAgICBp
ZiAoZHJhd0JvdHRvbSkKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdlKGlt
YWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0KGJvcmRlckltYWdlUmVjdC5tYXhYKCkgLSBy
aWdodFdpZHRoLCBib3JkZXJJbWFnZVJlY3QubWF4WSgpIC0gYm90dG9tV2lkdGgsIHJpZ2h0V2lk
dGgsIGJvdHRvbVdpZHRoKSwKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd0ltYWdl
KHRvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2VJZlBvc3NpYmxlKGltYWdlLmdldCgpKSwgY29sb3JT
cGFjZSwgSW50UmVjdChib3JkZXJJbWFnZVJlY3QubWF4WCgpIC0gcmlnaHRXaWR0aCwgYm9yZGVy
SW1hZ2VSZWN0Lm1heFkoKSAtIGJvdHRvbVdpZHRoLCByaWdodFdpZHRoLCBib3R0b21XaWR0aCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0KGltYWdl
V2lkdGggLSByaWdodFNsaWNlLCBpbWFnZUhlaWdodCAtIGJvdHRvbVNsaWNlLCByaWdodFNsaWNl
LCBib3R0b21TbGljZSksIG9wKTsKIAogICAgICAgICAvLyBQYWludCB0aGUgcmlnaHQgZWRnZS4K
ICAgICAgICAgaWYgKHNvdXJjZUhlaWdodCA+IDApCi0gICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0KGJvcmRl
ckltYWdlUmVjdC5tYXhYKCkgLSByaWdodFdpZHRoLCBib3JkZXJJbWFnZVJlY3QueSgpICsgdG9w
V2lkdGgsIHJpZ2h0V2lkdGgsCisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxl
ZEltYWdlKHRvUmV0YWluZWRNb2RlQml0bWFwSW1hZ2VJZlBvc3NpYmxlKGltYWdlLmdldCgpKSwg
Y29sb3JTcGFjZSwgSW50UmVjdChib3JkZXJJbWFnZVJlY3QubWF4WCgpIC0gcmlnaHRXaWR0aCwg
Ym9yZGVySW1hZ2VSZWN0LnkoKSArIHRvcFdpZHRoLCByaWdodFdpZHRoLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkhlaWdodCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QoaW1hZ2VXaWR0
aCAtIHJpZ2h0U2xpY2UsIHRvcFNsaWNlLCByaWdodFNsaWNlLCBzb3VyY2VIZWlnaHQpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUocmlnaHRT
aWRlU2NhbGUsIHJpZ2h0U2lkZVNjYWxlKSwKQEAgLTEzNDMsMTMgKzEzNDQsMTMgQEAgYm9vbCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnROaW5lUGllY2VJbWFnZShHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCwKIAogICAgIC8vIFBhaW50IHRoZSB0b3AgZWRnZS4KICAgICBpZiAo
ZHJhd1RvcCAmJiBzb3VyY2VXaWR0aCA+IDApCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJh
d1RpbGVkSW1hZ2UoaW1hZ2UuZ2V0KCksIGNvbG9yU3BhY2UsIEludFJlY3QoYm9yZGVySW1hZ2VS
ZWN0LngoKSArIGxlZnRXaWR0aCwgYm9yZGVySW1hZ2VSZWN0LnkoKSwgZGVzdGluYXRpb25XaWR0
aCwgdG9wV2lkdGgpLAorICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKHRv
UmV0YWluZWRNb2RlQml0bWFwSW1hZ2VJZlBvc3NpYmxlKGltYWdlLmdldCgpKSwgY29sb3JTcGFj
ZSwgSW50UmVjdChib3JkZXJJbWFnZVJlY3QueCgpICsgbGVmdFdpZHRoLCBib3JkZXJJbWFnZVJl
Y3QueSgpLCBkZXN0aW5hdGlvbldpZHRoLCB0b3BXaWR0aCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSW50UmVjdChsZWZ0U2xpY2UsIDAsIHNvdXJjZVdpZHRoLCB0
b3BTbGljZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRT
aXplKHRvcFNpZGVTY2FsZSwgdG9wU2lkZVNjYWxlKSwgKEltYWdlOjpUaWxlUnVsZSloUnVsZSwg
SW1hZ2U6OlN0cmV0Y2hUaWxlLCBvcCk7CiAKICAgICAvLyBQYWludCB0aGUgYm90dG9tIGVkZ2Uu
CiAgICAgaWYgKGRyYXdCb3R0b20gJiYgc291cmNlV2lkdGggPiAwKQotICAgICAgICBncmFwaGlj
c0NvbnRleHQtPmRyYXdUaWxlZEltYWdlKGltYWdlLmdldCgpLCBjb2xvclNwYWNlLCBJbnRSZWN0
KGJvcmRlckltYWdlUmVjdC54KCkgKyBsZWZ0V2lkdGgsIGJvcmRlckltYWdlUmVjdC5tYXhZKCkg
LSBib3R0b21XaWR0aCwKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZSh0
b1JldGFpbmVkTW9kZUJpdG1hcEltYWdlSWZQb3NzaWJsZShpbWFnZS5nZXQoKSksIGNvbG9yU3Bh
Y2UsIEludFJlY3QoYm9yZGVySW1hZ2VSZWN0LngoKSArIGxlZnRXaWR0aCwgYm9yZGVySW1hZ2VS
ZWN0Lm1heFkoKSAtIGJvdHRvbVdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RpbmF0aW9uV2lkdGgsIGJvdHRvbVdpZHRoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KGxlZnRTbGljZSwgaW1hZ2VIZWlnaHQg
LSBib3R0b21TbGljZSwgc291cmNlV2lkdGgsIGJvdHRvbVNsaWNlKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFNpemUoYm90dG9tU2lkZVNjYWxlLCBib3R0
b21TaWRlU2NhbGUpLApAQCAtMTM3Nyw3ICsxMzc4LDcgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9i
amVjdDo6cGFpbnROaW5lUGllY2VJbWFnZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCwKICAgICAgICAgaWYgKHZSdWxlID09IFN0cmV0Y2hJbWFnZVJ1bGUpCiAgICAgICAgICAgICBt
aWRkbGVTY2FsZUZhY3Rvci5zZXRIZWlnaHQoZGVzdGluYXRpb25IZWlnaHQgLyBzb3VyY2VIZWln
aHQpOwogICAgICAgICAKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGlsZWRJbWFnZShp
bWFnZS5nZXQoKSwgY29sb3JTcGFjZSwKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3VGls
ZWRJbWFnZSh0b1JldGFpbmVkTW9kZUJpdG1hcEltYWdlSWZQb3NzaWJsZShpbWFnZS5nZXQoKSks
IGNvbG9yU3BhY2UsCiAgICAgICAgICAgICBJbnRSZWN0KGJvcmRlckltYWdlUmVjdC54KCkgKyBs
ZWZ0V2lkdGgsIGJvcmRlckltYWdlUmVjdC55KCkgKyB0b3BXaWR0aCwgZGVzdGluYXRpb25XaWR0
aCwgZGVzdGluYXRpb25IZWlnaHQpLAogICAgICAgICAgICAgSW50UmVjdChsZWZ0U2xpY2UsIHRv
cFNsaWNlLCBzb3VyY2VXaWR0aCwgc291cmNlSGVpZ2h0KSwKICAgICAgICAgICAgIG1pZGRsZVNj
YWxlRmFjdG9yLCAoSW1hZ2U6OlRpbGVSdWxlKWhSdWxlLCAoSW1hZ2U6OlRpbGVSdWxlKXZSdWxl
LCBvcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAppbmRleCA0OGVh
MDU0Li40MDUyYmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAK
QEAgLTMyOCw3ICszMjgsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZgogICAgICAgICAgICAg
ICAgIGlmIChjZW50ZXJZIDwgMCkKICAgICAgICAgICAgICAgICAgICAgY2VudGVyWSA9IDA7CiAg
ICAgICAgICAgICAgICAgaW1hZ2VPZmZzZXQgPSBMYXlvdXRTaXplKGxlZnRCb3JkZXIgKyBsZWZ0
UGFkICsgY2VudGVyWCArIDEsIHRvcEJvcmRlciArIHRvcFBhZCArIGNlbnRlclkgKyAxKTsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0eWxlKCktPmNv
bG9yU3BhY2UoKSwgSW50UmVjdChyb3VuZGVkSW50UG9pbnQocGFpbnRPZmZzZXQgKyBpbWFnZU9m
ZnNldCksIGltYWdlU2l6ZSksIENvbXBvc2l0ZVNvdXJjZU92ZXIsIHNob3VsZFJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZSh0b1Jl
dGFpbmVkTW9kZUJpdG1hcEltYWdlSWZQb3NzaWJsZShpbWFnZS5nZXQoKSksIHN0eWxlKCktPmNv
bG9yU3BhY2UoKSwgSW50UmVjdChyb3VuZGVkSW50UG9pbnQocGFpbnRPZmZzZXQgKyBpbWFnZU9m
ZnNldCksIGltYWdlU2l6ZSksIENvbXBvc2l0ZVNvdXJjZU92ZXIsIHNob3VsZFJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uKCkpOwogICAgICAgICAgICAgICAgIGVycm9yUGljdHVyZURyYXduID0gdHJ1
ZTsKICAgICAgICAgICAgIH0KIApAQCAtNDUwLDcgKzQ1MCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6
OnBhaW50SW50b1JlY3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0
JiByZWN0CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IgPSBpbWFnZUVs
dCA/IGltYWdlRWx0LT5jb21wb3NpdGVPcGVyYXRvcigpIDogQ29tcG9zaXRlU291cmNlT3ZlcjsK
ICAgICBJbWFnZSogaW1hZ2UgPSBtX2ltYWdlUmVzb3VyY2UtPmltYWdlKCkuZ2V0KCk7CiAgICAg
Ym9vbCB1c2VMb3dRdWFsaXR5U2NhbGluZyA9IHNob3VsZFBhaW50QXRMb3dRdWFsaXR5KGNvbnRl
eHQsIGltYWdlLCBpbWFnZSwgYWxpZ25lZFJlY3Quc2l6ZSgpKTsKLSAgICBjb250ZXh0LT5kcmF3
SW1hZ2UobV9pbWFnZVJlc291cmNlLT5pbWFnZShhbGlnbmVkUmVjdC53aWR0aCgpLCBhbGlnbmVk
UmVjdC5oZWlnaHQoKSkuZ2V0KCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwgYWxpZ25lZFJlY3Qs
IGNvbXBvc2l0ZU9wZXJhdG9yLCBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpLCB1c2VM
b3dRdWFsaXR5U2NhbGluZyk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKHRvUmV0YWluZWRNb2Rl
Qml0bWFwSW1hZ2VJZlBvc3NpYmxlKGltZy5nZXQoKSksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSwg
YWxpZ25lZFJlY3QsIGNvbXBvc2l0ZU9wZXJhdG9yLCBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRh
dGlvbigpLCB1c2VMb3dRdWFsaXR5U2NhbGluZyk7CiB9CiAKIGJvb2wgUmVuZGVySW1hZ2U6OmJv
eFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dyb3VuZChCYWNrZ3JvdW5kQmxlZWRBdm9pZGFu
Y2UgYmxlZWRBdm9pZGFuY2UsIElubGluZUZsb3dCb3gqKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCBlMTEwYTRkLi4xYmVk
YmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgog
CiAjaW5jbHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkJpdG1hcEltYWdl
LmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkNTU1By
b3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKQEAgLTEwODEsMTAgKzEwODIsMjMg
QEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUltYWdlQ29udGVudHMoKQogICAgIGlm
ICghY2FjaGVkSW1hZ2UtPmlzTG9hZGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIFRo
aXMgaXMgYSBuby1vcCBpZiB0aGUgbGF5ZXIgZG9lc24ndCBoYXZlIGFuIGlubmVyIGxheWVyIGZv
ciB0aGUgaW1hZ2UuCi0gICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvSW1hZ2UoaW1h
Z2UpOworICAgIC8vIFdlIGhhdmUgdG8gd2FpdCB1bnRpbCB0aGUgaW1hZ2UgaXMgZnVsbHkgZGVj
b2RlZCBiZWZvcmUgc2V0dGluZyBpdCBvbiB0aGUgbGF5ZXIuCisgICAgaWYgKGltYWdlLT5pc0Jp
dG1hcEltYWdlKCkgJiYgIXN0YXRpY19jYXN0PEJpdG1hcEltYWdlKj4oaW1hZ2UpLT5jdXJyZW50
RnJhbWVJc0NvbXBsZXRlKCkpIHsKKyAgICAgICAgLy8gVHJpZ2dlciByZXRhaW5lZCBtb2RlIGlt
YWdlIGRlY29kaW5nLgorICAgICAgICB0b1JldGFpbmVkTW9kZUJpdG1hcEltYWdlSWZQb3NzaWJs
ZShpbWFnZSktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBuZXdOYXRpdmVJbWFnZVB0ciA9IGltYWdlLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmIChuZXdOYXRpdmVJbWFnZVB0ciAh
PSBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cikgeworICAgICAgICBtX2NvbXBvc2l0ZWROYXRp
dmVJbWFnZVB0ciA9IG5ld05hdGl2ZUltYWdlUHRyOworCisgICAgICAgIC8vIFRoaXMgaXMgYSBu
by1vcCBpZiB0aGUgbGF5ZXIgZG9lc24ndCBoYXZlIGFuIGlubmVyIGxheWVyIGZvciB0aGUgaW1h
Z2UuCisgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsK
KyAgICB9CisKICAgICB1cGRhdGVEcmF3c0NvbnRlbnQoKTsKLSAgICAKKwogICAgIC8vIEltYWdl
IGFuaW1hdGlvbiBpcyAibGF6eSIsIGluIHRoYXQgaXQgYXV0b21hdGljYWxseSBzdG9wcyB1bmxl
c3Mgc29tZW9uZSBpcyBkcmF3aW5nCiAgICAgLy8gdGhlIGltYWdlLiBTbyB3ZSBoYXZlIHRvIGtp
Y2sgdGhlIGFuaW1hdGlvbiBlYWNoIHRpbWU7IHRoaXMgaGFzIHRoZSBkb3duc2lkZSB0aGF0IHRo
ZQogICAgIC8vIGltYWdlIHdpbGwga2VlcCBhbmltYXRpbmcsIGV2ZW4gaWYgaXRzIGxheWVyIGlz
IG5vdCB2aXNpYmxlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5oCmluZGV4IDBmNDJkM2YuLjBjZTQ3YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKQEAgLTI0MSw2ICsyNDEsOCBAQCBwcml2YXRlOgog
ICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX2xheWVyRm9yVmVydGljYWxTY3JvbGxiYXI7CiAg
ICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXI7CiAKKyAgICBO
YXRpdmVJbWFnZVB0ciBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cjsKKwogICAgIEludFJlY3Qg
bV9jb21wb3NpdGVkQm91bmRzOwogCiAgICAgYm9vbCBtX2FydGlmaWNpYWxseUluZmxhdGVkQm91
bmRzOyAgICAgIC8vIGJvdW5kcyBoYWQgdG8gYmUgbWFkZSBub24temVybyB0byBtYWtlIHRyYW5z
Zm9ybS1vcmlnaW4gd29yawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAppbmRleCA5MDllY2IzLi45ZTI3NDY3IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5o
IgogCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgi
CiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ29udGVudERhdGEuaCIKICNpbmNsdWRl
ICJDdXJzb3JMaXN0LmgiCkBAIC04MDMsMTIgKzgwNCwzMCBAQCBzdGF0aWMgYm9vbCBtdXN0UmVw
YWludEZpbGxMYXllcnMoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgRmlsbExh
eWVyKgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJPYmplY3Q6OmJvcmRlcklt
YWdlSXNMb2FkZWRBbmRDYW5CZVJlbmRlcmVkKCkgY29uc3QKKy8vIFdpdGggcGFyYWxsZWwgaW1h
Z2UgZGVjb2RlcnMsIGxvYWRpbmcgZG9uZSBkb2VzIG5vdCBhbHdheXMgbWVhbiB0aGUgd2hvbGUg
aW1hZ2UgY2FuIGJlIHJlbmRlcmVkLgorLy8gSWYgdGhlIGdpdmVuIGltYWdlIGlzIGEgQml0bWFw
SW1hZ2UsIHdlIG5lZWQgdG8gY2hlY2sgaWYgZGVjb2RpbmcgaXMgY29tcGxldGVkIGluIGFkZGl0
aW9uIHRvIGxvYWRpbmcgZG9uZS4KK2Jvb2wgUmVuZGVyT2JqZWN0OjpjYW5SZW5kZXJFbnRpcmVJ
bWFnZShTdHlsZUltYWdlKiBzdHlsZUltYWdlKSBjb25zdAoreworICAgIGlmIChzdHlsZUltYWdl
ICYmICFzdHlsZUltYWdlLT5pc0xvYWRlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoc3R5bGVJbWFnZSAmJiAoc3R5bGVJbWFnZS0+aXNDYWNoZWRJbWFnZSgpIHx8IHN0eWxl
SW1hZ2UtPmlzQ2FjaGVkSW1hZ2VTZXQoKSkpIHsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFn
ZSA9IHN0eWxlSW1hZ2UtPmltYWdlKGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4odGhpcyksIElu
dFNpemUoKSk7CisgICAgICAgIGlmIChpbWFnZS5nZXQoKSAmJiBpbWFnZS0+aXNCaXRtYXBJbWFn
ZSgpICYmICFzdGF0aWNfY2FzdDxCaXRtYXBJbWFnZSo+KGltYWdlLmdldCgpKS0+Y3VycmVudEZy
YW1lSXNDb21wbGV0ZSgpKSB7CisgICAgICAgICAgICAvLyBUcmlnZ2VyIHJldGFpbmVkIG1vZGUg
aW1hZ2UgZGVjb2RpbmcuCisgICAgICAgICAgICB0b1JldGFpbmVkTW9kZUJpdG1hcEltYWdlSWZQ
b3NzaWJsZShpbWFnZS5nZXQoKSktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUmVuZGVyT2JqZWN0OjpjYW5SZW5kZXJFbnRpcmVCb3JkZXJJbWFnZSgpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKHN0eWxlKCktPmhhc0JvcmRlcigpKTsKIAogICAgIFN0eWxlSW1h
Z2UqIGJvcmRlckltYWdlID0gc3R5bGUoKS0+Ym9yZGVySW1hZ2UoKS5pbWFnZSgpOwotICAgIHJl
dHVybiBib3JkZXJJbWFnZSAmJiBib3JkZXJJbWFnZS0+Y2FuUmVuZGVyKHRoaXMsIHN0eWxlKCkt
PmVmZmVjdGl2ZVpvb20oKSkgJiYgYm9yZGVySW1hZ2UtPmlzTG9hZGVkKCk7CisgICAgcmV0dXJu
IGJvcmRlckltYWdlICYmIGJvcmRlckltYWdlLT5jYW5SZW5kZXIodGhpcywgc3R5bGUoKS0+ZWZm
ZWN0aXZlWm9vbSgpKSAmJiBjYW5SZW5kZXJFbnRpcmVJbWFnZShib3JkZXJJbWFnZSk7CiB9CiAK
IGJvb2wgUmVuZGVyT2JqZWN0OjptdXN0UmVwYWludEJhY2tncm91bmRPckJvcmRlcigpIGNvbnN0
CkBAIC04MjQsNyArODQzLDcgQEAgYm9vbCBSZW5kZXJPYmplY3Q6Om11c3RSZXBhaW50QmFja2dy
b3VuZE9yQm9yZGVyKCkgY29uc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIAogICAgIC8v
IE91ciBmaWxsIGxheWVycyBhcmUgb2suICBMZXQncyBjaGVjayBib3JkZXIuCi0gICAgaWYgKHN0
eWxlKCktPmhhc0JvcmRlcigpICYmIGJvcmRlckltYWdlSXNMb2FkZWRBbmRDYW5CZVJlbmRlcmVk
KCkpCisgICAgaWYgKHN0eWxlKCktPmhhc0JvcmRlcigpICYmIGNhblJlbmRlckVudGlyZUJvcmRl
ckltYWdlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGU2ZTZlNTAuLmE1NmJlN2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTUxMyw3ICs1MTMs
OCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fYml0Zmll
bGRzLmhhc0xheWVyKCk7IH0KICAgICAKICAgICBib29sIGhhc0JveERlY29yYXRpb25zKCkgY29u
c3QgeyByZXR1cm4gbV9iaXRmaWVsZHMucGFpbnRCYWNrZ3JvdW5kKCk7IH0KLSAgICBib29sIGJv
cmRlckltYWdlSXNMb2FkZWRBbmRDYW5CZVJlbmRlcmVkKCkgY29uc3Q7CisgICAgYm9vbCBjYW5S
ZW5kZXJFbnRpcmVJbWFnZShTdHlsZUltYWdlKikgY29uc3Q7CisgICAgYm9vbCBjYW5SZW5kZXJF
bnRpcmVCb3JkZXJJbWFnZSgpIGNvbnN0OwogICAgIGJvb2wgbXVzdFJlcGFpbnRCYWNrZ3JvdW5k
T3JCb3JkZXIoKSBjb25zdDsKICAgICBib29sIGhhc0JhY2tncm91bmQoKSBjb25zdCB7IHJldHVy
biBzdHlsZSgpLT5oYXNCYWNrZ3JvdW5kKCk7IH0KICAgICBib29sIG5lZWRzTGF5b3V0KCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxsTGF5ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5jcHAKaW5kZXgg
MTk1YTA1Yy4uYzRhYjFjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL0ZpbGxMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0Zp
bGxMYXllci5jcHAKQEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJGaWxsTGF5ZXIuaCIKIAorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBTYW1lU2l6ZUFzRmlsbExheWVyIHsKQEAgLTI2OSwxMSAr
MjcxLDExIEBAIGJvb2wgRmlsbExheWVyOjpjb250YWluc0ltYWdlKFN0eWxlSW1hZ2UqIHMpIGNv
bnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEZpbGxMYXllcjo6aW1hZ2VzQXJlTG9h
ZGVkKCkgY29uc3QKK2Jvb2wgRmlsbExheWVyOjpjYW5SZW5kZXJFbnRpcmVJbWFnZShSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKSBjb25zdAogewogICAgIGNvbnN0IEZpbGxMYXllciogY3VycjsKICAg
ICBmb3IgKGN1cnIgPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7Ci0gICAgICAg
IGlmIChjdXJyLT5tX2ltYWdlICYmICFjdXJyLT5tX2ltYWdlLT5pc0xvYWRlZCgpKQorICAgICAg
ICBpZiAoY3Vyci0+bV9pbWFnZSAmJiAhcmVuZGVyZXItPmNhblJlbmRlckVudGlyZUltYWdlKGN1
cnItPm1faW1hZ2UuZ2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0ZpbGxMYXllci5oCmluZGV4IDdmMWNlYjEu
LmUyMTBkNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9GaWxs
TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvRmlsbExheWVyLmgK
QEAgLTM0LDYgKzM0LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBSZW5kZXJP
YmplY3Q7CisKIHN0cnVjdCBGaWxsU2l6ZSB7CiAgICAgRmlsbFNpemUoKQogICAgICAgICA6IHR5
cGUoU2l6ZUxlbmd0aCkKQEAgLTEyOCw3ICsxMzAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
Ym9vbCBjb250YWluc0ltYWdlKFN0eWxlSW1hZ2UqKSBjb25zdDsKLSAgICBib29sIGltYWdlc0Fy
ZUxvYWRlZCgpIGNvbnN0OworICAgIGJvb2wgY2FuUmVuZGVyRW50aXJlSW1hZ2UoUmVuZGVyT2Jq
ZWN0KikgY29uc3Q7CiAKICAgICBib29sIGhhc0ltYWdlKCkgY29uc3QKICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCmluZGV4IDU2YmU1
Y2QuLjJhZTdjZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHSW1hZ2UuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZUNvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmgiCisjaW5jbHVkZSAiUmV0YWluZWRNb2RlQml0bWFwSW1hZ2Uu
aCIKICNpbmNsdWRlICJTVkdJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdMZW5ndGguaCIK
ICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCkBAIC0xMzQsNyArMTM1LDcgQEAg
dm9pZCBSZW5kZXJTVkdJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExh
eW91dFBvaW50JikKICAgICAgICAgICAgICAgICBTVkdJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVu
dCA9IHN0YXRpY19jYXN0PFNWR0ltYWdlRWxlbWVudCo+KG5vZGUoKSk7CiAgICAgICAgICAgICAg
ICAgaW1hZ2VFbGVtZW50LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCkudHJhbnNmb3JtUmVjdChkZXN0
UmVjdCwgc3JjUmVjdCk7CiAKLSAgICAgICAgICAgICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0
LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBz
cmNSZWN0KTsKKyAgICAgICAgICAgICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5kcmF3SW1h
Z2UodG9SZXRhaW5lZE1vZGVCaXRtYXBJbWFnZUlmUG9zc2libGUoaW1hZ2UuZ2V0KCkpLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAppbmRleCBlNjNkNjQx
Li4xMWI5MWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaApAQCAtNzQs
MTEgKzc0LDYgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBkYXRhQ2hhbmdlZChib29s
IGFsbERhdGFSZWNlaXZlZCk7CiAKLSAgICAvLyBGSVhNRTogU1ZHSW1hZ2VzIGFyZSB1bmRlcnJl
cG9ydGluZyBkZWNvZGVkIHNpemVzIGFuZCB3aWxsIGJlIHVuYWJsZQotICAgIC8vIHRvIHBydW5l
IGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0LgotICAgIHZp
cnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCkgeyB9Ci0gICAgdmlydHVhbCB1bnNp
Z25lZCBkZWNvZGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQogICAgIHZpcnR1YWwgTmF0
aXZlSW1hZ2VQdHIgZnJhbWVBdEluZGV4KHNpemVfdCkgeyByZXR1cm4gMDsgfQogCiAgICAgU1ZH
SW1hZ2UoSW1hZ2VPYnNlcnZlciopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBmYmMx
OTQ3Li4wZGU4MWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBA
CisyMDEyLTA4LTAxICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0Pgor
CisgICAgICAgIFJlbmFtZSBjcmVhdGVGcmFtZUF0SW5kZXggdG8gcmVxdWVzdEZyYW1lQXRJbmRl
eC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNDQz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCByZXBsYWNlZCBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4IHRvCisgICAgICAg
IEltYWdlU291cmNlOjpyZXF1ZXN0RnJhbWVBdEluZGV4LCBzbyBJIGFtZW5kZWQgV2ViSW1hZ2VT
a2lhIHRvIHVzZQorICAgICAgICBjaGFuZ2VkIEltYWdlU291cmNlIGNvcnJlY3RseS4KKworICAg
ICAgICAqIHNyYy9XZWJJbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbWFnZTo6
ZnJvbURhdGEpOgorCiAyMDEyLTA4LTAzICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgVjhQcm94eTo6cmV0cmlldmUoKikgbGVhZHMgdG8gcmVhbGx5IG9iZnVzY2F0
ZWQgY29kZSBhbmQgc2hvdWxkIGJlIHJlbW92ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJbWFnZVNraWEuY3BwCmluZGV4IDM2ZGFiYWMuLmQxY2MwZTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkltYWdlU2tpYS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VTa2lhLmNwcApAQCAtNzcsNyArNzcsNyBAQCBXZWJJ
bWFnZSBXZWJJbWFnZTo6ZnJvbURhdGEoY29uc3QgV2ViRGF0YSYgZGF0YSwgY29uc3QgV2ViU2l6
ZSYgZGVzaXJlZFNpemUpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBPd25QdHI8TmF0aXZlSW1h
Z2VTa2lhPiBmcmFtZSA9IGFkb3B0UHRyKHNvdXJjZS5jcmVhdGVGcmFtZUF0SW5kZXgoaW5kZXgp
KTsKKyAgICBPd25QdHI8TmF0aXZlSW1hZ2VTa2lhPiBmcmFtZSA9IGFkb3B0UHRyKHNvdXJjZS5y
ZXF1ZXN0RnJhbWVBdEluZGV4KGluZGV4KSk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuIFdlYkltYWdlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvRHJhZ0ltYWdlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0RyYWdJ
bWFnZVRlc3QuY3BwCmluZGV4IGY3NWU4NWMuLjYwZjhiYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcApAQCAtNzIsMTYgKzcyLDYgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9uYXRpdmVJbWFnZS5nZXQoKTsKICAgICB9CiAKLSAgICAv
LyBTdHViIGltcGxlbWVudGF0aW9ucyBvZiBwdXJlIHZpcnR1YWwgSW1hZ2UgZnVuY3Rpb25zLgot
ICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZGVjb2RlZFNpemUoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIDB1OwotICAgIH0KLQogICAgIHZpcnR1YWwgdm9pZCBkcmF3KFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6Q29sb3JTcGFj
ZSwKICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNocm9taXVt
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1
bVRlc3QuY3BwCmluZGV4IGE1Y2E1NTEuLmM5N2QzOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtODgs
MTYgKzg4LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9uYXRpdmVJbWFnZS5nZXQoKTsK
ICAgICB9CiAKLSAgICAvLyBTdHViIGltcGxlbWVudGF0aW9ucyBvZiBwdXJlIHZpcnR1YWwgSW1h
Z2UgZnVuY3Rpb25zLgotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95RGVjb2RlZERhdGEoYm9vbCkK
LSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZGVjb2RlZFNpemUoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIDB1OwotICAgIH0KLQogICAgIHZpcnR1YWwgdm9p
ZCBkcmF3KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2Vi
Q29yZTo6Q29sb3JTcGFjZSwKICAgICAgICAgICAgICAgICAgICAgICBXZWJDb3JlOjpDb21wb3Np
dGVPcGVyYXRvcikKLS0gCjEuNy45LjUKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>