<?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>218259</bug_id>
          
          <creation_ts>2020-10-27 13:50:19 -0700</creation_ts>
          <short_desc>[Concurrent display lists] Add alternate versions of existing display list items that only contain inline data</short_desc>
          <delta_ts>2020-10-28 12:00:24 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1702061</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-27 13:50:19 -0700</bug_when>
    <thetext>- StrokeInlinePath
- FillInlinePath
- SetStrokeThickness
- SetInlineFillColor
- SetInlineStrokeColor
- SetInlineFillGradient</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1702149</commentid>
    <comment_count>1</comment_count>
      <attachid>412477</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-27 16:53:10 -0700</bug_when>
    <thetext>Created attachment 412477
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1702150</commentid>
    <comment_count>2</comment_count>
      <attachid>412478</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-27 16:57:32 -0700</bug_when>
    <thetext>Created attachment 412478
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1702152</commentid>
    <comment_count>3</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-27 17:05:41 -0700</bug_when>
    <thetext>(whoops, looks like I missed a SPECIALIZE_TYPE_TRAITS_DISPLAYLIST_ITEM for SetInlineFillGradient in this patch)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1702169</commentid>
    <comment_count>4</comment_count>
      <attachid>412486</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-27 17:47:12 -0700</bug_when>
    <thetext>Created attachment 412486
Fix builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1702200</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-27 19:09:22 -0700</bug_when>
    <thetext>Committed r269092: &lt;https://trac.webkit.org/changeset/269092&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 412486.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1702202</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-27 19:10:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/70748246&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1702376</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-28 10:45:12 -0700</bug_when>
    <thetext>Since I don&apos;t recall seeing any references to what [Concurrent display lists] are, can you please explain what this feature is, and how you intend to go about implementing it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1702382</commentid>
    <comment_count>8</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-28 10:52:22 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #7)
&gt; Since I don&apos;t recall seeing any references to what [Concurrent display
&gt; lists] are, can you please explain what this feature is, and how you intend
&gt; to go about implementing it?

This &quot;feature&quot; is supporting concurrent generation of display list items in the web process and consumption of display list items in the GPU process.

Our overarching vision to achieve this is to make all of our display list items contain only PoD types, and store them directly in memory shared between the web and GPU processes.

