<?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>218544</bug_id>
          
          <creation_ts>2020-11-03 16:21:39 -0800</creation_ts>
          <short_desc>Remove more functions that implicitly use composed tree</short_desc>
          <delta_ts>2021-04-07 19:27:28 -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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>218424</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ajuma</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1704271</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-11-03 16:21:39 -0800</bug_when>
    <thetext>Remove more functions that implicitly use composed tree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1704278</commentid>
    <comment_count>1</comment_count>
      <attachid>413121</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-11-03 16:41:02 -0800</bug_when>
    <thetext>Created attachment 413121
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1704282</commentid>
    <comment_count>2</comment_count>
      <attachid>413124</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-11-03 16:45:26 -0800</bug_when>
    <thetext>Created attachment 413124
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1704294</commentid>
    <comment_count>3</comment_count>
      <attachid>413124</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-11-03 17:26:58 -0800</bug_when>
    <thetext>Comment on attachment 413124
Patch

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

&gt; Source/WebCore/editing/VisiblePosition.cpp:828
&gt; +    auto midpoint = checkedSum&lt;uint64_t&gt;(characterRange.location, characterRange.length / 2);
&gt; +    if (midpoint.hasOverflowed())
&gt; +        return { };

Since these are actual computed sizes of a document already in memory, I don’t see any way we’d actually need checked arithmetic, so this should probably be changed to normal arithmetic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1704538</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-11-04 11:37:32 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; Since these are actual computed sizes of a document already in memory, I
&gt; don’t see any way we’d actually need checked arithmetic, so this should
&gt; probably be changed to normal arithmetic.

Or I can write a separate midpoint function that takes a CharacterRange, and clamps end to the maximum value of uint64_t rather than treating it as an error. Should be safe/practical for our uses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1704904</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-11-05 09:36:37 -0800</bug_when>
    <thetext>Committed r269442: &lt;https://trac.webkit.org/changeset/269442&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1704906</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-05 09:37:38 -0800</bug_when>
    <thetext>&lt;rdar://problem/71081440&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1748185</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-04-07 19:27:28 -0700</bug_when>
    <thetext>*** Bug 217313 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413121</attachid>
            <date>2020-11-03 16:41:02 -0800</date>
            <delta_ts>2020-11-03 16:45:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218544-20201103164101.patch</filename>
            <type>text/plain</type>
            <size>32571</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGQzNTgyMDkwZTM3ZGIz
