<?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>225140</bug_id>
          
          <creation_ts>2021-04-27 23:04:13 -0700</creation_ts>
          <short_desc>Add support for display-p3 canvas and ImageData</short_desc>
          <delta_ts>2022-08-05 17:36:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Canvas</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>225173</dependson>
    
    <dependson>225177</dependson>
    
    <dependson>225237</dependson>
    
    <dependson>225263</dependson>
    
    <dependson>225271</dependson>
    
    <dependson>225280</dependson>
    
    <dependson>225286</dependson>
    
    <dependson>225813</dependson>
    
    <dependson>225836</dependson>
    
    <dependson>225841</dependson>
    
    <dependson>229021</dependson>
    
    <dependson>229022</dependson>
    
    <dependson>229023</dependson>
    
    <dependson>229024</dependson>
    
    <dependson>229025</dependson>
    
    <dependson>230209</dependson>
    
    <dependson>231062</dependson>
    
    <dependson>231145</dependson>
          <blocked>188320</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Christopher Cameron">ccameron</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>dino</cc>
    
    <cc>fserb</cc>
    
    <cc>heycam</cc>
    
    <cc>jonlee</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1754919</commentid>
    <comment_count>0</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2021-04-27 23:04:13 -0700</bug_when>
    <thetext>Proposal document:
https://github.com/WICG/canvas-color-space/blob/main/CanvasColorSpaceProposal.md

Syntax for creating such a canvas is
     var context = canvas.getContext(&apos;2d&apos;, {colorSpace:&apos;display-p3&apos;});

Similar syntax for use with ImageData.

Corresponding bugs:
Chromium: crbug.com/1083693
Mozilla: https://bugzilla.mozilla.org/show_bug.cgi?id=1703654</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755234</commentid>
    <comment_count>1</comment_count>
      <attachid>427308</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-04-28 16:51:47 -0700</bug_when>
    <thetext>Created attachment 427308
basic test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755235</commentid>
    <comment_count>2</comment_count>
      <attachid>427309</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-04-28 16:54:54 -0700</bug_when>
    <thetext>Created attachment 427309
Proof of concept patch that gets things working</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1755896</commentid>
    <comment_count>3</comment_count>
      <attachid>427479</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-04-30 18:25:12 -0700</bug_when>
    <thetext>Created attachment 427479
Now with ImageData support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756003</commentid>
    <comment_count>4</comment_count>
    <who name="Christopher Cameron">ccameron</who>
    <bug_when>2021-05-01 16:23:55 -0700</bug_when>
    <thetext>Very excited to see this!

There are a couple of things that changed from the proposal to what was agreed upon in the WhatWG PR. To draw your attention to them:

* The PredefinedColorSpace interface to query for valid PredefinedColorSpaceEnum values is gone. There&apos;s just PredefinedColorSpace as an enum (with &quot;srgb&quot; and &quot;display-p3&quot; as options). 

* For ImageDataSettings, the PredefinedColorSpace is optional. The canvas methods getImageData and createImageData will use the color space of the canvas if colorSpace was not specified in ImageDataSettings.

* The ImageBitmap part was taken out (ImageBitmapOptions will change to have an optional PredefinedColorSpace, rather than a required one, so that the ImageBitmap will default internally to &quot;whatever is the best internal color space&quot;)