Upon pushing items into shared memory in the web process, the web process will notify the GPU process, which will read items out of shared memory (and continue doing so until there are no more items left to be read).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1702417</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-10-28 11:36:02 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #8)
&gt; (In reply to Sam Weinig from comment #7)
&gt; &gt; Since I don&apos;t recall seeing any references to what [Concurrent display
&gt; &gt; lists] are, can you please explain what this feature is, and how you intend
&gt; &gt; to go about implementing it?
&gt; 
&gt; This &quot;feature&quot; is supporting concurrent generation of display list items in
&gt; the web process and consumption of display list items in the GPU process.
&gt; 
&gt; Our overarching vision to achieve this is to make all of our display list
&gt; items contain only PoD types, and store them directly in memory shared
&gt; between the web and GPU processes.
&gt; 
&gt; Upon pushing items into shared memory in the web process, the web process
&gt; will notify the GPU process, which will read items out of shared memory (and
&gt; continue doing so until there are no more items left to be read).

Sounds reasonable. What is the plan for things that can&apos;t be directly encoded, like IOSurfaces?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1702432</commentid>
    <comment_count>10</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-10-28 12:00:24 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #9)
&gt; (In reply to Wenson Hsieh from comment #8)
&gt; &gt; (In reply to Sam Weinig from comment #7)
&gt; &gt; &gt; Since I don&apos;t recall seeing any references to what [Concurrent display
&gt; &gt; &gt; lists] are, can you please explain what this feature is, and how you intend
&gt; &gt; &gt; to go about implementing it?
&gt; &gt; 
&gt; &gt; This &quot;feature&quot; is supporting concurrent generation of display list items in
&gt; &gt; the web process and consumption of display list items in the GPU process.
&gt; &gt; 
&gt; &gt; Our overarching vision to achieve this is to make all of our display list
&gt; &gt; items contain only PoD types, and store them directly in memory shared
&gt; &gt; between the web and GPU processes.
&gt; &gt; 
&gt; &gt; Upon pushing items into shared memory in the web process, the web process
&gt; &gt; will notify the GPU process, which will read items out of shared memory (and
&gt; &gt; continue doing so until there are no more items left to be read).
&gt; 
&gt; Sounds reasonable. What is the plan for things that can&apos;t be directly
&gt; encoded, like IOSurfaces?

I would think IOSurfaces would exist in the GPUP already, so an identifier (and possibly some additional metadata) should be sufficient.

More generally, our current thinking is to add a special display list item that represents mapping an identifier to a resource encoded directly in shared memory, and making display list items reference the resource via the identifier.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412477</attachid>
            <date>2020-10-27 16:53:10 -0700</date>
            <delta_ts>2020-10-27 16:54:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218259-20201027165309.patch</filename>
            <type>text/plain</type>
            <size>55731</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MDM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjQ5MzM1NTdmODRkMzBk
MmY3ZmI2NzQ4YjIyZjA1OWU2ZGFiYjQ5NS4uYWZjN2IyOTMwN2M5YTEyYTNjNWRhMDJkYTQzZTE4
M2M2ZjkzNzNkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAyMC0xMC0yNyAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3VycmVu
dCBkaXNwbGF5IGxpc3RzXSBBZGQgYWx0ZXJuYXRlIHZlcnNpb25zIG9mIGV4aXN0aW5nIGRpc3Bs
YXkgbGlzdCBpdGVtcyB0aGF0IG9ubHkgY29udGFpbiBpbmxpbmUgZGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MjU5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gcHJlcGFyYXRpb24gZm9yIHN1
cHBvcnRpbmcgY29uY3VycmVudCBnZW5lcmF0aW9uIGFuZCBjb25zdW1wdGlvbiBvZiBkaXNwbGF5
IGxpc3QgaXRlbXMgaW4gdGhlIEdQVSBwcm9jZXNzLAorICAgICAgICBhZGQgbmV3IHZhcmlhbnRz
IG9mIHNvbWUgZXhpc3RpbmcgZGlzcGxheSBsaXN0IGl0ZW1zIHRoYXQgY29udGFpbiBvbmx5ICJp
bmxpbmUgZGF0YSIgKGkuZS4gbm8gcG9pbnRlcnMpLgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBi
ZWhhdmlvcjsgc2VlIGJlbG93IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9QYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmlzRW1wdHkgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkUXVhZEN1cnZlVG8pOgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6YWRkQmV6aWVyQ3VydmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRo
OjpQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmg6CisKKyAgICAgICAg
QWRkIGEgaGVscGVyIG1ldGhvZCB0byBjb252ZXJ0IGBJbmxpbmVQYXRoRGF0YWAgdG8gYFBhdGhg
LgorCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjppbmxpbmVEYXRhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBhdGg6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpo
YXNJbmxpbmVEYXRhIGNvbnN0KToKKworICAgICAgICBSZW5hbWUgYGhhc0FueUlubGluZURhdGFg
IHRvIGp1c3QgYGhhc0lubGluZURhdGFgLCBhbmQgbWFrZSBpdCBwdWJsaWMuCisKKyAgICAgICAg
KFdlYkNvcmU6OlBhdGg6OnJlbGVhc2VQbGF0Zm9ybVBhdGhJZlBvc3NpYmxlIGNvbnN0KTogRGVs
ZXRlZC4KKworICAgICAgICBBZGRpdGlvbmFsbHksIHJlbW92ZSBgcmVsZWFzZVBsYXRmb3JtUGF0
aElmUG9zc2libGUoKWAgYWx0b2dldGhlci4gVGhpcyBtZXRob2Qgd2FzIHVzZWQgdG8gZW5zdXJl
IHRoYXQKKyAgICAgICAgYFN0cm9rZVBhdGhgIGFuZCBgRmlsbFBhdGhgIHdvdWxkbid0IGtlZXAg
dGhlaXIgYFBhdGhgJ3MgcGxhdGZvcm0gYENHUGF0aFJlZmBzIGFyb3VuZCBhZnRlciBhcHBseWlu
ZyB0aGUgaXRlbSBpbgorICAgICAgICB0aGUgR1BVIHByb2Nlc3MsIHdoaWNoIGxlYWRzIHRvIGFj
Y3VtdWxhdGluZyBhIHBvb2wgb2YgdW51c2VkIGBDR1BhdGhSZWZgcyBhZnRlciBwbGF5aW5nIGJh
Y2sgYSBkaXNwbGF5IGxpc3QKKyAgICAgICAgdGhhdCBjb250YWlucyBtYW55IGBQYXRoYCBvYmpl
Y3RzLiBIb3dldmVyLCBzaW5jZSBgU3Ryb2tlSW5saW5lUGF0aGAgYW5kIGBGaWxsSW5saW5lUGF0
aGAgbm93IGV4aXN0LCB0aGUgYFBhdGhgCisgICAgICAgIG9iamVjdCB3ZSBjcmVhdGUgd2hlbiBh
cHBseWluZyB0aG9zZSBpdGVtcyBpcyBhbHdheXMgZ29pbmcgdG8gYmUgdGVtcG9yYXJ5LCB3aGlj
aCBhbGxvd3MgdXMgdG8gYXZvaWQgdGhpcworICAgICAgICBwcm9ibGVtLgorCisgICAgICAgIChX
ZWJDb3JlOjpQYXRoOjpoYXNBbnlJbmxpbmVEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0
aDo6cGxhdGZvcm1QYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmlzTnVsbCBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OnNpemVJ
bkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3Jh
ZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpncmFkaWVudCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6YXBwbHkg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFk
aWVudDo6aXNJbmxpbmUpOgorCisgICAgICAgIEludHJvZHVjZSBhIG5ldyBTZXRJbmxpbmVGaWxs
R3JhZGllbnQgaXRlbSB0byByZXByZXNlbnQgc2V0dGluZyB0aGUgZmlsbCBncmFkaWVudCB0byBh
IGdyYWRpZW50IHdpdGggYXQgbW9zdCA0CisgICAgICAgIGNvbG9yIHN0b3BzLCB3aXRoIG9ubHkg
aW5saW5lIGNvbG9ycy4gVGhpcyBpbmxpbmUgZGF0YSBpcyBwdWxsZWQgb3V0IG9mIHRoZSBgR3Jh
ZGllbnRgIHVwb24gY29uc3RydWN0aW9uLCBhbmQKKyAgICAgICAgbGF0ZXIgdXNlZCB0byByZWNv
bnN0cnVjdCBhIGBHcmFkaWVudGAgZHVyaW5nIHBsYXliYWNrLgorCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0SW5saW5lRmlsbENvbG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6YXBwbHkgY29uc3QpOgorCisgICAgICAgIENoYW5n
ZSBgU2V0RmlsbENvbG9yYCB0byBgU2V0SW5saW5lRmlsbENvbG9yYCwgYW5kIG1ha2UgaXQgcGFz
cyBhcm91bmQgYW4gYFNSR0I8dWludDhfdD5gIGluc3RlYWQgb2YgYSBgQ29sb3JgLAorICAgICAg
ICBzaW5jZSB0aGUgbGF0dGVyIGNvdWxkIGNvbnRhaW4gYSBwb2ludGVyIHRvIGFuIGV4dGVuZGVk
IGNvbG9yLgorCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tl
Q29sb3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5l
U3Ryb2tlQ29sb3I6OmFwcGx5IGNvbnN0KToKKworICAgICAgICBTaW1pbGFyIHRvIHRoZSBhYm92
ZSwgYnV0IHdoZW4gc2V0dGluZyB0aGUgc3Ryb2tlIGNvbG9yIHRvIGFuIGlubGluZSAobm9uLWV4
dGVuZGVkKSBjb2xvci4KKworICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9r
ZVRoaWNrbmVzczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRT
dHJva2VUaGlja25lc3M6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsSW5saW5lUGF0aDo6RmlsbElubGluZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUlubGluZVBhdGg6OmFwcGx5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjpT
dHJva2VJbmxpbmVQYXRoKToKKworICAgICAgICBBZGQgYFN0cm9rZUlubGluZVBhdGhgIGFuZCBg
RmlsbElubGluZVBhdGhgLCB3aGljaCBjb250YWluIGBJbmxpbmVQYXRoRGF0YWAgaW5zdGVhZCBv
ZiBgUGF0aGAgb2JqZWN0cyBhbmQgb25seQorICAgICAgICBjb25zdHJ1Y3QgYHBhdGgoKWAgb2Jq
ZWN0cyB3aGVuIG5lZWRlZCAoaS5lLiB3aGVuIGFwcGx5aW5nIHRvIGEgYEdyYXBoaWNzQ29udGV4
dGApLgorCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0RmlsbENvbG9yOjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldEZpbGxDb2xv
cjo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldFN0cm9rZVN0YXRlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldFN0cm9rZVN0YXRlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGlu
ZUZpbGxHcmFkaWVudDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRJbmxpbmVGaWxsQ29sb3I6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3I6OlNldElubGluZUZpbGxDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xv
cjo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGlu
ZVN0cm9rZUNvbG9yOjpTZXRJbmxpbmVTdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmRlY29kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNzOjp0aGlja25l
c3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNr
bmVzczo6U2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRTdHJva2VUaGlja25lc3M6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNzOjpkZWNvZGUpOgorCisgICAgICAgIFB1bGwg
c3Ryb2tlIHRoaWNrbmVzcyBvdXQgaW50byBpdHMgb3duIGRpc3BsYXkgbGlzdCBpdGVtLgorCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OnBhdGggY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUlubGluZVBhdGg6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0
aDo6cGF0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5s
aW5lUGF0aDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
dHJva2VJbmxpbmVQYXRoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW06OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRGaWxsQ29sb3I6
OmNvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRGaWxsQ29sb3I6OlNldEZpbGxDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0RmlsbENvbG9yOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldEZpbGxDb2xvcjo6ZGVjb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VTdGF0ZTo6Y29sb3IgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVN0
YXRlOjpoYXNDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0U3Ryb2tlU3RhdGU6OnRoaWNrbmVzcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlU3RhdGU6Omhhc1RoaWNrbmVzcyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlU3Rh
dGU6OlNldFN0cm9rZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRTdHJva2VTdGF0ZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VTdGF0ZTo6ZGVjb2RlKTogRGVsZXRlZC4KKwor
ICAgICAgICBTcGxpdCBgU2V0U3Ryb2tlU3RhdGVgIG91dCBpbnRvIHNlcGFyYXRlIGl0ZW1zIHRy
YWNraW5nIHRoaWNrbmVzcyBhbmQgc3Ryb2tlIGNvbG9yLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OmNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyk6CisK
KyAgICAgICAgUmVmYWN0b3IgdGhpcyBjb2RlIHNvIHRoYXQgaXQgZW1pdHMgbXVsdGlwbGUgZGlz
cGxheSBsaXN0IGl0ZW1zIGlmIG11bHRpcGxlIGlubGluZSBzdGF0ZXMgY2hhbmdlLiBQcmV2aW91
c2x5LAorICAgICAgICB0aGlzIHdhcyBvbmx5IGRvbmUgZm9yIHNpbXVsdGFuZW91cyBzdHJva2Ug
Y29sb3IgYW5kIHN0cm9rZSB0aGlja25lc3MgY2hhbmdlcyAodmlhIHRoZSBgU2V0U3Ryb2tlU3Rh
dGVgIGl0ZW0pOworICAgICAgICB0aGlzIHdhcyBkb25lIHRvIGF2b2lkIGNyZWF0aW5nIG1vcmUg
ZGlzcGxheSBsaXN0IGl0ZW1zIHRoYW4gbmVlZGVkLiBIb3dldmVyLCBvbmNlIGFsbCBpbmxpbmUg
ZGlzcGxheSBsaXN0IGl0ZW1zCisgICAgICAgIGFyZSBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBz
aGFyZWQgbWVtb3J5LCB0aGVyZSB3aWxsIGJlIChhbG1vc3QpIHplcm8gb3ZlcmhlYWQgZm9yIHNw
bGl0dGluZyB0aGlzIGludG8KKyAgICAgICAgc2VwYXJhdGUgaXRlbXMuCisKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6d2lsbEFwcGVuZEl0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmNvbnRhaW5zT25seVN0cm9rZUNvbG9yT3JUaGlja25l
c3NDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmNvbnRh
aW5zT25seUZpbGxDb2xvckNoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Y3JlYXRlU3RhdGVDaGFuZ2VJdGVtKTogRGVsZXRlZC4KKworICAgICAgICBBZGRp
dGlvbmFsbHkgcmVmYWN0b3IgdGhpcyBtZXRob2Qgc28gdGhhdCBpdCBpcyBub3cgYSBwcml2YXRl
IG1ldGhvZCB0aGF0IGFwcGVuZHMgdG8gYG1fZGlzcGxheUxpc3RgLCBpbnN0ZWFkIG9mCisgICAg
ICAgIHJldHVybmluZyBhIGRpc3BsYXkgbGlzdCBpdGVtIHRvIGJlIGFwcGVuZGVkLiBUaGlzIHdp
bGwgYmVjb21lIGltcG9ydGFudCBpbiBhIGZ1dHVyZSBwYXRjaCwgd2hpY2ggd2lsbCByZXBsYWNl
CisgICAgICAgIHRoZSBleGlzdGluZyBgYXBwZW5kYCBtZXRob2Qgd2l0aCBhIHRlbXBsYXRlZCB2
ZXJzaW9uIHRoYXQgdGFrZXMgdGhlIGRpc3BsYXkgbGlzdCBpdGVtIHR5cGUgYXMgYSB0ZW1wbGF0
ZQorICAgICAgICBhcmd1bWVudC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisKIDIwMjAtMTAtMjcgIENocmlzIER1bWV6
ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBdWRpb0NvbnRleHQuc3VzcGVuZCgpIHNo
b3VsZCBub3QgcmVqZWN0IHByb21pc2Ugd2hlbiBhdWRpbyBzZXNzaW9uIGlzIGludGVycnVwdGVk
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9B
WElzb2xhdGVkT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0
ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCmluZGV4IGQyYTg4YmRiMTBlNGQyOTQ4NTgwZGVj
M2Y1YmI3MWJhNGYwYWQ3OWUuLjA3YmY1NWE5YmM3ZmNlMzA2NDljMWQ5MmU0MGJiYmY2YWFmNWQ0
MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCkBAIC0yOSwxMSArMjksMTMgQEAKICNp
bmNsdWRlICJBWElzb2xhdGVkT2JqZWN0LmgiCiAKICNpbmNsdWRlICJBWElzb2xhdGVkVHJlZS5o
IgorI2luY2x1ZGUgIlBhdGguaCIKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgPHBh
bC9zcGkvY29jb2EvQWNjZXNzaWJpbGl0eVN1cHBvcnRTb2Z0TGluay5oPgogI2VuZGlmCiAKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBBWElzb2xhdGVkT2JqZWN0OjpBWElzb2xhdGVkT2JqZWN0
KEFYQ29yZU9iamVjdCYgb2JqZWN0LCBBWElzb2xhdGVkVHJlZUlEIHRyZWVJRCwgQVhJRCBwYXJl
bnRJRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGgu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKaW5kZXggNTU0
MzE1NDFlMzY0NmNlOWY4MTcwNGM4NDAzZTc5MzkzZjQ0ZjhjYy4uY2VkNzEyYTIzZWJjOGYyYWEx
ZjI5YzMwZDFmMGNhODdlMTQ4ZGUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0aC5jcHAKQEAgLTIzMCw3ICsyMzAsNyBAQCBib29sIFBhdGg6OmlzRW1wdHkoKSBjb25z
dAogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQot
ICAgIGlmIChoYXNBbnlJbmxpbmVEYXRhKCkpCisgICAgaWYgKGhhc0lubGluZURhdGEoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKQEAgLTM0OCw3ICszNDgsNyBAQCB2b2lkIFBh
dGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludCwgY29uc3Qg
RmxvYXRQb2ludCYgZW5kUAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGlmIChp
c051bGwoKSB8fCBoYXNJbmxpbmVEYXRhPE1vdmVEYXRhPigpKSB7CiAgICAgICAgIFF1YWRDdXJ2
ZURhdGEgY3VydmU7Ci0gICAgICAgIGN1cnZlLnN0YXJ0UG9pbnQgPSBoYXNBbnlJbmxpbmVEYXRh
KCkgPyBXVEY6OmdldDxNb3ZlRGF0YT4obV9pbmxpbmVEYXRhKS5sb2NhdGlvbiA6IEZsb2F0UG9p
bnQoKTsKKyAgICAgICAgY3VydmUuc3RhcnRQb2ludCA9IGhhc0lubGluZURhdGEoKSA/IFdURjo6
Z2V0PE1vdmVEYXRhPihtX2lubGluZURhdGEpLmxvY2F0aW9uIDogRmxvYXRQb2ludCgpOwogICAg
ICAgICBjdXJ2ZS5jb250cm9sUG9pbnQgPSBjb250cm9sUG9pbnQ7CiAgICAgICAgIGN1cnZlLmVu
ZFBvaW50ID0gZW5kUG9pbnQ7CiAgICAgICAgIG1faW5saW5lRGF0YSA9IHsgV1RGTW92ZShjdXJ2
ZSkgfTsKQEAgLTM2NCw3ICszNjQsNyBAQCB2b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29u
c3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgYwogI2lmIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGlmIChpc051bGwoKSB8fCBoYXNJbmxpbmVEYXRh
PE1vdmVEYXRhPigpKSB7CiAgICAgICAgIEJlemllckN1cnZlRGF0YSBjdXJ2ZTsKLSAgICAgICAg
Y3VydmUuc3RhcnRQb2ludCA9IGhhc0FueUlubGluZURhdGEoKSA/IFdURjo6Z2V0PE1vdmVEYXRh
PihtX2lubGluZURhdGEpLmxvY2F0aW9uIDogRmxvYXRQb2ludCgpOworICAgICAgICBjdXJ2ZS5z
dGFydFBvaW50ID0gaGFzSW5saW5lRGF0YSgpID8gV1RGOjpnZXQ8TW92ZURhdGE+KG1faW5saW5l
RGF0YSkubG9jYXRpb24gOiBGbG9hdFBvaW50KCk7CiAgICAgICAgIGN1cnZlLmNvbnRyb2xQb2lu
dDEgPSBjb250cm9sUG9pbnQxOwogICAgICAgICBjdXJ2ZS5jb250cm9sUG9pbnQyID0gY29udHJv
bFBvaW50MjsKICAgICAgICAgY3VydmUuZW5kUG9pbnQgPSBlbmRQb2ludDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAppbmRleCBlNmRlYTRjNDkyMDQ3MTMxMzkwZDBjNjRk
NjhkODY0N2YzMzVlNTE2Li5lNWZlNzgyMTRmZjNiNTI4YzY5MDcxMjVjODBiMTMxZjA0MWVjY2Nh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCkBAIC0xMzMsNiArMTMz
LDE1IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBQYXRoJiBvcGVyYXRvcj0oY29uc3Qg
UGF0aCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIFBhdGgmIG9wZXJhdG9yPShQYXRoJiYpOwogCisj
aWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgc3RhdGljIFBhdGggZnJvbShjb25zdCBJ
bmxpbmVQYXRoRGF0YSYgaW5saW5lRGF0YSkKKyAgICB7CisgICAgICAgIFBhdGggcGF0aDsKKyAg
ICAgICAgcGF0aC5tX2lubGluZURhdGEgPSBpbmxpbmVEYXRhOworICAgICAgICByZXR1cm4gcGF0
aDsKKyAgICB9CisjZW5kaWYKKwogICAgIHN0YXRpYyBQYXRoIHBvbHlnb25QYXRoRnJvbVBvaW50
cyhjb25zdCBWZWN0b3I8RmxvYXRQb2ludD4mKTsKIAogICAgIGJvb2wgY29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6Ok5vblplcm8pIGNvbnN0OwpAQCAtMTk2
LDE3ICsyMDUsNiBAQCBwdWJsaWM6CiAgICAgUGxhdGZvcm1QYXRoUHRyIHBsYXRmb3JtUGF0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogI2VuZGlmCiAKLSAgICB2b2lkIHJlbGVhc2VQbGF0
Zm9ybVBhdGhJZlBvc3NpYmxlKCkgY29uc3QKLSAgICB7Ci0jaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCi0gICAgICAgIGlmICghaGFzQW55SW5saW5lRGF0YSgpIHx8ICFtX3BhdGgpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9wYXRoID0gbnVsbHB0cjsKLSAgICAgICAgbV9j
b3B5UGF0aEJlZm9yZU11dGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICB9Ci0KICNpZiAhVVNF
KENBSVJPKQogICAgIC8vIGVuc3VyZVBsYXRmb3JtUGF0aCgpIHdpbGwgYWxsb2NhdGUgYSBQbGF0
Zm9ybVBhdGggaWYgaXQgaGFzIG5vdCB5ZXQgYmVlbiBhbmQgd2lsbCBuZXZlciByZXR1cm4gbnVs
bC4KICAgICBXRUJDT1JFX0VYUE9SVCBQbGF0Zm9ybVBhdGhQdHIgZW5zdXJlUGxhdGZvcm1QYXRo
KCk7CkBAIC0yNDYsMTIgKzI0NCwxMyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BB
VEhfREFUQSkKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhVHlwZT4gY29uc3QgRGF0YVR5cGUm
IGlubGluZURhdGEoKSBjb25zdDsKKyAgICBJbmxpbmVQYXRoRGF0YSBpbmxpbmVEYXRhKCkgY29u
c3QgeyByZXR1cm4gbV9pbmxpbmVEYXRhOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0YVR5
cGU+IGJvb2wgaGFzSW5saW5lRGF0YSgpIGNvbnN0OworICAgIGJvb2wgaGFzSW5saW5lRGF0YSgp
IGNvbnN0OwogI2VuZGlmCiAKIHByaXZhdGU6CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEp
Ci0gICAgYm9vbCBoYXNBbnlJbmxpbmVEYXRhKCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRGF0YVR5cGU+IERhdGFUeXBlJiBpbmxpbmVEYXRhKCk7CiAgICAgT3B0aW9uYWw8RmxvYXRS
ZWN0PiBmYXN0Qm91bmRpbmdSZWN0RnJvbUlubGluZURhdGEoKSBjb25zdDsKICAgICBPcHRpb25h
bDxGbG9hdFJlY3Q+IGJvdW5kaW5nUmVjdEZyb21JbmxpbmVEYXRhKCkgY29uc3Q7CkBAIC0zMDgs
NyArMzA3LDcgQEAgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYs
IGNvbnN0IFBhdGgmKTsKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgUGF0aDo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEp
Ci0gICAgYm9vbCBoYXNJbmxpbmVEYXRhID0gaGFzQW55SW5saW5lRGF0YSgpOworICAgIGJvb2wg
aGFzSW5saW5lRGF0YSA9IHRoaXMtPmhhc0lubGluZURhdGEoKTsKICAgICBlbmNvZGVyIDw8IGhh
c0lubGluZURhdGE7CiAgICAgaWYgKGhhc0lubGluZURhdGEpIHsKICAgICAgICAgZW5jb2RlciA8
PCBtX2lubGluZURhdGE7CkBAIC00NDAsNyArNDM5LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0
YVR5cGU+IGlubGluZSBEYXRhVHlwZSYgUGF0aDo6aW5saW5lRGF0YSgpCiAgICAgcmV0dXJuIFdU
Rjo6Z2V0PERhdGFUeXBlPihtX2lubGluZURhdGEpOwogfQogCi1pbmxpbmUgYm9vbCBQYXRoOjpo
YXNBbnlJbmxpbmVEYXRhKCkgY29uc3QKK2lubGluZSBib29sIFBhdGg6Omhhc0lubGluZURhdGEo
KSBjb25zdAogewogICAgIHJldHVybiAhaGFzSW5saW5lRGF0YTxNb25vc3RhdGU+KCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAppbmRleCAy
Y2E3MzUwYjRhZDkzYjIyMzRhMWIzMzA1MGQxZDljOWY3Y2MwNGMyLi41YmE0OGY3MmQyOWM1MWYy
ZGU4MWVlNmU5MjZjNDg2MmY5MDgyZDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKQEAgLTEyNSw3ICsxMjUsNyBAQCBQYXRoOjp+UGF0aCgp
ID0gZGVmYXVsdDsKIAogUGxhdGZvcm1QYXRoUHRyIFBhdGg6OnBsYXRmb3JtUGF0aCgpIGNvbnN0
CiB7Ci0gICAgaWYgKCFtX3BhdGggJiYgaGFzQW55SW5saW5lRGF0YSgpKQorICAgIGlmICghbV9w
YXRoICYmIGhhc0lubGluZURhdGEoKSkKICAgICAgICAgY3JlYXRlQ0dQYXRoKCk7CiAgICAgcmV0
dXJuIG1fcGF0aC5nZXQoKTsKIH0KQEAgLTE0NCw3ICsxNDQsNyBAQCBQbGF0Zm9ybVBhdGhQdHIg
UGF0aDo6ZW5zdXJlUGxhdGZvcm1QYXRoKCkKIAogYm9vbCBQYXRoOjppc051bGwoKSBjb25zdAog
ewotICAgIHJldHVybiAhbV9wYXRoICYmICFoYXNBbnlJbmxpbmVEYXRhKCk7CisgICAgcmV0dXJu
ICFtX3BhdGggJiYgIWhhc0lubGluZURhdGEoKTsKIH0KIAogUGF0aDo6UGF0aChjb25zdCBQYXRo
JiBvdGhlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKaW5kZXggNTA2ZGFiYWIwYjhiNGI3MzE0NzZi
ZGY5ZjMwOTU2NzJiOTEyZWYxOS4uODgxMDhkMWY3ZTMxMjliYTUzMDIxMDFhNDQwNzM4NTU3NTA2
YTg3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKQEAgLTQ3LDggKzQ3LDEwIEBAIGVudW0gY2xh
c3MgSXRlbVR5cGUgOiB1aW50OF90IHsKICAgICBTY2FsZSwKICAgICBDb25jYXRlbmF0ZUNUTSwK
ICAgICBTZXRDVE0sCi0gICAgU2V0RmlsbENvbG9yLAotICAgIFNldFN0cm9rZVN0YXRlLAorICAg
IFNldElubGluZUZpbGxHcmFkaWVudCwKKyAgICBTZXRJbmxpbmVGaWxsQ29sb3IsCisgICAgU2V0
SW5saW5lU3Ryb2tlQ29sb3IsCisgICAgU2V0U3Ryb2tlVGhpY2tuZXNzLAogICAgIFNldFN0YXRl
LAogICAgIFNldExpbmVDYXAsCiAgICAgU2V0TGluZURhc2gsCkBAIC04MCwxMSArODIsMTcgQEAg
ZW51bSBjbGFzcyBJdGVtVHlwZSA6IHVpbnQ4X3QgewogICAgIEZpbGxDb21wb3NpdGVkUmVjdCwK
ICAgICBGaWxsUm91bmRlZFJlY3QsCiAgICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCisjaWYg
RU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgRmlsbElubGluZVBhdGgsCisjZW5kaWYKICAg
ICBGaWxsUGF0aCwKICAgICBGaWxsRWxsaXBzZSwKICAgICBQdXRJbWFnZURhdGEsCiAgICAgUGFp
bnRGcmFtZUZvck1lZGlhLAogICAgIFN0cm9rZVJlY3QsCisjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCisgICAgU3Ryb2tlSW5saW5lUGF0aCwKKyNlbmRpZgogICAgIFN0cm9rZVBhdGgsCiAg
ICAgU3Ryb2tlRWxsaXBzZSwKICAgICBDbGVhclJlY3QsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtcy5jcHAKaW5kZXggOGQ4YjI4MTkzODc1YzMxNjZmODFlZDA4ZTNkOTI5OTYxZjdiODcx
Ni4uNmRhMWQ5NTEzNWJmMDFmYmUzYWUwM2YzODAyNDQyOTA3MWYyZWI5NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtNzYsMTAgKzc2LDE0IEBAIHNpemVfdCBJdGVt
OjpzaXplSW5CeXRlcyhjb25zdCBJdGVtJiBpdGVtKQogICAgICAgICByZXR1cm4gc2l6ZW9mKGRv
d25jYXN0PFNldENUTT4oaXRlbSkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RN
OgogICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENvbmNhdGVuYXRlQ1RNPihpdGVtKSk7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0RmlsbENvbG9yOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PFNldEZpbGxDb2xvcj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0
cm9rZVN0YXRlOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldFN0cm9rZVN0YXRl
PihpdGVtKSk7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAg
ICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldElubGluZUZpbGxHcmFkaWVudD4oaXRlbSkp
OworICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKKyAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxTZXRJbmxpbmVGaWxsQ29sb3I+KGl0ZW0pKTsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oaXRlbSkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNl
dFN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRTdHJv
a2VUaGlja25lc3M+KGl0ZW0pKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAg
ICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRTdGF0ZT4oaXRlbSkpOwogICAgIGNhc2UgSXRl
bVR5cGU6OlNldExpbmVDYXA6CkBAIC0xNDIsNiArMTQ2LDEwIEBAIHNpemVfdCBJdGVtOjpzaXpl
SW5CeXRlcyhjb25zdCBJdGVtJiBpdGVtKQogICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0
PEZpbGxSb3VuZGVkUmVjdD4oaXRlbSkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlOgogICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlPihpdGVtKSk7CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93
bmNhc3Q8RmlsbElubGluZVBhdGg+KGl0ZW0pKTsKKyNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6
OkZpbGxQYXRoOgogICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxQYXRoPihpdGVt
KSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CkBAIC0xNTIsNiArMTYwLDEwIEBA
IHNpemVfdCBJdGVtOjpzaXplSW5CeXRlcyhjb25zdCBJdGVtJiBpdGVtKQogICAgICAgICByZXR1
cm4gc2l6ZW9mKGRvd25jYXN0PFBhaW50RnJhbWVGb3JNZWRpYT4oaXRlbSkpOwogICAgIGNhc2Ug
SXRlbVR5cGU6OlN0cm9rZVJlY3Q6CiAgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ry
b2tlUmVjdD4oaXRlbSkpOworI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2Ug
SXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNh
c3Q8U3Ryb2tlSW5saW5lUGF0aD4oaXRlbSkpOworI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6
U3Ryb2tlUGF0aDoKICAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTdHJva2VQYXRoPihp
dGVtKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKQEAgLTMyMCw0NiArMzMy
LDEyNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgQ29uY2F0ZW5hdGVDVE0mIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1SZWY8U2V0Rmls
bENvbG9yPiBTZXRGaWxsQ29sb3I6OmNyZWF0ZShDb2xvciBjb2xvcikKK1NldElubGluZUZpbGxH
cmFkaWVudDo6U2V0SW5saW5lRmlsbEdyYWRpZW50KGNvbnN0IEdyYWRpZW50JiBncmFkaWVudCkK
KyAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudCkKKyAgICAsIG1fZGF0
YShncmFkaWVudC5kYXRhKCkpCisgICAgLCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbihn
cmFkaWVudC5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpCisgICAgLCBtX3NwcmVhZE1ldGhvZChn
cmFkaWVudC5zcHJlYWRNZXRob2QoKSkKKyAgICAsIG1fY29sb3JTdG9wQ291bnQoc3RhdGljX2Nh
c3Q8dWludDhfdD4oZ3JhZGllbnQuc3RvcHMoKS5zaXplKCkpKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKG1fY29sb3JTdG9wQ291bnQgPD0gbWF4Q29sb3JTdG9wQ291bnQpOworICAgIGZvciAodWlu
dDhfdCBpID0gMDsgaSA8IG1fY29sb3JTdG9wQ291bnQ7ICsraSkgeworICAgICAgICBtX29mZnNl
dHNbaV0gPSBncmFkaWVudC5zdG9wcygpW2ldLm9mZnNldDsKKyAgICAgICAgbV9jb2xvcnNbaV0g
PSBncmFkaWVudC5zdG9wcygpW2ldLmNvbG9yLmFzSW5saW5lKCk7CisgICAgfQorfQorCitSZWY8
R3JhZGllbnQ+IFNldElubGluZUZpbGxHcmFkaWVudDo6Z3JhZGllbnQoKSBjb25zdAoreworICAg
IGF1dG8gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpEYXRhKG1fZGF0YSkp
OworICAgIGdyYWRpZW50LT5zZXRTcHJlYWRNZXRob2QobV9zcHJlYWRNZXRob2QpOworICAgIGdy
YWRpZW50LT5zZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9y
bWF0aW9uKTsKKyAgICBmb3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCBtX2NvbG9yU3RvcENvdW50OyAr
K2kpCisgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3AoeyBtX29mZnNldHNbaV0sIENvbG9y
KG1fY29sb3JzW2ldKSB9KTsKKyAgICByZXR1cm4gZ3JhZGllbnQ7Cit9CisKK1JlZjxTZXRJbmxp
bmVGaWxsR3JhZGllbnQ+IFNldElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRlKGNvbnN0IEdyYWRp
ZW50JiBncmFkaWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmxpbmVGaWxs
R3JhZGllbnQoZ3JhZGllbnQpKTsKK30KKworU2V0SW5saW5lRmlsbEdyYWRpZW50OjpTZXRJbmxp
bmVGaWxsR3JhZGllbnQoZmxvYXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF0sIFNSR0JBPHVp
bnQ4X3Q+IGNvbG9yc1ttYXhDb2xvclN0b3BDb3VudF0sIGNvbnN0IEdyYWRpZW50OjpEYXRhJiBk
YXRhLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiwg
R3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kLCB1aW50OF90IGNvbG9yU3RvcENvdW50
KQorICAgIDogSXRlbShJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50KQorICAgICwgbV9k
YXRhKGRhdGEpCisgICAgLCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbihncmFkaWVudFNw
YWNlVHJhbnNmb3JtYXRpb24pCisgICAgLCBtX3NwcmVhZE1ldGhvZChzcHJlYWRNZXRob2QpCisg
ICAgLCBtX2NvbG9yU3RvcENvdW50KGNvbG9yU3RvcENvdW50KQoreworICAgIFJFTEVBU0VfQVNT
RVJUKG1fY29sb3JTdG9wQ291bnQgPD0gbWF4Q29sb3JTdG9wQ291bnQpOworICAgIGZvciAodWlu
dDhfdCBpID0gMDsgaSA8IG1fY29sb3JTdG9wQ291bnQ7ICsraSkgeworICAgICAgICBtX29mZnNl
dHNbaV0gPSBvZmZzZXRzW2ldOworICAgICAgICBtX2NvbG9yc1tpXSA9IGNvbG9yc1tpXTsKKyAg
ICB9Cit9CisKK1NldElubGluZUZpbGxHcmFkaWVudDo6flNldElubGluZUZpbGxHcmFkaWVudCgp
ID0gZGVmYXVsdDsKKwordm9pZCBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmFwcGx5KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAobV9jb2xvclN0b3BDb3VudCA8PSBt
YXhDb2xvclN0b3BDb3VudCkKKyAgICAgICAgY29udGV4dC5zZXRGaWxsR3JhZGllbnQoZ3JhZGll
bnQoKSk7Cit9CisKK2Jvb2wgU2V0SW5saW5lRmlsbEdyYWRpZW50Ojppc0lubGluZShjb25zdCBH
cmFkaWVudCYgZ3JhZGllbnQpCit7CisgICAgaWYgKGdyYWRpZW50LnN0b3BzKCkuc2l6ZSgpID4g
U2V0SW5saW5lRmlsbEdyYWRpZW50OjptYXhDb2xvclN0b3BDb3VudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgZm9yIChhdXRvJiBjb2xvclN0b3AgOiBncmFkaWVudC5zdG9wcygpKSB7
CisgICAgICAgIGlmICghY29sb3JTdG9wLmNvbG9yLmlzSW5saW5lKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRJbmxpbmVGaWxsR3Jh
ZGllbnQmKQoreworICAgIC8vIEZJWE1FOiBEdW1wIGdyYWRpZW50IGRhdGEuCisgICAgcmV0dXJu
IHRzOworfQorCitSZWY8U2V0SW5saW5lRmlsbENvbG9yPiBTZXRJbmxpbmVGaWxsQ29sb3I6OmNy
ZWF0ZShTUkdCQTx1aW50OF90PiBjb2xvckRhdGEpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2V0RmlsbENvbG9yKGNvbG9yKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0SW5s
aW5lRmlsbENvbG9yKGNvbG9yRGF0YSkpOwogfQogCi1TZXRGaWxsQ29sb3I6On5TZXRGaWxsQ29s
b3IoKSA9IGRlZmF1bHQ7CitTZXRJbmxpbmVGaWxsQ29sb3I6On5TZXRJbmxpbmVGaWxsQ29sb3Io
KSA9IGRlZmF1bHQ7CiAKLXZvaWQgU2V0RmlsbENvbG9yOjphcHBseShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0Cit2b2lkIFNldElubGluZUZpbGxDb2xvcjo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1fY29s
b3IpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGNvbG9yKCkpOwogfQogCi1zdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0RmlsbENvbG9yJiBz
dGF0ZSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBTZXRJbmxpbmVGaWxsQ29sb3ImIHN0YXRlKQogewogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29s
b3IiLCBzdGF0ZS5jb2xvcigpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLVJlZjxTZXRTdHJva2VT
dGF0ZT4gU2V0U3Ryb2tlU3RhdGU6OmNyZWF0ZShPcHRpb25hbDxDb2xvcj4mJiBjb2xvciwgT3B0
aW9uYWw8ZmxvYXQ+JiYgdGhpY2tuZXNzKQorUmVmPFNldElubGluZVN0cm9rZUNvbG9yPiBTZXRJ
bmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yRGF0YSkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmxpbmVTdHJva2VDb2xvcihjb2xvckRhdGEpKTsK
K30KKworU2V0SW5saW5lU3Ryb2tlQ29sb3I6On5TZXRJbmxpbmVTdHJva2VDb2xvcigpID0gZGVm
YXVsdDsKKwordm9pZCBTZXRJbmxpbmVTdHJva2VDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldFN0cm9rZVN0
YXRlKFdURk1vdmUoY29sb3IpLCBXVEZNb3ZlKHRoaWNrbmVzcykpKTsKKyAgICBjb250ZXh0LnNl
dFN0cm9rZUNvbG9yKGNvbG9yKCkpOwogfQogCi1TZXRTdHJva2VTdGF0ZTo6flNldFN0cm9rZVN0
YXRlKCkgPSBkZWZhdWx0Oworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFNldElubGluZVN0cm9rZUNvbG9yJiBzdGF0ZSkKK3sKKyAgICB0cy5kdW1w
UHJvcGVydHkoImNvbG9yIiwgc3RhdGUuY29sb3IoKSk7CisgICAgcmV0dXJuIHRzOworfQogCi12
b2lkIFNldFN0cm9rZVN0YXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CitSZWY8U2V0U3Ryb2tlVGhpY2tuZXNzPiBTZXRTdHJva2VUaGlja25lc3M6OmNyZWF0ZShmbG9h
dCB0aGlja25lc3MpCiB7Ci0gICAgaWYgKG1faGFzQ29sb3IpCi0gICAgICAgIGNvbnRleHQuc2V0
U3Ryb2tlQ29sb3IobV9jb2xvcik7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0U3Ryb2tl
VGhpY2tuZXNzKHRoaWNrbmVzcykpOworfQogCi0gICAgaWYgKG1faGFzVGhpY2tuZXNzKQotICAg
ICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhtX3RoaWNrbmVzcyk7CitTZXRTdHJva2VU
aGlja25lc3M6On5TZXRTdHJva2VUaGlja25lc3MoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgU2V0U3Ry
b2tlVGhpY2tuZXNzOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7Cisg
ICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MobV90aGlja25lc3MpOwogfQogCi1zdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3Ryb2tlU3Rh
dGUmIHN0YXRlKQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IFNldFN0cm9rZVRoaWNrbmVzcyYgc3RhdGUpCiB7Ci0gICAgaWYgKHN0YXRlLmhhc0Nv
bG9yKCkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBzdGF0ZS5jb2xvcigpKTsK
LSAgICBpZiAoc3RhdGUuaGFzVGhpY2tuZXNzKCkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
dGhpY2tuZXNzIiwgc3RhdGUudGhpY2tuZXNzKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgidGhp
Y2tuZXNzIiwgc3RhdGUudGhpY2tuZXNzKCkpOwogICAgIHJldHVybiB0czsKIH0KIApAQCAtMTE2
NSw2ICsxMjU4LDMwIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSYgaXRlCiAgICAgcmV0dXJuIHRzOwog
fQogCisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisKK0ZpbGxJbmxpbmVQYXRoOjpGaWxs
SW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERhdGEpCisgICAgOiBEcmF3aW5n
SXRlbShJdGVtVHlwZTo6RmlsbElubGluZVBhdGgpCisgICAgLCBtX3BhdGhEYXRhKHBhdGhEYXRh
KQoreworfQorCitGaWxsSW5saW5lUGF0aDo6fkZpbGxJbmxpbmVQYXRoKCkgPSBkZWZhdWx0Owor
Cit2b2lkIEZpbGxJbmxpbmVQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0Cit7CisgICAgY29udGV4dC5maWxsUGF0aChwYXRoKCkpOworfQorCitzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbElubGluZVBhdGgmIGl0
ZW0pCit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsK
KyAgICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7CisgICAgcmV0dXJuIHRz
OworfQorCisjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisKIEZpbGxQYXRoOjpG
aWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZp
bGxQYXRoKQogICAgICwgbV9wYXRoKHBhdGgpCkBAIC0xMTc2LDcgKzEyOTMsNiBAQCBGaWxsUGF0
aDo6fkZpbGxQYXRoKCkgPSBkZWZhdWx0Owogdm9pZCBGaWxsUGF0aDo6YXBwbHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbFBhdGgobV9wYXRoKTsK
LSAgICBtX3BhdGgucmVsZWFzZVBsYXRmb3JtUGF0aElmUG9zc2libGUoKTsKIH0KIAogc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxQYXRoJiBp
dGVtKQpAQCAtMTMyNiw3ICsxNDQyLDYgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBTdHJva2VQYXRo
Ojpsb2NhbEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnMKIHZvaWQg
U3Ryb2tlUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAg
IGNvbnRleHQuc3Ryb2tlUGF0aChtX3BhdGgpOwotICAgIG1fcGF0aC5yZWxlYXNlUGxhdGZvcm1Q
YXRoSWZQb3NzaWJsZSgpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlUGF0aCYgaXRlbSkKQEAgLTEzNjUsNiArMTQ4MCw0MCBA
QCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ry
b2tlRWxsaXBzZSYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKKyNpZiBFTkFCTEUoSU5MSU5F
X1BBVEhfREFUQSkKKworT3B0aW9uYWw8RmxvYXRSZWN0PiBTdHJva2VJbmxpbmVQYXRoOjpsb2Nh
bEJvdW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgLy8g
RklYTUU6IE5lZWQgdG8gdGFrZSBzdHJva2UgdGhpY2tuZXNzIGludG8gYWNjb3VudCBjb3JyZWN0
bHksIHZpYSBDR1BhdGhCeVN0cm9raW5nUGF0aCgpLgorICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVz
cyA9IGNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCk7CisKKyAgICBGbG9hdFJlY3QgYm91bmRzID0g
cGF0aCgpLmZhc3RCb3VuZGluZ1JlY3QoKTsKKyAgICBib3VuZHMuZXhwYW5kKHN0cm9rZVRoaWNr
bmVzcywgc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICByZXR1cm4gYm91bmRzOworfQorCit2b2lkIFN0
cm9rZUlubGluZVBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sK
KyAgICBjb250ZXh0LnN0cm9rZVBhdGgocGF0aCgpKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZUlubGluZVBhdGgmIGl0ZW0p
Cit7CisgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAg
ICB0cy5kdW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7CisgICAgcmV0dXJuIHRzOwor
fQorCitTdHJva2VJbmxpbmVQYXRoOjpTdHJva2VJbmxpbmVQYXRoKGNvbnN0IElubGluZVBhdGhE
YXRhJiBwYXRoRGF0YSkKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQ
YXRoKQorICAgICwgbV9wYXRoRGF0YShwYXRoRGF0YSkKK3sKK30KKworU3Ryb2tlSW5saW5lUGF0
aDo6flN0cm9rZUlubGluZVBhdGgoKSA9IGRlZmF1bHQ7CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKKwogU3Ryb2tlUGF0aDo6U3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRo
KQogICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZVBhdGgpCiAgICAgLCBtX3BhdGgo
cGF0aCkKQEAgLTE0ODAsOCArMTYyOSwxMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSXRlbVR5cGUmIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlw
ZTo6U2NhbGU6IHRzIDw8ICJzY2FsZSI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldENU
TTogdHMgPDwgInNldC1jdG0iOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0
ZUNUTTogdHMgPDwgImNvbmNhdGVudGF0ZS1jdG0iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRGaWxsQ29sb3I6IHRzIDw8ICJzZXQtZmlsbC1jb2xvciI7IGJyZWFrOwotICAgIGNhc2Ug
SXRlbVR5cGU6OlNldFN0cm9rZVN0YXRlOiB0cyA8PCAic2V0LXN0cm9rZS1zdGF0ZSI7IGJyZWFr
OworICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDogdHMgPDwgInNldC1p
bmxpbmUtZmlsbC1ncmFkaWVudCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGlu
ZUZpbGxDb2xvcjogdHMgPDwgInNldC1pbmxpbmUtZmlsbC1jb2xvciI7IGJyZWFrOworICAgIGNh
c2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOiB0cyA8PCAic2V0LWlubGluZS1zdHJv
a2UtY29sb3IiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6
IHRzIDw8ICJzZXQtc3Ryb2tlLXRoaWNrbmVzcyI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6
OlNldFN0YXRlOiB0cyA8PCAic2V0LXN0YXRlIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6
U2V0TGluZUNhcDogdHMgPDwgInNldC1saW5lLWNhcCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5
cGU6OlNldExpbmVEYXNoOiB0cyA8PCAic2V0LWxpbmUtZGFzaCI7IGJyZWFrOwpAQCAtMTUxMiwx
MSArMTY2MywxNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgSXRlbVR5cGUmIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0
ZWRSZWN0OiB0cyA8PCAiZmlsbC1jb21wb3NpdGVkLXJlY3QiOyBicmVhazsKICAgICBjYXNlIEl0
ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3Q6IHRzIDw8ICJmaWxsLXJvdW5kZWQtcmVjdCI7IGJyZWFr
OwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOiB0cyA8PCAiZmls
bC1yZWN0LXdpdGgtcm91bmRlZC1ob2xlIjsgYnJlYWs7CisjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6IHRzIDw8ICJmaWxsLWlu
bGluZS1wYXRoIjsgYnJlYWs7CisjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDog
dHMgPDwgImZpbGwtcGF0aCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNl
OiB0cyA8PCAiZmlsbC1lbGxpcHNlIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1h
Z2VEYXRhOiB0cyA8PCAicHV0LWltYWdlLWRhdGEiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBl
OjpQYWludEZyYW1lRm9yTWVkaWE6IHRzIDw8ICJwYWludC1mcmFtZS1mb3ItbWVkaWEiOyBicmVh
azsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OiB0cyA8PCAic3Ryb2tlLXJlY3QiOyBi
cmVhazsKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
dHJva2VJbmxpbmVQYXRoOiB0cyA8PCAic3Ryb2tlLWlubGluZS1wYXRoIjsgYnJlYWs7CisjZW5k
aWYKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOiB0cyA8PCAic3Ryb2tlLXBhdGgiOyBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOiB0cyA8PCAic3Ryb2tlLWVs
bGlwc2UiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6IHRzIDw8ICJjbGVh
ci1yZWN0IjsgYnJlYWs7CkBAIC0xNTU0LDExICsxNzExLDE3IEBAIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW0mIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlw
ZTo6Q29uY2F0ZW5hdGVDVE06CiAgICAgICAgIHRzIDw8IGRvd25jYXN0PENvbmNhdGVuYXRlQ1RN
PihpdGVtKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0RmlsbENvbG9y
OgotICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRGaWxsQ29sb3I+KGl0ZW0pOworICAgIGNhc2Ug
SXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8
U2V0SW5saW5lRmlsbEdyYWRpZW50PihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRJ
bmxpbmVGaWxsQ29sb3I+KGl0ZW0pOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRTdHJva2VTdGF0ZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0U3Ryb2tlU3RhdGU+
KGl0ZW0pOworICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgorICAgICAg
ICB0cyA8PCBkb3duY2FzdDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oaXRlbSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAgdHMg
PDwgZG93bmNhc3Q8U2V0U3Ryb2tlVGhpY2tuZXNzPihpdGVtKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHRzIDw8IGRvd25jYXN0PFNldFN0
YXRlPihpdGVtKTsKQEAgLTE2NTAsNiArMTgxMywxMSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtJiBpdGVtKQogICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlOgogICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZT4oaXRlbSk7CiAgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgorICAgICAgICB0
cyA8PCBkb3duY2FzdDxGaWxsSW5saW5lUGF0aD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworI2Vu
ZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CiAgICAgICAgIHRzIDw8IGRvd25jYXN0
PEZpbGxQYXRoPihpdGVtKTsKICAgICAgICAgYnJlYWs7CkBAIC0xNjY1LDYgKzE4MzMsMTEgQEAg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSXRlbSYgaXRlbSkK
ICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgogICAgICAgICB0cyA8PCBkb3duY2FzdDxT
dHJva2VSZWN0PihpdGVtKTsKICAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyAgICAgICAgdHMg
PDwgZG93bmNhc3Q8U3Ryb2tlSW5saW5lUGF0aD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworI2Vu
ZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKICAgICAgICAgdHMgPDwgZG93bmNh
c3Q8U3Ryb2tlUGF0aD4oaXRlbSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmgKaW5kZXggZDRjYTk4ZTY0ODQ1MWIyNmNiZjY0OTgzNWIxZGEyZjNjMjNiNGFm
Zi4uNzkwZmVkMGQ5NmQ1NGQxNDU3YTNmMWQ3N2RkZTc1ZWM1MTc3MWI4MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oCkBAIC0zMzYsMTE5ICszMzYsMjE5IEBAIE9wdGlvbmFsPFJl
ZjxDb25jYXRlbmF0ZUNUTT4+IENvbmNhdGVuYXRlQ1RNOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKICAgICByZXR1cm4gQ29uY2F0ZW5hdGVDVE06OmNyZWF0ZSgqdHJhbnNmb3JtKTsKIH0KIAot
Y2xhc3MgU2V0RmlsbENvbG9yIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0SW5saW5lRmlsbEdy
YWRpZW50IDogcHVibGljIEl0ZW0gewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZWY8U2V0RmlsbENvbG9yPiBjcmVhdGUoQ29sb3IpOworICAgIHN0YXRpYyBjb25zdGV4cHIg
dWludDhfdCBtYXhDb2xvclN0b3BDb3VudCA9IDQ7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5TZXRGaWxsQ29sb3IoKTsKKyAgICBzdGF0aWMgUmVmPFNldElubGluZUZpbGxHcmFkaWVu
dD4gY3JlYXRlKGNvbnN0IEdyYWRpZW50Jik7CisgICAgc3RhdGljIGJvb2wgaXNJbmxpbmUoY29u
c3QgR3JhZGllbnQmKTsKIAotICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xv
cjsgfQorICAgIHZpcnR1YWwgflNldElubGluZUZpbGxHcmFkaWVudCgpOworCisgICAgUmVmPEdy
YWRpZW50PiBncmFkaWVudCgpIGNvbnN0OwogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0RmlsbENvbG9yPj4gZGVjb2RlKERlY29kZXImKTsKKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldElubGluZUZp
bGxHcmFkaWVudD4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgU2V0RmlsbENv
bG9yKENvbG9yIGNvbG9yKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldEZpbGxDb2xvcikK
LSAgICAgICAgLCBtX2NvbG9yKGNvbG9yKQorICAgIHN0YXRpYyBSZWY8U2V0SW5saW5lRmlsbEdy
YWRpZW50PiBjcmVhdGUoZmxvYXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF0sIFNSR0JBPHVp
bnQ4X3Q+IGNvbG9yc1ttYXhDb2xvclN0b3BDb3VudF0sCisgICAgICAgIGNvbnN0IEdyYWRpZW50
OjpEYXRhJiBkYXRhLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zv
cm1hdGlvbiwgR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kLCB1aW50OF90IGNvbG9y
U3RvcENvdW50KQogICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0SW5saW5l
RmlsbEdyYWRpZW50KG9mZnNldHMsIGNvbG9ycywgZGF0YSwgZ3JhZGllbnRTcGFjZVRyYW5zZm9y
bWF0aW9uLCBzcHJlYWRNZXRob2QsIGNvbG9yU3RvcENvdW50KSk7CiAgICAgfQogCisgICAgV0VC
Q09SRV9FWFBPUlQgU2V0SW5saW5lRmlsbEdyYWRpZW50KGZsb2F0IG9mZnNldHNbbWF4Q29sb3JT
dG9wQ291bnRdLCBTUkdCQTx1aW50OF90PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdLCBjb25z
dCBHcmFkaWVudDo6RGF0YSYsCisgICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGll
bnRTcGFjZVRyYW5zZm9ybWF0aW9uLCBHcmFkaWVudFNwcmVhZE1ldGhvZCwgdWludDhfdCBjb2xv
clN0b3BDb3VudCk7CisKKyAgICBTZXRJbmxpbmVGaWxsR3JhZGllbnQoY29uc3QgR3JhZGllbnQm
KTsKKwogICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBDb2xvciBtX2NvbG9yOworICAgIGZsb2F0IG1fb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3Vu
dF07CisgICAgU1JHQkE8dWludDhfdD4gbV9jb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdOworICAg
IEdyYWRpZW50OjpEYXRhIG1fZGF0YTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9ncmFkaWVudFNw
YWNlVHJhbnNmb3JtYXRpb247CisgICAgR3JhZGllbnRTcHJlYWRNZXRob2QgbV9zcHJlYWRNZXRo
b2QgeyBHcmFkaWVudFNwcmVhZE1ldGhvZDo6UGFkIH07CisgICAgdWludDhfdCBtX2NvbG9yU3Rv
cENvdW50IHsgMCB9OwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0Rmls
bENvbG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3ZvaWQgU2V0SW5saW5lRmls
bEdyYWRpZW50OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVy
IDw8IG1fY29sb3I7CisgICAgZW5jb2RlciA8PCBtX2NvbG9yU3RvcENvdW50OworICAgIGZvciAo
dWludDhfdCBpID0gMDsgaSA8IG1fY29sb3JTdG9wQ291bnQ7ICsraSkgeworICAgICAgICBlbmNv
ZGVyIDw8IG1fb2Zmc2V0c1tpXTsKKyAgICAgICAgZW5jb2RlciA8PCBQYWNrZWRDb2xvcjo6UkdC
QSB7IG1fY29sb3JzW2ldIH0udmFsdWU7CisgICAgfQorICAgIGVuY29kZXIgPDwgbV9kYXRhOwor
ICAgIGVuY29kZXIgPDwgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CisgICAgZW5jb2Rl
ciA8PCBtX3NwcmVhZE1ldGhvZDsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlv
bmFsPFJlZjxTZXRGaWxsQ29sb3I+PiBTZXRGaWxsQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQorT3B0aW9uYWw8UmVmPFNldElubGluZUZpbGxHcmFkaWVudD4+IFNldElubGluZUZpbGxH
cmFkaWVudDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgT3B0aW9uYWw8Q29sb3I+
IGNvbG9yOwotICAgIGRlY29kZXIgPj4gY29sb3I7Ci0gICAgaWYgKCFjb2xvcikKKyAgICBPcHRp
b25hbDx1aW50OF90PiBjb2xvclN0b3BDb3VudDsKKyAgICBkZWNvZGVyID4+IGNvbG9yU3RvcENv
dW50OworICAgIGlmICghY29sb3JTdG9wQ291bnQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICBpZiAoKmNvbG9yU3RvcENvdW50ID4gbWF4Q29sb3JTdG9wQ291bnQpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBmbG9hdCBvZmZzZXRzW21heENvbG9yU3Rv
cENvdW50XTsKKyAgICBTUkdCQTx1aW50OF90PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdOwor
ICAgIGZvciAodWludDhfdCBpID0gMDsgaSA8ICpjb2xvclN0b3BDb3VudDsgKytpKSB7CisgICAg
ICAgIE9wdGlvbmFsPHVpbnQzMl90PiBjb2xvcjsKKyAgICAgICAgZGVjb2RlciA+PiBjb2xvcjsK
KyAgICAgICAgaWYgKCFjb2xvcikKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICAgICAgT3B0aW9uYWw8ZmxvYXQ+IG9mZnNldDsKKyAgICAgICAgZGVjb2RlciA+PiBvZmZz
ZXQ7CisgICAgICAgIGlmICghb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgICAgICBjb2xvcnNbaV0gPSBhc1NSR0JBKFBhY2tlZENvbG9yOjpSR0JBIHsgKmNv
bG9yIH0pOworICAgICAgICBvZmZzZXRzW2ldID0gKm9mZnNldDsKKyAgICB9CisKKyAgICBPcHRp
b25hbDxHcmFkaWVudDo6RGF0YT4gZGF0YTsKKyAgICBkZWNvZGVyID4+IGRhdGE7CisgICAgaWYg
KCFkYXRhKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8QWZm
aW5lVHJhbnNmb3JtPiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CisgICAgZGVjb2RlciA+
PiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CisgICAgaWYgKCFncmFkaWVudFNwYWNlVHJh
bnNmb3JtYXRpb24pCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25h
bDxHcmFkaWVudFNwcmVhZE1ldGhvZD4gc3ByZWFkTWV0aG9kOworICAgIGRlY29kZXIgPj4gc3By
ZWFkTWV0aG9kOworICAgIGlmICghc3ByZWFkTWV0aG9kKQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgcmV0dXJuIFNldEZpbGxDb2xvcjo6Y3JlYXRlKCpjb2xvcik7CisgICAg
cmV0dXJuIHsgU2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUob2Zmc2V0cywgY29sb3JzLCAq
ZGF0YSwgKmdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiwgKnNwcmVhZE1ldGhvZCwgKmNvbG9y
U3RvcENvdW50KSB9OwogfQogCi1jbGFzcyBTZXRTdHJva2VTdGF0ZSA6IHB1YmxpYyBJdGVtIHsK
K2NsYXNzIFNldElubGluZUZpbGxDb2xvciA6IHB1YmxpYyBJdGVtIHsKIHB1YmxpYzoKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNldFN0cm9rZVN0YXRlPiBjcmVhdGUoT3B0aW9uYWw8
Q29sb3I+JiYsIE9wdGlvbmFsPGZsb2F0PiYmIHRoaWNrbmVzcyk7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFJlZjxTZXRJbmxpbmVGaWxsQ29sb3I+IGNyZWF0ZShTUkdCQTx1aW50OF90Pik7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRTdHJva2VTdGF0ZSgpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldElubGluZUZpbGxDb2xvcigpOwogCi0gICAgQ29sb3Ig
Y29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0gICAgYm9vbCBoYXNDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1faGFzQ29sb3I7IH0KLQotICAgIGZsb2F0IHRoaWNrbmVzcygpIGNvbnN0
IHsgcmV0dXJuIG1fdGhpY2tuZXNzOyB9Ci0gICAgYm9vbCBoYXNUaGlja25lc3MoKSBjb25zdCB7
IHJldHVybiBtX2hhc1RoaWNrbmVzczsgfQorICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1
cm4geyBtX2NvbG9yRGF0YSB9OyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIE9wdGlvbmFsPFJlZjxTZXRTdHJva2VTdGF0ZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAg
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTZXRJbmxpbmVGaWxs
Q29sb3I+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIFNldFN0cm9rZVN0YXRl
KE9wdGlvbmFsPENvbG9yPiYmIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4mJiB0aGlja25lc3MpCi0g
ICAgICAgIDogSXRlbShJdGVtVHlwZTo6U2V0U3Ryb2tlU3RhdGUpCi0gICAgICAgICwgbV9jb2xv
cihjb2xvci52YWx1ZU9yKENvbG9yKCkpKQotICAgICAgICAsIG1fdGhpY2tuZXNzKHRoaWNrbmVz
cy52YWx1ZU9yKDApKQotICAgICAgICAsIG1faGFzQ29sb3IoY29sb3IuaGFzVmFsdWUoKSkKLSAg
ICAgICAgLCBtX2hhc1RoaWNrbmVzcyh0aGlja25lc3MuaGFzVmFsdWUoKSkKKyAgICBTZXRJbmxp
bmVGaWxsQ29sb3IoU1JHQkE8dWludDhfdD4gY29sb3JEYXRhKQorICAgICAgICA6IEl0ZW0oSXRl
bVR5cGU6OlNldElubGluZUZpbGxDb2xvcikKKyAgICAgICAgLCBtX2NvbG9yRGF0YShjb2xvckRh
dGEpCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICBDb2xvciBtX2NvbG9yOwotICAgIGZsb2F0IG1fdGhpY2tuZXNz
IHsgMCB9OwotICAgIGJvb2wgbV9oYXNDb2xvciB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1Ro
aWNrbmVzcyB7IGZhbHNlIH07CisgICAgU1JHQkE8dWludDhfdD4gbV9jb2xvckRhdGE7CiB9Owog
CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRTdHJva2VTdGF0ZTo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0Cit2b2lkIFNldElubGluZUZpbGxDb2xvcjo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgZW5jb2RlciA8PCBtX2hhc0NvbG9yOwotICAg
IGlmIChtX2hhc0NvbG9yKQotICAgICAgICBlbmNvZGVyIDw8IG1fY29sb3I7Ci0KLSAgICBlbmNv
ZGVyIDw8IG1faGFzVGhpY2tuZXNzOwotICAgIGlmIChtX2hhc1RoaWNrbmVzcykKLSAgICAgICAg
ZW5jb2RlciA8PCBtX3RoaWNrbmVzczsKKyAgICBlbmNvZGVyIDw8IFBhY2tlZENvbG9yOjpSR0JB
IHsgbV9jb2xvckRhdGEgfS52YWx1ZTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9w
dGlvbmFsPFJlZjxTZXRTdHJva2VTdGF0ZT4+IFNldFN0cm9rZVN0YXRlOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK09wdGlvbmFsPFJlZjxTZXRJbmxpbmVGaWxsQ29sb3I+PiBTZXRJbmxpbmVG
aWxsQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIE9wdGlvbmFsPGJvb2w+
IGhhc0NvbG9yOwotICAgIGRlY29kZXIgPj4gaGFzQ29sb3I7Ci0gICAgaWYgKCFoYXNDb2xvcikK
KyAgICBPcHRpb25hbDx1aW50MzJfdD4gdmFsdWU7CisgICAgZGVjb2RlciA+PiB2YWx1ZTsKKyAg
ICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgT3B0aW9u
YWw8Q29sb3I+IGNvbG9yOwotICAgIGlmICgqaGFzQ29sb3IpIHsKLSAgICAgICAgZGVjb2RlciA+
PiBjb2xvcjsKLSAgICAgICAgaWYgKCFjb2xvcikKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgcmV0dXJuIFNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRlKGFzU1JHQkEoUGFj
a2VkQ29sb3I6OlJHQkEgeyAqdmFsdWUgfSkpOworfQorCitjbGFzcyBTZXRJbmxpbmVTdHJva2VD
b2xvciA6IHB1YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UmVmPFNldElubGluZVN0cm9rZUNvbG9yPiBjcmVhdGUoU1JHQkE8dWludDhfdD4pOworCisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0SW5saW5lU3Ryb2tlQ29sb3IoKTsKKworICAgIENv
bG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4geyBtX2NvbG9yRGF0YSB9OyB9CisKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTZXRJbmxpbmVTdHJva2VD
b2xvcj4+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgU2V0SW5saW5lU3Ryb2tl
Q29sb3IoU1JHQkE8dWludDhfdD4gY29sb3JEYXRhKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6
OlNldElubGluZVN0cm9rZUNvbG9yKQorICAgICAgICAsIG1fY29sb3JEYXRhKGNvbG9yRGF0YSkK
KyAgICB7CiAgICAgfQogCi0gICAgT3B0aW9uYWw8Ym9vbD4gaGFzVGhpY2tuZXNzOwotICAgIGRl
Y29kZXIgPj4gaGFzVGhpY2tuZXNzOwotICAgIGlmICghaGFzVGhpY2tuZXNzKQorICAgIHZvaWQg
YXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBTUkdCQTx1aW50
OF90PiBtX2NvbG9yRGF0YTsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIFNl
dElubGluZVN0cm9rZUNvbG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAg
ICBlbmNvZGVyIDw8IFBhY2tlZENvbG9yOjpSR0JBIHsgbV9jb2xvckRhdGEgfS52YWx1ZTsKK30K
KwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZjxTZXRJbmxpbmVTdHJva2VD
b2xvcj4+IFNldElubGluZVN0cm9rZUNvbG9yOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sK
KyAgICBPcHRpb25hbDx1aW50MzJfdD4gdmFsdWU7CisgICAgZGVjb2RlciA+PiB2YWx1ZTsKKyAg
ICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgT3B0aW9u
YWw8ZmxvYXQ+IHRoaWNrbmVzczsKLSAgICBpZiAoKmhhc1RoaWNrbmVzcykgewotICAgICAgICBk
ZWNvZGVyID4+IHRoaWNrbmVzczsKLSAgICAgICAgaWYgKCF0aGlja25lc3MpCi0gICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBTZXRJbmxpbmVTdHJva2VDb2xvcjo6
Y3JlYXRlKGFzU1JHQkEoUGFja2VkQ29sb3I6OlJHQkEgeyAqdmFsdWUgfSkpOworfQorCitjbGFz
cyBTZXRTdHJva2VUaGlja25lc3MgOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZjxTZXRTdHJva2VUaGlja25lc3M+IGNyZWF0ZShmbG9hdCB0aGlj
a25lc3MpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0U3Ryb2tlVGhpY2tuZXNz
KCk7CisKKyAgICBmbG9hdCB0aGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3RoaWNrbmVzczsg
fQorCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNv
bnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0
U3Ryb2tlVGhpY2tuZXNzPj4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBTZXRT
dHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6
OlNldFN0cm9rZVRoaWNrbmVzcykKKyAgICAgICAgLCBtX3RoaWNrbmVzcyh0aGlja25lc3MpCisg
ICAgewogICAgIH0KIAotICAgIHJldHVybiBTZXRTdHJva2VTdGF0ZTo6Y3JlYXRlKFdURk1vdmUo
Y29sb3IpLCBXVEZNb3ZlKHRoaWNrbmVzcykpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBmbG9hdCBtX3RoaWNrbmVzcyB7IDAgfTsKK307
CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIFNldFN0cm9rZVRoaWNrbmVzczo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3RoaWNrbmVz
czsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZjxTZXRTdHJva2VU
aGlja25lc3M+PiBTZXRTdHJva2VUaGlja25lc3M6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
eworICAgIE9wdGlvbmFsPGZsb2F0PiB0aGlja25lc3M7CisgICAgZGVjb2RlciA+PiB0aGlja25l
c3M7CisgICAgaWYgKCF0aGlja25lc3MpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICByZXR1cm4gU2V0U3Ryb2tlVGhpY2tuZXNzOjpjcmVhdGUoKnRoaWNrbmVzcyk7CiB9CiAK
IGNsYXNzIFNldFN0YXRlIDogcHVibGljIEl0ZW0gewpAQCAtMjUxMSw2ICsyNjExLDUwIEBAIE9w
dGlvbmFsPFJlZjxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4+IEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOjpkZWNvZGUoRGVjb2RlciYKICAgICByZXR1cm4gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6
OmNyZWF0ZSgqcmVjdCwgKnJvdW5kZWRIb2xlUmVjdCwgKmNvbG9yKTsKIH0KIAorI2lmIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQorCitjbGFzcyBGaWxsSW5saW5lUGF0aCA6IHB1YmxpYyBEcmF3
aW5nSXRlbSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxGaWxsSW5saW5lUGF0aD4gY3JlYXRl
KGNvbnN0IElubGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZpbGxJbmxpbmVQYXRoKHBhdGhEYXRhKSk7CisgICAgfQorCisgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB+RmlsbElubGluZVBhdGgoKTsKKworICAgIFBhdGggcGF0aCgp
IGNvbnN0IHsgcmV0dXJuIFBhdGg6OmZyb20obV9wYXRoRGF0YSk7IH0KKworICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxJbmxpbmVQYXRoPj4gZGVj
b2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBXRUJDT1JFX0VYUE9SVCBGaWxsSW5saW5l
UGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYpOworCisgICAgdm9pZCBhcHBseShHcmFwaGljc0Nv
bnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91
bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHBhdGgo
KS5mYXN0Qm91bmRpbmdSZWN0KCk7IH0KKworICAgIElubGluZVBhdGhEYXRhIG1fcGF0aERhdGE7
Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGaWxsSW5saW5lUGF0aDo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3BhdGhEYXRh
OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVmPEZpbGxJbmxpbmVQ
YXRoPj4gRmlsbElubGluZVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9w
dGlvbmFsPElubGluZVBhdGhEYXRhPiBwYXRoRGF0YTsKKyAgICBkZWNvZGVyID4+IHBhdGhEYXRh
OworICAgIGlmICghcGF0aERhdGEpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAg
ICByZXR1cm4gRmlsbElubGluZVBhdGg6OmNyZWF0ZShXVEZNb3ZlKCpwYXRoRGF0YSkpOworfQor
CisjZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisKIGNsYXNzIEZpbGxQYXRoIDog
cHVibGljIERyYXdpbmdJdGVtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEZpbGxQYXRoPiBj
cmVhdGUoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTI3NjYsNiArMjkxMCw1MCBAQCBPcHRpb25hbDxS
ZWY8U3Ryb2tlUmVjdD4+IFN0cm9rZVJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAg
IHJldHVybiBTdHJva2VSZWN0OjpjcmVhdGUoKnJlY3QsICpsaW5lV2lkdGgpOwogfQogCisjaWYg
RU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisKK2NsYXNzIFN0cm9rZUlubGluZVBhdGggOiBwdWJs
aWMgRHJhd2luZ0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U3Ryb2tlSW5saW5lUGF0
aD4gY3JlYXRlKGNvbnN0IElubGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFN0cm9rZUlubGluZVBhdGgocGF0aERhdGEpKTsKKyAgICB9
CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TdHJva2VJbmxpbmVQYXRoKCk7CisKKyAg
ICBQYXRoIHBhdGgoKSBjb25zdCB7IHJldHVybiBQYXRoOjpmcm9tKG1fcGF0aERhdGEpOyB9CisK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTdHJva2VJ
bmxpbmVQYXRoPj4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBXRUJDT1JFX0VY
UE9SVCBTdHJva2VJbmxpbmVQYXRoKGNvbnN0IElubGluZVBhdGhEYXRhJik7CisKKyAgICB2b2lk
IGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZs
b2F0UmVjdD4gbG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICBJbmxpbmVQYXRoRGF0YSBtX3BhdGhEYXRhOworfTsKKwordGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4KK3ZvaWQgU3Ryb2tlSW5saW5lUGF0aDo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3BhdGhEYXRhOworfQorCit0ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVmPFN0cm9rZUlubGluZVBhdGg+PiBTdHJva2VJbmxp
bmVQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxJbmxpbmVQ
YXRoRGF0YT4gcGF0aERhdGE7CisgICAgZGVjb2RlciA+PiBwYXRoRGF0YTsKKyAgICBpZiAoIXBh
dGhEYXRhKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIFN0cm9r
ZUlubGluZVBhdGg6OmNyZWF0ZShXVEZNb3ZlKCpwYXRoRGF0YSkpOworfQorCisjZW5kaWYgLy8g
RU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisKIGNsYXNzIFN0cm9rZVBhdGggOiBwdWJsaWMgRHJh
d2luZ0l0ZW0gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U3Ryb2tlUGF0aD4gY3JlYXRlKGNv
bnN0IFBhdGgmIHBhdGgpCkBAIC0zMDE1LDExICszMjAzLDE3IEBAIHZvaWQgSXRlbTo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVD
VE06CiAgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q29uY2F0ZW5hdGVDVE0+KCp0aGlzKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0RmlsbENvbG9yOgotICAgICAg
ICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldEZpbGxDb2xvcj4oKnRoaXMpOworICAgIGNhc2UgSXRl
bVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKKyAgICAgICAgZW5jb2RlciA8PCBkb3duY2Fz
dDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KCp0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbENvbG9yOgorICAgICAgICBlbmNvZGVyIDw8IGRvd25j
YXN0PFNldElubGluZUZpbGxDb2xvcj4oKnRoaXMpOwogICAgICAgICBicmVhazsKLSAgICBjYXNl
IEl0ZW1UeXBlOjpTZXRTdHJva2VTdGF0ZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxT
ZXRTdHJva2VTdGF0ZT4oKnRoaXMpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9r
ZUNvbG9yOgorICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldElubGluZVN0cm9rZUNvbG9y
PigqdGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRo
aWNrbmVzczoKKyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRTdHJva2VUaGlja25lc3M+
KCp0aGlzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAg
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0U3RhdGU+KCp0aGlzKTsKQEAgLTMxMTQsNiAr
MzMwOCwxMSBAQCB2b2lkIEl0ZW06OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAg
IGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgogICAgICAgICBlbmNvZGVy
IDw8IGRvd25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigqdGhpcyk7CiAgICAgICAgIGJy
ZWFrOworI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OkZp
bGxJbmxpbmVQYXRoOgorICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEZpbGxJbmxpbmVQYXRo
PigqdGhpcyk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6Rmls
bFBhdGg6CiAgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFBhdGg+KCp0aGlzKTsKICAg
ICAgICAgYnJlYWs7CkBAIC0zMTI5LDYgKzMzMjgsMTEgQEAgdm9pZCBJdGVtOjplbmNvZGUoRW5j
b2RlciYgZW5jb2RlcikgY29uc3QKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgogICAg
ICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFN0cm9rZVJlY3Q+KCp0aGlzKTsKICAgICAgICAgYnJl
YWs7CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ry
b2tlSW5saW5lUGF0aDoKKyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTdHJva2VJbmxpbmVQ
YXRoPigqdGhpcyk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6
U3Ryb2tlUGF0aDoKICAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTdHJva2VQYXRoPigqdGhp
cyk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzE5NSwxMiArMzM5OSwyMCBAQCBPcHRpb25hbDxSZWY8
SXRlbT4+IEl0ZW06OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgICAgICBpZiAoYXV0byBp
dGVtID0gQ29uY2F0ZW5hdGVDVE06OmRlY29kZShkZWNvZGVyKSkKICAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwogICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRGaWxsQ29sb3I6Ci0gICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBTZXRGaWxsQ29sb3I6OmRlY29kZShkZWNvZGVyKSkKKyAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6CisgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTZXRJbmxp
bmVGaWxsR3JhZGllbnQ6OmRlY29kZShkZWNvZGVyKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsK
LSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VTdGF0ZToKLSAgICAgICAgaWYgKGF1dG8gaXRl
bSA9IFNldFN0cm9rZVN0YXRlOjpkZWNvZGUoZGVjb2RlcikpCisgICAgY2FzZSBJdGVtVHlwZTo6
U2V0SW5saW5lRmlsbENvbG9yOgorICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0SW5saW5lRmls
bENvbG9yOjpkZWNvZGUoZGVjb2RlcikpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgICAgIGlmIChhdXRvIGl0ZW0g
PSBTZXRJbmxpbmVTdHJva2VDb2xvcjo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IFNldFN0cm9rZVRoaWNrbmVzczo6ZGVjb2RlKGRlY29kZXIpKQogICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVt
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgpAQCAtMzMy
Nyw2ICszNTM5LDEyIEBAIE9wdGlvbmFsPFJlZjxJdGVtPj4gSXRlbTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiAgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZTo6ZGVjb2RlKGRlY29kZXIpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CiAgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgorICAg
ICAgICBpZiAoYXV0byBpdGVtID0gRmlsbElubGluZVBhdGg6OmRlY29kZShkZWNvZGVyKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRl
bSkpOworICAgICAgICBicmVhazsKKyNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRo
OgogICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFBhdGg6OmRlY29kZShkZWNvZGVyKSkKICAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRl
bSkpOwpAQCAtMzM0Nyw2ICszNTY1LDEyIEBAIE9wdGlvbmFsPFJlZjxJdGVtPj4gSXRlbTo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTdHJva2VSZWN0
OjpkZWNvZGUoZGVjb2RlcikpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKICAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKElO
TElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyAg
ICAgICAgaWYgKGF1dG8gaXRlbSA9IFN0cm9rZUlubGluZVBhdGg6OmRlY29kZShkZWNvZGVyKSkK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOworICAgICAgICBicmVhazsKKyNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9r
ZVBhdGg6CiAgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTdHJva2VQYXRoOjpkZWNvZGUoZGVjb2Rl
cikpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKQEAgLTM0MDksOCArMzYzMyw5IEBAIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShSb3RhdGUpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oU2NhbGUpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
U2V0Q1RNKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENvbmNhdGVu
YXRlQ1RNKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldEZpbGxD
b2xvcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRTdHJva2VT
dGF0ZSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRJbmxpbmVG
aWxsQ29sb3IpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0SW5s
aW5lU3Ryb2tlQ29sb3IpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0o
U2V0U3Ryb2tlVGhpY2tuZXNzKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKFNldFN0YXRlKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNl
dExpbmVDYXApCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0TGlu
ZURhc2gpCkBAIC0zNDQxLDExICszNjY2LDE3IEBAIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhHcmFkaWVudCkKIFNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShGaWxsQ29tcG9zaXRlZFJlY3QpCiBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJvdW5kZWRSZWN0KQogU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKQorI2lmIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElT
VF9JVEVNKEZpbGxJbmxpbmVQYXRoKQorI2VuZGlmCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oRmlsbFBhdGgpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oRmlsbEVsbGlwc2UpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oUHV0SW1hZ2VEYXRhKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKFBhaW50RnJhbWVGb3JNZWRpYSkKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShTdHJva2VSZWN0KQorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZUlubGluZVBhdGgpCisjZW5k
aWYKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VQYXRoKQog
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9rZUVsbGlwc2UpCiBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oQ2xlYXJSZWN0KQpAQCAtMzQ3
MCw4ICszNzAxLDkgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU+IHsKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OlNjYWxlLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0Q1RNLAogICAg
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE0sCi0gICAgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRGaWxsQ29sb3IsCi0gICAgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdHJva2VTdGF0ZSwKKyAgICBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvciwKKyAgICBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yLAorICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzLAogICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGUsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlw
ZTo6U2V0TGluZURhc2gsCkBAIC0zNTAzLDExICszNzM1LDE3IEBAIHRlbXBsYXRlPD4gc3RydWN0
IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlPiB7CiAgICAgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3QsCiAgICAgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3QsCiAgICAgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSwKKyNpZiBFTkFC
TEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6
OkZpbGxJbmxpbmVQYXRoLAorI2VuZGlmCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpGaWxsUGF0aCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkZpbGxF
bGxpcHNlLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UHV0SW1hZ2VEYXRh
LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UGFpbnRGcmFtZUZvck1lZGlh
LAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tlUmVjdCwKKyNpZiBF
TkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5
cGU6OlN0cm9rZUlubGluZVBhdGgsCisjZW5kaWYKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OlN0cm9rZVBhdGgsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBl
OjpTdHJva2VFbGxpcHNlLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q2xl
YXJSZWN0LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDFl
MWU5MWFhMDg0Yjk2ZTZlYjI2NWMxZjgwZmYyZjhlNTFmZjFmZTcuLjdkZTJiMjFkY2UyN2M2ZjNk
YmE0NDVhZTM4NjFkZGViZjExYzE3ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5jcHAKQEAgLTU3LDM4ICs1Nyw0OSBAQCB2b2lkIFJlY29yZGVyOjpwdXRJbWFnZURh
dGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVwog
ICAgIGFwcGVuZEl0ZW0oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdlRGF0YTo6Y3JlYXRl
KGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgZGVzdEZvcm1hdCkp
OwogfQogCi1zdGF0aWMgYm9vbCBjb250YWluc09ubHlTdHJva2VDb2xvck9yVGhpY2tuZXNzQ2hh
bmdlKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZXMpCitzdGF0
aWMgYm9vbCBjb250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2UmIGNoYW5nZXMsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzIGNoYW5nZUZsYWdzKQogewotICAgIHN0YXRpYyBjb25zdGV4cHIgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3Mgc3Ryb2tlU3RhdGVDaGFuZ2VGbGFncyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBp
bmxpbmVTdGF0ZUNoYW5nZUZsYWdzIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVRoaWNrbmVzc0NoYW5nZSwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZUNvbG9yQ2hhbmdlCisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNo
YW5nZSwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSwKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSwKICAgICB9Owot
ICAgIHJldHVybiBjaGFuZ2VzID09IChjaGFuZ2VzICYgc3Ryb2tlU3RhdGVDaGFuZ2VGbGFncyk7
Ci19CiAKLXN0YXRpYyBib29sIGNvbnRhaW5zT25seUZpbGxDb2xvckNoYW5nZShHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VzKQotewotICAgIHJldHVybiBjaGFu
Z2VzID09IChjaGFuZ2VzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSk7
CisgICAgaWYgKGNoYW5nZUZsYWdzICE9IChjaGFuZ2VGbGFncyAmIGlubGluZVN0YXRlQ2hhbmdl
RmxhZ3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSAmJiAhY2hhbmdl
cy5tX3N0YXRlLnN0cm9rZUNvbG9yLmlzSW5saW5lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bENvbG9yQ2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci5pc0lubGluZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSkgJiYgY2hhbmdlcy5tX3N0YXRl
LmZpbGxHcmFkaWVudAorICAgICAgICAmJiAhU2V0SW5saW5lRmlsbEdyYWRpZW50Ojppc0lubGlu
ZSgqY2hhbmdlcy5tX3N0YXRlLmZpbGxHcmFkaWVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgUmVmPEl0ZW0+IGNyZWF0ZVN0YXRlQ2hh
bmdlSXRlbShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgY2hhbmdlcywgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxhZ3MpCit2b2lkIFJlY29y
ZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2UmIGNoYW5nZXMsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5n
ZUZsYWdzKQogewotICAgIGlmIChjb250YWluc09ubHlGaWxsQ29sb3JDaGFuZ2UoY2hhbmdlRmxh
Z3MpKQotICAgICAgICByZXR1cm4gU2V0RmlsbENvbG9yOjpjcmVhdGUoY2hhbmdlcy5tX3N0YXRl
LmZpbGxDb2xvcik7CisgICAgaWYgKCFjb250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY2hh
bmdlcywgY2hhbmdlRmxhZ3MpKSB7CisgICAgICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kSXRlbShT
ZXRTdGF0ZTo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlRmxhZ3MpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgIGlmIChjb250YWluc09ubHlTdHJva2VDb2xvck9yVGhpY2tu
ZXNzQ2hhbmdlKGNoYW5nZUZsYWdzKSkgewotICAgICAgICBPcHRpb25hbDxDb2xvcj4gc3Ryb2tl
Q29sb3I7Ci0gICAgICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICAgICAgc3Ryb2tlQ29sb3IgPSBjaGFu
Z2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3I7CisgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCisgICAgICAgIG1fZGlzcGxh
eUxpc3QuYXBwZW5kSXRlbShTZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKGNoYW5nZXMubV9z
dGF0ZS5zdHJva2VDb2xvci5hc0lubGluZSgpKSk7CiAKLSAgICAgICAgT3B0aW9uYWw8ZmxvYXQ+
IHN0cm9rZVRoaWNrbmVzczsKLSAgICAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQotICAgICAgICAgICAgc3Ry
b2tlVGhpY2tuZXNzID0gY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzczsKKyAgICBpZiAo
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVz
c0NoYW5nZSkpCisgICAgICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kSXRlbShTZXRTdHJva2VUaGlj
a25lc3M6OmNyZWF0ZShjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CiAKLSAgICAg
ICAgcmV0dXJuIFNldFN0cm9rZVN0YXRlOjpjcmVhdGUoV1RGTW92ZShzdHJva2VDb2xvciksIFdU
Rk1vdmUoc3Ryb2tlVGhpY2tuZXNzKSk7Ci0gICAgfQorICAgIGlmIChjaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKKyAgICAgICAgbV9k
aXNwbGF5TGlzdC5hcHBlbmRJdGVtKFNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRlKGNoYW5nZXMu
bV9zdGF0ZS5maWxsQ29sb3IuYXNJbmxpbmUoKSkpOwogCi0gICAgcmV0dXJuIFNldFN0YXRlOjpj
cmVhdGUoY2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VGbGFncyk7CisgICAgaWYgKGNoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpKQorICAg
ICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0oU2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVh
dGUoKmNoYW5nZXMubV9zdGF0ZS5maWxsR3JhZGllbnQpKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6
d2lsbEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYgaXRlbSkKQEAgLTEwNSw3ICsxMTYsNyBAQCB2b2lk
IFJlY29yZGVyOjp3aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJiBpdGVtKQogICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSA9
IHN0YXRlQ2hhbmdlcy5jaGFuZ2VzRnJvbVN0YXRlKGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5n
U3RhdGUpOwogICAgICAgICBpZiAoY2hhbmdlc0Zyb21MYXN0U3RhdGUpIHsKICAgICAgICAgICAg
IExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAicHJlLWRyYXdpbmcsIHNh
dmluZyBzdGF0ZSAiIDw8IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlKHN0YXRlQ2hhbmdlcy5t
X3N0YXRlLCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkpOwotICAgICAgICAgICAgbV9kaXNwbGF5TGlz
dC5hcHBlbmQoY3JlYXRlU3RhdGVDaGFuZ2VJdGVtKHN0YXRlQ2hhbmdlcywgY2hhbmdlc0Zyb21M
YXN0U3RhdGUpKTsKKyAgICAgICAgICAgIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbShzdGF0ZUNoYW5n
ZXMsIGNoYW5nZXNGcm9tTGFzdFN0YXRlKTsKICAgICAgICAgICAgIHN0YXRlQ2hhbmdlcy5tX2No
YW5nZUZsYWdzID0geyB9OwogICAgICAgICAgICAgY3VycmVudFN0YXRlKCkubGFzdERyYXdpbmdT
dGF0ZSA9IHN0YXRlQ2hhbmdlcy5tX3N0YXRlOwogICAgICAgICB9CkBAIC0zMTQsNiArMzI1LDEy
IEBAIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkCiAKIHZvaWQgUmVjb3JkZXI6OmZpbGxQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiB7CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgaWYg
KHBhdGguaGFzSW5saW5lRGF0YSgpKSB7CisgICAgICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRl
bnQoRmlsbElubGluZVBhdGg6OmNyZWF0ZShwYXRoLmlubGluZURhdGEoKSkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorI2VuZGlmCiAgICAgYXBwZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChGaWxs
UGF0aDo6Y3JlYXRlKHBhdGgpKTsKIH0KIApAQCAtMzI5LDYgKzM0NiwxMiBAQCB2b2lkIFJlY29y
ZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQog
CiB2b2lkIFJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CisjaWYgRU5B
QkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0YSgpKSB7Cisg
ICAgICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoU3Ryb2tlSW5saW5lUGF0aDo6Y3JlYXRl
KHBhdGguaW5saW5lRGF0YSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKICAg
ICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0cm9rZVBhdGg6OmNyZWF0ZShwYXRoKSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IDZhMjc3MTg5N2Vk
MjNlNjkwNTZmYWVhOGY1ZTUzMzk4YTVmOGM4YzkuLmU5NWYyODQ2ODU0ZTQwZTdlYTU2ZTQzMDhh
MjJlY2NiNWU3MmIxYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApA
QCAtMTQ5LDYgKzE0OSw4IEBAIHByaXZhdGU6CiAgICAgSXRlbVR5cGUmIGFwcGVuZEl0ZW0oUmVm
PEl0ZW1UeXBlPiYmKTsKICAgICB2b2lkIHdpbGxBcHBlbmRJdGVtKGNvbnN0IEl0ZW0mKTsKIAor
ICAgIHZvaWQgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
Q2hhbmdlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworCiAgICAg
RmxvYXRSZWN0IGV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsK
ICAgICB2b2lkIHVwZGF0ZUl0ZW1FeHRlbnQoRHJhd2luZ0l0ZW0mKSBjb25zdDsKICAgICAKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCAyMGUxY2NiMDQxZjlmMDUwNTVkMDMxNmMwNjJlMjdkYzU3ZWJhMWM4Li4zZTRjYWRjMjk2
OTMzNGY2N2NiYmQyNDE3ZjgwZDcwYjQ5ZTBhMmQwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MjAtMTAtMjcgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAg
ICAgW0NvbmN1cnJlbnQgZGlzcGxheSBsaXN0c10gQWRkIGFsdGVybmF0ZSB2ZXJzaW9ucyBvZiBl
eGlzdGluZyBkaXNwbGF5IGxpc3QgaXRlbXMgdGhhdCBvbmx5IGNvbnRhaW4gaW5saW5lIGRhdGEK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODI1OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlYmFzZWxp
bmUgYW4gZXhpc3RpbmcgdGVzdC4KKworICAgICAgICAqIGRpc3BsYXlsaXN0cy9jYW52YXMtZGlz
cGxheS1saXN0LWV4cGVjdGVkLnR4dDoKKwogMjAyMC0xMC0yNyAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEF1ZGlvQ29udGV4dC5zdXNwZW5kKCkgc2hvdWxkIG5v
dCByZWplY3QgcHJvbWlzZSB3aGVuIGF1ZGlvIHNlc3Npb24gaXMgaW50ZXJydXB0ZWQKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4
cGVjdGVkLnR4dAppbmRleCBmN2Q3MThmMDZhZGM4Yzg5YTRjZmI4MzkyZTlhOTZlM2VhYWNmYTc3
Li4zMjg4NDgwNjI3MDE5ZDU0MDJkOTQyNWZjNGExMzEzNzcwZWNiMzFhIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0
ZWQudHh0CkBAIC04LDcgKzgsNyBAQAogKGZpbGwtcmVjdAogICAoZXh0ZW50IGF0ICgxMCwxNDAp
IHNpemUgNTV4NTApCiAgIChyZWN0IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkpCi0oc2V0LWZpbGwt
Y29sb3IKKyhzZXQtaW5saW5lLWZpbGwtY29sb3IKICAgKGNvbG9yICMwMDAwQzg4MCkpCiAoZmls
bC1yZWN0CiAgIChleHRlbnQgYXQgKDMwLDEyMCkgc2l6ZSA1NXg1MCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412478</attachid>
            <date>2020-10-27 16:57:32 -0700</date>
            <delta_ts>2020-10-27 17:47:10 -0700</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-218259-20201027165731.patch</filename>
            <type>text/plain</type>
            <size>55042</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MDM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjQ5MzM1NTdmODRkMzBk
MmY3ZmI2NzQ4YjIyZjA1OWU2ZGFiYjQ5NS4uYWZjN2IyOTMwN2M5YTEyYTNjNWRhMDJkYTQzZTE4
M2M2ZjkzNzNkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAyMC0xMC0yNyAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3VycmVu
dCBkaXNwbGF5IGxpc3RzXSBBZGQgYWx0ZXJuYXRlIHZlcnNpb25zIG9mIGV4aXN0aW5nIGRpc3Bs
YXkgbGlzdCBpdGVtcyB0aGF0IG9ubHkgY29udGFpbiBpbmxpbmUgZGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MjU5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gcHJlcGFyYXRpb24gZm9yIHN1
cHBvcnRpbmcgY29uY3VycmVudCBnZW5lcmF0aW9uIGFuZCBjb25zdW1wdGlvbiBvZiBkaXNwbGF5
IGxpc3QgaXRlbXMgaW4gdGhlIEdQVSBwcm9jZXNzLAorICAgICAgICBhZGQgbmV3IHZhcmlhbnRz
IG9mIHNvbWUgZXhpc3RpbmcgZGlzcGxheSBsaXN0IGl0ZW1zIHRoYXQgY29udGFpbiBvbmx5ICJp
bmxpbmUgZGF0YSIgKGkuZS4gbm8gcG9pbnRlcnMpLgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBi
ZWhhdmlvcjsgc2VlIGJlbG93IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9QYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmlzRW1wdHkgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkUXVhZEN1cnZlVG8pOgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6YWRkQmV6aWVyQ3VydmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRo
OjpQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmg6CisKKyAgICAgICAg
QWRkIGEgaGVscGVyIG1ldGhvZCB0byBjb252ZXJ0IGBJbmxpbmVQYXRoRGF0YWAgdG8gYFBhdGhg
LgorCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjppbmxpbmVEYXRhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBhdGg6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpo
YXNJbmxpbmVEYXRhIGNvbnN0KToKKworICAgICAgICBSZW5hbWUgYGhhc0FueUlubGluZURhdGFg
IHRvIGp1c3QgYGhhc0lubGluZURhdGFgLCBhbmQgbWFrZSBpdCBwdWJsaWMuCisKKyAgICAgICAg
KFdlYkNvcmU6OlBhdGg6OnJlbGVhc2VQbGF0Zm9ybVBhdGhJZlBvc3NpYmxlIGNvbnN0KTogRGVs
ZXRlZC4KKworICAgICAgICBBZGRpdGlvbmFsbHksIHJlbW92ZSBgcmVsZWFzZVBsYXRmb3JtUGF0
aElmUG9zc2libGUoKWAgYWx0b2dldGhlci4gVGhpcyBtZXRob2Qgd2FzIHVzZWQgdG8gZW5zdXJl
IHRoYXQKKyAgICAgICAgYFN0cm9rZVBhdGhgIGFuZCBgRmlsbFBhdGhgIHdvdWxkbid0IGtlZXAg
dGhlaXIgYFBhdGhgJ3MgcGxhdGZvcm0gYENHUGF0aFJlZmBzIGFyb3VuZCBhZnRlciBhcHBseWlu
ZyB0aGUgaXRlbSBpbgorICAgICAgICB0aGUgR1BVIHByb2Nlc3MsIHdoaWNoIGxlYWRzIHRvIGFj
Y3VtdWxhdGluZyBhIHBvb2wgb2YgdW51c2VkIGBDR1BhdGhSZWZgcyBhZnRlciBwbGF5aW5nIGJh
Y2sgYSBkaXNwbGF5IGxpc3QKKyAgICAgICAgdGhhdCBjb250YWlucyBtYW55IGBQYXRoYCBvYmpl
Y3RzLiBIb3dldmVyLCBzaW5jZSBgU3Ryb2tlSW5saW5lUGF0aGAgYW5kIGBGaWxsSW5saW5lUGF0
aGAgbm93IGV4aXN0LCB0aGUgYFBhdGhgCisgICAgICAgIG9iamVjdCB3ZSBjcmVhdGUgd2hlbiBh
cHBseWluZyB0aG9zZSBpdGVtcyBpcyBhbHdheXMgZ29pbmcgdG8gYmUgdGVtcG9yYXJ5LCB3aGlj
aCBhbGxvd3MgdXMgdG8gYXZvaWQgdGhpcworICAgICAgICBwcm9ibGVtLgorCisgICAgICAgIChX
ZWJDb3JlOjpQYXRoOjpoYXNBbnlJbmxpbmVEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0
aDo6cGxhdGZvcm1QYXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmlzTnVsbCBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW06OnNpemVJ
bkJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3Jh
ZGllbnQ6OlNldElubGluZUZpbGxHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpncmFkaWVudCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6YXBwbHkg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFk
aWVudDo6aXNJbmxpbmUpOgorCisgICAgICAgIEludHJvZHVjZSBhIG5ldyBTZXRJbmxpbmVGaWxs
R3JhZGllbnQgaXRlbSB0byByZXByZXNlbnQgc2V0dGluZyB0aGUgZmlsbCBncmFkaWVudCB0byBh
IGdyYWRpZW50IHdpdGggYXQgbW9zdCA0CisgICAgICAgIGNvbG9yIHN0b3BzLCB3aXRoIG9ubHkg
aW5saW5lIGNvbG9ycy4gVGhpcyBpbmxpbmUgZGF0YSBpcyBwdWxsZWQgb3V0IG9mIHRoZSBgR3Jh
ZGllbnRgIHVwb24gY29uc3RydWN0aW9uLCBhbmQKKyAgICAgICAgbGF0ZXIgdXNlZCB0byByZWNv
bnN0cnVjdCBhIGBHcmFkaWVudGAgZHVyaW5nIHBsYXliYWNrLgorCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6b3BlcmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0SW5saW5lRmlsbENvbG9yOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6YXBwbHkgY29uc3QpOgorCisgICAgICAgIENoYW5n
ZSBgU2V0RmlsbENvbG9yYCB0byBgU2V0SW5saW5lRmlsbENvbG9yYCwgYW5kIG1ha2UgaXQgcGFz
cyBhcm91bmQgYW4gYFNSR0I8dWludDhfdD5gIGluc3RlYWQgb2YgYSBgQ29sb3JgLAorICAgICAg
ICBzaW5jZSB0aGUgbGF0dGVyIGNvdWxkIGNvbnRhaW4gYSBwb2ludGVyIHRvIGFuIGV4dGVuZGVk
IGNvbG9yLgorCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tl
Q29sb3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5l
U3Ryb2tlQ29sb3I6OmFwcGx5IGNvbnN0KToKKworICAgICAgICBTaW1pbGFyIHRvIHRoZSBhYm92
ZSwgYnV0IHdoZW4gc2V0dGluZyB0aGUgc3Ryb2tlIGNvbG9yIHRvIGFuIGlubGluZSAobm9uLWV4
dGVuZGVkKSBjb2xvci4KKworICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9r
ZVRoaWNrbmVzczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRT
dHJva2VUaGlja25lc3M6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpGaWxsSW5saW5lUGF0aDo6RmlsbElubGluZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RmlsbFBhdGg6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTdHJva2VQYXRoOjphcHBseSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6bG9jYWxCb3VuZHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUlubGluZVBhdGg6OmFwcGx5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjpT
dHJva2VJbmxpbmVQYXRoKToKKworICAgICAgICBBZGQgYFN0cm9rZUlubGluZVBhdGhgIGFuZCBg
RmlsbElubGluZVBhdGhgLCB3aGljaCBjb250YWluIGBJbmxpbmVQYXRoRGF0YWAgaW5zdGVhZCBv
ZiBgUGF0aGAgb2JqZWN0cyBhbmQgb25seQorICAgICAgICBjb25zdHJ1Y3QgYHBhdGgoKWAgb2Jq
ZWN0cyB3aGVuIG5lZWRlZCAoaS5lLiB3aGVuIGFwcGx5aW5nIHRvIGEgYEdyYXBoaWNzQ29udGV4
dGApLgorCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0RmlsbENvbG9yOjpjcmVh
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldEZpbGxDb2xv
cjo6YXBwbHkgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldFN0cm9rZVN0YXRlOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlNldFN0cm9rZVN0YXRlOjphcHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGlu
ZUZpbGxHcmFkaWVudDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRJbmxpbmVGaWxsQ29sb3I6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3I6OlNldElubGluZUZpbGxDb2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yOjplbmNvZGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxDb2xvcjo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xv
cjo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGlu
ZVN0cm9rZUNvbG9yOjpTZXRJbmxpbmVTdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6OmRlY29kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNzOjp0aGlja25l
c3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVRoaWNr
bmVzczo6U2V0U3Ryb2tlVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRTdHJva2VUaGlja25lc3M6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNzOjpkZWNvZGUpOgorCisgICAgICAgIFB1bGwg
c3Ryb2tlIHRoaWNrbmVzcyBvdXQgaW50byBpdHMgb3duIGRpc3BsYXkgbGlzdCBpdGVtLgorCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OnBhdGggY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkZpbGxJbmxpbmVQYXRoOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUlubGluZVBhdGg6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0
aDo6cGF0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5s
aW5lUGF0aDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
dHJva2VJbmxpbmVQYXRoOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
Okl0ZW06OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRGaWxsQ29sb3I6
OmNvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRGaWxsQ29sb3I6OlNldEZpbGxDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6U2V0RmlsbENvbG9yOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldEZpbGxDb2xvcjo6ZGVjb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VTdGF0ZTo6Y29sb3IgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVN0
YXRlOjpoYXNDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0U3Ryb2tlU3RhdGU6OnRoaWNrbmVzcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlU3RhdGU6Omhhc1RoaWNrbmVzcyBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlU3Rh
dGU6OlNldFN0cm9rZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpTZXRTdHJva2VTdGF0ZTo6ZW5jb2RlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VTdGF0ZTo6ZGVjb2RlKTogRGVsZXRlZC4KKwor
ICAgICAgICBTcGxpdCBgU2V0U3Ryb2tlU3RhdGVgIG91dCBpbnRvIHNlcGFyYXRlIGl0ZW1zIHRy
YWNraW5nIHRoaWNrbmVzcyBhbmQgc3Ryb2tlIGNvbG9yLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OmNvbnRhaW5zT25seUlubGluZVN0YXRlQ2hhbmdlcyk6CisK
KyAgICAgICAgUmVmYWN0b3IgdGhpcyBjb2RlIHNvIHRoYXQgaXQgZW1pdHMgbXVsdGlwbGUgZGlz
cGxheSBsaXN0IGl0ZW1zIGlmIG11bHRpcGxlIGlubGluZSBzdGF0ZXMgY2hhbmdlLiBQcmV2aW91
c2x5LAorICAgICAgICB0aGlzIHdhcyBvbmx5IGRvbmUgZm9yIHNpbXVsdGFuZW91cyBzdHJva2Ug
Y29sb3IgYW5kIHN0cm9rZSB0aGlja25lc3MgY2hhbmdlcyAodmlhIHRoZSBgU2V0U3Ryb2tlU3Rh
dGVgIGl0ZW0pOworICAgICAgICB0aGlzIHdhcyBkb25lIHRvIGF2b2lkIGNyZWF0aW5nIG1vcmUg
ZGlzcGxheSBsaXN0IGl0ZW1zIHRoYW4gbmVlZGVkLiBIb3dldmVyLCBvbmNlIGFsbCBpbmxpbmUg
ZGlzcGxheSBsaXN0IGl0ZW1zCisgICAgICAgIGFyZSBjb25zdHJ1Y3RlZCBkaXJlY3RseSBpbiBz
aGFyZWQgbWVtb3J5LCB0aGVyZSB3aWxsIGJlIChhbG1vc3QpIHplcm8gb3ZlcmhlYWQgZm9yIHNw
bGl0dGluZyB0aGlzIGludG8KKyAgICAgICAgc2VwYXJhdGUgaXRlbXMuCisKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6d2lsbEFwcGVuZEl0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpmaWxsUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmNvbnRhaW5zT25seVN0cm9rZUNvbG9yT3JUaGlja25l
c3NDaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmNvbnRh
aW5zT25seUZpbGxDb2xvckNoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6Y3JlYXRlU3RhdGVDaGFuZ2VJdGVtKTogRGVsZXRlZC4KKworICAgICAgICBBZGRp
dGlvbmFsbHkgcmVmYWN0b3IgdGhpcyBtZXRob2Qgc28gdGhhdCBpdCBpcyBub3cgYSBwcml2YXRl
IG1ldGhvZCB0aGF0IGFwcGVuZHMgdG8gYG1fZGlzcGxheUxpc3RgLCBpbnN0ZWFkIG9mCisgICAg
ICAgIHJldHVybmluZyBhIGRpc3BsYXkgbGlzdCBpdGVtIHRvIGJlIGFwcGVuZGVkLiBUaGlzIHdp
bGwgYmVjb21lIGltcG9ydGFudCBpbiBhIGZ1dHVyZSBwYXRjaCwgd2hpY2ggd2lsbCByZXBsYWNl
CisgICAgICAgIHRoZSBleGlzdGluZyBgYXBwZW5kYCBtZXRob2Qgd2l0aCBhIHRlbXBsYXRlZCB2
ZXJzaW9uIHRoYXQgdGFrZXMgdGhlIGRpc3BsYXkgbGlzdCBpdGVtIHR5cGUgYXMgYSB0ZW1wbGF0
ZQorICAgICAgICBhcmd1bWVudC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmg6CisKIDIwMjAtMTAtMjcgIENocmlzIER1bWV6
ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBdWRpb0NvbnRleHQuc3VzcGVuZCgpIHNo
b3VsZCBub3QgcmVqZWN0IHByb21pc2Ugd2hlbiBhdWRpbyBzZXNzaW9uIGlzIGludGVycnVwdGVk
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCmluZGV4IDU1NDMxNTQx
ZTM2NDZjZTlmODE3MDRjODQwM2U3OTM5M2Y0NGY4Y2MuLmNlZDcxMmEyM2ViYzhmMmFhMWYyOWMz
MGQxZjBjYTg3ZTE0OGRlM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bh
dGguY3BwCkBAIC0yMzAsNyArMjMwLDcgQEAgYm9vbCBQYXRoOjppc0VtcHR5KCkgY29uc3QKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKLSAgICBp
ZiAoaGFzQW55SW5saW5lRGF0YSgpKQorICAgIGlmIChoYXNJbmxpbmVEYXRhKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICNlbmRpZgogCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBQYXRoOjph
ZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQsIGNvbnN0IEZsb2F0
UG9pbnQmIGVuZFAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKICAgICBpZiAoaXNOdWxs
KCkgfHwgaGFzSW5saW5lRGF0YTxNb3ZlRGF0YT4oKSkgewogICAgICAgICBRdWFkQ3VydmVEYXRh
IGN1cnZlOwotICAgICAgICBjdXJ2ZS5zdGFydFBvaW50ID0gaGFzQW55SW5saW5lRGF0YSgpID8g
V1RGOjpnZXQ8TW92ZURhdGE+KG1faW5saW5lRGF0YSkubG9jYXRpb24gOiBGbG9hdFBvaW50KCk7
CisgICAgICAgIGN1cnZlLnN0YXJ0UG9pbnQgPSBoYXNJbmxpbmVEYXRhKCkgPyBXVEY6OmdldDxN
b3ZlRGF0YT4obV9pbmxpbmVEYXRhKS5sb2NhdGlvbiA6IEZsb2F0UG9pbnQoKTsKICAgICAgICAg
Y3VydmUuY29udHJvbFBvaW50ID0gY29udHJvbFBvaW50OwogICAgICAgICBjdXJ2ZS5lbmRQb2lu
dCA9IGVuZFBvaW50OwogICAgICAgICBtX2lubGluZURhdGEgPSB7IFdURk1vdmUoY3VydmUpIH07
CkBAIC0zNjQsNyArMzY0LDcgQEAgdm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZs
b2F0UG9pbnQmIGNvbnRyb2xQb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIGMKICNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKICAgICBpZiAoaXNOdWxsKCkgfHwgaGFzSW5saW5lRGF0YTxNb3Zl
RGF0YT4oKSkgewogICAgICAgICBCZXppZXJDdXJ2ZURhdGEgY3VydmU7Ci0gICAgICAgIGN1cnZl
LnN0YXJ0UG9pbnQgPSBoYXNBbnlJbmxpbmVEYXRhKCkgPyBXVEY6OmdldDxNb3ZlRGF0YT4obV9p
bmxpbmVEYXRhKS5sb2NhdGlvbiA6IEZsb2F0UG9pbnQoKTsKKyAgICAgICAgY3VydmUuc3RhcnRQ
b2ludCA9IGhhc0lubGluZURhdGEoKSA/IFdURjo6Z2V0PE1vdmVEYXRhPihtX2lubGluZURhdGEp
LmxvY2F0aW9uIDogRmxvYXRQb2ludCgpOwogICAgICAgICBjdXJ2ZS5jb250cm9sUG9pbnQxID0g
Y29udHJvbFBvaW50MTsKICAgICAgICAgY3VydmUuY29udHJvbFBvaW50MiA9IGNvbnRyb2xQb2lu
dDI7CiAgICAgICAgIGN1cnZlLmVuZFBvaW50ID0gZW5kUG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXRoLmgKaW5kZXggZTZkZWE0YzQ5MjA0NzEzMTM5MGQwYzY0ZDY4ZDg2
NDdmMzM1ZTUxNi4uZTVmZTc4MjE0ZmYzYjUyOGM2OTA3MTI1YzgwYjEzMWYwNDFlY2NjYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaApAQCAtMTMzLDYgKzEzMywxNSBA
QCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgUGF0aCYgb3BlcmF0b3I9KGNvbnN0IFBhdGgm
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBQYXRoJiBvcGVyYXRvcj0oUGF0aCYmKTsKIAorI2lmIEVO
QUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIHN0YXRpYyBQYXRoIGZyb20oY29uc3QgSW5saW5l
UGF0aERhdGEmIGlubGluZURhdGEpCisgICAgeworICAgICAgICBQYXRoIHBhdGg7CisgICAgICAg
IHBhdGgubV9pbmxpbmVEYXRhID0gaW5saW5lRGF0YTsKKyAgICAgICAgcmV0dXJuIHBhdGg7Cisg
ICAgfQorI2VuZGlmCisKICAgICBzdGF0aWMgUGF0aCBwb2x5Z29uUGF0aEZyb21Qb2ludHMoY29u
c3QgVmVjdG9yPEZsb2F0UG9pbnQ+Jik7CiAKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpOb25aZXJvKSBjb25zdDsKQEAgLTE5NiwxNyAr
MjA1LDYgQEAgcHVibGljOgogICAgIFBsYXRmb3JtUGF0aFB0ciBwbGF0Zm9ybVBhdGgoKSBjb25z
dCB7IHJldHVybiBtX3BhdGg7IH0KICNlbmRpZgogCi0gICAgdm9pZCByZWxlYXNlUGxhdGZvcm1Q
YXRoSWZQb3NzaWJsZSgpIGNvbnN0Ci0gICAgewotI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQotICAgICAgICBpZiAoIWhhc0FueUlubGluZURhdGEoKSB8fCAhbV9wYXRoKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIG1fcGF0aCA9IG51bGxwdHI7Ci0gICAgICAgIG1fY29weVBh
dGhCZWZvcmVNdXRhdGlvbiA9IGZhbHNlOwotI2VuZGlmCi0gICAgfQotCiAjaWYgIVVTRShDQUlS
TykKICAgICAvLyBlbnN1cmVQbGF0Zm9ybVBhdGgoKSB3aWxsIGFsbG9jYXRlIGEgUGxhdGZvcm1Q
YXRoIGlmIGl0IGhhcyBub3QgeWV0IGJlZW4gYW5kIHdpbGwgbmV2ZXIgcmV0dXJuIG51bGwuCiAg
ICAgV0VCQ09SRV9FWFBPUlQgUGxhdGZvcm1QYXRoUHRyIGVuc3VyZVBsYXRmb3JtUGF0aCgpOwpA
QCAtMjQ2LDEyICsyNDQsMTMgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RB
VEEpCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0YVR5cGU+IGNvbnN0IERhdGFUeXBlJiBpbmxp
bmVEYXRhKCkgY29uc3Q7CisgICAgSW5saW5lUGF0aERhdGEgaW5saW5lRGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5saW5lRGF0YTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIERhdGFUeXBlPiBi
b29sIGhhc0lubGluZURhdGEoKSBjb25zdDsKKyAgICBib29sIGhhc0lubGluZURhdGEoKSBjb25z
dDsKICNlbmRpZgogCiBwcml2YXRlOgogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAg
IGJvb2wgaGFzQW55SW5saW5lRGF0YSgpIGNvbnN0OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIERh
dGFUeXBlPiBEYXRhVHlwZSYgaW5saW5lRGF0YSgpOwogICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
ZmFzdEJvdW5kaW5nUmVjdEZyb21JbmxpbmVEYXRhKCkgY29uc3Q7CiAgICAgT3B0aW9uYWw8Rmxv
YXRSZWN0PiBib3VuZGluZ1JlY3RGcm9tSW5saW5lRGF0YSgpIGNvbnN0OwpAQCAtMzA4LDcgKzMw
Nyw3IEBAIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25z
dCBQYXRoJik7CiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIFBhdGg6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAogewogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAg
IGJvb2wgaGFzSW5saW5lRGF0YSA9IGhhc0FueUlubGluZURhdGEoKTsKKyAgICBib29sIGhhc0lu
bGluZURhdGEgPSB0aGlzLT5oYXNJbmxpbmVEYXRhKCk7CiAgICAgZW5jb2RlciA8PCBoYXNJbmxp
bmVEYXRhOwogICAgIGlmIChoYXNJbmxpbmVEYXRhKSB7CiAgICAgICAgIGVuY29kZXIgPDwgbV9p
bmxpbmVEYXRhOwpAQCAtNDQwLDcgKzQzOSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIERhdGFUeXBl
PiBpbmxpbmUgRGF0YVR5cGUmIFBhdGg6OmlubGluZURhdGEoKQogICAgIHJldHVybiBXVEY6Omdl
dDxEYXRhVHlwZT4obV9pbmxpbmVEYXRhKTsKIH0KIAotaW5saW5lIGJvb2wgUGF0aDo6aGFzQW55
SW5saW5lRGF0YSgpIGNvbnN0CitpbmxpbmUgYm9vbCBQYXRoOjpoYXNJbmxpbmVEYXRhKCkgY29u
c3QKIHsKICAgICByZXR1cm4gIWhhc0lubGluZURhdGE8TW9ub3N0YXRlPigpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKaW5kZXggMmNhNzM1
MGI0YWQ5M2IyMjM0YTFiMzMwNTBkMWQ5YzlmN2NjMDRjMi4uNWJhNDhmNzJkMjljNTFmMmRlODFl
ZTZlOTI2YzQ4NjJmOTA4MmQ4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUGF0aENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwCkBAIC0xMjUsNyArMTI1LDcgQEAgUGF0aDo6flBhdGgoKSA9IGRl
ZmF1bHQ7CiAKIFBsYXRmb3JtUGF0aFB0ciBQYXRoOjpwbGF0Zm9ybVBhdGgoKSBjb25zdAogewot
ICAgIGlmICghbV9wYXRoICYmIGhhc0FueUlubGluZURhdGEoKSkKKyAgICBpZiAoIW1fcGF0aCAm
JiBoYXNJbmxpbmVEYXRhKCkpCiAgICAgICAgIGNyZWF0ZUNHUGF0aCgpOwogICAgIHJldHVybiBt
X3BhdGguZ2V0KCk7CiB9CkBAIC0xNDQsNyArMTQ0LDcgQEAgUGxhdGZvcm1QYXRoUHRyIFBhdGg6
OmVuc3VyZVBsYXRmb3JtUGF0aCgpCiAKIGJvb2wgUGF0aDo6aXNOdWxsKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gIW1fcGF0aCAmJiAhaGFzQW55SW5saW5lRGF0YSgpOworICAgIHJldHVybiAhbV9w
YXRoICYmICFoYXNJbmxpbmVEYXRhKCk7CiB9CiAKIFBhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3Ro
ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmluZGV4IDUwNmRhYmFiMGI4YjRiNzMxNDc2YmRmOWYz
MDk1NjcyYjkxMmVmMTkuLjg4MTA4ZDFmN2UzMTI5YmE1MzAyMTAxYTQ0MDczODU1NzUwNmE4N2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCkBAIC00Nyw4ICs0NywxMCBAQCBlbnVtIGNsYXNzIEl0
ZW1UeXBlIDogdWludDhfdCB7CiAgICAgU2NhbGUsCiAgICAgQ29uY2F0ZW5hdGVDVE0sCiAgICAg
U2V0Q1RNLAotICAgIFNldEZpbGxDb2xvciwKLSAgICBTZXRTdHJva2VTdGF0ZSwKKyAgICBTZXRJ
bmxpbmVGaWxsR3JhZGllbnQsCisgICAgU2V0SW5saW5lRmlsbENvbG9yLAorICAgIFNldElubGlu
ZVN0cm9rZUNvbG9yLAorICAgIFNldFN0cm9rZVRoaWNrbmVzcywKICAgICBTZXRTdGF0ZSwKICAg
ICBTZXRMaW5lQ2FwLAogICAgIFNldExpbmVEYXNoLApAQCAtODAsMTEgKzgyLDE3IEBAIGVudW0g
Y2xhc3MgSXRlbVR5cGUgOiB1aW50OF90IHsKICAgICBGaWxsQ29tcG9zaXRlZFJlY3QsCiAgICAg
RmlsbFJvdW5kZWRSZWN0LAogICAgIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlLAorI2lmIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQorICAgIEZpbGxJbmxpbmVQYXRoLAorI2VuZGlmCiAgICAgRmls
bFBhdGgsCiAgICAgRmlsbEVsbGlwc2UsCiAgICAgUHV0SW1hZ2VEYXRhLAogICAgIFBhaW50RnJh
bWVGb3JNZWRpYSwKICAgICBTdHJva2VSZWN0LAorI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQorICAgIFN0cm9rZUlubGluZVBhdGgsCisjZW5kaWYKICAgICBTdHJva2VQYXRoLAogICAgIFN0
cm9rZUVsbGlwc2UsCiAgICAgQ2xlYXJSZWN0LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuY3BwCmluZGV4IDhkOGIyODE5Mzg3NWMzMTY2ZjgxZWQwOGUzZDkyOTk2MWY3Yjg3MTYuLjZk
YTFkOTUxMzViZjAxZmJlM2FlMDNmMzgwMjQ0MjkwNzFmMmViOTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtcy5jcHAKQEAgLTc2LDEwICs3NiwxNCBAQCBzaXplX3QgSXRlbTo6c2l6
ZUluQnl0ZXMoY29uc3QgSXRlbSYgaXRlbSkKICAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2Fz
dDxTZXRDVE0+KGl0ZW0pKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTToKICAg
ICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4oaXRlbSkpOwotICAg
IGNhc2UgSXRlbVR5cGU6OlNldEZpbGxDb2xvcjoKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3du
Y2FzdDxTZXRGaWxsQ29sb3I+KGl0ZW0pKTsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VT
dGF0ZToKLSAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRTdHJva2VTdGF0ZT4oaXRl
bSkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDoKKyAgICAgICAg
cmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+KGl0ZW0pKTsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CisgICAgICAgIHJldHVybiBzaXpl
b2YoZG93bmNhc3Q8U2V0SW5saW5lRmlsbENvbG9yPihpdGVtKSk7CisgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8
U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJv
a2VUaGlja25lc3M6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U2V0U3Ryb2tlVGhp
Y2tuZXNzPihpdGVtKSk7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHJl
dHVybiBzaXplb2YoZG93bmNhc3Q8U2V0U3RhdGU+KGl0ZW0pKTsKICAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRMaW5lQ2FwOgpAQCAtMTQyLDYgKzE0NiwxMCBAQCBzaXplX3QgSXRlbTo6c2l6ZUluQnl0
ZXMoY29uc3QgSXRlbSYgaXRlbSkKICAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxs
Um91bmRlZFJlY3Q+KGl0ZW0pKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZToKICAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZT4oaXRlbSkpOworI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2Ug
SXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgorICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0
PEZpbGxJbmxpbmVQYXRoPihpdGVtKSk7CisjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxs
UGF0aDoKICAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxGaWxsUGF0aD4oaXRlbSkpOwog
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOgpAQCAtMTUyLDYgKzE2MCwxMCBAQCBzaXpl
X3QgSXRlbTo6c2l6ZUluQnl0ZXMoY29uc3QgSXRlbSYgaXRlbSkKICAgICAgICAgcmV0dXJuIHNp
emVvZihkb3duY2FzdDxQYWludEZyYW1lRm9yTWVkaWE+KGl0ZW0pKTsKICAgICBjYXNlIEl0ZW1U
eXBlOjpTdHJva2VSZWN0OgogICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFN0cm9rZVJl
Y3Q+KGl0ZW0pKTsKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1U
eXBlOjpTdHJva2VJbmxpbmVQYXRoOgorICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFN0
cm9rZUlubGluZVBhdGg+KGl0ZW0pKTsKKyNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9r
ZVBhdGg6CiAgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ryb2tlUGF0aD4oaXRlbSkp
OwogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUVsbGlwc2U6CkBAIC0zMjAsNDYgKzMzMiwxMjcg
QEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENv
bmNhdGVuYXRlQ1RNJiBpdGVtKQogICAgIHJldHVybiB0czsKIH0KIAotUmVmPFNldEZpbGxDb2xv
cj4gU2V0RmlsbENvbG9yOjpjcmVhdGUoQ29sb3IgY29sb3IpCitTZXRJbmxpbmVGaWxsR3JhZGll
bnQ6OlNldElubGluZUZpbGxHcmFkaWVudChjb25zdCBHcmFkaWVudCYgZ3JhZGllbnQpCisgICAg
OiBJdGVtKEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQpCisgICAgLCBtX2RhdGEoZ3Jh
ZGllbnQuZGF0YSgpKQorICAgICwgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24oZ3JhZGll
bnQuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKQorICAgICwgbV9zcHJlYWRNZXRob2QoZ3JhZGll
bnQuc3ByZWFkTWV0aG9kKCkpCisgICAgLCBtX2NvbG9yU3RvcENvdW50KHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KGdyYWRpZW50LnN0b3BzKCkuc2l6ZSgpKSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCht
X2NvbG9yU3RvcENvdW50IDw9IG1heENvbG9yU3RvcENvdW50KTsKKyAgICBmb3IgKHVpbnQ4X3Qg
aSA9IDA7IGkgPCBtX2NvbG9yU3RvcENvdW50OyArK2kpIHsKKyAgICAgICAgbV9vZmZzZXRzW2ld
ID0gZ3JhZGllbnQuc3RvcHMoKVtpXS5vZmZzZXQ7CisgICAgICAgIG1fY29sb3JzW2ldID0gZ3Jh
ZGllbnQuc3RvcHMoKVtpXS5jb2xvci5hc0lubGluZSgpOworICAgIH0KK30KKworUmVmPEdyYWRp
ZW50PiBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmdyYWRpZW50KCkgY29uc3QKK3sKKyAgICBhdXRv
IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6RGF0YShtX2RhdGEpKTsKKyAg
ICBncmFkaWVudC0+c2V0U3ByZWFkTWV0aG9kKG1fc3ByZWFkTWV0aG9kKTsKKyAgICBncmFkaWVu
dC0+c2V0R3JhZGllbnRTcGFjZVRyYW5zZm9ybShtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlv
bik7CisgICAgZm9yICh1aW50OF90IGkgPSAwOyBpIDwgbV9jb2xvclN0b3BDb3VudDsgKytpKQor
ICAgICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wKHsgbV9vZmZzZXRzW2ldLCBDb2xvcihtX2Nv
bG9yc1tpXSkgfSk7CisgICAgcmV0dXJuIGdyYWRpZW50OworfQorCitSZWY8U2V0SW5saW5lRmls
bEdyYWRpZW50PiBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmNyZWF0ZShjb25zdCBHcmFkaWVudCYg
Z3JhZGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0SW5saW5lRmlsbEdyYWRp
ZW50KGdyYWRpZW50KSk7Cit9CisKK1NldElubGluZUZpbGxHcmFkaWVudDo6U2V0SW5saW5lRmls
bEdyYWRpZW50KGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRdLCBTUkdCQTx1aW50OF90
PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdLCBjb25zdCBHcmFkaWVudDo6RGF0YSYgZGF0YSwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24sIEdyYWRp
ZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCwgdWludDhfdCBjb2xvclN0b3BDb3VudCkKKyAg
ICA6IEl0ZW0oSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudCkKKyAgICAsIG1fZGF0YShk
YXRhKQorICAgICwgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24oZ3JhZGllbnRTcGFjZVRy
YW5zZm9ybWF0aW9uKQorICAgICwgbV9zcHJlYWRNZXRob2Qoc3ByZWFkTWV0aG9kKQorICAgICwg
bV9jb2xvclN0b3BDb3VudChjb2xvclN0b3BDb3VudCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCht
X2NvbG9yU3RvcENvdW50IDw9IG1heENvbG9yU3RvcENvdW50KTsKKyAgICBmb3IgKHVpbnQ4X3Qg
aSA9IDA7IGkgPCBtX2NvbG9yU3RvcENvdW50OyArK2kpIHsKKyAgICAgICAgbV9vZmZzZXRzW2ld
ID0gb2Zmc2V0c1tpXTsKKyAgICAgICAgbV9jb2xvcnNbaV0gPSBjb2xvcnNbaV07CisgICAgfQor
fQorCitTZXRJbmxpbmVGaWxsR3JhZGllbnQ6On5TZXRJbmxpbmVGaWxsR3JhZGllbnQoKSA9IGRl
ZmF1bHQ7CisKK3ZvaWQgU2V0SW5saW5lRmlsbEdyYWRpZW50OjphcHBseShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKG1fY29sb3JTdG9wQ291bnQgPD0gbWF4Q29s
b3JTdG9wQ291bnQpCisgICAgICAgIGNvbnRleHQuc2V0RmlsbEdyYWRpZW50KGdyYWRpZW50KCkp
OworfQorCitib29sIFNldElubGluZUZpbGxHcmFkaWVudDo6aXNJbmxpbmUoY29uc3QgR3JhZGll
bnQmIGdyYWRpZW50KQoreworICAgIGlmIChncmFkaWVudC5zdG9wcygpLnNpemUoKSA+IFNldElu
bGluZUZpbGxHcmFkaWVudDo6bWF4Q29sb3JTdG9wQ291bnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGZvciAoYXV0byYgY29sb3JTdG9wIDogZ3JhZGllbnQuc3RvcHMoKSkgeworICAg
ICAgICBpZiAoIWNvbG9yU3RvcC5jb2xvci5pc0lubGluZSgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0SW5saW5lRmlsbEdyYWRpZW50
JikKK3sKKyAgICAvLyBGSVhNRTogRHVtcCBncmFkaWVudCBkYXRhLgorICAgIHJldHVybiB0czsK
K30KKworUmVmPFNldElubGluZUZpbGxDb2xvcj4gU2V0SW5saW5lRmlsbENvbG9yOjpjcmVhdGUo
U1JHQkE8dWludDhfdD4gY29sb3JEYXRhKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNl
dEZpbGxDb2xvcihjb2xvcikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldElubGluZUZp
bGxDb2xvcihjb2xvckRhdGEpKTsKIH0KIAotU2V0RmlsbENvbG9yOjp+U2V0RmlsbENvbG9yKCkg
PSBkZWZhdWx0OworU2V0SW5saW5lRmlsbENvbG9yOjp+U2V0SW5saW5lRmlsbENvbG9yKCkgPSBk
ZWZhdWx0OwogCi12b2lkIFNldEZpbGxDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAordm9pZCBTZXRJbmxpbmVGaWxsQ29sb3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIHsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcihtX2NvbG9yKTsK
KyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihjb2xvcigpKTsKIH0KIAotc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldEZpbGxDb2xvciYgc3RhdGUp
CitzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0
SW5saW5lRmlsbENvbG9yJiBzdGF0ZSkKIHsKICAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwg
c3RhdGUuY29sb3IoKSk7CiAgICAgcmV0dXJuIHRzOwogfQogCi1SZWY8U2V0U3Ryb2tlU3RhdGU+
IFNldFN0cm9rZVN0YXRlOjpjcmVhdGUoT3B0aW9uYWw8Q29sb3I+JiYgY29sb3IsIE9wdGlvbmFs
PGZsb2F0PiYmIHRoaWNrbmVzcykKK1JlZjxTZXRJbmxpbmVTdHJva2VDb2xvcj4gU2V0SW5saW5l
U3Ryb2tlQ29sb3I6OmNyZWF0ZShTUkdCQTx1aW50OF90PiBjb2xvckRhdGEpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2V0SW5saW5lU3Ryb2tlQ29sb3IoY29sb3JEYXRhKSk7Cit9CisK
K1NldElubGluZVN0cm9rZUNvbG9yOjp+U2V0SW5saW5lU3Ryb2tlQ29sb3IoKSA9IGRlZmF1bHQ7
CisKK3ZvaWQgU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkgY29uc3QKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRTdHJva2VTdGF0ZShX
VEZNb3ZlKGNvbG9yKSwgV1RGTW92ZSh0aGlja25lc3MpKSk7CisgICAgY29udGV4dC5zZXRTdHJv
a2VDb2xvcihjb2xvcigpKTsKIH0KIAotU2V0U3Ryb2tlU3RhdGU6On5TZXRTdHJva2VTdGF0ZSgp
ID0gZGVmYXVsdDsKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBTZXRJbmxpbmVTdHJva2VDb2xvciYgc3RhdGUpCit7CisgICAgdHMuZHVtcFByb3Bl
cnR5KCJjb2xvciIsIHN0YXRlLmNvbG9yKCkpOworICAgIHJldHVybiB0czsKK30KIAotdm9pZCBT
ZXRTdHJva2VTdGF0ZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAorUmVm
PFNldFN0cm9rZVRoaWNrbmVzcz4gU2V0U3Ryb2tlVGhpY2tuZXNzOjpjcmVhdGUoZmxvYXQgdGhp
Y2tuZXNzKQogewotICAgIGlmIChtX2hhc0NvbG9yKQotICAgICAgICBjb250ZXh0LnNldFN0cm9r
ZUNvbG9yKG1fY29sb3IpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldFN0cm9rZVRoaWNr
bmVzcyh0aGlja25lc3MpKTsKK30KIAotICAgIGlmIChtX2hhc1RoaWNrbmVzcykKLSAgICAgICAg
Y29udGV4dC5zZXRTdHJva2VUaGlja25lc3MobV90aGlja25lc3MpOworU2V0U3Ryb2tlVGhpY2tu
ZXNzOjp+U2V0U3Ryb2tlVGhpY2tuZXNzKCkgPSBkZWZhdWx0OworCit2b2lkIFNldFN0cm9rZVRo
aWNrbmVzczo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIGNv
bnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG1fdGhpY2tuZXNzKTsKIH0KIAotc3RhdGljIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNldFN0cm9rZVN0YXRlJiBz
dGF0ZSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBTZXRTdHJva2VUaGlja25lc3MmIHN0YXRlKQogewotICAgIGlmIChzdGF0ZS5oYXNDb2xvcigp
KQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImNvbG9yIiwgc3RhdGUuY29sb3IoKSk7Ci0gICAg
aWYgKHN0YXRlLmhhc1RoaWNrbmVzcygpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInRoaWNr
bmVzcyIsIHN0YXRlLnRoaWNrbmVzcygpKTsKKyAgICB0cy5kdW1wUHJvcGVydHkoInRoaWNrbmVz
cyIsIHN0YXRlLnRoaWNrbmVzcygpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKQEAgLTExNjUsNiAr
MTI1OCwzMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUmIGl0ZQogICAgIHJldHVybiB0czsKIH0KIAor
I2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorCitGaWxsSW5saW5lUGF0aDo6RmlsbElubGlu
ZVBhdGgoY29uc3QgSW5saW5lUGF0aERhdGEmIHBhdGhEYXRhKQorICAgIDogRHJhd2luZ0l0ZW0o
SXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoKQorICAgICwgbV9wYXRoRGF0YShwYXRoRGF0YSkKK3sK
K30KKworRmlsbElubGluZVBhdGg6On5GaWxsSW5saW5lUGF0aCgpID0gZGVmYXVsdDsKKwordm9p
ZCBGaWxsSW5saW5lUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAor
eworICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCgpKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxJbmxpbmVQYXRoJiBpdGVtKQor
eworICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisgICAg
dHMuZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOworICAgIHJldHVybiB0czsKK30K
KworI2VuZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorCiBGaWxsUGF0aDo6RmlsbFBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpGaWxsUGF0
aCkKICAgICAsIG1fcGF0aChwYXRoKQpAQCAtMTE3Niw3ICsxMjkzLDYgQEAgRmlsbFBhdGg6On5G
aWxsUGF0aCgpID0gZGVmYXVsdDsKIHZvaWQgRmlsbFBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250ZXh0LmZpbGxQYXRoKG1fcGF0aCk7Ci0gICAg
bV9wYXRoLnJlbGVhc2VQbGF0Zm9ybVBhdGhJZlBvc3NpYmxlKCk7CiB9CiAKIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBGaWxsUGF0aCYgaXRlbSkK
QEAgLTEzMjYsNyArMTQ0Miw2IEBAIE9wdGlvbmFsPEZsb2F0UmVjdD4gU3Ryb2tlUGF0aDo6bG9j
YWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zCiB2b2lkIFN0cm9r
ZVBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBjb250
ZXh0LnN0cm9rZVBhdGgobV9wYXRoKTsKLSAgICBtX3BhdGgucmVsZWFzZVBsYXRmb3JtUGF0aElm
UG9zc2libGUoKTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFN0cm9rZVBhdGgmIGl0ZW0pCkBAIC0xMzY1LDYgKzE0ODAsNDAgQEAgc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZUVs
bGlwc2UmIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCisjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCisKK09wdGlvbmFsPEZsb2F0UmVjdD4gU3Ryb2tlSW5saW5lUGF0aDo6bG9jYWxCb3Vu
ZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAoreworICAgIC8vIEZJWE1F
OiBOZWVkIHRvIHRha2Ugc3Ryb2tlIHRoaWNrbmVzcyBpbnRvIGFjY291bnQgY29ycmVjdGx5LCB2
aWEgQ0dQYXRoQnlTdHJva2luZ1BhdGgoKS4KKyAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgPSBj
b250ZXh0LnN0cm9rZVRoaWNrbmVzcygpOworCisgICAgRmxvYXRSZWN0IGJvdW5kcyA9IHBhdGgo
KS5mYXN0Qm91bmRpbmdSZWN0KCk7CisgICAgYm91bmRzLmV4cGFuZChzdHJva2VUaGlja25lc3Ms
IHN0cm9rZVRoaWNrbmVzcyk7CisgICAgcmV0dXJuIGJvdW5kczsKK30KKwordm9pZCBTdHJva2VJ
bmxpbmVQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAg
Y29udGV4dC5zdHJva2VQYXRoKHBhdGgoKSk7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTdHJva2VJbmxpbmVQYXRoJiBpdGVtKQorewor
ICAgIHRzIDw8IHN0YXRpY19jYXN0PGNvbnN0IERyYXdpbmdJdGVtJj4oaXRlbSk7CisgICAgdHMu
ZHVtcFByb3BlcnR5KCJwYXRoIiwgaXRlbS5wYXRoKCkpOworICAgIHJldHVybiB0czsKK30KKwor
U3Ryb2tlSW5saW5lUGF0aDo6U3Ryb2tlSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYg
cGF0aERhdGEpCisgICAgOiBEcmF3aW5nSXRlbShJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aCkK
KyAgICAsIG1fcGF0aERhdGEocGF0aERhdGEpCit7Cit9CisKK1N0cm9rZUlubGluZVBhdGg6On5T
dHJva2VJbmxpbmVQYXRoKCkgPSBkZWZhdWx0OworCisjZW5kaWYgLy8gRU5BQkxFKElOTElORV9Q
QVRIX0RBVEEpCisKIFN0cm9rZVBhdGg6OlN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAg
ICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VQYXRoKQogICAgICwgbV9wYXRoKHBhdGgp
CkBAIC0xNDgwLDggKzE2MjksMTAgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW1UeXBlJiB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OlNj
YWxlOiB0cyA8PCAic2NhbGUiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRDVE06IHRz
IDw8ICJzZXQtY3RtIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06
IHRzIDw8ICJjb25jYXRlbnRhdGUtY3RtIjsgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
RmlsbENvbG9yOiB0cyA8PCAic2V0LWZpbGwtY29sb3IiOyBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRTdHJva2VTdGF0ZTogdHMgPDwgInNldC1zdHJva2Utc3RhdGUiOyBicmVhazsKKyAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6IHRzIDw8ICJzZXQtaW5saW5l
LWZpbGwtZ3JhZGllbnQiOyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxs
Q29sb3I6IHRzIDw8ICJzZXQtaW5saW5lLWZpbGwtY29sb3IiOyBicmVhazsKKyAgICBjYXNlIEl0
ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjogdHMgPDwgInNldC1pbmxpbmUtc3Ryb2tlLWNv
bG9yIjsgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzOiB0cyA8
PCAic2V0LXN0cm9rZS10aGlja25lc3MiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRT
dGF0ZTogdHMgPDwgInNldC1zdGF0ZSI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldExp
bmVDYXA6IHRzIDw8ICJzZXQtbGluZS1jYXAiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRMaW5lRGFzaDogdHMgPDwgInNldC1saW5lLWRhc2giOyBicmVhazsKQEAgLTE1MTIsMTEgKzE2
NjMsMTcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IEl0ZW1UeXBlJiB0eXBlKQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxDb21wb3NpdGVkUmVj
dDogdHMgPDwgImZpbGwtY29tcG9zaXRlZC1yZWN0IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlw
ZTo6RmlsbFJvdW5kZWRSZWN0OiB0cyA8PCAiZmlsbC1yb3VuZGVkLXJlY3QiOyBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTogdHMgPDwgImZpbGwtcmVj
dC13aXRoLXJvdW5kZWQtaG9sZSI7IGJyZWFrOworI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOiB0cyA8PCAiZmlsbC1pbmxpbmUt
cGF0aCI7IGJyZWFrOworI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6IHRzIDw8
ICJmaWxsLXBhdGgiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsRWxsaXBzZTogdHMg
PDwgImZpbGwtZWxsaXBzZSI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlB1dEltYWdlRGF0
YTogdHMgPDwgInB1dC1pbWFnZS1kYXRhIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6UGFp
bnRGcmFtZUZvck1lZGlhOiB0cyA8PCAicGFpbnQtZnJhbWUtZm9yLW1lZGlhIjsgYnJlYWs7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDogdHMgPDwgInN0cm9rZS1yZWN0IjsgYnJlYWs7
CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tl
SW5saW5lUGF0aDogdHMgPDwgInN0cm9rZS1pbmxpbmUtcGF0aCI7IGJyZWFrOworI2VuZGlmCiAg
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDogdHMgPDwgInN0cm9rZS1wYXRoIjsgYnJlYWs7
CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZTogdHMgPDwgInN0cm9rZS1lbGxpcHNl
IjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6Q2xlYXJSZWN0OiB0cyA8PCAiY2xlYXItcmVj
dCI7IGJyZWFrOwpAQCAtMTU1NCwxMSArMTcxMSwxNyBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBJdGVtJiBpdGVtKQogICAgIGNhc2UgSXRlbVR5cGU6OkNv
bmNhdGVuYXRlQ1RNOgogICAgICAgICB0cyA8PCBkb3duY2FzdDxDb25jYXRlbmF0ZUNUTT4oaXRl
bSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldEZpbGxDb2xvcjoKLSAg
ICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0RmlsbENvbG9yPihpdGVtKTsKKyAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6CisgICAgICAgIHRzIDw8IGRvd25jYXN0PFNldElu
bGluZUZpbGxHcmFkaWVudD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OlNldElubGluZUZpbGxDb2xvcjoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0SW5saW5l
RmlsbENvbG9yPihpdGVtKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0
U3Ryb2tlU3RhdGU6Ci0gICAgICAgIHRzIDw8IGRvd25jYXN0PFNldFN0cm9rZVN0YXRlPihpdGVt
KTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKKyAgICAgICAgdHMg
PDwgZG93bmNhc3Q8U2V0SW5saW5lU3Ryb2tlQ29sb3I+KGl0ZW0pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CisgICAgICAgIHRzIDw8IGRv
d25jYXN0PFNldFN0cm9rZVRoaWNrbmVzcz4oaXRlbSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRTdGF0ZT4o
aXRlbSk7CkBAIC0xNjUwLDYgKzE4MTMsMTEgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgSXRlbSYgaXRlbSkKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZToKICAgICAgICAgdHMgPDwgZG93bmNhc3Q8RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGU+KGl0ZW0pOwogICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKKyAgICAgICAgdHMgPDwg
ZG93bmNhc3Q8RmlsbElubGluZVBhdGg+KGl0ZW0pOworICAgICAgICBicmVhazsKKyNlbmRpZgog
ICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRoOgogICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxs
UGF0aD4oaXRlbSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTY2NSw2ICsxODMzLDExIEBAIFRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW0mIGl0ZW0pCiAgICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKICAgICAgICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tl
UmVjdD4oaXRlbSk7CiAgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6CisgICAgICAgIHRzIDw8IGRv
d25jYXN0PFN0cm9rZUlubGluZVBhdGg+KGl0ZW0pOworICAgICAgICBicmVhazsKKyNlbmRpZgog
ICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZVBhdGg6CiAgICAgICAgIHRzIDw8IGRvd25jYXN0PFN0
cm9rZVBhdGg+KGl0ZW0pOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtcy5oCmluZGV4IGQ0Y2E5OGU2NDg0NTFiMjZjYmY2NDk4MzViMWRhMmYzYzIzYjRhZmYuLjc5
MGZlZDBkOTZkNTRkMTQ1N2EzZjFkNzdkZGU3NWVjNTE3NzFiODEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuaApAQCAtMzM2LDExOSArMzM2LDIxOSBAQCBPcHRpb25hbDxSZWY8Q29u
Y2F0ZW5hdGVDVE0+PiBDb25jYXRlbmF0ZUNUTTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAg
ICAgcmV0dXJuIENvbmNhdGVuYXRlQ1RNOjpjcmVhdGUoKnRyYW5zZm9ybSk7CiB9CiAKLWNsYXNz
IFNldEZpbGxDb2xvciA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNldElubGluZUZpbGxHcmFkaWVu
dCA6IHB1YmxpYyBJdGVtIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVm
PFNldEZpbGxDb2xvcj4gY3JlYXRlKENvbG9yKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4
X3QgbWF4Q29sb3JTdG9wQ291bnQgPSA0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
U2V0RmlsbENvbG9yKCk7CisgICAgc3RhdGljIFJlZjxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+IGNy
ZWF0ZShjb25zdCBHcmFkaWVudCYpOworICAgIHN0YXRpYyBib29sIGlzSW5saW5lKGNvbnN0IEdy
YWRpZW50Jik7CiAKLSAgICBDb2xvciBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0K
KyAgICB2aXJ0dWFsIH5TZXRJbmxpbmVGaWxsR3JhZGllbnQoKTsKKworICAgIFJlZjxHcmFkaWVu
dD4gZ3JhZGllbnQoKSBjb25zdDsKIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8UmVmPFNldEZpbGxDb2xvcj4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTZXRJbmxpbmVGaWxsR3Jh
ZGllbnQ+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIFNldEZpbGxDb2xvcihD
b2xvciBjb2xvcikKLSAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRGaWxsQ29sb3IpCi0gICAg
ICAgICwgbV9jb2xvcihjb2xvcikKKyAgICBzdGF0aWMgUmVmPFNldElubGluZUZpbGxHcmFkaWVu
dD4gY3JlYXRlKGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRdLCBTUkdCQTx1aW50OF90
PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdLAorICAgICAgICBjb25zdCBHcmFkaWVudDo6RGF0
YSYgZGF0YSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRp
b24sIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCwgdWludDhfdCBjb2xvclN0b3BD
b3VudCkKICAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldElubGluZUZpbGxH
cmFkaWVudChvZmZzZXRzLCBjb2xvcnMsIGRhdGEsIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlv
biwgc3ByZWFkTWV0aG9kLCBjb2xvclN0b3BDb3VudCkpOwogICAgIH0KIAorICAgIFdFQkNPUkVf
RVhQT1JUIFNldElubGluZUZpbGxHcmFkaWVudChmbG9hdCBvZmZzZXRzW21heENvbG9yU3RvcENv
dW50XSwgU1JHQkE8dWludDhfdD4gY29sb3JzW21heENvbG9yU3RvcENvdW50XSwgY29uc3QgR3Jh
ZGllbnQ6OkRhdGEmLAorICAgICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm1hdGlvbiwgR3JhZGllbnRTcHJlYWRNZXRob2QsIHVpbnQ4X3QgY29sb3JTdG9w
Q291bnQpOworCisgICAgU2V0SW5saW5lRmlsbEdyYWRpZW50KGNvbnN0IEdyYWRpZW50Jik7CisK
ICAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAg
Q29sb3IgbV9jb2xvcjsKKyAgICBmbG9hdCBtX29mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRdOwor
ICAgIFNSR0JBPHVpbnQ4X3Q+IG1fY29sb3JzW21heENvbG9yU3RvcENvdW50XTsKKyAgICBHcmFk
aWVudDo6RGF0YSBtX2RhdGE7CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fZ3JhZGllbnRTcGFjZVRy
YW5zZm9ybWF0aW9uOworICAgIEdyYWRpZW50U3ByZWFkTWV0aG9kIG1fc3ByZWFkTWV0aG9kIHsg
R3JhZGllbnRTcHJlYWRNZXRob2Q6OlBhZCB9OworICAgIHVpbnQ4X3QgbV9jb2xvclN0b3BDb3Vu
dCB7IDAgfTsKIH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIFNldEZpbGxDb2xv
cjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit2b2lkIFNldElubGluZUZpbGxHcmFk
aWVudDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgZW5jb2RlciA8PCBt
X2NvbG9yOworICAgIGVuY29kZXIgPDwgbV9jb2xvclN0b3BDb3VudDsKKyAgICBmb3IgKHVpbnQ4
X3QgaSA9IDA7IGkgPCBtX2NvbG9yU3RvcENvdW50OyArK2kpIHsKKyAgICAgICAgZW5jb2RlciA8
PCBtX29mZnNldHNbaV07CisgICAgICAgIGVuY29kZXIgPDwgUGFja2VkQ29sb3I6OlJHQkEgeyBt
X2NvbG9yc1tpXSB9LnZhbHVlOworICAgIH0KKyAgICBlbmNvZGVyIDw8IG1fZGF0YTsKKyAgICBl
bmNvZGVyIDw8IG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOworICAgIGVuY29kZXIgPDwg
bV9zcHJlYWRNZXRob2Q7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25hbDxS
ZWY8U2V0RmlsbENvbG9yPj4gU2V0RmlsbENvbG9yOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
K09wdGlvbmFsPFJlZjxTZXRJbmxpbmVGaWxsR3JhZGllbnQ+PiBTZXRJbmxpbmVGaWxsR3JhZGll
bnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIE9wdGlvbmFsPENvbG9yPiBjb2xv
cjsKLSAgICBkZWNvZGVyID4+IGNvbG9yOwotICAgIGlmICghY29sb3IpCisgICAgT3B0aW9uYWw8
dWludDhfdD4gY29sb3JTdG9wQ291bnQ7CisgICAgZGVjb2RlciA+PiBjb2xvclN0b3BDb3VudDsK
KyAgICBpZiAoIWNvbG9yU3RvcENvdW50KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgaWYgKCpjb2xvclN0b3BDb3VudCA+IG1heENvbG9yU3RvcENvdW50KQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgZmxvYXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3Vu
dF07CisgICAgU1JHQkE8dWludDhfdD4gY29sb3JzW21heENvbG9yU3RvcENvdW50XTsKKyAgICBm
b3IgKHVpbnQ4X3QgaSA9IDA7IGkgPCAqY29sb3JTdG9wQ291bnQ7ICsraSkgeworICAgICAgICBP
cHRpb25hbDx1aW50MzJfdD4gY29sb3I7CisgICAgICAgIGRlY29kZXIgPj4gY29sb3I7CisgICAg
ICAgIGlmICghY29sb3IpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
ICAgIE9wdGlvbmFsPGZsb2F0PiBvZmZzZXQ7CisgICAgICAgIGRlY29kZXIgPj4gb2Zmc2V0Owor
ICAgICAgICBpZiAoIW9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICAgICAgY29sb3JzW2ldID0gYXNTUkdCQShQYWNrZWRDb2xvcjo6UkdCQSB7ICpjb2xvciB9
KTsKKyAgICAgICAgb2Zmc2V0c1tpXSA9ICpvZmZzZXQ7CisgICAgfQorCisgICAgT3B0aW9uYWw8
R3JhZGllbnQ6OkRhdGE+IGRhdGE7CisgICAgZGVjb2RlciA+PiBkYXRhOworICAgIGlmICghZGF0
YSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPEFmZmluZVRy
YW5zZm9ybT4gZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOworICAgIGRlY29kZXIgPj4gZ3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uOworICAgIGlmICghZ3JhZGllbnRTcGFjZVRyYW5zZm9y
bWF0aW9uKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8R3Jh
ZGllbnRTcHJlYWRNZXRob2Q+IHNwcmVhZE1ldGhvZDsKKyAgICBkZWNvZGVyID4+IHNwcmVhZE1l
dGhvZDsKKyAgICBpZiAoIXNwcmVhZE1ldGhvZCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgIHJldHVybiBTZXRGaWxsQ29sb3I6OmNyZWF0ZSgqY29sb3IpOworICAgIHJldHVy
biB7IFNldElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRlKG9mZnNldHMsIGNvbG9ycywgKmRhdGEs
ICpncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb24sICpzcHJlYWRNZXRob2QsICpjb2xvclN0b3BD
b3VudCkgfTsKIH0KIAotY2xhc3MgU2V0U3Ryb2tlU3RhdGUgOiBwdWJsaWMgSXRlbSB7CitjbGFz
cyBTZXRJbmxpbmVGaWxsQ29sb3IgOiBwdWJsaWMgSXRlbSB7CiBwdWJsaWM6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZjxTZXRTdHJva2VTdGF0ZT4gY3JlYXRlKE9wdGlvbmFsPENvbG9y
PiYmLCBPcHRpb25hbDxmbG9hdD4mJiB0aGlja25lc3MpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBSZWY8U2V0SW5saW5lRmlsbENvbG9yPiBjcmVhdGUoU1JHQkE8dWludDhfdD4pOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0U3Ryb2tlU3RhdGUoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIH5TZXRJbmxpbmVGaWxsQ29sb3IoKTsKIAotICAgIENvbG9yIGNvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQotICAgIGJvb2wgaGFzQ29sb3IoKSBjb25zdCB7
IHJldHVybiBtX2hhc0NvbG9yOyB9Ci0KLSAgICBmbG9hdCB0aGlja25lc3MoKSBjb25zdCB7IHJl
dHVybiBtX3RoaWNrbmVzczsgfQotICAgIGJvb2wgaGFzVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNUaGlja25lc3M7IH0KKyAgICBDb2xvciBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIHsg
bV9jb2xvckRhdGEgfTsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxSZWY8U2V0U3Ryb2tlU3RhdGU+PiBkZWNvZGUoRGVjb2RlciYpOworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbENvbG9y
Pj4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBTZXRTdHJva2VTdGF0ZShPcHRp
b25hbDxDb2xvcj4mJiBjb2xvciwgT3B0aW9uYWw8ZmxvYXQ+JiYgdGhpY2tuZXNzKQotICAgICAg
ICA6IEl0ZW0oSXRlbVR5cGU6OlNldFN0cm9rZVN0YXRlKQotICAgICAgICAsIG1fY29sb3IoY29s
b3IudmFsdWVPcihDb2xvcigpKSkKLSAgICAgICAgLCBtX3RoaWNrbmVzcyh0aGlja25lc3MudmFs
dWVPcigwKSkKLSAgICAgICAgLCBtX2hhc0NvbG9yKGNvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAg
ICwgbV9oYXNUaGlja25lc3ModGhpY2tuZXNzLmhhc1ZhbHVlKCkpCisgICAgU2V0SW5saW5lRmls
bENvbG9yKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yRGF0YSkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBl
OjpTZXRJbmxpbmVGaWxsQ29sb3IpCisgICAgICAgICwgbV9jb2xvckRhdGEoY29sb3JEYXRhKQog
ICAgIHsKICAgICB9CiAKICAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgQ29sb3IgbV9jb2xvcjsKLSAgICBmbG9hdCBtX3RoaWNrbmVzcyB7IDAg
fTsKLSAgICBib29sIG1faGFzQ29sb3IgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNUaGlja25l
c3MgeyBmYWxzZSB9OworICAgIFNSR0JBPHVpbnQ4X3Q+IG1fY29sb3JEYXRhOwogfTsKIAogdGVt
cGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0U3Ryb2tlU3RhdGU6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAordm9pZCBTZXRJbmxpbmVGaWxsQ29sb3I6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIgPDwgbV9oYXNDb2xvcjsKLSAgICBpZiAo
bV9oYXNDb2xvcikKLSAgICAgICAgZW5jb2RlciA8PCBtX2NvbG9yOwotCi0gICAgZW5jb2RlciA8
PCBtX2hhc1RoaWNrbmVzczsKLSAgICBpZiAobV9oYXNUaGlja25lc3MpCi0gICAgICAgIGVuY29k
ZXIgPDwgbV90aGlja25lc3M7CisgICAgZW5jb2RlciA8PCBQYWNrZWRDb2xvcjo6UkdCQSB7IG1f
Y29sb3JEYXRhIH0udmFsdWU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1PcHRpb25h
bDxSZWY8U2V0U3Ryb2tlU3RhdGU+PiBTZXRTdHJva2VTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIpCitPcHRpb25hbDxSZWY8U2V0SW5saW5lRmlsbENvbG9yPj4gU2V0SW5saW5lRmlsbENv
bG9yOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBPcHRpb25hbDxib29sPiBoYXND
b2xvcjsKLSAgICBkZWNvZGVyID4+IGhhc0NvbG9yOwotICAgIGlmICghaGFzQ29sb3IpCisgICAg
T3B0aW9uYWw8dWludDMyX3Q+IHZhbHVlOworICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgaWYg
KCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIE9wdGlvbmFsPENv
bG9yPiBjb2xvcjsKLSAgICBpZiAoKmhhc0NvbG9yKSB7Ci0gICAgICAgIGRlY29kZXIgPj4gY29s
b3I7Ci0gICAgICAgIGlmICghY29sb3IpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIHJldHVybiBTZXRJbmxpbmVGaWxsQ29sb3I6OmNyZWF0ZShhc1NSR0JBKFBhY2tlZENv
bG9yOjpSR0JBIHsgKnZhbHVlIH0pKTsKK30KKworY2xhc3MgU2V0SW5saW5lU3Ryb2tlQ29sb3Ig
OiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxT
ZXRJbmxpbmVTdHJva2VDb2xvcj4gY3JlYXRlKFNSR0JBPHVpbnQ4X3Q+KTsKKworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgflNldElubGluZVN0cm9rZUNvbG9yKCk7CisKKyAgICBDb2xvciBj
b2xvcigpIGNvbnN0IHsgcmV0dXJuIHsgbV9jb2xvckRhdGEgfTsgfQorCisgICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0SW5saW5lU3Ryb2tlQ29sb3I+
PiBkZWNvZGUoRGVjb2RlciYpOworCitwcml2YXRlOgorICAgIFNldElubGluZVN0cm9rZUNvbG9y
KFNSR0JBPHVpbnQ4X3Q+IGNvbG9yRGF0YSkKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRJ
bmxpbmVTdHJva2VDb2xvcikKKyAgICAgICAgLCBtX2NvbG9yRGF0YShjb2xvckRhdGEpCisgICAg
ewogICAgIH0KIAotICAgIE9wdGlvbmFsPGJvb2w+IGhhc1RoaWNrbmVzczsKLSAgICBkZWNvZGVy
ID4+IGhhc1RoaWNrbmVzczsKLSAgICBpZiAoIWhhc1RoaWNrbmVzcykKKyAgICB2b2lkIGFwcGx5
KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgU1JHQkE8dWludDhfdD4g
bV9jb2xvckRhdGE7Cit9OworCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBTZXRJbmxp
bmVTdHJva2VDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5j
b2RlciA8PCBQYWNrZWRDb2xvcjo6UkdCQSB7IG1fY29sb3JEYXRhIH0udmFsdWU7Cit9CisKK3Rl
bXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxSZWY8U2V0SW5saW5lU3Ryb2tlQ29sb3I+
PiBTZXRJbmxpbmVTdHJva2VDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAg
T3B0aW9uYWw8dWludDMyX3Q+IHZhbHVlOworICAgIGRlY29kZXIgPj4gdmFsdWU7CisgICAgaWYg
KCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIE9wdGlvbmFsPGZs
b2F0PiB0aGlja25lc3M7Ci0gICAgaWYgKCpoYXNUaGlja25lc3MpIHsKLSAgICAgICAgZGVjb2Rl
ciA+PiB0aGlja25lc3M7Ci0gICAgICAgIGlmICghdGhpY2tuZXNzKQotICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmNyZWF0
ZShhc1NSR0JBKFBhY2tlZENvbG9yOjpSR0JBIHsgKnZhbHVlIH0pKTsKK30KKworY2xhc3MgU2V0
U3Ryb2tlVGhpY2tuZXNzIDogcHVibGljIEl0ZW0geworcHVibGljOgorICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBSZWY8U2V0U3Ryb2tlVGhpY2tuZXNzPiBjcmVhdGUoZmxvYXQgdGhpY2tuZXNz
KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflNldFN0cm9rZVRoaWNrbmVzcygpOwor
CisgICAgZmxvYXQgdGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV90aGlja25lc3M7IH0KKwor
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
KyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldFN0cm9r
ZVRoaWNrbmVzcz4+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgU2V0U3Ryb2tl
VGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKKyAgICAgICAgOiBJdGVtKEl0ZW1UeXBlOjpTZXRT
dHJva2VUaGlja25lc3MpCisgICAgICAgICwgbV90aGlja25lc3ModGhpY2tuZXNzKQorICAgIHsK
ICAgICB9CiAKLSAgICByZXR1cm4gU2V0U3Ryb2tlU3RhdGU6OmNyZWF0ZShXVEZNb3ZlKGNvbG9y
KSwgV1RGTW92ZSh0aGlja25lc3MpKTsKKyAgICB2b2lkIGFwcGx5KEdyYXBoaWNzQ29udGV4dCYp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgZmxvYXQgbV90aGlja25lc3MgeyAwIH07Cit9OworCit0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBTZXRTdHJva2VUaGlja25lc3M6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV90aGlja25lc3M7Cit9
CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxSZWY8U2V0U3Ryb2tlVGhpY2tu
ZXNzPj4gU2V0U3Ryb2tlVGhpY2tuZXNzOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBPcHRpb25hbDxmbG9hdD4gdGhpY2tuZXNzOworICAgIGRlY29kZXIgPj4gdGhpY2tuZXNzOwor
ICAgIGlmICghdGhpY2tuZXNzKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAg
cmV0dXJuIFNldFN0cm9rZVRoaWNrbmVzczo6Y3JlYXRlKCp0aGlja25lc3MpOwogfQogCiBjbGFz
cyBTZXRTdGF0ZSA6IHB1YmxpYyBJdGVtIHsKQEAgLTI1MTEsNiArMjYxMSw1MCBAQCBPcHRpb25h
bDxSZWY8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+PiBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZTo6
ZGVjb2RlKERlY29kZXImCiAgICAgcmV0dXJuIEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpjcmVh
dGUoKnJlY3QsICpyb3VuZGVkSG9sZVJlY3QsICpjb2xvcik7CiB9CiAKKyNpZiBFTkFCTEUoSU5M
SU5FX1BBVEhfREFUQSkKKworY2xhc3MgRmlsbElubGluZVBhdGggOiBwdWJsaWMgRHJhd2luZ0l0
ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RmlsbElubGluZVBhdGg+IGNyZWF0ZShjb25z
dCBJbmxpbmVQYXRoRGF0YSYgcGF0aERhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBGaWxsSW5saW5lUGF0aChwYXRoRGF0YSkpOworICAgIH0KKworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgfkZpbGxJbmxpbmVQYXRoKCk7CisKKyAgICBQYXRoIHBhdGgoKSBjb25z
dCB7IHJldHVybiBQYXRoOjpmcm9tKG1fcGF0aERhdGEpOyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxGaWxsSW5saW5lUGF0aD4+IGRlY29kZShE
ZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgV0VCQ09SRV9FWFBPUlQgRmlsbElubGluZVBhdGgo
Y29uc3QgSW5saW5lUGF0aERhdGEmKTsKKworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBwYXRoKCkuZmFz
dEJvdW5kaW5nUmVjdCgpOyB9CisKKyAgICBJbmxpbmVQYXRoRGF0YSBtX3BhdGhEYXRhOworfTsK
KwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgRmlsbElubGluZVBhdGg6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9wYXRoRGF0YTsKK30K
KwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZjxGaWxsSW5saW5lUGF0aD4+
IEZpbGxJbmxpbmVQYXRoOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25h
bDxJbmxpbmVQYXRoRGF0YT4gcGF0aERhdGE7CisgICAgZGVjb2RlciA+PiBwYXRoRGF0YTsKKyAg
ICBpZiAoIXBhdGhEYXRhKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0
dXJuIEZpbGxJbmxpbmVQYXRoOjpjcmVhdGUoV1RGTW92ZSgqcGF0aERhdGEpKTsKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorCiBjbGFzcyBGaWxsUGF0aCA6IHB1Ymxp
YyBEcmF3aW5nSXRlbSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxGaWxsUGF0aD4gY3JlYXRl
KGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0yNzY2LDYgKzI5MTAsNTAgQEAgT3B0aW9uYWw8UmVmPFN0
cm9rZVJlY3Q+PiBTdHJva2VSZWN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICByZXR1
cm4gU3Ryb2tlUmVjdDo6Y3JlYXRlKCpyZWN0LCAqbGluZVdpZHRoKTsKIH0KIAorI2lmIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQorCitjbGFzcyBTdHJva2VJbmxpbmVQYXRoIDogcHVibGljIERy
YXdpbmdJdGVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFN0cm9rZUlubGluZVBhdGg+IGNy
ZWF0ZShjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERhdGEpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTdHJva2VJbmxpbmVQYXRoKHBhdGhEYXRhKSk7CisgICAgfQorCisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U3Ryb2tlSW5saW5lUGF0aCgpOworCisgICAgUGF0
aCBwYXRoKCkgY29uc3QgeyByZXR1cm4gUGF0aDo6ZnJvbShtX3BhdGhEYXRhKTsgfQorCisgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U3Ryb2tlSW5saW5l
UGF0aD4+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgV0VCQ09SRV9FWFBPUlQg
U3Ryb2tlSW5saW5lUGF0aChjb25zdCBJbmxpbmVQYXRoRGF0YSYpOworCisgICAgdm9pZCBhcHBs
eShHcmFwaGljc0NvbnRleHQmKSBjb25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGxvY2FsQm91bmRzKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgSW5saW5lUGF0aERhdGEgbV9wYXRoRGF0YTsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+Cit2b2lkIFN0cm9rZUlubGluZVBhdGg6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAoreworICAgIGVuY29kZXIgPDwgbV9wYXRoRGF0YTsKK30KKwordGVtcGxhdGU8Y2xhc3Mg
RGVjb2Rlcj4KK09wdGlvbmFsPFJlZjxTdHJva2VJbmxpbmVQYXRoPj4gU3Ryb2tlSW5saW5lUGF0
aDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8SW5saW5lUGF0aERh
dGE+IHBhdGhEYXRhOworICAgIGRlY29kZXIgPj4gcGF0aERhdGE7CisgICAgaWYgKCFwYXRoRGF0
YSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBTdHJva2VJbmxp
bmVQYXRoOjpjcmVhdGUoV1RGTW92ZSgqcGF0aERhdGEpKTsKK30KKworI2VuZGlmIC8vIEVOQUJM
RShJTkxJTkVfUEFUSF9EQVRBKQorCiBjbGFzcyBTdHJva2VQYXRoIDogcHVibGljIERyYXdpbmdJ
dGVtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFN0cm9rZVBhdGg+IGNyZWF0ZShjb25zdCBQ
YXRoJiBwYXRoKQpAQCAtMzAxNSwxMSArMzIwMywxNyBAQCB2b2lkIEl0ZW06OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgog
ICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PENvbmNhdGVuYXRlQ1RNPigqdGhpcyk7CiAgICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldEZpbGxDb2xvcjoKLSAgICAgICAgZW5j
b2RlciA8PCBkb3duY2FzdDxTZXRGaWxsQ29sb3I+KCp0aGlzKTsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6CisgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0
SW5saW5lRmlsbEdyYWRpZW50PigqdGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKKyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxT
ZXRJbmxpbmVGaWxsQ29sb3I+KCp0aGlzKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVt
VHlwZTo6U2V0U3Ryb2tlU3RhdGU6Ci0gICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0U3Ry
b2tlU3RhdGU+KCp0aGlzKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xv
cjoKKyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oKnRo
aXMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25l
c3M6CisgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U2V0U3Ryb2tlVGhpY2tuZXNzPigqdGhp
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgogICAgICAg
ICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldFN0YXRlPigqdGhpcyk7CkBAIC0zMTE0LDYgKzMzMDgs
MTEgQEAgdm9pZCBJdGVtOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICBjYXNl
IEl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZToKICAgICAgICAgZW5jb2RlciA8PCBk
b3duY2FzdDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4oKnRoaXMpOwogICAgICAgICBicmVhazsK
KyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5s
aW5lUGF0aDoKKyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxGaWxsSW5saW5lUGF0aD4oKnRo
aXMpOworICAgICAgICBicmVhazsKKyNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRo
OgogICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEZpbGxQYXRoPigqdGhpcyk7CiAgICAgICAg
IGJyZWFrOwpAQCAtMzEyOSw2ICszMzI4LDExIEBAIHZvaWQgSXRlbTo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUmVjdDoKICAgICAgICAg
ZW5jb2RlciA8PCBkb3duY2FzdDxTdHJva2VSZWN0PigqdGhpcyk7CiAgICAgICAgIGJyZWFrOwor
I2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlu
bGluZVBhdGg6CisgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U3Ryb2tlSW5saW5lUGF0aD4o
KnRoaXMpOworICAgICAgICBicmVhazsKKyNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9r
ZVBhdGg6CiAgICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8U3Ryb2tlUGF0aD4oKnRoaXMpOwog
ICAgICAgICBicmVhazsKQEAgLTMxOTUsMTIgKzMzOTksMjAgQEAgT3B0aW9uYWw8UmVmPEl0ZW0+
PiBJdGVtOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICAgICAgaWYgKGF1dG8gaXRlbSA9
IENvbmNhdGVuYXRlQ1RNOjpkZWNvZGUoZGVjb2RlcikpCiAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0RmlsbENvbG9yOgotICAgICAgICBpZiAoYXV0byBpdGVt
ID0gU2V0RmlsbENvbG9yOjpkZWNvZGUoZGVjb2RlcikpCisgICAgY2FzZSBJdGVtVHlwZTo6U2V0
SW5saW5lRmlsbEdyYWRpZW50OgorICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0SW5saW5lRmls
bEdyYWRpZW50OjpkZWNvZGUoZGVjb2RlcikpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX3Jl
ZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJdGVtVHlwZTo6U2V0U3Ryb2tlU3RhdGU6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBT
ZXRTdHJva2VTdGF0ZTo6ZGVjb2RlKGRlY29kZXIpKQorICAgIGNhc2UgSXRlbVR5cGU6OlNldElu
bGluZUZpbGxDb2xvcjoKKyAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldElubGluZUZpbGxDb2xv
cjo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXRl
bVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgorICAgICAgICBpZiAoYXV0byBpdGVtID0gU2V0
SW5saW5lU3Ryb2tlQ29sb3I6OmRlY29kZShkZWNvZGVyKSkKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6CisgICAgICAgIGlmIChh
dXRvIGl0ZW0gPSBTZXRTdHJva2VUaGlja25lc3M6OmRlY29kZShkZWNvZGVyKSkKICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKQEAgLTMzMjcsNiAr
MzUzOSwxMiBAQCBPcHRpb25hbDxSZWY8SXRlbT4+IEl0ZW06OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmRl
Y29kZShkZWNvZGVyKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8
SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoSU5MSU5F
X1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsSW5saW5lUGF0aDoKKyAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IEZpbGxJbmxpbmVQYXRoOjpkZWNvZGUoZGVjb2RlcikpCisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsK
KyAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDoKICAg
ICAgICAgaWYgKGF1dG8gaXRlbSA9IEZpbGxQYXRoOjpkZWNvZGUoZGVjb2RlcikpCiAgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsK
QEAgLTMzNDcsNiArMzU2NSwxMiBAQCBPcHRpb25hbDxSZWY8SXRlbT4+IEl0ZW06OmRlY29kZShE
ZWNvZGVyJiBkZWNvZGVyKQogICAgICAgICBpZiAoYXV0byBpdGVtID0gU3Ryb2tlUmVjdDo6ZGVj
b2RlKGRlY29kZXIpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJ
dGVtPihXVEZNb3ZlKCppdGVtKSk7CiAgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGg6CisgICAgICAg
IGlmIChhdXRvIGl0ZW0gPSBTdHJva2VJbmxpbmVQYXRoOjpkZWNvZGUoZGVjb2RlcikpCisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0p
KTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRo
OgogICAgICAgICBpZiAoYXV0byBpdGVtID0gU3Ryb2tlUGF0aDo6ZGVjb2RlKGRlY29kZXIpKQog
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCpp
dGVtKSk7CkBAIC0zNDA5LDggKzM2MzMsOSBAQCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oUm90YXRlKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKFNjYWxlKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldENU
TSkKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDb25jYXRlbmF0ZUNU
TSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRGaWxsQ29sb3Ip
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0U3Ryb2tlU3RhdGUp
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0SW5saW5lRmlsbENv
bG9yKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldElubGluZVN0
cm9rZUNvbG9yKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldFN0
cm9rZVRoaWNrbmVzcykKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShT
ZXRTdGF0ZSkKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRMaW5l
Q2FwKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNldExpbmVEYXNo
KQpAQCAtMzQ0MSwxMSArMzY2NiwxNyBAQCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlM
SVNUX0lURU0oRmlsbFJlY3RXaXRoR3JhZGllbnQpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oRmlsbENvbXBvc2l0ZWRSZWN0KQogU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19ESVNQTEFZTElTVF9JVEVNKEZpbGxSb3VuZGVkUmVjdCkKIFNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRElTUExBWUxJU1RfSVRFTShGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSkKKyNpZiBFTkFCTEUo
SU5MSU5FX1BBVEhfREFUQSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRF
TShGaWxsSW5saW5lUGF0aCkKKyNlbmRpZgogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKEZpbGxQYXRoKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9J
VEVNKEZpbGxFbGxpcHNlKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KFB1dEltYWdlRGF0YSkKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShQ
YWludEZyYW1lRm9yTWVkaWEpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lU
RU0oU3Ryb2tlUmVjdCkKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VJbmxpbmVQYXRoKQorI2VuZGlmCiBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlUGF0aCkKIFNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTdHJva2VFbGxpcHNlKQogU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKENsZWFyUmVjdCkKQEAgLTM0NzAsOCAr
MzcwMSw5IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlPiB7CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTY2Fs
ZSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldENUTSwKICAgICBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNLAotICAgIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0RmlsbENvbG9yLAotICAgIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlU3RhdGUsCisgICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3IsCisgICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTZXRJbmxpbmVTdHJva2VDb2xvciwKKyAgICBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzcywKICAgICBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OlNldFN0YXRlLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVt
VHlwZTo6U2V0TGluZUNhcCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNl
dExpbmVEYXNoLApAQCAtMzUwMywxMSArMzczNSwxNyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVt
VHJhaXRzPFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZT4gewogICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0LAogICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJvdW5kZWRSZWN0LAogICAgIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpJdGVtVHlwZTo6RmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCisjaWYgRU5BQkxFKElO
TElORV9QQVRIX0RBVEEpCisgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxs
SW5saW5lUGF0aCwKKyNlbmRpZgogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
RmlsbFBhdGgsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsRWxsaXBz
ZSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlB1dEltYWdlRGF0YSwKICAg
ICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlBhaW50RnJhbWVGb3JNZWRpYSwKICAg
ICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVJlY3QsCisjaWYgRU5BQkxF
KElOTElORV9QQVRIX0RBVEEpCisgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpT
dHJva2VJbmxpbmVQYXRoLAorI2VuZGlmCiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1U
eXBlOjpTdHJva2VQYXRoLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ry
b2tlRWxsaXBzZSwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OkNsZWFyUmVj
dCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCAxZTFlOTFh
YTA4NGI5NmU2ZWIyNjVjMWY4MGZmMmY4ZTUxZmYxZmU3Li43ZGUyYjIxZGNlMjdjNmYzZGJhNDQ1
YWUzODYxZGRlYmYxMWMxN2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuY3BwCkBAIC01NywzOCArNTcsNDkgQEAgdm9pZCBSZWNvcmRlcjo6cHV0SW1hZ2VEYXRhKFdl
YkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFcKICAgICBh
cHBlbmRJdGVtKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpQdXRJbWFnZURhdGE6OmNyZWF0ZShpbnB1
dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGRlc3RGb3JtYXQpKTsKIH0K
IAotc3RhdGljIGJvb2wgY29udGFpbnNPbmx5U3Ryb2tlQ29sb3JPclRoaWNrbmVzc0NoYW5nZShH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VzKQorc3RhdGljIGJv
b2wgY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlQ2hhbmdlJiBjaGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyBjaGFuZ2VGbGFncykKIHsKLSAgICBzdGF0aWMgY29uc3RleHByIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIHN0cm9rZVN0YXRlQ2hhbmdlRmxhZ3MgeworICAgIHN0YXRp
YyBjb25zdGV4cHIgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgaW5saW5l
U3RhdGVDaGFuZ2VGbGFncyB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VU
aGlja25lc3NDaGFuZ2UsCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xv
ckNoYW5nZQorICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2Us
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UsCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UsCiAgICAgfTsKLSAgICBy
ZXR1cm4gY2hhbmdlcyA9PSAoY2hhbmdlcyAmIHN0cm9rZVN0YXRlQ2hhbmdlRmxhZ3MpOwotfQog
Ci1zdGF0aWMgYm9vbCBjb250YWluc09ubHlGaWxsQ29sb3JDaGFuZ2UoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlcykKLXsKLSAgICByZXR1cm4gY2hhbmdlcyA9
PSAoY2hhbmdlcyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpOworICAg
IGlmIChjaGFuZ2VGbGFncyAhPSAoY2hhbmdlRmxhZ3MgJiBpbmxpbmVTdGF0ZUNoYW5nZUZsYWdz
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkgJiYgIWNoYW5nZXMubV9z
dGF0ZS5zdHJva2VDb2xvci5pc0lubGluZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xv
ckNoYW5nZSkgJiYgIWNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IuaXNJbmxpbmUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpICYmIGNoYW5nZXMubV9zdGF0ZS5maWxs
R3JhZGllbnQKKyAgICAgICAgJiYgIVNldElubGluZUZpbGxHcmFkaWVudDo6aXNJbmxpbmUoKmNo
YW5nZXMubV9zdGF0ZS5maWxsR3JhZGllbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIFJlZjxJdGVtPiBjcmVhdGVTdGF0ZUNoYW5nZUl0
ZW0oY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNoYW5nZXMsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZUZsYWdzKQordm9pZCBSZWNvcmRlcjo6
YXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBj
aGFuZ2VzLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VGbGFn
cykKIHsKLSAgICBpZiAoY29udGFpbnNPbmx5RmlsbENvbG9yQ2hhbmdlKGNoYW5nZUZsYWdzKSkK
LSAgICAgICAgcmV0dXJuIFNldEZpbGxDb2xvcjo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZS5maWxs
Q29sb3IpOworICAgIGlmICghY29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKGNoYW5nZXMs
IGNoYW5nZUZsYWdzKSkgeworICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0oU2V0U3Rh
dGU6OmNyZWF0ZShjaGFuZ2VzLm1fc3RhdGUsIGNoYW5nZUZsYWdzKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSAgICBpZiAoY29udGFpbnNPbmx5U3Ryb2tlQ29sb3JPclRoaWNrbmVzc0No
YW5nZShjaGFuZ2VGbGFncykpIHsKLSAgICAgICAgT3B0aW9uYWw8Q29sb3I+IHN0cm9rZUNvbG9y
OwotICAgICAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZUNvbG9yQ2hhbmdlKSkKLSAgICAgICAgICAgIHN0cm9rZUNvbG9yID0gY2hhbmdlcy5t
X3N0YXRlLnN0cm9rZUNvbG9yOworICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQorICAgICAgICBtX2Rpc3BsYXlMaXN0
LmFwcGVuZEl0ZW0oU2V0SW5saW5lU3Ryb2tlQ29sb3I6OmNyZWF0ZShjaGFuZ2VzLm1fc3RhdGUu
c3Ryb2tlQ29sb3IuYXNJbmxpbmUoKSkpOwogCi0gICAgICAgIE9wdGlvbmFsPGZsb2F0PiBzdHJv
a2VUaGlja25lc3M7Ci0gICAgICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKLSAgICAgICAgICAgIHN0cm9rZVRo
aWNrbmVzcyA9IGNoYW5nZXMubV9zdGF0ZS5zdHJva2VUaGlja25lc3M7CisgICAgaWYgKGNoYW5n
ZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFu
Z2UpKQorICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0oU2V0U3Ryb2tlVGhpY2tuZXNz
OjpjcmVhdGUoY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNrbmVzcykpOwogCi0gICAgICAgIHJl
dHVybiBTZXRTdHJva2VTdGF0ZTo6Y3JlYXRlKFdURk1vdmUoc3Ryb2tlQ29sb3IpLCBXVEZNb3Zl
KHN0cm9rZVRoaWNrbmVzcykpOwotICAgIH0KKyAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCisgICAgICAgIG1fZGlzcGxh
eUxpc3QuYXBwZW5kSXRlbShTZXRJbmxpbmVGaWxsQ29sb3I6OmNyZWF0ZShjaGFuZ2VzLm1fc3Rh
dGUuZmlsbENvbG9yLmFzSW5saW5lKCkpKTsKIAotICAgIHJldHVybiBTZXRTdGF0ZTo6Y3JlYXRl
KGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlRmxhZ3MpOworICAgIGlmIChjaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKSkKKyAgICAgICAg
bV9kaXNwbGF5TGlzdC5hcHBlbmRJdGVtKFNldElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRlKCpj
aGFuZ2VzLm1fc3RhdGUuZmlsbEdyYWRpZW50KSk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OndpbGxB
cHBlbmRJdGVtKGNvbnN0IEl0ZW0mIGl0ZW0pCkBAIC0xMDUsNyArMTE2LDcgQEAgdm9pZCBSZWNv
cmRlcjo6d2lsbEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYgaXRlbSkKICAgICAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlc0Zyb21MYXN0U3RhdGUgPSBzdGF0
ZUNoYW5nZXMuY2hhbmdlc0Zyb21TdGF0ZShjdXJyZW50U3RhdGUoKS5sYXN0RHJhd2luZ1N0YXRl
KTsKICAgICAgICAgaWYgKGNoYW5nZXNGcm9tTGFzdFN0YXRlKSB7CiAgICAgICAgICAgICBMT0df
V0lUSF9TVFJFQU0oRGlzcGxheUxpc3RzLCBzdHJlYW0gPDwgInByZS1kcmF3aW5nLCBzYXZpbmcg
c3RhdGUgIiA8PCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZShzdGF0ZUNoYW5nZXMubV9zdGF0
ZSwgY2hhbmdlc0Zyb21MYXN0U3RhdGUpKTsKLSAgICAgICAgICAgIG1fZGlzcGxheUxpc3QuYXBw
ZW5kKGNyZWF0ZVN0YXRlQ2hhbmdlSXRlbShzdGF0ZUNoYW5nZXMsIGNoYW5nZXNGcm9tTGFzdFN0
YXRlKSk7CisgICAgICAgICAgICBhcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oc3RhdGVDaGFuZ2VzLCBj
aGFuZ2VzRnJvbUxhc3RTdGF0ZSk7CiAgICAgICAgICAgICBzdGF0ZUNoYW5nZXMubV9jaGFuZ2VG
bGFncyA9IHsgfTsKICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSgpLmxhc3REcmF3aW5nU3RhdGUg
PSBzdGF0ZUNoYW5nZXMubV9zdGF0ZTsKICAgICAgICAgfQpAQCAtMzE0LDYgKzMyNSwxMiBAQCB2
b2lkIFJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0Um91bmRlZAogCiB2b2lkIFJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogeworI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGlmIChwYXRo
Lmhhc0lubGluZURhdGEoKSkgeworICAgICAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KEZp
bGxJbmxpbmVQYXRoOjpjcmVhdGUocGF0aC5pbmxpbmVEYXRhKCkpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbmRpZgogICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbFBhdGg6
OmNyZWF0ZShwYXRoKSk7CiB9CiAKQEAgLTMyOSw2ICszNDYsMTIgQEAgdm9pZCBSZWNvcmRlcjo6
c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIAogdm9p
ZCBSZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogeworI2lmIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQorICAgIGlmIChwYXRoLmhhc0lubGluZURhdGEoKSkgeworICAgICAg
ICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0cm9rZUlubGluZVBhdGg6OmNyZWF0ZShwYXRo
LmlubGluZURhdGEoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCiAgICAgYXBw
ZW5kSXRlbUFuZFVwZGF0ZUV4dGVudChTdHJva2VQYXRoOjpjcmVhdGUocGF0aCkpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCA2YTI3NzE4OTdlZDIzZTY5
MDU2ZmFlYThmNWU1MzM5OGE1ZjhjOGM5Li5lOTVmMjg0Njg1NGU0MGU3ZWE1NmU0MzA4YTIyZWNj
YjVlNzJiMWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTE0
OSw2ICsxNDksOCBAQCBwcml2YXRlOgogICAgIEl0ZW1UeXBlJiBhcHBlbmRJdGVtKFJlZjxJdGVt
VHlwZT4mJik7CiAgICAgdm9pZCB3aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJik7CiAKKyAgICB2
b2lkIGFwcGVuZFN0YXRlQ2hhbmdlSXRlbShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5n
ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKwogICAgIEZsb2F0
UmVjdCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAgICAg
dm9pZCB1cGRhdGVJdGVtRXh0ZW50KERyYXdpbmdJdGVtJikgY29uc3Q7CiAgICAgCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
MjBlMWNjYjA0MWY5ZjA1MDU1ZDAzMTZjMDYyZTI3ZGM1N2ViYTFjOC4uM2U0Y2FkYzI5NjkzMzRm
NjdjYmJkMjQxN2Y4MGQ3MGI0OWUwYTJkMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIwLTEw
LTI3ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtD
b25jdXJyZW50IGRpc3BsYXkgbGlzdHNdIEFkZCBhbHRlcm5hdGUgdmVyc2lvbnMgb2YgZXhpc3Rp
bmcgZGlzcGxheSBsaXN0IGl0ZW1zIHRoYXQgb25seSBjb250YWluIGlubGluZSBkYXRhCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTgyNTkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWJhc2VsaW5lIGFu
IGV4aXN0aW5nIHRlc3QuCisKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXkt
bGlzdC1leHBlY3RlZC50eHQ6CisKIDIwMjAtMTAtMjcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFw
cGxlLmNvbT4KIAogICAgICAgICBBdWRpb0NvbnRleHQuc3VzcGVuZCgpIHNob3VsZCBub3QgcmVq
ZWN0IHByb21pc2Ugd2hlbiBhdWRpbyBzZXNzaW9uIGlzIGludGVycnVwdGVkCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3Rl
ZC50eHQKaW5kZXggZjdkNzE4ZjA2YWRjOGM4OWE0Y2ZiODM5MmU5YTk2ZTNlYWFjZmE3Ny4uMzI4
ODQ4MDYyNzAxOWQ1NDAyZDk0MjVmYzRhMTMxMzc3MGVjYjMxYSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4
dApAQCAtOCw3ICs4LDcgQEAKIChmaWxsLXJlY3QKICAgKGV4dGVudCBhdCAoMTAsMTQwKSBzaXpl
IDU1eDUwKQogICAocmVjdCBhdCAoMTAsMTApIHNpemUgNTV4NTApKQotKHNldC1maWxsLWNvbG9y
Cisoc2V0LWlubGluZS1maWxsLWNvbG9yCiAgIChjb2xvciAjMDAwMEM4ODApKQogKGZpbGwtcmVj
dAogICAoZXh0ZW50IGF0ICgzMCwxMjApIHNpemUgNTV4NTApCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412486</attachid>
            <date>2020-10-27 17:47:12 -0700</date>
            <delta_ts>2020-10-27 19:09:22 -0700</delta_ts>
            <desc>Fix builds</desc>
            <filename>bug-218259-20201027174711.patch</filename>
            <type>text/plain</type>
            <size>55172</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MDM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjQ5MzM1NTdmODRkMzBk
MmY3ZmI2NzQ4YjIyZjA1OWU2ZGFiYjQ5NS4uODBiZDFiNTlmZGQ0YTRmN2Q1NmI3ZWZmMzRiMjJm
NzhmYWQwZjI4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MiBAQAorMjAyMC0xMC0yNyAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29uY3VycmVu
dCBkaXNwbGF5IGxpc3RzXSBBZGQgYWx0ZXJuYXRlIHZlcnNpb25zIG9mIGV4aXN0aW5nIGRpc3Bs
YXkgbGlzdCBpdGVtcyB0aGF0IG9ubHkgY29udGFpbiBpbmxpbmUgZGF0YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE4MjU5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAgICAgICBJbiBwcmVwYXJhdGlvbiBmb3Igc3VwcG9y
dGluZyBjb25jdXJyZW50IGdlbmVyYXRpb24gYW5kIGNvbnN1bXB0aW9uIG9mIGRpc3BsYXkgbGlz
dCBpdGVtcyBpbiB0aGUgR1BVIHByb2Nlc3MsCisgICAgICAgIGFkZCBuZXcgdmFyaWFudHMgb2Yg
c29tZSBleGlzdGluZyBkaXNwbGF5IGxpc3QgaXRlbXMgdGhhdCBjb250YWluIG9ubHkgImlubGlu
ZSBkYXRhIiAoaS5lLiBubyBwb2ludGVycykuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGJlaGF2
aW9yOyBzZWUgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6aXNFbXB0eSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRRdWFkQ3VydmVUbyk6CisgICAgICAgIChXZWJD
b3JlOjpQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OlBh
dGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaDoKKworICAgICAgICBBZGQg
YSBoZWxwZXIgbWV0aG9kIHRvIGNvbnZlcnQgYElubGluZVBhdGhEYXRhYCB0byBgUGF0aGAuCisK
KyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmlubGluZURhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UGF0aDo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Omhhc0lu
bGluZURhdGEgY29uc3QpOgorCisgICAgICAgIFJlbmFtZSBgaGFzQW55SW5saW5lRGF0YWAgdG8g
anVzdCBgaGFzSW5saW5lRGF0YWAsIGFuZCBtYWtlIGl0IHB1YmxpYy4KKworICAgICAgICAoV2Vi
Q29yZTo6UGF0aDo6cmVsZWFzZVBsYXRmb3JtUGF0aElmUG9zc2libGUgY29uc3QpOiBEZWxldGVk
LgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgcmVtb3ZlIGByZWxlYXNlUGxhdGZvcm1QYXRoSWZQ
b3NzaWJsZSgpYCBhbHRvZ2V0aGVyLiBUaGlzIG1ldGhvZCB3YXMgdXNlZCB0byBlbnN1cmUgdGhh
dAorICAgICAgICBgU3Ryb2tlUGF0aGAgYW5kIGBGaWxsUGF0aGAgd291bGRuJ3Qga2VlcCB0aGVp
ciBgUGF0aGAncyBwbGF0Zm9ybSBgQ0dQYXRoUmVmYHMgYXJvdW5kIGFmdGVyIGFwcGx5aW5nIHRo
ZSBpdGVtIGluCisgICAgICAgIHRoZSBHUFUgcHJvY2Vzcywgd2hpY2ggbGVhZHMgdG8gYWNjdW11
bGF0aW5nIGEgcG9vbCBvZiB1bnVzZWQgYENHUGF0aFJlZmBzIGFmdGVyIHBsYXlpbmcgYmFjayBh
IGRpc3BsYXkgbGlzdAorICAgICAgICB0aGF0IGNvbnRhaW5zIG1hbnkgYFBhdGhgIG9iamVjdHMu
IEhvd2V2ZXIsIHNpbmNlIGBTdHJva2VJbmxpbmVQYXRoYCBhbmQgYEZpbGxJbmxpbmVQYXRoYCBu
b3cgZXhpc3QsIHRoZSBgUGF0aGAKKyAgICAgICAgb2JqZWN0IHdlIGNyZWF0ZSB3aGVuIGFwcGx5
aW5nIHRob3NlIGl0ZW1zIGlzIGFsd2F5cyBnb2luZyB0byBiZSB0ZW1wb3JhcnksIHdoaWNoIGFs
bG93cyB1cyB0byBhdm9pZCB0aGlzCisgICAgICAgIHByb2JsZW0uCisKKyAgICAgICAgKFdlYkNv
cmU6OlBhdGg6Omhhc0FueUlubGluZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpw
bGF0Zm9ybVBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6aXNOdWxsIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3Qu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbTo6c2l6ZUluQnl0
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVu
dDo6U2V0SW5saW5lRmlsbEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmdyYWRpZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50OjphcHBseSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbEdyYWRpZW50
Ojppc0lubGluZSk6CisKKyAgICAgICAgSW50cm9kdWNlIGEgbmV3IFNldElubGluZUZpbGxHcmFk
aWVudCBpdGVtIHRvIHJlcHJlc2VudCBzZXR0aW5nIHRoZSBmaWxsIGdyYWRpZW50IHRvIGEgZ3Jh
ZGllbnQgd2l0aCBhdCBtb3N0IDQKKyAgICAgICAgY29sb3Igc3RvcHMsIHdpdGggb25seSBpbmxp
bmUgY29sb3JzLiBUaGlzIGlubGluZSBkYXRhIGlzIHB1bGxlZCBvdXQgb2YgdGhlIGBHcmFkaWVu
dGAgdXBvbiBjb25zdHJ1Y3Rpb24sIGFuZAorICAgICAgICBsYXRlciB1c2VkIHRvIHJlY29uc3Ry
dWN0IGEgYEdyYWRpZW50YCBkdXJpbmcgcGxheWJhY2suCisKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpT
ZXRJbmxpbmVGaWxsQ29sb3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6U2V0SW5saW5lRmlsbENvbG9yOjphcHBseSBjb25zdCk6CisKKyAgICAgICAgQ2hhbmdlIGBT
ZXRGaWxsQ29sb3JgIHRvIGBTZXRJbmxpbmVGaWxsQ29sb3JgLCBhbmQgbWFrZSBpdCBwYXNzIGFy
b3VuZCBhbiBgU1JHQjx1aW50OF90PmAgaW5zdGVhZCBvZiBhIGBDb2xvcmAsCisgICAgICAgIHNp
bmNlIHRoZSBsYXR0ZXIgY291bGQgY29udGFpbiBhIHBvaW50ZXIgdG8gYW4gZXh0ZW5kZWQgY29s
b3IuCisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xv
cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJv
a2VDb2xvcjo6YXBwbHkgY29uc3QpOgorCisgICAgICAgIFNpbWlsYXIgdG8gdGhlIGFib3ZlLCBi
dXQgd2hlbiBzZXR0aW5nIHRoZSBzdHJva2UgY29sb3IgdG8gYW4gaW5saW5lIChub24tZXh0ZW5k
ZWQpIGNvbG9yLgorCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhp
Y2tuZXNzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9r
ZVRoaWNrbmVzczo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkZpbGxJbmxpbmVQYXRoOjpGaWxsSW5saW5lUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpGaWxsUGF0aDo6YXBwbHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OlN0cm9rZVBhdGg6OmFwcGx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjpsb2NhbEJvdW5kcyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6YXBwbHkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9rZUlubGluZVBhdGg6OlN0cm9r
ZUlubGluZVBhdGgpOgorCisgICAgICAgIEFkZCBgU3Ryb2tlSW5saW5lUGF0aGAgYW5kIGBGaWxs
SW5saW5lUGF0aGAsIHdoaWNoIGNvbnRhaW4gYElubGluZVBhdGhEYXRhYCBpbnN0ZWFkIG9mIGBQ
YXRoYCBvYmplY3RzIGFuZCBvbmx5CisgICAgICAgIGNvbnN0cnVjdCBgcGF0aCgpYCBvYmplY3Rz
IHdoZW4gbmVlZGVkIChpLmUuIHdoZW4gYXBwbHlpbmcgdG8gYSBgR3JhcGhpY3NDb250ZXh0YCku
CisKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRGaWxsQ29sb3I6OmNyZWF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0RmlsbENvbG9yOjph
cHBseSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0
U3Ryb2tlU3RhdGU6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6U2V0U3Ryb2tlU3RhdGU6OmFwcGx5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmVu
Y29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmls
bEdyYWRpZW50OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElu
bGluZUZpbGxDb2xvcjo6Y29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlNldElubGluZUZpbGxDb2xvcjo6U2V0SW5saW5lRmlsbENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVGaWxsQ29sb3I6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lRmlsbENvbG9yOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldElubGluZVN0cm9rZUNvbG9yOjpj
b2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0SW5saW5lU3Ry
b2tlQ29sb3I6OlNldElubGluZVN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvcjo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRJbmxpbmVTdHJva2VDb2xvcjo6ZGVjb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6OnRoaWNrbmVzcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlVGhpY2tuZXNz
OjpTZXRTdHJva2VUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNl
dFN0cm9rZVRoaWNrbmVzczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRTdHJva2VUaGlja25lc3M6OmRlY29kZSk6CisKKyAgICAgICAgUHVsbCBzdHJv
a2UgdGhpY2tuZXNzIG91dCBpbnRvIGl0cyBvd24gZGlzcGxheSBsaXN0IGl0ZW0uCisKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsSW5saW5lUGF0aDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpGaWxsSW5saW5lUGF0aDo6cGF0aCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RmlsbElubGluZVBhdGg6OmRlY29k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U3Ryb2tlSW5saW5lUGF0aDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQYXRoOjpw
YXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTdHJva2VJbmxpbmVQ
YXRoOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlN0cm9r
ZUlubGluZVBhdGg6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldEZpbGxDb2xvcjo6Y29s
b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldEZp
bGxDb2xvcjo6U2V0RmlsbENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpTZXRGaWxsQ29sb3I6OmVuY29kZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0RmlsbENvbG9yOjpkZWNvZGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVN0YXRlOjpjb2xvciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3Ryb2tlU3RhdGU6
Omhhc0NvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpTZXRTdHJva2VTdGF0ZTo6dGhpY2tuZXNzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VTdGF0ZTo6aGFzVGhpY2tuZXNzIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdHJva2VTdGF0ZTo6
U2V0U3Ryb2tlU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlNldFN0cm9rZVN0YXRlOjplbmNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlNldFN0cm9rZVN0YXRlOjpkZWNvZGUpOiBEZWxldGVkLgorCisgICAg
ICAgIFNwbGl0IGBTZXRTdHJva2VTdGF0ZWAgb3V0IGludG8gc2VwYXJhdGUgaXRlbXMgdHJhY2tp
bmcgdGhpY2tuZXNzIGFuZCBzdHJva2UgY29sb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6Y29udGFpbnNPbmx5SW5saW5lU3RhdGVDaGFuZ2VzKToKKworICAg
ICAgICBSZWZhY3RvciB0aGlzIGNvZGUgc28gdGhhdCBpdCBlbWl0cyBtdWx0aXBsZSBkaXNwbGF5
IGxpc3QgaXRlbXMgaWYgbXVsdGlwbGUgaW5saW5lIHN0YXRlcyBjaGFuZ2UuIFByZXZpb3VzbHks
CisgICAgICAgIHRoaXMgd2FzIG9ubHkgZG9uZSBmb3Igc2ltdWx0YW5lb3VzIHN0cm9rZSBjb2xv
ciBhbmQgc3Ryb2tlIHRoaWNrbmVzcyBjaGFuZ2VzICh2aWEgdGhlIGBTZXRTdHJva2VTdGF0ZWAg
aXRlbSk7CisgICAgICAgIHRoaXMgd2FzIGRvbmUgdG8gYXZvaWQgY3JlYXRpbmcgbW9yZSBkaXNw
bGF5IGxpc3QgaXRlbXMgdGhhbiBuZWVkZWQuIEhvd2V2ZXIsIG9uY2UgYWxsIGlubGluZSBkaXNw
bGF5IGxpc3QgaXRlbXMKKyAgICAgICAgYXJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIHNoYXJl
ZCBtZW1vcnksIHRoZXJlIHdpbGwgYmUgKGFsbW9zdCkgemVybyBvdmVyaGVhZCBmb3Igc3BsaXR0
aW5nIHRoaXMgaW50bworICAgICAgICBzZXBhcmF0ZSBpdGVtcy4KKworICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW0pOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjp3aWxsQXBwZW5kSXRlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmZpbGxQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6Y29udGFpbnNPbmx5U3Ryb2tlQ29sb3JPclRoaWNrbmVzc0No
YW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6Y29udGFpbnNP
bmx5RmlsbENvbG9yQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpjcmVhdGVTdGF0ZUNoYW5nZUl0ZW0pOiBEZWxldGVkLgorCisgICAgICAgIEFkZGl0aW9u
YWxseSByZWZhY3RvciB0aGlzIG1ldGhvZCBzbyB0aGF0IGl0IGlzIG5vdyBhIHByaXZhdGUgbWV0
aG9kIHRoYXQgYXBwZW5kcyB0byBgbV9kaXNwbGF5TGlzdGAsIGluc3RlYWQgb2YKKyAgICAgICAg
cmV0dXJuaW5nIGEgZGlzcGxheSBsaXN0IGl0ZW0gdG8gYmUgYXBwZW5kZWQuIFRoaXMgd2lsbCBi
ZWNvbWUgaW1wb3J0YW50IGluIGEgZnV0dXJlIHBhdGNoLCB3aGljaCB3aWxsIHJlcGxhY2UKKyAg
ICAgICAgdGhlIGV4aXN0aW5nIGBhcHBlbmRgIG1ldGhvZCB3aXRoIGEgdGVtcGxhdGVkIHZlcnNp
b24gdGhhdCB0YWtlcyB0aGUgZGlzcGxheSBsaXN0IGl0ZW0gdHlwZSBhcyBhIHRlbXBsYXRlCisg
ICAgICAgIGFyZ3VtZW50LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKwogMjAyMC0xMC0yNyAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEF1ZGlvQ29udGV4dC5zdXNwZW5kKCkgc2hvdWxk
IG5vdCByZWplY3QgcHJvbWlzZSB3aGVuIGF1ZGlvIHNlc3Npb24gaXMgaW50ZXJydXB0ZWQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKaW5kZXggNTU0MzE1NDFlMzY0
NmNlOWY4MTcwNGM4NDAzZTc5MzkzZjQ0ZjhjYy4uY2VkNzEyYTIzZWJjOGYyYWExZjI5YzMwZDFm
MGNhODdlMTQ4ZGUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5j
cHAKQEAgLTIzMCw3ICsyMzAsNyBAQCBib29sIFBhdGg6OmlzRW1wdHkoKSBjb25zdAogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQotICAgIGlmICho
YXNBbnlJbmxpbmVEYXRhKCkpCisgICAgaWYgKGhhc0lubGluZURhdGEoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogI2VuZGlmCiAKQEAgLTM0OCw3ICszNDgsNyBAQCB2b2lkIFBhdGg6OmFkZFF1
YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludCwgY29uc3QgRmxvYXRQb2lu
dCYgZW5kUAogI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQogICAgIGlmIChpc051bGwoKSB8
fCBoYXNJbmxpbmVEYXRhPE1vdmVEYXRhPigpKSB7CiAgICAgICAgIFF1YWRDdXJ2ZURhdGEgY3Vy
dmU7Ci0gICAgICAgIGN1cnZlLnN0YXJ0UG9pbnQgPSBoYXNBbnlJbmxpbmVEYXRhKCkgPyBXVEY6
OmdldDxNb3ZlRGF0YT4obV9pbmxpbmVEYXRhKS5sb2NhdGlvbiA6IEZsb2F0UG9pbnQoKTsKKyAg
ICAgICAgY3VydmUuc3RhcnRQb2ludCA9IGhhc0lubGluZURhdGEoKSA/IFdURjo6Z2V0PE1vdmVE
YXRhPihtX2lubGluZURhdGEpLmxvY2F0aW9uIDogRmxvYXRQb2ludCgpOwogICAgICAgICBjdXJ2
ZS5jb250cm9sUG9pbnQgPSBjb250cm9sUG9pbnQ7CiAgICAgICAgIGN1cnZlLmVuZFBvaW50ID0g
ZW5kUG9pbnQ7CiAgICAgICAgIG1faW5saW5lRGF0YSA9IHsgV1RGTW92ZShjdXJ2ZSkgfTsKQEAg
LTM2NCw3ICszNjQsNyBAQCB2b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQ
b2ludCYgY29udHJvbFBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgYwogI2lmIEVOQUJMRShJTkxJ
TkVfUEFUSF9EQVRBKQogICAgIGlmIChpc051bGwoKSB8fCBoYXNJbmxpbmVEYXRhPE1vdmVEYXRh
PigpKSB7CiAgICAgICAgIEJlemllckN1cnZlRGF0YSBjdXJ2ZTsKLSAgICAgICAgY3VydmUuc3Rh
cnRQb2ludCA9IGhhc0FueUlubGluZURhdGEoKSA/IFdURjo6Z2V0PE1vdmVEYXRhPihtX2lubGlu
ZURhdGEpLmxvY2F0aW9uIDogRmxvYXRQb2ludCgpOworICAgICAgICBjdXJ2ZS5zdGFydFBvaW50
ID0gaGFzSW5saW5lRGF0YSgpID8gV1RGOjpnZXQ8TW92ZURhdGE+KG1faW5saW5lRGF0YSkubG9j
YXRpb24gOiBGbG9hdFBvaW50KCk7CiAgICAgICAgIGN1cnZlLmNvbnRyb2xQb2ludDEgPSBjb250
cm9sUG9pbnQxOwogICAgICAgICBjdXJ2ZS5jb250cm9sUG9pbnQyID0gY29udHJvbFBvaW50MjsK
ICAgICAgICAgY3VydmUuZW5kUG9pbnQgPSBlbmRQb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BhdGguaAppbmRleCBlNmRlYTRjNDkyMDQ3MTMxMzkwZDBjNjRkNjhkODY0N2Yz
MzVlNTE2Li5lNWZlNzgyMTRmZjNiNTI4YzY5MDcxMjVjODBiMTMxZjA0MWVjY2NhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCkBAIC0xMzMsNiArMTMzLDE1IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBQYXRoJiBvcGVyYXRvcj0oY29uc3QgUGF0aCYpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIFBhdGgmIG9wZXJhdG9yPShQYXRoJiYpOwogCisjaWYgRU5BQkxF
KElOTElORV9QQVRIX0RBVEEpCisgICAgc3RhdGljIFBhdGggZnJvbShjb25zdCBJbmxpbmVQYXRo
RGF0YSYgaW5saW5lRGF0YSkKKyAgICB7CisgICAgICAgIFBhdGggcGF0aDsKKyAgICAgICAgcGF0
aC5tX2lubGluZURhdGEgPSBpbmxpbmVEYXRhOworICAgICAgICByZXR1cm4gcGF0aDsKKyAgICB9
CisjZW5kaWYKKwogICAgIHN0YXRpYyBQYXRoIHBvbHlnb25QYXRoRnJvbVBvaW50cyhjb25zdCBW
ZWN0b3I8RmxvYXRQb2ludD4mKTsKIAogICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6Ok5vblplcm8pIGNvbnN0OwpAQCAtMTk2LDE3ICsyMDUs
NiBAQCBwdWJsaWM6CiAgICAgUGxhdGZvcm1QYXRoUHRyIHBsYXRmb3JtUGF0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0aDsgfQogI2VuZGlmCiAKLSAgICB2b2lkIHJlbGVhc2VQbGF0Zm9ybVBhdGhJ
ZlBvc3NpYmxlKCkgY29uc3QKLSAgICB7Ci0jaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0g
ICAgICAgIGlmICghaGFzQW55SW5saW5lRGF0YSgpIHx8ICFtX3BhdGgpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgbV9wYXRoID0gbnVsbHB0cjsKLSAgICAgICAgbV9jb3B5UGF0aEJl
Zm9yZU11dGF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLSAgICB9Ci0KICNpZiAhVVNFKENBSVJPKQog
ICAgIC8vIGVuc3VyZVBsYXRmb3JtUGF0aCgpIHdpbGwgYWxsb2NhdGUgYSBQbGF0Zm9ybVBhdGgg
aWYgaXQgaGFzIG5vdCB5ZXQgYmVlbiBhbmQgd2lsbCBuZXZlciByZXR1cm4gbnVsbC4KICAgICBX
RUJDT1JFX0VYUE9SVCBQbGF0Zm9ybVBhdGhQdHIgZW5zdXJlUGxhdGZvcm1QYXRoKCk7CkBAIC0y
NDYsMTIgKzI0NCwxMyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEYXRhVHlwZT4gY29uc3QgRGF0YVR5cGUmIGlubGluZURh
dGEoKSBjb25zdDsKKyAgICBJbmxpbmVQYXRoRGF0YSBpbmxpbmVEYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9pbmxpbmVEYXRhOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0YVR5cGU+IGJvb2wg
aGFzSW5saW5lRGF0YSgpIGNvbnN0OworICAgIGJvb2wgaGFzSW5saW5lRGF0YSgpIGNvbnN0Owog
I2VuZGlmCiAKIHByaXZhdGU6CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAgYm9v
bCBoYXNBbnlJbmxpbmVEYXRhKCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0YVR5
cGU+IERhdGFUeXBlJiBpbmxpbmVEYXRhKCk7CiAgICAgT3B0aW9uYWw8RmxvYXRSZWN0PiBmYXN0
Qm91bmRpbmdSZWN0RnJvbUlubGluZURhdGEoKSBjb25zdDsKICAgICBPcHRpb25hbDxGbG9hdFJl
Y3Q+IGJvdW5kaW5nUmVjdEZyb21JbmxpbmVEYXRhKCkgY29uc3Q7CkBAIC0zMDgsNyArMzA3LDcg
QEAgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IFBh
dGgmKTsKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgUGF0aDo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCi0gICAgYm9v
bCBoYXNJbmxpbmVEYXRhID0gaGFzQW55SW5saW5lRGF0YSgpOworICAgIGJvb2wgaGFzSW5saW5l
RGF0YSA9IHRoaXMtPmhhc0lubGluZURhdGEoKTsKICAgICBlbmNvZGVyIDw8IGhhc0lubGluZURh
dGE7CiAgICAgaWYgKGhhc0lubGluZURhdGEpIHsKICAgICAgICAgZW5jb2RlciA8PCBtX2lubGlu
ZURhdGE7CkBAIC00NDAsNyArNDM5LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0YVR5cGU+IGlu
bGluZSBEYXRhVHlwZSYgUGF0aDo6aW5saW5lRGF0YSgpCiAgICAgcmV0dXJuIFdURjo6Z2V0PERh
dGFUeXBlPihtX2lubGluZURhdGEpOwogfQogCi1pbmxpbmUgYm9vbCBQYXRoOjpoYXNBbnlJbmxp
bmVEYXRhKCkgY29uc3QKK2lubGluZSBib29sIFBhdGg6Omhhc0lubGluZURhdGEoKSBjb25zdAog
ewogICAgIHJldHVybiAhaGFzSW5saW5lRGF0YTxNb25vc3RhdGU+KCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAppbmRleCAyY2E3MzUwYjRh
ZDkzYjIyMzRhMWIzMzA1MGQxZDljOWY3Y2MwNGMyLi41YmE0OGY3MmQyOWM1MWYyZGU4MWVlNmU5
MjZjNDg2MmY5MDgyZDgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BhdGhDRy5jcHAKQEAgLTEyNSw3ICsxMjUsNyBAQCBQYXRoOjp+UGF0aCgpID0gZGVmYXVs
dDsKIAogUGxhdGZvcm1QYXRoUHRyIFBhdGg6OnBsYXRmb3JtUGF0aCgpIGNvbnN0CiB7Ci0gICAg
aWYgKCFtX3BhdGggJiYgaGFzQW55SW5saW5lRGF0YSgpKQorICAgIGlmICghbV9wYXRoICYmIGhh
c0lubGluZURhdGEoKSkKICAgICAgICAgY3JlYXRlQ0dQYXRoKCk7CiAgICAgcmV0dXJuIG1fcGF0
aC5nZXQoKTsKIH0KQEAgLTE0NCw3ICsxNDQsNyBAQCBQbGF0Zm9ybVBhdGhQdHIgUGF0aDo6ZW5z
dXJlUGxhdGZvcm1QYXRoKCkKIAogYm9vbCBQYXRoOjppc051bGwoKSBjb25zdAogewotICAgIHJl
dHVybiAhbV9wYXRoICYmICFoYXNBbnlJbmxpbmVEYXRhKCk7CisgICAgcmV0dXJuICFtX3BhdGgg
JiYgIWhhc0lubGluZURhdGEoKTsKIH0KIAogUGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhlcikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0LmgKaW5kZXggNTA2ZGFiYWIwYjhiNGI3MzE0NzZiZGY5ZjMwOTU2
NzJiOTEyZWYxOS4uODgxMDhkMWY3ZTMxMjliYTUzMDIxMDFhNDQwNzM4NTU3NTA2YTg3YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0LmgKQEAgLTQ3LDggKzQ3LDEwIEBAIGVudW0gY2xhc3MgSXRlbVR5
cGUgOiB1aW50OF90IHsKICAgICBTY2FsZSwKICAgICBDb25jYXRlbmF0ZUNUTSwKICAgICBTZXRD
VE0sCi0gICAgU2V0RmlsbENvbG9yLAotICAgIFNldFN0cm9rZVN0YXRlLAorICAgIFNldElubGlu
ZUZpbGxHcmFkaWVudCwKKyAgICBTZXRJbmxpbmVGaWxsQ29sb3IsCisgICAgU2V0SW5saW5lU3Ry
b2tlQ29sb3IsCisgICAgU2V0U3Ryb2tlVGhpY2tuZXNzLAogICAgIFNldFN0YXRlLAogICAgIFNl
dExpbmVDYXAsCiAgICAgU2V0TGluZURhc2gsCkBAIC04MCwxMSArODIsMTcgQEAgZW51bSBjbGFz
cyBJdGVtVHlwZSA6IHVpbnQ4X3QgewogICAgIEZpbGxDb21wb3NpdGVkUmVjdCwKICAgICBGaWxs
Um91bmRlZFJlY3QsCiAgICAgRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUsCisjaWYgRU5BQkxFKElO
TElORV9QQVRIX0RBVEEpCisgICAgRmlsbElubGluZVBhdGgsCisjZW5kaWYKICAgICBGaWxsUGF0
aCwKICAgICBGaWxsRWxsaXBzZSwKICAgICBQdXRJbWFnZURhdGEsCiAgICAgUGFpbnRGcmFtZUZv
ck1lZGlhLAogICAgIFN0cm9rZVJlY3QsCisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisg
ICAgU3Ryb2tlSW5saW5lUGF0aCwKKyNlbmRpZgogICAgIFN0cm9rZVBhdGgsCiAgICAgU3Ryb2tl
RWxsaXBzZSwKICAgICBDbGVhclJlY3QsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5j
cHAKaW5kZXggOGQ4YjI4MTkzODc1YzMxNjZmODFlZDA4ZTNkOTI5OTYxZjdiODcxNi4uN2JkNDAw
OWFhOTNjMjY2ZDEzNzVjMmQwMjVlYTI2Yzg5MTY1NWRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmNwcApAQCAtNzYsMTAgKzc2LDE0IEBAIHNpemVfdCBJdGVtOjpzaXplSW5C
eXRlcyhjb25zdCBJdGVtJiBpdGVtKQogICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNl
dENUTT4oaXRlbSkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkNvbmNhdGVuYXRlQ1RNOgogICAgICAg
ICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PENvbmNhdGVuYXRlQ1RNPihpdGVtKSk7Ci0gICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0RmlsbENvbG9yOgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0
PFNldEZpbGxDb2xvcj4oaXRlbSkpOwotICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVN0YXRl
OgotICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PFNldFN0cm9rZVN0YXRlPihpdGVtKSk7
CisgICAgY2FzZSBJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50OgorICAgICAgICByZXR1
cm4gc2l6ZW9mKGRvd25jYXN0PFNldElubGluZUZpbGxHcmFkaWVudD4oaXRlbSkpOworICAgIGNh
c2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvcjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihk
b3duY2FzdDxTZXRJbmxpbmVGaWxsQ29sb3I+KGl0ZW0pKTsKKyAgICBjYXNlIEl0ZW1UeXBlOjpT
ZXRJbmxpbmVTdHJva2VDb2xvcjoKKyAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRJ
bmxpbmVTdHJva2VDb2xvcj4oaXRlbSkpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRo
aWNrbmVzczoKKyAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTZXRTdHJva2VUaGlja25l
c3M+KGl0ZW0pKTsKICAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdGF0ZToKICAgICAgICAgcmV0dXJu
IHNpemVvZihkb3duY2FzdDxTZXRTdGF0ZT4oaXRlbSkpOwogICAgIGNhc2UgSXRlbVR5cGU6OlNl
dExpbmVDYXA6CkBAIC0xNDIsNiArMTQ2LDEwIEBAIHNpemVfdCBJdGVtOjpzaXplSW5CeXRlcyhj
b25zdCBJdGVtJiBpdGVtKQogICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSb3Vu
ZGVkUmVjdD4oaXRlbSkpOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlOgogICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlPihpdGVtKSk7CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVt
VHlwZTo6RmlsbElubGluZVBhdGg6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8Rmls
bElubGluZVBhdGg+KGl0ZW0pKTsKKyNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRo
OgogICAgICAgICByZXR1cm4gc2l6ZW9mKGRvd25jYXN0PEZpbGxQYXRoPihpdGVtKSk7CiAgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbEVsbGlwc2U6CkBAIC0xNTIsNiArMTYwLDEwIEBAIHNpemVfdCBJ
dGVtOjpzaXplSW5CeXRlcyhjb25zdCBJdGVtJiBpdGVtKQogICAgICAgICByZXR1cm4gc2l6ZW9m
KGRvd25jYXN0PFBhaW50RnJhbWVGb3JNZWRpYT4oaXRlbSkpOwogICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZVJlY3Q6CiAgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ryb2tlUmVjdD4o
aXRlbSkpOworI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6
OlN0cm9rZUlubGluZVBhdGg6CisgICAgICAgIHJldHVybiBzaXplb2YoZG93bmNhc3Q8U3Ryb2tl
SW5saW5lUGF0aD4oaXRlbSkpOworI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0
aDoKICAgICAgICAgcmV0dXJuIHNpemVvZihkb3duY2FzdDxTdHJva2VQYXRoPihpdGVtKSk7CiAg
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlRWxsaXBzZToKQEAgLTMyMCw0NiArMzMyLDEyNyBAQCBz
dGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29uY2F0
ZW5hdGVDVE0mIGl0ZW0pCiAgICAgcmV0dXJuIHRzOwogfQogCi1SZWY8U2V0RmlsbENvbG9yPiBT
ZXRGaWxsQ29sb3I6OmNyZWF0ZShDb2xvciBjb2xvcikKK1NldElubGluZUZpbGxHcmFkaWVudDo6
U2V0SW5saW5lRmlsbEdyYWRpZW50KGNvbnN0IEdyYWRpZW50JiBncmFkaWVudCkKKyAgICA6IEl0
ZW0oSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudCkKKyAgICAsIG1fZGF0YShncmFkaWVu
dC5kYXRhKCkpCisgICAgLCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbihncmFkaWVudC5n
cmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpCisgICAgLCBtX3NwcmVhZE1ldGhvZChncmFkaWVudC5z
cHJlYWRNZXRob2QoKSkKKyAgICAsIG1fY29sb3JTdG9wQ291bnQoc3RhdGljX2Nhc3Q8dWludDhf
dD4oZ3JhZGllbnQuc3RvcHMoKS5zaXplKCkpKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fY29s
b3JTdG9wQ291bnQgPD0gbWF4Q29sb3JTdG9wQ291bnQpOworICAgIGZvciAodWludDhfdCBpID0g
MDsgaSA8IG1fY29sb3JTdG9wQ291bnQ7ICsraSkgeworICAgICAgICBtX29mZnNldHNbaV0gPSBn
cmFkaWVudC5zdG9wcygpW2ldLm9mZnNldDsKKyAgICAgICAgbV9jb2xvcnNbaV0gPSBncmFkaWVu
dC5zdG9wcygpW2ldLmNvbG9yLmFzSW5saW5lKCk7CisgICAgfQorfQorCitSZWY8R3JhZGllbnQ+
IFNldElubGluZUZpbGxHcmFkaWVudDo6Z3JhZGllbnQoKSBjb25zdAoreworICAgIGF1dG8gZ3Jh
ZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpEYXRhKG1fZGF0YSkpOworICAgIGZv
ciAodWludDhfdCBpID0gMDsgaSA8IG1fY29sb3JTdG9wQ291bnQ7ICsraSkKKyAgICAgICAgZ3Jh
ZGllbnQtPmFkZENvbG9yU3RvcCh7IG1fb2Zmc2V0c1tpXSwgQ29sb3IobV9jb2xvcnNbaV0pIH0p
OworICAgIGdyYWRpZW50LT5zZXRTcHJlYWRNZXRob2QobV9zcHJlYWRNZXRob2QpOworICAgIGdy
YWRpZW50LT5zZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKG1fZ3JhZGllbnRTcGFjZVRyYW5zZm9y
bWF0aW9uKTsKKyAgICByZXR1cm4gZ3JhZGllbnQ7Cit9CisKK1JlZjxTZXRJbmxpbmVGaWxsR3Jh
ZGllbnQ+IFNldElubGluZUZpbGxHcmFkaWVudDo6Y3JlYXRlKGNvbnN0IEdyYWRpZW50JiBncmFk
aWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXRJbmxpbmVGaWxsR3JhZGllbnQo
Z3JhZGllbnQpKTsKK30KKworU2V0SW5saW5lRmlsbEdyYWRpZW50OjpTZXRJbmxpbmVGaWxsR3Jh
ZGllbnQoZmxvYXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF0sIFNSR0JBPHVpbnQ4X3Q+IGNv
bG9yc1ttYXhDb2xvclN0b3BDb3VudF0sIGNvbnN0IEdyYWRpZW50OjpEYXRhJiBkYXRhLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiwgR3JhZGllbnRT
cHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kLCB1aW50OF90IGNvbG9yU3RvcENvdW50KQorICAgIDog
SXRlbShJdGVtVHlwZTo6U2V0SW5saW5lRmlsbEdyYWRpZW50KQorICAgICwgbV9kYXRhKGRhdGEp
CisgICAgLCBtX2dyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbihncmFkaWVudFNwYWNlVHJhbnNm
b3JtYXRpb24pCisgICAgLCBtX3NwcmVhZE1ldGhvZChzcHJlYWRNZXRob2QpCisgICAgLCBtX2Nv
bG9yU3RvcENvdW50KGNvbG9yU3RvcENvdW50KQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fY29s
b3JTdG9wQ291bnQgPD0gbWF4Q29sb3JTdG9wQ291bnQpOworICAgIGZvciAodWludDhfdCBpID0g
MDsgaSA8IG1fY29sb3JTdG9wQ291bnQ7ICsraSkgeworICAgICAgICBtX29mZnNldHNbaV0gPSBv
ZmZzZXRzW2ldOworICAgICAgICBtX2NvbG9yc1tpXSA9IGNvbG9yc1tpXTsKKyAgICB9Cit9CisK
K1NldElubGluZUZpbGxHcmFkaWVudDo6flNldElubGluZUZpbGxHcmFkaWVudCgpID0gZGVmYXVs
dDsKKwordm9pZCBTZXRJbmxpbmVGaWxsR3JhZGllbnQ6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAobV9jb2xvclN0b3BDb3VudCA8PSBtYXhDb2xvclN0
b3BDb3VudCkKKyAgICAgICAgY29udGV4dC5zZXRGaWxsR3JhZGllbnQoZ3JhZGllbnQoKSk7Cit9
CisKK2Jvb2wgU2V0SW5saW5lRmlsbEdyYWRpZW50Ojppc0lubGluZShjb25zdCBHcmFkaWVudCYg
Z3JhZGllbnQpCit7CisgICAgaWYgKGdyYWRpZW50LnN0b3BzKCkuc2l6ZSgpID4gU2V0SW5saW5l
RmlsbEdyYWRpZW50OjptYXhDb2xvclN0b3BDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZm9yIChhdXRvJiBjb2xvclN0b3AgOiBncmFkaWVudC5zdG9wcygpKSB7CisgICAgICAg
IGlmICghY29sb3JTdG9wLmNvbG9yLmlzSW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRJbmxpbmVGaWxsR3JhZGllbnQmKQor
eworICAgIC8vIEZJWE1FOiBEdW1wIGdyYWRpZW50IGRhdGEuCisgICAgcmV0dXJuIHRzOworfQor
CitSZWY8U2V0SW5saW5lRmlsbENvbG9yPiBTZXRJbmxpbmVGaWxsQ29sb3I6OmNyZWF0ZShTUkdC
QTx1aW50OF90PiBjb2xvckRhdGEpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0Rmls
bENvbG9yKGNvbG9yKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0SW5saW5lRmlsbENv
bG9yKGNvbG9yRGF0YSkpOwogfQogCi1TZXRGaWxsQ29sb3I6On5TZXRGaWxsQ29sb3IoKSA9IGRl
ZmF1bHQ7CitTZXRJbmxpbmVGaWxsQ29sb3I6On5TZXRJbmxpbmVGaWxsQ29sb3IoKSA9IGRlZmF1
bHQ7CiAKLXZvaWQgU2V0RmlsbENvbG9yOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0Cit2b2lkIFNldElubGluZUZpbGxDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogewotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1fY29sb3IpOworICAg
IGNvbnRleHQuc2V0RmlsbENvbG9yKGNvbG9yKCkpOwogfQogCi1zdGF0aWMgVGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0RmlsbENvbG9yJiBzdGF0ZSkKK3N0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBTZXRJbmxp
bmVGaWxsQ29sb3ImIHN0YXRlKQogewogICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBzdGF0
ZS5jb2xvcigpKTsKICAgICByZXR1cm4gdHM7CiB9CiAKLVJlZjxTZXRTdHJva2VTdGF0ZT4gU2V0
U3Ryb2tlU3RhdGU6OmNyZWF0ZShPcHRpb25hbDxDb2xvcj4mJiBjb2xvciwgT3B0aW9uYWw8Zmxv
YXQ+JiYgdGhpY2tuZXNzKQorUmVmPFNldElubGluZVN0cm9rZUNvbG9yPiBTZXRJbmxpbmVTdHJv
a2VDb2xvcjo6Y3JlYXRlKFNSR0JBPHVpbnQ4X3Q+IGNvbG9yRGF0YSkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTZXRJbmxpbmVTdHJva2VDb2xvcihjb2xvckRhdGEpKTsKK30KKworU2V0
SW5saW5lU3Ryb2tlQ29sb3I6On5TZXRJbmxpbmVTdHJva2VDb2xvcigpID0gZGVmYXVsdDsKKwor
dm9pZCBTZXRJbmxpbmVTdHJva2VDb2xvcjo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KSBjb25zdAogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldFN0cm9rZVN0YXRlKFdURk1v
dmUoY29sb3IpLCBXVEZNb3ZlKHRoaWNrbmVzcykpKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNv
bG9yKGNvbG9yKCkpOwogfQogCi1TZXRTdHJva2VTdGF0ZTo6flNldFN0cm9rZVN0YXRlKCkgPSBk
ZWZhdWx0Oworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFNldElubGluZVN0cm9rZUNvbG9yJiBzdGF0ZSkKK3sKKyAgICB0cy5kdW1wUHJvcGVydHko
ImNvbG9yIiwgc3RhdGUuY29sb3IoKSk7CisgICAgcmV0dXJuIHRzOworfQogCi12b2lkIFNldFN0
cm9rZVN0YXRlOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CitSZWY8U2V0
U3Ryb2tlVGhpY2tuZXNzPiBTZXRTdHJva2VUaGlja25lc3M6OmNyZWF0ZShmbG9hdCB0aGlja25l
c3MpCiB7Ci0gICAgaWYgKG1faGFzQ29sb3IpCi0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29s
b3IobV9jb2xvcik7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0U3Ryb2tlVGhpY2tuZXNz
KHRoaWNrbmVzcykpOworfQogCi0gICAgaWYgKG1faGFzVGhpY2tuZXNzKQotICAgICAgICBjb250
ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhtX3RoaWNrbmVzcyk7CitTZXRTdHJva2VUaGlja25lc3M6
On5TZXRTdHJva2VUaGlja25lc3MoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgU2V0U3Ryb2tlVGhpY2tu
ZXNzOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgY29udGV4
dC5zZXRTdHJva2VUaGlja25lc3MobV90aGlja25lc3MpOwogfQogCi1zdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU2V0U3Ryb2tlU3RhdGUmIHN0YXRl
KQorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFNl
dFN0cm9rZVRoaWNrbmVzcyYgc3RhdGUpCiB7Ci0gICAgaWYgKHN0YXRlLmhhc0NvbG9yKCkpCi0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiY29sb3IiLCBzdGF0ZS5jb2xvcigpKTsKLSAgICBpZiAo
c3RhdGUuaGFzVGhpY2tuZXNzKCkpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgidGhpY2tuZXNz
Iiwgc3RhdGUudGhpY2tuZXNzKCkpOworICAgIHRzLmR1bXBQcm9wZXJ0eSgidGhpY2tuZXNzIiwg
c3RhdGUudGhpY2tuZXNzKCkpOwogICAgIHJldHVybiB0czsKIH0KIApAQCAtMTE2NSw2ICsxMjU4
LDMwIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSYgaXRlCiAgICAgcmV0dXJuIHRzOwogfQogCisjaWYg
RU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisKK0ZpbGxJbmxpbmVQYXRoOjpGaWxsSW5saW5lUGF0
aChjb25zdCBJbmxpbmVQYXRoRGF0YSYgcGF0aERhdGEpCisgICAgOiBEcmF3aW5nSXRlbShJdGVt
VHlwZTo6RmlsbElubGluZVBhdGgpCisgICAgLCBtX3BhdGhEYXRhKHBhdGhEYXRhKQoreworfQor
CitGaWxsSW5saW5lUGF0aDo6fkZpbGxJbmxpbmVQYXRoKCkgPSBkZWZhdWx0OworCit2b2lkIEZp
bGxJbmxpbmVQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7Cisg
ICAgY29udGV4dC5maWxsUGF0aChwYXRoKCkpOworfQorCitzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRmlsbElubGluZVBhdGgmIGl0ZW0pCit7Cisg
ICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5k
dW1wUHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7CisgICAgcmV0dXJuIHRzOworfQorCisj
ZW5kaWYgLy8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisKIEZpbGxQYXRoOjpGaWxsUGF0aChj
b25zdCBQYXRoJiBwYXRoKQogICAgIDogRHJhd2luZ0l0ZW0oSXRlbVR5cGU6OkZpbGxQYXRoKQog
ICAgICwgbV9wYXRoKHBhdGgpCkBAIC0xMTc2LDcgKzEyOTMsNiBAQCBGaWxsUGF0aDo6fkZpbGxQ
YXRoKCkgPSBkZWZhdWx0Owogdm9pZCBGaWxsUGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQuZmlsbFBhdGgobV9wYXRoKTsKLSAgICBtX3Bh
dGgucmVsZWFzZVBsYXRmb3JtUGF0aElmUG9zc2libGUoKTsKIH0KIAogc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEZpbGxQYXRoJiBpdGVtKQpAQCAt
MTMyNiw3ICsxNDQyLDYgQEAgT3B0aW9uYWw8RmxvYXRSZWN0PiBTdHJva2VQYXRoOjpsb2NhbEJv
dW5kcyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnMKIHZvaWQgU3Ryb2tlUGF0
aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGNvbnRleHQu
c3Ryb2tlUGF0aChtX3BhdGgpOwotICAgIG1fcGF0aC5yZWxlYXNlUGxhdGZvcm1QYXRoSWZQb3Nz
aWJsZSgpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgU3Ryb2tlUGF0aCYgaXRlbSkKQEAgLTEzNjUsNiArMTQ4MCw0MCBAQCBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgU3Ryb2tlRWxsaXBz
ZSYgaXRlbSkKICAgICByZXR1cm4gdHM7CiB9CiAKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFU
QSkKKworT3B0aW9uYWw8RmxvYXRSZWN0PiBTdHJva2VJbmxpbmVQYXRoOjpsb2NhbEJvdW5kcyhj
b25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IE5l
ZWQgdG8gdGFrZSBzdHJva2UgdGhpY2tuZXNzIGludG8gYWNjb3VudCBjb3JyZWN0bHksIHZpYSBD
R1BhdGhCeVN0cm9raW5nUGF0aCgpLgorICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzcyA9IGNvbnRl
eHQuc3Ryb2tlVGhpY2tuZXNzKCk7CisKKyAgICBGbG9hdFJlY3QgYm91bmRzID0gcGF0aCgpLmZh
c3RCb3VuZGluZ1JlY3QoKTsKKyAgICBib3VuZHMuZXhwYW5kKHN0cm9rZVRoaWNrbmVzcywgc3Ry
b2tlVGhpY2tuZXNzKTsKKyAgICByZXR1cm4gYm91bmRzOworfQorCit2b2lkIFN0cm9rZUlubGlu
ZVBhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICBjb250
ZXh0LnN0cm9rZVBhdGgocGF0aCgpKTsKK30KKworc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFN0cm9rZUlubGluZVBhdGgmIGl0ZW0pCit7CisgICAg
dHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgRHJhd2luZ0l0ZW0mPihpdGVtKTsKKyAgICB0cy5kdW1w
UHJvcGVydHkoInBhdGgiLCBpdGVtLnBhdGgoKSk7CisgICAgcmV0dXJuIHRzOworfQorCitTdHJv
a2VJbmxpbmVQYXRoOjpTdHJva2VJbmxpbmVQYXRoKGNvbnN0IElubGluZVBhdGhEYXRhJiBwYXRo
RGF0YSkKKyAgICA6IERyYXdpbmdJdGVtKEl0ZW1UeXBlOjpTdHJva2VJbmxpbmVQYXRoKQorICAg
ICwgbV9wYXRoRGF0YShwYXRoRGF0YSkKK3sKK30KKworU3Ryb2tlSW5saW5lUGF0aDo6flN0cm9r
ZUlubGluZVBhdGgoKSA9IGRlZmF1bHQ7CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5MSU5FX1BBVEhf
REFUQSkKKwogU3Ryb2tlUGF0aDo6U3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIDog
RHJhd2luZ0l0ZW0oSXRlbVR5cGU6OlN0cm9rZVBhdGgpCiAgICAgLCBtX3BhdGgocGF0aCkKQEAg
LTE0ODAsOCArMTYyOSwxMCBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgY29uc3QgSXRlbVR5cGUmIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6U2NhbGU6
IHRzIDw8ICJzY2FsZSI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldENUTTogdHMgPDwg
InNldC1jdG0iOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDb25jYXRlbmF0ZUNUTTogdHMg
PDwgImNvbmNhdGVudGF0ZS1jdG0iOyBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRGaWxs
Q29sb3I6IHRzIDw8ICJzZXQtZmlsbC1jb2xvciI7IGJyZWFrOwotICAgIGNhc2UgSXRlbVR5cGU6
OlNldFN0cm9rZVN0YXRlOiB0cyA8PCAic2V0LXN0cm9rZS1zdGF0ZSI7IGJyZWFrOworICAgIGNh
c2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudDogdHMgPDwgInNldC1pbmxpbmUtZmls
bC1ncmFkaWVudCI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xv
cjogdHMgPDwgInNldC1pbmxpbmUtZmlsbC1jb2xvciI7IGJyZWFrOworICAgIGNhc2UgSXRlbVR5
cGU6OlNldElubGluZVN0cm9rZUNvbG9yOiB0cyA8PCAic2V0LWlubGluZS1zdHJva2UtY29sb3Ii
OyBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VUaGlja25lc3M6IHRzIDw8ICJz
ZXQtc3Ryb2tlLXRoaWNrbmVzcyI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRl
OiB0cyA8PCAic2V0LXN0YXRlIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0TGluZUNh
cDogdHMgPDwgInNldC1saW5lLWNhcCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldExp
bmVEYXNoOiB0cyA8PCAic2V0LWxpbmUtZGFzaCI7IGJyZWFrOwpAQCAtMTUxMiwxMSArMTY2Mywx
NyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
SXRlbVR5cGUmIHR5cGUpCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbENvbXBvc2l0ZWRSZWN0OiB0
cyA8PCAiZmlsbC1jb21wb3NpdGVkLXJlY3QiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpG
aWxsUm91bmRlZFJlY3Q6IHRzIDw8ICJmaWxsLXJvdW5kZWQtcmVjdCI7IGJyZWFrOwogICAgIGNh
c2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOiB0cyA8PCAiZmlsbC1yZWN0LXdp
dGgtcm91bmRlZC1ob2xlIjsgYnJlYWs7CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisg
ICAgY2FzZSBJdGVtVHlwZTo6RmlsbElubGluZVBhdGg6IHRzIDw8ICJmaWxsLWlubGluZS1wYXRo
IjsgYnJlYWs7CisjZW5kaWYKICAgICBjYXNlIEl0ZW1UeXBlOjpGaWxsUGF0aDogdHMgPDwgImZp
bGwtcGF0aCI7IGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxFbGxpcHNlOiB0cyA8PCAi
ZmlsbC1lbGxpcHNlIjsgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6UHV0SW1hZ2VEYXRhOiB0
cyA8PCAicHV0LWltYWdlLWRhdGEiOyBicmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpQYWludEZy
YW1lRm9yTWVkaWE6IHRzIDw8ICJwYWludC1mcmFtZS1mb3ItbWVkaWEiOyBicmVhazsKICAgICBj
YXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OiB0cyA8PCAic3Ryb2tlLXJlY3QiOyBicmVhazsKKyNp
ZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VJbmxp
bmVQYXRoOiB0cyA8PCAic3Ryb2tlLWlubGluZS1wYXRoIjsgYnJlYWs7CisjZW5kaWYKICAgICBj
YXNlIEl0ZW1UeXBlOjpTdHJva2VQYXRoOiB0cyA8PCAic3Ryb2tlLXBhdGgiOyBicmVhazsKICAg
ICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlOiB0cyA8PCAic3Ryb2tlLWVsbGlwc2UiOyBi
cmVhazsKICAgICBjYXNlIEl0ZW1UeXBlOjpDbGVhclJlY3Q6IHRzIDw8ICJjbGVhci1yZWN0Ijsg
YnJlYWs7CkBAIC0xNTU0LDExICsxNzExLDE3IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IEl0ZW0mIGl0ZW0pCiAgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0
ZW5hdGVDVE06CiAgICAgICAgIHRzIDw8IGRvd25jYXN0PENvbmNhdGVuYXRlQ1RNPihpdGVtKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0RmlsbENvbG9yOgotICAgICAg
ICB0cyA8PCBkb3duY2FzdDxTZXRGaWxsQ29sb3I+KGl0ZW0pOworICAgIGNhc2UgSXRlbVR5cGU6
OlNldElubGluZUZpbGxHcmFkaWVudDoKKyAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0SW5saW5l
RmlsbEdyYWRpZW50PihpdGVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlwZTo6
U2V0SW5saW5lRmlsbENvbG9yOgorICAgICAgICB0cyA8PCBkb3duY2FzdDxTZXRJbmxpbmVGaWxs
Q29sb3I+KGl0ZW0pOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJv
a2VTdGF0ZToKLSAgICAgICAgdHMgPDwgZG93bmNhc3Q8U2V0U3Ryb2tlU3RhdGU+KGl0ZW0pOwor
ICAgIGNhc2UgSXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yOgorICAgICAgICB0cyA8PCBk
b3duY2FzdDxTZXRJbmxpbmVTdHJva2VDb2xvcj4oaXRlbSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAgdHMgPDwgZG93bmNh
c3Q8U2V0U3Ryb2tlVGhpY2tuZXNzPihpdGVtKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
dGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIHRzIDw8IGRvd25jYXN0PFNldFN0YXRlPihpdGVt
KTsKQEAgLTE2NTAsNiArMTgxMywxMSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBJdGVtJiBpdGVtKQogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlOgogICAgICAgICB0cyA8PCBkb3duY2FzdDxGaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZT4oaXRlbSk7CiAgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShJTkxJTkVfUEFUSF9EQVRB
KQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgorICAgICAgICB0cyA8PCBkb3du
Y2FzdDxGaWxsSW5saW5lUGF0aD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAg
Y2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CiAgICAgICAgIHRzIDw8IGRvd25jYXN0PEZpbGxQYXRo
PihpdGVtKTsKICAgICAgICAgYnJlYWs7CkBAIC0xNjY1LDYgKzE4MzMsMTEgQEAgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgSXRlbSYgaXRlbSkKICAgICBjYXNl
IEl0ZW1UeXBlOjpTdHJva2VSZWN0OgogICAgICAgICB0cyA8PCBkb3duY2FzdDxTdHJva2VSZWN0
PihpdGVtKTsKICAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisg
ICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyAgICAgICAgdHMgPDwgZG93bmNh
c3Q8U3Ryb2tlSW5saW5lUGF0aD4oaXRlbSk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAg
Y2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0aDoKICAgICAgICAgdHMgPDwgZG93bmNhc3Q8U3Ryb2tl
UGF0aD4oaXRlbSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmgKaW5kZXggZDRjYTk4ZTY0ODQ1MWIyNmNiZjY0OTgzNWIxZGEyZjNjMjNiNGFmZi4uZGRkZGYx
OGIyNGU5MDljYzkzMzI3MTU1ZjI5OThhN2IxYzQ2ZTkxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RJdGVtcy5oCkBAIC0zMzYsMTE5ICszMzYsMjE5IEBAIE9wdGlvbmFsPFJlZjxDb25jYXRl
bmF0ZUNUTT4+IENvbmNhdGVuYXRlQ1RNOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKICAgICBy
ZXR1cm4gQ29uY2F0ZW5hdGVDVE06OmNyZWF0ZSgqdHJhbnNmb3JtKTsKIH0KIAotY2xhc3MgU2V0
RmlsbENvbG9yIDogcHVibGljIEl0ZW0geworY2xhc3MgU2V0SW5saW5lRmlsbEdyYWRpZW50IDog
cHVibGljIEl0ZW0gewogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8U2V0
RmlsbENvbG9yPiBjcmVhdGUoQ29sb3IpOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBt
YXhDb2xvclN0b3BDb3VudCA9IDQ7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRG
aWxsQ29sb3IoKTsKKyAgICBzdGF0aWMgUmVmPFNldElubGluZUZpbGxHcmFkaWVudD4gY3JlYXRl
KGNvbnN0IEdyYWRpZW50Jik7CisgICAgc3RhdGljIGJvb2wgaXNJbmxpbmUoY29uc3QgR3JhZGll
bnQmKTsKIAotICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQorICAg
IHZpcnR1YWwgflNldElubGluZUZpbGxHcmFkaWVudCgpOworCisgICAgUmVmPEdyYWRpZW50PiBn
cmFkaWVudCgpIGNvbnN0OwogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBP
cHRpb25hbDxSZWY8U2V0RmlsbENvbG9yPj4gZGVjb2RlKERlY29kZXImKTsKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPFNldElubGluZUZpbGxHcmFkaWVu
dD4+IGRlY29kZShEZWNvZGVyJik7CiAKIHByaXZhdGU6Ci0gICAgU2V0RmlsbENvbG9yKENvbG9y
IGNvbG9yKQotICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldEZpbGxDb2xvcikKLSAgICAgICAg
LCBtX2NvbG9yKGNvbG9yKQorICAgIHN0YXRpYyBSZWY8U2V0SW5saW5lRmlsbEdyYWRpZW50PiBj
cmVhdGUoZmxvYXQgb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF0sIFNSR0JBPHVpbnQ4X3Q+IGNv
bG9yc1ttYXhDb2xvclN0b3BDb3VudF0sCisgICAgICAgIGNvbnN0IEdyYWRpZW50OjpEYXRhJiBk
YXRhLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiwg
R3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kLCB1aW50OF90IGNvbG9yU3RvcENvdW50
KQogICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0SW5saW5lRmlsbEdyYWRp
ZW50KG9mZnNldHMsIGNvbG9ycywgZGF0YSwgZ3JhZGllbnRTcGFjZVRyYW5zZm9ybWF0aW9uLCBz
cHJlYWRNZXRob2QsIGNvbG9yU3RvcENvdW50KSk7CiAgICAgfQogCisgICAgV0VCQ09SRV9FWFBP
UlQgU2V0SW5saW5lRmlsbEdyYWRpZW50KGZsb2F0IG9mZnNldHNbbWF4Q29sb3JTdG9wQ291bnRd
LCBTUkdCQTx1aW50OF90PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdLCBjb25zdCBHcmFkaWVu
dDo6RGF0YSYsCisgICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRTcGFjZVRy
YW5zZm9ybWF0aW9uLCBHcmFkaWVudFNwcmVhZE1ldGhvZCwgdWludDhfdCBjb2xvclN0b3BDb3Vu
dCk7CisKKyAgICBTZXRJbmxpbmVGaWxsR3JhZGllbnQoY29uc3QgR3JhZGllbnQmKTsKKwogICAg
IHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBDb2xv
ciBtX2NvbG9yOworICAgIGZsb2F0IG1fb2Zmc2V0c1ttYXhDb2xvclN0b3BDb3VudF07CisgICAg
U1JHQkE8dWludDhfdD4gbV9jb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdOworICAgIEdyYWRpZW50
OjpEYXRhIG1fZGF0YTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbV9ncmFkaWVudFNwYWNlVHJhbnNm
b3JtYXRpb247CisgICAgR3JhZGllbnRTcHJlYWRNZXRob2QgbV9zcHJlYWRNZXRob2QgeyBHcmFk
aWVudFNwcmVhZE1ldGhvZDo6UGFkIH07CisgICAgdWludDhfdCBtX2NvbG9yU3RvcENvdW50IHsg
MCB9OwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgU2V0RmlsbENvbG9yOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3ZvaWQgU2V0SW5saW5lRmlsbEdyYWRpZW50
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVyIDw8IG1fY29s
b3I7CisgICAgZW5jb2RlciA8PCBtX2NvbG9yU3RvcENvdW50OworICAgIGZvciAodWludDhfdCBp
ID0gMDsgaSA8IG1fY29sb3JTdG9wQ291bnQ7ICsraSkgeworICAgICAgICBlbmNvZGVyIDw8IG1f
b2Zmc2V0c1tpXTsKKyAgICAgICAgZW5jb2RlciA8PCBQYWNrZWRDb2xvcjo6UkdCQSB7IG1fY29s
b3JzW2ldIH0udmFsdWU7CisgICAgfQorICAgIGVuY29kZXIgPDwgbV9kYXRhOworICAgIGVuY29k
ZXIgPDwgbV9ncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CisgICAgZW5jb2RlciA8PCBtX3Nw
cmVhZE1ldGhvZDsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJlZjxT
ZXRGaWxsQ29sb3I+PiBTZXRGaWxsQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQorT3B0
aW9uYWw8UmVmPFNldElubGluZUZpbGxHcmFkaWVudD4+IFNldElubGluZUZpbGxHcmFkaWVudDo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgT3B0aW9uYWw8Q29sb3I+IGNvbG9yOwot
ICAgIGRlY29kZXIgPj4gY29sb3I7Ci0gICAgaWYgKCFjb2xvcikKKyAgICBPcHRpb25hbDx1aW50
OF90PiBjb2xvclN0b3BDb3VudDsKKyAgICBkZWNvZGVyID4+IGNvbG9yU3RvcENvdW50OworICAg
IGlmICghY29sb3JTdG9wQ291bnQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAg
ICBpZiAoKmNvbG9yU3RvcENvdW50ID4gbWF4Q29sb3JTdG9wQ291bnQpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisKKyAgICBmbG9hdCBvZmZzZXRzW21heENvbG9yU3RvcENvdW50XTsK
KyAgICBTUkdCQTx1aW50OF90PiBjb2xvcnNbbWF4Q29sb3JTdG9wQ291bnRdOworICAgIGZvciAo
dWludDhfdCBpID0gMDsgaSA8ICpjb2xvclN0b3BDb3VudDsgKytpKSB7CisgICAgICAgIE9wdGlv
bmFsPGZsb2F0PiBvZmZzZXQ7CisgICAgICAgIGRlY29kZXIgPj4gb2Zmc2V0OworICAgICAgICBp
ZiAoIW9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAgICAg
T3B0aW9uYWw8dWludDMyX3Q+IGNvbG9yOworICAgICAgICBkZWNvZGVyID4+IGNvbG9yOworICAg
ICAgICBpZiAoIWNvbG9yKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
ICAgICBjb2xvcnNbaV0gPSBhc1NSR0JBKFBhY2tlZENvbG9yOjpSR0JBIHsgKmNvbG9yIH0pOwor
ICAgICAgICBvZmZzZXRzW2ldID0gKm9mZnNldDsKKyAgICB9CisKKyAgICBPcHRpb25hbDxHcmFk
aWVudDo6RGF0YT4gZGF0YTsKKyAgICBkZWNvZGVyID4+IGRhdGE7CisgICAgaWYgKCFkYXRhKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8QWZmaW5lVHJhbnNm
b3JtPiBncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRpb247CisgICAgZGVjb2RlciA+PiBncmFkaWVu
dFNwYWNlVHJhbnNmb3JtYXRpb247CisgICAgaWYgKCFncmFkaWVudFNwYWNlVHJhbnNmb3JtYXRp
b24pCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxHcmFkaWVu
dFNwcmVhZE1ldGhvZD4gc3ByZWFkTWV0aG9kOworICAgIGRlY29kZXIgPj4gc3ByZWFkTWV0aG9k
OworICAgIGlmICghc3ByZWFkTWV0aG9kKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgcmV0dXJuIFNldEZpbGxDb2xvcjo6Y3JlYXRlKCpjb2xvcik7CisgICAgcmV0dXJuIHsg
U2V0SW5saW5lRmlsbEdyYWRpZW50OjpjcmVhdGUob2Zmc2V0cywgY29sb3JzLCAqZGF0YSwgKmdy
YWRpZW50U3BhY2VUcmFuc2Zvcm1hdGlvbiwgKnNwcmVhZE1ldGhvZCwgKmNvbG9yU3RvcENvdW50
KSB9OwogfQogCi1jbGFzcyBTZXRTdHJva2VTdGF0ZSA6IHB1YmxpYyBJdGVtIHsKK2NsYXNzIFNl
dElubGluZUZpbGxDb2xvciA6IHB1YmxpYyBJdGVtIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmVmPFNldFN0cm9rZVN0YXRlPiBjcmVhdGUoT3B0aW9uYWw8Q29sb3I+JiYs
IE9wdGlvbmFsPGZsb2F0PiYmIHRoaWNrbmVzcyk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxTZXRJbmxpbmVGaWxsQ29sb3I+IGNyZWF0ZShTUkdCQTx1aW50OF90Pik7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TZXRTdHJva2VTdGF0ZSgpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgflNldElubGluZUZpbGxDb2xvcigpOwogCi0gICAgQ29sb3IgY29sb3IoKSBj
b25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0gICAgYm9vbCBoYXNDb2xvcigpIGNvbnN0IHsgcmV0
dXJuIG1faGFzQ29sb3I7IH0KLQotICAgIGZsb2F0IHRoaWNrbmVzcygpIGNvbnN0IHsgcmV0dXJu
IG1fdGhpY2tuZXNzOyB9Ci0gICAgYm9vbCBoYXNUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBt
X2hhc1RoaWNrbmVzczsgfQorICAgIENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4geyBtX2Nv
bG9yRGF0YSB9OyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShF
bmNvZGVyJikgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlv
bmFsPFJlZjxTZXRTdHJva2VTdGF0ZT4+IGRlY29kZShEZWNvZGVyJik7CisgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTZXRJbmxpbmVGaWxsQ29sb3I+PiBk
ZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgotICAgIFNldFN0cm9rZVN0YXRlKE9wdGlvbmFs
PENvbG9yPiYmIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4mJiB0aGlja25lc3MpCi0gICAgICAgIDog
SXRlbShJdGVtVHlwZTo6U2V0U3Ryb2tlU3RhdGUpCi0gICAgICAgICwgbV9jb2xvcihjb2xvci52
YWx1ZU9yKENvbG9yKCkpKQotICAgICAgICAsIG1fdGhpY2tuZXNzKHRoaWNrbmVzcy52YWx1ZU9y
KDApKQotICAgICAgICAsIG1faGFzQ29sb3IoY29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAgLCBt
X2hhc1RoaWNrbmVzcyh0aGlja25lc3MuaGFzVmFsdWUoKSkKKyAgICBTZXRJbmxpbmVGaWxsQ29s
b3IoU1JHQkE8dWludDhfdD4gY29sb3JEYXRhKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNl
dElubGluZUZpbGxDb2xvcikKKyAgICAgICAgLCBtX2NvbG9yRGF0YShjb2xvckRhdGEpCiAgICAg
ewogICAgIH0KIAogICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJp
ZGU7CiAKLSAgICBDb2xvciBtX2NvbG9yOwotICAgIGZsb2F0IG1fdGhpY2tuZXNzIHsgMCB9Owot
ICAgIGJvb2wgbV9oYXNDb2xvciB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc1RoaWNrbmVzcyB7
IGZhbHNlIH07CisgICAgU1JHQkE8dWludDhfdD4gbV9jb2xvckRhdGE7CiB9OwogCiB0ZW1wbGF0
ZTxjbGFzcyBFbmNvZGVyPgotdm9pZCBTZXRTdHJva2VTdGF0ZTo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Cit2b2lkIFNldElubGluZUZpbGxDb2xvcjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0CiB7Ci0gICAgZW5jb2RlciA8PCBtX2hhc0NvbG9yOwotICAgIGlmIChtX2hh
c0NvbG9yKQotICAgICAgICBlbmNvZGVyIDw8IG1fY29sb3I7Ci0KLSAgICBlbmNvZGVyIDw8IG1f
aGFzVGhpY2tuZXNzOwotICAgIGlmIChtX2hhc1RoaWNrbmVzcykKLSAgICAgICAgZW5jb2RlciA8
PCBtX3RoaWNrbmVzczsKKyAgICBlbmNvZGVyIDw8IFBhY2tlZENvbG9yOjpSR0JBIHsgbV9jb2xv
ckRhdGEgfS52YWx1ZTsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPFJl
ZjxTZXRTdHJva2VTdGF0ZT4+IFNldFN0cm9rZVN0YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKK09wdGlvbmFsPFJlZjxTZXRJbmxpbmVGaWxsQ29sb3I+PiBTZXRJbmxpbmVGaWxsQ29sb3I6
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIE9wdGlvbmFsPGJvb2w+IGhhc0NvbG9y
OwotICAgIGRlY29kZXIgPj4gaGFzQ29sb3I7Ci0gICAgaWYgKCFoYXNDb2xvcikKKyAgICBPcHRp
b25hbDx1aW50MzJfdD4gdmFsdWU7CisgICAgZGVjb2RlciA+PiB2YWx1ZTsKKyAgICBpZiAoIXZh
bHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgT3B0aW9uYWw8Q29sb3I+
IGNvbG9yOwotICAgIGlmICgqaGFzQ29sb3IpIHsKLSAgICAgICAgZGVjb2RlciA+PiBjb2xvcjsK
LSAgICAgICAgaWYgKCFjb2xvcikKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgcmV0dXJuIFNldElubGluZUZpbGxDb2xvcjo6Y3JlYXRlKGFzU1JHQkEoUGFja2VkQ29sb3I6
OlJHQkEgeyAqdmFsdWUgfSkpOworfQorCitjbGFzcyBTZXRJbmxpbmVTdHJva2VDb2xvciA6IHB1
YmxpYyBJdGVtIHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNldElu
bGluZVN0cm9rZUNvbG9yPiBjcmVhdGUoU1JHQkE8dWludDhfdD4pOworCisgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB+U2V0SW5saW5lU3Ryb2tlQ29sb3IoKTsKKworICAgIENvbG9yIGNvbG9y
KCkgY29uc3QgeyByZXR1cm4geyBtX2NvbG9yRGF0YSB9OyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTZXRJbmxpbmVTdHJva2VDb2xvcj4+IGRl
Y29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6CisgICAgU2V0SW5saW5lU3Ryb2tlQ29sb3IoU1JH
QkE8dWludDhfdD4gY29sb3JEYXRhKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldElubGlu
ZVN0cm9rZUNvbG9yKQorICAgICAgICAsIG1fY29sb3JEYXRhKGNvbG9yRGF0YSkKKyAgICB7CiAg
ICAgfQogCi0gICAgT3B0aW9uYWw8Ym9vbD4gaGFzVGhpY2tuZXNzOwotICAgIGRlY29kZXIgPj4g
aGFzVGhpY2tuZXNzOwotICAgIGlmICghaGFzVGhpY2tuZXNzKQorICAgIHZvaWQgYXBwbHkoR3Jh
cGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBTUkdCQTx1aW50OF90PiBtX2Nv
bG9yRGF0YTsKK307CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIFNldElubGluZVN0
cm9rZUNvbG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVy
IDw8IFBhY2tlZENvbG9yOjpSR0JBIHsgbV9jb2xvckRhdGEgfS52YWx1ZTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZjxTZXRJbmxpbmVTdHJva2VDb2xvcj4+IFNl
dElubGluZVN0cm9rZUNvbG9yOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRp
b25hbDx1aW50MzJfdD4gdmFsdWU7CisgICAgZGVjb2RlciA+PiB2YWx1ZTsKKyAgICBpZiAoIXZh
bHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgT3B0aW9uYWw8ZmxvYXQ+
IHRoaWNrbmVzczsKLSAgICBpZiAoKmhhc1RoaWNrbmVzcykgewotICAgICAgICBkZWNvZGVyID4+
IHRoaWNrbmVzczsKLSAgICAgICAgaWYgKCF0aGlja25lc3MpCi0gICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIHJldHVybiBTZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3JlYXRlKGFz
U1JHQkEoUGFja2VkQ29sb3I6OlJHQkEgeyAqdmFsdWUgfSkpOworfQorCitjbGFzcyBTZXRTdHJv
a2VUaGlja25lc3MgOiBwdWJsaWMgSXRlbSB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZjxTZXRTdHJva2VUaGlja25lc3M+IGNyZWF0ZShmbG9hdCB0aGlja25lc3MpOwor
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+U2V0U3Ryb2tlVGhpY2tuZXNzKCk7CisKKyAg
ICBmbG9hdCB0aGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3RoaWNrbmVzczsgfQorCisgICAg
dGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWY8U2V0U3Ryb2tlVGhp
Y2tuZXNzPj4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBTZXRTdHJva2VUaGlj
a25lc3MoZmxvYXQgdGhpY2tuZXNzKQorICAgICAgICA6IEl0ZW0oSXRlbVR5cGU6OlNldFN0cm9r
ZVRoaWNrbmVzcykKKyAgICAgICAgLCBtX3RoaWNrbmVzcyh0aGlja25lc3MpCisgICAgewogICAg
IH0KIAotICAgIHJldHVybiBTZXRTdHJva2VTdGF0ZTo6Y3JlYXRlKFdURk1vdmUoY29sb3IpLCBX
VEZNb3ZlKHRoaWNrbmVzcykpOworICAgIHZvaWQgYXBwbHkoR3JhcGhpY3NDb250ZXh0JikgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICBmbG9hdCBtX3RoaWNrbmVzcyB7IDAgfTsKK307CisKK3RlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIFNldFN0cm9rZVRoaWNrbmVzczo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3RoaWNrbmVzczsKK30KKwor
dGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZjxTZXRTdHJva2VUaGlja25lc3M+
PiBTZXRTdHJva2VUaGlja25lc3M6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9w
dGlvbmFsPGZsb2F0PiB0aGlja25lc3M7CisgICAgZGVjb2RlciA+PiB0aGlja25lc3M7CisgICAg
aWYgKCF0aGlja25lc3MpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1
cm4gU2V0U3Ryb2tlVGhpY2tuZXNzOjpjcmVhdGUoKnRoaWNrbmVzcyk7CiB9CiAKIGNsYXNzIFNl
dFN0YXRlIDogcHVibGljIEl0ZW0gewpAQCAtMjUxMSw2ICsyNjExLDUwIEBAIE9wdGlvbmFsPFJl
ZjxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4+IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOjpkZWNv
ZGUoRGVjb2RlciYKICAgICByZXR1cm4gRmlsbFJlY3RXaXRoUm91bmRlZEhvbGU6OmNyZWF0ZSgq
cmVjdCwgKnJvdW5kZWRIb2xlUmVjdCwgKmNvbG9yKTsKIH0KIAorI2lmIEVOQUJMRShJTkxJTkVf
UEFUSF9EQVRBKQorCitjbGFzcyBGaWxsSW5saW5lUGF0aCA6IHB1YmxpYyBEcmF3aW5nSXRlbSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxGaWxsSW5saW5lUGF0aD4gY3JlYXRlKGNvbnN0IElu
bGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEZpbGxJbmxpbmVQYXRoKHBhdGhEYXRhKSk7CisgICAgfQorCisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB+RmlsbElubGluZVBhdGgoKTsKKworICAgIFBhdGggcGF0aCgpIGNvbnN0IHsg
cmV0dXJuIFBhdGg6OmZyb20obV9wYXRoRGF0YSk7IH0KKworICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVmPEZpbGxJbmxpbmVQYXRoPj4gZGVjb2RlKERlY29k
ZXImKTsKKworcHJpdmF0ZToKKyAgICBXRUJDT1JFX0VYUE9SVCBGaWxsSW5saW5lUGF0aChjb25z
dCBJbmxpbmVQYXRoRGF0YSYpOworCisgICAgdm9pZCBhcHBseShHcmFwaGljc0NvbnRleHQmKSBj
b25zdCBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxGbG9hdFJlY3Q+IGxvY2FsQm91bmRzKGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHBhdGgoKS5mYXN0Qm91
bmRpbmdSZWN0KCk7IH0KKworICAgIElubGluZVBhdGhEYXRhIG1fcGF0aERhdGE7Cit9OworCit0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBGaWxsSW5saW5lUGF0aDo6ZW5jb2RlKEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3BhdGhEYXRhOworfQorCit0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVmPEZpbGxJbmxpbmVQYXRoPj4gRmls
bElubGluZVBhdGg6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPElu
bGluZVBhdGhEYXRhPiBwYXRoRGF0YTsKKyAgICBkZWNvZGVyID4+IHBhdGhEYXRhOworICAgIGlm
ICghcGF0aERhdGEpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4g
RmlsbElubGluZVBhdGg6OmNyZWF0ZShXVEZNb3ZlKCpwYXRoRGF0YSkpOworfQorCisjZW5kaWYg
Ly8gRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisKIGNsYXNzIEZpbGxQYXRoIDogcHVibGljIERy
YXdpbmdJdGVtIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEZpbGxQYXRoPiBjcmVhdGUoY29u
c3QgUGF0aCYgcGF0aCkKQEAgLTI3NjYsNiArMjkxMCw1MCBAQCBPcHRpb25hbDxSZWY8U3Ryb2tl
UmVjdD4+IFN0cm9rZVJlY3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHJldHVybiBT
dHJva2VSZWN0OjpjcmVhdGUoKnJlY3QsICpsaW5lV2lkdGgpOwogfQogCisjaWYgRU5BQkxFKElO
TElORV9QQVRIX0RBVEEpCisKK2NsYXNzIFN0cm9rZUlubGluZVBhdGggOiBwdWJsaWMgRHJhd2lu
Z0l0ZW0geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U3Ryb2tlSW5saW5lUGF0aD4gY3JlYXRl
KGNvbnN0IElubGluZVBhdGhEYXRhJiBwYXRoRGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFN0cm9rZUlubGluZVBhdGgocGF0aERhdGEpKTsKKyAgICB9CisKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5TdHJva2VJbmxpbmVQYXRoKCk7CisKKyAgICBQYXRoIHBh
dGgoKSBjb25zdCB7IHJldHVybiBQYXRoOjpmcm9tKG1fcGF0aERhdGEpOyB9CisKKyAgICB0ZW1w
bGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPFJlZjxTdHJva2VJbmxpbmVQYXRo
Pj4gZGVjb2RlKERlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJv
a2VJbmxpbmVQYXRoKGNvbnN0IElubGluZVBhdGhEYXRhJik7CisKKyAgICB2b2lkIGFwcGx5KEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEZsb2F0UmVjdD4g
bG9jYWxCb3VuZHMoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBJbmxpbmVQYXRoRGF0YSBtX3BhdGhEYXRhOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rl
cj4KK3ZvaWQgU3Ryb2tlSW5saW5lUGF0aDo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
Cit7CisgICAgZW5jb2RlciA8PCBtX3BhdGhEYXRhOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgorT3B0aW9uYWw8UmVmPFN0cm9rZUlubGluZVBhdGg+PiBTdHJva2VJbmxpbmVQYXRoOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxJbmxpbmVQYXRoRGF0YT4g
cGF0aERhdGE7CisgICAgZGVjb2RlciA+PiBwYXRoRGF0YTsKKyAgICBpZiAoIXBhdGhEYXRhKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIFN0cm9rZUlubGluZVBh
dGg6OmNyZWF0ZShXVEZNb3ZlKCpwYXRoRGF0YSkpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKElO
TElORV9QQVRIX0RBVEEpCisKIGNsYXNzIFN0cm9rZVBhdGggOiBwdWJsaWMgRHJhd2luZ0l0ZW0g
ewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U3Ryb2tlUGF0aD4gY3JlYXRlKGNvbnN0IFBhdGgm
IHBhdGgpCkBAIC0zMDE1LDExICszMjAzLDE3IEBAIHZvaWQgSXRlbTo6ZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIpIGNvbnN0CiAgICAgY2FzZSBJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE06CiAgICAg
ICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8Q29uY2F0ZW5hdGVDVE0+KCp0aGlzKTsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJdGVtVHlwZTo6U2V0RmlsbENvbG9yOgotICAgICAgICBlbmNvZGVy
IDw8IGRvd25jYXN0PFNldEZpbGxDb2xvcj4oKnRoaXMpOworICAgIGNhc2UgSXRlbVR5cGU6OlNl
dElubGluZUZpbGxHcmFkaWVudDoKKyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRJbmxp
bmVGaWxsR3JhZGllbnQ+KCp0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJdGVtVHlw
ZTo6U2V0SW5saW5lRmlsbENvbG9yOgorICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PFNldElu
bGluZUZpbGxDb2xvcj4oKnRoaXMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEl0ZW1UeXBl
OjpTZXRJbmxpbmVTdHJva2VDb2xvcjoKKyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRJ
bmxpbmVTdHJva2VDb2xvcj4oKnRoaXMpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1U
eXBlOjpTZXRTdHJva2VTdGF0ZToKLSAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRTdHJv
a2VTdGF0ZT4oKnRoaXMpOworICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoK
KyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTZXRTdHJva2VUaGlja25lc3M+KCp0aGlzKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJdGVtVHlwZTo6U2V0U3RhdGU6CiAgICAgICAgIGVu
Y29kZXIgPDwgZG93bmNhc3Q8U2V0U3RhdGU+KCp0aGlzKTsKQEAgLTMxMTQsNiArMzMwOCwxMSBA
QCB2b2lkIEl0ZW06OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGNhc2UgSXRl
bVR5cGU6OkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlOgogICAgICAgICBlbmNvZGVyIDw8IGRvd25j
YXN0PEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPigqdGhpcyk7CiAgICAgICAgIGJyZWFrOworI2lm
IEVOQUJMRShJTkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQ
YXRoOgorICAgICAgICBlbmNvZGVyIDw8IGRvd25jYXN0PEZpbGxJbmxpbmVQYXRoPigqdGhpcyk7
CisgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6RmlsbFBhdGg6CiAg
ICAgICAgIGVuY29kZXIgPDwgZG93bmNhc3Q8RmlsbFBhdGg+KCp0aGlzKTsKICAgICAgICAgYnJl
YWs7CkBAIC0zMTI5LDYgKzMzMjgsMTEgQEAgdm9pZCBJdGVtOjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKICAgICBjYXNlIEl0ZW1UeXBlOjpTdHJva2VSZWN0OgogICAgICAgICBlbmNv
ZGVyIDw8IGRvd25jYXN0PFN0cm9rZVJlY3Q+KCp0aGlzKTsKICAgICAgICAgYnJlYWs7CisjaWYg
RU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5l
UGF0aDoKKyAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTdHJva2VJbmxpbmVQYXRoPigqdGhp
cyk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlUGF0
aDoKICAgICAgICAgZW5jb2RlciA8PCBkb3duY2FzdDxTdHJva2VQYXRoPigqdGhpcyk7CiAgICAg
ICAgIGJyZWFrOwpAQCAtMzE5NSwxMiArMzM5OSwyMSBAQCBPcHRpb25hbDxSZWY8SXRlbT4+IEl0
ZW06OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgICAgICBpZiAoYXV0byBpdGVtID0gQ29u
Y2F0ZW5hdGVDVE06OmRlY29kZShkZWNvZGVyKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
cmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEl0ZW1UeXBlOjpTZXRGaWxsQ29sb3I6Ci0gICAgICAgIGlmIChhdXRvIGl0ZW0gPSBT
ZXRGaWxsQ29sb3I6OmRlY29kZShkZWNvZGVyKSkKKyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxp
bmVGaWxsR3JhZGllbnQ6IHsKKyAgICAgICAgaWYgKGF1dG8gaXRlbSA9IFNldElubGluZUZpbGxH
cmFkaWVudDo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIEl0ZW1UeXBlOjpTZXRJbmxpbmVGaWxsQ29sb3I6CisgICAgICAgIGlmIChhdXRv
IGl0ZW0gPSBTZXRJbmxpbmVGaWxsQ29sb3I6OmRlY29kZShkZWNvZGVyKSkKICAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRlbSkpOwogICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEl0ZW1UeXBlOjpTZXRTdHJva2VTdGF0ZToKLSAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IFNldFN0cm9rZVN0YXRlOjpkZWNvZGUoZGVjb2RlcikpCisgICAgY2Fz
ZSBJdGVtVHlwZTo6U2V0SW5saW5lU3Ryb2tlQ29sb3I6CisgICAgICAgIGlmIChhdXRvIGl0ZW0g
PSBTZXRJbmxpbmVTdHJva2VDb2xvcjo6ZGVjb2RlKGRlY29kZXIpKQorICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0cm9rZVRoaWNrbmVzczoKKyAgICAgICAg
aWYgKGF1dG8gaXRlbSA9IFNldFN0cm9rZVRoaWNrbmVzczo6ZGVjb2RlKGRlY29kZXIpKQogICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxJdGVtPihXVEZNb3ZlKCppdGVt
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSXRlbVR5cGU6OlNldFN0YXRlOgpAQCAtMzMy
Nyw2ICszNTQwLDEyIEBAIE9wdGlvbmFsPFJlZjxJdGVtPj4gSXRlbTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiAgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZTo6ZGVjb2RlKGRlY29kZXIpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxJdGVtPihXVEZNb3ZlKCppdGVtKSk7CiAgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShJ
TkxJTkVfUEFUSF9EQVRBKQorICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoOgorICAg
ICAgICBpZiAoYXV0byBpdGVtID0gRmlsbElubGluZVBhdGg6OmRlY29kZShkZWNvZGVyKSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRl
bSkpOworICAgICAgICBicmVhazsKKyNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OkZpbGxQYXRo
OgogICAgICAgICBpZiAoYXV0byBpdGVtID0gRmlsbFBhdGg6OmRlY29kZShkZWNvZGVyKSkKICAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgqaXRl
bSkpOwpAQCAtMzM0Nyw2ICszNTY2LDEyIEBAIE9wdGlvbmFsPFJlZjxJdGVtPj4gSXRlbTo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTdHJva2VSZWN0
OjpkZWNvZGUoZGVjb2RlcikpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEl0ZW0+KFdURk1vdmUoKml0ZW0pKTsKICAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKElO
TElORV9QQVRIX0RBVEEpCisgICAgY2FzZSBJdGVtVHlwZTo6U3Ryb2tlSW5saW5lUGF0aDoKKyAg
ICAgICAgaWYgKGF1dG8gaXRlbSA9IFN0cm9rZUlubGluZVBhdGg6OmRlY29kZShkZWNvZGVyKSkK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SXRlbT4oV1RGTW92ZSgq
aXRlbSkpOworICAgICAgICBicmVhazsKKyNlbmRpZgogICAgIGNhc2UgSXRlbVR5cGU6OlN0cm9r
ZVBhdGg6CiAgICAgICAgIGlmIChhdXRvIGl0ZW0gPSBTdHJva2VQYXRoOjpkZWNvZGUoZGVjb2Rl
cikpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEl0ZW0+KFdURk1v
dmUoKml0ZW0pKTsKQEAgLTM0MDksOCArMzYzNCwxMCBAQCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0RJU1BMQVlMSVNUX0lURU0oUm90YXRlKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZ
TElTVF9JVEVNKFNjYWxlKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVN
KFNldENUTSkKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDb25jYXRl
bmF0ZUNUTSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShTZXRGaWxs
Q29sb3IpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0U3Ryb2tl
U3RhdGUpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU2V0SW5saW5l
RmlsbEdyYWRpZW50KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFNl
dElubGluZUZpbGxDb2xvcikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRF
TShTZXRJbmxpbmVTdHJva2VDb2xvcikKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJ
U1RfSVRFTShTZXRTdHJva2VUaGlja25lc3MpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oU2V0U3RhdGUpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNU
X0lURU0oU2V0TGluZUNhcCkKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRF
TShTZXRMaW5lRGFzaCkKQEAgLTM0NDEsMTEgKzM2NjgsMTcgQEAgU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxSZWN0V2l0aEdyYWRpZW50KQogU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKEZpbGxDb21wb3NpdGVkUmVjdCkKIFNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUm91bmRlZFJlY3QpCiBTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oRmlsbFJlY3RXaXRoUm91bmRlZEhvbGUp
CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJ
U1BMQVlMSVNUX0lURU0oRmlsbElubGluZVBhdGgpCisjZW5kaWYKIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRElTUExBWUxJU1RfSVRFTShGaWxsUGF0aCkKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RElTUExBWUxJU1RfSVRFTShGaWxsRWxsaXBzZSkKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElT
UExBWUxJU1RfSVRFTShQdXRJbWFnZURhdGEpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BM
QVlMSVNUX0lURU0oUGFpbnRGcmFtZUZvck1lZGlhKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19E
SVNQTEFZTElTVF9JVEVNKFN0cm9rZVJlY3QpCisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEp
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlSW5saW5lUGF0
aCkKKyNlbmRpZgogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19ESVNQTEFZTElTVF9JVEVNKFN0cm9r
ZVBhdGgpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RJU1BMQVlMSVNUX0lURU0oU3Ryb2tlRWxs
aXBzZSkKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRElTUExBWUxJU1RfSVRFTShDbGVhclJlY3Qp
CkBAIC0zNDcwLDggKzM3MDMsMTAgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU+IHsKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
SXRlbVR5cGU6OlNjYWxlLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0
Q1RNLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6Q29uY2F0ZW5hdGVDVE0s
Ci0gICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRGaWxsQ29sb3IsCi0gICAg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRTdHJva2VTdGF0ZSwKKyAgICBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZUZpbGxHcmFkaWVudCwKKyAgICBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZUZpbGxDb2xvciwKKyAgICBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRlbVR5cGU6OlNldElubGluZVN0cm9rZUNvbG9yLAorICAg
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3Ryb2tlVGhpY2tuZXNzLAogICAg
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U2V0U3RhdGUsCiAgICAgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpTZXRMaW5lQ2FwLAogICAgIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpJdGVtVHlwZTo6U2V0TGluZURhc2gsCkBAIC0zNTAzLDExICszNzM4LDE3IEBAIHRlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlPiB7
CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsQ29tcG9zaXRlZFJlY3Qs
CiAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUm91bmRlZFJlY3QsCiAg
ICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZSwKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SXRlbVR5cGU6OkZpbGxJbmxpbmVQYXRoLAorI2VuZGlmCiAgICAgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6Okl0ZW1UeXBlOjpGaWxsUGF0aCwKICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SXRl
bVR5cGU6OkZpbGxFbGxpcHNlLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6
UHV0SW1hZ2VEYXRhLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6UGFpbnRG
cmFtZUZvck1lZGlhLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtVHlwZTo6U3Ryb2tl
UmVjdCwKKyNpZiBFTkFCTEUoSU5MSU5FX1BBVEhfREFUQSkKKyAgICBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6SXRlbVR5cGU6OlN0cm9rZUlubGluZVBhdGgsCisjZW5kaWYKICAgICBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6SXRlbVR5cGU6OlN0cm9rZVBhdGgsCiAgICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6Okl0ZW1UeXBlOjpTdHJva2VFbGxpcHNlLAogICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtVHlwZTo6Q2xlYXJSZWN0LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIu
Y3BwCmluZGV4IDFlMWU5MWFhMDg0Yjk2ZTZlYjI2NWMxZjgwZmYyZjhlNTFmZjFmZTcuLmYxMzE1
ZTljNmRkZGE1MmMyMzBjMDYxMTU4OTI5OTA2ZjYyYTBhYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTU3LDM4ICs1Nyw0OSBAQCB2b2lkIFJlY29yZGVy
OjpwdXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgVwogICAgIGFwcGVuZEl0ZW0oV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlB1dEltYWdl
RGF0YTo6Y3JlYXRlKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwg
ZGVzdEZvcm1hdCkpOwogfQogCi1zdGF0aWMgYm9vbCBjb250YWluc09ubHlTdHJva2VDb2xvck9y
VGhpY2tuZXNzQ2hhbmdlKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGNo
YW5nZXMpCitzdGF0aWMgYm9vbCBjb250YWluc09ubHlJbmxpbmVTdGF0ZUNoYW5nZXMoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmIGNoYW5nZXMsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzIGNoYW5nZUZsYWdzKQogewotICAgIHN0YXRpYyBjb25zdGV4cHIg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3Mgc3Ryb2tlU3RhdGVDaGFuZ2VG
bGFncyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncyBpbmxpbmVTdGF0ZUNoYW5nZUZsYWdzIHsKICAgICAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlCisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VDb2xvckNoYW5nZSwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xv
ckNoYW5nZSwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5n
ZSwKICAgICB9OwotICAgIHJldHVybiBjaGFuZ2VzID09IChjaGFuZ2VzICYgc3Ryb2tlU3RhdGVD
aGFuZ2VGbGFncyk7Ci19CiAKLXN0YXRpYyBib29sIGNvbnRhaW5zT25seUZpbGxDb2xvckNoYW5n
ZShHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2VzKQotewotICAg
IHJldHVybiBjaGFuZ2VzID09IChjaGFuZ2VzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxD
b2xvckNoYW5nZSk7CisgICAgaWYgKGNoYW5nZUZsYWdzICE9IChjaGFuZ2VGbGFncyAmIGlubGlu
ZVN0YXRlQ2hhbmdlRmxhZ3MpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdl
KSAmJiAhY2hhbmdlcy5tX3N0YXRlLnN0cm9rZUNvbG9yLmlzSW5saW5lKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSAmJiAhY2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvci5p
c0lubGluZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSkKKyAgICAg
ICAgJiYgKCFjaGFuZ2VzLm1fc3RhdGUuZmlsbEdyYWRpZW50IHx8ICFTZXRJbmxpbmVGaWxsR3Jh
ZGllbnQ6OmlzSW5saW5lKCpjaGFuZ2VzLm1fc3RhdGUuZmlsbEdyYWRpZW50KSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgUmVmPEl0ZW0+
IGNyZWF0ZVN0YXRlQ2hhbmdlSXRlbShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYg
Y2hhbmdlcywgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgY2hhbmdlRmxh
Z3MpCit2b2lkIFJlY29yZGVyOjphcHBlbmRTdGF0ZUNoYW5nZUl0ZW0oY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2UmIGNoYW5nZXMsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzIGNoYW5nZUZsYWdzKQogewotICAgIGlmIChjb250YWluc09ubHlGaWxsQ29sb3JD
aGFuZ2UoY2hhbmdlRmxhZ3MpKQotICAgICAgICByZXR1cm4gU2V0RmlsbENvbG9yOjpjcmVhdGUo
Y2hhbmdlcy5tX3N0YXRlLmZpbGxDb2xvcik7CisgICAgaWYgKCFjb250YWluc09ubHlJbmxpbmVT
dGF0ZUNoYW5nZXMoY2hhbmdlcywgY2hhbmdlRmxhZ3MpKSB7CisgICAgICAgIG1fZGlzcGxheUxp
c3QuYXBwZW5kSXRlbShTZXRTdGF0ZTo6Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZSwgY2hhbmdlRmxh
Z3MpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChjb250YWluc09ubHlTdHJv
a2VDb2xvck9yVGhpY2tuZXNzQ2hhbmdlKGNoYW5nZUZsYWdzKSkgewotICAgICAgICBPcHRpb25h
bDxDb2xvcj4gc3Ryb2tlQ29sb3I7Ci0gICAgICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQotICAgICAgICAgICAgc3Ry
b2tlQ29sb3IgPSBjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlQ29sb3I7CisgICAgaWYgKGNoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCisg
ICAgICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kSXRlbShTZXRJbmxpbmVTdHJva2VDb2xvcjo6Y3Jl
YXRlKGNoYW5nZXMubV9zdGF0ZS5zdHJva2VDb2xvci5hc0lubGluZSgpKSk7CiAKLSAgICAgICAg
T3B0aW9uYWw8ZmxvYXQ+IHN0cm9rZVRoaWNrbmVzczsKLSAgICAgICAgaWYgKGNoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQot
ICAgICAgICAgICAgc3Ryb2tlVGhpY2tuZXNzID0gY2hhbmdlcy5tX3N0YXRlLnN0cm9rZVRoaWNr
bmVzczsKKyAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCisgICAgICAgIG1fZGlzcGxheUxpc3QuYXBwZW5kSXRl
bShTZXRTdHJva2VUaGlja25lc3M6OmNyZWF0ZShjaGFuZ2VzLm1fc3RhdGUuc3Ryb2tlVGhpY2tu
ZXNzKSk7CiAKLSAgICAgICAgcmV0dXJuIFNldFN0cm9rZVN0YXRlOjpjcmVhdGUoV1RGTW92ZShz
dHJva2VDb2xvciksIFdURk1vdmUoc3Ryb2tlVGhpY2tuZXNzKSk7Ci0gICAgfQorICAgIGlmIChj
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdl
KSkKKyAgICAgICAgbV9kaXNwbGF5TGlzdC5hcHBlbmRJdGVtKFNldElubGluZUZpbGxDb2xvcjo6
Y3JlYXRlKGNoYW5nZXMubV9zdGF0ZS5maWxsQ29sb3IuYXNJbmxpbmUoKSkpOwogCi0gICAgcmV0
dXJuIFNldFN0YXRlOjpjcmVhdGUoY2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VGbGFncyk7CisgICAg
aWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGll
bnRDaGFuZ2UpKQorICAgICAgICBtX2Rpc3BsYXlMaXN0LmFwcGVuZEl0ZW0oU2V0SW5saW5lRmls
bEdyYWRpZW50OjpjcmVhdGUoKmNoYW5nZXMubV9zdGF0ZS5maWxsR3JhZGllbnQpKTsKIH0KIAog
dm9pZCBSZWNvcmRlcjo6d2lsbEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYgaXRlbSkKQEAgLTEwNSw3
ICsxMTYsNyBAQCB2b2lkIFJlY29yZGVyOjp3aWxsQXBwZW5kSXRlbShjb25zdCBJdGVtJiBpdGVt
KQogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBjaGFuZ2Vz
RnJvbUxhc3RTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5jaGFuZ2VzRnJvbVN0YXRlKGN1cnJlbnRTdGF0
ZSgpLmxhc3REcmF3aW5nU3RhdGUpOwogICAgICAgICBpZiAoY2hhbmdlc0Zyb21MYXN0U3RhdGUp
IHsKICAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShEaXNwbGF5TGlzdHMsIHN0cmVhbSA8PCAi
cHJlLWRyYXdpbmcsIHNhdmluZyBzdGF0ZSAiIDw8IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdl
KHN0YXRlQ2hhbmdlcy5tX3N0YXRlLCBjaGFuZ2VzRnJvbUxhc3RTdGF0ZSkpOwotICAgICAgICAg
ICAgbV9kaXNwbGF5TGlzdC5hcHBlbmQoY3JlYXRlU3RhdGVDaGFuZ2VJdGVtKHN0YXRlQ2hhbmdl
cywgY2hhbmdlc0Zyb21MYXN0U3RhdGUpKTsKKyAgICAgICAgICAgIGFwcGVuZFN0YXRlQ2hhbmdl
SXRlbShzdGF0ZUNoYW5nZXMsIGNoYW5nZXNGcm9tTGFzdFN0YXRlKTsKICAgICAgICAgICAgIHN0
YXRlQ2hhbmdlcy5tX2NoYW5nZUZsYWdzID0geyB9OwogICAgICAgICAgICAgY3VycmVudFN0YXRl
KCkubGFzdERyYXdpbmdTdGF0ZSA9IHN0YXRlQ2hhbmdlcy5tX3N0YXRlOwogICAgICAgICB9CkBA
IC0zMTQsNiArMzI1LDEyIEBAIHZvaWQgUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkCiAKIHZvaWQgUmVjb3Jk
ZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7CisjaWYgRU5BQkxFKElOTElORV9QQVRI
X0RBVEEpCisgICAgaWYgKHBhdGguaGFzSW5saW5lRGF0YSgpKSB7CisgICAgICAgIGFwcGVuZEl0
ZW1BbmRVcGRhdGVFeHRlbnQoRmlsbElubGluZVBhdGg6OmNyZWF0ZShwYXRoLmlubGluZURhdGEo
KSkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCiAgICAgYXBwZW5kSXRlbUFuZFVw
ZGF0ZUV4dGVudChGaWxsUGF0aDo6Y3JlYXRlKHBhdGgpKTsKIH0KIApAQCAtMzI5LDYgKzM0Niwx
MiBAQCB2b2lkIFJlY29yZGVyOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxv
YXQgbGluZVdpZHRoKQogCiB2b2lkIFJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCiB7CisjaWYgRU5BQkxFKElOTElORV9QQVRIX0RBVEEpCisgICAgaWYgKHBhdGguaGFzSW5s
aW5lRGF0YSgpKSB7CisgICAgICAgIGFwcGVuZEl0ZW1BbmRVcGRhdGVFeHRlbnQoU3Ryb2tlSW5s
aW5lUGF0aDo6Y3JlYXRlKHBhdGguaW5saW5lRGF0YSgpKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisjZW5kaWYKICAgICBhcHBlbmRJdGVtQW5kVXBkYXRlRXh0ZW50KFN0cm9rZVBhdGg6OmNy
ZWF0ZShwYXRoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmlu
ZGV4IDZhMjc3MTg5N2VkMjNlNjkwNTZmYWVhOGY1ZTUzMzk4YTVmOGM4YzkuLmU5NWYyODQ2ODU0
ZTQwZTdlYTU2ZTQzMDhhMjJlY2NiNWU3MmIxYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuaApAQCAtMTQ5LDYgKzE0OSw4IEBAIHByaXZhdGU6CiAgICAgSXRlbVR5cGUm
IGFwcGVuZEl0ZW0oUmVmPEl0ZW1UeXBlPiYmKTsKICAgICB2b2lkIHdpbGxBcHBlbmRJdGVtKGNv
bnN0IEl0ZW0mKTsKIAorICAgIHZvaWQgYXBwZW5kU3RhdGVDaGFuZ2VJdGVtKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlQ2hhbmdlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdl
RmxhZ3MpOworCiAgICAgRmxvYXRSZWN0IGV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9h
dFJlY3QmKSBjb25zdDsKICAgICB2b2lkIHVwZGF0ZUl0ZW1FeHRlbnQoRHJhd2luZ0l0ZW0mKSBj
b25zdDsKICAgICAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwppbmRleCAyMGUxY2NiMDQxZjlmMDUwNTVkMDMxNmMwNjJlMjdkYzU3ZWJh
MWM4Li4yMzNkNWNmM2I0YTcxYWRjOWZiNDFjY2Y2YjllYmZhYTdjZTZjMDQ2IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMjAtMTAtMjcgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0NvbmN1cnJlbnQgZGlzcGxheSBsaXN0c10gQWRkIGFsdGVybmF0
ZSB2ZXJzaW9ucyBvZiBleGlzdGluZyBkaXNwbGF5IGxpc3QgaXRlbXMgdGhhdCBvbmx5IGNvbnRh
aW4gaW5saW5lIGRhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxODI1OQorCisgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIb3J0b24uCisKKyAgICAg
ICAgUmViYXNlbGluZSBhbiBleGlzdGluZyB0ZXN0LgorCisgICAgICAgICogZGlzcGxheWxpc3Rz
L2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0OgorCiAyMDIwLTEwLTI3ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQXVkaW9Db250ZXh0LnN1c3BlbmQo
KSBzaG91bGQgbm90IHJlamVjdCBwcm9taXNlIHdoZW4gYXVkaW8gc2Vzc2lvbiBpcyBpbnRlcnJ1
cHRlZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5
LWxpc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNw
bGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IGY3ZDcxOGYwNmFkYzhjODlhNGNmYjgzOTJlOWE5
NmUzZWFhY2ZhNzcuLjMyODg0ODA2MjcwMTlkNTQwMmQ5NDI1ZmM0YTEzMTM3NzBlY2IzMWEgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXkt
bGlzdC1leHBlY3RlZC50eHQKQEAgLTgsNyArOCw3IEBACiAoZmlsbC1yZWN0CiAgIChleHRlbnQg
YXQgKDEwLDE0MCkgc2l6ZSA1NXg1MCkKICAgKHJlY3QgYXQgKDEwLDEwKSBzaXplIDU1eDUwKSkK
LShzZXQtZmlsbC1jb2xvcgorKHNldC1pbmxpbmUtZmlsbC1jb2xvcgogICAoY29sb3IgIzAwMDBD
ODgwKSkKIChmaWxsLXJlY3QKICAgKGV4dGVudCBhdCAoMzAsMTIwKSBzaXplIDU1eDUwKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>