MDZmOTUyNGVhODhhMDA4YTUzMTEwNjk1NC4uNmI1NTkwYmM3YTgwNTMzZDE3NzE3YTg5NzI4NWRh
YzE1NzA2MDdiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDIwLTExLTAzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbW9yZSBmdW5jdGlv
bnMgdGhhdCBpbXBsaWNpdGx5IHVzZSBjb21wb3NlZCB0cmVlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg1NDQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKTogQ2hhbmdlZCB0aGlzIGludG8gYSBmdW5j
dGlvbiB0ZW1wbGF0ZS4KKyAgICAgICAgKiBkb20vTm9kZS5oOiBEaXR0by4gTm90ZSB0aGlzIGRl
ZmF1bHRzIHRvIHRoZSB0cmFkaXRpb25hbCB0cmVlLCBhbmQgY2FsbGVycworICAgICAgICBoYXZl
IGFsbCBiZWVuIG1vZGlmaWVkIHRvIHVzZSBjb21wb3NlZCB0cmVlIGV4cGxpY2l0bHkuCisKKyAg
ICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tbW9uSW5jbHVz
aXZlQW5jZXN0b3IpOiBDaGFuZ2VkIHJldHVybiB0eXBlIHRvIGEgcmF3IHBvaW50ZXIuCisgICAg
ICAgIFNpbmNlIEkgY3JlYXRlZCB0aGlzIHJldHVybmluZyBhIHNtYXJ0IHBvaW50ZXIsIFJ5b3N1
a2UgY2xhcmlmaWVkIHRoYXQgb3VyCisgICAgICAgIGFwcHJvYWNoIHRvIG9iamVjdCBsaWZldGlt
ZSBkb2VzIG5vdCBpbnZvbHZlIHJldHVybmluZyBzbWFydCBwb2ludGVycyBpbgorICAgICAgICBj
YXNlcyBsaWtlIHRoaXMuIENhbGwgY29tbW9uSW5jbHVzaXZlQW5jZXN0b3I8Q29tcG9zZWRUcmVl
Pi4KKyAgICAgICAgKFdlYkNvcmU6OmRvY3VtZW50T3JkZXIpOiBEaXR0by4KKyAgICAgICAgKiBk
b20vUG9zaXRpb24uaDogVXBkYXRlZCByZXR1cm4gdmFsdWUuCisKKyAgICAgICAgKiBkb20vUmFu
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
IGNvbnN0KTogTWFkZSB0aGlzIG5vbi1pbmxpbmUuCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIG5v
dyBjYWxscyB0aGUgbm9uLWNvbXBvc2VkLXRyZWUgdmVyc2lvbiBvZgorICAgICAgICBjb21tb25J
bmNsdXNpdmVBbmNlc3Rvciwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50LCBidXQgc2luY2UgbGl2ZSBy
YW5nZXMKKyAgICAgICAgbWFpbnRhaW4gdGhlIGludmFyaWFudCB0aGF0IGJvdGggY29udGFpbmVy
cyBhcmUgaW4gdGhlIHNhbWUgdHJlZSwgdGhpcyBpcworICAgICAgICBub3QgYW4gb2JzZXJ2YWJs
ZSBjaGFuZ2UuCisKKyAgICAgICAgKiBkb20vUmFuZ2UuaDogTWFkZSBjb21tb25BbmNlc3RvckNv
bnRhaW5lciBub24taW5saW5lLiBOb3QgY3JpdGljYWwgdG8KKyAgICAgICAgb3B0aW1pemUgb3V0
IHRoZSBmdW5jdGlvbiBjYWxsLgorCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKTogQ2hhbmdlZCB0aGlzIGlu
dG8gYSBmdW5jdGlvbiB0ZW1wbGF0ZS4KKyAgICAgICAgKiBkb20vU2ltcGxlUmFuZ2UuaDogVXBk
YXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogZWRpdGluZy9DaGFuZ2VMaXN0VHlwZUNv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlzdENvbnZlcnNpb25UeXBlRm9yU2VsZWN0
aW9uKTogVXNlIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yPENvbXBvc2VkVHJlZT4uCisgICAgICAg
ICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0
eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFu
Z2UpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1lbnRGb3JGb3JtYXRCbG9j
a0NvbW1hbmQpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OjpzY2hlZHVsZU9ic2VydmF0aW9uVXBkYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZSk6IERpdHRvLgorCisgICAgICAgICog
ZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tbW9uSW5j
bHVzaXZlQW5jZXN0b3IpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmludGVyc2VjdHMpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjppbnRlcnNlY3Rpb24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pZHBvaW50KTog
QWRkZWQuCisgICAgICAgICogZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaDogQWRkZWQgZnVuY3Rp
b25zIHRoYXQgd29yayB3aXRoIFZpc2libGVQb3NpdGlvblJhbmdlLgorICAgICAgICBUaGVzZSBh
cmUgdXNlZCBpbiBXZWJLaXQgZWRpdGluZy1yZWxhdGVkIGNvZGUgZm9yIGlPUywgYW5kIGhhdmlu
ZyB0aGVzZSBoaWdoZXIKKyAgICAgICAgbGV2ZWwgb3BlcmF0aW9ucyBpcyBzdGFydGluZyB0byBt
YWtlIHRoYXQgY29kZSBtb3JlIHJlYWRhYmxlLiBUaGlzIHdhcyBvcmlnaW5hbGx5CisgICAgICAg
IG1vdGl2YXRlZCBiZWNhdXNlIGl0IHdhcyBhIHVzZSBvZiBhIGZ1bmN0aW9uIHRlbXBsYXRlIG91
dHNpZGUgV2ViQ29yZSBhbmQgSSB3YW50ZWQKKyAgICAgICAgdG8gc2lkZXN0ZXAgdGhlIG5lZWQg
dG8gZXhwb3J0LCB3aGljaCBJIGNhbid0IGZpZ3VyZSBvdXQgaG93IHRvIGRvIHlldC4gQnV0IHRo
ZQorICAgICAgICByZWZhY3RvcmluZyBlbmRlZCB1cCBjaGFuZ2luZyB0aGUgY29kZSBjb21wbGV0
ZWx5LgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tOgorICAgICAg
ICAoSFRNTENvbnZlcnRlckNhY2hlczo6Y2FjaGVBbmNlc3RvcnNPZlN0YXJ0VG9CZUNvbnZlcnRl
ZCk6IFVwZGF0ZWQgc2luY2UKKyAgICAgICAgY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IgZG9lcyBu
b3QgcmV0dXJuIGEgc21hcnQgcG9pbnRlciBhbnkgbW9yZS4KKyAgICAgICAgKiBlZGl0aW5nL21h
cmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBw
ZWFyYW5jZUludGVybmFsKTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjppbnNlcnREcm9wcGVkSW1h
Z2VQbGFjZWhvbGRlcnNBdENhcmV0KTogVXNlCisgICAgICAgIGNvbW1vbkluY2x1c2l2ZUFuY2Vz
dG9yPENvbXBvc2VkVHJlZT4uCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dGFyZ2V0Tm9kZUZvckNsaWNrRXZlbnQpOiBEaXR0by4KKyAgICAgICAg
KiBwYWdlL1RleHRJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXN0aW1hdGVkQmFj
a2dyb3VuZENvbG9yRm9yUmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxp
emVJbmRpY2F0b3IpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y29sbGVjdFNlbGVjdGlvblJlY3Rz
SW50ZXJuYWwpOiBEaXR0by4KKwogMjAyMC0xMS0wMyAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBs
ZS5jb20+CiAKICAgICAgICAgTGluayBhZ2FpbnN0IHRoZSBBTkdMRSBTaGFyZWQgTGlicmFyeQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCA2Mzg4YjljM2EyYWRhNzE5ODAyYTkxMjdmNWE2MDVhNTlmOThhMDgyLi5iMTAy
NzE4Y2M1ZGE0MDE5ZWE1NjM2MWU0ZTE2NDFlZTdjNjVlMzVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE2IEBACisyMDIwLTExLTAzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZW1vdmUgbW9yZSBmdW5jdGlvbnMgdGhhdCBpbXBsaWNpdGx5IHVzZSBjb21wb3NlZCB0
cmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg1
NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6Y29u
c3RyYWluUmFuZ2VUb1NlbGVjdGlvbik6IEZhY3RvcmVkIHRoaXMgZnVuY3Rpb24gb3V0IG9mIHRo
ZQorICAgICAgICByZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dCBhbmQgYWxzbyByZXdyb3Rl
IGl0IHRvIHVzZSBoaWdoZXIgbGV2ZWwgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQpOiBSZWZhY3RvcmVkIHRvIHVzZSB0
aGUgbmV3CisgICAgICAgIGNvbnN0cmFpblJhbmdlVG9TZWxlY3Rpb24uCisKIDIwMjAtMTEtMDMg
IEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBy
ZW1vdmUgc3lzY3RsLm9pZGZtdC4gYWNjZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggNWI3MzUzODk2
Zjg2YzdhNjNjYjE1NDg4ODBmYzhmYWY0NWVmMzQwOC4uM2FjMjAxMDRhOWY3YjJhNTc2MWVkMWIy
M2NkZjQ3ODk3OTMyYTEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMjY4MiwxMiArMjY4MiwxNCBA
QCB0ZW1wbGF0ZTxUcmVlVHlwZSB0cmVlVHlwZT4gQW5jZXN0b3JBbmRDaGlsZHJlbiBjb21tb25J
bmNsdXNpdmVBbmNlc3RvckFuZENoaWxkcgogICAgIHJldHVybiB7IHgsIGRpc3RpbmN0QW5jZXN0
b3JBLCBkaXN0aW5jdEFuY2VzdG9yQiB9OwogfQogCi0vLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8g
d29yayB3aXRoaW4gdGhlIG5vcm1hbCB0cmVlIGluc3RlYWQgb2YgdGhlIGNvbXBvc2VkIHRyZWUu
IE9yIHJlbmFtZSBhbmQvb3Igc3BsaXQgaW50byBtdWx0aXBsZSBmdW5jdGlvbnMuCi1SZWZQdHI8
Tm9kZT4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoTm9kZSYgYSwgTm9kZSYgYikKK3RlbXBsYXRl
PFRyZWVUeXBlIHRyZWVUeXBlPiBOb2RlKiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihjb25zdCBO
b2RlJiBhLCBjb25zdCBOb2RlJiBiKQogewotICAgIHJldHVybiBjb25zdF9jYXN0PE5vZGUqPihj
b21tb25JbmNsdXNpdmVBbmNlc3RvckFuZENoaWxkcmVuPENvbXBvc2VkVHJlZT4oYSwgYikuY29t
bW9uQW5jZXN0b3IpOworICAgIHJldHVybiBjb25zdF9jYXN0PE5vZGUqPihjb21tb25JbmNsdXNp
dmVBbmNlc3RvckFuZENoaWxkcmVuPHRyZWVUeXBlPihhLCBiKS5jb21tb25BbmNlc3Rvcik7CiB9
CiAKK3RlbXBsYXRlIE5vZGUqIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yPFRyZWU+KGNvbnN0IE5v
ZGUmLCBjb25zdCBOb2RlJik7Cit0ZW1wbGF0ZSBOb2RlKiBjb21tb25JbmNsdXNpdmVBbmNlc3Rv
cjxDb21wb3NlZFRyZWU+KGNvbnN0IE5vZGUmLCBjb25zdCBOb2RlJik7CisKIHN0YXRpYyBib29s
IGlzU2libGluZ1N1YnNlcXVlbnQoY29uc3QgTm9kZSYgc2libGluZ0EsIGNvbnN0IE5vZGUmIHNp
YmxpbmdCKQogewogICAgIEFTU0VSVChzaWJsaW5nQS5wYXJlbnROb2RlKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgK
aW5kZXggMjAxYWQ0NzhjMTM3YzE4MDFjMGM0YWUyOWQ5YWJmYTY2MGFiZGViZS4uMjllMjhjOWEx
OTYyN2UwZWQyZjdjZTcyNzQ3ZjJhNmQ2OWFkMDM2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC03MjcsNyAr
NzI3LDYgQEAgcHJpdmF0ZToKIH07CiAKIGJvb2wgY29ubmVjdGVkSW5TYW1lVHJlZVNjb3BlKGNv
bnN0IE5vZGUqLCBjb25zdCBOb2RlKik7Ci1XRUJDT1JFX0VYUE9SVCBSZWZQdHI8Tm9kZT4gY29t
bW9uSW5jbHVzaXZlQW5jZXN0b3IoTm9kZSYsIE5vZGUmKTsKIAogLy8gRGVzaWduZWQgdG8gYmUg
dXNlZCB0aGUgc2FtZSB3YXkgYXMgQysrMjAgc3RkOjpwYXJ0aWFsX29yZGVyaW5nIGNsYXNzLgog
Ly8gRklYTUU6IENvbnNpZGVyIHB1dHRpbmcgdGhpcyBpbiBhIHNlcGFyYXRlIGhlYWRlci4KQEAg
LTc1Nyw2ICs3NTYsNyBAQCBjb25zdGV4cHIgYm9vbCBpc19ndGVxKFBhcnRpYWxPcmRlcmluZyk7
CiAKIGVudW0gVHJlZVR5cGUgeyBUcmVlLCBTaGFkb3dJbmNsdWRpbmdUcmVlLCBDb21wb3NlZFRy
ZWUgfTsKIHRlbXBsYXRlPFRyZWVUeXBlID0gVHJlZT4gQ29udGFpbmVyTm9kZSogcGFyZW50KGNv
bnN0IE5vZGUmKTsKK3RlbXBsYXRlPFRyZWVUeXBlID0gVHJlZT4gTm9kZSogY29tbW9uSW5jbHVz
aXZlQW5jZXN0b3IoY29uc3QgTm9kZSYsIGNvbnN0IE5vZGUmKTsKIHRlbXBsYXRlPFRyZWVUeXBl
ID0gVHJlZT4gUGFydGlhbE9yZGVyaW5nIHRyZWVPcmRlcihjb25zdCBOb2RlJiwgY29uc3QgTm9k
ZSYpOwogCiBXRUJDT1JFX0VYUE9SVCBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyRm9yVGVzdGlu
ZyhUcmVlVHlwZSwgY29uc3QgTm9kZSYsIGNvbnN0IE5vZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24u
Y3BwCmluZGV4IGRmOTkzYmU3YjMzNjQ0ZTJjMjkyMTI0ZDU0NGQ5YjgxOGQ4YTA2MDYuLmI5Y2My
MTcxNTVhMzgxMzViNmRlYjM4NWEwZmY5ZWM5Y2E4NDEzMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9u
LmNwcApAQCAtMTU4NCwxMyArMTU4NCwxMyBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHN0cmVhbSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIHJldHVybiBzdHJl
YW07CiB9CiAKLVJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihjb25zdCBQb3Np
dGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCitOb2RlKiBjb21tb25JbmNsdXNpdmVBbmNlc3Rv
cihjb25zdCBQb3NpdGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCiB7CiAgICAgYXV0byBub2Rl
QSA9IGEuY29udGFpbmVyTm9kZSgpOwogICAgIGF1dG8gbm9kZUIgPSBiLmNvbnRhaW5lck5vZGUo
KTsKICAgICBpZiAoIW5vZGVBIHx8ICFub2RlQikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKCpub2RlQSwgKm5vZGVCKTsKKyAgICBy
ZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3I8Q29tcG9zZWRUcmVlPigqbm9kZUEsICpub2Rl
Qik7CiB9CiAKIFBvc2l0aW9uIHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKE5vZGUqIG5vZGUp
CkBAIC0xNjQxLDcgKzE2NDEsNyBAQCBQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25z
dCBQb3NpdGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCiAgICAgYXV0byBiQ29udGFpbmVyID0g
Yi5jb250YWluZXJOb2RlKCk7CiAKICAgICBpZiAoIWFDb250YWluZXIgfHwgIWJDb250YWluZXIp
IHsKLSAgICAgICAgaWYgKCFjb21tb25JbmNsdXNpdmVBbmNlc3RvcigqYS5hbmNob3JOb2RlKCks
ICpiLmFuY2hvck5vZGUoKSkpCisgICAgICAgIGlmICghY29tbW9uSW5jbHVzaXZlQW5jZXN0b3I8
Q29tcG9zZWRUcmVlPigqYS5hbmNob3JOb2RlKCksICpiLmFuY2hvck5vZGUoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjp1bm9yZGVyZWQ7CiAgICAgICAgIGlmICghYUNv
bnRhaW5lciAmJiAhYkNvbnRhaW5lciAmJiBhLmFuY2hvclR5cGUoKSA9PSBiLmFuY2hvclR5cGUo
KSkKICAgICAgICAgICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6OmVxdWl2YWxlbnQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Qb3NpdGlvbi5oCmluZGV4IDY1ZGY1NWIyYjIwZWZiMDJiYzM3ZTI3MGJjNmYyMWMzYjI1ODMw
MjMuLjFlNGY5N2Q0MGZjYjExNjI4MmU3YmNhYjExYzJkMzNhNGIzNTdhMTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5oCkBAIC0yNjMsNyArMjYzLDcgQEAgUG9zaXRpb24gbGFzdFBvc2l0aW9uSW5Ob2Rl
KE5vZGUqIGFuY2hvck5vZGUpOwogCiBib29sIG9mZnNldElzQmVmb3JlTGFzdE5vZGVPZmZzZXQo
dW5zaWduZWQgb2Zmc2V0LCBOb2RlKiBhbmNob3JOb2RlKTsKIAotUmVmUHRyPE5vZGU+IGNvbW1v
bkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKK05v
ZGUqIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRp
b24mKTsKIAogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNv
bnN0IFBvc2l0aW9uJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDhkMDliZWRhYTgwYjAyZDBl
NjJkY2VlODdmZGJjMmEzZTI3MWY3YzAuLmU2M2YyZmJkYTY4MDYwMWQ5ZDAzMzg4OTFlYzAwMzc3
MjZjYTcxZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtOTIsNiArOTIsMTEgQEAgUmFuZ2U6On5S
YW5nZSgpCiAjZW5kaWYKIH0KIAorTm9kZSogUmFuZ2U6OmNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3Ioc3RhcnRDb250
YWluZXIoKSwgZW5kQ29udGFpbmVyKCkpOworfQorCiB2b2lkIFJhbmdlOjp1cGRhdGVBc3NvY2lh
dGVkU2VsZWN0aW9uKCkKIHsKICAgICBpZiAobV9pc0Fzc29jaWF0ZWRXaXRoU2VsZWN0aW9uKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vUmFuZ2UuaAppbmRleCAyZTkwOGI0MzkzZDU0ZGI0M2Q2MDc0NGZiOWIwNTczN2EyNjE1MWI3
Li40MjUwM2M5N2Y0OWFjYTIwMzkwMjIzODc0ODQ0NGVjMjI1MDhmNTI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
aApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgTm9kZSYgZW5kQ29udGFpbmVyKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9lbmQuY29udGFpbmVyKCk7IH0KICAgICB1bnNpZ25lZCBlbmRP
ZmZzZXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2VuZC5vZmZzZXQoKTsgfQogICAgIGJvb2wg
Y29sbGFwc2VkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zdGFydCA9PSBtX2VuZDsgfQotICAg
IE5vZGUqIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gY29tbW9uSW5j
bHVzaXZlQW5jZXN0b3Ioc3RhcnRDb250YWluZXIoKSwgZW5kQ29udGFpbmVyKCkpLmdldCgpOyB9
CisgICAgV0VCQ09SRV9FWFBPUlQgTm9kZSogY29tbW9uQW5jZXN0b3JDb250YWluZXIoKSBjb25z
dDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0YXJ0KFJlZjxO
b2RlPiYmLCB1bnNpZ25lZCBvZmZzZXQpOwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9y
PHZvaWQ+IHNldEVuZChSZWY8Tm9kZT4mJiwgdW5zaWduZWQgb2Zmc2V0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2ltcGxlUmFuZ2UuY3BwCmluZGV4IGIxMTZjMDE2MjAzNGQzYzNhOTZhMmEzYjc5MzA0MTRmMWU2
OTliN2QuLmE2N2Q4ZjczZjVjY2MwNjI1ODg0ZmQ2Y2M0OWM3MzU3OWFiMDkwN2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1NpbXBsZVJhbmdlLmNwcApAQCAtMjA3LDExICsyMDcsMTMgQEAgdm9pZCBJbnRlcnNl
Y3RpbmdOb2RlSXRlcmF0b3I6OmVuZm9yY2VFbmRJbnZhcmlhbnQoKQogICAgIH0KIH0KIAotUmVm
UHRyPE5vZGU+IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSkKK3RlbXBsYXRlPFRyZWVUeXBlIHRyZWVUeXBlPiBOb2RlKiBjb21tb25JbmNsdXNpdmVBbmNl
c3Rvcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGNvbW1vbkluY2x1
c2l2ZUFuY2VzdG9yKHJhbmdlLnN0YXJ0LmNvbnRhaW5lciwgcmFuZ2UuZW5kLmNvbnRhaW5lcik7
CisgICAgcmV0dXJuIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yPHRyZWVUeXBlPihyYW5nZS5zdGFy
dC5jb250YWluZXIsIHJhbmdlLmVuZC5jb250YWluZXIpOwogfQogCit0ZW1wbGF0ZSBOb2RlKiBj
b21tb25JbmNsdXNpdmVBbmNlc3RvcjxDb21wb3NlZFRyZWU+KGNvbnN0IFNpbXBsZVJhbmdlJik7
CisKIHRlbXBsYXRlPFRyZWVUeXBlIHRyZWVUeXBlPiBib29sIGNvbnRhaW5zKGNvbnN0IFNpbXBs
ZVJhbmdlJiByYW5nZSwgY29uc3QgQm91bmRhcnlQb2ludCYgcG9pbnQpCiB7CiAgICAgcmV0dXJu
IGlzX2x0ZXEodHJlZU9yZGVyPHRyZWVUeXBlPihyYW5nZS5zdGFydCwgcG9pbnQpKSAmJiBpc19s
dGVxKHRyZWVPcmRlcjx0cmVlVHlwZT4ocG9pbnQsIHJhbmdlLmVuZCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2lt
cGxlUmFuZ2UuaAppbmRleCBlMTVmNjE2NzY0MTE2NjRmM2M2NzBjZmFhYmY1MDg5OWRiMjliNzZm
Li5lZmE2ZjE5OGFkMGE1ODM2NGEwNzM4YjQ1YzI4YTI5YzIzNWU0OWI5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2ltcGxlUmFuZ2UuaApAQCAtNjMsNiArNjMsOCBAQCBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5n
ZSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYpOwogCiBib29sIG9wZXJhdG9y
PT0oY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogCit0ZW1wbGF0ZTxU
cmVlVHlwZSA9IFRyZWU+IE5vZGUqIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFNpbXBs
ZVJhbmdlJik7CisKIHRlbXBsYXRlPFRyZWVUeXBlID0gVHJlZT4gYm9vbCBjb250YWlucyhjb25z
dCBTaW1wbGVSYW5nZSYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKIHRlbXBsYXRlPFRyZWVUeXBl
ID0gVHJlZT4gYm9vbCBjb250YWlucyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE9wdGlvbmFs
PEJvdW5kYXJ5UG9pbnQ+Jik7CiB0ZW1wbGF0ZTxUcmVlVHlwZT4gYm9vbCBjb250YWlucyhjb25z
dCBTaW1wbGVSYW5nZSYgb3V0ZXJSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGlubmVyUmFuZ2Up
OwpAQCAtODYsNyArODgsNiBAQCBPZmZzZXRSYW5nZSBjaGFyYWN0ZXJEYXRhT2Zmc2V0UmFuZ2Uo
Y29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7CiAKIC8vIEZJWE1FOiBTdGFydCBvZiBm
dW5jdGlvbnMgdGhhdCBhcmUgZGVwcmVjYXRlZCBzaW5jZSB0aGV5IHNpbGVudGx5IGRlZmF1bHQg
dG8gQ29tcG9zZWRUcmVlLgogCi1XRUJDT1JFX0VYUE9SVCBSZWZQdHI8Tm9kZT4gY29tbW9uSW5j
bHVzaXZlQW5jZXN0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFRy
ZWVUeXBlPiBib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVS
YW5nZSYpOwogV0VCQ09SRV9FWFBPUlQgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdl
JiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgaW50ZXJzZWN0cyhj
b25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE5vZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQ2hhbmdlTGlzdFR5cGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ2hhbmdlTGlzdFR5cGVDb21tYW5kLmNwcAppbmRleCAwMTlhNDI2MjlkZWIyNjNmMmE4
MDU1YjM3Yjg1N2M0MTQ4OWU3MTEwLi4yYWRhYjZjZjhlMTkzMTNiYTgxYzU2YmU4Y2EyNTJhMWQ1
OGZlMDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NoYW5nZUxpc3RUeXBl
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9DaGFuZ2VMaXN0VHlwZUNv
bW1hbmQuY3BwCkBAIC00NCwxMyArNDQsMTMgQEAgc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxD
aGFuZ2VMaXN0VHlwZUNvbW1hbmQ6OlR5cGUsIFJlZjxIVE1MRWxlbWVudD4+PiBsaXN0Q28KICAg
ICBhdXRvIGVuZE5vZGUgPSBzZWxlY3Rpb24uZW5kKCkuY29udGFpbmVyTm9kZSgpOwogICAgIGlm
ICghc3RhcnROb2RlIHx8ICFlbmROb2RlKQogICAgICAgICByZXR1cm4geyB9OwotICAgIGF1dG8g
Y29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcigqc3RhcnROb2RlLCAqZW5k
Tm9kZSk7CisgICAgYXV0byBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9y
PENvbXBvc2VkVHJlZT4oKnN0YXJ0Tm9kZSwgKmVuZE5vZGUpOwogCiAgICAgUmVmUHRyPEhUTUxF
bGVtZW50PiBsaXN0VG9SZXBsYWNlOwogICAgIGlmIChpczxIVE1MVUxpc3RFbGVtZW50Pihjb21t
b25BbmNlc3RvcikgfHwgaXM8SFRNTE9MaXN0RWxlbWVudD4oY29tbW9uQW5jZXN0b3IpKQotICAg
ICAgICBsaXN0VG9SZXBsYWNlID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGNvbW1vbkFuY2VzdG9y
LmdldCgpKTsKKyAgICAgICAgbGlzdFRvUmVwbGFjZSA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pihj
b21tb25BbmNlc3Rvcik7CiAgICAgZWxzZQotICAgICAgICBsaXN0VG9SZXBsYWNlID0gZW5jbG9z
aW5nTGlzdChjb21tb25BbmNlc3Rvci5nZXQoKSk7CisgICAgICAgIGxpc3RUb1JlcGxhY2UgPSBl
bmNsb3NpbmdMaXN0KGNvbW1vbkFuY2VzdG9yKTsKIAogICAgIGlmIChpczxIVE1MVUxpc3RFbGVt
ZW50PihsaXN0VG9SZXBsYWNlKSkKICAgICAgICAgcmV0dXJuIHt7IENoYW5nZUxpc3RUeXBlQ29t
bWFuZDo6VHlwZTo6Q29udmVydFRvT3JkZXJlZExpc3QsIGxpc3RUb1JlcGxhY2UucmVsZWFzZU5v
bk51bGwoKSB9fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCAy
OTNkODQzZDNjMmJkZmJmMjJmNmJlM2UxYWMyNGFlOGQ4NmY0MGJlLi4wNjE4ZDc2MThiZDVjYjBm
ZTQwY2U0N2M2MjI3ZmRkM2FhOWFiZDE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
U3R5bGUuY3BwCkBAIC0xNTE1LDcgKzE1MTUsNyBAQCBSZWZQdHI8RWRpdGluZ1N0eWxlPiBFZGl0
aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJgog
ICAgIC8vIGFuZCBmaW5kIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBjb21tb24gYW5jZXN0
b3IuCiAgICAgaWYgKHNob3VsZFVzZUJhY2tncm91bmRDb2xvckluRWZmZWN0ICYmIChzZWxlY3Rp
b24uaXNSYW5nZSgpIHx8IGhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG9yKHN0eWxlLT5tX211
dGFibGVTdHlsZS5nZXQoKSkpKSB7CiAgICAgICAgIGlmIChhdXRvIHJhbmdlID0gc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIHZhbHVlID0gYmFj
a2dyb3VuZENvbG9ySW5FZmZlY3QoY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKnJhbmdlKS5nZXQo
KSkpCisgICAgICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGJhY2tncm91bmRDb2xvckluRWZmZWN0
KGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yPENvbXBvc2VkVHJlZT4oKnJhbmdlKSkpCiAgICAgICAg
ICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCB2
YWx1ZS0+Y3NzVGV4dCgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcAppbmRleCAxZjExZmIxNjE4M2IxOWQxMzI2N2EzYzk0MDNhOWI5ZTY3OTg1M2ZmLi5lNjAx
YTVmY2RlMmVmZDFjOTU1MGE1MzYwNDk1YWFjMjI4NGIxNjI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCkBAIC00MjI3LDcgKzQyMjcsNyBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRp
dG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKICAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG5l
ZWQgdG8gYWRqdXN0IHRoZSBzZWxlY3Rpb24gdG8gaW5jbHVkZSB0aGUgYW5jaG9yIHRhZyBpdCdz
IGluPyBXaG9ldmVyIHdyb3RlIHRoaXMgY29kZSBvcmlnaW5hbGx5IGZvcmdvdCB0byBsZWF2ZSB1
cyBhIGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgcmF0aW9uYWxlLgogICAgIGF1dG8gcmFuZ2UgPSBz
ZWxlY3RlZFJhbmdlKCk7CiAgICAgaWYgKHJhbmdlKSB7Ci0gICAgICAgIGlmIChhdXRvIGVuY2xv
c2luZ0FuY2hvciA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUo
Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKnJhbmdlKS5nZXQoKSksIEhUTUxOYW1lczo6YVRhZykp
IHsKKyAgICAgICAgaWYgKGF1dG8gZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nRWxlbWVudFdp
dGhUYWcoZmlyc3RQb3NpdGlvbkluTm9kZShjb21tb25JbmNsdXNpdmVBbmNlc3RvcjxDb21wb3Nl
ZFRyZWU+KCpyYW5nZSkpLCBIVE1MTmFtZXM6OmFUYWcpKSB7CiAgICAgICAgICAgICBpZiAoZmly
c3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHJhbmdlLT5zdGFydC5jb250YWluZXIucHRyKCkpID49
IG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSkKICAgICAgICAgICAg
ICAgICByYW5nZS0+c3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygq
ZW5jbG9zaW5nQW5jaG9yKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
b3JtYXRCbG9ja0NvbW1hbmQuY3BwCmluZGV4IGJmNTJlMGMwNDRiN2NhYzMxZjE0OWQ0YTI2MzQy
OTViMTJjMjRlZjYuLmM3OGQxZWJmODZlYjBiNDkwZGEzOWM2MzBiYjJmYTFiNGRlYmIzZDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKQEAgLTEw
Myw4ICsxMDMsOCBAQCBFbGVtZW50KiBGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1lbnRGb3JGb3Jt
YXRCbG9ja0NvbW1hbmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUgogICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBjb21tb25BbmNlc3RvciA9IGNvbW1v
bkluY2x1c2l2ZUFuY2VzdG9yKCpyYW5nZSk7Ci0gICAgd2hpbGUgKGNvbW1vbkFuY2VzdG9yICYm
ICFpc0VsZW1lbnRGb3JGb3JtYXRCbG9jayhjb21tb25BbmNlc3Rvci5nZXQoKSkpCisgICAgYXV0
byBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yPENvbXBvc2VkVHJlZT4o
KnJhbmdlKTsKKyAgICB3aGlsZSAoY29tbW9uQW5jZXN0b3IgJiYgIWlzRWxlbWVudEZvckZvcm1h
dEJsb2NrKGNvbW1vbkFuY2VzdG9yKSkKICAgICAgICAgY29tbW9uQW5jZXN0b3IgPSBjb21tb25B
bmNlc3Rvci0+cGFyZW50Tm9kZSgpOwogICAgIGlmICghaXM8RWxlbWVudD4oY29tbW9uQW5jZXN0
b3IpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggZTViZDE1YzBhOWFm
NGNiOTQxZDJhNzRiMDNlMjE4Mjg3OGE2MTAwZS4uNjExZjczMzAzNGQyMWFjNzJkZTE4NDkyZjY2
MDY5ZTBkMDJjZWYyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTYwMyw3ICs2MDMsNyBAQCB2b2lkIFRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpzY2hlZHVsZU9ic2VydmF0aW9uVXBkYXRlKCkKICAgICAg
ICAgICAgIGlmICghY29tbW9uQW5jZXN0b3IpCiAgICAgICAgICAgICAgICAgY29tbW9uQW5jZXN0
b3IgPSBpczxDb250YWluZXJOb2RlPihub2RlLmdldCgpKSA/IG5vZGUucHRyKCkgOiBub2RlLT5w
YXJlbnROb2RlKCk7CiAgICAgICAgICAgICBlbHNlIGlmICghbm9kZS0+aXNEZXNjZW5kYW50T2Yo
Y29tbW9uQW5jZXN0b3IuZ2V0KCkpKQotICAgICAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0g
Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKmNvbW1vbkFuY2VzdG9yLCBub2RlLmdldCgpKTsKKyAg
ICAgICAgICAgICAgICBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yPENv
bXBvc2VkVHJlZT4oKmNvbW1vbkFuY2VzdG9yLCBub2RlLmdldCgpKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGF1dG8gc3RhcnQgPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoY29tbW9uQW5j
ZXN0b3IuZ2V0KCkpOwpAQCAtODI1LDcgKzgyNSw3IEBAIGF1dG8gVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbURhdGEmIGl0ZW0sIGNvbnN0
CiAgICAgICAgIGlmICghY29tbW9uQW5jZXN0b3IpCiAgICAgICAgICAgICBjb21tb25BbmNlc3Rv
ciA9IHBhcmVudE5vZGU7CiAgICAgICAgIGVsc2UgaWYgKCFwYXJlbnROb2RlLT5pc0Rlc2NlbmRh
bnRPZihjb21tb25BbmNlc3Rvci5nZXQoKSkpIHsKLSAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9y
ID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKmNvbW1vbkFuY2VzdG9yLCAqcGFyZW50Tm9kZSk7
CisgICAgICAgICAgICBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yPENv
bXBvc2VkVHJlZT4oKmNvbW1vbkFuY2VzdG9yLCAqcGFyZW50Tm9kZSk7CiAgICAgICAgICAgICBB
U1NFUlQoY29tbW9uQW5jZXN0b3IpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCmluZGV4IDAxZWRkNTNjMDc0ZGRjYWIzMTViYmI2
OTE0NWM0YzMwMWMyMDMwNzMuLjk3MjhkYmZkYjIwMzEwOWQyODk3ODQ5NWE4MzcwYzhlODNhMWQ5
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTQy
LDYgKzQyLDcgQEAKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCiAjaW5jbHVkZSAiU2ltcGxl
UmFuZ2UuaCIKICNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC03NTIsNiArNzUzLDExIEBAIE9wdGlvbmFsPEJvdW5kYXJ5
UG9pbnQ+IG1ha2VCb3VuZGFyeVBvaW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24p
CiAgICAgcmV0dXJuIG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkp
OwogfQogCitOb2RlKiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihjb25zdCBWaXNpYmxlUG9zaXRp
b24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKK3sKKyAgICByZXR1cm4gY29tbW9uSW5j
bHVzaXZlQW5jZXN0b3IoYS5kZWVwRXF1aXZhbGVudCgpLCBiLmRlZXBFcXVpdmFsZW50KCkpOwor
fQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHN0cmVhbSwgQWZmaW5pdHkg
YWZmaW5pdHkpCiB7CiAgICAgc3dpdGNoIChhZmZpbml0eSkgewpAQCAtNzg3LDYgKzc5Myw0MiBA
QCBQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYgogICAgIHJldHVybiBkb2N1bWVudE9yZGVyKGEuZGVl
cEVxdWl2YWxlbnQoKSwgYi5kZWVwRXF1aXZhbGVudCgpKTsKIH0KIAorYm9vbCBpbnRlcnNlY3Rz
KGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5n
ZSYgYikKK3sKKyAgICByZXR1cm4gYS5zdGFydCA8PSBiLmVuZCAmJiBiLnN0YXJ0IDw9IGEuZW5k
OworfQorCitib29sIGNvbnRhaW5zKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJiByYW5nZSwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb2ludCkKK3sKKyAgICByZXR1cm4gcG9pbnQgPj0gcmFu
Z2Uuc3RhcnQgJiYgcG9pbnQgPD0gcmFuZ2UuZW5kOworfQorCitWaXNpYmxlUG9zaXRpb25SYW5n
ZSBpbnRlcnNlY3Rpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmIGEsIGNvbnN0IFZpc2li
bGVQb3NpdGlvblJhbmdlJiBiKQoreworICAgIHJldHVybiB7IHN0ZDo6bWF4KGEuc3RhcnQsIGIu
c3RhcnQpLCBzdGQ6Om1pbihhLmVuZCwgYi5lbmQpIH07Cit9CisKK05vZGUqIGNvbW1vbkluY2x1
c2l2ZUFuY2VzdG9yKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJiByYW5nZSkKK3sKKyAgICBy
ZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7Cit9
CisKK1Zpc2libGVQb3NpdGlvbiBtaWRwb2ludChjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYg
cmFuZ2UpCit7CisgICAgYXV0byByb290Tm9kZSA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJh
bmdlKTsKKyAgICBpZiAoIXJvb3ROb2RlKQorICAgICAgICByZXR1cm4geyB9OworICAgIGF1dG8g
cm9vdENvbnRhaW5lck5vZGUgPSByb290Tm9kZS0+aXNDb250YWluZXJOb2RlKCkgPyBkb3duY2Fz
dDxDb250YWluZXJOb2RlPihyb290Tm9kZSkgOiByb290Tm9kZS0+cGFyZW50Tm9kZSgpOworICAg
IGlmICghcm9vdENvbnRhaW5lck5vZGUpCisgICAgICAgIHJldHVybiB7IH07CisgICAgYXV0byBz
Y29wZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdENvbnRhaW5lck5vZGUp
OworICAgIGF1dG8gY2hhcmFjdGVyUmFuZ2UgPSBXZWJDb3JlOjpjaGFyYWN0ZXJSYW5nZShzY29w
ZSwgKm1ha2VTaW1wbGVSYW5nZShyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKSk7CisgICAgYXV0byBt
aWRwb2ludCA9IGNoZWNrZWRTdW08dWludDY0X3Q+KGNoYXJhY3RlclJhbmdlLmxvY2F0aW9uLCBj
aGFyYWN0ZXJSYW5nZS5sZW5ndGggLyAyKTsKKyAgICBpZiAobWlkcG9pbnQuaGFzT3ZlcmZsb3dl
ZCgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBtYWtlQ29udGFpbmVyT2Zmc2V0
UG9zaXRpb24ocmVzb2x2ZUNoYXJhY3RlckxvY2F0aW9uKHNjb3BlLCBtaWRwb2ludC51bnNhZmVH
ZXQoKSkpOworfQorCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWYgRU5BQkxFKFRSRUVf
REVCVUdHSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9z
aXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKaW5kZXgg
YzdlNWViOGZiOTgzYzc2ZGU1ZTU2Y2FmOWFjZjgxZDU3OWUxZTFiMC4uZTc0Y2QwNjZmYTNjMjU2
OGYxYzUxZjBhYWYyZjNkOTYwNDVlMmRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlUG9zaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5oCkBAIC0xMjYsNiArMTI2LDggQEAgYm9vbCBpc0xhc3RWaXNpYmxlUG9zaXRp
b25Jbk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgTm9kZSopOwogCiBib29sIGFy
ZVZpc2libGVQb3NpdGlvbnNJblNhbWVUcmVlU2NvcGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAKK05vZGUqIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9y
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworCiBXVEY6
OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWZmaW5pdHkpOwogV0VC
Q09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogCkBAIC0xMzgsNiArMTQwLDEzIEBAIHN0cnVjdCBW
aXNpYmxlUG9zaXRpb25SYW5nZSB7CiAKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKTsKIAorTm9k
ZSogY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKTsK
KworV0VCQ09SRV9FWFBPUlQgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFZpc2libGVQb3NpdGlvblJh
bmdlJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKTsKK1dFQkNPUkVfRVhQT1JUIGJvb2wg
Y29udGFpbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmLCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mKTsKK1dFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvblJhbmdlIGludGVyc2VjdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYsIGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJik7
CitXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gbWlkcG9pbnQoY29uc3QgVmlzaWJsZVBv
c2l0aW9uUmFuZ2UmKTsKKwogLy8gaW5saW5lcwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCmluZGV4IDhkMjZiZjg1
OWE0OTNkYTY2NDMzMTQzZWQwZGFhNDc5ZGI2NzhmOTAuLjU3ZGU5ZDI3N2EwOTkyNDgwZGVkNzU3
NjIxNTI2MzJmMjAwNmVlYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hU
TUxDb252ZXJ0ZXIubW0KQEAgLTIzMDQsNyArMjMwNCw3IEBAIE5vZGUqIEhUTUxDb252ZXJ0ZXJD
YWNoZXM6OmNhY2hlQW5jZXN0b3JzT2ZTdGFydFRvQmVDb252ZXJ0ZWQoY29uc3QgUG9zaXRpb24m
IHN0CiAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudEluQ29tcG9zZWRUcmVlKCk7
CiAgICAgfQogCi0gICAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yLmdldCgpOworICAgIHJldHVybiBj
b21tb25BbmNlc3RvcjsKIH0KIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYXJrdXAuY3BwCmluZGV4IDk3N2QxMzUyOWY5OTc1YTJlNmJhM2MyMGJmNzdjYzc1MzYz
NzFiNWYuLmM4NmE5YjdkZDNkZjk3ZmYwZWFjZTE2N2VlYWVjOTkwZDFhMWZjZTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5jcHAKQEAgLTg1Miw3ICs4NTIsNyBAQCBzdGF0aWMgU3RyaW5nIHNl
cmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlSW50ZXJuYWwoY29uc3QgUG9zaXRpb24m
IHN0YXJ0LAogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQgeyBzdGFydCB9OwogICAg
IFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kIHsgZW5kIH07CiAKLSAgICBhdXRvIGJvZHkgPSBt
YWtlUmVmUHRyKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29t
bW9uQW5jZXN0b3IuZ2V0KCkpLCBib2R5VGFnKSk7CisgICAgYXV0byBib2R5ID0gbWFrZVJlZlB0
cihlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbW1vbkFuY2Vz
dG9yKSwgYm9keVRhZykpOwogICAgIFJlZlB0cjxFbGVtZW50PiBmdWxseVNlbGVjdGVkUm9vdDsK
ICAgICAvLyBGSVhNRTogRG8gdGhpcyBmb3IgYWxsIGZ1bGx5IHNlbGVjdGVkIGJsb2Nrcywgbm90
IGp1c3QgdGhlIGJvZHkuCiAgICAgaWYgKGJvZHkgJiYgVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9z
aXRpb25Jbk5vZGUoYm9keS5nZXQoKSkpID09IHZpc2libGVTdGFydCAmJiBWaXNpYmxlUG9zaXRp
b24obGFzdFBvc2l0aW9uSW5Ob2RlKGJvZHkuZ2V0KCkpKSA9PSB2aXNpYmxlRW5kKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCBjZGI3ZjM2NmEyN2FkY2Y4MTRmYTg5
MWE2MTljNzJhNDI0MWE4OGI5Li5jZGJmZDhmYzg1YTZiOGE4YWFkNWZkM2QwMTcwZGM2OWE0NjUw
ODkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtMTQ2MCw3ICsx
NDYwLDcgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xk
ZXJzQXRDYXJldChjb25zdCBWZWN0b3I8SW50U2l6ZT4KICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGF1dG8gY29udGFpbmVyID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKmluc2VydGVk
Q29udGVudFJhbmdlKTsKKyAgICBhdXRvIGNvbnRhaW5lciA9IGNvbW1vbkluY2x1c2l2ZUFuY2Vz
dG9yPENvbXBvc2VkVHJlZT4oKmluc2VydGVkQ29udGVudFJhbmdlKTsKICAgICBpZiAoIWlzPENv
bnRhaW5lck5vZGU+KGNvbnRhaW5lcikpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBk
ZDM0NjdjYjg5YzE5MGFjNmQ2MGM2ZjMyZGJlMDU4OTViMWM2MzcwLi45MjA3YmY3YWViYzgzZjc4
NjM5MzU4MTQyNzQwY2JmZjVmNjI2YWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCkBAIC0yMDk2LDcgKzIwOTYsNyBAQCBzdGF0aWMgUmVmUHRyPE5vZGU+IHRhcmdldE5vZGVG
b3JDbGlja0V2ZW50KE5vZGUqIG1vdXNlUHJlc3NOb2RlLCBOb2RlKiBtb3VzZVJlbAogCiAgICAg
Ly8gSWYgbW91c2VQcmVzc05vZGUgYW5kIG1vdXNlUmVsZWFzZU5vZGUgZGlmZmVyLCB3ZSBzaG91
bGQgZmlyZSB0aGUgZXZlbnQgYXQgdGhlaXIgY29tbW9uIGFuY2VzdG9yIGlmIHRoZXJlIGlzIG9u
ZS4KICAgICBpZiAoJm1vdXNlUHJlc3NOb2RlLT5kb2N1bWVudCgpID09ICZtb3VzZVJlbGVhc2VO
b2RlLT5kb2N1bWVudCgpKSB7Ci0gICAgICAgIGlmIChhdXRvIGNvbW1vbkFuY2VzdG9yID0gY29t
bW9uSW5jbHVzaXZlQW5jZXN0b3IoKm1vdXNlUHJlc3NOb2RlLCAqbW91c2VSZWxlYXNlTm9kZSkp
CisgICAgICAgIGlmIChhdXRvIGNvbW1vbkFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0
b3I8Q29tcG9zZWRUcmVlPigqbW91c2VQcmVzc05vZGUsICptb3VzZVJlbGVhc2VOb2RlKSkKICAg
ICAgICAgICAgIHJldHVybiBjb21tb25BbmNlc3RvcjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1RleHRJbmRpY2F0b3IuY3BwCmluZGV4IDUyOTQyZmU3YmI1NzkxZmU5Mjc1ODA3NDNjZWE2ZDhm
YzliMWIwNDYuLjJkZjgxZWE3MDU3M2I2NzUxNTFkNDE3Njc5MDdlZjQ4ZmM0ZTIyZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApAQCAtMjEwLDcgKzIxMCw3IEBAIHN0YXRp
YyBDb2xvciBlc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3JGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UsIGNvbnN0IEZyCiAgICAgYXV0byBlc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3IgPSBm
cmFtZS52aWV3KCkgPyBmcmFtZS52aWV3KCktPmRvY3VtZW50QmFja2dyb3VuZENvbG9yKCkgOiBD
b2xvcjo6dHJhbnNwYXJlbnRCbGFjazsKIAogICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0g
bnVsbHB0cjsKLSAgICBhdXRvIGNvbW1vbkFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0
b3IocmFuZ2UpOworICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNl
c3RvcjxDb21wb3NlZFRyZWU+KHJhbmdlKTsKICAgICB3aGlsZSAoY29tbW9uQW5jZXN0b3IpIHsK
ICAgICAgICAgaWYgKGlzPFJlbmRlckVsZW1lbnQ+KGNvbW1vbkFuY2VzdG9yLT5yZW5kZXJlcigp
KSkgewogICAgICAgICAgICAgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJFbGVtZW50Pihjb21t
b25BbmNlc3Rvci0+cmVuZGVyZXIoKSk7CkBAIC0yOTUsNyArMjk1LDcgQEAgc3RhdGljIGJvb2wg
aW5pdGlhbGl6ZUluZGljYXRvcihUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSwgRnJhbWUmIGZyYW1l
LCBjb25zdCBTaW0KIAogICAgIGJvb2wgdXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50
Rm9yQ29tcGxleFJhbmdlcyA9IGRhdGEub3B0aW9ucy5jb250YWlucyhUZXh0SW5kaWNhdG9yT3B0
aW9uOjpVc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzKTsK
ICAgICBpZiAodXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdl
cyAmJiBjb250YWluc09ubHlXaGl0ZVNwYWNlVGV4dChyYW5nZSkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIGNvbnRhaW5lclJlbmRlcmVyID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2UpLT5y
ZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChhdXRvKiBjb250YWluZXJSZW5kZXJlciA9IGNvbW1v
bkluY2x1c2l2ZUFuY2VzdG9yPENvbXBvc2VkVHJlZT4ocmFuZ2UpLT5yZW5kZXJlcigpKSB7CiAg
ICAgICAgICAgICBkYXRhLm9wdGlvbnMuYWRkKFRleHRJbmRpY2F0b3JPcHRpb246OlBhaW50QWxs
Q29udGVudCk7CiAgICAgICAgICAgICB0ZXh0UmVjdHMuYXBwZW5kKGNvbnRhaW5lclJlbmRlcmVy
LT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA4OGExN2M1MDBlMjBmY2ZjMzMyNDgwMDU4
ZGNhY2JmYmNmODI4OGE0Li5iYzhkN2UwNWQ5ZjZmZmM2ZjQ0ZDdiYjBkMzA1ZjVjZDA1MWZjNWVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMjEzNiw3
ICsyMTM2LDcgQEAgYXV0byBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c0ludGVy
bmFsKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkgLT4gU2UKICAgICAvLyBUaGUgcmFuZ2UgY291
bGQgc3BhbiBub2RlcyB3aXRoIGRpZmZlcmVudCB3cml0aW5nIG1vZGVzLgogICAgIC8vIElmIHRo
aXMgaXMgdGhlIGNhc2UsIHdlIHVzZSB0aGUgd3JpdGluZyBtb2RlIG9mIHRoZSBjb21tb24gYW5j
ZXN0b3IuCiAgICAgaWYgKGNvbnRhaW5zRGlmZmVyZW50V3JpdGluZ01vZGVzKSB7Ci0gICAgICAg
IGlmIChhdXRvIGFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2UpKQorICAg
ICAgICBpZiAoYXV0byBhbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yPENvbXBvc2Vk
VHJlZT4ocmFuZ2UpKQogICAgICAgICAgICAgaGFzRmxpcHBlZFdyaXRpbmdNb2RlID0gYW5jZXN0
b3ItPnJlbmRlcmVyKCktPnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0KaW5kZXggYmNhZWM4NWM1N2M3YTczMGJkNTRiNWFjNDhmM2NlZmE1MzMyZDJiZS4u
MGEzZDRmZDY3ZDUxNzQ0YzU2ODFhOGY2ODc4ZTU1MzhhYzk0ZGQzYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTQxMjks
NiArNDEyOSwyMCBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclBv
aW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzKEZyYW1lJiBmcmFtZQogICAgIHJldHVybiBmcmFtZS52
aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludEluRG9jdW1lbnQpOwogfQogCitzdGF0aWMgVmlz
aWJsZVBvc2l0aW9uUmFuZ2UgY29uc3RyYWluUmFuZ2VUb1NlbGVjdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb25SYW5nZSYgc2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYgcmFu
Z2UpCit7CisgICAgaWYgKGludGVyc2VjdHMoc2VsZWN0aW9uLCByYW5nZSkpCisgICAgICAgIHJl
dHVybiBpbnRlcnNlY3Rpb24oc2VsZWN0aW9uLCByYW5nZSk7CisgICAgYXV0byByYW5nZU1pZHBv
aW50ID0gbWlkcG9pbnQocmFuZ2UpOworICAgIGF1dG8gcG9zaXRpb24gPSBzdGFydE9mV29yZChy
YW5nZU1pZHBvaW50KTsKKyAgICBpZiAoIWNvbnRhaW5zKHJhbmdlLCBwb3NpdGlvbikpIHsKKyAg
ICAgICAgcG9zaXRpb24gPSBlbmRPZldvcmQocmFuZ2VNaWRwb2ludCk7CisgICAgICAgIGlmICgh
Y29udGFpbnMocmFuZ2UsIHBvc2l0aW9uKSkKKyAgICAgICAgICAgIHBvc2l0aW9uID0gcmFuZ2VN
aWRwb2ludDsKKyAgICB9CisgICAgcmV0dXJuIHsgcG9zaXRpb24sIHBvc2l0aW9uIH07Cit9CisK
IHZvaWQgV2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0
aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVzdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChEb2N1bWVu
dEVkaXRpbmdDb250ZXh0KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIXJlcXVl
c3Qub3B0aW9ucy5jb250YWlucyhEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdDo6T3B0aW9u
czo6VGV4dCkgJiYgIXJlcXVlc3Qub3B0aW9ucy5jb250YWlucyhEb2N1bWVudEVkaXRpbmdDb250
ZXh0UmVxdWVzdDo6T3B0aW9uczo6QXR0cmlidXRlZFRleHQpKSB7CkBAIC00MTkyLDQ2ICs0MjA2
LDggQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVu
dEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIERvY3VtZW50RWRpdGluZ0NvbnRleHQgY29udGV4dDsKLQogICAgIC8vIFRoZSBzdWJzZXQg
b2YgdGhlIHNlbGVjdGlvbiB0aGF0IGlzIGluc2lkZSB0aGUgcmFuZ2Ugb2YgaW50ZXJlc3QuCi0g
ICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbjsKLSAg
ICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbjsKLQotICAg
IGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAg
ICBhdXRvIHJhbmdlT2ZJbnRlcmVzdCA9ICptYWtlU2ltcGxlUmFuZ2UocmFuZ2VPZkludGVyZXN0
U3RhcnQsIHJhbmdlT2ZJbnRlcmVzdEVuZCk7Ci0gICAgaWYgKHNlbGVjdGlvblJhbmdlICYmIGlu
dGVyc2VjdHMocmFuZ2VPZkludGVyZXN0LCAqc2VsZWN0aW9uUmFuZ2UpKSB7Ci0gICAgICAgIHN0
YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA9IHN0ZDo6bWF4KHJhbmdlT2ZJbnRlcmVz
dFN0YXJ0LCBzZWxlY3Rpb25TdGFydCk7Ci0gICAgICAgIGVuZE9mUmFuZ2VPZkludGVyZXN0SW5T
ZWxlY3Rpb24gPSBzdGQ6Om1pbihyYW5nZU9mSW50ZXJlc3RFbmQsIHNlbGVjdGlvbkVuZCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byByb290Tm9kZSA9IGNvbW1vbkluY2x1c2l2ZUFuY2Vz
dG9yKHJhbmdlT2ZJbnRlcmVzdCk7Ci0gICAgICAgIGlmICghcm9vdE5vZGUpIHsKLSAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgYXV0byByb290Q29udGFpbmVyTm9kZSA9IHJvb3ROb2RlLT5pc0NvbnRhaW5l
ck5vZGUoKSA/IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KHJvb3ROb2RlLmdldCgpKSA6IHJvb3RO
b2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgIGlmICghcm9vdENvbnRhaW5lck5vZGUpIHsKLSAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250
ZW50cygqcm9vdENvbnRhaW5lck5vZGUpOwotCi0gICAgICAgIGF1dG8gY2hhcmFjdGVyUmFuZ2VP
ZkludGVyZXN0ID0gY2hhcmFjdGVyUmFuZ2Uoc2NvcGUsIHJhbmdlT2ZJbnRlcmVzdCk7Ci0gICAg
ICAgIGF1dG8gbWlkcG9pbnRMb2NhdGlvbiA9IGNoZWNrZWRTdW08dWludDY0X3Q+KGNoYXJhY3Rl
clJhbmdlT2ZJbnRlcmVzdC5sb2NhdGlvbiwgY2hhcmFjdGVyUmFuZ2VPZkludGVyZXN0Lmxlbmd0
aCAvIDIpOwotICAgICAgICBpZiAobWlkcG9pbnRMb2NhdGlvbi5oYXNPdmVyZmxvd2VkKCkpIHsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgYXV0byBtaWRwb2ludCA9IG1ha2VEZXByZWNhdGVkTGVnYWN5
UG9zaXRpb24ocmVzb2x2ZUNoYXJhY3RlckxvY2F0aW9uKHNjb3BlLCBtaWRwb2ludExvY2F0aW9u
LnVuc2FmZUdldCgpKSk7Ci0KLSAgICAgICAgc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0
aW9uID0gc3RhcnRPZldvcmQobWlkcG9pbnQpOwotICAgICAgICBpZiAoc3RhcnRPZlJhbmdlT2ZJ
bnRlcmVzdEluU2VsZWN0aW9uIDwgcmFuZ2VPZkludGVyZXN0U3RhcnQpIHsKLSAgICAgICAgICAg
IHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA9IGVuZE9mV29yZChtaWRwb2ludCk7
Ci0gICAgICAgICAgICBpZiAoc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uID4gcmFu
Z2VPZkludGVyZXN0RW5kKQotICAgICAgICAgICAgICAgIHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJ
blNlbGVjdGlvbiA9IG1pZHBvaW50OwotICAgICAgICB9Ci0gICAgICAgIGVuZE9mUmFuZ2VPZklu
dGVyZXN0SW5TZWxlY3Rpb24gPSBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb247Ci0g
ICAgfQorICAgIGF1dG8gcmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPSBjb25zdHJhaW5SYW5n
ZVRvU2VsZWN0aW9uKHNlbGVjdGlvbiwgeyByYW5nZU9mSW50ZXJlc3RTdGFydCwgcmFuZ2VPZklu
dGVyZXN0RW5kIH0pOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIGNvbnRleHRCZWZvcmVTdGFydDsK
ICAgICBWaXNpYmxlUG9zaXRpb24gY29udGV4dEFmdGVyRW5kOwpAQCAtNDI2MiwxNCArNDIzOCwx
NSBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50
RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAgICAgICByZXR1cm4geyBhZG9wdE5TKFtb
TlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpXZWJDb3JlOjpwbGFpblRl
eHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoKnJhbmdlKV0pLCBuaWwgfTsKICAgICB9OwogCi0gICAg
Y29udGV4dC5jb250ZXh0QmVmb3JlID0gbWFrZVN0cmluZyhjb250ZXh0QmVmb3JlU3RhcnQsIHN0
YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbik7Ci0gICAgY29udGV4dC5zZWxlY3RlZFRl
eHQgPSBtYWtlU3RyaW5nKHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiwgZW5kT2ZS
YW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbik7Ci0gICAgY29udGV4dC5jb250ZXh0QWZ0ZXIgPSBt
YWtlU3RyaW5nKGVuZE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24sIGNvbnRleHRBZnRlckVu
ZCk7Ci0gICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2UgJiYgaW50ZXJzZWN0cyhyYW5nZU9mSW50ZXJl
c3QsICpjb21wb3NpdGlvblJhbmdlKSkgeworICAgIERvY3VtZW50RWRpdGluZ0NvbnRleHQgY29u
dGV4dDsKKyAgICBjb250ZXh0LmNvbnRleHRCZWZvcmUgPSBtYWtlU3RyaW5nKGNvbnRleHRCZWZv
cmVTdGFydCwgcmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24uc3RhcnQpOworICAgIGNvbnRleHQu
c2VsZWN0ZWRUZXh0ID0gbWFrZVN0cmluZyhyYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbi5zdGFy
dCwgcmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24uZW5kKTsKKyAgICBjb250ZXh0LmNvbnRleHRB
ZnRlciA9IG1ha2VTdHJpbmcocmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24uZW5kLCBjb250ZXh0
QWZ0ZXJFbmQpOworICAgIGlmIChjb21wb3NpdGlvblJhbmdlICYmIGludGVyc2VjdHMoKm1ha2VT
aW1wbGVSYW5nZShyYW5nZU9mSW50ZXJlc3RTdGFydCwgcmFuZ2VPZkludGVyZXN0RW5kKSwgKmNv
bXBvc2l0aW9uUmFuZ2UpKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjb21wb3NpdGlvblN0
YXJ0KG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+c3RhcnQp
KTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGNvbXBvc2l0aW9uRW5kKG1ha2VEZXByZWNhdGVk
TGVnYWN5UG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+ZW5kKSk7CiAgICAgICAgIGNvbnRleHQu
bWFya2VkVGV4dCA9IG1ha2VTdHJpbmcoY29tcG9zaXRpb25TdGFydCwgY29tcG9zaXRpb25FbmQp
OwotICAgICAgICBjb250ZXh0LnNlbGVjdGVkUmFuZ2VJbk1hcmtlZFRleHQubG9jYXRpb24gPSBk
aXN0YW5jZUJldHdlZW5Qb3NpdGlvbnMoc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9u
LCBjb21wb3NpdGlvblN0YXJ0KTsKKyAgICAgICAgY29udGV4dC5zZWxlY3RlZFJhbmdlSW5NYXJr
ZWRUZXh0LmxvY2F0aW9uID0gZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKHJhbmdlT2ZJbnRlcmVz
dEluU2VsZWN0aW9uLnN0YXJ0LCBjb21wb3NpdGlvblN0YXJ0KTsKICAgICAgICAgY29udGV4dC5z
ZWxlY3RlZFJhbmdlSW5NYXJrZWRUZXh0Lmxlbmd0aCA9IFtjb250ZXh0LnNlbGVjdGVkVGV4dC5z
dHJpbmcgbGVuZ3RoXTsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413124</attachid>
            <date>2020-11-03 16:45:26 -0800</date>
            <delta_ts>2020-11-04 20:45:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218544-20201103164525.patch</filename>
            <type>text/plain</type>
            <size>32632</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGQzNTgyMDkwZTM3ZGIz
MDZmOTUyNGVhODhhMDA4YTUzMTEwNjk1NC4uNmI1NTkwYmM3YTgwNTMzZDE3NzE3YTg5NzI4NWRh
YzE1NzA2MDdiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDIwLTExLTAzICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgbW9yZSBmdW5jdGlv
bnMgdGhhdCBpbXBsaWNpdGx5IHVzZSBjb21wb3NlZCB0cmVlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg1NDQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKTogQ2hhbmdlZCB0aGlzIGludG8gYSBmdW5j
dGlvbiB0ZW1wbGF0ZS4KKyAgICAgICAgKiBkb20vTm9kZS5oOiBEaXR0by4gTm90ZSB0aGlzIGRl
ZmF1bHRzIHRvIHRoZSB0cmFkaXRpb25hbCB0cmVlLCBhbmQgY2FsbGVycworICAgICAgICBoYXZl
IGFsbCBiZWVuIG1vZGlmaWVkIHRvIHVzZSBjb21wb3NlZCB0cmVlIGV4cGxpY2l0bHkuCisKKyAg
ICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tbW9uSW5jbHVz
aXZlQW5jZXN0b3IpOiBDaGFuZ2VkIHJldHVybiB0eXBlIHRvIGEgcmF3IHBvaW50ZXIuCisgICAg
ICAgIFNpbmNlIEkgY3JlYXRlZCB0aGlzIHJldHVybmluZyBhIHNtYXJ0IHBvaW50ZXIsIFJ5b3N1
a2UgY2xhcmlmaWVkIHRoYXQgb3VyCisgICAgICAgIGFwcHJvYWNoIHRvIG9iamVjdCBsaWZldGlt
ZSBkb2VzIG5vdCBpbnZvbHZlIHJldHVybmluZyBzbWFydCBwb2ludGVycyBpbgorICAgICAgICBj
YXNlcyBsaWtlIHRoaXMuIENhbGwgY29tbW9uSW5jbHVzaXZlQW5jZXN0b3I8Q29tcG9zZWRUcmVl
Pi4KKyAgICAgICAgKFdlYkNvcmU6OmRvY3VtZW50T3JkZXIpOiBEaXR0by4KKyAgICAgICAgKiBk
b20vUG9zaXRpb24uaDogVXBkYXRlZCByZXR1cm4gdmFsdWUuCisKKyAgICAgICAgKiBkb20vUmFu
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
IGNvbnN0KTogTWFkZSB0aGlzIG5vbi1pbmxpbmUuCisgICAgICAgIE5vdGUgdGhhdCB0aGlzIG5v
dyBjYWxscyB0aGUgbm9uLWNvbXBvc2VkLXRyZWUgdmVyc2lvbiBvZgorICAgICAgICBjb21tb25J
bmNsdXNpdmVBbmNlc3Rvciwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50LCBidXQgc2luY2UgbGl2ZSBy
YW5nZXMKKyAgICAgICAgbWFpbnRhaW4gdGhlIGludmFyaWFudCB0aGF0IGJvdGggY29udGFpbmVy
cyBhcmUgaW4gdGhlIHNhbWUgdHJlZSwgdGhpcyBpcworICAgICAgICBub3QgYW4gb2JzZXJ2YWJs
ZSBjaGFuZ2UuCisKKyAgICAgICAgKiBkb20vUmFuZ2UuaDogTWFkZSBjb21tb25BbmNlc3RvckNv
bnRhaW5lciBub24taW5saW5lLiBOb3QgY3JpdGljYWwgdG8KKyAgICAgICAgb3B0aW1pemUgb3V0
IHRoZSBmdW5jdGlvbiBjYWxsLgorCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKTogQ2hhbmdlZCB0aGlzIGlu
dG8gYSBmdW5jdGlvbiB0ZW1wbGF0ZS4KKyAgICAgICAgKiBkb20vU2ltcGxlUmFuZ2UuaDogVXBk
YXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogZWRpdGluZy9DaGFuZ2VMaXN0VHlwZUNv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlzdENvbnZlcnNpb25UeXBlRm9yU2VsZWN0
aW9uKTogVXNlIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yPENvbXBvc2VkVHJlZT4uCisgICAgICAg
ICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0
eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFkanVzdGVkU2VsZWN0aW9uUmFu
Z2UpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1lbnRGb3JGb3JtYXRCbG9j
a0NvbW1hbmQpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OjpzY2hlZHVsZU9ic2VydmF0aW9uVXBkYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZSk6IERpdHRvLgorCisgICAgICAgICog
ZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tbW9uSW5j
bHVzaXZlQW5jZXN0b3IpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmludGVyc2VjdHMpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjppbnRlcnNlY3Rpb24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1pZHBvaW50KTog
QWRkZWQuCisgICAgICAgICogZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaDogQWRkZWQgZnVuY3Rp
b25zIHRoYXQgd29yayB3aXRoIFZpc2libGVQb3NpdGlvblJhbmdlLgorICAgICAgICBUaGVzZSBh
cmUgdXNlZCBpbiBXZWJLaXQgZWRpdGluZy1yZWxhdGVkIGNvZGUgZm9yIGlPUywgYW5kIGhhdmlu
ZyB0aGVzZSBoaWdoZXIKKyAgICAgICAgbGV2ZWwgb3BlcmF0aW9ucyBpcyBzdGFydGluZyB0byBt
YWtlIHRoYXQgY29kZSBtb3JlIHJlYWRhYmxlLiBUaGlzIHdhcyBvcmlnaW5hbGx5CisgICAgICAg
IG1vdGl2YXRlZCBiZWNhdXNlIGl0IHdhcyBhIHVzZSBvZiBhIGZ1bmN0aW9uIHRlbXBsYXRlIG91
dHNpZGUgV2ViQ29yZSBhbmQgSSB3YW50ZWQKKyAgICAgICAgdG8gc2lkZXN0ZXAgdGhlIG5lZWQg
dG8gZXhwb3J0LCB3aGljaCBJIGNhbid0IGZpZ3VyZSBvdXQgaG93IHRvIGRvIHlldC4gQnV0IHRo
ZQorICAgICAgICByZWZhY3RvcmluZyBlbmRlZCB1cCBjaGFuZ2luZyB0aGUgY29kZSBjb21wbGV0
ZWx5LgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tOgorICAgICAg
ICAoSFRNTENvbnZlcnRlckNhY2hlczo6Y2FjaGVBbmNlc3RvcnNPZlN0YXJ0VG9CZUNvbnZlcnRl
ZCk6IFVwZGF0ZWQgc2luY2UKKyAgICAgICAgY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IgZG9lcyBu
b3QgcmV0dXJuIGEgc21hcnQgcG9pbnRlciBhbnkgbW9yZS4KKyAgICAgICAgKiBlZGl0aW5nL21h
cmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBw
ZWFyYW5jZUludGVybmFsKTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0RyYWdDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjppbnNlcnREcm9wcGVkSW1h
Z2VQbGFjZWhvbGRlcnNBdENhcmV0KTogVXNlCisgICAgICAgIGNvbW1vbkluY2x1c2l2ZUFuY2Vz
dG9yPENvbXBvc2VkVHJlZT4uCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dGFyZ2V0Tm9kZUZvckNsaWNrRXZlbnQpOiBEaXR0by4KKyAgICAgICAg
KiBwYWdlL1RleHRJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXN0aW1hdGVkQmFj
a2dyb3VuZENvbG9yRm9yUmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxp
emVJbmRpY2F0b3IpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y29sbGVjdFNlbGVjdGlvblJlY3Rz
SW50ZXJuYWwpOiBEaXR0by4KKwogMjAyMC0xMS0wMyAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBs
ZS5jb20+CiAKICAgICAgICAgTGluayBhZ2FpbnN0IHRoZSBBTkdMRSBTaGFyZWQgTGlicmFyeQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwppbmRleCA2Mzg4YjljM2EyYWRhNzE5ODAyYTkxMjdmNWE2MDVhNTlmOThhMDgyLi5iMTAy
NzE4Y2M1ZGE0MDE5ZWE1NjM2MWU0ZTE2NDFlZTdjNjVlMzVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE2IEBACisyMDIwLTExLTAzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZW1vdmUgbW9yZSBmdW5jdGlvbnMgdGhhdCBpbXBsaWNpdGx5IHVzZSBjb21wb3NlZCB0
cmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTg1
NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6Y29u
c3RyYWluUmFuZ2VUb1NlbGVjdGlvbik6IEZhY3RvcmVkIHRoaXMgZnVuY3Rpb24gb3V0IG9mIHRo
ZQorICAgICAgICByZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dCBhbmQgYWxzbyByZXdyb3Rl
IGl0IHRvIHVzZSBoaWdoZXIgbGV2ZWwgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQpOiBSZWZhY3RvcmVkIHRvIHVzZSB0
aGUgbmV3CisgICAgICAgIGNvbnN0cmFpblJhbmdlVG9TZWxlY3Rpb24uCisKIDIwMjAtMTEtMDMg
IEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBy
ZW1vdmUgc3lzY3RsLm9pZGZtdC4gYWNjZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggNWI3MzUzODk2
Zjg2YzdhNjNjYjE1NDg4ODBmYzhmYWY0NWVmMzQwOC4uM2FjMjAxMDRhOWY3YjJhNTc2MWVkMWIy
M2NkZjQ3ODk3OTMyYTEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMjY4MiwxMiArMjY4MiwxNCBA
QCB0ZW1wbGF0ZTxUcmVlVHlwZSB0cmVlVHlwZT4gQW5jZXN0b3JBbmRDaGlsZHJlbiBjb21tb25J
bmNsdXNpdmVBbmNlc3RvckFuZENoaWxkcgogICAgIHJldHVybiB7IHgsIGRpc3RpbmN0QW5jZXN0
b3JBLCBkaXN0aW5jdEFuY2VzdG9yQiB9OwogfQogCi0vLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8g
d29yayB3aXRoaW4gdGhlIG5vcm1hbCB0cmVlIGluc3RlYWQgb2YgdGhlIGNvbXBvc2VkIHRyZWUu
IE9yIHJlbmFtZSBhbmQvb3Igc3BsaXQgaW50byBtdWx0aXBsZSBmdW5jdGlvbnMuCi1SZWZQdHI8
Tm9kZT4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoTm9kZSYgYSwgTm9kZSYgYikKK3RlbXBsYXRl
PFRyZWVUeXBlIHRyZWVUeXBlPiBOb2RlKiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihjb25zdCBO
b2RlJiBhLCBjb25zdCBOb2RlJiBiKQogewotICAgIHJldHVybiBjb25zdF9jYXN0PE5vZGUqPihj
b21tb25JbmNsdXNpdmVBbmNlc3RvckFuZENoaWxkcmVuPENvbXBvc2VkVHJlZT4oYSwgYikuY29t
bW9uQW5jZXN0b3IpOworICAgIHJldHVybiBjb25zdF9jYXN0PE5vZGUqPihjb21tb25JbmNsdXNp
dmVBbmNlc3RvckFuZENoaWxkcmVuPHRyZWVUeXBlPihhLCBiKS5jb21tb25BbmNlc3Rvcik7CiB9
CiAKK3RlbXBsYXRlIE5vZGUqIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yPFRyZWU+KGNvbnN0IE5v
ZGUmLCBjb25zdCBOb2RlJik7Cit0ZW1wbGF0ZSBOb2RlKiBjb21tb25JbmNsdXNpdmVBbmNlc3Rv
cjxDb21wb3NlZFRyZWU+KGNvbnN0IE5vZGUmLCBjb25zdCBOb2RlJik7CisKIHN0YXRpYyBib29s
IGlzU2libGluZ1N1YnNlcXVlbnQoY29uc3QgTm9kZSYgc2libGluZ0EsIGNvbnN0IE5vZGUmIHNp
YmxpbmdCKQogewogICAgIEFTU0VSVChzaWJsaW5nQS5wYXJlbnROb2RlKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgK
aW5kZXggMjAxYWQ0NzhjMTM3YzE4MDFjMGM0YWUyOWQ5YWJmYTY2MGFiZGViZS4uMjllMjhjOWEx
OTYyN2UwZWQyZjdjZTcyNzQ3ZjJhNmQ2OWFkMDM2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC03MjcsNyAr
NzI3LDYgQEAgcHJpdmF0ZToKIH07CiAKIGJvb2wgY29ubmVjdGVkSW5TYW1lVHJlZVNjb3BlKGNv
bnN0IE5vZGUqLCBjb25zdCBOb2RlKik7Ci1XRUJDT1JFX0VYUE9SVCBSZWZQdHI8Tm9kZT4gY29t
bW9uSW5jbHVzaXZlQW5jZXN0b3IoTm9kZSYsIE5vZGUmKTsKIAogLy8gRGVzaWduZWQgdG8gYmUg
dXNlZCB0aGUgc2FtZSB3YXkgYXMgQysrMjAgc3RkOjpwYXJ0aWFsX29yZGVyaW5nIGNsYXNzLgog
Ly8gRklYTUU6IENvbnNpZGVyIHB1dHRpbmcgdGhpcyBpbiBhIHNlcGFyYXRlIGhlYWRlci4KQEAg
LTc1Nyw2ICs3NTYsNyBAQCBjb25zdGV4cHIgYm9vbCBpc19ndGVxKFBhcnRpYWxPcmRlcmluZyk7
CiAKIGVudW0gVHJlZVR5cGUgeyBUcmVlLCBTaGFkb3dJbmNsdWRpbmdUcmVlLCBDb21wb3NlZFRy
ZWUgfTsKIHRlbXBsYXRlPFRyZWVUeXBlID0gVHJlZT4gQ29udGFpbmVyTm9kZSogcGFyZW50KGNv
bnN0IE5vZGUmKTsKK3RlbXBsYXRlPFRyZWVUeXBlID0gVHJlZT4gTm9kZSogY29tbW9uSW5jbHVz
aXZlQW5jZXN0b3IoY29uc3QgTm9kZSYsIGNvbnN0IE5vZGUmKTsKIHRlbXBsYXRlPFRyZWVUeXBl
ID0gVHJlZT4gUGFydGlhbE9yZGVyaW5nIHRyZWVPcmRlcihjb25zdCBOb2RlJiwgY29uc3QgTm9k
ZSYpOwogCiBXRUJDT1JFX0VYUE9SVCBQYXJ0aWFsT3JkZXJpbmcgdHJlZU9yZGVyRm9yVGVzdGlu
ZyhUcmVlVHlwZSwgY29uc3QgTm9kZSYsIGNvbnN0IE5vZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24u
Y3BwCmluZGV4IGRmOTkzYmU3YjMzNjQ0ZTJjMjkyMTI0ZDU0NGQ5YjgxOGQ4YTA2MDYuLmI5Y2My
MTcxNTVhMzgxMzViNmRlYjM4NWEwZmY5ZWM5Y2E4NDEzMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9u
LmNwcApAQCAtMTU4NCwxMyArMTU4NCwxMyBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHN0cmVhbSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgIHJldHVybiBzdHJl
YW07CiB9CiAKLVJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihjb25zdCBQb3Np
dGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCitOb2RlKiBjb21tb25JbmNsdXNpdmVBbmNlc3Rv
cihjb25zdCBQb3NpdGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCiB7CiAgICAgYXV0byBub2Rl
QSA9IGEuY29udGFpbmVyTm9kZSgpOwogICAgIGF1dG8gbm9kZUIgPSBiLmNvbnRhaW5lck5vZGUo
KTsKICAgICBpZiAoIW5vZGVBIHx8ICFub2RlQikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKCpub2RlQSwgKm5vZGVCKTsKKyAgICBy
ZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3I8Q29tcG9zZWRUcmVlPigqbm9kZUEsICpub2Rl
Qik7CiB9CiAKIFBvc2l0aW9uIHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKE5vZGUqIG5vZGUp
CkBAIC0xNjQxLDcgKzE2NDEsNyBAQCBQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25z
dCBQb3NpdGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCiAgICAgYXV0byBiQ29udGFpbmVyID0g
Yi5jb250YWluZXJOb2RlKCk7CiAKICAgICBpZiAoIWFDb250YWluZXIgfHwgIWJDb250YWluZXIp
IHsKLSAgICAgICAgaWYgKCFjb21tb25JbmNsdXNpdmVBbmNlc3RvcigqYS5hbmNob3JOb2RlKCks
ICpiLmFuY2hvck5vZGUoKSkpCisgICAgICAgIGlmICghY29tbW9uSW5jbHVzaXZlQW5jZXN0b3I8
Q29tcG9zZWRUcmVlPigqYS5hbmNob3JOb2RlKCksICpiLmFuY2hvck5vZGUoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gUGFydGlhbE9yZGVyaW5nOjp1bm9yZGVyZWQ7CiAgICAgICAgIGlmICghYUNv
bnRhaW5lciAmJiAhYkNvbnRhaW5lciAmJiBhLmFuY2hvclR5cGUoKSA9PSBiLmFuY2hvclR5cGUo
KSkKICAgICAgICAgICAgIHJldHVybiBQYXJ0aWFsT3JkZXJpbmc6OmVxdWl2YWxlbnQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Qb3NpdGlvbi5oCmluZGV4IDY1ZGY1NWIyYjIwZWZiMDJiYzM3ZTI3MGJjNmYyMWMzYjI1ODMw
MjMuLjFlNGY5N2Q0MGZjYjExNjI4MmU3YmNhYjExYzJkMzNhNGIzNTdhMTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5oCkBAIC0yNjMsNyArMjYzLDcgQEAgUG9zaXRpb24gbGFzdFBvc2l0aW9uSW5Ob2Rl
KE5vZGUqIGFuY2hvck5vZGUpOwogCiBib29sIG9mZnNldElzQmVmb3JlTGFzdE5vZGVPZmZzZXQo
dW5zaWduZWQgb2Zmc2V0LCBOb2RlKiBhbmNob3JOb2RlKTsKIAotUmVmUHRyPE5vZGU+IGNvbW1v
bkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKK05v
ZGUqIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRp
b24mKTsKIAogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNv
bnN0IFBvc2l0aW9uJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDhkMDliZWRhYTgwYjAyZDBl
NjJkY2VlODdmZGJjMmEzZTI3MWY3YzAuLmU2M2YyZmJkYTY4MDYwMWQ5ZDAzMzg4OTFlYzAwMzc3
MjZjYTcxZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtOTIsNiArOTIsMTEgQEAgUmFuZ2U6On5S
YW5nZSgpCiAjZW5kaWYKIH0KIAorTm9kZSogUmFuZ2U6OmNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3Ioc3RhcnRDb250
YWluZXIoKSwgZW5kQ29udGFpbmVyKCkpOworfQorCiB2b2lkIFJhbmdlOjp1cGRhdGVBc3NvY2lh
dGVkU2VsZWN0aW9uKCkKIHsKICAgICBpZiAobV9pc0Fzc29jaWF0ZWRXaXRoU2VsZWN0aW9uKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vUmFuZ2UuaAppbmRleCAyZTkwOGI0MzkzZDU0ZGI0M2Q2MDc0NGZiOWIwNTczN2EyNjE1MWI3
Li40MjUwM2M5N2Y0OWFjYTIwMzkwMjIzODc0ODQ0NGVjMjI1MDhmNTI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
aApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgTm9kZSYgZW5kQ29udGFpbmVyKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9lbmQuY29udGFpbmVyKCk7IH0KICAgICB1bnNpZ25lZCBlbmRP
ZmZzZXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2VuZC5vZmZzZXQoKTsgfQogICAgIGJvb2wg
Y29sbGFwc2VkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zdGFydCA9PSBtX2VuZDsgfQotICAg
IE5vZGUqIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gY29tbW9uSW5j
bHVzaXZlQW5jZXN0b3Ioc3RhcnRDb250YWluZXIoKSwgZW5kQ29udGFpbmVyKCkpLmdldCgpOyB9
CisgICAgV0VCQ09SRV9FWFBPUlQgTm9kZSogY29tbW9uQW5jZXN0b3JDb250YWluZXIoKSBjb25z
dDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0YXJ0KFJlZjxO
b2RlPiYmLCB1bnNpZ25lZCBvZmZzZXQpOwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9y
PHZvaWQ+IHNldEVuZChSZWY8Tm9kZT4mJiwgdW5zaWduZWQgb2Zmc2V0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2ltcGxlUmFuZ2UuY3BwCmluZGV4IGIxMTZjMDE2MjAzNGQzYzNhOTZhMmEzYjc5MzA0MTRmMWU2
OTliN2QuLmE2N2Q4ZjczZjVjY2MwNjI1ODg0ZmQ2Y2M0OWM3MzU3OWFiMDkwN2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1NpbXBsZVJhbmdlLmNwcApAQCAtMjA3LDExICsyMDcsMTMgQEAgdm9pZCBJbnRlcnNl
Y3RpbmdOb2RlSXRlcmF0b3I6OmVuZm9yY2VFbmRJbnZhcmlhbnQoKQogICAgIH0KIH0KIAotUmVm
UHRyPE5vZGU+IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSkKK3RlbXBsYXRlPFRyZWVUeXBlIHRyZWVUeXBlPiBOb2RlKiBjb21tb25JbmNsdXNpdmVBbmNl
c3Rvcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGNvbW1vbkluY2x1
c2l2ZUFuY2VzdG9yKHJhbmdlLnN0YXJ0LmNvbnRhaW5lciwgcmFuZ2UuZW5kLmNvbnRhaW5lcik7
CisgICAgcmV0dXJuIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yPHRyZWVUeXBlPihyYW5nZS5zdGFy
dC5jb250YWluZXIsIHJhbmdlLmVuZC5jb250YWluZXIpOwogfQogCit0ZW1wbGF0ZSBOb2RlKiBj
b21tb25JbmNsdXNpdmVBbmNlc3RvcjxDb21wb3NlZFRyZWU+KGNvbnN0IFNpbXBsZVJhbmdlJik7
CisKIHRlbXBsYXRlPFRyZWVUeXBlIHRyZWVUeXBlPiBib29sIGNvbnRhaW5zKGNvbnN0IFNpbXBs
ZVJhbmdlJiByYW5nZSwgY29uc3QgQm91bmRhcnlQb2ludCYgcG9pbnQpCiB7CiAgICAgcmV0dXJu
IGlzX2x0ZXEodHJlZU9yZGVyPHRyZWVUeXBlPihyYW5nZS5zdGFydCwgcG9pbnQpKSAmJiBpc19s
dGVxKHRyZWVPcmRlcjx0cmVlVHlwZT4ocG9pbnQsIHJhbmdlLmVuZCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2lt
cGxlUmFuZ2UuaAppbmRleCBlMTVmNjE2NzY0MTE2NjRmM2M2NzBjZmFhYmY1MDg5OWRiMjliNzZm
Li5lZmE2ZjE5OGFkMGE1ODM2NGEwNzM4YjQ1YzI4YTI5YzIzNWU0OWI5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2ltcGxlUmFuZ2UuaApAQCAtNjMsNiArNjMsOCBAQCBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5n
ZSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYpOwogCiBib29sIG9wZXJhdG9y
PT0oY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogCit0ZW1wbGF0ZTxU
cmVlVHlwZSA9IFRyZWU+IE5vZGUqIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFNpbXBs
ZVJhbmdlJik7CisKIHRlbXBsYXRlPFRyZWVUeXBlID0gVHJlZT4gYm9vbCBjb250YWlucyhjb25z
dCBTaW1wbGVSYW5nZSYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsKIHRlbXBsYXRlPFRyZWVUeXBl
ID0gVHJlZT4gYm9vbCBjb250YWlucyhjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE9wdGlvbmFs
PEJvdW5kYXJ5UG9pbnQ+Jik7CiB0ZW1wbGF0ZTxUcmVlVHlwZT4gYm9vbCBjb250YWlucyhjb25z
dCBTaW1wbGVSYW5nZSYgb3V0ZXJSYW5nZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGlubmVyUmFuZ2Up
OwpAQCAtODYsNyArODgsNiBAQCBPZmZzZXRSYW5nZSBjaGFyYWN0ZXJEYXRhT2Zmc2V0UmFuZ2Uo
Y29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7CiAKIC8vIEZJWE1FOiBTdGFydCBvZiBm
dW5jdGlvbnMgdGhhdCBhcmUgZGVwcmVjYXRlZCBzaW5jZSB0aGV5IHNpbGVudGx5IGRlZmF1bHQg
dG8gQ29tcG9zZWRUcmVlLgogCi1XRUJDT1JFX0VYUE9SVCBSZWZQdHI8Tm9kZT4gY29tbW9uSW5j
bHVzaXZlQW5jZXN0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFRy
ZWVUeXBlPiBib29sIGludGVyc2VjdHMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVS
YW5nZSYpOwogV0VCQ09SRV9FWFBPUlQgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFNpbXBsZVJhbmdl
JiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgaW50ZXJzZWN0cyhj
b25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE5vZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQ2hhbmdlTGlzdFR5cGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ2hhbmdlTGlzdFR5cGVDb21tYW5kLmNwcAppbmRleCAwMTlhNDI2MjlkZWIyNjNmMmE4
MDU1YjM3Yjg1N2M0MTQ4OWU3MTEwLi4yYWRhYjZjZjhlMTkzMTNiYTgxYzU2YmU4Y2EyNTJhMWQ1
OGZlMDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NoYW5nZUxpc3RUeXBl
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9DaGFuZ2VMaXN0VHlwZUNv
bW1hbmQuY3BwCkBAIC00NCwxMyArNDQsMTMgQEAgc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxD
aGFuZ2VMaXN0VHlwZUNvbW1hbmQ6OlR5cGUsIFJlZjxIVE1MRWxlbWVudD4+PiBsaXN0Q28KICAg
ICBhdXRvIGVuZE5vZGUgPSBzZWxlY3Rpb24uZW5kKCkuY29udGFpbmVyTm9kZSgpOwogICAgIGlm
ICghc3RhcnROb2RlIHx8ICFlbmROb2RlKQogICAgICAgICByZXR1cm4geyB9OwotICAgIGF1dG8g
Y29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcigqc3RhcnROb2RlLCAqZW5k
Tm9kZSk7CisgICAgYXV0byBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9y
PENvbXBvc2VkVHJlZT4oKnN0YXJ0Tm9kZSwgKmVuZE5vZGUpOwogCiAgICAgUmVmUHRyPEhUTUxF
bGVtZW50PiBsaXN0VG9SZXBsYWNlOwogICAgIGlmIChpczxIVE1MVUxpc3RFbGVtZW50Pihjb21t
b25BbmNlc3RvcikgfHwgaXM8SFRNTE9MaXN0RWxlbWVudD4oY29tbW9uQW5jZXN0b3IpKQotICAg
ICAgICBsaXN0VG9SZXBsYWNlID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGNvbW1vbkFuY2VzdG9y
LmdldCgpKTsKKyAgICAgICAgbGlzdFRvUmVwbGFjZSA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pihj
b21tb25BbmNlc3Rvcik7CiAgICAgZWxzZQotICAgICAgICBsaXN0VG9SZXBsYWNlID0gZW5jbG9z
aW5nTGlzdChjb21tb25BbmNlc3Rvci5nZXQoKSk7CisgICAgICAgIGxpc3RUb1JlcGxhY2UgPSBl
bmNsb3NpbmdMaXN0KGNvbW1vbkFuY2VzdG9yKTsKIAogICAgIGlmIChpczxIVE1MVUxpc3RFbGVt
ZW50PihsaXN0VG9SZXBsYWNlKSkKICAgICAgICAgcmV0dXJuIHt7IENoYW5nZUxpc3RUeXBlQ29t
bWFuZDo6VHlwZTo6Q29udmVydFRvT3JkZXJlZExpc3QsIGxpc3RUb1JlcGxhY2UucmVsZWFzZU5v
bk51bGwoKSB9fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCAy
OTNkODQzZDNjMmJkZmJmMjJmNmJlM2UxYWMyNGFlOGQ4NmY0MGJlLi4wNjE4ZDc2MThiZDVjYjBm
ZTQwY2U0N2M2MjI3ZmRkM2FhOWFiZDE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
U3R5bGUuY3BwCkBAIC0xNTE1LDcgKzE1MTUsNyBAQCBSZWZQdHI8RWRpdGluZ1N0eWxlPiBFZGl0
aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJgog
ICAgIC8vIGFuZCBmaW5kIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBjb21tb24gYW5jZXN0
b3IuCiAgICAgaWYgKHNob3VsZFVzZUJhY2tncm91bmRDb2xvckluRWZmZWN0ICYmIChzZWxlY3Rp
b24uaXNSYW5nZSgpIHx8IGhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG9yKHN0eWxlLT5tX211
dGFibGVTdHlsZS5nZXQoKSkpKSB7CiAgICAgICAgIGlmIChhdXRvIHJhbmdlID0gc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIHZhbHVlID0gYmFj
a2dyb3VuZENvbG9ySW5FZmZlY3QoY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKnJhbmdlKS5nZXQo
KSkpCisgICAgICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGJhY2tncm91bmRDb2xvckluRWZmZWN0
KGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yPENvbXBvc2VkVHJlZT4oKnJhbmdlKSkpCiAgICAgICAg
ICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCB2
YWx1ZS0+Y3NzVGV4dCgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcAppbmRleCAxZjExZmIxNjE4M2IxOWQxMzI2N2EzYzk0MDNhOWI5ZTY3OTg1M2ZmLi5lNjAx
YTVmY2RlMmVmZDFjOTU1MGE1MzYwNDk1YWFjMjI4NGIxNjI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCkBAIC00MjI3LDcgKzQyMjcsNyBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRp
dG9yOjphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkKICAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG5l
ZWQgdG8gYWRqdXN0IHRoZSBzZWxlY3Rpb24gdG8gaW5jbHVkZSB0aGUgYW5jaG9yIHRhZyBpdCdz
IGluPyBXaG9ldmVyIHdyb3RlIHRoaXMgY29kZSBvcmlnaW5hbGx5IGZvcmdvdCB0byBsZWF2ZSB1
cyBhIGNvbW1lbnQgZXhwbGFpbmluZyB0aGUgcmF0aW9uYWxlLgogICAgIGF1dG8gcmFuZ2UgPSBz
ZWxlY3RlZFJhbmdlKCk7CiAgICAgaWYgKHJhbmdlKSB7Ci0gICAgICAgIGlmIChhdXRvIGVuY2xv
c2luZ0FuY2hvciA9IGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUo
Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKnJhbmdlKS5nZXQoKSksIEhUTUxOYW1lczo6YVRhZykp
IHsKKyAgICAgICAgaWYgKGF1dG8gZW5jbG9zaW5nQW5jaG9yID0gZW5jbG9zaW5nRWxlbWVudFdp
dGhUYWcoZmlyc3RQb3NpdGlvbkluTm9kZShjb21tb25JbmNsdXNpdmVBbmNlc3RvcjxDb21wb3Nl
ZFRyZWU+KCpyYW5nZSkpLCBIVE1MTmFtZXM6OmFUYWcpKSB7CiAgICAgICAgICAgICBpZiAoZmly
c3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHJhbmdlLT5zdGFydC5jb250YWluZXIucHRyKCkpID49
IG1ha2VEZXByZWNhdGVkTGVnYWN5UG9zaXRpb24ocmFuZ2UtPnN0YXJ0KSkKICAgICAgICAgICAg
ICAgICByYW5nZS0+c3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygq
ZW5jbG9zaW5nQW5jaG9yKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
b3JtYXRCbG9ja0NvbW1hbmQuY3BwCmluZGV4IGJmNTJlMGMwNDRiN2NhYzMxZjE0OWQ0YTI2MzQy
OTViMTJjMjRlZjYuLmM3OGQxZWJmODZlYjBiNDkwZGEzOWM2MzBiYjJmYTFiNGRlYmIzZDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5jcHAKQEAgLTEw
Myw4ICsxMDMsOCBAQCBFbGVtZW50KiBGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1lbnRGb3JGb3Jt
YXRCbG9ja0NvbW1hbmQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUgogICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBjb21tb25BbmNlc3RvciA9IGNvbW1v
bkluY2x1c2l2ZUFuY2VzdG9yKCpyYW5nZSk7Ci0gICAgd2hpbGUgKGNvbW1vbkFuY2VzdG9yICYm
ICFpc0VsZW1lbnRGb3JGb3JtYXRCbG9jayhjb21tb25BbmNlc3Rvci5nZXQoKSkpCisgICAgYXV0
byBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yPENvbXBvc2VkVHJlZT4o
KnJhbmdlKTsKKyAgICB3aGlsZSAoY29tbW9uQW5jZXN0b3IgJiYgIWlzRWxlbWVudEZvckZvcm1h
dEJsb2NrKGNvbW1vbkFuY2VzdG9yKSkKICAgICAgICAgY29tbW9uQW5jZXN0b3IgPSBjb21tb25B
bmNlc3Rvci0+cGFyZW50Tm9kZSgpOwogICAgIGlmICghaXM8RWxlbWVudD4oY29tbW9uQW5jZXN0
b3IpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKaW5kZXggZTViZDE1YzBhOWFm
NGNiOTQxZDJhNzRiMDNlMjE4Mjg3OGE2MTAwZS4uNjExZjczMzAzNGQyMWFjNzJkZTE4NDkyZjY2
MDY5ZTBkMDJjZWYyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFu
aXB1bGF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTYwMyw3ICs2MDMsNyBAQCB2b2lkIFRleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyOjpzY2hlZHVsZU9ic2VydmF0aW9uVXBkYXRlKCkKICAgICAg
ICAgICAgIGlmICghY29tbW9uQW5jZXN0b3IpCiAgICAgICAgICAgICAgICAgY29tbW9uQW5jZXN0
b3IgPSBpczxDb250YWluZXJOb2RlPihub2RlLmdldCgpKSA/IG5vZGUucHRyKCkgOiBub2RlLT5w
YXJlbnROb2RlKCk7CiAgICAgICAgICAgICBlbHNlIGlmICghbm9kZS0+aXNEZXNjZW5kYW50T2Yo
Y29tbW9uQW5jZXN0b3IuZ2V0KCkpKQotICAgICAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0g
Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKmNvbW1vbkFuY2VzdG9yLCBub2RlLmdldCgpKTsKKyAg
ICAgICAgICAgICAgICBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yPENv
bXBvc2VkVHJlZT4oKmNvbW1vbkFuY2VzdG9yLCBub2RlLmdldCgpKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGF1dG8gc3RhcnQgPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoY29tbW9uQW5j
ZXN0b3IuZ2V0KCkpOwpAQCAtODI1LDcgKzgyNSw3IEBAIGF1dG8gVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXI6OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbURhdGEmIGl0ZW0sIGNvbnN0
CiAgICAgICAgIGlmICghY29tbW9uQW5jZXN0b3IpCiAgICAgICAgICAgICBjb21tb25BbmNlc3Rv
ciA9IHBhcmVudE5vZGU7CiAgICAgICAgIGVsc2UgaWYgKCFwYXJlbnROb2RlLT5pc0Rlc2NlbmRh
bnRPZihjb21tb25BbmNlc3Rvci5nZXQoKSkpIHsKLSAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9y
ID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKmNvbW1vbkFuY2VzdG9yLCAqcGFyZW50Tm9kZSk7
CisgICAgICAgICAgICBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yPENv
bXBvc2VkVHJlZT4oKmNvbW1vbkFuY2VzdG9yLCAqcGFyZW50Tm9kZSk7CiAgICAgICAgICAgICBB
U1NFUlQoY29tbW9uQW5jZXN0b3IpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCmluZGV4IDAxZWRkNTNjMDc0ZGRjYWIzMTViYmI2
OTE0NWM0YzMwMWMyMDMwNzMuLjk3MjhkYmZkYjIwMzEwOWQyODk3ODQ5NWE4MzcwYzhlODNhMWQ5
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTQy
LDYgKzQyLDcgQEAKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCiAjaW5jbHVkZSAiU2ltcGxl
UmFuZ2UuaCIKICNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC03NTIsNiArNzUzLDExIEBAIE9wdGlvbmFsPEJvdW5kYXJ5
UG9pbnQ+IG1ha2VCb3VuZGFyeVBvaW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24p
CiAgICAgcmV0dXJuIG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkp
OwogfQogCitOb2RlKiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihjb25zdCBWaXNpYmxlUG9zaXRp
b24mIGEsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYikKK3sKKyAgICByZXR1cm4gY29tbW9uSW5j
bHVzaXZlQW5jZXN0b3IoYS5kZWVwRXF1aXZhbGVudCgpLCBiLmRlZXBFcXVpdmFsZW50KCkpOwor
fQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHN0cmVhbSwgQWZmaW5pdHkg
YWZmaW5pdHkpCiB7CiAgICAgc3dpdGNoIChhZmZpbml0eSkgewpAQCAtNzg3LDYgKzc5Myw0MiBA
QCBQYXJ0aWFsT3JkZXJpbmcgZG9jdW1lbnRPcmRlcihjb25zdCBWaXNpYmxlUG9zaXRpb24mIGEs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYgogICAgIHJldHVybiBkb2N1bWVudE9yZGVyKGEuZGVl
cEVxdWl2YWxlbnQoKSwgYi5kZWVwRXF1aXZhbGVudCgpKTsKIH0KIAorYm9vbCBpbnRlcnNlY3Rz
KGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJiBhLCBjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5n
ZSYgYikKK3sKKyAgICByZXR1cm4gYS5zdGFydCA8PSBiLmVuZCAmJiBiLnN0YXJ0IDw9IGEuZW5k
OworfQorCitib29sIGNvbnRhaW5zKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJiByYW5nZSwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb2ludCkKK3sKKyAgICByZXR1cm4gcG9pbnQgPj0gcmFu
Z2Uuc3RhcnQgJiYgcG9pbnQgPD0gcmFuZ2UuZW5kOworfQorCitWaXNpYmxlUG9zaXRpb25SYW5n
ZSBpbnRlcnNlY3Rpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmIGEsIGNvbnN0IFZpc2li
bGVQb3NpdGlvblJhbmdlJiBiKQoreworICAgIHJldHVybiB7IHN0ZDo6bWF4KGEuc3RhcnQsIGIu
c3RhcnQpLCBzdGQ6Om1pbihhLmVuZCwgYi5lbmQpIH07Cit9CisKK05vZGUqIGNvbW1vbkluY2x1
c2l2ZUFuY2VzdG9yKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJiByYW5nZSkKK3sKKyAgICBy
ZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7Cit9
CisKK1Zpc2libGVQb3NpdGlvbiBtaWRwb2ludChjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYg
cmFuZ2UpCit7CisgICAgYXV0byByb290Tm9kZSA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJh
bmdlKTsKKyAgICBpZiAoIXJvb3ROb2RlKQorICAgICAgICByZXR1cm4geyB9OworICAgIGF1dG8g
cm9vdENvbnRhaW5lck5vZGUgPSByb290Tm9kZS0+aXNDb250YWluZXJOb2RlKCkgPyBkb3duY2Fz
dDxDb250YWluZXJOb2RlPihyb290Tm9kZSkgOiByb290Tm9kZS0+cGFyZW50Tm9kZSgpOworICAg
IGlmICghcm9vdENvbnRhaW5lck5vZGUpCisgICAgICAgIHJldHVybiB7IH07CisgICAgYXV0byBz
Y29wZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdENvbnRhaW5lck5vZGUp
OworICAgIGF1dG8gY2hhcmFjdGVyUmFuZ2UgPSBXZWJDb3JlOjpjaGFyYWN0ZXJSYW5nZShzY29w
ZSwgKm1ha2VTaW1wbGVSYW5nZShyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKSk7CisgICAgYXV0byBt
aWRwb2ludCA9IGNoZWNrZWRTdW08dWludDY0X3Q+KGNoYXJhY3RlclJhbmdlLmxvY2F0aW9uLCBj
aGFyYWN0ZXJSYW5nZS5sZW5ndGggLyAyKTsKKyAgICBpZiAobWlkcG9pbnQuaGFzT3ZlcmZsb3dl
ZCgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBtYWtlQ29udGFpbmVyT2Zmc2V0
UG9zaXRpb24ocmVzb2x2ZUNoYXJhY3RlckxvY2F0aW9uKHNjb3BlLCBtaWRwb2ludC51bnNhZmVH
ZXQoKSkpOworfQorCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWYgRU5BQkxFKFRSRUVf
REVCVUdHSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9z
aXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKaW5kZXgg
YzdlNWViOGZiOTgzYzc2ZGU1ZTU2Y2FmOWFjZjgxZDU3OWUxZTFiMC4uZTc0Y2QwNjZmYTNjMjU2
OGYxYzUxZjBhYWYyZjNkOTYwNDVlMmRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlUG9zaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVQb3NpdGlvbi5oCkBAIC0xMjYsNiArMTI2LDggQEAgYm9vbCBpc0xhc3RWaXNpYmxlUG9zaXRp
b25Jbk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgTm9kZSopOwogCiBib29sIGFy
ZVZpc2libGVQb3NpdGlvbnNJblNhbWVUcmVlU2NvcGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAKK05vZGUqIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9y
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworCiBXVEY6
OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWZmaW5pdHkpOwogV0VC
Q09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogCkBAIC0xMzgsNiArMTQwLDEzIEBAIHN0cnVjdCBW
aXNpYmxlUG9zaXRpb25SYW5nZSB7CiAKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKTsKIAorTm9k
ZSogY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKTsK
KworV0VCQ09SRV9FWFBPUlQgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFZpc2libGVQb3NpdGlvblJh
bmdlJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKTsKK1dFQkNPUkVfRVhQT1JUIGJvb2wg
Y29udGFpbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmLCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mKTsKK1dFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlvblJhbmdlIGludGVyc2VjdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYsIGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJik7
CitXRUJDT1JFX0VYUE9SVCBWaXNpYmxlUG9zaXRpb24gbWlkcG9pbnQoY29uc3QgVmlzaWJsZVBv
c2l0aW9uUmFuZ2UmKTsKKwogLy8gaW5saW5lcwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFZpc2libGVQb3NpdGlvbiYgYSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBiKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCmluZGV4IDhkMjZiZjg1
OWE0OTNkYTY2NDMzMTQzZWQwZGFhNDc5ZGI2NzhmOTAuLjU3ZGU5ZDI3N2EwOTkyNDgwZGVkNzU3
NjIxNTI2MzJmMjAwNmVlYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hU
TUxDb252ZXJ0ZXIubW0KQEAgLTIzMDQsNyArMjMwNCw3IEBAIE5vZGUqIEhUTUxDb252ZXJ0ZXJD
YWNoZXM6OmNhY2hlQW5jZXN0b3JzT2ZTdGFydFRvQmVDb252ZXJ0ZWQoY29uc3QgUG9zaXRpb24m
IHN0CiAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudEluQ29tcG9zZWRUcmVlKCk7
CiAgICAgfQogCi0gICAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yLmdldCgpOworICAgIHJldHVybiBj
b21tb25BbmNlc3RvcjsKIH0KIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYXJrdXAuY3BwCmluZGV4IDk3N2QxMzUyOWY5OTc1YTJlNmJhM2MyMGJmNzdjYzc1MzYz
NzFiNWYuLmM4NmE5YjdkZDNkZjk3ZmYwZWFjZTE2N2VlYWVjOTkwZDFhMWZjZTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5jcHAKQEAgLTg1Miw3ICs4NTIsNyBAQCBzdGF0aWMgU3RyaW5nIHNl
cmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlSW50ZXJuYWwoY29uc3QgUG9zaXRpb24m
IHN0YXJ0LAogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQgeyBzdGFydCB9OwogICAg
IFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kIHsgZW5kIH07CiAKLSAgICBhdXRvIGJvZHkgPSBt
YWtlUmVmUHRyKGVuY2xvc2luZ0VsZW1lbnRXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUoY29t
bW9uQW5jZXN0b3IuZ2V0KCkpLCBib2R5VGFnKSk7CisgICAgYXV0byBib2R5ID0gbWFrZVJlZlB0
cihlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbW1vbkFuY2Vz
dG9yKSwgYm9keVRhZykpOwogICAgIFJlZlB0cjxFbGVtZW50PiBmdWxseVNlbGVjdGVkUm9vdDsK
ICAgICAvLyBGSVhNRTogRG8gdGhpcyBmb3IgYWxsIGZ1bGx5IHNlbGVjdGVkIGJsb2Nrcywgbm90
IGp1c3QgdGhlIGJvZHkuCiAgICAgaWYgKGJvZHkgJiYgVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9z
aXRpb25Jbk5vZGUoYm9keS5nZXQoKSkpID09IHZpc2libGVTdGFydCAmJiBWaXNpYmxlUG9zaXRp
b24obGFzdFBvc2l0aW9uSW5Ob2RlKGJvZHkuZ2V0KCkpKSA9PSB2aXNpYmxlRW5kKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCBjZGI3ZjM2NmEyN2FkY2Y4MTRmYTg5
MWE2MTljNzJhNDI0MWE4OGI5Li5jZGJmZDhmYzg1YTZiOGE4YWFkNWZkM2QwMTcwZGM2OWE0NjUw
ODkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtMTQ2MCw3ICsx
NDYwLDcgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xk
ZXJzQXRDYXJldChjb25zdCBWZWN0b3I8SW50U2l6ZT4KICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGF1dG8gY29udGFpbmVyID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKmluc2VydGVk
Q29udGVudFJhbmdlKTsKKyAgICBhdXRvIGNvbnRhaW5lciA9IGNvbW1vbkluY2x1c2l2ZUFuY2Vz
dG9yPENvbXBvc2VkVHJlZT4oKmluc2VydGVkQ29udGVudFJhbmdlKTsKICAgICBpZiAoIWlzPENv
bnRhaW5lck5vZGU+KGNvbnRhaW5lcikpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBk
ZDM0NjdjYjg5YzE5MGFjNmQ2MGM2ZjMyZGJlMDU4OTViMWM2MzcwLi45MjA3YmY3YWViYzgzZjc4
NjM5MzU4MTQyNzQwY2JmZjVmNjI2YWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCkBAIC0yMDk2LDcgKzIwOTYsNyBAQCBzdGF0aWMgUmVmUHRyPE5vZGU+IHRhcmdldE5vZGVG
b3JDbGlja0V2ZW50KE5vZGUqIG1vdXNlUHJlc3NOb2RlLCBOb2RlKiBtb3VzZVJlbAogCiAgICAg
Ly8gSWYgbW91c2VQcmVzc05vZGUgYW5kIG1vdXNlUmVsZWFzZU5vZGUgZGlmZmVyLCB3ZSBzaG91
bGQgZmlyZSB0aGUgZXZlbnQgYXQgdGhlaXIgY29tbW9uIGFuY2VzdG9yIGlmIHRoZXJlIGlzIG9u
ZS4KICAgICBpZiAoJm1vdXNlUHJlc3NOb2RlLT5kb2N1bWVudCgpID09ICZtb3VzZVJlbGVhc2VO
b2RlLT5kb2N1bWVudCgpKSB7Ci0gICAgICAgIGlmIChhdXRvIGNvbW1vbkFuY2VzdG9yID0gY29t
bW9uSW5jbHVzaXZlQW5jZXN0b3IoKm1vdXNlUHJlc3NOb2RlLCAqbW91c2VSZWxlYXNlTm9kZSkp
CisgICAgICAgIGlmIChhdXRvIGNvbW1vbkFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0
b3I8Q29tcG9zZWRUcmVlPigqbW91c2VQcmVzc05vZGUsICptb3VzZVJlbGVhc2VOb2RlKSkKICAg
ICAgICAgICAgIHJldHVybiBjb21tb25BbmNlc3RvcjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1RleHRJbmRpY2F0b3IuY3BwCmluZGV4IDUyOTQyZmU3YmI1NzkxZmU5Mjc1ODA3NDNjZWE2ZDhm
YzliMWIwNDYuLjJkZjgxZWE3MDU3M2I2NzUxNTFkNDE3Njc5MDdlZjQ4ZmM0ZTIyZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApAQCAtMjEwLDcgKzIxMCw3IEBAIHN0YXRp
YyBDb2xvciBlc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3JGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UsIGNvbnN0IEZyCiAgICAgYXV0byBlc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3IgPSBm
cmFtZS52aWV3KCkgPyBmcmFtZS52aWV3KCktPmRvY3VtZW50QmFja2dyb3VuZENvbG9yKCkgOiBD
b2xvcjo6dHJhbnNwYXJlbnRCbGFjazsKIAogICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyID0g
bnVsbHB0cjsKLSAgICBhdXRvIGNvbW1vbkFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0
b3IocmFuZ2UpOworICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNl
c3RvcjxDb21wb3NlZFRyZWU+KHJhbmdlKTsKICAgICB3aGlsZSAoY29tbW9uQW5jZXN0b3IpIHsK
ICAgICAgICAgaWYgKGlzPFJlbmRlckVsZW1lbnQ+KGNvbW1vbkFuY2VzdG9yLT5yZW5kZXJlcigp
KSkgewogICAgICAgICAgICAgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJFbGVtZW50Pihjb21t
b25BbmNlc3Rvci0+cmVuZGVyZXIoKSk7CkBAIC0yOTUsNyArMjk1LDcgQEAgc3RhdGljIGJvb2wg
aW5pdGlhbGl6ZUluZGljYXRvcihUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSwgRnJhbWUmIGZyYW1l
LCBjb25zdCBTaW0KIAogICAgIGJvb2wgdXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50
Rm9yQ29tcGxleFJhbmdlcyA9IGRhdGEub3B0aW9ucy5jb250YWlucyhUZXh0SW5kaWNhdG9yT3B0
aW9uOjpVc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzKTsK
ICAgICBpZiAodXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdl
cyAmJiBjb250YWluc09ubHlXaGl0ZVNwYWNlVGV4dChyYW5nZSkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIGNvbnRhaW5lclJlbmRlcmVyID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2UpLT5y
ZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChhdXRvKiBjb250YWluZXJSZW5kZXJlciA9IGNvbW1v
bkluY2x1c2l2ZUFuY2VzdG9yPENvbXBvc2VkVHJlZT4ocmFuZ2UpLT5yZW5kZXJlcigpKSB7CiAg
ICAgICAgICAgICBkYXRhLm9wdGlvbnMuYWRkKFRleHRJbmRpY2F0b3JPcHRpb246OlBhaW50QWxs
Q29udGVudCk7CiAgICAgICAgICAgICB0ZXh0UmVjdHMuYXBwZW5kKGNvbnRhaW5lclJlbmRlcmVy
LT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA4OGExN2M1MDBlMjBmY2ZjMzMyNDgwMDU4
ZGNhY2JmYmNmODI4OGE0Li5iYzhkN2UwNWQ5ZjZmZmM2ZjQ0ZDdiYjBkMzA1ZjVjZDA1MWZjNWVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMjEzNiw3
ICsyMTM2LDcgQEAgYXV0byBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c0ludGVy
bmFsKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkgLT4gU2UKICAgICAvLyBUaGUgcmFuZ2UgY291
bGQgc3BhbiBub2RlcyB3aXRoIGRpZmZlcmVudCB3cml0aW5nIG1vZGVzLgogICAgIC8vIElmIHRo
aXMgaXMgdGhlIGNhc2UsIHdlIHVzZSB0aGUgd3JpdGluZyBtb2RlIG9mIHRoZSBjb21tb24gYW5j
ZXN0b3IuCiAgICAgaWYgKGNvbnRhaW5zRGlmZmVyZW50V3JpdGluZ01vZGVzKSB7Ci0gICAgICAg
IGlmIChhdXRvIGFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2UpKQorICAg
ICAgICBpZiAoYXV0byBhbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yPENvbXBvc2Vk
VHJlZT4ocmFuZ2UpKQogICAgICAgICAgICAgaGFzRmxpcHBlZFdyaXRpbmdNb2RlID0gYW5jZXN0
b3ItPnJlbmRlcmVyKCktPnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0KaW5kZXggYmNhZWM4NWM1N2M3YTczMGJkNTRiNWFjNDhmM2NlZmE1MzMyZDJiZS4u
MGYyYzdiNzU5NDg5YzAxNTk4ZDc5ZjRkNzU0NWNiMDgyZTE5OTM1MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTQxMjks
NiArNDEyOSwyMCBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclBv
aW50SW5Sb290Vmlld0Nvb3JkaW5hdGVzKEZyYW1lJiBmcmFtZQogICAgIHJldHVybiBmcmFtZS52
aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludEluRG9jdW1lbnQpOwogfQogCitzdGF0aWMgVmlz
aWJsZVBvc2l0aW9uUmFuZ2UgY29uc3RyYWluUmFuZ2VUb1NlbGVjdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb25SYW5nZSYgc2VsZWN0aW9uLCBjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYgcmFu
Z2UpCit7CisgICAgaWYgKGludGVyc2VjdHMoc2VsZWN0aW9uLCByYW5nZSkpCisgICAgICAgIHJl
dHVybiBpbnRlcnNlY3Rpb24oc2VsZWN0aW9uLCByYW5nZSk7CisgICAgYXV0byByYW5nZU1pZHBv
aW50ID0gbWlkcG9pbnQocmFuZ2UpOworICAgIGF1dG8gcG9zaXRpb24gPSBzdGFydE9mV29yZChy
YW5nZU1pZHBvaW50KTsKKyAgICBpZiAoIWNvbnRhaW5zKHJhbmdlLCBwb3NpdGlvbikpIHsKKyAg
ICAgICAgcG9zaXRpb24gPSBlbmRPZldvcmQocmFuZ2VNaWRwb2ludCk7CisgICAgICAgIGlmICgh
Y29udGFpbnMocmFuZ2UsIHBvc2l0aW9uKSkKKyAgICAgICAgICAgIHBvc2l0aW9uID0gcmFuZ2VN
aWRwb2ludDsKKyAgICB9CisgICAgcmV0dXJuIHsgcG9zaXRpb24sIHBvc2l0aW9uIH07Cit9CisK
IHZvaWQgV2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0
aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVzdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChEb2N1bWVu
dEVkaXRpbmdDb250ZXh0KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBpZiAoIXJlcXVl
c3Qub3B0aW9ucy5jb250YWlucyhEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdDo6T3B0aW9u
czo6VGV4dCkgJiYgIXJlcXVlc3Qub3B0aW9ucy5jb250YWlucyhEb2N1bWVudEVkaXRpbmdDb250
ZXh0UmVxdWVzdDo6T3B0aW9uczo6QXR0cmlidXRlZFRleHQpKSB7CkBAIC00MTkyLDQ1ICs0MjA2
LDExIEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1l
bnRFZGl0aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVzCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBEb2N1bWVudEVkaXRpbmdDb250ZXh0IGNvbnRleHQ7Ci0KICAgICAvLyBUaGUgc3Vic2V0
IG9mIHRoZSBzZWxlY3Rpb24gdGhhdCBpcyBpbnNpZGUgdGhlIHJhbmdlIG9mIGludGVyZXN0Lgot
ICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb247Ci0g
ICAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb247Ci0KLSAg
ICBhdXRvIHNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0g
ICAgYXV0byByYW5nZU9mSW50ZXJlc3QgPSAqbWFrZVNpbXBsZVJhbmdlKHJhbmdlT2ZJbnRlcmVz
dFN0YXJ0LCByYW5nZU9mSW50ZXJlc3RFbmQpOwotICAgIGlmIChzZWxlY3Rpb25SYW5nZSAmJiBp
bnRlcnNlY3RzKHJhbmdlT2ZJbnRlcmVzdCwgKnNlbGVjdGlvblJhbmdlKSkgewotICAgICAgICBz
dGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPSBzdGQ6Om1heChyYW5nZU9mSW50ZXJl
c3RTdGFydCwgc2VsZWN0aW9uU3RhcnQpOwotICAgICAgICBlbmRPZlJhbmdlT2ZJbnRlcmVzdElu
U2VsZWN0aW9uID0gc3RkOjptaW4ocmFuZ2VPZkludGVyZXN0RW5kLCBzZWxlY3Rpb25FbmQpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8gcm9vdE5vZGUgPSBjb21tb25JbmNsdXNpdmVBbmNl
c3RvcihyYW5nZU9mSW50ZXJlc3QpOwotICAgICAgICBpZiAoIXJvb3ROb2RlKSB7Ci0gICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIGF1dG8gcm9vdENvbnRhaW5lck5vZGUgPSByb290Tm9kZS0+aXNDb250YWlu
ZXJOb2RlKCkgPyBkb3duY2FzdDxDb250YWluZXJOb2RlPihyb290Tm9kZS5nZXQoKSkgOiByb290
Tm9kZS0+cGFyZW50Tm9kZSgpOwotICAgICAgICBpZiAoIXJvb3RDb250YWluZXJOb2RlKSB7Ci0g
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMoKnJvb3RDb250YWluZXJOb2RlKTsKLQotICAgICAgICBhdXRvIGNoYXJhY3RlclJhbmdl
T2ZJbnRlcmVzdCA9IGNoYXJhY3RlclJhbmdlKHNjb3BlLCByYW5nZU9mSW50ZXJlc3QpOwotICAg
ICAgICBhdXRvIG1pZHBvaW50TG9jYXRpb24gPSBjaGVja2VkU3VtPHVpbnQ2NF90PihjaGFyYWN0
ZXJSYW5nZU9mSW50ZXJlc3QubG9jYXRpb24sIGNoYXJhY3RlclJhbmdlT2ZJbnRlcmVzdC5sZW5n
dGggLyAyKTsKLSAgICAgICAgaWYgKG1pZHBvaW50TG9jYXRpb24uaGFzT3ZlcmZsb3dlZCgpKSB7
Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIGF1dG8gbWlkcG9pbnQgPSBtYWtlRGVwcmVjYXRlZExlZ2Fj
eVBvc2l0aW9uKHJlc29sdmVDaGFyYWN0ZXJMb2NhdGlvbihzY29wZSwgbWlkcG9pbnRMb2NhdGlv
bi51bnNhZmVHZXQoKSkpOwotCi0gICAgICAgIHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVj
dGlvbiA9IHN0YXJ0T2ZXb3JkKG1pZHBvaW50KTsKLSAgICAgICAgaWYgKHN0YXJ0T2ZSYW5nZU9m
SW50ZXJlc3RJblNlbGVjdGlvbiA8IHJhbmdlT2ZJbnRlcmVzdFN0YXJ0KSB7Ci0gICAgICAgICAg
ICBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPSBlbmRPZldvcmQobWlkcG9pbnQp
OwotICAgICAgICAgICAgaWYgKHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA+IHJh
bmdlT2ZJbnRlcmVzdEVuZCkKLSAgICAgICAgICAgICAgICBzdGFydE9mUmFuZ2VPZkludGVyZXN0
SW5TZWxlY3Rpb24gPSBtaWRwb2ludDsKLSAgICAgICAgfQotICAgICAgICBlbmRPZlJhbmdlT2ZJ
bnRlcmVzdEluU2VsZWN0aW9uID0gc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uOwor
ICAgIGF1dG8gcmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPSBjb25zdHJhaW5SYW5nZVRvU2Vs
ZWN0aW9uKHNlbGVjdGlvbiwgeyByYW5nZU9mSW50ZXJlc3RTdGFydCwgcmFuZ2VPZkludGVyZXN0
RW5kIH0pOworICAgIGlmIChyYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbi5pc051bGwoKSkgewor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOworICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgVmlzaWJsZVBvc2l0aW9uIGNvbnRleHRCZWZvcmVTdGFydDsKQEAgLTQyNjIsMTQgKzQy
NDIsMTUgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1
bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICAgICAgcmV0dXJuIHsgYWRvcHRO
UyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6V2ViQ29yZTo6cGxh
aW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKCpyYW5nZSldKSwgbmlsIH07CiAgICAgfTsKIAot
ICAgIGNvbnRleHQuY29udGV4dEJlZm9yZSA9IG1ha2VTdHJpbmcoY29udGV4dEJlZm9yZVN0YXJ0
LCBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24pOwotICAgIGNvbnRleHQuc2VsZWN0
ZWRUZXh0ID0gbWFrZVN0cmluZyhzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24sIGVu
ZE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24pOwotICAgIGNvbnRleHQuY29udGV4dEFmdGVy
ID0gbWFrZVN0cmluZyhlbmRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uLCBjb250ZXh0QWZ0
ZXJFbmQpOwotICAgIGlmIChjb21wb3NpdGlvblJhbmdlICYmIGludGVyc2VjdHMocmFuZ2VPZklu
dGVyZXN0LCAqY29tcG9zaXRpb25SYW5nZSkpIHsKKyAgICBEb2N1bWVudEVkaXRpbmdDb250ZXh0
IGNvbnRleHQ7CisgICAgY29udGV4dC5jb250ZXh0QmVmb3JlID0gbWFrZVN0cmluZyhjb250ZXh0
QmVmb3JlU3RhcnQsIHJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uLnN0YXJ0KTsKKyAgICBjb250
ZXh0LnNlbGVjdGVkVGV4dCA9IG1ha2VTdHJpbmcocmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24u
c3RhcnQsIHJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uLmVuZCk7CisgICAgY29udGV4dC5jb250
ZXh0QWZ0ZXIgPSBtYWtlU3RyaW5nKHJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uLmVuZCwgY29u
dGV4dEFmdGVyRW5kKTsKKyAgICBpZiAoY29tcG9zaXRpb25SYW5nZSAmJiBpbnRlcnNlY3RzKCpt
YWtlU2ltcGxlUmFuZ2UocmFuZ2VPZkludGVyZXN0U3RhcnQsIHJhbmdlT2ZJbnRlcmVzdEVuZCks
ICpjb21wb3NpdGlvblJhbmdlKSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gY29tcG9zaXRp
b25TdGFydChtYWtlRGVwcmVjYXRlZExlZ2FjeVBvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPnN0
YXJ0KSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBjb21wb3NpdGlvbkVuZChtYWtlRGVwcmVj
YXRlZExlZ2FjeVBvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCkpOwogICAgICAgICBjb250
ZXh0Lm1hcmtlZFRleHQgPSBtYWtlU3RyaW5nKGNvbXBvc2l0aW9uU3RhcnQsIGNvbXBvc2l0aW9u
RW5kKTsKLSAgICAgICAgY29udGV4dC5zZWxlY3RlZFJhbmdlSW5NYXJrZWRUZXh0LmxvY2F0aW9u
ID0gZGlzdGFuY2VCZXR3ZWVuUG9zaXRpb25zKHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVj
dGlvbiwgY29tcG9zaXRpb25TdGFydCk7CisgICAgICAgIGNvbnRleHQuc2VsZWN0ZWRSYW5nZUlu
TWFya2VkVGV4dC5sb2NhdGlvbiA9IGRpc3RhbmNlQmV0d2VlblBvc2l0aW9ucyhyYW5nZU9mSW50
ZXJlc3RJblNlbGVjdGlvbi5zdGFydCwgY29tcG9zaXRpb25TdGFydCk7CiAgICAgICAgIGNvbnRl
eHQuc2VsZWN0ZWRSYW5nZUluTWFya2VkVGV4dC5sZW5ndGggPSBbY29udGV4dC5zZWxlY3RlZFRl
eHQuc3RyaW5nIGxlbmd0aF07CiAgICAgfQogCg==
</data>
<flag name="review"
          id="429670"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>