I think that&apos;s it. We&apos;re working on upstreaming WPT tests for all of this. Feel free to reach out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756063</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-02 10:39:55 -0700</bug_when>
    <thetext>(In reply to Christopher Cameron from comment #4)
&gt; Very excited to see this!
&gt; 
&gt; There are a couple of things that changed from the proposal to what was
&gt; agreed upon in the WhatWG PR. To draw your attention to them:

Great. Thanks for letting me know and continuing to drive this.

Is that PR up for review anywhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756363</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-03 16:43:07 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #5)
&gt; (In reply to Christopher Cameron from comment #4)
&gt; &gt; Very excited to see this!
&gt; &gt; 
&gt; &gt; There are a couple of things that changed from the proposal to what was
&gt; &gt; agreed upon in the WhatWG PR. To draw your attention to them:
&gt; 
&gt; Great. Thanks for letting me know and continuing to drive this.
&gt; 
&gt; Is that PR up for review anywhere?

Found it. Better yet, it is now in main!

https://github.com/whatwg/html/commit/85cb202a052c462bd6830b3dda96e7edbd1dcd75</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756365</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-03 16:44:06 -0700</bug_when>
    <thetext>Tracking initial support (no ImageData) in https://bugs.webkit.org/show_bug.cgi?id=225286.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756820</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-04 23:05:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/77542907&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760362</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-14 21:05:38 -0700</bug_when>
    <thetext>ImageData support now being worked on in https://bugs.webkit.org/show_bug.cgi?id=225841.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760364</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-14 21:13:18 -0700</bug_when>
    <thetext>Additional things to do after ImageData:
- Ensure it works and add tests for drawing non-sRGB CanvasImageSources (image, videos, other canvases) into canvas (including patterns).
- Ensure it works and add tests for drawing non-sRGB gradients.
- Ensure it works and add tests for drawing non-sRGB shadows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1889291</commentid>
    <comment_count>11</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2022-08-05 17:35:14 -0700</bug_when>
    <thetext>We can consider this done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1889293</commentid>
    <comment_count>12</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2022-08-05 17:36:12 -0700</bug_when>
    <thetext>*** Bug 188320 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>427308</attachid>
            <date>2021-04-28 16:51:47 -0700</date>
            <delta_ts>2021-04-28 16:51:47 -0700</delta_ts>
            <desc>basic test case</desc>
            <filename>index.html</filename>
            <type>text/html</type>
            <size>3472</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">PHN0eWxlPgogICAgLnRlc3QgPiAqIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owog
ICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICBoZWln
aHQ6IDEwMHB4OwogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgICBtYXJnaW46IDBweDsKICAg
IH0KICAgIAogICAgI3AzLWNzcyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogY29sb3IoZGlz
cGxheS1wMyAxIDAgMCAvIDEpOwogICAgfQoKICAgICNzcmdiLWNzcyB7CiAgICAgICAgYmFja2dy
b3VuZC1jb2xvcjogY29sb3Ioc3JnYiAxIDAgMCAvIDEpOwogICAgfQoKPC9zdHlsZT4KPGRpdiBz
dHlsZT0iZGlzcGxheTpncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDUwcHggMTEwcHggMTEw
cHgiPgo8ZGl2IGNsYXNzPSJ0ZXN0Ij4KICAgIDxzcGFuIHN0eWxlPSJib3JkZXItdG9wOiBzb2xp
ZCAxcHggYmxhY2s7IGhlaWdodCAxMDBweCI+Q1NTPC9zcGFuPgogICAgPHNwYW4gc3R5bGU9ImJv
cmRlci10b3A6IHNvbGlkIDFweCBibGFjazsgaGVpZ2h0IDEwMHB4Ij5JbWFnZTwvc3Bhbj4KICAg
IDxzcGFuIHN0eWxlPSJib3JkZXItdG9wOiBzb2xpZCAxcHggYmxhY2s7IGhlaWdodCAxMDBweCI+
Q2FudmFzPC9zcGFuPgo8L2Rpdj4KPGRpdiBjbGFzcz0idGVzdCI+CiAgICA8c3BhbiAgICBpZD0i
cDMtY3NzIj48L3NwYW4+CiAgICA8aW1nICAgICBzcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxp
VkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBR1FBQUFCa0NBWUFBQUJ3NHBWVUFBQUJZV2xEUTFCclEw
ZERiMnh2Y2xOd1lXTmxSR2x6Y0d4aGVWQXpBQUFva1dOZ1lGSkpMQ2pJWVdGZ1lNak5LeWtLY25k
U2lJaU1VbUIveU1BT2hMd01ZZ3dLaWNuRkJZNEJBVDVBSlF3d0doVjh1OGJBQ0tJdjY0TE1PaVUx
dFVtMVhzRFhZcWJ3MVl1dlJKc3cxYU1BcnBUVTRtUWcvUWVJVTVNTGlrb1lHQmhUZ0d6bDhwSUNF
THNEeUJZcEFqb0t5SjREWXFkRDJCdEE3Q1FJK3doWVRVaVFNNUI5QThoV1NNNUlCSnJCK0FQSTFr
bENFazlIWWtQdEJRRnVsOHppZ3B6RVNvVUFZd0t1SlFPVXBGYVVnR2puL0lMS29zejBqQklGUjJB
b3BTcDQ1aVhyNlNnWUdSaWFNekNBd2h5aStuTWdPQ3daeGM0Z3hKcnZNekRZN3YvLy8vOXVoSmpY
ZmdhR2pVQ2RYRHNSWWhvV0RBeUMzQXdNSjNZV0pCWWxnb1dZZ1pncExZMkI0ZE55QmdiZVNBWUc0
UXRBUGRIRmFjWkdZSGxHSGljR0J0WjcvLzkvVm1OZ1lKL013UEIzd3YvL3Z4ZjkvLzkzTVZEekhR
YUdBM2tBRlNGbDdqWEgwZnNBQUFCRVpWaEpaazFOQUNvQUFBQUlBQUlCRWdBREFBQUFBUUFCQUFD
SGFRQUVBQUFBQVFBQUFDWUFBQUFBQUFLZ0FnQUVBQUFBQVFBQUFHU2dBd0FFQUFBQUFRQUFBR1FB
QUFBQTVjdEw3d0FBQVZscFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR4NE9uaHRj
RzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWxoTlVD
QkRiM0psSURZdU1DNHdJajRLSUNBZ1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4
dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNEtJQ0Fn
SUNBZ1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSUtJQ0FnSUNBZ0lDQWdJ
Q0FnZUcxc2JuTTZkR2xtWmowaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTBhV1ptTHpFdU1D
OGlQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFBjbWxsYm5SaGRHbHZiajR4UEM5MGFXWm1Pazl5YVdW
dWRHRjBhVzl1UGdvZ0lDQWdJQ0E4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRLSUNBZ1BDOXlaR1k2
VWtSR1BnbzhMM2c2ZUcxd2JXVjBZVDRLR1Y3aEJ3QUFBVzFKUkVGVWVBSHQwMEVOQUNBUXhNQUQv
NTZCQkJQektEa0JUY3V1TS9PdXB4allDa2djMzBCQnNKOVFrSUpnQmpDY0ZsSVF6QUNHMDBJS2do
bkFjRnBJUVRBREdFNExLUWhtQU1OcElRWEJER0E0TGFRZ21BRU1wNFVVQkRPQTRiU1FnbUFHTUp3
V1VoRE1BSWJUUWdxQ0djQndXa2hCTUFNWVRnc3BDR1lBdzJraEJjRU1ZRGd0cENDWUFReW5oUlFF
TTREaHRKQ0NZQVl3bkJaU0VNd0FodE5DQ29JWndIQmFTRUV3QXhoT0N5a0laZ0REYVNFRndReGdP
QzJrSUpnQkRLZUZGQVF6Z09HMGtJSmdCakNjRmxJUXpBQ0cwMElLZ2huQWNGcElRVEFER0U0TEtR
aG1BTU5wSVFYQkRHQTRMYVFnbUFFTXA0VVVCRE9BNGJTUWdtQUdNSndXVWhETUFJYlRRZ3FDR2NC
d1draEJNQU1ZVGdzcENHWUF3MmtoQmNFTVlEZ3RwQ0NZQVF5bmhSUUVNNERodEpDQ1lBWXduQlpT
RU13QWh0TkNDb0lad0hCYVNFRXdBeGhPQ3lrSVpnRERhU0VGd1F4Z09DMmtJSmdCREtlRkZBUXpn
T0cwRUN6SUJleE1Bc1ljTUV1SEFBQUFBRWxGVGtTdVFtQ0MiPgogICAgPGNhbnZhcyAgaWQ9InAz
LWNhbnZhcyIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiPjwvY2FudmFzPgogICAgUDMKPC9kaXY+
CjxkaXYgY2xhc3M9InRlc3QiPgogICAgPHNwYW4gICBpZD0ic3JnYi1jc3MiPjwvc3Bhbj4KICAg
IDxpbWcgICAgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVV
Z0FBQUdRQUFBQmtDQUlBQUFEL2dBSURBQUFBNWtsRVFWUjRuTzNRUVFrQUlBREFRTFYvWjYzZ1hp
TGNKUmliZTNCcnZRNzRpVm1CV1lGWmdWbUJXWUZaZ1ZtQldZRlpnVm1CV1lGWmdWbUJXWUZaZ1Zt
QldZRlpnVm1CV1lGWmdWbUJXWUZaZ1ZtQldZRlpnVm1CV1lGWmdWbUJXWUZaZ1ZtQldZRlpnVm1C
V1lGWmdWbUJXWUZaZ1ZtQldZRlpnVm1CV1lGWmdWbUJXWUZaZ1ZtQldZRlpnVm1CV1lGWmdWbUJX
WUZaZ1ZtQldZRlpnVm1CV1lGWmdWbUJXWUZaZ1ZtQldZRlpnVm1CV1lGWmdWbUJXWUZaZ1ZtQldZ
RlpnVm1CV1lGWmdWbUJXWUZaZ1ZtQldZRlpnVm1CV1lGWmdWbUJXWUZaZ1ZtQldjRUJpbDRCeC9H
RUdub0FBQUFBU1VWT1JLNUNZSUk9Ij4KICAgIDxjYW52YXMgaWQ9InNyZ2ItY2FudmFzIiB3aWR0
aD0iMTAwIiBoZWlnaHQ9IjEwMCI+PC9jYW52YXM+CiAgICBzUkdCCjwvZGl2Pgo8L2Rpdj4KPHNj
cmlwdD4KICAgIGZ1bmN0aW9uIGRyYXdDb2xvcihjYW52YXNJZCwgY29sb3JTcGFjZSwgY29sb3Ip
IHsKICAgICAgICB2YXIgYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNhbnZhc0lkKTsKICAg
ICAgICB2YXIgY3R4ID0gYy5nZXRDb250ZXh0KCIyZCIsIHsgY29sb3JTcGFjZTogImRpc3BsYXkt
cDMiIH0pOwoKICAgICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgICAgY3R4LnJlY3QoMCwgMCwg
MTAwLCAxMDApOwogICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvcjsKICAgICAgICBjdHguZmls
bCgpOwogICAgfQogICAgCiAgICBkcmF3Q29sb3IoInAzLWNhbnZhcyIsICJkaXNwbGF5LXAzIiwg
ImNvbG9yKGRpc3BsYXktcDMgMSAwIDAgLyAxKSIpOwogICAgZHJhd0NvbG9yKCJzcmdiLWNhbnZh
cyIsICJzcmdiIiwgImNvbG9yKHNyZ2IgMSAwIDAgLyAxKSIpOwogICAgCjwvc2NyaXB0Pg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427309</attachid>
            <date>2021-04-28 16:54:54 -0700</date>
            <delta_ts>2021-04-28 16:54:54 -0700</delta_ts>
            <desc>Proof of concept patch that gets things working</desc>
            <filename>canvas_wip.diff</filename>
            <type>text/plain</type>
            <size>52502</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVy
aW1lbnRhbC55YW1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNl
cy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55YW1sCShyZXZpc2lvbiAyNzY3MTYpCisrKyBT
b3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwu
eWFtbAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDYgKzI0NSwxOCBAQCBDU1NUeXBlZE9NRW5hYmxl
ZDoKICAgICAgICJFTkFCTEUoRVhQRVJJTUVOVEFMX0ZFQVRVUkVTKSAmJiAoUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShXUEUpKSI6IHRydWUKICAgICAgIGRlZmF1bHQ6IGZhbHNlCiAKK0NhbnZh
c0NvbG9yU3BhY2VFbmFibGVkOgorICB0eXBlOiBib29sCisgIGh1bWFuUmVhZGFibGVOYW1lOiAi
Q2FudmFzIENvbG9yIFNwYWNlcyIKKyAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9uOiAiRW5hYmxl
IHVzZSBvZiBwcmVkZWZpbmVkIGNhbnZhcyBjb2xvciBzcGFjZXMiCisgIGRlZmF1bHRWYWx1ZToK
KyAgICBXZWJLaXRMZWdhY3k6CisgICAgICBkZWZhdWx0OiBmYWxzZQorICAgIFdlYktpdDoKKyAg
ICAgIGRlZmF1bHQ6IGZhbHNlCisgICAgV2ViQ29yZToKKyAgICAgIGRlZmF1bHQ6IGZhbHNlCisK
IENhcHR1cmVWaWRlb0luR1BVUHJvY2Vzc0VuYWJsZWQ6CiAgIHR5cGU6IGJvb2wKICAgaHVtYW5S
ZWFkYWJsZU5hbWU6ICJHUFUgUHJvY2VzczogVmlkZW8gQ2FwdHVyZSIKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAyNzY3MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTA1MSw2ICsxMDUxLDcgQEAgc2V0KFdlYkNvcmVfTk9O
X1NWR19JRExfRklMRVMKICAgICBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbAogICAgIGh0
bWwvY2FudmFzL0NhbnZhc1JlY3QuaWRsCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmlkbAorICAgIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNl
dHRpbmdzLmlkbAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1NoYWRvd1N0eWxlcy5pZGwKICAgICBo
dG1sL2NhbnZhcy9DYW52YXNTdGF0ZS5pZGwKICAgICBodG1sL2NhbnZhcy9DYW52YXNUZXh0Lmlk
bApAQCAtMTA2NSw2ICsxMDY2LDcgQEAgc2V0KFdlYkNvcmVfTk9OX1NWR19JRExfRklMRVMKICAg
ICBodG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCiAgICAg
aHRtbC9jYW52YXMvUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQuaWRsCiAgICAgaHRtbC9jYW52YXMv
UGF0aDJELmlkbAorICAgIGh0bWwvY2FudmFzL1ByZWRlZmluZWRDb2xvclNwYWNlRW51bS5pZGwK
IAogICAgIGh0bWwvdHJhY2svQXVkaW9UcmFjay5pZGwKICAgICBodG1sL3RyYWNrL0F1ZGlvVHJh
Y2tMaXN0LmlkbApJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNm
aWxlbGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1pbnB1
dC54Y2ZpbGVsaXN0CShyZXZpc2lvbiAyNzY3MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDY1LDYgKzEwNjUs
NyBAQCAkKFBST0pFQ1RfRElSKS9odG1sL2NhbnZhcy9DYW52YXNQYXRoRHJhCiAkKFBST0pFQ1Rf
RElSKS9odG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmlkbAogJChQUk9KRUNUX0RJUikvaHRtbC9j
YW52YXMvQ2FudmFzUmVjdC5pZGwKICQoUFJPSkVDVF9ESVIpL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5pZGwKKyQoUFJPSkVDVF9ESVIpL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRFNldHRpbmdzLmlkbAogJChQUk9KRUNUX0RJUikvaHRtbC9jYW52YXMv
Q2FudmFzU2hhZG93U3R5bGVzLmlkbAogJChQUk9KRUNUX0RJUikvaHRtbC9jYW52YXMvQ2FudmFz
U3RhdGUuaWRsCiAkKFBST0pFQ1RfRElSKS9odG1sL2NhbnZhcy9DYW52YXNUZXh0LmlkbApAQCAt
MTA5Nyw2ICsxMDk4LDcgQEAgJChQUk9KRUNUX0RJUikvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJy
YQogJChQUk9KRUNUX0RJUikvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmlkbAogJChQUk9KRUNUX0RJUikvaHRtbC9jYW52YXMvUGFpbnRSZW5kZXJpbmdDb250
ZXh0MkQuaWRsCiAkKFBST0pFQ1RfRElSKS9odG1sL2NhbnZhcy9QYXRoMkQuaWRsCiskKFBST0pF
Q1RfRElSKS9odG1sL2NhbnZhcy9QcmVkZWZpbmVkQ29sb3JTcGFjZUVudW0uaWRsCiAkKFBST0pF
Q1RfRElSKS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbAogJChQUk9KRUNU
X0RJUikvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlkbAogJChQUk9KRUNUX0RJUikvaHRt
bC9jYW52YXMvV2ViR0xCdWZmZXIuaWRsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291
cmNlcy1vdXRwdXQueGNmaWxlbGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJp
dmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAkocmV2aXNpb24gMjc2NzE2KQorKysgU291cmNl
L1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QJKHdvcmtpbmcgY29weSkK
QEAgLTM2MSw2ICszNjEsOCBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0NhbnZh
c1JlY3QuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCiskKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRFNldHRpbmdzLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy5oCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0NhbnZhc1NoYWRvd1N0eWxlcy5jcHAK
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQ2FudmFzU2hh
ZG93U3R5bGVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTQ2FudmFzU3RhdGUuY3BwCkBAIC0xNjQwLDYgKzE2NDIsOCBAQCAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9KU1Bvc2l0aW9uT3B0aW9ucy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1Bvc3RNZXNzYWdlT3B0aW9ucy5jcHAKICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTUG9zdE1lc3NhZ2VPcHRpb25z
LmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTUHJlZGVm
aW5lZENvbG9yU3BhY2VFbnVtLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNQcmVkZWZpbmVkQ29sb3JTcGFjZUVudW0uaAogJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3Bw
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1Byb2Nlc3Np
bmdJbnN0cnVjdGlvbi5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1Byb2dyZXNzRXZlbnQuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291
cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UJKHJldmlzaW9uIDI3NjcxNikKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UJKHdvcmtpbmcgY29weSkKQEAgLTkyNiw2ICs5MjYsNyBAQCBKU19CSU5ESU5HX0lETFMgOj0g
XAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5pZGwgXAogICAgICQo
V2ViQ29yZSkvaHRtbC9jYW52YXMvQ2FudmFzUmVjdC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBcCisgICAgJChXZWJDb3JlKS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy5pZGwgXAogICAgICQo
V2ViQ29yZSkvaHRtbC9jYW52YXMvQ2FudmFzU2hhZG93U3R5bGVzLmlkbCBcCiAgICAgJChXZWJD
b3JlKS9odG1sL2NhbnZhcy9DYW52YXNTdGF0ZS5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9j
YW52YXMvQ2FudmFzVGV4dC5pZGwgXApAQCAtOTU4LDYgKzk1OSw3IEBAIEpTX0JJTkRJTkdfSURM
UyA6PSBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1BhaW50UmVuZGVy
aW5nQ29udGV4dDJELmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9QYXRoMkQuaWRs
IFwKKyAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1ByZWRlZmluZWRDb2xvclNwYWNlRW51bS5p
ZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5p
ZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlkbCBcCiAg
ICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5pZGwgXApJbmRleDogU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCShyZXZpc2lvbiAyNzY3MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMjg2LDYgKzEyODYsNyBAQCBzZXQoV2ViQ29yZV9QUklW
QVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0dGVybi5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxGb3JtYXQuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1JbWFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjc2NzE2KQorKysgU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI4NzcsNiArMjg3Nyw3IEBAIEpTQ2FudmFz
UGF0aERyYXdpbmdTdHlsZXMuY3BwCiBKU0NhbnZhc1BhdHRlcm4uY3BwCiBKU0NhbnZhc1JlY3Qu
Y3BwCiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKK0pTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEU2V0dGluZ3MuY3BwCiBKU0NhbnZhc1NoYWRvd1N0eWxlcy5jcHAKIEpTQ2FudmFzU3Rh
dGUuY3BwCiBKU0NhbnZhc1RleHQuY3BwCkBAIC0zMzY2LDYgKzMzNjcsNyBAQCBKU1Bvc2l0aW9u
Q2FsbGJhY2suY3BwCiBKU1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5jcHAKIEpTUG9zaXRpb25PcHRp
b25zLmNwcAogSlNQb3N0TWVzc2FnZU9wdGlvbnMuY3BwCitKU1ByZWRlZmluZWRDb2xvclNwYWNl
RW51bS5jcHAKIEpTUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAogSlNQcm9ncmVzc0V2ZW50LmNw
cAogSlNQcm9taXNlUmVqZWN0aW9uRXZlbnQuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzY3MTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTQxMzMsNiArNDEzMyw3IEBACiAJCUJDREZENDhFMEUzMDUyOTAwMDlEMTBB
RCAvKiBYTUxIdHRwUmVxdWVzdFVwbG9hZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNERkQ0OEMwRTMwNTI5MDAwOUQxMEFEIC8qIFhNTEh0dHBSZXF1
ZXN0VXBsb2FkLmggKi87IH07CiAJCUJDREZENDk2MEUzMDU5MkYwMDlEMTBBRCAvKiBKU1hNTEh0
dHBSZXF1ZXN0VXBsb2FkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0RGRDQ5NDBFMzA1OTJGMDA5RDEwQUQgLyogSlNYTUxIdHRwUmVxdWVzdFVwbG9h
ZC5oICovOyB9OwogCQlCQ0UwMTM5QjBDMEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0UwMTM5OTBD
MEJFRjE4MDA0Mzg2MEEgLyogSlNTdHlsZVNoZWV0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQkNFMDQ5MDkyNjNBMEFDQzAwOURDQkI4IC8qIFBp
eGVsRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0UwNDkwNjI2MzlENEI4MDA5RENCQjggLyogUGl4ZWxGb3JtYXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0UxQzQxQjBEOTgyOTgwMDAz
QjAyRjIgLyogTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDRTFDNDE5MEQ5ODI5ODAwMDNCMDJGMiAvKiBMb2NhdGlvbi5oICovOyB9Owog
CQlCQ0UxQzQzQzBEOTgzMEQzMDAzQjAyRjIgLyogSlNMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFMUM0M0EwRDk4MzBEMzAwM0IwMkYy
IC8qIEpTTG9jYXRpb24uaCAqLzsgfTsKIAkJQkNFMzJCOUMxNTE3QzBCMjAwRjU0MkVDIC8qIFJl
bmRlck11bHRpQ29sdW1uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0UzMkI5QjE1MTdDMEIxMDBGNTQyRUMgLyogUmVuZGVyTXVsdGlDb2x1bW5T
ZXQuaCAqLzsgfTsKQEAgLTE0Mzg0LDYgKzE0Mzg1LDExIEBACiAJCUJDREZENDk0MEUzMDU5MkYw
MDlEMTBBRCAvKiBKU1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTWE1MSHR0cFJlcXVlc3RVcGxvYWQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkNFMDEzOTgwQzBCRUYxODAwNDM4NjBBIC8qIEpTU3R5bGVTaGVldC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTdHlsZVNoZWV0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFMDEzOTkwQzBCRUYxODAwNDM4NjBBIC8q
IEpTU3R5bGVTaGVldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTdHls
ZVNoZWV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRTA0OEZFMjYzOUMxMTUw
MDlEQ0JCOCAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQ0UwNDkwMDI2MzlDMTE1MDA5RENCQjggLyogQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEU2V0dGluZ3MuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRp
bmdzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNFMDQ5MDEyNjM5QzY4QjAw
OURDQkI4IC8qIFByZWRlZmluZWRDb2xvclNwYWNlRW51bS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmVk
ZWZpbmVkQ29sb3JTcGFjZUVudW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNF
MDQ5MDMyNjM5QzY4QjAwOURDQkI4IC8qIFByZWRlZmluZWRDb2xvclNwYWNlRW51bS5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gUHJlZGVmaW5lZENvbG9yU3BhY2VFbnVtLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQkNFMDQ5MDYyNjM5RDRCODAwOURDQkI4IC8qIFBpeGVsRm9ybWF0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBpeGVsRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRTFD
NDE5MEQ5ODI5ODAwMDNCMDJGMiAvKiBMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Ux
QzQxQTBEOTgyOTgwMDAzQjAyRjIgLyogTG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQ0UxQzQyMjBEOTgyOUYyMDAzQjAyRjIgLyogTG9jYXRpb24uaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IExvY2F0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIwMDk5LDYgKzIwMTA1LDggQEAKIAkJCQk0OTQ4NEZCRTEwMkNGMjNDMDAxODdERDMgLyogQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCAqLywKIAkJCQkzMTQwQzUyMTFGREYzMTg0MDBEMkE4
NzMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgKi8sCiAJCQkJMzE0MEM1MjIx
RkRGMzE4NjAwRDJBODczIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaCAqLywKKwkJ
CQlCQ0UwNDhGRTI2MzlDMTE1MDA5RENCQjggLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU2V0
dGluZ3MuaCAqLywKKwkJCQlCQ0UwNDkwMDI2MzlDMTE1MDA5RENCQjggLyogQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEU2V0dGluZ3MuaWRsICovLAogCQkJCTdDMTkzQkFEMUY1RTBFQjMwMDg4RjNF
NiAvKiBDYW52YXNTaGFkb3dTdHlsZXMuaWRsICovLAogCQkJCTdDMTkzQkIyMUY1RTBFQjYwMDg4
RjNFNiAvKiBDYW52YXNTdGF0ZS5pZGwgKi8sCiAJCQkJNDk0ODRGQkYxMDJDRjIzQzAwMTg3REQz
IC8qIENhbnZhc1N0eWxlLmNwcCAqLywKQEAgLTIwMTg1LDYgKzIwMTkzLDggQEAKIAkJCQk3QzE5
M0JCNDFGNUUwRUI3MDA4OEYzRTYgLyogUGF0aDJELmlkbCAqLywKIAkJCQk3Qzc5MDNCQTFGODZG
RjMzMDA0NjNBNzAgLyogUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmNwcCAqLywKIAkJCQk3
Qzc5MDNCQzFGODZGRjM0MDA0NjNBNzAgLyogUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Lmgg
Ki8sCisJCQkJQkNFMDQ5MDEyNjM5QzY4QjAwOURDQkI4IC8qIFByZWRlZmluZWRDb2xvclNwYWNl
RW51bS5oICovLAorCQkJCUJDRTA0OTAzMjYzOUM2OEIwMDlEQ0JCOCAvKiBQcmVkZWZpbmVkQ29s
b3JTcGFjZUVudW0uaWRsICovLAogCQkJCUQzRjNEMzVCMUE2OUE1MDYwMDU5RkMyQiAvKiBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0LmNwcCAqLywKIAkJCQlEM0YzRDM1QzFBNjlBNTA2MDA1OUZDMkIg
LyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovLAogCQkJCUQzRjNEMzVEMUE2OUE1MDYwMDU5
RkMyQiAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbCAqLywKQEAgLTI3MDA3LDYgKzI3MDE3
LDcgQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICov
LAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlB
OEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCUJDRTA0OTA2MjYz
OUQ0QjgwMDlEQ0JCOCAvKiBQaXhlbEZvcm1hdC5oICovLAogCQkJCTcyNkQ1NkUxMjUzQUUwNDMw
MDAyRUY5MCAvKiBQbGF0Zm9ybUltYWdlLmggKi8sCiAJCQkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3
NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQk1NTA2NDBBRDI0MDc1NkRBMDBB
QUUwNDUgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKQEAgLTM1NTE0LDYgKzM1
NTI1LDcgQEAKIAkJCQkwRjU0REQwOTE4ODFENUY1MDAzRUVEQkIgLyogVG91Y2hFdmVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY1NEREMEExODgxRDVGNTAwM0VFREJCIC8qIFRvdWNoTGlzdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDcwMzM0RDcxNDU5RkZENTAwOEQ4RDQ1IC8qIFRyYWNrQmFz
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNFMDQ5MDkyNjNBMEFDQzAwOURDQkI4IC8qIFBpeGVs
Rm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCRTg4RTBDMjE3MTVDRTI2MDA2NThEOTggLyog
VHJhY2tMaXN0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkU5MTNEODAxODFFRjkyNDAwRENC
MDlFIC8qIFRyYWNrUHJpdmF0ZUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUZGQUMzMEZFMTg0
RkIxNDUwMDhDNEYxRSAvKiBUcmFpbGluZ09iamVjdHMuaCBpbiBIZWFkZXJzICovLApJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDI3Njcx
NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw4IEBACiAjaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIKICNp
bmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU2V0dGluZ3MuaCIKKyNp
bmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCkBAIC00NCw2
ICs0Niw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklk
aW9tcy5oIgogI2luY2x1ZGUgIkltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1
ZGUgIkltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbk1lbW9yeURp
c3BsYXlMaXN0LmgiCkBAIC0yNzksNyArMjgyLDExIEBAIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPFJl
bmRlcmluZ0NvbnRleHQ+PiAKICAgICB9CiAKICAgICBpZiAoaXMyZFR5cGUoY29udGV4dElkKSkg
ewotICAgICAgICBhdXRvIGNvbnRleHQgPSBjcmVhdGVDb250ZXh0MmQoY29udGV4dElkKTsKKyAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7CisgICAg
ICAgIGF1dG8gc2V0dGluZ3MgPSBjb252ZXJ0PElETERpY3Rpb25hcnk8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEU2V0dGluZ3M+PihzdGF0ZSwgIWFyZ3VtZW50cy5pc0VtcHR5KCkgPyBhcmd1bWVu
dHNbMF0uZ2V0KCkgOiBKU0M6OmpzVW5kZWZpbmVkKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2VwdGlvbkVycm9yIH0pOworCisg
ICAgICAgIGF1dG8gY29udGV4dCA9IGNyZWF0ZUNvbnRleHQyZChjb250ZXh0SWQsIFdURk1vdmUo
c2V0dGluZ3MpKTsKICAgICAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICAgICAgcmV0dXJuIE9w
dGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RGOjpudWxsb3B0IH07CiAgICAgICAgIHJldHVy
biBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+IHsgY29udGV4dCB9IH07CkBAIC0yODcsMTAgKzI5NCwxMCBAQCBFeGNlcHRpb25PcjxP
cHRpb25hbDxSZW5kZXJpbmdDb250ZXh0Pj4gCiAKICAgICBpZiAoaXNCaXRtYXBSZW5kZXJlclR5
cGUoY29udGV4dElkKSkgewogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShzdGF0ZS52bSgpKTsKLSAgICAgICAgYXV0byBhdHRyaWJ1dGVzID0gY29udmVydDxJRExEaWN0
aW9uYXJ5PEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzPj4oc3RhdGUsICFhcmd1
bWVudHMuaXNFbXB0eSgpID8gYXJndW1lbnRzWzBdLmdldCgpIDogSlNDOjpqc1VuZGVmaW5lZCgp
KTsKKyAgICAgICAgYXV0byBzZXR0aW5ncyA9IGNvbnZlcnQ8SURMRGljdGlvbmFyeTxJbWFnZUJp
dG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncz4+KHN0YXRlLCAhYXJndW1lbnRzLmlzRW1wdHko
KSA/IGFyZ3VtZW50c1swXS5nZXQoKSA6IEpTQzo6anNVbmRlZmluZWQoKSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEV4Y2VwdGlvbiB7IEV4aXN0aW5nRXhjZXB0aW9uRXJy
b3IgfSk7CiAKLSAgICAgICAgYXV0byBjb250ZXh0ID0gY3JlYXRlQ29udGV4dEJpdG1hcFJlbmRl
cmVyKGNvbnRleHRJZCwgV1RGTW92ZShhdHRyaWJ1dGVzKSk7CisgICAgICAgIGF1dG8gY29udGV4
dCA9IGNyZWF0ZUNvbnRleHRCaXRtYXBSZW5kZXJlcihjb250ZXh0SWQsIFdURk1vdmUoc2V0dGlu
Z3MpKTsKICAgICAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFs
PFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RGOjpudWxsb3B0IH07CiAgICAgICAgIHJldHVybiBPcHRp
b25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRl
eHQ+IHsgY29udGV4dCB9IH07CkBAIC0zMzAsMTAgKzMzNywxMCBAQCBFeGNlcHRpb25PcjxPcHRp
b25hbDxSZW5kZXJpbmdDb250ZXh0Pj4gCiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2Fu
dmFzRWxlbWVudDo6Z2V0Q29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgaWYgKEhU
TUxDYW52YXNFbGVtZW50OjppczJkVHlwZSh0eXBlKSkKLSAgICAgICAgcmV0dXJuIGdldENvbnRl
eHQyZCh0eXBlKTsKKyAgICAgICAgcmV0dXJuIGdldENvbnRleHQyZCh0eXBlLCB7IH0pOwogCiAg
ICAgaWYgKEhUTUxDYW52YXNFbGVtZW50Ojppc0JpdG1hcFJlbmRlcmVyVHlwZSh0eXBlKSkKLSAg
ICAgICAgcmV0dXJuIGdldENvbnRleHRCaXRtYXBSZW5kZXJlcih0eXBlKTsKKyAgICAgICAgcmV0
dXJuIGdldENvbnRleHRCaXRtYXBSZW5kZXJlcih0eXBlLCB7IH0pOwogCiAjaWYgRU5BQkxFKFdF
QkdMKQogICAgIGlmIChIVE1MQ2FudmFzRWxlbWVudDo6aXNXZWJHTFR5cGUodHlwZSkpCkBAIC0z
NTMsMjMgKzM2MCwyMCBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjppczJkVHlwZShjb25zdCBT
CiAgICAgcmV0dXJuIHR5cGUgPT0gIjJkIjsKIH0KIAotQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
KiBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkKGNvbnN0IFN0cmluZyYgdHlwZSkK
K0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRl
eHQyZChjb25zdCBTdHJpbmcmIHR5cGUsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdz
JiYgc2V0dGluZ3MpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChIVE1MQ2FudmFzRWxlbWVudDo6aXMy
ZFR5cGUodHlwZSksIHR5cGUpOwogICAgIEFTU0VSVCghbV9jb250ZXh0KTsKIAogICAgIC8vIE1h
a2Ugc3VyZSB3ZSBkb24ndCB1c2UgbW9yZSBwaXhlbCBtZW1vcnkgdGhhbiB0aGUgc3lzdGVtIGNh
biBzdXBwb3J0LgotICAgIHNpemVfdCByZXF1ZXN0ZWRQaXhlbE1lbW9yeSA9IDQgKiB3aWR0aCgp
ICogaGVpZ2h0KCk7Ci0gICAgaWYgKGFjdGl2ZVBpeGVsTWVtb3J5KCkgKyByZXF1ZXN0ZWRQaXhl
bE1lbW9yeSA+IG1heEFjdGl2ZVBpeGVsTWVtb3J5KCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRl
ciBzdHJpbmdCdWlsZGVyOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlRv
dGFsIGNhbnZhcyBtZW1vcnkgdXNlIGV4Y2VlZHMgdGhlIG1heGltdW0gbGltaXQgKCIpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcihtYXhBY3RpdmVQaXhlbE1lbW9yeSgpIC8g
MTAyNCAvIDEwMjQpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBNQiku
Iik7Ci0gICAgICAgIGRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6
SlMsIE1lc3NhZ2VMZXZlbDo6V2FybmluZywgc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAg
ICBhdXRvIGFyZWEgPSBzaXplKCkuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKTsKKyAgICBhdXRvIHRv
dGFsUGl4ZWxNZW1vcnkgPSAoYXJlYSAqIDQpICsgYWN0aXZlUGl4ZWxNZW1vcnkoKTsKKyAgICBp
ZiAodG90YWxQaXhlbE1lbW9yeS5oYXNPdmVyZmxvd2VkKCkgfHwgdG90YWxQaXhlbE1lbW9yeSA+
IG1heEFjdGl2ZVBpeGVsTWVtb3J5KCkpIHsKKyAgICAgICAgZG9jdW1lbnQoKS5hZGRDb25zb2xl
TWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpXYXJuaW5nLCBtYWtlU3Ry
aW5nKCJUb3RhbCBjYW52YXMgbWVtb3J5IHVzZSBleGNlZWRzIHRoZSBtYXhpbXVtIGxpbWl0ICgi
LCBtYXhBY3RpdmVQaXhlbE1lbW9yeSgpIC8gMTAyNCAvIDEwMjQsICIgTUIpLiIpKTsKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgbV9jb250ZXh0ID0gQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpjcmVhdGUoKnRoaXMsIGRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkpOwor
ICAgIG1fY29udGV4dCA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKCp0aGlzLCBX
VEZNb3ZlKHNldHRpbmdzKSwgZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSk7CiAKICNpZiBVU0Uo
SU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQogICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJl
IGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUg
Q2FudmFzLgpAQCAtMzc5LDcgKzM4Myw3IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogSFRN
TENhbnZhc0VsZW0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEKj4obV9jb250ZXh0LmdldCgpKTsKIH0KIAotQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBI
VE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dDJkKGNvbnN0IFN0cmluZyYgdHlwZSkKK0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQyZChjb25z
dCBTdHJpbmcmIHR5cGUsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzJiYgc2V0dGlu
Z3MpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChIVE1MQ2FudmFzRWxlbWVudDo6aXMyZFR5cGUodHlw
ZSksIHR5cGUpOwogCkBAIC0zODcsNyArMzkxLDcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
KiBIVE1MQ2FudmFzRWxlbQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICghbV9j
b250ZXh0KQotICAgICAgICByZXR1cm4gY3JlYXRlQ29udGV4dDJkKHR5cGUpOworICAgICAgICBy
ZXR1cm4gY3JlYXRlQ29udGV4dDJkKHR5cGUsIFdURk1vdmUoc2V0dGluZ3MpKTsKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4obV9jb250ZXh0LmdldCgp
KTsKIH0KIApAQCAtNTkxLDE4ICs1OTUsMjAgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVz
ZXQoKQogCiAgICAgYm9vbCBoYWRJbWFnZUJ1ZmZlciA9IGhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcigp
OwogCi0gICAgaW50IHcgPSBsaW1pdFRvT25seUhUTUxOb25OZWdhdGl2ZShhdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKHdpZHRoQXR0ciksIGRlZmF1bHRXaWR0aCk7Ci0gICAgaW50IGgg
PSBsaW1pdFRvT25seUhUTUxOb25OZWdhdGl2ZShhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKGhlaWdodEF0dHIpLCBkZWZhdWx0SGVpZ2h0KTsKKyAgICBpbnQgbmV3V2lkdGggPSBsaW1p
dFRvT25seUhUTUxOb25OZWdhdGl2ZShhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHdp
ZHRoQXR0ciksIGRlZmF1bHRXaWR0aCk7CisgICAgaW50IG5ld0hlaWdodCA9IGxpbWl0VG9Pbmx5
SFRNTE5vbk5lZ2F0aXZlKGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oaGVpZ2h0QXR0
ciksIGRlZmF1bHRIZWlnaHQpOwogCiAgICAgcmVzZXRHcmFwaGljc0NvbnRleHRTdGF0ZSgpOwot
ICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0g
ICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkucmVz
ZXQoKTsKKworICAgIGlmIChtX2NvbnRleHQpCisgICAgICAgIG1fY29udGV4dC0+cmVzZXQoKTsK
IAogICAgIEludFNpemUgb2xkU2l6ZSA9IHNpemUoKTsKLSAgICBJbnRTaXplIG5ld1NpemUodywg
aCk7CisgICAgSW50U2l6ZSBuZXdTaXplIHsgbmV3V2lkdGgsIG5ld0hlaWdodCB9OworCiAgICAg
Ly8gSWYgdGhlIHNpemUgb2YgYW4gZXhpc3RpbmcgYnVmZmVyIG1hdGNoZXMsIHdlIGNhbiBqdXN0
IGNsZWFyIGl0IGluc3RlYWQgb2YgcmVhbGxvY2F0aW5nLgotICAgIC8vIFRoaXMgb3B0aW1pemF0
aW9uIGlzIG9ubHkgZG9uZSBmb3IgMkQgY2FudmFzZXMgZm9yIG5vdy4KLSAgICBpZiAobV9oYXND
cmVhdGVkSW1hZ2VCdWZmZXIgJiYgb2xkU2l6ZSA9PSBuZXdTaXplICYmIG1fY29udGV4dCAmJiBt
X2NvbnRleHQtPmlzMmQoKSkgeworICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIGlzIG9ubHkgZG9u
ZSBmb3IgY29udGV4dHMgd2hpY2ggcmVwb3J0IHN1cHBvcnRpbmcgaXQuCisgICAgaWYgKG1faGFz
Q3JlYXRlZEltYWdlQnVmZmVyICYmIG9sZFNpemUgPT0gbmV3U2l6ZSAmJiBtX2NvbnRleHQgJiYg
bV9jb250ZXh0LT5hbGxvd3NJbWFnZUJ1ZmZlclJldXNlKCkpIHsKICAgICAgICAgaWYgKCFtX2Rp
ZENsZWFySW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICBjbGVhckltYWdlQnVmZmVyKCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTkwNSw1MSArOTExLDUxIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUltYWdlQnVmZmUKIHsKICAgICBBU1NFUlQoIWhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcigp
KTsKIAorICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm47CisKICAgICBtX2hhc0Ny
ZWF0ZWRJbWFnZUJ1ZmZlciA9IHRydWU7CiAgICAgbV9kaWRDbGVhckltYWdlQnVmZmVyID0gdHJ1
ZTsKIAotICAgIC8vIFBlcmZvcm0gbXVsdGlwbGljYXRpb24gYXMgZmxvYXRpbmcgcG9pbnQgdG8g
YXZvaWQgb3ZlcmZsb3cKLSAgICBpZiAoZmxvYXQod2lkdGgoKSkgKiBoZWlnaHQoKSA+IG1heENh
bnZhc0FyZWEpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkNhbnZhcyBhcmVhIGV4Y2VlZHMgdGhlIG1h
eGltdW0gbGltaXQgKHdpZHRoICogaGVpZ2h0ID4gIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTnVtYmVyKG1heENhbnZhc0FyZWEpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIikuIik7Ci0gICAgICAgIGRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVz
c2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6V2FybmluZywgc3RyaW5nQnVpbGRlci50b1N0
cmluZygpKTsKKyAgICBpZiAoc2l6ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byBhcmVhID0gc2l6ZSgpLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCk7CisgICAgaWYgKGFy
ZWEuaGFzT3ZlcmZsb3dlZCgpIHx8IGFyZWEgPiBtYXhDYW52YXNBcmVhKSB7CisgICAgICAgIGRv
Y3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZl
bDo6V2FybmluZywgbWFrZVN0cmluZygiQ2FudmFzIGFyZWEgZXhjZWVkcyB0aGUgbWF4aW11bSBs
aW1pdCAod2lkdGggKiBoZWlnaHQgPiAiLCBtYXhDYW52YXNBcmVhLCAiKS4iKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHVzZSBtb3Jl
IHBpeGVsIG1lbW9yeSB0aGFuIHRoZSBzeXN0ZW0gY2FuIHN1cHBvcnQuCi0gICAgc2l6ZV90IHJl
cXVlc3RlZFBpeGVsTWVtb3J5ID0gNCAqIHdpZHRoKCkgKiBoZWlnaHQoKTsKLSAgICBpZiAoYWN0
aXZlUGl4ZWxNZW1vcnkoKSArIHJlcXVlc3RlZFBpeGVsTWVtb3J5ID4gbWF4QWN0aXZlUGl4ZWxN
ZW1vcnkoKSkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVG90YWwgY2FudmFzIG1lbW9yeSB1c2UgZXhj
ZWVkcyB0aGUgbWF4aW11bSBsaW1pdCAoIik7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TnVtYmVyKG1heEFjdGl2ZVBpeGVsTWVtb3J5KCkgLyAxMDI0IC8gMTAyNCk7Ci0gICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIE1CKS4iKTsKLSAgICAgICAgZG9jdW1lbnQoKS5h
ZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpXYXJuaW5n
LCBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIGF1dG8gdG90YWxQaXhlbE1lbW9yeSA9
IChhcmVhICogNCkgKyBhY3RpdmVQaXhlbE1lbW9yeSgpOworICAgIGlmICh0b3RhbFBpeGVsTWVt
b3J5Lmhhc092ZXJmbG93ZWQoKSB8fCB0b3RhbFBpeGVsTWVtb3J5ID4gbWF4QWN0aXZlUGl4ZWxN
ZW1vcnkoKSkgeworICAgICAgICBkb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsIG1ha2VTdHJpbmcoIlRvdGFsIGNhbnZh
cyBtZW1vcnkgdXNlIGV4Y2VlZHMgdGhlIG1heGltdW0gbGltaXQgKCIsIG1heEFjdGl2ZVBpeGVs
TWVtb3J5KCkgLyAxMDI0IC8gMTAyNCwgIiBNQikuIikpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byBob3N0V2luZG93ID0gKGRvY3VtZW50KCkudmlldygpICYmIGRvY3VtZW50KCkudmll
dygpLT5yb290KCkpID8gZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKS0+aG9zdFdpbmRvdygpIDog
bnVsbHB0cjsKKyAgICAvLyBGSVhNRTogRG9lcyBpdCBtYWtlIHNlbnNlIHRvIGNyZWF0IHRoZSBi
dWZmZXIgaWYgdGhlcmUgaXMgbm8gcGFnZT8KKyAgICBhdXRvIGhvc3RXaW5kb3cgPSBkb2N1bWVu
dCgpLnBhZ2UoKSA/ICZkb2N1bWVudCgpLnBhZ2UoKS0+Y2hyb21lKCkgOiBudWxscHRyOwogCiAg
ICAgYXV0byByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVy
aW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogICAg
IC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgRGlzcGxheUxpc3QgZHJhd2luZyBvbiBj
YW52YXMuCiAgICAgYXV0byB1c2VEaXNwbGF5TGlzdCA9IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2lu
Zy52YWx1ZU9yKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5kaXNwbGF5TGlzdERyYXdpbmdFbmFibGVk
KCkpID8gU2hvdWxkVXNlRGlzcGxheUxpc3Q6OlllcyA6IFNob3VsZFVzZURpc3BsYXlMaXN0OjpO
bzsKLSAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgcmVuZGVy
aW5nTW9kZSwgdXNlRGlzcGxheUxpc3QsIFJlbmRlcmluZ1B1cnBvc2U6OkNhbnZhcywgMSwgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6QkdSQTgsIGhvc3RXaW5kb3cp
KTsKKyAgICAKKyAgICBhdXRvIGNvbG9yU3BhY2UgPSBtX2NvbnRleHQtPmNvbG9yU3BhY2UoKTsK
KyAgICBhdXRvIHBpeGVsRm9ybWF0ID0gbV9jb250ZXh0LT5waXhlbEZvcm1hdCgpOworICAgIAor
ICAgIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJpbmdN
b2RlLCB1c2VEaXNwbGF5TGlzdCwgUmVuZGVyaW5nUHVycG9zZTo6Q2FudmFzLCAxLCBjb2xvclNw
YWNlLCBwaXhlbEZvcm1hdCwgaG9zdFdpbmRvdykpOwogCiAgICAgaWYgKGJ1ZmZlcigpICYmIGJ1
ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQogICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRl
eHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICht
X2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkpIHsKKyAgICBpZiAobV9jb250ZXh0LT5pczJk
KCkpIHsKICAgICAgICAgLy8gUmVjYWxjdWxhdGUgY29tcG9zaXRpbmcgcmVxdWlyZW1lbnRzIGlm
IGFjY2VsZXJhdGlvbiBzdGF0ZSBjaGFuZ2VkLgogICAgICAgICBjb25zdF9jYXN0PEhUTUxDYW52
YXNFbGVtZW50Kj4odGhpcyktPmludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsK
ICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChtX2NvbnRleHQgJiYgYnVmZmVyKCkgJiYgYnVmZmVy
KCktPnByZWZlcnNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKSkKKyAgICBpZiAoYnVmZmVyKCkgJiYg
YnVmZmVyKCktPnByZWZlcnNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKSkKICAgICAgICAgY29uc3Rf
Y2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHRoaXMpLT5hZGRPYnNlcnZlcihkb2N1bWVudCgpKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkocmV2aXNp
b24gMjc2NzE2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiQ2FudmFzQmFzZS5oIgog
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MuaCIKICNpbmNsdWRlIDxtZW1v
cnk+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIApAQCAtNTMsNiArNTIsOCBAQCBjbGFzcyBN
ZWRpYVN0cmVhbTsKIGNsYXNzIE9mZnNjcmVlbkNhbnZhczsKIGNsYXNzIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U7CiBjbGFzcyBHUFVDYW52YXNDb250ZXh0Oworc3RydWN0IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRFNldHRpbmdzOworc3RydWN0IEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dFNldHRpbmdzOwogc3RydWN0IFVuY2FjaGVkU3RyaW5nOwogCiBuYW1lc3BhY2UgRGlzcGxheUxp
c3QgewpAQCAtNzcsOCArNzgsOCBAQCBwdWJsaWM6CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCogZ2V0Q29udGV4dChjb25zdCBTdHJpbmcmKTsKIAogICAgIHN0YXRpYyBib29sIGlzMmRUeXBl
KGNvbnN0IFN0cmluZyYpOwotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY3JlYXRlQ29u
dGV4dDJkKGNvbnN0IFN0cmluZyYgdHlwZSk7Ci0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
KiBnZXRDb250ZXh0MmQoY29uc3QgU3RyaW5nJik7CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEKiBjcmVhdGVDb250ZXh0MmQoY29uc3QgU3RyaW5nJiwgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEU2V0dGluZ3MmJik7CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBnZXRDb250ZXh0
MmQoY29uc3QgU3RyaW5nJiwgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU2V0dGluZ3MmJik7CiAK
ICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgdXNpbmcgV2ViR0xWZXJzaW9uID0gR3JhcGhpY3NDb250
ZXh0R0xXZWJHTFZlcnNpb247CkBAIC05NSw4ICs5Niw4IEBAIHB1YmxpYzoKICNlbmRpZgogCiAg
ICAgc3RhdGljIGJvb2wgaXNCaXRtYXBSZW5kZXJlclR5cGUoY29uc3QgU3RyaW5nJik7Ci0gICAg
SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KiBjcmVhdGVDb250ZXh0Qml0bWFwUmVuZGVyZXIo
Y29uc3QgU3RyaW5nJiwgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MmJiA9IHsg
fSk7Ci0gICAgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KiBnZXRDb250ZXh0Qml0bWFwUmVu
ZGVyZXIoY29uc3QgU3RyaW5nJiwgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3Mm
JiA9IHsgfSk7CisgICAgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KiBjcmVhdGVDb250ZXh0
Qml0bWFwUmVuZGVyZXIoY29uc3QgU3RyaW5nJiwgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
U2V0dGluZ3MmJik7CisgICAgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KiBnZXRDb250ZXh0
Qml0bWFwUmVuZGVyZXIoY29uc3QgU3RyaW5nJiwgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
U2V0dGluZ3MmJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxVbmNhY2hlZFN0
cmluZz4gdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIEpTQzo6SlNWYWx1ZSBxdWFs
aXR5KTsKICAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25PcjxVbmNhY2hlZFN0cmluZz4gdG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5pZGwJKHJldmlzaW9uIDI3NjcxNikKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC01NCw1ICs1
NCw3IEBAIHR5cGVkZWYgKAogICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSB1
bmRlZmluZWQgdG9CbG9iKEJsb2JDYWxsYmFjayBjYWxsYmFjaywgb3B0aW9uYWwgRE9NU3RyaW5n
IHR5cGUsIG9wdGlvbmFsIGFueSBxdWFsaXR5KTsKICAgICBbQ29uZGl0aW9uYWw9T0ZGU0NSRUVO
X0NBTlZBUywgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gT2Zmc2NyZWVuQ2FudmFz
IHRyYW5zZmVyQ29udHJvbFRvT2Zmc2NyZWVuKCk7CiAKKyAgICAvLyBodHRwczovL3czYy5naXRo
dWIuaW8vbWVkaWFjYXB0dXJlLWZyb21lbGVtZW50LyNodG1sLWNhbnZhcy1lbGVtZW50LW1lZGlh
LWNhcHR1cmUtZXh0ZW5zaW9ucworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBnbyBpbnRvIGl0
cyBvd24gSURMIGZpbGUgYXMgYSBwYXJ0aWFsIGludGVyZmFjZSBleHRlbnNpb24uCiAgICAgW0Nv
bmRpdGlvbmFsPU1FRElBX1NUUkVBTSwgQ2FsbFdpdGg9RG9jdW1lbnQsIE5ld09iamVjdF0gTWVk
aWFTdHJlYW0gY2FwdHVyZVN0cmVhbShvcHRpb25hbCBkb3VibGUgZnJhbWVSZXF1ZXN0UmF0ZSk7
CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCShyZXZp
c2lvbiAyNzY3MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yODEsMTEgKzI4MSwxMSBAQCB2b2lkIEhUTUxWaWRlb0VsZW1l
bnQ6Om1lZGlhUGxheWVyRmlyc3RWCiAgICAgICAgIHJlbmRlcmVyLT51cGRhdGVGcm9tRWxlbWVu
dCgpOwogfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IEhUTUxWaWRlb0VsZW1lbnQ6OmNyZWF0ZUJ1
ZmZlckZvclBhaW50aW5nKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlKSBjb25zdAorUmVmUHRyPEltYWdlQnVmZmVyPiBIVE1MVmlkZW9FbGVtZW50Ojpj
cmVhdGVCdWZmZXJGb3JQYWludGluZyhjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIFBpeGVs
Rm9ybWF0IHBpeGVsRm9ybWF0KSBjb25zdAogewogICAgIGF1dG8qIGhvc3RXaW5kb3cgPSBkb2N1
bWVudCgpLnZpZXcoKSAmJiBkb2N1bWVudCgpLnZpZXcoKS0+cm9vdCgpID8gZG9jdW1lbnQoKS52
aWV3KCktPnJvb3QoKS0+aG9zdFdpbmRvdygpIDogbnVsbHB0cjsKICAgICBhdXRvIHNob3VsZFVz
ZURpc3BsYXlMaXN0ID0gZG9jdW1lbnQoKS5zZXR0aW5ncygpLmRpc3BsYXlMaXN0RHJhd2luZ0Vu
YWJsZWQoKSA/IFNob3VsZFVzZURpc3BsYXlMaXN0OjpZZXMgOiBTaG91bGRVc2VEaXNwbGF5TGlz
dDo6Tm87Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9k
ZSwgc2hvdWxkVXNlRGlzcGxheUxpc3QsIFJlbmRlcmluZ1B1cnBvc2U6Ok1lZGlhUGFpbnRpbmcs
IDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OkJHUkE4LCBob3N0
V2luZG93KTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdN
b2RlLCBzaG91bGRVc2VEaXNwbGF5TGlzdCwgUmVuZGVyaW5nUHVycG9zZTo6TWVkaWFQYWludGlu
ZywgMSwgY29sb3JTcGFjZSwgcGl4ZWxGb3JtYXQsIGhvc3RXaW5kb3cpOwogfQogCiB2b2lkIEhU
TUxWaWRlb0VsZW1lbnQ6OnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCShyZXZpc2lvbiAyNzY3MTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgs
OCBAQCBjbGFzcyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIFJlbmRlclZpZGVvOwogY2xhc3MgUGljdHVy
ZUluUGljdHVyZU9ic2VydmVyOwogCitlbnVtIGNsYXNzIERlc3RpbmF0aW9uQ29sb3JTcGFjZSA6
IHVpbnQ4X3Q7CitlbnVtIGNsYXNzIFBpeGVsRm9ybWF0IDogdWludDhfdDsKIGVudW0gY2xhc3Mg
UmVuZGVyaW5nTW9kZSA6IGJvb2w7CiAKIGNsYXNzIEhUTUxWaWRlb0VsZW1lbnQgZmluYWwgOiBw
dWJsaWMgSFRNTE1lZGlhRWxlbWVudCwgcHVibGljIFN1cHBsZW1lbnRhYmxlPEhUTUxWaWRlb0Vs
ZW1lbnQ+IHsKQEAgLTcwLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHZvaWQgd2Via2l0UmVxdWVz
dEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKICNlbmRpZgogCi0gICAgUmVmUHRyPEltYWdlQnVmZmVy
PiBjcmVhdGVCdWZmZXJGb3JQYWludGluZyhjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2Rl
KSBjb25zdDsKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUJ1ZmZlckZvclBhaW50aW5n
KGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwg
UGl4ZWxGb3JtYXQpIGNvbnN0OwogCiAgICAgLy8gVXNlZCBieSBjYW52YXMgdG8gZ2FpbiByYXcg
cGl4ZWwgYWNjZXNzCiAgICAgdm9pZCBwYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SW1hZ2VCaXRtYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VC
aXRtYXAuY3BwCShyZXZpc2lvbiAyNzY3MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdl
Qml0bWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDcgKzUwMiw5IEBAIHZvaWQgSW1hZ2VC
aXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXgKICAgICBhdXRvIHNvdXJjZVJlY3RhbmdsZSA9
IG1heWJlU291cmNlUmVjdGFuZ2xlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogCiAgICAgYXV0byBv
dXRwdXRTaXplID0gb3V0cHV0U2l6ZUZvclNvdXJjZVJlY3RhbmdsZShzb3VyY2VSZWN0YW5nbGUs
IG9wdGlvbnMpOwotICAgIGF1dG8gYml0bWFwRGF0YSA9IHZpZGVvLT5jcmVhdGVCdWZmZXJGb3JQ
YWludGluZyhvdXRwdXRTaXplLCBidWZmZXJSZW5kZXJpbmdNb2RlKTsKKyAgICAKKyAgICAvLyBG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIGNvbG9yIHNwYWNlcyAvIHBpeGVsIGZvcm1hdHMgdG8gSW1h
Z2VCaXRtYXAuCisgICAgYXV0byBiaXRtYXBEYXRhID0gdmlkZW8tPmNyZWF0ZUJ1ZmZlckZvclBh
aW50aW5nKG91dHB1dFNpemUsIGJ1ZmZlclJlbmRlcmluZ01vZGUsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OkJHUkE4KTsKICAgICBpZiAoIWJpdG1hcERhdGEpIHsK
ICAgICAgICAgcmVzb2x2ZVdpdGhCbGFua0ltYWdlQnVmZmVyKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsICF0YWludHNPcmlnaW4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5zZWN1cml0eU9yaWdpbigp
LCAqdmlkZW8pLCBXVEZNb3ZlKHByb21pc2UpKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwCShyZXZpc2lvbiAyNzY3MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywxNyAr
NjcsMTggQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogV1RGX01BS0VfSVNPX0FMTE9D
QVRFRF9JTVBMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7CiAKLXN0ZDo6dW5pcXVlX3B0cjxD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRl
KENhbnZhc0Jhc2UmIGNhbnZhcywgYm9vbCB1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSkK
K3N0ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcywgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEU2V0dGluZ3MmJiBzZXR0aW5ncywgYm9vbCB1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNl
TW9kZSkKIHsKLSAgICBhdXRvIHJlbmRlcmluZ0NvbnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEPihuZXcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKGNhbnZh
cywgdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpKTsKKyAgICBhdXRvIHJlbmRlcmluZ0Nv
bnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihuZXcgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEKGNhbnZhcywgV1RGTW92ZShzZXR0aW5ncyksIHVzZXNDU1ND
b21wYXRpYmlsaXR5UGFyc2VNb2RlKSk7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZENyZWF0ZUNhbnZhc1JlbmRlcmluZ0NvbnRleHQoKnJlbmRlcmluZ0NvbnRleHQpOwogCiAg
ICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7CiB9CiAKLUNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKENhbnZhc0Jhc2UmIGNhbnZhcywgYm9vbCB1c2Vz
Q1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSkKK0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEKENhbnZhc0Jhc2UmIGNhbnZhcywgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEU2V0dGluZ3MmJiBzZXR0aW5ncywgYm9vbCB1c2VzQ1NTQ29tcGF0aWJpbGl0eVBh
cnNlTW9kZSkKICAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UoY2FudmFzLCB1c2Vz
Q1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSkKKyAgICAsIG1fc2V0dGluZ3MgeyBXVEZNb3ZlKHNl
dHRpbmdzKSB9CiB7CiB9CiAKQEAgLTI0Miw0ICsyNDMsMjcgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmRyYXdUZXh0SQogICAgIGRyYXdUZXh0VW5jaGVja2VkKHRleHRSdW4sIHgs
IHksIGZpbGwsIG1heFdpZHRoKTsKIH0KIAorYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmlzRGVzeW5jaHJvbml6ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NldHRpbmdzLmRlc3lu
Y2hyb25pemVkOworfQorCitQaXhlbEZvcm1hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnBp
eGVsRm9ybWF0KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogVGFrZSBtX3NldHRpbmdzLmFscGhh
IGludG8gYWNjb3VudCBoZXJlIGFuZCBhZGQgUGl4ZWxGb3JtYXQ6OkJHUlg4LgorICAgIHJldHVy
biBQaXhlbEZvcm1hdDo6QkdSQTg7Cit9CisKK0Rlc3RpbmF0aW9uQ29sb3JTcGFjZSBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmNvbG9yU3BhY2UoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9z
ZXR0aW5ncy5jb2xvclNwYWNlKSB7CisgICAgY2FzZSBQcmVkZWZpbmVkQ29sb3JTcGFjZUVudW06
OlNSR0I6CisgICAgICAgIHJldHVybiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0I7CisgICAg
Y2FzZSBQcmVkZWZpbmVkQ29sb3JTcGFjZUVudW06OkRpc3BsYXlQMzoKKyAgICAgICAgcmV0dXJu
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6RGlzcGxheVAzOworICAgIH0KKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNpb24gMjc2NzE2
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIgorI2luY2x1ZGUgIkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRFNldHRpbmdzLmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQu
aCIKICNpbmNsdWRlIDxtZW1vcnk+CiAKQEAgLTM2LDEyICszNywxNCBAQCBjbGFzcyBUZXh0TWV0
cmljczsKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBmaW5hbCA6IHB1YmxpYyBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IGNyZWF0ZShDYW52YXNCYXNlJiwgYm9vbCB1
c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSk7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IGNyZWF0ZShDYW52YXNCYXNlJiwgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEU2V0dGluZ3MmJiwgYm9vbCB1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNl
TW9kZSk7CiAKICAgICB2aXJ0dWFsIH5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoKTsKIAogICAg
IEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxIVE1M
Q2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSgpKTsgfQogCisgICAgY29uc3QgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEU2V0dGluZ3MmIGdldENvbnRleHRBdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1
cm4gbV9zZXR0aW5nczsgfQorCiAgICAgdm9pZCBkcmF3Rm9jdXNJZk5lZWRlZChFbGVtZW50Jik7
CiAgICAgdm9pZCBkcmF3Rm9jdXNJZk5lZWRlZChQYXRoMkQmLCBFbGVtZW50Jik7CiAKQEAgLTU0
LDE3ICs1NywyMyBAQCBwdWJsaWM6CiAgICAgUmVmPFRleHRNZXRyaWNzPiBtZWFzdXJlVGV4dChj
b25zdCBTdHJpbmcmIHRleHQpOwogCiBwcml2YXRlOgotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRChDYW52YXNCYXNlJiwgYm9vbCB1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSk7Cisg
ICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKENhbnZhc0Jhc2UmLCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRTZXR0aW5ncyYmLCBib29sIHVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKTsK
IAogICAgIGJvb2wgaXMyZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICBjb25z
dCBGb250UHJveHkqIGZvbnRQcm94eSgpIGZpbmFsOwogICAgIHZvaWQgc2V0Rm9udFdpdGhvdXRV
cGRhdGluZ1N0eWxlKGNvbnN0IFN0cmluZyYpOwogCisgICAgYm9vbCBpc0Rlc3luY2hyb25pemVk
KCkgY29uc3QgZmluYWw7CisgICAgUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQoKSBjb25zdCBmaW5h
bDsKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IGZpbmFsOwor
CiAgICAgdm9pZCBkcmF3VGV4dEludGVybmFsKGNvbnN0IFN0cmluZyYgdGV4dCwgZmxvYXQgeCwg
ZmxvYXQgeSwgYm9vbCBmaWxsLCBPcHRpb25hbDxmbG9hdD4gbWF4V2lkdGggPSBXVEY6Om51bGxv
cHQpOwogCiAgICAgdm9pZCBkcmF3Rm9jdXNJZk5lZWRlZEludGVybmFsKGNvbnN0IFBhdGgmLCBF
bGVtZW50Jik7CiAKICAgICBUZXh0RGlyZWN0aW9uIHRvVGV4dERpcmVjdGlvbihDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpEaXJlY3Rpb24sIGNvbnN0IFJlbmRlclN0eWxlKiogY29tcHV0
ZWRTdHlsZSA9IG51bGxwdHIpIGNvbnN0OworCisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
U2V0dGluZ3MgbV9zZXR0aW5nczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmlkbAkocmV2aXNpb24gMjc2NzE2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMz
LDYgKzMzLDggQEAKICAgICAvLyBiYWNrLXJlZmVyZW5jZSB0byB0aGUgY2FudmFzCiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIEhUTUxDYW52YXNFbGVtZW50IGNhbnZhczsKIAorICAgIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRFNldHRpbmdzIGdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisKICAgICAv
LyBOb24tc3RhbmRhcmQgbGVnYWN5IGFsaWFzZXMgKENvbXBvc2l0aW5nKS4KICAgICBbSW1wbGVt
ZW50ZWRBcz1zZXRHbG9iYWxBbHBoYV0gdW5kZWZpbmVkIHNldEFscGhhKG9wdGlvbmFsIHVucmVz
dHJpY3RlZCBmbG9hdCBhbHBoYSA9IE5hTik7CiAgICAgW0ltcGxlbWVudGVkQXM9c2V0R2xvYmFs
Q29tcG9zaXRlT3BlcmF0aW9uXSB1bmRlZmluZWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlv
bmFsIERPTVN0cmluZyBjb21wb3NpdGVPcGVyYXRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZS5jcHAJKHJldmlzaW9uIDI3NjcxNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQzLDcg
KzE2NDMsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0CiAgICAg
ICAgIHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5n
bG9iYWxDb21wb3NpdGUgPT0gQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkpIHsKICAgICAgICAgaWYg
KCZzb3VyY2VDYW52YXMgPT0gJmNhbnZhc0Jhc2UoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8g
Y29weSA9IGJ1ZmZlci0+Y29weVJlY3RUb0J1ZmZlcihzcmNSZWN0LCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0IsICpjKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gY29weSA9IGJ1ZmZlci0+
Y29weVJlY3RUb0J1ZmZlcihzcmNSZWN0LCBjb2xvclNwYWNlKCksICpjKSkgewogICAgICAgICAg
ICAgICAgIGNsZWFyQ2FudmFzKCk7CiAgICAgICAgICAgICAgICAgYy0+ZHJhd0ltYWdlQnVmZmVy
KCpjb3B5LCBkc3RSZWN0LCB7IHsgfSwgc3JjUmVjdC5zaXplKCkgfSwgeyBzdGF0ZSgpLmdsb2Jh
bENvbXBvc2l0ZSwgc3RhdGUoKS5nbG9iYWxCbGVuZCB9KTsKICAgICAgICAgICAgIH0KQEAgLTIw
MjYsNyArMjAyNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4gQ2FudmEK
ICNlbmRpZgogCiAgICAgYXV0byByZW5kZXJpbmdNb2RlID0gIWRyYXdpbmdDb250ZXh0KCkgfHwg
ZHJhd2luZ0NvbnRleHQoKS0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKLSAgICBhdXRvIGlt
YWdlQnVmZmVyID0gdmlkZW9FbGVtZW50LmNyZWF0ZUJ1ZmZlckZvclBhaW50aW5nKHNpemUodmlk
ZW9FbGVtZW50KSwgcmVuZGVyaW5nTW9kZSk7CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHZpZGVv
RWxlbWVudC5jcmVhdGVCdWZmZXJGb3JQYWludGluZyhzaXplKHZpZGVvRWxlbWVudCksIHJlbmRl
cmluZ01vZGUsIGNvbG9yU3BhY2UoKSwgcGl4ZWxGb3JtYXQoKSk7CiAgICAgaWYgKCFpbWFnZUJ1
ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTI1MDcsNyArMjUwNyw3IEBAIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd1QKICAgICAgICAgICAgIH0KICAg
ICAgICAgfTsKIAotICAgICAgICBpZiAoYy0+Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKG1hc2tSZWN0
LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIFdURk1vdmUocGFpbnRNYXNrSW1hZ2UpKSA9
PSBHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdDo6RmFpbGVkVG9D
cmVhdGVJbWFnZUJ1ZmZlcikKKyAgICAgICAgaWYgKGMtPmNsaXBUb0RyYXdpbmdDb21tYW5kcyht
YXNrUmVjdCwgY29sb3JTcGFjZSgpLCBXVEZNb3ZlKHBhaW50TWFza0ltYWdlKSkgPT0gR3JhcGhp
Y3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OkZhaWxlZFRvQ3JlYXRlSW1h
Z2VCdWZmZXIpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgZHJhd1N0eWxlLmFwcGx5
RmlsbENvbG9yKCpjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgJKHJldmlzaW9uIDI3NjcxNikK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDggKzE5NSw2IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBjb25zdGV4cHIgZmxvYXQgd2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbygpIHsgcmV0
dXJuIDE7IH0KIAotICAgIHZvaWQgcmVzZXQoKTsKLQogICAgIGJvb2wgaW1hZ2VTbW9vdGhpbmdF
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKS5pbWFnZVNtb290aGluZ0VuYWJsZWQ7IH0K
ICAgICB2b2lkIHNldEltYWdlU21vb3RoaW5nRW5hYmxlZChib29sKTsKIApAQCAtMzI3LDYgKzMy
NSw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc0VudGlyZUJhY2tpbmdTdG9yZURpcnR5KCkgY29u
c3Q7CiAgICAgRmxvYXRSZWN0IGJhY2tpbmdTdG9yZUJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIEZs
b2F0UmVjdCB7IHsgfSwgRmxvYXRTaXplIHsgY2FudmFzQmFzZSgpLnNpemUoKSB9IH07IH0KIAor
ICAgIHZpcnR1YWwgdm9pZCByZXNldCgpIGZpbmFsOworICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NJ
bWFnZUJ1ZmZlclJldXNlKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgdm9pZCB1bndp
bmRTdGF0ZVN0YWNrKCk7CiAgICAgdm9pZCByZWFsaXplU2F2ZXNMb29wKCk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEU2V0dGluZ3MuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIlByZWRlZmluZWRDb2xvclNwYWNlRW51bS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0cnVjdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncyB7CisgICAgYm9vbCBhbHBo
YSB7IHRydWUgfTsKKyAgICBib29sIGRlc3luY2hyb25pemVkIHsgZmFsc2UgfTsKKyAgICBQcmVk
ZWZpbmVkQ29sb3JTcGFjZUVudW0gY29sb3JTcGFjZSB7IFByZWRlZmluZWRDb2xvclNwYWNlRW51
bTo6U1JHQiB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU2V0dGluZ3MuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRFNldHRpbmdzLmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIGh0dHBzOi8vaHRtbC5zcGVjLndo
YXR3Zy5vcmcvbXVsdGlwYWdlL2NhbnZhcy5odG1sI2NhbnZhc3JlbmRlcmluZ2NvbnRleHQyZHNl
dHRpbmdzCitbCisgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QsCitdIGRpY3Rpb25hcnkgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEU2V0dGluZ3MgeworICAgIGJvb2xlYW4gYWxwaGEgPSB0cnVlOwor
ICAgIGJvb2xlYW4gZGVzeW5jaHJvbml6ZWQgPSBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBpbiBhIHBhcnRpYWwgZGljdGlvbmFyeSBleHRlbnNpb24uCisgICAgLy8gRXh0
ZW5zaW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvY2FudmFzLWNvbG9yLXNwYWNlL2Js
b2IvbWFpbi9DYW52YXNDb2xvclNwYWNlUHJvcG9zYWwubWQuCisgICAgUHJlZGVmaW5lZENvbG9y
U3BhY2VFbnVtIGNvbG9yU3BhY2UgPSAic3JnYiI7Cit9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlz
aW9uIDI3NjcxNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTMgQEAKIAogI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgorI2luY2x1ZGUg
IkNvbG9yU3BhY2UuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCiAjaW5j
bHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZUJpdG1hcC5oIgorI2luY2x1ZGUgIlBpeGVs
Rm9ybWF0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC04MCw2ICs4Miwx
NiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OmRlcmVmKCkKICAgICBtX2NhbnZhcy5k
ZXJlZkNhbnZhc0Jhc2UoKTsKIH0KIAorUGl4ZWxGb3JtYXQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDo6cGl4ZWxGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBQaXhlbEZvcm1hdDo6QkdSQTg7
Cit9CisKK0Rlc3RpbmF0aW9uQ29sb3JTcGFjZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojpjb2xv
clNwYWNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
OworfQorCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OndvdWxkVGFpbnRPcmlnaW4oY29u
c3QgQ2FudmFzUGF0dGVybiogcGF0dGVybikKIHsKICAgICBpZiAobV9jYW52YXMub3JpZ2luQ2xl
YW4oKSAmJiBwYXR0ZXJuICYmICFwYXR0ZXJuLT5vcmlnaW5DbGVhbigpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAko
cmV2aXNpb24gMjc2NzE2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw5IEBAIGNsYXNzIElt
YWdlQml0bWFwOwogY2xhc3MgVHlwZWRPTUNTU0ltYWdlVmFsdWU7CiBjbGFzcyBXZWJHTE9iamVj
dDsKIAorZW51bSBjbGFzcyBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgOiB1aW50OF90OworZW51bSBj
bGFzcyBQaXhlbEZvcm1hdCA6IHVpbnQ4X3Q7CisKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
YW52YXNSZW5kZXJpbmdDb250ZXh0KTsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQpOwpAQCAtODYsNiArODksMTQgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBuZWVkc1ByZXBhcmF0aW9uRm9yRGlzcGxheSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEaXNwbGF5KCkgeyB9CiAKKyAgICB2aXJ0
dWFsIHZvaWQgcmVzZXQoKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzSW1hZ2VCdWZmZXJS
ZXVzZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAvLyBTZXR0aW5ncy4KKyAgICB2aXJ0dWFs
IGJvb2wgaXNEZXN5bmNocm9uaXplZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCgpIGNvbnN0OworICAgIHZpcnR1YWwgRGVzdGlu
YXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIGV4
cGxpY2l0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYpOwogICAgIGJvb2wgd291
bGRUYWludE9yaWdpbihjb25zdCBDYW52YXNQYXR0ZXJuKik7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9QcmVkZWZpbmVkQ29sb3JTcGFjZUVudW0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QcmVkZWZpbmVkQ29sb3JTcGFjZUVudW0uaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QcmVkZWZpbmVkQ29sb3JT
cGFjZUVudW0uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBQcmVkZWZp
bmVkQ29sb3JTcGFjZUVudW0geworICAgIFNSR0IsCisgICAgRGlzcGxheVAzCit9OworCit9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QcmVkZWZpbmVkQ29sb3JTcGFjZUVudW0u
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1ByZWRlZmluZWRD
b2xvclNwYWNlRW51bS5pZGwJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvUHJlZGVmaW5lZENvbG9yU3BhY2VFbnVtLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gQmFzZWQgb24gdGhlIHByb3Bvc2FsIGZyb20gaHR0
cHM6Ly9naXRodWIuY29tL1dJQ0cvY2FudmFzLWNvbG9yLXNwYWNlL2Jsb2IvbWFpbi9DYW52YXND
b2xvclNwYWNlUHJvcG9zYWwubWQuCitlbnVtIFByZWRlZmluZWRDb2xvclNwYWNlRW51bSB7Cisg
ICAgInNyZ2IiLAorICAgICJkaXNwbGF5LXAzIgorfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAyNzY3MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9EYXRl
VGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2lmIEVOQUJMRShEQVRFX0FORF9USU1FX0lOUFVUX1RZUEVTKQogCiAjaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2NJbmxpbmVzLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvclNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvclNwYWNlLmNwcAkocmV2aXNpb24gMjc2NzE2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDYg
KzczLDkgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgRAogICAgIGNh
c2UgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCOgogICAgICAgICB0cyA8PCAic1JHQiI7CiAg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRGVzdGluYXRpb25Db2xvclNwYWNlOjpEaXNwbGF5UDM6
CisgICAgICAgIHRzIDw8ICJEaXNwbGF5UDMiOworICAgICAgICBicmVhazsKICAgICB9CiAgICAg
cmV0dXJuIHRzOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yU3BhY2UuaAkocmV2aXNpb24gMjc2NzE2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBA
IGVudW0gY2xhc3MgQ29sb3JTcGFjZSA6IHVpbnQ4X3QgewogZW51bSBjbGFzcyBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UgOiB1aW50OF90IHsKICAgICBMaW5lYXJTUkdCLAogICAgIFNSR0IsCisgICAg
RGlzcGxheVAzCiB9OwogCiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoV1RGOjpUZXh0U3RyZWFtJiwgQ29sb3JTcGFjZSk7CkBAIC0xMjAsNyArMTIxLDggQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpEZQogICAgIHVzaW5nIHZhbHVlcyA9
IEVudW1WYWx1ZXM8CiAgICAgICAgIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSwKICAg
ICAgICAgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCLAotICAgICAg
ICBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IKKyAgICAgICAgV2ViQ29yZTo6
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLAorICAgICAgICBXZWJDb3JlOjpEZXN0aW5hdGlv
bkNvbG9yU3BhY2U6OkRpc3BsYXlQMwogICAgID47CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAkocmV2
aXNpb24gMjc2NzE2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJCYWNrZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NUeXBlc0dMLmgiCisjaW5jbHVkZSAiUGl4ZWxGb3JtYXQuaCIKICNpbmNsdWRlICJJbWFnZVBh
aW50aW5nT3B0aW9ucy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bUxheWVyLmgiCkBAIC01NSwxMyArNTYsNiBAQCBlbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlv
biA6IHVpbnQ4X3QgCiAgICAgWWVzLAogfTsKIAotZW51bSBjbGFzcyBQaXhlbEZvcm1hdCA6IHVp
bnQ4X3QgewotICAgIFJHQkE4LAotICAgIEJHUkE4LAotICAgIFJHQjEwLAotICAgIFJHQjEwQTgs
Ci19OwotCiBlbnVtIGNsYXNzIFZvbGF0aWxpdHlTdGF0ZSA6IHVpbnQ4X3QgewogICAgIFZhbGlk
LAogICAgIEVtcHR5CkBAIC0xNzAsMTYgKzE2NCw2IEBAIHByb3RlY3RlZDoKIAogbmFtZXNwYWNl
IFdURiB7CiAKLXRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UGl4ZWxGb3Jt
YXQ+IHsKLSAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAotICAgIFdlYkNvcmU6OlBpeGVs
Rm9ybWF0LAotICAgIFdlYkNvcmU6OlBpeGVsRm9ybWF0OjpSR0JBOCwKLSAgICBXZWJDb3JlOjpQ
aXhlbEZvcm1hdDo6QkdSQTgsCi0gICAgV2ViQ29yZTo6UGl4ZWxGb3JtYXQ6OlJHQjEwLAotICAg
IFdlYkNvcmU6OlBpeGVsRm9ybWF0OjpSR0IxMEE4Ci0gICAgPjsKLX07Ci0KIHRlbXBsYXRlPD4g
c3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uPiB7CiAgICAgdXNp
bmcgdmFsdWVzID0gRW51bVZhbHVlczwKICAgICBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24s
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaXhlbEZvcm1hdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BpeGVsRm9ybWF0
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGl4
ZWxGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2VudW0gY2xhc3MgUGl4ZWxGb3JtYXQgOiB1aW50OF90IHsKKyAgICBSR0JB
OCwKKyAgICBCR1JBOCwKKyAgICBSR0IxMCwKKyAgICBSR0IxMEE4LAorfTsKKworfQorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpQaXhl
bEZvcm1hdD4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgICAgIFdlYkNv
cmU6OlBpeGVsRm9ybWF0LAorICAgICAgICBXZWJDb3JlOjpQaXhlbEZvcm1hdDo6UkdCQTgsCisg
ICAgICAgIFdlYkNvcmU6OlBpeGVsRm9ybWF0OjpCR1JBOCwKKyAgICAgICAgV2ViQ29yZTo6UGl4
ZWxGb3JtYXQ6OlJHQjEwLAorICAgICAgICBXZWJDb3JlOjpQaXhlbEZvcm1hdDo6UkdCMTBBOAor
ICAgID47Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9Db2xvclNwYWNlQ0cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9Db2xvclNwYWNlQ0cuaAkocmV2aXNpb24gMjc2NzE2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JTcGFjZUNHLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzMyw2ICsxMzMsMTQgQEAgc3RhdGljIGlubGluZSBDR0NvbG9yU3BhY2VSZWYgY2FjaGVk
Q0dDbwogICAgIH0KICAgICBjYXNlIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQjoKICAgICAg
ICAgcmV0dXJuIHNSR0JDb2xvclNwYWNlUmVmKCk7CisgICAgY2FzZSBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OkRpc3BsYXlQMzogeworI2lmIEhBVkUoQ09SRV9HUkFQSElDU19ESVNQTEFZX1AzX0NP
TE9SX1NQQUNFKQorICAgICAgICByZXR1cm4gZGlzcGxheVAzQ29sb3JTcGFjZVJlZigpOworI2Vs
c2UKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBqdXN0IHJldHVybiBudWxscHRyIGhlcmUg
YW5kIGNoYW5nZSB0aGUgcmVxdWlyZW1lbnQgdGhhdCB0aGlzIG5vdCByZXR1cm4gbnVsbHB0ci4K
KyAgICAgICAgcmV0dXJuIHNSR0JDb2xvclNwYWNlUmVmKCk7CisjZW5kaWYKKyAgICB9CiAgICAg
fQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBzUkdCQ29sb3JTcGFjZVJl
ZigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427479</attachid>
            <date>2021-04-30 18:25:12 -0700</date>
            <delta_ts>2021-04-30 18:25:12 -0700</delta_ts>
            <desc>Now with ImageData support</desc>
            <filename>wip2.diff</filename>
            <type>text/plain</type>
            <size>129983</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVy
aW1lbnRhbC55YW1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNl
cy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55YW1sCShyZXZpc2lvbiAyNzY4MTkpCisrKyBT
b3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwu
eWFtbAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDYgKzI0NSwxOCBAQCBDU1NUeXBlZE9NRW5hYmxl
ZDoKICAgICAgICJFTkFCTEUoRVhQRVJJTUVOVEFMX0ZFQVRVUkVTKSAmJiAoUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShXUEUpKSI6IHRydWUKICAgICAgIGRlZmF1bHQ6IGZhbHNlCiAKK0NhbnZh
c0NvbG9yU3BhY2VFbmFibGVkOgorICB0eXBlOiBib29sCisgIGh1bWFuUmVhZGFibGVOYW1lOiAi
Q2FudmFzIENvbG9yIFNwYWNlcyIKKyAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9uOiAiRW5hYmxl
IHVzZSBvZiBwcmVkZWZpbmVkIGNhbnZhcyBjb2xvciBzcGFjZXMiCisgIGRlZmF1bHRWYWx1ZToK
KyAgICBXZWJLaXRMZWdhY3k6CisgICAgICBkZWZhdWx0OiBmYWxzZQorICAgIFdlYktpdDoKKyAg
ICAgIGRlZmF1bHQ6IGZhbHNlCisgICAgV2ViQ29yZToKKyAgICAgIGRlZmF1bHQ6IGZhbHNlCisK
IENhcHR1cmVWaWRlb0luR1BVUHJvY2Vzc0VuYWJsZWQ6CiAgIHR5cGU6IGJvb2wKICAgaHVtYW5S
ZWFkYWJsZU5hbWU6ICJHUFUgUHJvY2VzczogVmlkZW8gQ2FwdHVyZSIKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxh
dGZvcm1FbmFibGUuaAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dURi93dGYvUGxhdGZv
cm1FbmFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDYgKzI0NSwxNCBAQAogI2RlZmluZSBF
TkFCTEVfREVWSUNFX09SSUVOVEFUSU9OIDAKICNlbmRpZgogCisjaWYgIWRlZmluZWQoRU5BQkxF
X0RFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0RJU1BMQVlfUDMpCisjZGVmaW5lIEVOQUJMRV9ERVNU
SU5BVElPTl9DT0xPUl9TUEFDRV9ESVNQTEFZX1AzIDAKKyNlbmRpZgorCisjaWYgIWRlZmluZWQo
RU5BQkxFX0RFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQorI2RlZmluZSBFTkFC
TEVfREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IgMQorI2VuZGlmCisKICNpZiAh
ZGVmaW5lZChFTkFCTEVfRE9XTkxPQURfQVRUUklCVVRFKQogI2RlZmluZSBFTkFCTEVfRE9XTkxP
QURfQVRUUklCVVRFIDEKICNlbmRpZgpAQCAtODE2LDYgKzgyNCwxNCBAQAogI2RlZmluZSBFTkFC
TEVfR0NfVkFMSURBVElPTiAxCiAjZW5kaWYKIAorI2lmIE9TKERBUldJTikgJiYgRU5BQkxFKEpJ
VCkgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykgJiYgQ1BVKEFSTTY0RSkgJiYgSEFWRShKSVRf
Q0FHRSkKKyNkZWZpbmUgRU5BQkxFX0pJVF9DQUdFIDEKKyNlbmRpZgorCisjaWYgT1MoREFSV0lO
KSAmJiBDUFUoQUREUkVTUzY0KSAmJiBFTkFCTEUoSklUKSAmJiAoRU5BQkxFKEpJVF9DQUdFKSB8
fCBBU1NFUlRfRU5BQkxFRCkKKyNkZWZpbmUgRU5BQkxFX0pJVF9PUEVSQVRJT05fVkFMSURBVElP
TiAxCisjZW5kaWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9CSU5ESU5HX0lOVEVHUklUWSkgJiYg
IU9TKFdJTkRPV1MpCiAjZGVmaW5lIEVOQUJMRV9CSU5ESU5HX0lOVEVHUklUWSAxCiAjZW5kaWYK
QEAgLTg4NywxMCArOTAzLDE0IEBACiAjZXJyb3IgIkVOQUJMRShXSExTTF9DT01QSUxFUikgcmVx
dWlyZXMgRU5BQkxFKFdFQkdQVSkiCiAjZW5kaWYKIAotI2lmIE9TKERBUldJTikgJiYgRU5BQkxF
KEpJVCkgJiYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykgJiYgQ1BVKEFSTTY0RSkgJiYgSEFWRShK
SVRfQ0FHRSkKLSNkZWZpbmUgRU5BQkxFX0pJVF9DQUdFIDEKKyNpZiBVU0UoQ0cpCisKKyNpZiBF
TkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfRElTUExBWV9QMykgJiYgIUhBVkUoQ09SRV9H
UkFQSElDU19ESVNQTEFZX1AzX0NPTE9SX1NQQUNFKQorI2Vycm9yICJFTkFCTEUoREVTVElOQVRJ
T05fQ09MT1JfU1BBQ0VfRElTUExBWV9QMykgcmVxdWlyZXMgSEFWRShDT1JFX0dSQVBISUNTX0RJ
U1BMQVlfUDNfQ09MT1JfU1BBQ0UpIG9uIHBsYXRmb3JtcyB1c2luZyBDb3JlR3JhcGhpY3MiCisj
ZW5kaWYKKworI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikg
JiYgIUhBVkUoQ09SRV9HUkFQSElDU19MSU5FQVJfU1JHQl9DT0xPUl9TUEFDRSkKKyNlcnJvciAi
RU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKSByZXF1aXJlcyBIQVZF
KENPUkVfR1JBUEhJQ1NfTElORUFSX1NSR0JfQ09MT1JfU1BBQ0UpIG9uIHBsYXRmb3JtcyB1c2lu
ZyBDb3JlR3JhcGhpY3MiCiAjZW5kaWYKIAotI2lmIE9TKERBUldJTikgJiYgQ1BVKEFERFJFU1M2
NCkgJiYgRU5BQkxFKEpJVCkgJiYgKEVOQUJMRShKSVRfQ0FHRSkgfHwgQVNTRVJUX0VOQUJMRUQp
Ci0jZGVmaW5lIEVOQUJMRV9KSVRfT1BFUkFUSU9OX1ZBTElEQVRJT04gMQogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGVDb2NvYS5oCShyZXZpc2lvbiAyNzY4MTkpCisrKyBT
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3
MCwzICs2NzAsMTEgQEAKICNpZiAhZGVmaW5lZChFTkFCTEVfQVBQX0JPVU5EX1JFUVVFU1RTKSAm
JiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxNTAwMDAKICNkZWZpbmUgRU5BQkxFX0FQUF9CT1VORF9SRVFVRVNUUyAxCiAjZW5kaWYK
KworI2lmICFkZWZpbmVkKEVOQUJMRV9ERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9ESVNQTEFZX1Az
KQorI2RlZmluZSBFTkFCTEVfREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfRElTUExBWV9QMyAxCisj
ZW5kaWYKKworI2lmICFkZWZpbmVkKEVOQUJMRV9ERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5F
QVJfU1JHQikKKyNkZWZpbmUgRU5BQkxFX0RFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9T
UkdCIDEKKyNlbmRpZgpJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGVXaW5BcHBs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlV2luQXBwbGUu
aAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGVXaW5B
cHBsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNi0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICogQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCkBAIC01NCwzICs1NCw3IEBACiAjaWYgIWRlZmluZWQoRU5BQkxFX0dFT0xPQ0FU
SU9OKQogI2RlZmluZSBFTkFCTEVfR0VPTE9DQVRJT04gMQogI2VuZGlmCisKKyNpZiAhZGVmaW5l
ZChFTkFCTEVfREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpICYmICFIQVZFKENP
UkVfR1JBUEhJQ1NfTElORUFSX1NSR0JfQ09MT1JfU1BBQ0UpCisjZGVmaW5lIEVOQUJMRV9ERVNU
SU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQiAwCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAyNzY4MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTAyMyw2ICsxMDIzLDcgQEAgc2V0KFdlYkNvcmVfTk9O
X1NWR19JRExfRklMRVMKICAgICBodG1sL0ltYWdlQml0bWFwLmlkbAogICAgIGh0bWwvSW1hZ2VC
aXRtYXBPcHRpb25zLmlkbAogICAgIGh0bWwvSW1hZ2VEYXRhLmlkbAorICAgIGh0bWwvSW1hZ2VE
YXRhU2V0dGluZ3MuaWRsCiAgICAgaHRtbC9NZWRpYUNvbnRyb2xsZXIuaWRsCiAgICAgaHRtbC9N
ZWRpYUVuY3J5cHRlZEV2ZW50LmlkbAogICAgIGh0bWwvTWVkaWFFcnJvci5pZGwKQEAgLTEwNjYs
NiArMTA2Nyw3IEBAIHNldChXZWJDb3JlX05PTl9TVkdfSURMX0ZJTEVTCiAgICAgaHRtbC9jYW52
YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbAogICAgIGh0bWwvY2FudmFz
L1BhaW50UmVuZGVyaW5nQ29udGV4dDJELmlkbAogICAgIGh0bWwvY2FudmFzL1BhdGgyRC5pZGwK
KyAgICBodG1sL2NhbnZhcy9QcmVkZWZpbmVkQ29sb3JTcGFjZUVudW0uaWRsCiAKICAgICBodG1s
L3RyYWNrL0F1ZGlvVHJhY2suaWRsCiAgICAgaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5pZGwK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlz
dAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtaW5w
dXQueGNmaWxlbGlzdAkod29ya2luZyBjb3B5KQpAQCAtMTAzNiw2ICsxMDM2LDcgQEAgJChQUk9K
RUNUX0RJUikvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmlkbAogJChQUk9KRUNUX0RJUikvaHRtbC9J
bWFnZUJpdG1hcC5pZGwKICQoUFJPSkVDVF9ESVIpL2h0bWwvSW1hZ2VCaXRtYXBPcHRpb25zLmlk
bAogJChQUk9KRUNUX0RJUikvaHRtbC9JbWFnZURhdGEuaWRsCiskKFBST0pFQ1RfRElSKS9odG1s
L0ltYWdlRGF0YVNldHRpbmdzLmlkbAogJChQUk9KRUNUX0RJUikvaHRtbC9NZWRpYUNvbnRyb2xs
ZXIuaWRsCiAkKFBST0pFQ1RfRElSKS9odG1sL01lZGlhRW5jcnlwdGVkRXZlbnQuaWRsCiAkKFBS
T0pFQ1RfRElSKS9odG1sL01lZGlhRXJyb3IuaWRsCkBAIC0xMDk4LDYgKzEwOTksNyBAQCAkKFBS
T0pFQ1RfRElSKS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJhCiAkKFBST0pFQ1RfRElSKS9odG1s
L2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCiAkKFBST0pFQ1Rf
RElSKS9odG1sL2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRleHQyRC5pZGwKICQoUFJPSkVDVF9E
SVIpL2h0bWwvY2FudmFzL1BhdGgyRC5pZGwKKyQoUFJPSkVDVF9ESVIpL2h0bWwvY2FudmFzL1By
ZWRlZmluZWRDb2xvclNwYWNlRW51bS5pZGwKICQoUFJPSkVDVF9ESVIpL2h0bWwvY2FudmFzL1dl
YkdMMlJlbmRlcmluZ0NvbnRleHQuaWRsCiAkKFBST0pFQ1RfRElSKS9odG1sL2NhbnZhcy9XZWJH
TEFjdGl2ZUluZm8uaWRsCiAkKFBST0pFQ1RfRElSKS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5p
ZGwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2Zp
bGVsaXN0CShyZXZpc2lvbiAyNzY4MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNl
cy1vdXRwdXQueGNmaWxlbGlzdAkod29ya2luZyBjb3B5KQpAQCAtMTE4MCw2ICsxMTgwLDggQEAg
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYgogJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRl
eHRTZXR0aW5ncy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU0ltYWdlRGF0YS5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTSW1hZ2VEYXRhLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTSW1hZ2VEYXRhU2V0dGluZ3MuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ltYWdlRGF0YVNldHRpbmdzLmgKICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSW1hZ2VTbW9vdGhpbmdRdWFsaXR5
LmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJbWFn
ZVNtb290aGluZ1F1YWxpdHkuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNJbm5lckhUTUwuY3BwCkBAIC0xNjQyLDYgKzE2NDQsOCBAQCAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU1Bvc2l0aW9uT3B0aW9ucy5oCiAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1Bvc3RNZXNzYWdlT3B0aW9ucy5jcHAKICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTUG9zdE1lc3NhZ2VP
cHRpb25zLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
UHJlZGVmaW5lZENvbG9yU3BhY2VFbnVtLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNQcmVkZWZpbmVkQ29sb3JTcGFjZUVudW0uaAogJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24uY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU1By
b2Nlc3NpbmdJbnN0cnVjdGlvbi5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9KU1Byb2dyZXNzRXZlbnQuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UJKHJldmlzaW9uIDI3NjgxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTg5Nyw2ICs4OTcsNyBAQCBKU19CSU5ESU5HX0lE
TFMgOj0gXAogICAgICQoV2ViQ29yZSkvaHRtbC9JbWFnZUJpdG1hcC5pZGwgXAogICAgICQoV2Vi
Q29yZSkvaHRtbC9JbWFnZUJpdG1hcE9wdGlvbnMuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwv
SW1hZ2VEYXRhLmlkbCBcCisgICAgJChXZWJDb3JlKS9odG1sL0ltYWdlRGF0YVNldHRpbmdzLmlk
bCBcCiAgICAgJChXZWJDb3JlKS9odG1sL01lZGlhQ29udHJvbGxlci5pZGwgXAogICAgICQoV2Vi
Q29yZSkvaHRtbC9NZWRpYUVuY3J5cHRlZEV2ZW50LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1s
L01lZGlhRXJyb3IuaWRsIFwKQEAgLTk1OSw2ICs5NjAsNyBAQCBKU19CSU5ESU5HX0lETFMgOj0g
XAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9QYWludFJlbmRlcmluZ0Nv
bnRleHQyRC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvUGF0aDJELmlkbCBcCisg
ICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9QcmVkZWZpbmVkQ29sb3JTcGFjZUVudW0uaWRsIFwK
ICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaWRsIFwK
ICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5mby5pZGwgXAogICAgICQo
V2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaWRsIFwKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZQkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQko
d29ya2luZyBjb3B5KQpAQCAtNzAwLDYgKzcwMCw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBodG1sL0ltYWdlQml0bWFwLmgKICAgICBodG1sL0ltYWdlQml0
bWFwQmFja2luZy5oCiAgICAgaHRtbC9JbWFnZURhdGEuaAorICAgIGh0bWwvSW1hZ2VEYXRhU2V0
dGluZ3MuaAogICAgIGh0bWwvSW1hZ2VEb2N1bWVudC5oCiAgICAgaHRtbC9JbnB1dE1vZGUuaAog
ICAgIGh0bWwvTGFiZWxhYmxlRWxlbWVudC5oCkBAIC0xMjg2LDYgKzEyODcsNyBAQCBzZXQoV2Vi
Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0dGVybi5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGl4ZWxGb3JtYXQuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1JbWFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEzNDQsNiArMTM0NCw3IEBA
IGh0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnQKIGh0bWwvY2FudmFzL1Bh
aW50UmVuZGVyaW5nQ29udGV4dDJELmNwcAogaHRtbC9jYW52YXMvUGF0aDJELmNwcAogaHRtbC9j
YW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmNwcAoraHRtbC9jYW52YXMvUHJlZGVm
aW5lZENvbG9yU3BhY2VFbnVtLmNwcAogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4
dC5jcHAKIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAogaHRtbC9jYW52YXMvV2ViR0xDb2xv
ckJ1ZmZlckZsb2F0LmNwcApAQCAtMzE5OSw2ICszMjAwLDcgQEAgSlNJbWFnZUJpdG1hcE9wdGlv
bnMuY3BwCiBKU0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKIEpTSW1hZ2VCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MuY3BwCiBKU0ltYWdlRGF0YS5jcHAKK0pTSW1hZ2VEYXRh
U2V0dGluZ3MuY3BwCiBKU0ltYWdlU21vb3RoaW5nUXVhbGl0eS5jcHAKIEpTSW5wdXRFdmVudC5j
cHAKIEpTSW5zcGVjdG9yQXVkaXRBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtMzM2Nyw2ICsz
MzY5LDcgQEAgSlNQb3NpdGlvbkNhbGxiYWNrLmNwcAogSlNQb3NpdGlvbkVycm9yQ2FsbGJhY2su
Y3BwCiBKU1Bvc2l0aW9uT3B0aW9ucy5jcHAKIEpTUG9zdE1lc3NhZ2VPcHRpb25zLmNwcAorSlNQ
cmVkZWZpbmVkQ29sb3JTcGFjZUVudW0uY3BwCiBKU1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAK
IEpTUHJvZ3Jlc3NFdmVudC5jcHAKIEpTUHJvbWlzZVJlamVjdGlvbkV2ZW50LmNwcApJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MDk3LDYgKzQwOTcsOSBAQAogCQlCQ0Ey
NTcxNTEyOTNDMDEwMDA3QTI2M0QgLyogVmVydGljYWxQb3NpdGlvbkNhY2hlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0EyNTcxNDEyOTNDMDEwMDA3
QTI2M0QgLyogVmVydGljYWxQb3NpdGlvbkNhY2hlLmggKi87IH07CiAJCUJDQTJCMDYxMTA1MDQ3
NjAwMDQzQkQxQyAvKiBVc2VyU2NyaXB0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0EyQjA2MDEwNTA0NzVGMDA0M0JEMUMgLyogVXNlclNjcmlwdC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDQTJC
MDhCMTA1MDVCQ0QwMDQzQkQxQyAvKiBVc2VyU2NyaXB0VHlwZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTJCMDhBMTA1MDVCQ0QwMDQzQkQxQyAv
KiBVc2VyU2NyaXB0VHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlCQ0E1NTkwODI2M0I4MTQyMDA3RjE5QjMgLyogUGl4ZWxGb3JtYXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTU1OTA3MjYz
QjgxNDIwMDdGMTlCMyAvKiBQaXhlbEZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDQTU1OTBFMjYzQzU3MTQwMDdGMTlCMyAvKiBJbWFn
ZURhdGFTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNBNTU5MEEyNjNDNTZGNTAwN0YxOUIzIC8qIEltYWdlRGF0YVNldHRpbmdzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQkNBNTU5MEYy
NjNDNTczQTAwN0YxOUIzIC8qIFByZWRlZmluZWRDb2xvclNwYWNlRW51bS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBNTU5MDYyNjNCN0VCQzAwN0Yx
OUIzIC8qIFByZWRlZmluZWRDb2xvclNwYWNlRW51bS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDQTgzRTUwMEQ3Q0UxRTkwMDM0MjFBOCAvKiBK
U0RhdGFUcmFuc2Zlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNBODNFNEUwRDdDRTFFOTAwMzQyMUE4IC8qIEpTRGF0YVRyYW5zZmVyLmggKi87IH07
CiAJCUJDQTg0NkQ3MERDNjdBMzUwMDI2QzMwOSAvKiBSZW5kZXJSZXBsaWNhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E4NDZENTBEQzY3QTM1MDAy
NkMzMDkgLyogUmVuZGVyUmVwbGljYS5oICovOyB9OwogCQlCQ0E4QzgxRTExRTNEMzY5MDA4MTJG
QjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0E4QzgxQzExRTNEMzY5MDA4MTJGQjcgLyogQmFja0Zvcndh
cmRDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTE0MzEyLDYgKzE0MzE1LDEyIEBACiAJCUJDQTJCMDhBMTA1MDVCQ0QwMDQzQkQx
QyAvKiBVc2VyU2NyaXB0VHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VXNlclNjcmlwdFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTM3OEJB
MEQxNUY2NDIwMEI3OTNENiAvKiBTY2hlZHVsZWRBY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU2NoZWR1bGVkQWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkNBMzc4QkIwRDE1RjY0MjAwQjc5M0Q2IC8qIFNjaGVkdWxlZEFjdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY2hlZHVsZWRBY3Rpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNBNTU5MDQyNjNCN0VCQzAwN0YxOUIzIC8q
IFByZWRlZmluZWRDb2xvclNwYWNlRW51bS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUHJlZGVmaW5lZENvbG9yU3BhY2VF
bnVtLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNBNTU5MDYyNjNCN0VCQzAw
N0YxOUIzIC8qIFByZWRlZmluZWRDb2xvclNwYWNlRW51bS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmVk
ZWZpbmVkQ29sb3JTcGFjZUVudW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNB
NTU5MDcyNjNCODE0MjAwN0YxOUIzIC8qIFBpeGVsRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBpeGVsRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUJDQTU1OTBBMjYzQzU2RjUwMDdGMTlCMyAvKiBJbWFnZURhdGFTZXR0aW5ncy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbWFnZURhdGFTZXR0aW5ncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCQ0E1NTkwQzI2M0M1NkY1MDA3RjE5QjMgLyogSW1hZ2VEYXRhU2V0dGluZ3MuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IEltYWdlRGF0YVNldHRpbmdzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QkNBNTU5MTAyNjNDNjZGNjAwN0YxOUIzIC8qIFByZWRlZmluZWRDb2xvclNwYWNlRW51bS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQcmVkZWZpbmVkQ29sb3JTcGFjZUVudW0uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0E4M0UzNjBEN0NEQzRFMDAzNDIxQTggLyogRGF0YVRy
YW5zZmVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBEYXRhVHJhbnNmZXIuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0E4M0U0RDBEN0NFMUU5MDAzNDIxQTggLyogSlNE
YXRhVHJhbnNmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNE
YXRhVHJhbnNmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0E4M0U0RTBE
N0NFMUU5MDAzNDIxQTggLyogSlNEYXRhVHJhbnNmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNEYXRhVHJhbnNmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIwMTg5LDYgKzIwMTk4LDkgQEAKIAkJCQk3QzE5M0JCNDFGNUUwRUI3MDA4OEYzRTYgLyog
UGF0aDJELmlkbCAqLywKIAkJCQk3Qzc5MDNCQTFGODZGRjMzMDA0NjNBNzAgLyogUGxhY2Vob2xk
ZXJSZW5kZXJpbmdDb250ZXh0LmNwcCAqLywKIAkJCQk3Qzc5MDNCQzFGODZGRjM0MDA0NjNBNzAg
LyogUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmggKi8sCisJCQkJQkNBNTU5MTAyNjNDNjZG
NjAwN0YxOUIzIC8qIFByZWRlZmluZWRDb2xvclNwYWNlRW51bS5jcHAgKi8sCisJCQkJQkNBNTU5
MDYyNjNCN0VCQzAwN0YxOUIzIC8qIFByZWRlZmluZWRDb2xvclNwYWNlRW51bS5oICovLAorCQkJ
CUJDQTU1OTA0MjYzQjdFQkMwMDdGMTlCMyAvKiBQcmVkZWZpbmVkQ29sb3JTcGFjZUVudW0uaWRs
ICovLAogCQkJCUQzRjNEMzVCMUE2OUE1MDYwMDU5RkMyQiAvKiBXZWJHTDJSZW5kZXJpbmdDb250
ZXh0LmNwcCAqLywKIAkJCQlEM0YzRDM1QzFBNjlBNTA2MDA1OUZDMkIgLyogV2ViR0wyUmVuZGVy
aW5nQ29udGV4dC5oICovLAogCQkJCUQzRjNEMzVEMUE2OUE1MDYwMDU5RkMyQiAvKiBXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0LmlkbCAqLywKQEAgLTIzODg5LDYgKzIzOTAxLDggQEAKIAkJCQlBNzc5
NzkxMzBENkI5RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmNwcCAqLywKIAkJCQlBNzc5NzkxNDBE
NkI5RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmggKi8sCiAJCQkJQTc3OTc5MTUwRDZCOUQwQzAw
Mzg1MUI5IC8qIEltYWdlRGF0YS5pZGwgKi8sCisJCQkJQkNBNTU5MEEyNjNDNTZGNTAwN0YxOUIz
IC8qIEltYWdlRGF0YVNldHRpbmdzLmggKi8sCisJCQkJQkNBNTU5MEMyNjNDNTZGNTAwN0YxOUIz
IC8qIEltYWdlRGF0YVNldHRpbmdzLmlkbCAqLywKIAkJCQk5NzIwNUFCMTEyMzkyOTEwMDBCMTcz
ODAgLyogSW1hZ2VEb2N1bWVudC5jcHAgKi8sCiAJCQkJOTcyMDVBQjIxMjM5MjkxMDAwQjE3Mzgw
IC8qIEltYWdlRG9jdW1lbnQuaCAqLywKIAkJCQlGNTVCM0Q4RDEyNTFGMTJEMDAzRUYyNjkgLyog
SW1hZ2VJbnB1dFR5cGUuY3BwICovLApAQCAtMjcwMTEsNiArMjcwMjUsNyBAQAogCQkJCTJENTAw
MkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8sCiAJCQkJQThGQTZFNUMw
RTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4RkE2RTVCMEU0Q0ZERUQw
MEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJQkNBNTU5MDcyNjNCODE0MjAwN0YxOUIzIC8q
IFBpeGVsRm9ybWF0LmggKi8sCiAJCQkJNzI2RDU2RTEyNTNBRTA0MzAwMDJFRjkwIC8qIFBsYXRm
b3JtSW1hZ2UuaCAqLywKIAkJCQk3MkJBQzNBNjIzRTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oICovLAogCQkJCTU1MDY0MEFEMjQwNzU2REEwMEFBRTA0NSAvKiBQbGF0Zm9y
bUltYWdlQnVmZmVyQmFja2VuZC5oICovLApAQCAtMzI5NTEsNiArMzI5NjYsNyBAQAogCQkJCTkx
NzVDRTVFMjFFMjgxRUQwMERGMkMyNyAvKiBJbnNwZWN0b3JBdWRpdEFjY2Vzc2liaWxpdHlPYmpl
Y3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTkxNzVDRTVDMjFFMjgxRUQwMERGMkMyNyAvKiBJbnNw
ZWN0b3JBdWRpdERPTU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTEwOUU5QzgyMjJDQUJD
QTAwQkI2MjY0IC8qIEluc3BlY3RvckF1ZGl0UmVzb3VyY2VzT2JqZWN0LmggaW4gSGVhZGVycyAq
LywKKwkJCQlCQ0E1NTkwRTI2M0M1NzE0MDA3RjE5QjMgLyogSW1hZ2VEYXRhU2V0dGluZ3MuaCBp
biBIZWFkZXJzICovLAogCQkJCTZBMjJFODcwMUYxMDQxODYwMEY1NDZDMyAvKiBJbnNwZWN0b3JD
YW52YXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QjgxQ0E4MUZBQTQ0NjIwMDM3RDFFNiAvKiBJ
bnNwZWN0b3JDYW52YXNBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTVBQTU3MTAyNUVFRUQz
MjAwNEU5MjgzIC8qIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtMzU1MTgsNiArMzU1MzQsNyBAQAogCQkJCTBGNTRERDA5MTg4MUQ1RjUwMDNFRURCQiAvKiBU
b3VjaEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU0REQwQTE4ODFENUY1MDAzRUVEQkIg
LyogVG91Y2hMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzAzMzRENzE0NTlGRkQ1MDA4RDhE
NDUgLyogVHJhY2tCYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0E1NTkwODI2M0I4MTQyMDA3
RjE5QjMgLyogUGl4ZWxGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJFODhFMEMyMTcxNUNF
MjYwMDY1OEQ5OCAvKiBUcmFja0xpc3RCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRTkxM0Q4
MDE4MUVGOTI0MDBEQ0IwOUUgLyogVHJhY2tQcml2YXRlQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkZBQzMwRkUxODRGQjE0NTAwOEM0RjFFIC8qIFRyYWlsaW5nT2JqZWN0cy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zNTc4OCw2ICszNTgwNSw3IEBACiAJCQkJOTdBQUJEMjcxNEZBMDlENTAwNzQ1
N0FFIC8qIFdlYlNvY2tldEhhbmRzaGFrZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFFMTJFOUYy
NEZFNzRFMjAwOTNGRkI0IC8qIFdlYlNvY2tldElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzQjM4RUMzMjU4MjFEQjQwMDE5OEU2MyAvKiBXZWJTcGVlY2hSZWNvZ25pemVyVGFzay5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQkNBNTU5MEYyNjNDNTczQTAwN0YxOUIzIC8qIFByZWRlZmlu
ZWRDb2xvclNwYWNlRW51bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNCMzhFQzQyNTgyMURCNzAw
MTk4RTYzIC8qIFdlYlNwZWVjaFJlY29nbml6ZXJUYXNrTW9jay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUY4NzU2QjIxRTIyQzMzNTAwNDJDNDBEIC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNs
aWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFERUE0NTYxQjM5RjREOTAwRjc3MTc4IC8qIFdl
YlN5c3RlbUJhY2tkcm9wTGF5ZXIuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZp
c2lvbiAyNzY4MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDc2LDcgKzEwNzYsNyBAQCBwcml2YXRl
OgogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUgPSBidWZm
ZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2lu
dDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBidWZm
ZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7
IEludFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplIH0sIGJ1ZmZlci0+Y29sb3JTcGFjZSgpKTsK
ICAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0
aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MzM4NCw3ICszMzg0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIElu
dFNpemUgaW1hZ2VTaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWxlbmd0aCB8fCAoaW1hZ2VTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpIDw9IGxlbmd0
aCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlU2l6
ZSk7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc2VyaWFsaXppbmcg
dGhlIGNvbG9yIHNwYWNlLgorICAgICAgICAgICAgYXV0byByZXN1bHQgPSBJbWFnZURhdGE6OmNy
ZWF0ZShpbWFnZVNpemUsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQik7CiAgICAgICAgICAg
ICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5jcHAJKHJldmlzaW9uIDI3NjgxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiQ2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzLmgiCisjaW5j
bHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgpAQCAtMzY1LDEz
ICszNjYsMTAgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBIVE1MQ2FudmFzRWxlbQogICAg
IEFTU0VSVCghbV9jb250ZXh0KTsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCB1c2UgbW9y
ZSBwaXhlbCBtZW1vcnkgdGhhbiB0aGUgc3lzdGVtIGNhbiBzdXBwb3J0LgotICAgIHNpemVfdCBy
ZXF1ZXN0ZWRQaXhlbE1lbW9yeSA9IDQgKiB3aWR0aCgpICogaGVpZ2h0KCk7Ci0gICAgaWYgKGFj
dGl2ZVBpeGVsTWVtb3J5KCkgKyByZXF1ZXN0ZWRQaXhlbE1lbW9yeSA+IG1heEFjdGl2ZVBpeGVs
TWVtb3J5KCkpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlRvdGFsIGNhbnZhcyBtZW1vcnkgdXNlIGV4
Y2VlZHMgdGhlIG1heGltdW0gbGltaXQgKCIpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZE51bWJlcihtYXhBY3RpdmVQaXhlbE1lbW9yeSgpIC8gMTAyNCAvIDEwMjQpOwotICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBNQikuIik7Ci0gICAgICAgIGRvY3VtZW50KCku
YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6V2Fybmlu
Zywgc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBhdXRvIGFyZWEgPSBzaXplKCkuYXJl
YTxSZWNvcmRPdmVyZmxvdz4oKTsKKyAgICBhdXRvIHRvdGFsUGl4ZWxNZW1vcnkgPSAoYXJlYSAq
IDQpICsgYWN0aXZlUGl4ZWxNZW1vcnkoKTsKKyAgICBpZiAodG90YWxQaXhlbE1lbW9yeS5oYXNP
dmVyZmxvd2VkKCkgfHwgdG90YWxQaXhlbE1lbW9yeSA+IG1heEFjdGl2ZVBpeGVsTWVtb3J5KCkp
IHsKKyAgICAgICAgZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpK
UywgTWVzc2FnZUxldmVsOjpXYXJuaW5nLCBtYWtlU3RyaW5nKCJUb3RhbCBjYW52YXMgbWVtb3J5
IHVzZSBleGNlZWRzIHRoZSBtYXhpbXVtIGxpbWl0ICgiLCBtYXhBY3RpdmVQaXhlbE1lbW9yeSgp
IC8gMTAyNCAvIDEwMjQsICIgTUIpLiIpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCkBAIC05MTEsMzkgKzkwOSw0MCBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJ
bWFnZUJ1ZmZlCiB7CiAgICAgQVNTRVJUKCFoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSk7CiAKKyAg
ICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fY29udGV4
dC0+aXMyZCgpKTsKKwogICAgIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyID0gdHJ1ZTsKICAgICBt
X2RpZENsZWFySW1hZ2VCdWZmZXIgPSB0cnVlOwogCi0gICAgLy8gUGVyZm9ybSBtdWx0aXBsaWNh
dGlvbiBhcyBmbG9hdGluZyBwb2ludCB0byBhdm9pZCBvdmVyZmxvdwotICAgIGlmIChmbG9hdCh3
aWR0aCgpKSAqIGhlaWdodCgpID4gbWF4Q2FudmFzQXJlYSkgewotICAgICAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
Q2FudmFzIGFyZWEgZXhjZWVkcyB0aGUgbWF4aW11bSBsaW1pdCAod2lkdGggKiBoZWlnaHQgPiAi
KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIobWF4Q2FudmFzQXJlYSk7Ci0g
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKS4iKTsKLSAgICAgICAgZG9jdW1l
bnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpX
YXJuaW5nLCBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIGlmIChzaXplKCkuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGFyZWEgPSBzaXplKCkuYXJlYTxSZWNv
cmRPdmVyZmxvdz4oKTsKKyAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkgfHwgYXJlYSA+IG1h
eENhbnZhc0FyZWEpIHsKKyAgICAgICAgZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNz
YWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpXYXJuaW5nLCBtYWtlU3RyaW5nKCJDYW52YXMg
YXJlYSBleGNlZWRzIHRoZSBtYXhpbXVtIGxpbWl0ICh3aWR0aCAqIGhlaWdodCA+ICIsIG1heENh
bnZhc0FyZWEsICIpLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICAvLyBN
YWtlIHN1cmUgd2UgZG9uJ3QgdXNlIG1vcmUgcGl4ZWwgbWVtb3J5IHRoYW4gdGhlIHN5c3RlbSBj
YW4gc3VwcG9ydC4KLSAgICBzaXplX3QgcmVxdWVzdGVkUGl4ZWxNZW1vcnkgPSA0ICogd2lkdGgo
KSAqIGhlaWdodCgpOwotICAgIGlmIChhY3RpdmVQaXhlbE1lbW9yeSgpICsgcmVxdWVzdGVkUGl4
ZWxNZW1vcnkgPiBtYXhBY3RpdmVQaXhlbE1lbW9yeSgpKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJU
b3RhbCBjYW52YXMgbWVtb3J5IHVzZSBleGNlZWRzIHRoZSBtYXhpbXVtIGxpbWl0ICgiKTsKLSAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIobWF4QWN0aXZlUGl4ZWxNZW1vcnkoKSAv
IDEwMjQgLyAxMDI0KTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgTUIp
LiIpOwotICAgICAgICBkb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6
OkpTLCBNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7Cisg
ICAgYXV0byB0b3RhbFBpeGVsTWVtb3J5ID0gKGFyZWEgKiA0KSArIGFjdGl2ZVBpeGVsTWVtb3J5
KCk7CisgICAgaWYgKHRvdGFsUGl4ZWxNZW1vcnkuaGFzT3ZlcmZsb3dlZCgpIHx8IHRvdGFsUGl4
ZWxNZW1vcnkgPiBtYXhBY3RpdmVQaXhlbE1lbW9yeSgpKSB7CisgICAgICAgIGRvY3VtZW50KCku
YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6V2Fybmlu
ZywgbWFrZVN0cmluZygiVG90YWwgY2FudmFzIG1lbW9yeSB1c2UgZXhjZWVkcyB0aGUgbWF4aW11
bSBsaW1pdCAoIiwgbWF4QWN0aXZlUGl4ZWxNZW1vcnkoKSAvIDEwMjQgLyAxMDI0LCAiIE1CKS4i
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdo
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGhvc3RXaW5kb3cgPSAoZG9jdW1lbnQo
KS52aWV3KCkgJiYgZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKSkgPyBkb2N1bWVudCgpLnZpZXco
KS0+cm9vdCgpLT5ob3N0V2luZG93KCkgOiBudWxscHRyOworICAgIC8vIEZJWE1FOiBEb2VzIGl0
IG1ha2Ugc2Vuc2UgdG8gY3JlYXQgdGhlIGJ1ZmZlciBpZiB0aGVyZSBpcyBubyBwYWdlPworICAg
IGF1dG8gaG9zdFdpbmRvdyA9IGRvY3VtZW50KCkucGFnZSgpID8gJmRvY3VtZW50KCkucGFnZSgp
LT5jaHJvbWUoKSA6IG51bGxwdHI7CiAKICAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBzaG91bGRB
Y2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAgICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5nIGZv
ciBEaXNwbGF5TGlzdCBkcmF3aW5nIG9uIGNhbnZhcy4KICAgICBhdXRvIHVzZURpc3BsYXlMaXN0
ID0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nLnZhbHVlT3IoZG9jdW1lbnQoKS5zZXR0aW5ncygp
LmRpc3BsYXlMaXN0RHJhd2luZ0VuYWJsZWQoKSkgPyBTaG91bGRVc2VEaXNwbGF5TGlzdDo6WWVz
IDogU2hvdWxkVXNlRGlzcGxheUxpc3Q6Ok5vOwotICAgIHNldEltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJpbmdNb2RlLCB1c2VEaXNwbGF5TGlzdCwgUmVuZGVy
aW5nUHVycG9zZTo6Q2FudmFzLCAxLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIFBpeGVs
Rm9ybWF0OjpCR1JBOCwgaG9zdFdpbmRvdykpOworICAgIGF1dG8gY29sb3JTcGFjZSA9IG1fY29u
dGV4dC0+Y29sb3JTcGFjZSgpOworICAgIGF1dG8gcGl4ZWxGb3JtYXQgPSBtX2NvbnRleHQtPnBp
eGVsRm9ybWF0KCk7CisKKyAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUoKSwgcmVuZGVyaW5nTW9kZSwgdXNlRGlzcGxheUxpc3QsIFJlbmRlcmluZ1B1cnBvc2U6OkNh
bnZhcywgMSwgY29sb3JTcGFjZSwgcGl4ZWxGb3JtYXQsIGhvc3RXaW5kb3cpKTsKIAogICAgIGlm
IChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKICAgICAgICAgYnVmZmVy
KCktPmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyNzY4MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxW
aWRlb0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsMTEgKzI4MSwxMSBAQCB2b2lk
IEhUTUxWaWRlb0VsZW1lbnQ6Om1lZGlhUGxheWVyRmlyc3RWCiAgICAgICAgIHJlbmRlcmVyLT51
cGRhdGVGcm9tRWxlbWVudCgpOwogfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IEhUTUxWaWRlb0Vs
ZW1lbnQ6OmNyZWF0ZUJ1ZmZlckZvclBhaW50aW5nKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSBjb25zdAorUmVmUHRyPEltYWdlQnVmZmVyPiBIVE1M
VmlkZW9FbGVtZW50OjpjcmVhdGVCdWZmZXJGb3JQYWludGluZyhjb25zdCBGbG9hdFNpemUmIHNp
emUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNv
bG9yU3BhY2UsIFBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0KSBjb25zdAogewogICAgIGF1dG8qIGhv
c3RXaW5kb3cgPSBkb2N1bWVudCgpLnZpZXcoKSAmJiBkb2N1bWVudCgpLnZpZXcoKS0+cm9vdCgp
ID8gZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKS0+aG9zdFdpbmRvdygpIDogbnVsbHB0cjsKICAg
ICBhdXRvIHNob3VsZFVzZURpc3BsYXlMaXN0ID0gZG9jdW1lbnQoKS5zZXR0aW5ncygpLmRpc3Bs
YXlMaXN0RHJhd2luZ0VuYWJsZWQoKSA/IFNob3VsZFVzZURpc3BsYXlMaXN0OjpZZXMgOiBTaG91
bGRVc2VEaXNwbGF5TGlzdDo6Tm87Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSwgcmVuZGVyaW5nTW9kZSwgc2hvdWxkVXNlRGlzcGxheUxpc3QsIFJlbmRlcmluZ1B1cnBvc2U6
Ok1lZGlhUGFpbnRpbmcsIDEsIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4LCBob3N0V2luZG93KTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplLCByZW5kZXJpbmdNb2RlLCBzaG91bGRVc2VEaXNwbGF5TGlzdCwgUmVuZGVyaW5nUHVycG9z
ZTo6TWVkaWFQYWludGluZywgMSwgY29sb3JTcGFjZSwgcGl4ZWxGb3JtYXQsIGhvc3RXaW5kb3cp
OwogfQogCiB2b2lkIEhUTUxWaWRlb0VsZW1lbnQ6OnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCShyZXZpc2lvbiAyNzY4MTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsNiArMzgsOCBAQCBjbGFzcyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIFJlbmRlclZpZGVv
OwogY2xhc3MgUGljdHVyZUluUGljdHVyZU9ic2VydmVyOwogCitlbnVtIGNsYXNzIERlc3RpbmF0
aW9uQ29sb3JTcGFjZSA6IHVpbnQ4X3Q7CitlbnVtIGNsYXNzIFBpeGVsRm9ybWF0IDogdWludDhf
dDsKIGVudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSA6IGJvb2w7CiAKIGNsYXNzIEhUTUxWaWRlb0Vs
ZW1lbnQgZmluYWwgOiBwdWJsaWMgSFRNTE1lZGlhRWxlbWVudCwgcHVibGljIFN1cHBsZW1lbnRh
YmxlPEhUTUxWaWRlb0VsZW1lbnQ+IHsKQEAgLTcwLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHZv
aWQgd2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKSBvdmVycmlkZTsKICNlbmRpZgogCi0gICAgUmVm
UHRyPEltYWdlQnVmZmVyPiBjcmVhdGVCdWZmZXJGb3JQYWludGluZyhjb25zdCBGbG9hdFNpemUm
LCBSZW5kZXJpbmdNb2RlKSBjb25zdDsKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUJ1
ZmZlckZvclBhaW50aW5nKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIERlc3RpbmF0
aW9uQ29sb3JTcGFjZSwgUGl4ZWxGb3JtYXQpIGNvbnN0OwogCiAgICAgLy8gVXNlZCBieSBjYW52
YXMgdG8gZ2FpbiByYXcgcGl4ZWwgYWNjZXNzCiAgICAgdm9pZCBwYWludEN1cnJlbnRGcmFtZUlu
Q29udGV4dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCShyZXZpc2lvbiAyNzY4MTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDcgKzUwMiw5
IEBAIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXgKICAgICBhdXRvIHNv
dXJjZVJlY3RhbmdsZSA9IG1heWJlU291cmNlUmVjdGFuZ2xlLnJlbGVhc2VSZXR1cm5WYWx1ZSgp
OwogCiAgICAgYXV0byBvdXRwdXRTaXplID0gb3V0cHV0U2l6ZUZvclNvdXJjZVJlY3RhbmdsZShz
b3VyY2VSZWN0YW5nbGUsIG9wdGlvbnMpOwotICAgIGF1dG8gYml0bWFwRGF0YSA9IHZpZGVvLT5j
cmVhdGVCdWZmZXJGb3JQYWludGluZyhvdXRwdXRTaXplLCBidWZmZXJSZW5kZXJpbmdNb2RlKTsK
KworICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY29sb3Igc3BhY2VzIC8gcGl4ZWwgZm9y
bWF0cyB0byBJbWFnZUJpdG1hcC4KKyAgICBhdXRvIGJpdG1hcERhdGEgPSB2aWRlby0+Y3JlYXRl
QnVmZmVyRm9yUGFpbnRpbmcob3V0cHV0U2l6ZSwgYnVmZmVyUmVuZGVyaW5nTW9kZSwgRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6QkdSQTgpOwogICAgIGlmICghYml0
bWFwRGF0YSkgewogICAgICAgICByZXNvbHZlV2l0aEJsYW5rSW1hZ2VCdWZmZXIoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgIXRhaW50c09yaWdpbihzY3JpcHRFeGVjdXRpb25Db250ZXh0LnNlY3Vy
aXR5T3JpZ2luKCksICp2aWRlbyksIFdURk1vdmUocHJvbWlzZSkpOwogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwT3B0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXBPcHRpb25zLmgJKHJldmlzaW9u
IDI3NjgxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXBPcHRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRl
ICJQcmVkZWZpbmVkQ29sb3JTcGFjZUVudW0uaCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDEsNiArNDIsOCBAQCBzdHJ1Y3QgSW1hZ2VCaXRt
YXBPcHRpb25zIHsKICAgICBPcHRpb25hbDx1bnNpZ25lZD4gcmVzaXplV2lkdGg7CiAgICAgT3B0
aW9uYWw8dW5zaWduZWQ+IHJlc2l6ZUhlaWdodDsKICAgICBSZXNpemVRdWFsaXR5IHJlc2l6ZVF1
YWxpdHkgeyBSZXNpemVRdWFsaXR5OjpMb3cgfTsKKyAgICAKKyAgICBQcmVkZWZpbmVkQ29sb3JT
cGFjZUVudW0gY29sb3JTcGFjZSB7IFByZWRlZmluZWRDb2xvclNwYWNlRW51bTo6U1JHQiB9Owog
fTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcE9wdGlvbnMuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXBPcHRpb25zLmlk
bAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcE9w
dGlvbnMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw0ICszNSw3IEBAIGRpY3Rpb25hcnkgSW1h
Z2VCaXRtYXBPcHRpb25zIHsKICAgICBbRW5mb3JjZVJhbmdlXSB1bnNpZ25lZCBsb25nIHJlc2l6
ZVdpZHRoOwogICAgIFtFbmZvcmNlUmFuZ2VdIHVuc2lnbmVkIGxvbmcgcmVzaXplSGVpZ2h0Owog
ICAgIFJlc2l6ZVF1YWxpdHkgcmVzaXplUXVhbGl0eSA9ICJsb3ciOworCisgICAgLy8gQmFzZWQg
b24gdGhlIHByb3Bvc2FsIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvY2FudmFzLWNvbG9y
LXNwYWNlL2Jsb2IvbWFpbi9DYW52YXNDb2xvclNwYWNlUHJvcG9zYWwubWQuCisgICAgW0VuYWJs
ZWRCeVNldHRpbmc9Q2FudmFzQ29sb3JTcGFjZV0gUHJlZGVmaW5lZENvbG9yU3BhY2VFbnVtIGNv
bG9yU3BhY2UgPSAic3JnYiI7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmNwcAko
cmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCwzNyArMzAsNDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJJbWFnZURhdGEuaCIKIAorI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBPcHRpb25hbDxQcmVkZWZp
bmVkQ29sb3JTcGFjZUVudW0+IHRvUHJlZGVmaW5lZENvbG9yU3BhY2VFbnVtKERlc3RpbmF0aW9u
Q29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgeworICAg
IGNhc2UgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCOgorICAgICAgICByZXR1cm4gUHJlZGVm
aW5lZENvbG9yU3BhY2VFbnVtOjpTUkdCOworI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9T
UEFDRV9MSU5FQVJfU1JHQikKKyAgICBjYXNlIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFy
U1JHQjoKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyNlbmRpZgorI2lmIEVOQUJMRShE
RVNUSU5BVElPTl9DT0xPUl9TUEFDRV9ESVNQTEFZX1AzKQorICAgIGNhc2UgRGVzdGluYXRpb25D
b2xvclNwYWNlOjpEaXNwbGF5UDM6CisgICAgICAgIHJldHVybiBQcmVkZWZpbmVkQ29sb3JTcGFj
ZUVudW06OkRpc3BsYXlQMzsKKyNlbmRpZgorICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKIENoZWNrZWQ8dW5zaWduZWQsIFJl
Y29yZE92ZXJmbG93PiBJbWFnZURhdGE6OmRhdGFTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7
Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWREYXRhU2l6ZSA9
IDQ7Ci0gICAgY2hlY2tlZERhdGFTaXplICo9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXplLndp
ZHRoKCkpOwotICAgIGNoZWNrZWREYXRhU2l6ZSAqPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6
ZS5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIGNoZWNrZWREYXRhU2l6ZTsKKyAgICByZXR1cm4gc2l6
ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPEltYWdl
RGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRlKHVuc2lnbmVkIHN3LCB1bnNpZ25lZCBzaCkKK1JlZlB0
cjxJbWFnZURhdGE+IEltYWdlRGF0YTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewotICAgIGlmICghc3cgfHwgIXNoKQotICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKLSAgICBJbnRTaXplIHNp
emUoc3csIHNoKTsKLSAgICBhdXRvIGRhdGFTaXplID0gSW1hZ2VEYXRhOjpkYXRhU2l6ZShzaXpl
KTsKLSAgICBpZiAoZGF0YVNpemUuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgUmFuZ2VFcnJvciwgIkNhbm5vdCBhbGxvY2F0ZSBhIGJ1ZmZlciBvZiB0aGlzIHNp
emUiX3MgfTsKLSAgICBhdXRvIGJ5dGVBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVh
dGVVbmluaXRpYWxpemVkKGRhdGFTaXplLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIWJ5dGVBcnJh
eSkgewotICAgICAgICAvLyBGSVhNRTogRG9lcyB0aGlzIG5lZWQgdG8gYmUgYSAicmVhbCIgb3V0
IG9mIG1lbW9yeSBlcnJvciB3aXRoIHNldE91dE9mTWVtb3J5RXJyb3IgY2FsbGVkIG9uIGl0Pwot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgUmFuZ2VFcnJvciwgIk91dCBvZiBtZW1vcnkiX3Mg
fTsKLSAgICB9Ci0gICAgYnl0ZUFycmF5LT56ZXJvRmlsbCgpOwotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEltYWdlRGF0YShzaXplLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwoKSkpOworICAg
IGF1dG8gcHJlZGVmaW5lZENvbG9yU3BhY2UgPSB0b1ByZWRlZmluZWRDb2xvclNwYWNlRW51bShj
b2xvclNwYWNlKTsKKyAgICBpZiAoIXByZWRlZmluZWRDb2xvclNwYWNlKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIEltYWdlRGF0YVNldHRpbmdzIHNldHRpbmdzOworICAgIHNldHRp
bmdzLmNvbG9yU3BhY2UgPSAqcHJlZGVmaW5lZENvbG9yU3BhY2U7CisKKyAgICByZXR1cm4gSW1h
Z2VEYXRhOjpjcmVhdGUoc2l6ZSwgV1RGTW92ZShzZXR0aW5ncykpOwogfQogCi1SZWZQdHI8SW1h
Z2VEYXRhPiBJbWFnZURhdGE6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplKQorUmVmUHRyPElt
YWdlRGF0YT4gSW1hZ2VEYXRhOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSW1hZ2VEYXRh
U2V0dGluZ3Mgc2V0dGluZ3MpCiB7CiAgICAgYXV0byBkYXRhU2l6ZSA9IEltYWdlRGF0YTo6ZGF0
YVNpemUoc2l6ZSk7CiAgICAgaWYgKGRhdGFTaXplLmhhc092ZXJmbG93ZWQoKSkKQEAgLTY4LDE4
ICs4MCwzNiBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZURhdGE6OmNyZWF0ZShjb25zCiAgICAg
YXV0byBieXRlQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChkYXRhU2l6ZS51bnNhZmVHZXQoKSk7CiAgICAgaWYgKCFieXRlQXJyYXkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltYWdlRGF0YShzaXplLCBi
eXRlQXJyYXkucmVsZWFzZU5vbk51bGwoKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElt
YWdlRGF0YShzaXplLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShzZXR0aW5n
cykpKTsKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VEYXRhOjpjcmVhdGUoY29uc3QgSW50
U2l6ZSYgc2l6ZSwgUmVmPFVpbnQ4Q2xhbXBlZEFycmF5PiYmIGJ5dGVBcnJheSkKK1JlZlB0cjxJ
bWFnZURhdGE+IEltYWdlRGF0YTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIFJlZjxVaW50
OENsYW1wZWRBcnJheT4mJiBieXRlQXJyYXksIEltYWdlRGF0YVNldHRpbmdzIHNldHRpbmdzKQog
ewogICAgIGF1dG8gZGF0YVNpemUgPSBJbWFnZURhdGE6OmRhdGFTaXplKHNpemUpOwogICAgIGlm
IChkYXRhU2l6ZS5oYXNPdmVyZmxvd2VkKCkgfHwgZGF0YVNpemUudW5zYWZlR2V0KCkgPiBieXRl
QXJyYXktPmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBJbWFnZURhdGEoc2l6ZSwgV1RGTW92ZShieXRlQXJyYXkpKSk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VEYXRhKHNpemUsIFdURk1vdmUoYnl0ZUFycmF5KSwgV1RG
TW92ZShzZXR0aW5ncykpKTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdl
RGF0YTo6Y3JlYXRlKFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiBieXRlQXJyYXksIHVuc2lnbmVk
IHN3LCBPcHRpb25hbDx1bnNpZ25lZD4gc2gpCitFeGNlcHRpb25PcjxSZWY8SW1hZ2VEYXRhPj4g
SW1hZ2VEYXRhOjpjcmVhdGUodW5zaWduZWQgc3csIHVuc2lnbmVkIHNoLCBJbWFnZURhdGFTZXR0
aW5ncyBzZXR0aW5ncykKK3sKKyAgICBpZiAoIXN3IHx8ICFzaCkKKyAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CisgICAgSW50U2l6ZSBzaXplKHN3LCBzaCk7Cisg
ICAgYXV0byBkYXRhU2l6ZSA9IEltYWdlRGF0YTo6ZGF0YVNpemUoc2l6ZSk7CisgICAgaWYgKGRh
dGFTaXplLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFJhbmdl
RXJyb3IsICJDYW5ub3QgYWxsb2NhdGUgYSBidWZmZXIgb2YgdGhpcyBzaXplIl9zIH07CisgICAg
YXV0byBieXRlQXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChkYXRhU2l6ZS51bnNhZmVHZXQoKSk7CisgICAgaWYgKCFieXRlQXJyYXkpIHsKKyAgICAgICAg
Ly8gRklYTUU6IERvZXMgdGhpcyBuZWVkIHRvIGJlIGEgInJlYWwiIG91dCBvZiBtZW1vcnkgZXJy
b3Igd2l0aCBzZXRPdXRPZk1lbW9yeUVycm9yIGNhbGxlZCBvbiBpdD8KKyAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFJhbmdlRXJyb3IsICJPdXQgb2YgbWVtb3J5Il9zIH07CisgICAgfQorICAg
IGJ5dGVBcnJheS0+emVyb0ZpbGwoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZURh
dGEoc2l6ZSwgYnl0ZUFycmF5LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUoc2V0dGluZ3MpKSk7
Cit9CisKKworRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IEltYWdlRGF0YTo6Y3JlYXRlKFJl
ZjxVaW50OENsYW1wZWRBcnJheT4mJiBieXRlQXJyYXksIHVuc2lnbmVkIHN3LCBPcHRpb25hbDx1
bnNpZ25lZD4gc2gsIEltYWdlRGF0YVNldHRpbmdzIHNldHRpbmdzKQogewogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGJ5dGVBcnJheS0+bGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5ndGggfHwgbGVuZ3Ro
ICUgNCkKQEAgLTkzLDIyICsxMjMsMjggQEAgRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IElt
YWdlRGF0YTo6YwogICAgIGlmIChzaCAmJiBzaC52YWx1ZSgpICE9IGhlaWdodCkKICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yLCAic2ggdmFsdWUgaXMgbm90IGVxdWFs
IHRvIGhlaWdodCJfcyB9OwogCi0gICAgYXV0byByZXN1bHQgPSBjcmVhdGUoSW50U2l6ZShzdywg
aGVpZ2h0KSwgV1RGTW92ZShieXRlQXJyYXkpKTsKKyAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZShJ
bnRTaXplKHN3LCBoZWlnaHQpLCBXVEZNb3ZlKGJ5dGVBcnJheSksIFdURk1vdmUoc2V0dGluZ3Mp
KTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFJhbmdlRXJy
b3IgfTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLUltYWdlRGF0
YTo6SW1hZ2VEYXRhKGNvbnN0IEludFNpemUmIHNpemUsIFJlZjxVaW50OENsYW1wZWRBcnJheT4m
JiBieXRlQXJyYXkpCi0gICAgOiBtX3NpemUoc2l6ZSkKLSAgICAsIG1fZGF0YShXVEZNb3ZlKGJ5
dGVBcnJheSkpCitJbWFnZURhdGE6OkltYWdlRGF0YShjb25zdCBJbnRTaXplJiBzaXplLCBSZWY8
VWludDhDbGFtcGVkQXJyYXk+JiYgYnl0ZUFycmF5LCBJbWFnZURhdGFTZXR0aW5ncyBzZXR0aW5n
cykKKyAgICA6IG1fc2l6ZSB7IHNpemUgfQorICAgICwgbV9kYXRhIHsgV1RGTW92ZShieXRlQXJy
YXkpIH0KKyAgICAsIG1fc2V0dGluZ3MgeyBXVEZNb3ZlKHNldHRpbmdzKSB9CiB7CiAgICAgUkVM
RUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigoc2l6ZS5hcmVhKCkgKiA0KS51
bnNhZmVHZXQoKSA8PSBtX2RhdGEtPmxlbmd0aCgpKTsKIH0KIAorRGVzdGluYXRpb25Db2xvclNw
YWNlIEltYWdlRGF0YTo6Y29sb3JTcGFjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRvRGVzdGlu
YXRpb25Db2xvclNwYWNlKG1fc2V0dGluZ3MuY29sb3JTcGFjZSk7Cit9CisKIFJlZjxJbWFnZURh
dGE+IEltYWdlRGF0YTo6ZGVlcENsb25lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBJbWFnZURhdGEobV9zaXplLCBVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlKG1fZGF0YS0+
ZGF0YSgpLCBtX2RhdGEtPmxlbmd0aCgpKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElt
YWdlRGF0YShtX3NpemUsIFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUobV9kYXRhLT5kYXRhKCks
IG1fZGF0YS0+bGVuZ3RoKCkpLCBtX3NldHRpbmdzKSk7CiB9CiAKIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0ltYWdlRGF0YS5oCShyZXZpc2lvbiAyNzY4MTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0ltYWdlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKIAog
I3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJJbWFnZURhdGFTZXR0aW5ncy5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbk9yLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+CkBAIC0zNSwxMiArMzYsMTUgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitlbnVtIGNsYXNzIERlc3RpbmF0aW9uQ29sb3JTcGFjZSA6IHVpbnQ4
X3Q7CisKIGNsYXNzIEltYWdlRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPEltYWdlRGF0YT4gewog
cHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8SW1hZ2VE
YXRhPj4gY3JlYXRlKHVuc2lnbmVkIHN3LCB1bnNpZ25lZCBzaCk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJik7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRT
aXplJiwgUmVmPFVpbnQ4Q2xhbXBlZEFycmF5PiYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgRXhjZXB0aW9uT3I8UmVmPEltYWdlRGF0YT4+IGNyZWF0ZShSZWY8VWludDhDbGFtcGVkQXJy
YXk+JiYsIHVuc2lnbmVkIHN3LCBPcHRpb25hbDx1bnNpZ25lZD4gc2gpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2VEYXRhPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJ
bWFnZURhdGE+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwgSW1hZ2VEYXRhU2V0dGluZ3MpOworICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2VEYXRhPiBjcmVhdGUoY29uc3QgSW50
U2l6ZSYsIFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiwgSW1hZ2VEYXRhU2V0dGluZ3MgPSB7IH0p
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8SW1hZ2VEYXRhPj4g
Y3JlYXRlKHVuc2lnbmVkIHN3LCB1bnNpZ25lZCBzaCwgSW1hZ2VEYXRhU2V0dGluZ3MgPSB7IH0p
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8SW1hZ2VEYXRhPj4g
Y3JlYXRlKFJlZjxVaW50OENsYW1wZWRBcnJheT4mJiwgdW5zaWduZWQgc3csIE9wdGlvbmFsPHVu
c2lnbmVkPiBzaCwgSW1hZ2VEYXRhU2V0dGluZ3MgPSB7IH0pOwogCiAgICAgSW50U2l6ZSBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplLndpZHRoKCk7IH0KQEAgLTQ4LDE0ICs1MiwxOSBAQCBwdWJsaWM6CiAKICAgICBV
aW50OENsYW1wZWRBcnJheSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5wdHIoKTsgfQog
CisgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdDsKKyAgICBJbWFn
ZURhdGFTZXR0aW5ncyBnZXRJbWFnZURhdGFTZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0
dGluZ3M7IH0KKwogICAgIFJlZjxJbWFnZURhdGE+IGRlZXBDbG9uZSgpIGNvbnN0OwogCiBwcml2
YXRlOgotICAgIEltYWdlRGF0YShjb25zdCBJbnRTaXplJiwgUmVmPFVpbnQ4Q2xhbXBlZEFycmF5
PiYmKTsKKyAgICBJbWFnZURhdGEoY29uc3QgSW50U2l6ZSYsIFJlZjxVaW50OENsYW1wZWRBcnJh
eT4mJiwgSW1hZ2VEYXRhU2V0dGluZ3MpOworCiAgICAgc3RhdGljIENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PiBkYXRhU2l6ZShjb25zdCBJbnRTaXplJik7CiAKICAgICBJbnRTaXpl
IG1fc2l6ZTsKICAgICBSZWY8VWludDhDbGFtcGVkQXJyYXk+IG1fZGF0YTsKKyAgICBJbWFnZURh
dGFTZXR0aW5ncyBtX3NldHRpbmdzOwogfTsKIAogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEltYWdlRGF0YSYpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSW1hZ2VEYXRhLmlkbAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZURhdGEuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw0ICszOCw5
IEBACiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgd2lkdGg7CiAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgaGVpZ2h0OwogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBVaW50OENsYW1wZWRBcnJheSBkYXRhOworICAgIAorICAgIC8vIEJhc2VkIG9uIHRoZSBw
cm9wb3NhbCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2NhbnZhcy1jb2xvci1zcGFjZS9i
bG9iL21haW4vQ2FudmFzQ29sb3JTcGFjZVByb3Bvc2FsLm1kLgorICAgIFtFbmFibGVkQnlTZXR0
aW5nPUNhbnZhc0NvbG9yU3BhY2VdIGNvbnN0cnVjdG9yKHVuc2lnbmVkIGxvbmcgc3csIHVuc2ln
bmVkIGxvbmcgc2gsIEltYWdlRGF0YVNldHRpbmdzIHNldHRpbmdzKTsKKyAgICBbRW5hYmxlZEJ5
U2V0dGluZz1DYW52YXNDb2xvclNwYWNlXSBjb25zdHJ1Y3RvcihVaW50OENsYW1wZWRBcnJheSBk
YXRhLCB1bnNpZ25lZCBsb25nIHN3LCB1bnNpZ25lZCBsb25nIHNoLCBJbWFnZURhdGFTZXR0aW5n
cyBzZXR0aW5ncyk7CisgICAgW0VuYWJsZWRCeVNldHRpbmc9Q2FudmFzQ29sb3JTcGFjZV0gSW1h
Z2VEYXRhU2V0dGluZ3MgZ2V0SW1hZ2VEYXRhU2V0dGluZ3MoKTsKIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0ltYWdlRGF0YVNldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9JbWFnZURhdGFTZXR0aW5ncy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSW1hZ2VEYXRhU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJQcmVkZWZpbmVk
Q29sb3JTcGFjZUVudW0uaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdHJ1Y3QgSW1hZ2VEYXRhU2V0dGluZ3MgeworICAgIFByZWRlZmluZWRD
b2xvclNwYWNlRW51bSBjb2xvclNwYWNlIHsgUHJlZGVmaW5lZENvbG9yU3BhY2VFbnVtOjpTUkdC
IH07CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPEltYWdl
RGF0YVNldHRpbmdzPiBkZWNvZGUoRGVjb2RlciYpOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gaW5saW5lIHZvaWQgSW1hZ2VEYXRhU2V0dGluZ3M6OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgY29sb3JTcGFjZTsKK30KKwordGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gaW5saW5lIE9wdGlvbmFsPEltYWdlRGF0YVNldHRpbmdzPiBJbWFnZURh
dGFTZXR0aW5nczo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgSW1hZ2VEYXRhU2V0
dGluZ3Mgc2V0dGluZ3M7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNldHRpbmdzLmNvbG9y
U3BhY2UpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHNldHRp
bmdzOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRGF0YVNldHRpbmdz
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRGF0YVNldHRpbmdz
LmlkbAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRGF0YVNldHRp
bmdzLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
QmFzZWQgb24gdGhlIHByb3Bvc2FsIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvY2FudmFz
LWNvbG9yLXNwYWNlL2Jsb2IvbWFpbi9DYW52YXNDb2xvclNwYWNlUHJvcG9zYWwubWQuCitbCisg
ICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QsCitdIGRpY3Rpb25hcnkgSW1hZ2VEYXRhU2V0dGluZ3Mg
eworICAgIFtFbmFibGVkQnlTZXR0aW5nPUNhbnZhc0NvbG9yU3BhY2VdIFByZWRlZmluZWRDb2xv
clNwYWNlRW51bSBjb2xvclNwYWNlID0gInNyZ2IiOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc0ltYWdlRGF0YS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzSW1hZ2VEYXRhLmlkbAkocmV2aXNpb24gMjc2ODE5KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzSW1hZ2VEYXRhLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDEwIEBACiAKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3
Zy5vcmcvbXVsdGlwYWdlL2NhbnZhcy5odG1sI2NhbnZhc2ltYWdlZGF0YQogaW50ZXJmYWNlIG1p
eGluIENhbnZhc0ltYWdlRGF0YSB7Ci0gICAgLy8gRklYTUU6IEFsbCB0aGUgZmxvYXQgYXJndW1l
bnRzIGJlbG93IHNob3VsZCBiZSBsb25ncy4KLQogICAgIC8vIHBpeGVsIG1hbmlwdWxhdGlvbgot
ICAgIEltYWdlRGF0YSBjcmVhdGVJbWFnZURhdGEoZmxvYXQgc3csIGZsb2F0IHNoKTsKKyAgICBJ
bWFnZURhdGEgY3JlYXRlSW1hZ2VEYXRhKFtFbmZvcmNlUmFuZ2VdIGxvbmcgc3csIFtFbmZvcmNl
UmFuZ2VdIGxvbmcgc2gsIG9wdGlvbmFsIEltYWdlRGF0YVNldHRpbmdzIHNldHRpbmdzKTsKICAg
ICBJbWFnZURhdGEgY3JlYXRlSW1hZ2VEYXRhKEltYWdlRGF0YSBpbWFnZWRhdGEpOwotICAgIElt
YWdlRGF0YSBnZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQg
c2gpOwotICAgIHVuZGVmaW5lZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhIGltYWdlZGF0YSwgZmxv
YXQgZHgsIGZsb2F0IGR5KTsKLSAgICB1bmRlZmluZWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSBp
bWFnZWRhdGEsIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVks
IGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsKKyAgICBJbWFnZURhdGEgZ2V0
SW1hZ2VEYXRhKFtFbmZvcmNlUmFuZ2VdIGxvbmcgc3gsIFtFbmZvcmNlUmFuZ2VdIGxvbmcgc3ks
IFtFbmZvcmNlUmFuZ2VdIGxvbmcgc3csIFtFbmZvcmNlUmFuZ2VdIGxvbmcgc2gsIG9wdGlvbmFs
IEltYWdlRGF0YVNldHRpbmdzIHNldHRpbmdzKTsKKyAgICB1bmRlZmluZWQgcHV0SW1hZ2VEYXRh
KEltYWdlRGF0YSBpbWFnZWRhdGEsIFtFbmZvcmNlUmFuZ2VdIGxvbmcgZHgsIFtFbmZvcmNlUmFu
Z2VdIGxvbmcgZHkpOworICAgIHVuZGVmaW5lZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhIGltYWdl
ZGF0YSwgW0VuZm9yY2VSYW5nZV0gbG9uZyBkeCwgW0VuZm9yY2VSYW5nZV0gbG9uZyBkeSwgW0Vu
Zm9yY2VSYW5nZV0gbG9uZyBkaXJ0eVgsIFtFbmZvcmNlUmFuZ2VdIGxvbmcgZGlydHlZLCBbRW5m
b3JjZVJhbmdlXSBsb25nIGRpcnR5V2lkdGgsIFtFbmZvcmNlUmFuZ2VdIGxvbmcgZGlydHlIZWln
aHQpOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsMTIgKzM3LDE0IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5o
IgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgogI2luY2x1ZGUgIkNTU1By
b3BlcnR5UGFyc2VyV29ya2VyU2FmZS5oIgorI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNs
dWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1h
Z2VEYXRhLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVk
ZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGF0aDJELmgiCisjaW5jbHVkZSAiUGl4
ZWxGb3JtYXQuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlcldp
ZGdldC5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZE9ic2VydmVyLmgiCkBAIC0yMTEsNyArMjEz
LDggQEAgUmVmPFRleHRNZXRyaWNzPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MgogICAgIHJldHVy
biBtZWFzdXJlVGV4dEludGVybmFsKHRleHRSdW4pOwogfQogCi1hdXRvIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6Zm9udFByb3h5KCkgLT4gY29uc3QgRm9udFByb3h5KiB7CithdXRvIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6Zm9udFByb3h5KCkgLT4gY29uc3QgRm9udFByb3h5Kgorewog
ICAgIC8vIEludGVudGlvbmFsbHkgZG9uJ3QgdXBkYXRlIHN0eWxlIGhlcmUsIGJlY2F1c2UgdXBk
YXRpbmcgc3R5bGUgY2FuIGNhdXNlIEpTIHRvIHJ1biBzeW5jaHJvbm91c2x5LgogICAgIC8vIFRo
aXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIHRoZSBtaWRkbGUgb2YgcHJvY2Vzc2luZywgYW5kIHJ1
bm5pbmcgYXJiaXRyYXJ5IEpTIGluIHRoZSBtaWRkbGUgb2YgcHJvY2Vzc2luZyBjYW4gY2F1c2Ug
dW5leHBlY3RlZCBiZWhhdmlvci4KICAgICAvLyBJbnN0ZWFkLCB0aGUgcmVsZXZhbnQgY2FudmFz
IGVudHJ5IHBvaW50cyB1cGRhdGUgc3R5bGUgb25jZSB3aGVuIHRoZXkgYmVnaW4gcnVubmluZywg
YW5kIHdlIHdvbid0IHRvdWNoIHRoZSBzdHlsZSBhZnRlciB0aGF0LgpAQCAtMjQzLDQgKzI0Niwx
NSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJCiAgICAgZHJhd1Rl
eHRVbmNoZWNrZWQodGV4dFJ1biwgeCwgeSwgZmlsbCwgbWF4V2lkdGgpOwogfQogCitQaXhlbEZv
cm1hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnBpeGVsRm9ybWF0KCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogVGFrZSBtX3NldHRpbmdzLmFscGhhIGludG8gYWNjb3VudCBoZXJlIGFuZCBh
ZGQgUGl4ZWxGb3JtYXQ6OkJHUlg4LgorICAgIHJldHVybiBQaXhlbEZvcm1hdDo6QkdSQTg7Cit9
CisKK0Rlc3RpbmF0aW9uQ29sb3JTcGFjZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNvbG9y
U3BhY2UoKSBjb25zdAoreworICAgIHJldHVybiB0b0Rlc3RpbmF0aW9uQ29sb3JTcGFjZShtX3Nl
dHRpbmdzLmNvbG9yU3BhY2UpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDkg
QEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaXMyZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7
IH0KICAgICBjb25zdCBGb250UHJveHkqIGZvbnRQcm94eSgpIGZpbmFsOworICAgIFBpeGVsRm9y
bWF0IHBpeGVsRm9ybWF0KCkgY29uc3QgZmluYWw7CisgICAgRGVzdGluYXRpb25Db2xvclNwYWNl
IGNvbG9yU3BhY2UoKSBjb25zdCBmaW5hbDsKKwogICAgIHZvaWQgc2V0Rm9udFdpdGhvdXRVcGRh
dGluZ1N0eWxlKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBkcmF3VGV4dEludGVybmFsKGNv
bnN0IFN0cmluZyYgdGV4dCwgZmxvYXQgeCwgZmxvYXQgeSwgYm9vbCBmaWxsLCBPcHRpb25hbDxm
bG9hdD4gbWF4V2lkdGggPSBXVEY6Om51bGxvcHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5j
cHAJKHJldmlzaW9uIDI3NjgxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQzLDcgKzE2
NDMsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0CiAgICAgICAg
IHJlcGFpbnRFbnRpcmVDYW52YXMgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5nbG9i
YWxDb21wb3NpdGUgPT0gQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkpIHsKICAgICAgICAgaWYgKCZz
b3VyY2VDYW52YXMgPT0gJmNhbnZhc0Jhc2UoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8gY29w
eSA9IGJ1ZmZlci0+Y29weVJlY3RUb0J1ZmZlcihzcmNSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0IsICpjKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gY29weSA9IGJ1ZmZlci0+Y29w
eVJlY3RUb0J1ZmZlcihzcmNSZWN0LCBjb2xvclNwYWNlKCksICpjKSkgewogICAgICAgICAgICAg
ICAgIGNsZWFyQ2FudmFzKCk7CiAgICAgICAgICAgICAgICAgYy0+ZHJhd0ltYWdlQnVmZmVyKCpj
b3B5LCBkc3RSZWN0LCB7IHsgfSwgc3JjUmVjdC5zaXplKCkgfSwgeyBzdGF0ZSgpLmdsb2JhbENv
bXBvc2l0ZSwgc3RhdGUoKS5nbG9iYWxCbGVuZCB9KTsKICAgICAgICAgICAgIH0KQEAgLTIwMjYs
NyArMjAyNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4gQ2FudmEKICNl
bmRpZgogCiAgICAgYXV0byByZW5kZXJpbmdNb2RlID0gIWRyYXdpbmdDb250ZXh0KCkgfHwgZHJh
d2luZ0NvbnRleHQoKS0+aXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKLSAgICBhdXRvIGltYWdl
QnVmZmVyID0gdmlkZW9FbGVtZW50LmNyZWF0ZUJ1ZmZlckZvclBhaW50aW5nKHNpemUodmlkZW9F
bGVtZW50KSwgcmVuZGVyaW5nTW9kZSk7CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHZpZGVvRWxl
bWVudC5jcmVhdGVCdWZmZXJGb3JQYWludGluZyhzaXplKHZpZGVvRWxlbWVudCksIHJlbmRlcmlu
Z01vZGUsIGNvbG9yU3BhY2UoKSwgcGl4ZWxGb3JtYXQoKSk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTIxNTEsOSArMjE1MSw5IEBAIGJvb2wg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6bmVlZHMKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXN0YXRpYyBSZWZQdHI8SW1hZ2VEYXRhPiBjcmVhdGVFbXB0eUltYWdlRGF0YShjb25zdCBJ
bnRTaXplJiBzaXplKQorc3RhdGljIFJlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZUVtcHR5SW1hZ2VE
YXRhKGNvbnN0IEludFNpemUmIHNpemUsIEltYWdlRGF0YVNldHRpbmdzIHNldHRpbmdzKQogewot
ICAgIGF1dG8gZGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHNpemUpOworICAgIGF1dG8gZGF0YSA9
IEltYWdlRGF0YTo6Y3JlYXRlKHNpemUsIFdURk1vdmUoc2V0dGluZ3MpKTsKICAgICBpZiAoZGF0
YSkKICAgICAgICAgZGF0YS0+ZGF0YSgpLT56ZXJvRmlsbCgpOwogICAgIHJldHVybiBkYXRhOwpA
QCAtMjE2MSwyOCArMjE2MSwxOSBAQCBzdGF0aWMgUmVmUHRyPEltYWdlRGF0YT4gY3JlYXRlRW1w
dHlJbWFnCiAKIFJlZlB0cjxJbWFnZURhdGE+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OmNyZWF0ZUltYWdlRGF0YShJbWFnZURhdGEmIGltYWdlRGF0YSkgY29uc3QKIHsKLSAgICByZXR1
cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEoaW1hZ2VEYXRhLnNpemUoKSk7CisgICAgcmV0dXJuIGNy
ZWF0ZUVtcHR5SW1hZ2VEYXRhKGltYWdlRGF0YS5zaXplKCksIGltYWdlRGF0YS5nZXRJbWFnZURh
dGFTZXR0aW5ncygpKTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUltYWdlRGF0YShmbG9hdCBzdywgZmxvYXQg
c2gpIGNvbnN0CitFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6Y3JlYXRlSW1hZ2VEYXRhKGludCBzdywgaW50IHNoLCBJbWFnZURhdGFT
ZXR0aW5ncyYmIHNldHRpbmdzKSBjb25zdAogewogICAgIGlmICghc3cgfHwgIXNoKQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKIAotICAgIEZsb2F0U2l6ZSBs
b2dpY2FsU2l6ZShzdGQ6OmFicyhzdyksIHN0ZDo6YWJzKHNoKSk7Ci0gICAgaWYgKCFsb2dpY2Fs
U2l6ZS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgSW50U2l6ZSBzaXplID0gZXhwYW5kZWRJbnRTaXplKGxvZ2ljYWxTaXplKTsKLSAgICBp
ZiAoc2l6ZS53aWR0aCgpIDwgMSkKLSAgICAgICAgc2l6ZS5zZXRXaWR0aCgxKTsKLSAgICBpZiAo
c2l6ZS5oZWlnaHQoKSA8IDEpCi0gICAgICAgIHNpemUuc2V0SGVpZ2h0KDEpOwotCi0gICAgcmV0
dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKHNpemUpOworICAgIEludFNpemUgc2l6ZSB7IHN0ZDo6
YWJzKHN3KSwgc3RkOjphYnMoc2gpIH07CisgICAgcmV0dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRh
KHNpemUsIFdURk1vdmUoc2V0dGluZ3MpKTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdl
RGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShmbG9hdCBz
eCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKK0V4Y2VwdGlvbk9yPFJlZlB0
cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEo
aW50IHN4LCBpbnQgc3ksIGludCBzdywgaW50IHNoLCBJbWFnZURhdGFTZXR0aW5ncyYmIHNldHRp
bmdzKSBjb25zdAogewogICAgIGlmICghY2FudmFzQmFzZSgpLm9yaWdpbkNsZWFuKCkpIHsKICAg
ICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9T
VEFUSUNfU1RSSU5HX0lNUEwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcyBi
ZWNhdXNlIHRoZSBjYW52YXMgaGFzIGJlZW4gdGFpbnRlZCBieSBjcm9zcy1vcmlnaW4gZGF0YS4i
KSk7CkBAIC0yMjAyLDIxICsyMTkzLDEzIEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+
PiBDYW52YXNSZW4KICAgICAgICAgc2ggPSAtc2g7CiAgICAgfQogCi0gICAgRmxvYXRSZWN0IGxv
Z2ljYWxSZWN0KHN4LCBzeSwgc3csIHNoKTsKLSAgICBpZiAobG9naWNhbFJlY3Qud2lkdGgoKSA8
IDEpCi0gICAgICAgIGxvZ2ljYWxSZWN0LnNldFdpZHRoKDEpOwotICAgIGlmIChsb2dpY2FsUmVj
dC5oZWlnaHQoKSA8IDEpCi0gICAgICAgIGxvZ2ljYWxSZWN0LnNldEhlaWdodCgxKTsKLSAgICBp
ZiAoIWxvZ2ljYWxSZWN0LmlzRXhwcmVzc2libGVBc0ludFJlY3QoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBJbnRSZWN0IGltYWdlRGF0YVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KGxvZ2ljYWxSZWN0KTsKKyAgICBJbnRSZWN0IGltYWdlRGF0YVJlY3QgeyBzeCwgc3ksIHN3LCBz
aCB9OwogCiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsK
ICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKGlt
YWdlRGF0YVJlY3Quc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRh
KGltYWdlRGF0YVJlY3Quc2l6ZSgpLCBXVEZNb3ZlKHNldHRpbmdzKSk7CiAKLSAgICBhdXRvIGlt
YWdlRGF0YSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7CisgICAgYXV0byBpbWFnZURhdGEgPSBidWZm
ZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IGltYWdlRGF0YVJlY3QsIHRvRGVzdGluYXRpb25Db2xvclNwYWNlKHNldHRpbmdzLmNvbG9yU3Bh
Y2UpKTsKICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICBjYW52YXNCYXNlKCkuc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpSZW5k
ZXJpbmcsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsCiAgICAgICAgICAgICBtYWtlU3RyaW5nKCJVbmFi
bGUgdG8gZ2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBzaXplIHdhcyAiLCBp
bWFnZURhdGFSZWN0LndpZHRoKCksICIgeCAiLCBpbWFnZURhdGFSZWN0LmhlaWdodCgpKSk7CkBA
IC0yMjI2LDEyICsyMjA5LDEyIEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52
YXNSZW4KICAgICByZXR1cm4gaW1hZ2VEYXRhOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9h
dCBkeSkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKElt
YWdlRGF0YSYgZGF0YSwgaW50IGR4LCBpbnQgZHkpCiB7CiAgICAgcHV0SW1hZ2VEYXRhKGRhdGEs
IGR4LCBkeSwgMCwgMCwgZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKTsKIH0KIAotdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRh
LCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBk
aXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgaW50IGR4LCBpbnQgZHksIGlu
dCBkaXJ0eVgsIGludCBkaXJ0eVksIGludCBkaXJ0eVdpZHRoLCBpbnQgZGlydHlIZWlnaHQpCiB7
CiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBp
ZiAoIWJ1ZmZlcikKQEAgLTIyNTAsMjAgKzIyMzMsMjAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpwdXRJbQogICAgICAgICBkaXJ0eUhlaWdodCA9IC1kaXJ0eUhlaWdodDsK
ICAgICB9CiAKLSAgICBGbG9hdFJlY3QgY2xpcFJlY3QoZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lk
dGgsIGRpcnR5SGVpZ2h0KTsKLSAgICBjbGlwUmVjdC5pbnRlcnNlY3QoSW50UmVjdCgwLCAwLCBk
YXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpKTsKLSAgICBJbnRTaXplIGRlc3RPZmZzZXQoc3Rh
dGljX2Nhc3Q8aW50PihkeCksIHN0YXRpY19jYXN0PGludD4oZHkpKTsKLSAgICBJbnRSZWN0IGRl
c3RSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjbGlwUmVjdCk7CisgICAgSW50UmVjdCBjbGlwUmVj
dCB7IGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCB9OworICAgIGNsaXBS
ZWN0LmludGVyc2VjdChJbnRSZWN0IHsgMCwgMCwgZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgp
IH0pOworICAgIEludFNpemUgZGVzdE9mZnNldCB7IGR4LCBkeSB9OworICAgIEludFJlY3QgZGVz
dFJlY3QgPSBjbGlwUmVjdDsKICAgICBkZXN0UmVjdC5tb3ZlKGRlc3RPZmZzZXQpOwotICAgIGRl
c3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGJ1ZmZlci0+bG9naWNhbFNpemUo
KSkpOworICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0IHsgeyB9LCBidWZmZXItPmxvZ2lj
YWxTaXplKCkgfSk7CiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIEludFJlY3Qgc291cmNlUmVjdChkZXN0UmVjdCk7CisgICAgSW50UmVjdCBzb3VyY2VS
ZWN0IHsgZGVzdFJlY3QgfTsKICAgICBzb3VyY2VSZWN0Lm1vdmUoLWRlc3RPZmZzZXQpOwotICAg
IHNvdXJjZVJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgZGF0YS53aWR0aCgpLCBkYXRhLmhl
aWdodCgpKSk7CisgICAgc291cmNlUmVjdC5pbnRlcnNlY3QoSW50UmVjdCB7IDAsIDAsIGRhdGEu
d2lkdGgoKSwgZGF0YS5oZWlnaHQoKSB9KTsKIAogICAgIGlmICghc291cmNlUmVjdC5pc0VtcHR5
KCkpCi0gICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgZGF0YSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCkp
OworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIGRhdGEsIHNvdXJjZVJlY3QsIEludFBvaW50IHsgZGVzdE9mZnNldCB9
KTsKIAogICAgIGRpZERyYXcoRmxvYXRSZWN0IHsgZGVzdFJlY3QgfSwgeyB9KTsgLy8gaWdub3Jl
IHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CkBAIC0yNTA3LDcgKzI0OTAsNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUCiAgICAgICAgICAgICB9CiAgICAg
ICAgIH07CiAKLSAgICAgICAgaWYgKGMtPmNsaXBUb0RyYXdpbmdDb21tYW5kcyhtYXNrUmVjdCwg
RGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBXVEZNb3ZlKHBhaW50TWFza0ltYWdlKSkgPT0g
R3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OkZhaWxlZFRvQ3Jl
YXRlSW1hZ2VCdWZmZXIpCisgICAgICAgIGlmIChjLT5jbGlwVG9EcmF3aW5nQ29tbWFuZHMobWFz
a1JlY3QsIGNvbG9yU3BhY2UoKSwgV1RGTW92ZShwYWludE1hc2tJbWFnZSkpID09IEdyYXBoaWNz
Q29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpGYWlsZWRUb0NyZWF0ZUltYWdl
QnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGRyYXdTdHlsZS5hcHBseUZp
bGxDb2xvcigqYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCShyZXZpc2lvbiAyNzY4MTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGFTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkltYWdlU21v
b3RoaW5nUXVhbGl0eS5oIgogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxh
eWVyLmgiCkBAIC0xODgsMTAgKzE4OSwxMCBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8UmVm
UHRyPENhbnZhc1BhdHRlcm4+PiBjcmVhdGVQYXR0ZXJuKENhbnZhc0ltYWdlU291cmNlJiYsIGNv
bnN0IFN0cmluZyYgcmVwZXRpdGlvbik7CiAKICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBjcmVhdGVJ
bWFnZURhdGEoSW1hZ2VEYXRhJikgY29uc3Q7Ci0gICAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdl
RGF0YT4+IGNyZWF0ZUltYWdlRGF0YShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSBjb25zdDsK
LSAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRhKGZsb2F0IHN4
LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKLSAgICB2b2lkIHB1dEltYWdl
RGF0YShJbWFnZURhdGEmLCBmbG9hdCBkeCwgZmxvYXQgZHkpOwotICAgIHZvaWQgcHV0SW1hZ2VE
YXRhKEltYWdlRGF0YSYsIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBk
aXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsKKyAgICBFeGNlcHRp
b25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gY3JlYXRlSW1hZ2VEYXRhKGludCB3aWR0aCwgaW50IGhl
aWdodCwgSW1hZ2VEYXRhU2V0dGluZ3MmJiA9IHsgfSkgY29uc3Q7CisgICAgRXhjZXB0aW9uT3I8
UmVmUHRyPEltYWdlRGF0YT4+IGdldEltYWdlRGF0YShpbnQgc3gsIGludCBzeSwgaW50IHN3LCBp
bnQgc2gsIEltYWdlRGF0YVNldHRpbmdzJiYgPSB7IH0pIGNvbnN0OworICAgIHZvaWQgcHV0SW1h
Z2VEYXRhKEltYWdlRGF0YSYsIGludCBkeCwgaW50IGR5KTsKKyAgICB2b2lkIHB1dEltYWdlRGF0
YShJbWFnZURhdGEmLCBpbnQgZHgsIGludCBkeSwgaW50IGRpcnR5WCwgaW50IGRpcnR5WSwgaW50
IGRpcnR5V2lkdGgsIGludCBkaXJ0eUhlaWdodCk7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGZs
b2F0IHdlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8oKSB7IHJldHVybiAxOyB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRp
bmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEU2V0dGluZ3MuaAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU2V0dGluZ3MuaAkod29y
a2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1LDEzIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVk
ZSAiUHJlZGVmaW5lZENvbG9yU3BhY2VFbnVtLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
c3RydWN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzIHsKICAgICBib29sIGRlc3lu
Y2hyb25pemVkIHsgZmFsc2UgfTsKKyAgICBQcmVkZWZpbmVkQ29sb3JTcGFjZUVudW0gY29sb3JT
cGFjZSB7IFByZWRlZmluZWRDb2xvclNwYWNlRW51bTo6U1JHQiB9OwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEU2V0dGluZ3MuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzLmlkbAkocmV2aXNp
b24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEU2V0dGluZ3MuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw0ICszMCw3IEBACiAg
ICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciAnYWxwaGEnLgogICAgIC8vIGJvb2xlYW4gYWxw
aGEgPSB0cnVlOwogICAgIGJvb2xlYW4gZGVzeW5jaHJvbml6ZWQgPSBmYWxzZTsKKworICAgIC8v
IEJhc2VkIG9uIHRoZSBwcm9wb3NhbCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2NhbnZh
cy1jb2xvci1zcGFjZS9ibG9iL21haW4vQ2FudmFzQ29sb3JTcGFjZVByb3Bvc2FsLm1kLgorICAg
IFtFbmFibGVkQnlTZXR0aW5nPUNhbnZhc0NvbG9yU3BhY2VdIFByZWRlZmluZWRDb2xvclNwYWNl
RW51bSBjb2xvclNwYWNlID0gInNyZ2IiOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAy
NzY4MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwxMSArMjgsMTMgQEAKIAogI2luY2x1ZGUgIkNhY2hl
ZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgorI2luY2x1ZGUgIkNvbG9yU3Bh
Y2UuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFn
ZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCiAjaW5jbHVkZSAiSW1h
Z2UuaCIKICNpbmNsdWRlICJJbWFnZUJpdG1hcC5oIgorI2luY2x1ZGUgIlBpeGVsRm9ybWF0Lmgi
CiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC04MCw2ICs4MiwxNiBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OmRlcmVmKCkKICAgICBtX2NhbnZhcy5kZXJlZkNhbnZh
c0Jhc2UoKTsKIH0KIAorUGl4ZWxGb3JtYXQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDo6cGl4ZWxG
b3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBQaXhlbEZvcm1hdDo6QkdSQTg7Cit9CisKK0Rl
c3RpbmF0aW9uQ29sb3JTcGFjZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojpjb2xvclNwYWNlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCOworfQorCiBi
b29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OndvdWxkVGFpbnRPcmlnaW4oY29uc3QgQ2FudmFz
UGF0dGVybiogcGF0dGVybikKIHsKICAgICBpZiAobV9jYW52YXMub3JpZ2luQ2xlYW4oKSAmJiBw
YXR0ZXJuICYmICFwYXR0ZXJuLT5vcmlnaW5DbGVhbigpKQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24g
Mjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw4IEBAIGNsYXNzIEhUTUxWaWRlb0Vs
ZW1lbnQ7CiBjbGFzcyBJbWFnZUJpdG1hcDsKIGNsYXNzIFR5cGVkT01DU1NJbWFnZVZhbHVlOwog
Y2xhc3MgV2ViR0xPYmplY3Q7CitlbnVtIGNsYXNzIERlc3RpbmF0aW9uQ29sb3JTcGFjZSA6IHVp
bnQ4X3Q7CitlbnVtIGNsYXNzIFBpeGVsRm9ybWF0IDogdWludDhfdDsKIAogY2xhc3MgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENhbnZhc1JlbmRlcmluZ0NvbnRleHQpOwpAQCAtODYsNiArODgsOSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIG5lZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZvckRpc3BsYXko
KSB7IH0KIAorICAgIHZpcnR1YWwgUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3Q7CisKIHBy
b3RlY3RlZDoKICAgICBleHBsaWNpdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2Um
KTsKICAgICBib29sIHdvdWxkVGFpbnRPcmlnaW4oY29uc3QgQ2FudmFzUGF0dGVybiopOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUHJlZGVmaW5lZENvbG9yU3BhY2VFbnVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QcmVkZWZpbmVkQ29s
b3JTcGFjZUVudW0uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1ByZWRlZmluZWRDb2xvclNwYWNlRW51bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcmVk
ZWZpbmVkQ29sb3JTcGFjZUVudW0uaCIKKworI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitEZXN0aW5hdGlvbkNvbG9yU3BhY2UgdG9EZXN0aW5hdGlvbkNv
bG9yU3BhY2UoUHJlZGVmaW5lZENvbG9yU3BhY2VFbnVtIGNvbG9yU3BhY2UpCit7CisgICAgc3dp
dGNoIChjb2xvclNwYWNlKSB7CisgICAgY2FzZSBQcmVkZWZpbmVkQ29sb3JTcGFjZUVudW06OlNS
R0I6CisgICAgICAgIHJldHVybiBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0I7CisjaWYgRU5B
QkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0RJU1BMQVlfUDMpCisgICAgY2FzZSBQcmVkZWZp
bmVkQ29sb3JTcGFjZUVudW06OkRpc3BsYXlQMzoKKyAgICAgICAgcmV0dXJuIERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6RGlzcGxheVAzOworI2VuZGlmCisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQjsKK30KKwor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUHJlZGVmaW5lZENvbG9yU3BhY2VF
bnVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUHJlZGVmaW5l
ZENvbG9yU3BhY2VFbnVtLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvUHJlZGVmaW5lZENvbG9yU3BhY2VFbnVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0VudW1U
cmFpdHMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIERlc3RpbmF0aW9u
Q29sb3JTcGFjZSA6IHVpbnQ4X3Q7CisKK2VudW0gY2xhc3MgUHJlZGVmaW5lZENvbG9yU3BhY2VF
bnVtIHsKKyAgICBTUkdCCisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0RJU1BM
QVlfUDMpCisgICAgLCBEaXNwbGF5UDMKKyNlbmRpZgorfTsKKworRGVzdGluYXRpb25Db2xvclNw
YWNlIHRvRGVzdGluYXRpb25Db2xvclNwYWNlKFByZWRlZmluZWRDb2xvclNwYWNlRW51bSk7CisK
K30KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2Vi
Q29yZTo6UHJlZGVmaW5lZENvbG9yU3BhY2VFbnVtPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51
bVZhbHVlczwKKyAgICAgICAgV2ViQ29yZTo6UHJlZGVmaW5lZENvbG9yU3BhY2VFbnVtLAorICAg
ICAgICBXZWJDb3JlOjpQcmVkZWZpbmVkQ29sb3JTcGFjZUVudW06OlNSR0IKKyNpZiBFTkFCTEUo
REVTVElOQVRJT05fQ09MT1JfU1BBQ0VfRElTUExBWV9QMykKKyAgICAgICAgLCBXZWJDb3JlOjpQ
cmVkZWZpbmVkQ29sb3JTcGFjZUVudW06OkRpc3BsYXlQMworI2VuZGlmCisgICAgPjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUHJl
ZGVmaW5lZENvbG9yU3BhY2VFbnVtLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9QcmVkZWZpbmVkQ29sb3JTcGFjZUVudW0uaWRsCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1ByZWRlZmluZWRDb2xvclNwYWNlRW51bS5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIEJhc2VkIG9u
IHRoZSBwcm9wb3NhbCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2NhbnZhcy1jb2xvci1z
cGFjZS9ibG9iL21haW4vQ2FudmFzQ29sb3JTcGFjZVByb3Bvc2FsLm1kLgorZW51bSBQcmVkZWZp
bmVkQ29sb3JTcGFjZUVudW0geworICAgICJzcmdiIgorI2lmIGRlZmluZWQoRU5BQkxFX0RFU1RJ
TkFUSU9OX0NPTE9SX1NQQUNFX0RJU1BMQVlfUDMpICYmIEVOQUJMRV9ERVNUSU5BVElPTl9DT0xP
Ul9TUEFDRV9ESVNQTEFZX1AzCisgICAgLCAiZGlzcGxheS1wMyIKKyNlbmRpZgorfTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lU3ltYm9saWNGaWVsZEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0RhdGVUaW1lU3lt
Ym9saWNGaWVsZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNzY4MTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9EYXRlVGltZVN5bWJvbGljRmllbGRFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksNyArMjksOSBAQAogCiAjaWYgRU5BQkxFKERBVEVfQU5EX1RJTUVfSU5QVVRf
VFlQRVMpCiAKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUu
aCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIK
ICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVz
Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNw
cAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOCw2ICs0MjgsMTIgQEAgT3B0aW9uYWw8
SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvYwogICAgIHJldHVybiB7eyB2YWx1ZUluZGV4
Rm9yRGF0YShhcmd1bWVudCksIFJlY29yZGluZ1N3aXp6bGVUeXBlOjpJbWFnZURhdGEgfX07CiB9
CiAKK09wdGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50
PiBJbnNwZWN0b3JDYW52YXM6OnByb2Nlc3NBcmd1bWVudChJbWFnZURhdGFTZXR0aW5ncyYpCit7
CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQor
CiBPcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVudD4g
SW5zcGVjdG9yQ2FudmFzOjpwcm9jZXNzQXJndW1lbnQoSW1hZ2VTbW9vdGhpbmdRdWFsaXR5IGFy
Z3VtZW50KQogewogICAgIHJldHVybiB7eyB2YWx1ZUluZGV4Rm9yRGF0YShjb252ZXJ0RW51bWVy
YXRpb25Ub1N0cmluZyhhcmd1bWVudCkpLCBSZWNvcmRpbmdTd2l6emxlVHlwZTo6U3RyaW5nIH19
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0NhbGxUcmFj
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
YW52YXNDYWxsVHJhY2VyLmNwcAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxWaWRlb0VsZW1lbnQuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJ
bWFnZURhdGFTZXR0aW5ncy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNhbnZhc0FnZW50LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW5zdHJ1bWVu
dGluZ0FnZW50cy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNh
bnZhc0NhbGxUcmFjZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5oCShyZXZpc2lvbiAyNzY4MTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MCw2ICs3MCw3IEBAIGNsYXNzIFdlYkdMVHJhbnNmb3JtRmVlZGJhY2s7CiBjbGFz
cyBXZWJHTFVuaWZvcm1Mb2NhdGlvbjsKIGNsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3Q7CiBz
dHJ1Y3QgRE9NTWF0cml4MkRJbml0Oworc3RydWN0IEltYWdlRGF0YVNldHRpbmdzOwogZW51bSBj
bGFzcyBSZWNvcmRpbmdTd2l6emxlVHlwZSA6IGludDsKIGVudW0gY2xhc3MgQ2FudmFzRGlyZWN0
aW9uOwogZW51bSBjbGFzcyBDYW52YXNGaWxsUnVsZTsKQEAgLTE1MCw2ICsxNTEsNyBAQCBlbnVt
IEltYWdlU21vb3RoaW5nUXVhbGl0eTsKICAgICBtYWNybyhIVE1MSW1hZ2VFbGVtZW50KikgXAog
ICAgIG1hY3JvKEltYWdlQml0bWFwKikgXAogICAgIG1hY3JvKEltYWdlRGF0YSopIFwKKyAgICBt
YWNybyhJbWFnZURhdGFTZXR0aW5ncyYpIFwKICAgICBtYWNybyhJbWFnZVNtb290aGluZ1F1YWxp
dHkpIFwKICAgICBtYWNybyhPcHRpb25hbDxmbG9hdD4mKSBcCiAgICAgbWFjcm8oUGF0aDJEKikg
XApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2
aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNiArMTYyLDE4IEBAIENvbG9yIENvbG9yOjpzZW1h
bnRpY0NvbG9yKCkgY29uc3QKICAgICByZXR1cm4geyBhc0lubGluZSgpLCBGbGFnczo6U2VtYW50
aWMgfTsKIH0KIAorQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBDb2xvcjo6dG9Db2xvckNvbXBv
bmVudHNJbkNvbG9yU3BhY2UoQ29sb3JTcGFjZSBvdXRwdXRDb2xvclNwYWNlKSBjb25zdAorewor
ICAgIGF1dG8gW2lucHV0Q29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNwYWNlQW5kQ29t
cG9uZW50cygpOworICAgIHJldHVybiBjb252ZXJDb2xvckNvbXBvbmVudHMoaW5wdXRDb2xvclNw
YWNlLCBjb21wb25lbnRzLCBvdXRwdXRDb2xvclNwYWNlKTsKK30KKworQ29sb3JDb21wb25lbnRz
PGZsb2F0LCA0PiBDb2xvcjo6dG9Db2xvckNvbXBvbmVudHNJbkNvbG9yU3BhY2UoRGVzdGluYXRp
b25Db2xvclNwYWNlIG91dHB1dENvbG9yU3BhY2UpIGNvbnN0Cit7CisgICAgYXV0byBbaW5wdXRD
b2xvclNwYWNlLCBjb21wb25lbnRzXSA9IGNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCk7CisgICAg
cmV0dXJuIGNvbnZlckNvbG9yQ29tcG9uZW50cyhpbnB1dENvbG9yU3BhY2UsIGNvbXBvbmVudHMs
IG91dHB1dENvbG9yU3BhY2UpOworfQorCiBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgQ29sb3JDb21w
b25lbnRzPGZsb2F0LCA0Pj4gQ29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QK
IHsKICAgICBpZiAoaXNPdXRPZkxpbmUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCw5IEBA
IHB1YmxpYzoKICAgICAvLyB3cmFwcGVyIGFyb3VuZCB0b0NvbG9yVHlwZUxvc3N5PD4oKS4KICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTUkdCQTxUPiB0b1NSR0JBTG9zc3koKSBjb25zdCB7IHJl
dHVybiB0b0NvbG9yVHlwZUxvc3N5PFNSR0JBPFQ+PigpOyB9CiAKKyAgICBDb2xvckNvbXBvbmVu
dHM8ZmxvYXQsIDQ+IHRvQ29sb3JDb21wb25lbnRzSW5Db2xvclNwYWNlKENvbG9yU3BhY2UpIGNv
bnN0OworICAgIENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gdG9Db2xvckNvbXBvbmVudHNJbkNv
bG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdDsKKwogICAgIFdFQkNPUkVfRVhQ
T1JUIHN0ZDo6cGFpcjxDb2xvclNwYWNlLCBDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+PiBjb2xv
clNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3Ig
bGlnaHRlbmVkKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvckNvbnZlcnNpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAJKHJldmlzaW9uIDI3NjgxOSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJDb2xvckNvbnZlcnNpb24uaCIKIAorI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yODYsNCArMjg3
LDU2IEBAIFNSR0JBPHVpbnQ4X3Q+IENvbG9yQ29udmVyc2lvbjxTUkdCQTx1aW4KICAgICB9KSk7
CiB9CiAKKy8vIE1BUks6IENvbnZlcnNpb24gZnVuY3Rpb25zIGZvciByYXcgY29sb3IgY29tcG9u
ZW50cyB3aXRoIGFzc29jaWF0ZWQgY29sb3Igc3BhY2VzLgorCitDb2xvckNvbXBvbmVudHM8Zmxv
YXQsIDQ+IGNvbnZlckNvbG9yQ29tcG9uZW50cyhDb2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwg
Q29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBpbnB1dENvbG9yQ29tcG9uZW50cywgQ29sb3JTcGFj
ZSBvdXRwdXRDb2xvclNwYWNlKQoreworICAgIHJldHVybiBjYWxsV2l0aENvbG9yVHlwZShpbnB1
dENvbG9yQ29tcG9uZW50cywgaW5wdXRDb2xvclNwYWNlLCBbb3V0cHV0Q29sb3JTcGFjZV0gKGNv
bnN0IGF1dG8mIGlucHV0Q29sb3IpIHsKKyAgICAgICAgc3dpdGNoIChvdXRwdXRDb2xvclNwYWNl
KSB7CisgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6QTk4UkdCOgorICAgICAgICAgICAgcmV0dXJu
IGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxBOThSR0I8ZmxvYXQ+PihpbnB1dENvbG9y
KSk7CisgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgorICAgICAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxEaXNwbGF5UDM8ZmxvYXQ+PihpbnB1
dENvbG9yKSk7CisgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6TENIOgorICAgICAgICAgICAgcmV0
dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxMQ0hBPGZsb2F0Pj4oaW5wdXRDb2xv
cikpOworICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkxhYjoKKyAgICAgICAgICAgIHJldHVybiBh
c0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8TGFiPGZsb2F0Pj4oaW5wdXRDb2xvcikpOwor
ICAgICAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclNSR0I6CisgICAgICAgICAgICByZXR1cm4g
YXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPExpbmVhclNSR0JBPGZsb2F0Pj4oaW5wdXRD
b2xvcikpOworICAgICAgICBjYXNlIENvbG9yU3BhY2U6OlByb1Bob3RvUkdCOgorICAgICAgICAg
ICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxQcm9QaG90b1JHQjxmbG9h
dD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpSZWMyMDIwOgorICAg
ICAgICAgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGNvbnZlcnRDb2xvcjxSZWMyMDIwPGZs
b2F0Pj4oaW5wdXRDb2xvcikpOworICAgICAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6CisgICAg
ICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFNSR0JBPGZsb2F0
Pj4oaW5wdXRDb2xvcikpOworICAgICAgICBjYXNlIENvbG9yU3BhY2U6OlhZWl9ENTA6CisgICAg
ICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPFhZWkE8ZmxvYXQs
IFdoaXRlUG9pbnQ6OkQ1MD4+KGlucHV0Q29sb3IpKTsKKyAgICAgICAgfQorCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29u
dmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworICAgIH0pOworfQorCitDb2xv
ckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlckNvbG9yQ29tcG9uZW50cyhDb2xvclNwYWNlIGlu
cHV0Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBpbnB1dENvbG9yQ29tcG9u
ZW50cywgRGVzdGluYXRpb25Db2xvclNwYWNlIG91dHB1dENvbG9yU3BhY2UpCit7CisgICAgcmV0
dXJuIGNhbGxXaXRoQ29sb3JUeXBlKGlucHV0Q29sb3JDb21wb25lbnRzLCBpbnB1dENvbG9yU3Bh
Y2UsIFtvdXRwdXRDb2xvclNwYWNlXSAoY29uc3QgYXV0byYgaW5wdXRDb2xvcikgeworICAgICAg
ICBzd2l0Y2ggKG91dHB1dENvbG9yU3BhY2UpIHsKKyAgICAgICAgY2FzZSBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0I6CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoY29u
dmVydENvbG9yPFNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworI2lmIEVOQUJMRShERVNUSU5B
VElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKKyAgICAgICAgY2FzZSBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OkxpbmVhclNSR0I6CisgICAgICAgICAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVu
dHMoY29udmVydENvbG9yPExpbmVhclNSR0JBPGZsb2F0Pj4oaW5wdXRDb2xvcikpOworI2VuZGlm
CisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0RJU1BMQVlfUDMpCisgICAgICAg
IGNhc2UgRGVzdGluYXRpb25Db2xvclNwYWNlOjpEaXNwbGF5UDM6CisgICAgICAgICAgICByZXR1
cm4gYXNDb2xvckNvbXBvbmVudHMoY29udmVydENvbG9yPERpc3BsYXlQMzxmbG9hdD4+KGlucHV0
Q29sb3IpKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhjb252ZXJ0Q29sb3I8U1JHQkE8
ZmxvYXQ+PihpbnB1dENvbG9yKSk7CisgICAgfSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yQ29udmVyc2lv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
Q29udmVyc2lvbi5oCShyZXZpc2lvbiAyNzY4MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvckNvbnZlcnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
MTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitlbnVtIGNsYXNzIENvbG9yU3BhY2UgOiB1
aW50OF90OworZW51bSBjbGFzcyBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgOiB1aW50OF90OworCisv
LyBDb252ZXJzaW9uIGZ1bmN0aW9uIGZvciB0eXBlZCBjb2xvcnMuCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBPdXRwdXQsIHR5cGVuYW1lIElucHV0PiBPdXRwdXQgY29udmVydENvbG9yKGNvbnN0IElucHV0
JiBjb2xvcik7CisKKy8vIENvbnZlcnNpb24gZnVuY3Rpb25zIGZvciByYXcgY29sb3IgY29tcG9u
ZW50cyB3aXRoIGFzc29jaWF0ZWQgY29sb3Igc3BhY2VzLgorQ29sb3JDb21wb25lbnRzPGZsb2F0
LCA0PiBjb252ZXJDb2xvckNvbXBvbmVudHMoQ29sb3JTcGFjZSBpbnB1dENvbG9yU3BhY2UsIENv
bG9yQ29tcG9uZW50czxmbG9hdCwgND4gaW5wdXRDb2xvckNvbXBvbmVudHMsIENvbG9yU3BhY2Ug
b3V0cHV0Q29sb3JTcGFjZSk7CitDb2xvckNvbXBvbmVudHM8ZmxvYXQsIDQ+IGNvbnZlckNvbG9y
Q29tcG9uZW50cyhDb2xvclNwYWNlIGlucHV0Q29sb3JTcGFjZSwgQ29sb3JDb21wb25lbnRzPGZs
b2F0LCA0PiBpbnB1dENvbG9yQ29tcG9uZW50cywgRGVzdGluYXRpb25Db2xvclNwYWNlIG91dHB1
dENvbG9yU3BhY2UpOworCisKIC8vIEFsbCBjb2xvciB0eXBlcywgb3RoZXIgdGhhbiBYWVpBIG9y
IHRob3NlIGluaGVyaXRpbmcgZnJvbSBSR0JUeXBlLCBtdXN0IGltcGxlbWVudAogLy8gdGhlIGZv
bGxvd2luZyBjb252ZXJzaW9ucyB0byBhbmQgZnJvbSB0aGVpciAiUmVmZXJlbmNlIiBjb2xvci4K
IC8vCkBAIC00OCw3ICs1OSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE91dHB1dCwgdHlwZW5hbWUg
SW5wdXQKICAgICByZXR1cm4gQ29sb3JDb252ZXJzaW9uPE91dHB1dCwgSW5wdXQ+Ojpjb252ZXJ0
KGNvbG9yKTsKIH0KIAotCiAvLyBNQVJLOiBDaHJvbWF0aWMgQWRhcHRhdGlvbiBjb252ZXJzaW9u
cy4KIAogLy8gaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcW5fQ2hy
b21BZGFwdC5odG1sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvclNwYWNlLmNwcAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEyICs2
NywxOSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDCiBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29s
b3JTcGFjZSkKIHsKICAgICBzd2l0Y2ggKGNvbG9yU3BhY2UpIHsKKyAgICBjYXNlIERlc3RpbmF0
aW9uQ29sb3JTcGFjZTo6U1JHQjoKKyAgICAgICAgdHMgPDwgInNSR0IiOworICAgICAgICBicmVh
azsKKyNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCiAgICAg
Y2FzZSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0I6CiAgICAgICAgIHRzIDw8ICJM
aW5lYXJTUkdCIjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2U6OlNSR0I6Ci0gICAgICAgIHRzIDw8ICJzUkdCIjsKKyNlbmRpZgorI2lmIEVOQUJMRShERVNU
SU5BVElPTl9DT0xPUl9TUEFDRV9ESVNQTEFZX1AzKQorICAgIGNhc2UgRGVzdGluYXRpb25Db2xv
clNwYWNlOjpEaXNwbGF5UDM6CisgICAgICAgIHRzIDw8ICJEaXNwbGF5UDMiOwogICAgICAgICBi
cmVhazsKKyNlbmRpZgogICAgIH0KICAgICByZXR1cm4gdHM7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCShyZXZpc2lvbiAyNzY4MTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDggKzQ4LDEzIEBAIGVudW0gY2xhc3MgQ29sb3JTcGFjZSA6IHVpbnQ4
X3QgewogfTsKIAogZW51bSBjbGFzcyBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgOiB1aW50OF90IHsK
LSAgICBMaW5lYXJTUkdCLAotICAgIFNSR0IsCisgICAgU1JHQgorI2lmIEVOQUJMRShERVNUSU5B
VElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKKyAgICAsIExpbmVhclNSR0IKKyNlbmRpZgor
I2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9ESVNQTEFZX1AzKQorICAgICwgRGlz
cGxheVAzCisjZW5kaWYKIH07CiAKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBDb2xvclNwYWNlKTsKQEAgLTk3LDYgKzEwMiwyNiBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBGdW5jdG9yPiBjCiAgICAgcmV0dXJuIHN0
ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgbWFrZUZyb21Db21wb25l
bnRzPFNSR0JBPFQ+Pihjb21wb25lbnRzKSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEZ1bmN0b3I+IGNvbnN0ZXhwciBkZWNsdHlwZShhdXRvKSBjYWxsV2l0aENvbG9yVHlw
ZShjb25zdCBDb2xvckNvbXBvbmVudHM8VCwgND4mIGNvbXBvbmVudHMsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBGdW5jdG9yJiYgZnVuY3RvcikKK3sKKyAgICBzd2l0Y2ggKGNv
bG9yU3BhY2UpIHsKKyAgICBjYXNlIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQjoKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6aW52b2tlKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSwgbWFr
ZUZyb21Db21wb25lbnRzPFNSR0JBPFQ+Pihjb21wb25lbnRzKSk7CisjaWYgRU5BQkxFKERFU1RJ
TkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQorICAgIGNhc2UgRGVzdGluYXRpb25Db2xv
clNwYWNlOjpMaW5lYXJTUkdCOgorICAgICAgICByZXR1cm4gc3RkOjppbnZva2Uoc3RkOjpmb3J3
YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpLCBtYWtlRnJvbUNvbXBvbmVudHM8TGluZWFyU1JHQkE8VD4+
KGNvbXBvbmVudHMpKTsKKyNlbmRpZgorI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFD
RV9ESVNQTEFZX1AzKQorICAgIGNhc2UgRGVzdGluYXRpb25Db2xvclNwYWNlOjpEaXNwbGF5UDM6
CisgICAgICAgIHJldHVybiBzdGQ6Omludm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rv
ciksIG1ha2VGcm9tQ29tcG9uZW50czxEaXNwbGF5UDM8VD4+KGNvbXBvbmVudHMpKTsKKyNlbmRp
ZgorICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBzdGQ6Omlu
dm9rZShzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvciksIG1ha2VGcm9tQ29tcG9uZW50czxT
UkdCQTxUPj4oY29tcG9uZW50cykpOworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
bmFtZXNwYWNlIFdURiB7CkBAIC0xMTksOCArMTQ0LDEzIEBAIHRlbXBsYXRlPD4gc3RydWN0IEVu
dW1UcmFpdHM8V2ViQ29yZTo6Q28KIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29y
ZTo6RGVzdGluYXRpb25Db2xvclNwYWNlPiB7CiAgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVl
czwKICAgICAgICAgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlLAotICAgICAgICBXZWJD
b3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0IsCiAgICAgICAgIFdlYkNvcmU6
OkRlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQgorI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xP
Ul9TUEFDRV9MSU5FQVJfU1JHQikKKyAgICAgICAgLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OkxpbmVhclNSR0IKKyNlbmRpZgorI2lmIEVOQUJMRShERVNUSU5BVElPTl9DT0xPUl9T
UEFDRV9ESVNQTEFZX1AzKQorICAgICAgICAsIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6RGlzcGxheVAzCisjZW5kaWYKICAgICA+OwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAkocmV2
aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3Jl
dGVJbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsMTEgKzIzMCwxMSBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgUmVmUHRyPEltYWdlRGF0
YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQorICAgIFJlZlB0cjxJbWFnZURhdGE+
IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGRlc3RpbmF0aW9uQ29sb3JT
cGFjZSkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0g
ZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgewogICAgICAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0
ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOwotICAgICAgICAgICAgcmV0dXJu
IGJhY2tlbmQtPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QpOworICAgICAgICAg
ICAgcmV0dXJuIGJhY2tlbmQtPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGRl
c3RpbmF0aW9uQ29sb3JTcGFjZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5oCShyZXZpc2lvbiAyNzY4MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDkgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAw
OwogCi0gICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0
ID0gMDsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGxheWVyaW5nIHZpb2xhdGlvbi4gSW1hZ2VE
YXRhIGlzIGEgV2ViQ29yZSBET00gZXhwb3NlZCBvYmplY3QgYW5kIHNob3VsZCBub3QgYmUgcmVm
ZXJlbmNlIGJ5IHRoaXMKKyAgICAvLyBwbGF0Zm9ybSBsYXllciBvYmplY3QuCisgICAgdmlydHVh
bCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCA9IHsgfSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0Rm9ybWF0ID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCkgPSAwOwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMg
bWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyAr
NjksNyBAQCB2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHCiAKIHZvaWQg
SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKIHsKLSAgICBhdXRv
IGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOworICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbG9naWNhbFJlY3Qo
KSwgY29sb3JTcGFjZSgpKTsKICAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC05OSw4ICs5OSw4IEBAIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRv
QkcKICAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0
YSk7CiAKICAgICBjb3B5SW1hZ2VQaXhlbHMoCi0gICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIHBpeGVsRm9ybWF0KCksIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dz
LAotICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIFBpeGVs
Rm9ybWF0OjpCR1JBOCwgZGVzdEJ5dGVzUGVyUm93LCByZXN1bHQuZGF0YSgpLCBsb2dpY2FsU2l6
ZSgpKTsKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgcGl4
ZWxGb3JtYXQoKSwgY29sb3JTcGFjZSgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhlbEZvcm1hdDo6
QkdSQTgsIGNvbG9yU3BhY2UoKSwgZGVzdEJ5dGVzUGVyUm93LCByZXN1bHQuZGF0YSgpLCBsb2dp
Y2FsU2l6ZSgpKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yMDAsMTMgKzIwMCwxNiBA
QCBzdGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxzVW5hY2NlCiB9CiAKIHZvaWQgSW1h
Z2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoCi0gICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBzcmNBbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQgc3JjUGl4ZWxGb3JtYXQsIHVuc2lnbmVk
IHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAotICAgIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdCBkZXN0UGl4ZWxGb3JtYXQsIHVuc2ln
bmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNp
emUpIGNvbnN0CisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgUGl4
ZWxGb3JtYXQgc3JjUGl4ZWxGb3JtYXQsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBzcmNDb2xvclNw
YWNlLCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQgZGVzdFBpeGVs
Rm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UsIHVuc2lnbmVkIGRl
c3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNv
bnN0CiB7CiAgICAgLy8gV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgZ2V0dGluZyBvciBwdXR0
aW5nIHBpeGVsIGRhdGEgd2l0aCBkZWVwIGNvbG9yIGJ1ZmZlcnMuCiAgICAgQVNTRVJUKHNyY1Bp
eGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpSR0JBOCB8fCBzcmNQaXhlbEZvcm1hdCA9PSBQaXhl
bEZvcm1hdDo6QkdSQTgpOwogICAgIEFTU0VSVChkZXN0UGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3Jt
YXQ6OlJHQkE4IHx8IGRlc3RQaXhlbEZvcm1hdCA9PSBQaXhlbEZvcm1hdDo6QkdSQTgpOwogCisg
ICAgLy8gV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgY29sb3Igc3BhY2UgdHJhbnNmb3JtcyBp
biB0aGUgYmFzZSBjYXNlLgorICAgIEFTU0VSVChzcmNDb2xvclNwYWNlID09IGRlc3RDb2xvclNw
YWNlKTsKKwogICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQpIHsKICAg
ICAgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpCiAgICAgICAgICAgICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQ
cmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkPihzcmNQaXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJS
b3csIHNyY1Jvd3MsIGRlc3RQaXhlbEZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywg
c2l6ZSk7CkBAIC0yMjMsMTEgKzIyNiwxMSBAQCB2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29w
eUltYWdlUGl4ZWxzCiAgICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVt
dWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkPihzcmNQaXhlbEZvcm1hdCwgc3JjQnl0ZXNQZXJSb3cs
IHNyY1Jvd3MsIGRlc3RQaXhlbEZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6
ZSk7CiB9CiAKLVJlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0LCB2b2lkKiBkYXRhKSBjb25zdAorUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJC
YWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBkZXN0Q29sb3JT
cGFjZSwgdm9pZCogZGF0YSkgY29uc3QKIHsKICAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSB0
b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKIAotICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1h
Z2VEYXRhOjpjcmVhdGUoc3JjUmVjdFNjYWxlZC5zaXplKCkpOworICAgIGF1dG8gaW1hZ2VEYXRh
ID0gSW1hZ2VEYXRhOjpjcmVhdGUoc3JjUmVjdFNjYWxlZC5zaXplKCksIGRlc3RDb2xvclNwYWNl
KTsKICAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTI1
MCw4ICsyNTMsOCBAQCBSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdlCiAg
ICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsg
c3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkg
KiA0OwogCiAgICAgY29weUltYWdlUGl4ZWxzKAotICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCBwaXhlbEZvcm1hdCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93
cywKLSAgICAgICAgb3V0cHV0Rm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIGRlc3RCeXRlc1Bl
clJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7CisgICAgICAgIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIHBpeGVsRm9ybWF0KCksIGNvbG9yU3BhY2UoKSwgc3Jj
Qnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIG91dHB1dEZvcm1hdCwgUGl4ZWxGb3JtYXQ6
OlJHQkE4LCBkZXN0Q29sb3JTcGFjZSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJl
Y3Quc2l6ZSgpKTsKIAogICAgIHJldHVybiBpbWFnZURhdGE7CiB9CkBAIC0yNzQsMTUgKzI3Nywx
NyBAQCB2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFsCiAgICAgZGVzdFJl
Y3QuaW50ZXJzZWN0KGJhY2tlbmRSZWN0KCkpOwogICAgIHNyY1JlY3RDbGlwcGVkLnNldFNpemUo
ZGVzdFJlY3Quc2l6ZSgpKTsKIAorICAgIGF1dG8gZGVzdENvbG9yU3BhY2UgPSBjb2xvclNwYWNl
KCk7CiAgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKICAgICB1
aW50OF90KiBkZXN0Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgZGVz
dFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKIAorICAgIGF1
dG8gc3JjQ29sb3JTcGFjZSA9IGltYWdlRGF0YS5jb2xvclNwYWNlKCk7CiAgICAgdW5zaWduZWQg
c3JjQnl0ZXNQZXJSb3cgPSA0ICogaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpOwogICAgIHVpbnQ4
X3QqIHNyY1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLT5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55
KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CiAKICAgICBjb3B5
SW1hZ2VQaXhlbHMoCi0gICAgICAgIGlucHV0Rm9ybWF0LCBQaXhlbEZvcm1hdDo6UkdCQTgsIHNy
Y0J5dGVzUGVyUm93LCBzcmNSb3dzLAotICAgICAgICBkZXN0Rm9ybWF0LCBwaXhlbEZvcm1hdCgp
LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworICAgICAgICBp
bnB1dEZvcm1hdCwgUGl4ZWxGb3JtYXQ6OlJHQkE4LCBzcmNDb2xvclNwYWNlLCBzcmNCeXRlc1Bl
clJvdywgc3JjUm93cywKKyAgICAgICAgZGVzdEZvcm1hdCwgcGl4ZWxGb3JtYXQoKSwgZGVzdENv
bG9yU3BhY2UsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCShyZXZpc2lvbiAyNzY4
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tl
bmQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNvbG9yU3Bh
Y2UuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzR0wu
aCIKKyNpbmNsdWRlICJQaXhlbEZvcm1hdC5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRp
b25zLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIK
QEAgLTU1LDEzICs1Niw2IEBAIGVudW0gY2xhc3MgUHJlc2VydmVSZXNvbHV0aW9uIDogdWludDhf
dCAKICAgICBZZXMsCiB9OwogCi1lbnVtIGNsYXNzIFBpeGVsRm9ybWF0IDogdWludDhfdCB7Ci0g
ICAgUkdCQTgsCi0gICAgQkdSQTgsCi0gICAgUkdCMTAsCi0gICAgUkdCMTBBOCwKLX07Ci0KIGVu
dW0gY2xhc3MgVm9sYXRpbGl0eVN0YXRlIDogdWludDhfdCB7CiAgICAgVmFsaWQsCiAgICAgRW1w
dHkKQEAgLTExNSw3ICsxMDksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBWZWN0b3I8dWludDhf
dD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBj
b25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIERlc3RpbmF0aW9u
Q29sb3JTcGFjZSkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSA9IDA7CiAKICAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CkBAIC0xNTUsMTIgKzE0
OSwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgSW50UmVjdCBiYWNrZW5kUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgYmFja2VuZFNpemUoKSk7IH07CiAKICAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY29weUltYWdlUGl4ZWxzKAotICAgICAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBQaXhlbEZvcm1hdCBzcmNQaXhlbEZv
cm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCi0gICAgICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBQaXhlbEZvcm1hdCBkZXN0
UGl4ZWxGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3Ms
IGNvbnN0IEludFNpemUmKSBjb25zdDsKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBz
cmNBbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQgc3JjUGl4ZWxGb3JtYXQsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZSBzcmNDb2xvclNwYWNlLCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCog
c3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQs
IFBpeGVsRm9ybWF0IGRlc3RQaXhlbEZvcm1hdCwgRGVzdGluYXRpb25Db2xvclNwYWNlIGRlc3RD
b2xvclNwYWNlLCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBj
b25zdCBJbnRTaXplJikgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8dWludDhf
dD4gdG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJl
ZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgdm9pZCogZGF0YSkgY29uc3Q7CisgICAg
V0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UsIHZvaWQqIGRhdGEpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCwgdm9pZCogZGF0YSk7CiAK
ICAgICBQYXJhbWV0ZXJzIG1fcGFyYW1ldGVyczsKQEAgLTE3MCwxNiArMTY0LDYgQEAgcHJvdGVj
dGVkOgogCiBuYW1lc3BhY2UgV1RGIHsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxX
ZWJDb3JlOjpQaXhlbEZvcm1hdD4gewotICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Ci0g
ICAgV2ViQ29yZTo6UGl4ZWxGb3JtYXQsCi0gICAgV2ViQ29yZTo6UGl4ZWxGb3JtYXQ6OlJHQkE4
LAotICAgIFdlYkNvcmU6OlBpeGVsRm9ybWF0OjpCR1JBOCwKLSAgICBXZWJDb3JlOjpQaXhlbEZv
cm1hdDo6UkdCMTAsCi0gICAgV2ViQ29yZTo6UGl4ZWxGb3JtYXQ6OlJHQjEwQTgKLSAgICA+Owot
fTsKLQogdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpQcmVzZXJ2ZVJlc29s
dXRpb24+IHsKICAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAogICAgIFdlYkNvcmU6OlBy
ZXNlcnZlUmVzb2x1dGlvbiwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BpeGVsRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGl4ZWxGb3JtYXQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QaXhlbEZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRz
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBQaXhlbEZvcm1hdCA6IHVp
bnQ4X3QgeworICAgIFJHQkE4LAorICAgIEJHUkE4LAorICAgIFJHQjEwLAorICAgIFJHQjEwQTgs
Cit9OworCit9CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJh
aXRzPFdlYkNvcmU6OlBpeGVsRm9ybWF0PiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVl
czwKKyAgICAgICAgV2ViQ29yZTo6UGl4ZWxGb3JtYXQsCisgICAgICAgIFdlYkNvcmU6OlBpeGVs
Rm9ybWF0OjpSR0JBOCwKKyAgICAgICAgV2ViQ29yZTo6UGl4ZWxGb3JtYXQ6OkJHUkE4LAorICAg
ICAgICBXZWJDb3JlOjpQaXhlbEZvcm1hdDo6UkdCMTAsCisgICAgICAgIFdlYkNvcmU6OlBpeGVs
Rm9ybWF0OjpSR0IxMEE4CisgICAgPjsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCShyZXZpc2lvbiAyNzY4MTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTA0LDcgKzkwNCw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1
ZmZlcihJbWFnZUIKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBibHVyUmVjdChJbnRQ
b2ludCgpLCB0ZW1wbGF0ZVNpemUpOwotICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5n
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVy
UmVjdCk7CisgICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0LCBsYXllckltYWdl
LmNvbG9yU3BhY2UoKSk7CiAgICAgaWYgKCFsYXllckRhdGEpCiAgICAgICAgIHJldHVybjsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250
ZXh0R0xBTkdMRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAJKHJldmlzaW9uIDI3NjgxOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4
dEdMQU5HTEUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw4IEBAIHN0YXRpYyB2b2lk
IHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGkKIAogUmVmUHRyPEltYWdlRGF0YT4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHNGb3JQYWludFJlc3VsdHMoKQogewotICAgIGF1
dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoZ2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKSk7CisgICAgLy8gRklYTUU6IFN1cHBvcnQgbm9uLVNSR0IuCisgICAgYXV0byBpbWFnZURh
dGEgPSBJbWFnZURhdGE6OmNyZWF0ZShnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IpOwogICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICBTY29wZWRQaXhlbFN0b3JhZ2VNb2RlIHBhY2tBbGlnbm1lbnQo
R0xfUEFDS19BTElHTk1FTlQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQ29sb3JTcGFjZUNHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvQ29sb3JTcGFjZUNHLmgJKHJldmlzaW9uIDI3NjgxOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yU3BhY2VDRy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjMsMTYgKzEyMywxNiBAQCBzdGF0aWMgaW5saW5lIENHQ29sb3JTcGFjZVJlZiBj
YWNoZWROdWxsCiBzdGF0aWMgaW5saW5lIENHQ29sb3JTcGFjZVJlZiBjYWNoZWRDR0NvbG9yU3Bh
Y2UoRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgc3dpdGNoIChjb2xv
clNwYWNlKSB7Ci0gICAgY2FzZSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OkxpbmVhclNSR0I6IHsK
LSNpZiBIQVZFKENPUkVfR1JBUEhJQ1NfTElORUFSX1NSR0JfQ09MT1JfU1BBQ0UpCi0gICAgICAg
IHJldHVybiBsaW5lYXJTUkdCQ29sb3JTcGFjZVJlZigpOwotI2Vsc2UKLSAgICAgICAgLy8gRklY
TUU6IFdpbmRvd3Mgc2hvdWxkIGJlIGFibGUgdG8gdXNlIGxpbmVhciBzUkdCLCB0aGlzIGlzIHRy
YWNrZWQgYnkgaHR0cDovL3dlYmtpdC5vcmcvYi84MDAwMC4KLSAgICAgICAgcmV0dXJuIHNSR0JD
b2xvclNwYWNlUmVmKCk7Ci0jZW5kaWYKLSAgICB9CiAgICAgY2FzZSBEZXN0aW5hdGlvbkNvbG9y
U3BhY2U6OlNSR0I6CiAgICAgICAgIHJldHVybiBzUkdCQ29sb3JTcGFjZVJlZigpOworI2lmIEVO
QUJMRShERVNUSU5BVElPTl9DT0xPUl9TUEFDRV9MSU5FQVJfU1JHQikKKyAgICBjYXNlIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQjoKKyAgICAgICAgcmV0dXJuIGxpbmVhclNSR0JD
b2xvclNwYWNlUmVmKCk7CisjZW5kaWYKKyNpZiBFTkFCTEUoREVTVElOQVRJT05fQ09MT1JfU1BB
Q0VfRElTUExBWV9QMykKKyAgICBjYXNlIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6RGlzcGxheVAz
OgorICAgICAgICByZXR1cm4gZGlzcGxheVAzQ29sb3JTcGFjZVJlZigpOworI2VuZGlmCiAgICAg
fQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBzUkdCQ29sb3JTcGFjZVJl
ZigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc2ODE5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNyArMTg4LDcgQEAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gSW1hZ2VCdWZmZXJDR0JhY2tlbgogCiAgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVn
VVRJKCkpKSB7CiAgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwg
c28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAg
ICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCgpKTsKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBn
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgbG9naWNh
bFJlY3QoKSwgY29sb3JTcGFjZSgpKTsKICAgICAgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMjU1LDEzICsyNTUsMTAwIEBAIHN0YXRpYyBpbmxp
bmUgdkltYWdlX0J1ZmZlciBtYWtlVkltYWdlQnUKICAgICB2SW1hZ2VCdWZmZXIud2lkdGggPSBz
dGF0aWNfY2FzdDx2SW1hZ2VQaXhlbENvdW50PihzaXplLndpZHRoKCkpOwogICAgIHZJbWFnZUJ1
ZmZlci5yb3dCeXRlcyA9IGJ5dGVzUGVyUm93OwogICAgIHZJbWFnZUJ1ZmZlci5kYXRhID0gcm93
czsKKwogICAgIHJldHVybiB2SW1hZ2VCdWZmZXI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdkltYWdl
X0NHSW1hZ2VGb3JtYXQgbWFrZVZJbWFnZUNHSW1hZ2VGb3JtYXQoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBhbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIERlc3RpbmF0aW9uQ29s
b3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQg
OCBiaXQgcGl4ZWwgZm9ybWF0cyBmb3IgdGhlc2UgY29udmVyc2lvbnMuCisKKyAgICBhdXRvIGJp
dHNQZXJDb21wb25lbnQgPSBbXSAoUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQpIC0+IHVuc2lnbmVk
IHsKKyAgICAgICAgc3dpdGNoIChwaXhlbEZvcm1hdCkgeworICAgICAgICBjYXNlIFBpeGVsRm9y
bWF0OjpSR0JBODoKKyAgICAgICAgY2FzZSBQaXhlbEZvcm1hdDo6QkdSQTg6CisgICAgICAgICAg
ICByZXR1cm4gODsKKworICAgICAgICBjYXNlIFBpeGVsRm9ybWF0OjpSR0IxMDoKKyAgICAgICAg
Y2FzZSBQaXhlbEZvcm1hdDo6UkdCMTBBODoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiA4OworICAg
IH07CisKKyAgICBhdXRvIGJpdHNQZXJQaXhlbCA9IFtdIChQaXhlbEZvcm1hdCBwaXhlbEZvcm1h
dCkgLT4gdW5zaWduZWQgeworICAgICAgICBzd2l0Y2ggKHBpeGVsRm9ybWF0KSB7CisgICAgICAg
IGNhc2UgUGl4ZWxGb3JtYXQ6OlJHQkE4OgorICAgICAgICBjYXNlIFBpeGVsRm9ybWF0OjpCR1JB
ODoKKyAgICAgICAgICAgIHJldHVybiAzMjsKKworICAgICAgICBjYXNlIFBpeGVsRm9ybWF0OjpS
R0IxMDoKKyAgICAgICAgY2FzZSBQaXhlbEZvcm1hdDo6UkdCMTBBODoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiAzMjsKKyAgICB9OworCisgICAgYXV0byBiaXRtYXBJbmZvID0gW10gKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gYWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0KSAtPiBD
R0JpdG1hcEluZm8geworICAgICAgICBzd2l0Y2ggKHBpeGVsRm9ybWF0KSB7CisgICAgICAgIGNh
c2UgUGl4ZWxGb3JtYXQ6OlJHQkE4OgorICAgICAgICAgICAgaWYgKGFscGhhRm9ybWF0ID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnIHwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRM
YXN0OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBrQ0dCaXRtYXBC
eXRlT3JkZXIzMkJpZyB8IGtDR0ltYWdlQWxwaGFMYXN0OworCisgICAgICAgIGNhc2UgUGl4ZWxG
b3JtYXQ6OkJHUkE4OgorICAgICAgICAgICAgaWYgKGFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGtDR0Jp
dG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdDsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4ga0NHQml0bWFwQnl0ZU9y
ZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhRmlyc3Q7CisKKyAgICAgICAgY2FzZSBQaXhlbEZv
cm1hdDo6UkdCMTA6CisgICAgICAgIGNhc2UgUGl4ZWxGb3JtYXQ6OlJHQjEwQTg6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4ga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhh
Rmlyc3Q7CisgICAgfTsKKworICAgIHZJbWFnZV9DR0ltYWdlRm9ybWF0IGZvcm1hdDsKKworICAg
IGZvcm1hdC5iaXRzUGVyQ29tcG9uZW50ID0gYml0c1BlckNvbXBvbmVudChwaXhlbEZvcm1hdCk7
CisgICAgZm9ybWF0LmJpdHNQZXJQaXhlbCA9IGJpdHNQZXJQaXhlbChwaXhlbEZvcm1hdCk7Cisg
ICAgZm9ybWF0LmNvbG9yU3BhY2UgPSBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSk7Cisg
ICAgZm9ybWF0LmJpdG1hcEluZm8gPSBiaXRtYXBJbmZvKGFscGhhRm9ybWF0LCBwaXhlbEZvcm1h
dCk7CisgICAgZm9ybWF0LnZlcnNpb24gPSAwOworICAgIGZvcm1hdC5kZWNvZGUgPSBudWxscHRy
OworICAgIGZvcm1hdC5yZW5kZXJpbmdJbnRlbnQgPSBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0
OworCisgICAgcmV0dXJuIGZvcm1hdDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGNvcHlJbWFn
ZVBpeGVsc0FjY2VsZXJhdGVkKAotICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFG
b3JtYXQsIFBpeGVsRm9ybWF0IHNyY1BpeGVsRm9ybWF0LCB2SW1hZ2VfQnVmZmVyJiBzcmMsCi0g
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0IGRl
c3RQaXhlbEZvcm1hdCwgdkltYWdlX0J1ZmZlciYgZGVzdCkKKyAgICBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIHNyY0FscGhhRm9ybWF0LCBQaXhlbEZvcm1hdCBzcmNQaXhlbEZvcm1hdCwgRGVzdGlu
YXRpb25Db2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIHZJbWFnZV9CdWZmZXImIHNyYywKKyAgICBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgUGl4ZWxGb3JtYXQgZGVzdFBp
eGVsRm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UsIHZJbWFnZV9C
dWZmZXImIGRlc3QpCiB7CisgICAgaWYgKHNyY0NvbG9yU3BhY2UgIT0gZGVzdENvbG9yU3BhY2Up
IHsKKyAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIHVzaW5nIHZJbWFnZUNvbnZlcnRfQW55VG9B
bnkgZm9yIGFsbCBjb252ZXJzaW9ucywgbm90IGp1c3Qgb25lcyB0aGF0IG5lZWQgYSBjb2xvciBz
cGFjZSBjb252ZXJzaW9uLAorICAgICAgICAvLyBhZnRlciBqdWRpY2lvdXNseSBwZXJmb3JtYW5j
ZSB0ZXN0aW5nIHRoZW0gYWdhaW5zdCBlYWNoIG90aGVyLgorICAgIAorICAgICAgICBhdXRvIHNy
Y0Zvcm1hdCA9IG1ha2VWSW1hZ2VDR0ltYWdlRm9ybWF0KHNyY0FscGhhRm9ybWF0LCBzcmNQaXhl
bEZvcm1hdCwgc3JjQ29sb3JTcGFjZSk7CisgICAgICAgIGF1dG8gZGVzdEZvcm1hdCA9IG1ha2VW
SW1hZ2VDR0ltYWdlRm9ybWF0KGRlc3RBbHBoYUZvcm1hdCwgZGVzdFBpeGVsRm9ybWF0LCBkZXN0
Q29sb3JTcGFjZSk7CisKKyAgICAgICAgdkltYWdlX0Vycm9yIGNvbnZlcnRlckNyZWF0ZUVycm9y
ID0ga3ZJbWFnZU5vRXJyb3I7CisgICAgICAgIGF1dG8gY29udmVydGVyID0gYWRvcHRDRih2SW1h
Z2VDb252ZXJ0ZXJfQ3JlYXRlV2l0aENHSW1hZ2VGb3JtYXQoJnNyY0Zvcm1hdCwgJmRlc3RGb3Jt
YXQsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzLCAmY29udmVydGVyQ3JlYXRlRXJyb3IpKTsKKyAg
ICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShjb252ZXJ0ZXJDcmVhdGVFcnJvciAhPSBrdkltYWdl
Tm9FcnJvciwgInZJbWFnZUNvbnZlcnRlciBjcmVhdGlvbiBmYWlsZWQgd2l0aCBlcnJvcjogJXpk
IiwgY29udmVydGVyQ3JlYXRlRXJyb3IpOworCisgICAgICAgIHZJbWFnZV9FcnJvciBjb252ZXJ0
ZXJDb252ZXJ0RXJyb3IgPSB2SW1hZ2VDb252ZXJ0X0FueVRvQW55KGNvbnZlcnRlci5nZXQoKSwg
JnNyYywgJmRlc3QsIG51bGxwdHIsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShjb252ZXJ0ZXJDb252ZXJ0RXJyb3IgPT0ga3ZJbWFnZU5vRXJyb3IsICJ2SW1h
Z2VDb252ZXJ0X0FueVRvQW55IGZhaWxlZCBjb252ZXJzaW9uIHdpdGggZXJyb3I6ICV6ZCIsIGNv
bnZlcnRlckNvbnZlcnRFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAo
c3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CiAgICAgICAgIEFTU0VSVChzcmNQ
aXhlbEZvcm1hdCAhPSBkZXN0UGl4ZWxGb3JtYXQpOwogICAgICAgICAvLyBUaGUgZGVzdGluYXRp
b24gYWxwaGEgZm9ybWF0IGNhbiBiZSB1bnByZW11bHRpcGxpZWQgaW4gdGhlCkBAIC0yOTQsMjIg
KzM4MSwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxzQWNjZWxlCiB9CiAK
IHZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscygKLSAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBQaXhlbEZvcm1hdCBzcmNQaXhlbEZvcm1h
dCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCi0gICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0IGRlc3RQaXhlbEZv
cm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3Qg
SW50U2l6ZSYgc2l6ZSkgY29uc3QKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhh
Rm9ybWF0LCBQaXhlbEZvcm1hdCBzcmNQaXhlbEZvcm1hdCwgRGVzdGluYXRpb25Db2xvclNwYWNl
IHNyY0NvbG9yU3BhY2UsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dz
LAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBQaXhlbEZvcm1h
dCBkZXN0UGl4ZWxGb3JtYXQsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSwg
dW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6
ZSYgc2l6ZSkgY29uc3QKIHsKICAgICAvLyBXZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBnZXR0
aW5nIG9yIHB1dHRpbmcgcGl4ZWwgZGF0YSB3aXRoIGRlZXAgY29sb3IgYnVmZmVycy4KICAgICBB
U1NFUlQoc3JjUGl4ZWxGb3JtYXQgPT0gUGl4ZWxGb3JtYXQ6OlJHQkE4IHx8IHNyY1BpeGVsRm9y
bWF0ID09IFBpeGVsRm9ybWF0OjpCR1JBOCk7CiAgICAgQVNTRVJUKGRlc3RQaXhlbEZvcm1hdCA9
PSBQaXhlbEZvcm1hdDo6UkdCQTggfHwgZGVzdFBpeGVsRm9ybWF0ID09IFBpeGVsRm9ybWF0OjpC
R1JBOCk7CiAKLSAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0ICYmIHNy
Y1BpeGVsRm9ybWF0ID09IGRlc3RQaXhlbEZvcm1hdCkgewotICAgICAgICBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmNvcHlJbWFnZVBpeGVscyhzcmNBbHBoYUZvcm1hdCwgc3JjUGl4ZWxGb3JtYXQsIHNy
Y0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RQaXhlbEZvcm1hdCwg
ZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0
ID09IGRlc3RBbHBoYUZvcm1hdCAmJiBzcmNQaXhlbEZvcm1hdCA9PSBkZXN0UGl4ZWxGb3JtYXQg
JiYgc3JjQ29sb3JTcGFjZSA9PSBkZXN0Q29sb3JTcGFjZSkgeworICAgICAgICBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyhzcmNBbHBoYUZvcm1hdCwgc3JjUGl4ZWxGb3JtYXQs
IHNyY0NvbG9yU3BhY2UsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0QWxwaGFGb3JtYXQs
IGRlc3RQaXhlbEZvcm1hdCwgZGVzdENvbG9yU3BhY2UsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJv
d3MsIHNpemUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgdkltYWdlX0J1ZmZlciBz
cmMgPSBtYWtlVkltYWdlQnVmZmVyKHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBzaXplKTsKICAg
ICB2SW1hZ2VfQnVmZmVyIGRlc3QgPSBtYWtlVkltYWdlQnVmZmVyKGRlc3RCeXRlc1BlclJvdywg
ZGVzdFJvd3MsIHNpemUpOwogCi0gICAgY29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQoc3JjQWxw
aGFGb3JtYXQsIHNyY1BpeGVsRm9ybWF0LCBzcmMsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdFBpeGVs
Rm9ybWF0LCBkZXN0KTsKKyAgICBjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZChzcmNBbHBoYUZv
cm1hdCwgc3JjUGl4ZWxGb3JtYXQsIHNyY0NvbG9yU3BhY2UsIHNyYywgZGVzdEFscGhhRm9ybWF0
LCBkZXN0UGl4ZWxGb3JtYXQsIGRlc3RDb2xvclNwYWNlLCBkZXN0KTsKIH0KICNlbmRpZgogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgJKHJldmlzaW9uIDI3NjgxOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDggKzU3LDggQEAgcHJvdGVjdGVkOgogCiAjaWYgVVNFKEFDQ0VMRVJBVEUp
CiAgICAgdm9pZCBjb3B5SW1hZ2VQaXhlbHMoCi0gICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gc3JjQWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0IHNyY1BpeGVsRm9ybWF0LCB1bnNpZ25lZCBz
cmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKLSAgICAgICAgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIFBpeGVsRm9ybWF0IGRlc3RQaXhlbEZvcm1hdCwgdW5z
aWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYp
IGNvbnN0IG92ZXJyaWRlOworICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhh
Rm9ybWF0LCBQaXhlbEZvcm1hdCBzcmNQaXhlbEZvcm1hdCwgRGVzdGluYXRpb25Db2xvclNwYWNl
IHNyY0NvbG9yU3BhY2UsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dz
LAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgUGl4ZWxG
b3JtYXQgZGVzdFBpeGVsRm9ybWF0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZGVzdENvbG9yU3Bh
Y2UsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IElu
dFNpemUmKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogfTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjEsOSArMTYxLDkgQEAgVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZQogICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURh
dGEobV9kYXRhKTsKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVy
QmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9kYXRhKTsKKyAg
ICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBz
cmNSZWN0LCBkZXN0aW5hdGlvbkNvbG9yU3BhY2UsIG1fZGF0YSk7CiB9CiAKIHZvaWQgSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0Rm9ybWF0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCShyZXZp
c2lvbiAyNzY4MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBA
IHB1YmxpYzoKIAogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
aW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1h
dCkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNPcmlnaW5BdFVwcGVy
TGVmdENvcm5lciA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5jcHAJKHJldmlzaW9uIDI3NjgxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4MywxMCArMTgzLDEwIEBAIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2sKICAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKGxvY2suc3VyZmFj
ZUJhc2VBZGRyZXNzKCkpOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK1JlZlB0cjxJbWFnZURhdGE+IElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UgZGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdAogewogICAgIElPU3VyZmFjZTo6
TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6
Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbG9jay5zdXJmYWNlQmFzZUFkZHJl
c3MoKSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1
dEZvcm1hdCwgc3JjUmVjdCwgZGVzdGluYXRpb25Db2xvclNwYWNlLCBsb2NrLnN1cmZhY2VCYXNl
QWRkcmVzcygpKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgJKHJldmlzaW9uIDI3NjgxOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxJ
bWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZURhdGE+
IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3Qg
SW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0Rm9ybWF0KSBvdmVycmlkZTsKICAgICBJ
T1N1cmZhY2UqIHN1cmZhY2UoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1zLmNwcAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NzMsNiArNzczLDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bQogewogICAgIHRzLmR1bXBQcm9wZXJ0eSgib3V0cHV0Rm9ybWF0IiwgaXRlbS5vdXRwdXRGb3Jt
YXQoKSk7CiAgICAgdHMuZHVtcFByb3BlcnR5KCJzcmNSZWN0IiwgaXRlbS5zcmNSZWN0KCkpOwor
ICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3JTcGFjZSIsIGl0ZW0uY29sb3JTcGFjZSgpKTsKICAg
ICByZXR1cm4gdHM7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAko
cmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTkwNiwxOCAr
MTkwNiwyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzSW5saW5lSXRl
bSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzRHJhd2luZ0l0ZW0gPSBmYWxz
ZTsKIAotICAgIEdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCkKKyAgICBHZXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogICAgICAgICA6IG1f
c3JjUmVjdChzcmNSZWN0KQogICAgICAgICAsIG1fb3V0cHV0Rm9ybWF0KG91dHB1dEZvcm1hdCkK
KyAgICAgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKICAgICB7CiAgICAgfQogCiAgICAg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX291
dHB1dEZvcm1hdDsgfQogICAgIEludFJlY3Qgc3JjUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Jj
UmVjdDsgfQorICAgIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2xvclNwYWNlOyB9CiAKIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX3NyY1JlY3Q7
CiAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBtX291dHB1dEZvcm1hdDsKKyAgICBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UgbV9jb2xvclNwYWNlOwogfTsKIAogY2xhc3MgUHV0SW1hZ2VEYXRhIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlY29yZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAJKHJldmlzaW9u
IDI3NjgxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsOSArNTUsOSBA
QCBSZWNvcmRlcjo6flJlY29yZGVyKCkKICAgICBMT0coRGlzcGxheUxpc3RzLCAiUmVjb3JkZWQg
ZGlzcGxheSBsaXN0OlxuJXMiLCBtX2Rpc3BsYXlMaXN0LmRlc2NyaXB0aW9uKCkuZGF0YSgpKTsK
IH0KIAotdm9pZCBSZWNvcmRlcjo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KQordm9pZCBSZWNvcmRlcjo6
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZGVzdGluYXRpb25Db2xv
clNwYWNlKQogewotICAgIGFwcGVuZDxHZXRJbWFnZURhdGE+KG91dHB1dEZvcm1hdCwgc291cmNl
UmVjdCk7CisgICAgYXBwZW5kPEdldEltYWdlRGF0YT4ob3V0cHV0Rm9ybWF0LCBzb3VyY2VSZWN0
LCBkZXN0aW5hdGlvbkNvbG9yU3BhY2UpOwogfQogCiB2b2lkIFJlY29yZGVyOjpwdXRJbWFnZURh
dGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgV2Vi
Q29yZTo6SW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJl
bXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuaAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVjb3Jk
ZXIoR3JhcGhpY3NDb250ZXh0JiwgRGlzcGxheUxpc3QmLCBjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYsIERlbGVnYXRlKiA9IG51bGxwdHIsIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0Rl
Y29uc3RydWN0aW9uID0gRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rp
b246OkRlY29uc3RydWN0KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZWNvcmRlcigp
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UgZGVzdGluYXRpb25Db2xvclNwYWNlKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RGb3JtYXQpOwogCiAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdC5pc0VtcHR5KCk7IH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg2
LDcgKzI4Niw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXIKICAg
ICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBk
cmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAKICAg
ICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUo
KSk7Ci0gICAgYXV0byBpbWFnZURhdGEgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0KTsKKyAgICBhdXRv
IGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3QsIHJlc3VsdEltYWdlLT5jb2xvclNwYWNl
KCkpOwogICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJv
cFNoYWRvdy5jcHAJKHJldmlzaW9uIDI3NjgxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAx
LDcgKzEwMSw3IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUKIAog
ICAgIC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIgd291bGQgYXZv
aWQgY29weWluZyB0aGUgSW1hZ2VEYXRhLgogICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2lu
dCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgYXV0byBpbWFnZURhdGEgPSBy
ZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIHNoYWRvd0FyZWEpOworICAgIGF1dG8gaW1hZ2VEYXRhID0gcmVzdWx0SW1hZ2UtPmdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dB
cmVhLCByZXN1bHRJbWFnZS0+Y29sb3JTcGFjZSgpKTsKICAgICBpZiAoIWltYWdlRGF0YSkKICAg
ICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJKHJldmlzaW9uIDI3NjgxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQwMywxNCArNDAzLDEwIEBAIGJvb2wgRkVMaWdodGluZzo6ZHJh
d0xpZ2h0aW5nKFVpbnQ4Q2xhbXAKICAgICBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
ID0gd2lkdGggKiBjUGl4ZWxTaXplOwogICAgIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSA9IHdp
ZHRoIC0gMTsKICAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0gaGVpZ2h0IC0gMTsKLSAg
ICAKLSAgICBpZiAob3BlcmF0aW5nQ29sb3JTcGFjZSgpID09IERlc3RpbmF0aW9uQ29sb3JTcGFj
ZTo6TGluZWFyU1JHQikgewotICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdD
b2xvci50b0NvbG9yVHlwZUxvc3N5PExpbmVhclNSR0JBPGZsb2F0Pj4oKTsKLSAgICAgICAgcGFp
bnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0Qo
ciwgZywgYik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBtX2xp
Z2h0aW5nQ29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwotICAgICAgICBwYWludGluZ0RhdGEu
aW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9IEZsb2F0UG9pbnQzRChyLCBnLCBiKTsK
LSAgICB9CisKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IG1fbGlnaHRpbmdDb2xvci50b0NvbG9y
Q29tcG9uZW50c0luQ29sb3JTcGFjZShvcGVyYXRpbmdDb2xvclNwYWNlKCkpOworICAgIHBhaW50
aW5nRGF0YS5pbml0aWFsTGlnaHRpbmdEYXRhLmNvbG9yVmVjdG9yID0gRmxvYXRQb2ludDNEKHIs
IGcsIGIpOworCiAgICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFp
bnRpbmdEYXRhKTsKIAogICAgIC8vIFRvcCBsZWZ0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAko
cmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDgsNiArNDQ4LDggQEAg
UmVmUHRyPEltYWdlRGF0YT4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0SQogCiBSZWZQdHI8SW1hZ2VE
YXRhPiBGaWx0ZXJFZmZlY3Q6OmNvbnZlcnRJbWFnZUJ1ZmZlclRvQ29sb3JTcGFjZShEZXN0aW5h
dGlvbkNvbG9yU3BhY2UgdGFyZ2V0Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXImIGlucHV0QnVmZmVy
LCBjb25zdCBJbnRSZWN0JiByZWN0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCkKIHsKKyAgICAvLyBGSVhNRTogTm93IHRoYXQgZ2V0SW1hZ2VEYXRhKCkgc3VwcG9ydHMgY29s
b3Igc3BhY2UgY29udmVyc2lvbiB3ZSBubyBsb25nZXIgbmVlZCB0byByb3VuZCB0cmlwIHRocm91
Z2ggYSBJbWFnZUJ1ZmZlci4KKwogICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IEltYWdlQnVm
ZmVyOjpjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSk7CiAgICAgLy8gQ3JlYXRlIGFuIEltYWdlQnVm
ZmVyIHdpdGggdGhlIGNvcnJlY3QgY29sb3Igc3BhY2UgYW5kIHV0aWxpemUgQ0cgdG8gaGFuZGxl
IGNvbG9yIHNwYWNlIGNvbnZlcnNpb24KICAgICBhdXRvIGNvbnZlcnRlZEJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1fZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9m
aWx0ZXIuZmlsdGVyU2NhbGUoKSwgdGFyZ2V0Q29sb3JTcGFjZSk7CkBAIC00NTUsNyArNDU3LDcg
QEAgUmVmUHRyPEltYWdlRGF0YT4gRmlsdGVyRWZmZWN0Ojpjb252ZXJ0SQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAvLyBDb2xvciBzcGFjZSBjb252ZXJzaW9uIGhhcHBlbnMgaW50ZXJu
YWxseSB3aGVuIGRyYXdpbmcgZnJvbSBvbmUgaW1hZ2UgYnVmZmVyIHRvIGFub3RoZXIKICAgICBj
b252ZXJ0ZWRCdWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoaW5wdXRCdWZmZXIsIHJl
Y3QpOwotICAgIHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldEltYWdlRGF0YShvdXRwdXRGb3Jt
YXQsIHJlY3QpOworICAgIHJldHVybiBjb252ZXJ0ZWRCdWZmZXItPmdldEltYWdlRGF0YShvdXRw
dXRGb3JtYXQsIHJlY3QsIHRhcmdldENvbG9yU3BhY2UpOwogfQogCiB2b2lkIEZpbHRlckVmZmVj
dDo6Y29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlvbihVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCkBA
IC00OTAsMTQgKzQ5MiwxNCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJl
c3VsCiAgICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlv
bihkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgcmVjdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJS
ZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CisgICAgICAg
ICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQ
b2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9LCBtX3Jlc3VsdENvbG9yU3BhY2Up
OwogICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEludFNpemUgaW5w
dXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCgh
SW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwogICAgICAgICAgICAg
aW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0U2l6ZSk7Cisg
ICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUo
aW5wdXRTaXplLCBtX3Jlc3VsdENvbG9yU3BhY2UpOwogICAgICAgICAgICAgaWYgKCFtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IGNvcHlVbnByZW11bHRpcGx5aW5nQWxwaGEoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCksICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7CkBA
IC01MjMsMTQgKzUyNSwxNCBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRS
ZXN1CiAgICAgICAgICAgICAgICAgY29weUNvbnZlcnRlZEltYWdlQnVmZmVyVG9EZXN0aW5hdGlv
bihkZXN0aW5hdGlvbiwgKmNvbG9yU3BhY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQsIHJlY3QpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJl
c3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CisgICAgICAgICAg
ICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50
KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0sIG1fcmVzdWx0Q29sb3JTcGFjZSk7CiAg
ICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEludFNpemUgaW5wdXRT
aXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghSW1h
Z2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwogICAgICAgICAgICAgaW5w
dXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShpbnB1dFNpemUpOworICAg
ICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShp
bnB1dFNpemUsIG1fcmVzdWx0Q29sb3JTcGFjZSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRh
KCksICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwpAQCAt
NTcwLDcgKzU3Miw3IEBAIEltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGwK
ICAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAg
IEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKICAg
ICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShyZXN1bHRTaXplKTsKKyAgICBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVzdWx0U2l6ZSwg
bV9yZXN1bHRDb2xvclNwYWNlKTsKICAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC5nZXQoKTsKIH0KIApAQCAtNTg2LDcgKzU4OCw3IEBAIEltYWdlRGF0YSogRmlsdGVyRWZmZWN0
OjpjcmVhdGVQcmVtdWx0aXAKICAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpOwogICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5n
KHJlc3VsdFNpemUpKTsKICAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxl
KCkpOwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUo
cmVzdWx0U2l6ZSk7CisgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6
OmNyZWF0ZShyZXN1bHRTaXplLCBtX3Jlc3VsdENvbG9yU3BhY2UpOwogICAgIHJldHVybiBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCShy
ZXZpc2lvbiAyNzY4MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlckVmZmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsNyArMjQxLDEzIEBAIHBy
aXZhdGU6CiAgICAgLy8gU2hvdWxkIHRoZSBlZmZlY3QgY2xpcCB0byBpdHMgcHJpbWl0aXZlIHJl
Z2lvbiwgb3IgZXhwYW5kIHRvIHVzZSB0aGUgY29tYmluZWQgcmVnaW9uIG9mIGl0cyBpbnB1dHMu
CiAgICAgYm9vbCBtX2NsaXBzVG9Cb3VuZHMgeyB0cnVlIH07CiAKLSAgICBEZXN0aW5hdGlvbkNv
bG9yU3BhY2UgbV9vcGVyYXRpbmdDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpM
aW5lYXJTUkdCIH07CisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9T
UkdCKQorICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byBkZWZhdWx0T3BlcmF0aW5nQ29sb3JTcGFj
ZSA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQjsKKyNlbHNlCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBhdXRvIGRlZmF1bHRPcGVyYXRpbmdDb2xvclNwYWNlID0gRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCOworI2VuZGlmCisKKyAgICBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9v
cGVyYXRpbmdDb2xvclNwYWNlIHsgZGVmYXVsdE9wZXJhdGluZ0NvbG9yU3BhY2UgfTsKICAgICBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UgbV9yZXN1bHRDb2xvclNwYWNlIHsgRGVzdGluYXRpb25Db2xv
clNwYWNlOjpTUkdCIH07CiAgICAgCiAgICAgY29uc3QgVHlwZSBtX2ZpbHRlckVmZmVjdENsYXNz
VHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCShyZXZpc2lv
biAyNzY4MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA5LDkgKzEwOSwxMyBAQCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBDU1NG
aWx0ZXI6OmJ1aWxkUmVmCiAgICAgICAgIH0KIAogICAgICAgICBlZmZlY3RFbGVtZW50LnNldFN0
YW5kYXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwotICAgICAgICBpZiAoZWZmZWN0RWxlbWVu
dC5yZW5kZXJlcigpKQorICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKSB7Cisj
aWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQogICAgICAgICAg
ICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVmZmVjdEVsZW1lbnQucmVuZGVyZXIo
KS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBDb2xv
ckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFy
U1JHQiA6IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQik7Ci0KKyNlbHNlCisgICAgICAgICAg
ICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoRGVzdGluYXRpb25Db2xvclNwYWNlOjpT
UkdCKTsKKyNlbmRpZgorICAgICAgICB9CiAgICAgICAgIGJ1aWxkZXItPmFkZChlZmZlY3RFbGVt
ZW50LnJlc3VsdCgpLCBlZmZlY3QpOwogICAgICAgICByZWZlcmVuY2VFZmZlY3RzLmFwcGVuZCgq
ZWZmZWN0KTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1No
YXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1No
YXBlLmNwcAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0CiAgICAgaWYgKGltYWdlKQogICAgICAg
ICBncmFwaGljc0NvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwgSW50UmVjdChJbnRQb2ludCgpLCBp
bWFnZVJlY3Quc2l6ZSgpKSk7CiAKLSAgICBhdXRvIGltYWdlRGF0YSA9IGltYWdlQnVmZmVyLT5n
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCB7IElu
dFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkgfSk7CisgICAgYXV0byBpbWFnZURhdGEgPSBpbWFn
ZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgeyBJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpIH0sIGltYWdlQnVmZmVyLT5jb2xv
clNwYWNlKCkpOwogICAgIAogICAgIC8vIFdlIGNvdWxkIGdldCB0byBhIHZhbHVlIHdoZXJlIGlt
YWdlRGF0YSBjb3VsZCBiZSBudWxscHRyLiBBIGNhc2Ugd2hlcmUgSW1hZ2VSZWN0LnNpemUoKSBp
cyBodWdlLCBpbWFnZURhdGE6OmNyZWF0ZQogICAgIC8vIGNhbiByZXR1cm4gYSBudWxscHRyIGJl
Y2F1c2UgZGF0YSBzaXplIGhhcyBvdmVyZmxvd2VkLiBSZWZlciByZGFyOi8vcHJvYmxlbS82MTc5
Mzg4NApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHJldmlzaW9uIDI3NjgxOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDIsOCArMTAyLDEzIEBAIHN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWls
ZGVyPiBSZW5kZXIKICAgICAgICAgYnVpbGRlci0+YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVu
Y2VzKGVmZmVjdC5jb3B5UmVmKCksIGVsZW1lbnQucmVuZGVyZXIoKSk7CiAgICAgICAgIGVsZW1l
bnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7CiAgICAgICAgIGVmZmVjdC0+
c2V0RWZmZWN0Qm91bmRhcmllcyhTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVsZW1lbnQsIGZpbHRlckVsZW1l
bnQoKS5wcmltaXRpdmVVbml0cygpLCB0YXJnZXRCb3VuZGluZ0JveCkpOwotICAgICAgICBpZiAo
ZWxlbWVudC5yZW5kZXJlcigpKQorICAgICAgICBpZiAoZWxlbWVudC5yZW5kZXJlcigpKSB7Cisj
aWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9TUkdCKQogICAgICAgICAg
ICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVsZW1lbnQucmVuZGVyZXIoKS0+c3R5
bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBDb2xvckludGVy
cG9sYXRpb246OkxpbmVhclJHQiA/IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFyU1JHQiA6
IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQik7CisjZWxzZQorICAgICAgICAgICAgZWZmZWN0
LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQik7Cisj
ZW5kaWYKKyAgICAgICAgfQogICAgICAgICBidWlsZGVyLT5hZGQoZWxlbWVudC5yZXN1bHQoKSwg
V1RGTW92ZShlZmZlY3QpKTsKICAgICB9CiAgICAgcmV0dXJuIGJ1aWxkZXI7CkBAIC0xOTEsOCAr
MTk2LDEzIEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3UKICAgICBl
ZmZlY3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwog
ICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0aXBseShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNv
bHV0ZVRyYW5zZm9ybSk7CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSByZW5k
ZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKLSAgICBhdXRv
IHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIERlc3RpbmF0aW9u
Q29sb3JTcGFjZTo6TGluZWFyU1JHQiwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCk7CisgICAgYXV0
byByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNF
bmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQ7CisjaWYgRU5BQkxFKERFU1RJTkFUSU9OX0NPTE9SX1NQQUNFX0xJTkVBUl9T
UkdCKQorICAgIGF1dG8gY29sb3JTcGFjZSA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6TGluZWFy
U1JHQjsKKyNlbHNlCisgICAgYXV0byBjb2xvclNwYWNlID0gRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCOworI2VuZGlmCisgICAgYXV0byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZWZmZWN0
aXZlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0KTsKICAgICBp
ZiAoIXNvdXJjZUdyYXBoaWMpIHsKICAgICAgICAgQVNTRVJUKCFtX3JlbmRlcmVyRmlsdGVyRGF0
YU1hcC5jb250YWlucygmcmVuZGVyZXIpKTsKICAgICAgICAgZmlsdGVyRGF0YS0+c2F2ZWRDb250
ZXh0ID0gY29udGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCShyZXZpc2lvbiAyNzY4MTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksMTMgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJj
ZU1hc2tlcjo6YXBwbHlSZXNvdQogCiAgICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgJiYg
IXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYg
c3ZnU3R5bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7CisKKyNpZiBFTkFCTEUoREVTVElOQVRJT05f
Q09MT1JfU1BBQ0VfTElORUFSX1NSR0IpCiAgICAgICAgIGF1dG8gY29sb3JTcGFjZSA9IHN2Z1N0
eWxlLmNvbG9ySW50ZXJwb2xhdGlvbigpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdC
ID8gRGVzdGluYXRpb25Db2xvclNwYWNlOjpMaW5lYXJTUkdCIDogRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCOworI2Vsc2UKKyAgICAgICAgYXV0byBjb2xvclNwYWNlID0gRGVzdGluYXRpb25D
b2xvclNwYWNlOjpTUkdCOworI2VuZGlmCisKICAgICAgICAgLy8gRklYTUUgKDE0OTQ3MCk6IFRo
aXMgaW1hZ2UgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0
ZWQuIE1ha2luZyBpdCBtYXRjaCB0aGUgY29udGV4dCBicmVha3MgYWxwaGEgbWFza2luZywgdGhv
dWdoLgogICAgICAgICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0
OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbG9y
U3BhY2UsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGNvbnRleHQpOwogICAgICAgICBp
ZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAJKHJldmlzaW9uIDI3NjgxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE5MSw3ICs2MTkxLDcgQEAgdm9pZCBJbnRl
cm5hbHM6OmxvYWRBcnR3b3JrSW1hZ2UoU3RyaW5nJgogICAgIG1fYXJ0d29ya0ltYWdlUHJvbWlz
ZSA9IG1ha2VVbmlxdWU8QXJ0d29ya0ltYWdlUHJvbWlzZT4oV1RGTW92ZShwcm9taXNlKSk7CiAg
ICAgbV9hcnR3b3JrTG9hZGVyID0gbWFrZVVuaXF1ZTxBcnR3b3JrSW1hZ2VMb2FkZXI+KCpjb250
ZXh0RG9jdW1lbnQoKSwgdXJsLCBbdGhpc10oSW1hZ2UqIGltYWdlKSB7CiAgICAgICAgIGlmIChp
bWFnZSkgewotICAgICAgICAgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZSh1
bnNpZ25lZChpbWFnZS0+d2lkdGgoKSksIHVuc2lnbmVkKGltYWdlLT5oZWlnaHQoKSkpOworICAg
ICAgICAgICAgYXV0byBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW1hZ2UtPndpZHRoKCkpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW1hZ2UtPmhl
aWdodCgpKSk7CiAgICAgICAgICAgICBpZiAoIWltYWdlRGF0YS5oYXNFeGNlcHRpb24oKSkKICAg
ICAgICAgICAgICAgICBtX2FydHdvcmtJbWFnZVByb21pc2UtPnJlc29sdmUoaW1hZ2VEYXRhLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKICAgICAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCShy
ZXZpc2lvbiAyNzY4MTkpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBwcml2YXRl
OgogICAgIHsKICAgICAgICAgaWYgKGl0ZW0uaXM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkdldElt
YWdlRGF0YT4oKSkgewogICAgICAgICAgICAgYXV0byYgZ2V0SW1hZ2VEYXRhSXRlbSA9IGl0ZW0u
Z2V0PFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpHZXRJbWFnZURhdGE+KCk7Ci0gICAgICAgICAgICBh
dXRvIGltYWdlRGF0YSA9IEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoZ2V0
SW1hZ2VEYXRhSXRlbS5vdXRwdXRGb3JtYXQoKSwgZ2V0SW1hZ2VEYXRhSXRlbS5zcmNSZWN0KCkp
OworICAgICAgICAgICAgYXV0byBpbWFnZURhdGEgPSBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6
Z2V0SW1hZ2VEYXRhKGdldEltYWdlRGF0YUl0ZW0ub3V0cHV0Rm9ybWF0KCksIGdldEltYWdlRGF0
YUl0ZW0uc3JjUmVjdCgpLCBnZXRJbWFnZURhdGFJdGVtLmNvbG9yU3BhY2UoKSk7CiAgICAgICAg
ICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQucG9wdWxhdGVHZXRJbWFnZURhdGFTaGFyZWRN
ZW1vcnkoaW1hZ2VEYXRhLmdldCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAJKHJldmlzaW9uIDI3NjgxOSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNDQsNiArMzE0NCw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+CiB2b2lkIEFyZ3VtZW50Q29kZXI8UmVmPFdlYkNvcmU6
OkltYWdlRGF0YT4+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVmPFdlYkNvcmU6
OkltYWdlRGF0YT4mIGltYWdlRGF0YSkKIHsKICAgICBlbmNvZGVyIDw8IGltYWdlRGF0YS0+c2l6
ZSgpOworICAgIGVuY29kZXIgPDwgaW1hZ2VEYXRhLT5nZXRJbWFnZURhdGFTZXR0aW5ncygpOwog
CiAgICAgYXV0byByYXdEYXRhID0gaW1hZ2VEYXRhLT5kYXRhKCk7CiAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDx1aW50NjRfdD4ocmF3RGF0YS0+Ynl0ZUxlbmd0aCgpKTsKQEAgLTMxNjIsNiAr
MzE2MywxMSBAQCBPcHRpb25hbDxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj4gQXJndW1lCiAgICAg
aWYgKCFpbWFnZURhdGFTaXplKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCisgICAg
T3B0aW9uYWw8SW1hZ2VEYXRhU2V0dGluZ3M+IGltYWdlRGF0YVNldHRpbmdzOworICAgIGRlY29k
ZXIgPj4gaW1hZ2VEYXRhU2V0dGluZ3M7CisgICAgaWYgKCFpbWFnZURhdGFTZXR0aW5ncykKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwogICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBkYXRh
TGVuZ3RoOwogICAgIGRlY29kZXIgPj4gZGF0YUxlbmd0aDsKICAgICBpZiAoIWRhdGFMZW5ndGgp
CkBAIC0zMTcxLDcgKzMxNzcsNyBAQCBPcHRpb25hbDxSZWY8V2ViQ29yZTo6SW1hZ2VEYXRhPj4g
QXJndW1lCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyYXdEYXRhLT5k
YXRhKCksIHJhd0RhdGEtPmxlbmd0aCgpLCAxKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoKmltYWdlRGF0YVNp
emUsIFdURk1vdmUocmF3RGF0YSkpOworICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpj
cmVhdGUoKmltYWdlRGF0YVNpemUsIFdURk1vdmUocmF3RGF0YSksIFdURk1vdmUoKmltYWdlRGF0
YVNldHRpbmdzKSk7CiAgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFw
QmFja2VuZC5jcHAJKHJldmlzaW9uIDI3NjgxOSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU4LDkgKzE1OCw5IEBAIFZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZl
clNoYXJlYWJsZUJpdG0KICAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRh
KG1fYml0bWFwLT5kYXRhKCkpOwogfQogCi1SZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlclNo
YXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK1JlZlB0cjxJbWFn
ZURhdGE+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZGVzdGluYXRpb25Db2xvclNwYWNlKSBj
b25zdAogewotICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRw
dXRGb3JtYXQsIHNyY1JlY3QsIG1fYml0bWFwLT5kYXRhKCkpOworICAgIHJldHVybiBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGRlc3RpbmF0
aW9uQ29sb3JTcGFjZSwgbV9iaXRtYXAtPmRhdGEoKSk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZmZXJT
aGFyZWFibGVCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEZvcm1hdCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNo
YXJlYWJsZUJpdG1hcEJhY2tlbmQuaAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tl
bmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgUmVmUHRy
PFdlYkNvcmU6OkltYWdlPiBjb3B5SW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSA9IFdl
YkNvcmU6OkNvcHlCYWNraW5nU3RvcmUsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiA9IFdl
YkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKLSAgICBSZWZQdHI8V2Vi
Q29yZTo6SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UpIGNvbnN0IG92ZXJyaWRlOwogICAg
IHZvaWQgcHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEZvcm1hdCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVm
ZmVyUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAkocmV2aXNpb24gMjc2ODE5KQorKysgU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCwxMiArMTk0LDEyIEBAIHByb3RlY3RlZDoKICAgICAg
ICAgcmV0dXJuIGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsKICAgICB9CiAKLSAgICBSZWZQdHI8V2Vi
Q29yZTo6SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QpIGNvbnN0
IG92ZXJyaWRlCisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKFdl
YkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBzcmNSZWN0LCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZGVzdGluYXRpb25Db2xv
clNwYWNlKSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IFdlYkNvcmU6OkltYWdlRGF0YTo6Y3JlYXRlKHNy
Y1JlY3Quc2l6ZSgpKTsKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBXZWJDb3JlOjpJbWFnZURh
dGE6OmNyZWF0ZShzcmNSZWN0LnNpemUoKSwgZGVzdGluYXRpb25Db2xvclNwYWNlKTsKICAgICAg
ICAgaWYgKCFpbWFnZURhdGEgfHwgIWltYWdlRGF0YS0+ZGF0YSgpKQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IGltYWdlRGF0YS0+ZGF0YSgp
LT5ieXRlTGVuZ3RoKCk7CkBAIC0yMTAsNyArMjEwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgYXV0byYgbXV0YWJsZVRoaXMgPSBjb25zdF9j
YXN0PFJlbW90ZUltYWdlQnVmZmVyUHJveHkmPigqdGhpcyk7Ci0gICAgICAgIG11dGFibGVUaGlz
Lm1fZHJhd2luZ0NvbnRleHQucmVjb3JkZXIoKS5nZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBz
cmNSZWN0KTsKKyAgICAgICAgbXV0YWJsZVRoaXMubV9kcmF3aW5nQ29udGV4dC5yZWNvcmRlcigp
LmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGRlc3RpbmF0aW9uQ29sb3JTcGFj
ZSk7CiAgICAgICAgIG11dGFibGVUaGlzLmZsdXNoRHJhd2luZ0NvbnRleHRBc3luYygpOwogCiAg
ICAgICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+d2FpdEZvckdldEltYWdl
RGF0YVRvQ29tcGxldGUodGltZW91dCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9j
b2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCShyZXZpc2lvbiAy
NzY4MTkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0lt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMCw3ICsxMjAsNyBAQCBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJTaGFy
ZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biwgY29uc3QgSW50UmVjdCYpIGNvbnN0CitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlclNo
YXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uLCBjb25zdCBJbnRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlKSBjb25zdAogewogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIHsgfTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFy
ZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQuaAkocmV2aXNpb24gMjc2ODE5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaAko
d29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHRvRGF0
YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFdl
YkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmVjdG9yPHVp
bnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4gZ2V0SW1hZ2VE
YXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPFdlYkNvcmU6Oklt
YWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgV2ViQ29yZTo6RGVzdGluYXRpb25D
b2xvclNwYWNlKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHB1dEltYWdlRGF0YShXZWJDb3Jl
OjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbWFn
ZURhdGEmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RG
b3JtYXQpIG92ZXJyaWRlOwogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzT3JpZ2luQXRV
cHBlckxlZnRDb3JuZXIgPSB0cnVlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>