<?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>206400</bug_id>
          
          <creation_ts>2020-01-16 22:46:07 -0800</creation_ts>
          <short_desc>[WTF] AtomStringTable should be small</short_desc>
          <delta_ts>2020-01-21 14:06:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kangil.han</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1607874</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-01-16 22:46:07 -0800</bug_when>
    <thetext>[WTF] AtomStringTable should be small</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607875</commentid>
    <comment_count>1</comment_count>
      <attachid>388014</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-01-16 22:48:29 -0800</bug_when>
    <thetext>Created attachment 388014
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607889</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-01-16 23:33:57 -0800</bug_when>
    <thetext>Putting EWS now, and running A/B tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608410</commentid>
    <comment_count>3</comment_count>
      <attachid>388138</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-01-18 01:00:57 -0800</bug_when>
    <thetext>Created attachment 388138
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608411</commentid>
    <comment_count>4</comment_count>
      <attachid>388139</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-01-18 01:01:59 -0800</bug_when>
    <thetext>Created attachment 388139
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608471</commentid>
    <comment_count>5</comment_count>
      <attachid>388139</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-01-18 12:12:30 -0800</bug_when>
    <thetext>Comment on attachment 388139
Patch

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

&gt; Source/WTF/ChangeLog:17
&gt; +        [1]: https://bugs.webkit.org/show_bug.cgi?id=206400

This links to the same bugzilla bug as the one this patch is attached to. I think you meant it to point somewhere else?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608472</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-01-18 12:42:13 -0800</bug_when>
    <thetext>How much of a win is this? 

Out of curiosity, do you know how many of the AtomStrings in the table are initialized via ProcessWarming::initializeNames()? It might also be interesting to know how many are lazily added static strings vs. atoms constructed from actual content.  

I ask mostly because if we wanted to reduce the AtomStringTable even more, there were a few ideas I had a while back about how we could consider shrinking it further based on the knowledge that many of the AtomStrings are known at compile time. For instance, one idea was to consider splitting the table in two (likely slowing down the slow case of lookup a bit), and having all the compile time known strings in a const/readonly compacted minimal perfect hash (gperf or the like).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609243</commentid>
    <comment_count>7</comment_count>
      <attachid>388139</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-01-21 13:31:47 -0800</bug_when>
    <thetext>Comment on attachment 388139
Patch

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

&gt;&gt; Source/WTF/ChangeLog:17
&gt;&gt; +        [1]: https://bugs.webkit.org/show_bug.cgi?id=206400
&gt; 
&gt; This links to the same bugzilla bug as the one this patch is attached to. I think you meant it to point somewhere else?

Oops, fixed https://bugs.webkit.org/show_bug.cgi?id=206469.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609246</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-01-21 13:34:46 -0800</bug_when>
    <thetext>(In reply to Sam Weinig from comment #6)
&gt; How much of a win is this? 
&gt; 
&gt; Out of curiosity, do you know how many of the AtomStrings in the table are
&gt; initialized via ProcessWarming::initializeNames()? It might also be
&gt; interesting to know how many are lazily added static strings vs. atoms
&gt; constructed from actual content.  

Not sure, but IIRC, for JavaScriptCore.framework it took 64KB (but my memory is sketchy...).
I have no data about WebCore case. It is possible WebCore allocates even more.

&gt; 
&gt; I ask mostly because if we wanted to reduce the AtomStringTable even more,
&gt; there were a few ideas I had a while back about how we could consider
&gt; shrinking it further based on the knowledge that many of the AtomStrings are
&gt; known at compile time. For instance, one idea was to consider splitting the
&gt; table in two (likely slowing down the slow case of lookup a bit), and having
&gt; all the compile time known strings in a const/readonly compacted minimal
&gt; perfect hash (gperf or the like).

I think it is possible that we can get some memory improvement. And we have a lot of compile-time-known HashMaps allocated at runtime.
I think having compile-time HashMap feature could improve things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609270</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-01-21 14:05:55 -0800</bug_when>
    <thetext>Committed r254881: &lt;https://trac.webkit.org/changeset/254881&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609271</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-21 14:06:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/58772826&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388014</attachid>
            <date>2020-01-16 22:48:29 -0800</date>
            <delta_ts>2020-01-18 01:00:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206400-20200116224829.patch</filename>
            <type>text/plain</type>
            <size>30398</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGE4YjFhNDY2NzQ0NjM1OWZiZjZkM2Rh
ZDliM2MyYTJiYzI4NjhmM2EuLjJmYTU5MDNmY2VlNmE1ZWUxN2NhNWExMTg1NzIwYTMwODQ3ZTEw
MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjEgQEAKKzIwMjAtMDEtMTYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBBdG9tU3RyaW5nVGFibGUgc2hvdWxkIGJl
IHNtYWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDY0MDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHd0Zi9EdW1iUHRyVHJhaXRzLmg6CisgICAgICAgIChXVEY6OkR1bWJQdHJUcmFpdHM6Omhhc2hU
YWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6OkR1bWJQdHJUcmFpdHM6OmlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKiB3dGYvRm9yd2FyZC5oOgorICAgICAgICAqIHd0
Zi9IYXNoVHJhaXRzLmg6CisgICAgICAgICogd3RmL1BhY2tlZC5oOgorICAgICAgICAoV1RGOjpQ
YWNrZWQ8VDo6UGFja2VkKToKKyAgICAgICAgKFdURjo6UGFja2VkPFQ6OmlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdURjo6R2V0UHRySGVscGVyPFBhY2tlZFB0cjxU
Pj46OmdldFB0cik6CisgICAgICAgIChXVEY6OlBhY2tlZFB0clRyYWl0czo6aGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKToKKyAgICAgICAgKFdURjo6UGFja2VkUHRyVHJhaXRzOjppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSk6CisgICAgICAgIChXVEY6OmFsaWdub2YpOiBEZWxldGVkLgorICAgICAgICAq
IHd0Zi9SZWYuaDoKKyAgICAgICAgKFdURjo6UmVmOjpSZWYpOgorICAgICAgICAoV1RGOjpSZWY6
OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdURjo6UmVmOjpoYXNo
VGFibGVEZWxldGVkVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9SZWZQdHIuaDoKKyAg
ICAgICAgKFdURjo6UmVmUHRyOjpSZWZQdHIpOgorICAgICAgICAoV1RGOjpSZWZQdHI6OmlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdURjo6UmVmUHRyOjpoYXNoVGFi
bGVEZWxldGVkVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdJ
bXBsLmNwcDoKKyAgICAgICAgKFdURjo6YWRkVG9TdHJpbmdUYWJsZSk6CisgICAgICAgIChXVEY6
OkNTdHJpbmdUcmFuc2xhdG9yOjplcXVhbCk6CisgICAgICAgIChXVEY6OkNTdHJpbmdUcmFuc2xh
dG9yOjp0cmFuc2xhdGUpOgorICAgICAgICAoV1RGOjpVQ2hhckJ1ZmZlclRyYW5zbGF0b3I6OmVx
dWFsKToKKyAgICAgICAgKFdURjo6VUNoYXJCdWZmZXJUcmFuc2xhdG9yOjp0cmFuc2xhdGUpOgor
ICAgICAgICAoV1RGOjpIYXNoQW5kVVRGOENoYXJhY3RlcnNUcmFuc2xhdG9yOjplcXVhbCk6Cisg
ICAgICAgIChXVEY6Okhhc2hBbmRVVEY4Q2hhcmFjdGVyc1RyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6
CisgICAgICAgIChXVEY6OlN1YnN0cmluZ1RyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAg
IChXVEY6OlN1YnN0cmluZ1RyYW5zbGF0b3I4OjplcXVhbCk6CisgICAgICAgIChXVEY6OlN1YnN0
cmluZ1RyYW5zbGF0b3IxNjo6ZXF1YWwpOgorICAgICAgICAoV1RGOjpMQ2hhckJ1ZmZlclRyYW5z
bGF0b3I6OmVxdWFsKToKKyAgICAgICAgKFdURjo6TENoYXJCdWZmZXJUcmFuc2xhdG9yOjp0cmFu
c2xhdGUpOgorICAgICAgICAoV1RGOjpCdWZmZXJGcm9tU3RhdGljRGF0YVRyYW5zbGF0b3I6OmVx
dWFsKToKKyAgICAgICAgKFdURjo6QnVmZmVyRnJvbVN0YXRpY0RhdGFUcmFuc2xhdG9yOjp0cmFu
c2xhdGUpOgorICAgICAgICAoV1RGOjpBdG9tU3RyaW5nSW1wbDo6YWRkU2xvd0Nhc2UpOgorICAg
ICAgICAoV1RGOjpBdG9tU3RyaW5nSW1wbDo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6QXRvbVN0
cmluZ0ltcGw6Omxvb2tVcFNsb3dDYXNlKToKKyAgICAgICAgKFdURjo6QXRvbVN0cmluZ0ltcGw6
Omxvb2tVcCk6CisgICAgICAgICogd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcDoKKyAgICAg
ICAgKFdURjo6QXRvbVN0cmluZ1RhYmxlOjp+QXRvbVN0cmluZ1RhYmxlKToKKyAgICAgICAgKiB3
dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaDoKKyAgICAgICAgKFdURjo6QXRvbVN0cmluZ1RhYmxl
Ojp0YWJsZSk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaDoKKyAgICAgICAgKFdURjo6U3RyaW5nSGFzaDo6aGFzaCk6CisgICAgICAgIChXVEY6
OlN0cmluZ0hhc2g6OmVxdWFsKToKKyAgICAgICAgKFdURjo6QVNDSUlDYXNlSW5zZW5zaXRpdmVI
YXNoOjpoYXNoKToKKyAgICAgICAgKFdURjo6QVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoOjplcXVh
bCk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOgorCiAyMDIwLTAxLTE2ICBLZWl0
aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbGFuZCBieXRl
Y29kZSBjaGVja3BvaW50cyBzaW5jZSBidWdzIGhhdmUgYmVlbiBmaXhlZApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDZlZTJhMzE4N2NlYTFmMzA5OGZjMDI0ZDczOWY1YzFlZGUxYTU4ZDQuLjUzMGYwZWNlNDhiZmFi
OTZkN2ZkNmQzOTI0OWFjNzQ2YjVjNjNkOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAor
MjAyMC0wMS0xNiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAg
IFtXVEZdIEF0b21TdHJpbmdUYWJsZSBzaG91bGQgYmUgc21hbGwKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjQwMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisg
ICAgICAgICogZG9tL0dDUmVhY2hhYmxlUmVmLmg6CisgICAgICAgIChXZWJDb3JlOjpHQ1JlYWNo
YWJsZVJlZjo6R0NSZWFjaGFibGVSZWYpOgorICAgICAgICAqIGRvbS9RdWFsaWZpZWROYW1lLmg6
CisgICAgICAgIChXZWJDb3JlOjpRdWFsaWZpZWROYW1lOjpoYXNoVGFibGVEZWxldGVkVmFsdWUp
OgorCiAyMDIwLTAxLTE2ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQgcmVtb3ZpbmcgYSBzdGFsZSBGSVhNRSBjb21tZW50CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9EdW1iUHRyVHJhaXRzLmggYi9Tb3VyY2UvV1RGL3d0
Zi9EdW1iUHRyVHJhaXRzLmgKaW5kZXggNTFkZWJhNzZiZmZlMDNkNWRhYmMzN2Q1NzUxMzcyZTE2
MjI2MzQ1Zi4uZjQ2YWM2N2RhYjlkOWQxNmVmZGIzZjJhY2ExNjU1NDkyMjI1Mjg2MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvRHVtYlB0clRyYWl0cy5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0R1bWJQdHJUcmFpdHMuaApAQCAtNDEsNiArNDEsOSBAQCBzdHJ1Y3QgRHVtYlB0clRyYWl0cyB7
CiAKICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHN3YXAoU3RvcmFnZVR5cGUmIGEsIFN0
b3JhZ2VUeXBlJiBiKSB7IHN0ZDo6c3dhcChhLCBiKTsgfQogICAgIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIFQqIHVud3JhcChjb25zdCBTdG9yYWdlVHlwZSYgcHRyKSB7IHJldHVybiBwdHI7IH0KKwor
ICAgIHN0YXRpYyBTdG9yYWdlVHlwZSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKSB7IHJldHVybiBi
aXR3aXNlX2Nhc3Q8U3RvcmFnZVR5cGU+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oLTEpKTsgfQor
ICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoY29u
c3QgU3RvcmFnZVR5cGUmIHB0cikgeyByZXR1cm4gcHRyID09IGhhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0ZvcndhcmQuaCBiL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAppbmRleCBmZTJkZDQ1Nzg4
N2UwNTAxMjVhMDkzN2VmYmMyOTdkYjJmY2JmMWRmLi43MGRkYjkxNmU1MGM2ZTI4NTJiN2Y5ZTRl
MGUzYTU4ZjcwM2E4ZjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKKysr
IGIvU291cmNlL1dURi93dGYvRm9yd2FyZC5oCkBAIC02Miw2ICs2Miw4IEBAIHRlbXBsYXRlPHR5
cGVuYW1lPiBjbGFzcyBMYXp5TmV2ZXJEZXN0cm95ZWQ7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xh
c3MgTmV2ZXJEZXN0cm95ZWQ7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgT3B0aW9uU2V0Owog
dGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIE9wdGlvbmFsOwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y2xhc3MgUGFja2VkOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90ID0gYWxpZ25vZihUKT4g
Y2xhc3MgUGFja2VkQWxpZ25lZFB0cjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0g
RHVtYlB0clRyYWl0czxUPj4gY2xhc3MgUmVmOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgPSBEdW1iUHRyVHJhaXRzPFQ+PiBjbGFzcyBSZWZQdHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4g
Y2xhc3MgU3RyaW5nQnVmZmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRyYWl0
cy5oIGIvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCmluZGV4IDU1MmQ0YjZmZWIyOTA1OWM5
ZGU4YTgzYTVlYjAyMTcwOTNiYWQ1ZjQuLjg5YTNmMzMxMDQ5YWE0MzMxMTNmZGM2ZDEwNjYzZDNj
NzdhN2YzMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKQEAgLTIyMCw2ICsyMjAsMTkgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgUD4gc3RydWN0IFJlZkhhc2hUcmFpdHMgOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8
UmVmPFA+PiB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBIYXNoVHJhaXRzPFJlZjxQ
Pj4gOiBSZWZIYXNoVHJhaXRzPFA+IHsgfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgUD4gc3RydWN0
IEhhc2hUcmFpdHM8UGFja2VkPFAqPj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8UGFja2VkPFAq
Pj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNJc0VtcHR5VmFsdWVGdW5jdGlvbiA9
IHRydWU7CisgICAgdXNpbmcgVGFyZ2V0VHlwZSA9IFBhY2tlZDxQKj47CisgICAgc3RhdGljX2Fz
c2VydChUYXJnZXRUeXBlOjphbGlnbm1lbnQgPCA0ICogS0IsICJUaGUgZmlyc3QgcGFnZSBpcyBh
bHdheXMgdW5tYXBwZWQgc2luY2UgaXQgaW5jbHVkZXMgbnVsbHB0ci4iKTsKKworICAgIHN0YXRp
YyBQYWNrZWQ8UCo+IGVtcHR5VmFsdWUoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgc3RhdGlj
IGJvb2wgaXNFbXB0eVZhbHVlKGNvbnN0IFRhcmdldFR5cGUmIHZhbHVlKSB7IHJldHVybiB2YWx1
ZS5nZXQoKSA9PSBudWxscHRyOyB9CisKKyAgICB1c2luZyBQZWVrVHlwZSA9IFAqOworICAgIHN0
YXRpYyBQZWVrVHlwZSBwZWVrKGNvbnN0IFRhcmdldFR5cGUmIHZhbHVlKSB7IHJldHVybiB2YWx1
ZS5nZXQoKTsgfQorICAgIHN0YXRpYyBQZWVrVHlwZSBwZWVrKFAqIHZhbHVlKSB7IHJldHVybiB2
YWx1ZTsgfQorfTsKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxTdHJpbmc+IDogU2lt
cGxlQ2xhc3NIYXNoVHJhaXRzPFN0cmluZz4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBo
YXNJc0VtcHR5VmFsdWVGdW5jdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIGJvb2wgaXNFbXB0eVZh
bHVlKGNvbnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFja2VkLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAppbmRleCBiMjJmYzc2MWQ0Mjk3NGI5ODEyNWJiN2U3
ZDFjMmQxZjlhNTc4MzA4Li5lOTFhNTEzMDM2YWMzYTlkMDQ3NTA4MzVmMTM1YWJlNWE1NzhlNzk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYWNrZWQuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9QYWNrZWQuaApAQCAtMjYsNiArMjYsOSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxh
cnJheT4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9VbmFsaWdu
ZWRBY2Nlc3MuaD4KQEAgLTEwMCwxMSArMTAzLDEyIEBAIGNsYXNzIFBhY2tlZCB7CiAvLyBQYWNr
ZWRBbGlnbmVkUHRyIGNhbiB0YWtlIGFsaWdubWVudCBwYXJhbWV0ZXIgdG9vLiBQYWNrZWRBbGln
bmVkUHRyIG9ubHkgdXNlcyB0aGlzIGFsaWdubWVudCBpbmZvcm1hdGlvbiBpZiBpdCBpcyBwcm9m
aXRhYmxlOiB3ZSB1c2UKIC8vIGFsaWdubWVudCBpbmZvcm1hdGlvbiBvbmx5IHdoZW4gd2UgY2Fu
IHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgc3RvcmFnZS4gU2luY2UgdGhlIHBvaW50ZXIgd2lkdGgg
aXMgMzYgYml0cyBhbmQgSlNDZWxscyBhcmUgYWxpZ25lZCB0byAxNiBieXRlcywKIC8vIHdlIGNh
biB1c2UgNCBiaXRzIGluIERhcndpbiBBUk02NCwgd2UgY2FuIGNvbXBhY3QgY2VsbCBwb2ludGVy
IGludG8gNCBieXRlcyAoMzIgYml0cykuCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgYWxp
Z25tZW50ID0gYWxpZ25vZihUKT4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBwYXNzZWRB
bGlnbm1lbnQ+CiBjbGFzcyBQYWNrZWRBbGlnbmVkUHRyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWNfYXNzZXJ0KGhhc09uZUJpdFNldChhbGlnbm1l
bnQpLCAiQWxpZ25tZW50IG5lZWRzIHRvIGJlIHBvd2VyLW9mLXR3byIpOworICAgIHN0YXRpY19h
c3NlcnQoaGFzT25lQml0U2V0KHBhc3NlZEFsaWdubWVudCksICJBbGlnbm1lbnQgbmVlZHMgdG8g
YmUgcG93ZXItb2YtdHdvIik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgYWxpZ25tZW50
ID0gcGFzc2VkQWxpZ25tZW50OwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc1BhY2tlZFR5
cGUgPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYWxpZ25tZW50U2hpZnRT
aXplSWZQcm9maXRhYmxlID0gZ2V0TFNCU2V0Q29uc3RleHByKGFsaWdubWVudCk7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBzdG9yYWdlU2l6ZVdpdGhvdXRBbGlnbm1lbnRTaGlmdCA9
IHJvdW5kVXBUb011bHRpcGxlT2Y8OD4oV1RGX0NQVV9FRkZFQ1RJVkVfQUREUkVTU19XSURUSCkg
LyA4OwpAQCAtMjE1LDExICsyMTksMjYgQEAgY2xhc3MgUGFja2VkPFQqPiA6IHB1YmxpYyBQYWNr
ZWRBbGlnbmVkUHRyPFQsIDE+IHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gUGFja2VkQWxp
Z25lZFB0cjxULCAxPjsKICAgICB1c2luZyBCYXNlOjpCYXNlOworCisgICAgLy8gSGFzaCB0YWJs
ZSBkZWxldGVkIHZhbHVlcywgd2hpY2ggYXJlIG9ubHkgY29uc3RydWN0ZWQgYW5kIG5ldmVyIGNv
cGllZCBvciBkZXN0cm95ZWQuCisgICAgUGFja2VkKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
IDogQmFzZShiaXR3aXNlX2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oQmFzZTo6YWxp
Z25tZW50KSkpIHsgfQorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7
IHJldHVybiBCYXNlOjpnZXQoKSA9PSBiaXR3aXNlX2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4oQmFzZTo6YWxpZ25tZW50KSk7IH0KIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiB1
c2luZyBQYWNrZWRQdHIgPSBQYWNrZWQ8VCo+OwogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0
cnVjdCBHZXRQdHJIZWxwZXI8UGFja2VkUHRyPFQ+PiB7CisgICAgdXNpbmcgUHRyVHlwZSA9IFQq
OworICAgIHN0YXRpYyBUKiBnZXRQdHIoY29uc3QgUGFja2VkUHRyPFQ+JiBwKSB7IHJldHVybiBj
b25zdF9jYXN0PFQqPihwLmdldCgpKTsgfQorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citz
dHJ1Y3QgSXNTbWFydFB0cjxQYWNrZWRQdHI8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgdmFsdWUgPSB0cnVlOworfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHN0cnVjdCBQYWNr
ZWRQdHJUcmFpdHMgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHVzaW5nIFJlYmluZFRyYWl0
cyA9IFBhY2tlZFB0clRyYWl0czxVPjsKQEAgLTIzMSw4ICsyNTAsMTYgQEAgc3RydWN0IFBhY2tl
ZFB0clRyYWl0cyB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXI+IHN0YXRpYyBBTFdBWVNf
SU5MSU5FIHZvaWQgc3dhcChQYWNrZWRQdHI8VD4mIGEsIE90aGVyJiBiKSB7IGEuc3dhcChiKTsg
fQogCiAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgVCogdW53cmFwKGNvbnN0IFN0b3JhZ2VUeXBl
JiBwdHIpIHsgcmV0dXJuIHB0ci5nZXQoKTsgfQorCisgICAgLy8gV2UgYXNzdW1lIHRoYXQsCisg
ICAgLy8gMS4gVGhlIGFsaWdubWVudCBpcyA8IDRLQi4gKEl0IGlzIHRlc3RlZCBieSBIYXNoVHJh
aXRzKS4KKyAgICAvLyAyLiBUaGUgZmlyc3QgcGFnZSAoaW5jbHVkaW5nIG51bGxwdHIpIGlzIG5l
dmVyIG1hcHBlZC4KKyAgICBzdGF0aWMgU3RvcmFnZVR5cGUgaGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCkgeyByZXR1cm4gU3RvcmFnZVR5cGUgeyBiaXR3aXNlX2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4oU3RvcmFnZVR5cGU6OmFsaWdubWVudCkpIH07IH0KKyAgICBzdGF0aWMgQUxXQVlT
X0lOTElORSBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKGNvbnN0IFN0b3JhZ2VUeXBlJiBw
dHIpIHsgcmV0dXJuIHB0ci5nZXQoKSA9PSBiaXR3aXNlX2Nhc3Q8VCo+KHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4oU3RvcmFnZVR5cGU6OmFsaWdubWVudCkpOyB9CiB9OwogCit0ZW1wbGF0ZTx0eXBl
bmFtZSBQPiBzdHJ1Y3QgRGVmYXVsdEhhc2g8UGFja2VkUHRyPFA+PiB7IHVzaW5nIEhhc2ggPSBQ
dHJIYXNoPFBhY2tlZFB0cjxQPj47IH07CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBX
VEY6OlBhY2tlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZi5oIGIvU291cmNlL1dU
Ri93dGYvUmVmLmgKaW5kZXggOGUxYjc0NmQxOGIzYmQ5NTdjNTdjZDBkYjJiMzA2YTUxOTRhZWFh
ZS4uMWFiODIxMWMzNWI3ZDU3ZDk4MDg2YWU5NjFhZjY5NjA3YjQ5ZjgwMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvUmVmLmgKKysrIGIvU291cmNlL1dURi93dGYvUmVmLmgKQEAgLTQ1LDkg
KzQ1LDEwIEBAIGlubGluZSB2b2lkIGFkb3B0ZWQoY29uc3Qgdm9pZCopIHsgfQogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHJhaXRzPiBjbGFzcyBSZWY7CiB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBQdHJUcmFpdHMgPSBEdW1iUHRyVHJhaXRzPFQ+PiBSZWY8VCwgUHRy
VHJhaXRzPiBhZG9wdFJlZihUJik7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFB0
clRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KIGNsYXNzIFJl
ZiB7CiBwdWJsaWM6CisgICAgdXNpbmcgUHRyVHJhaXRzID0gVHJhaXRzOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBpc1JlZiA9IHRydWU7CiAKICAgICB+UmVmKCkKQEAgLTk0LDkgKzk1LDgg
QEAgY2xhc3MgUmVmIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPiB2b2lk
IHN3YXAoUmVmPFgsIFk+Jik7CiAKICAgICAvLyBIYXNoIHRhYmxlIGRlbGV0ZWQgdmFsdWVzLCB3
aGljaCBhcmUgb25seSBjb25zdHJ1Y3RlZCBhbmQgbmV2ZXIgY29waWVkIG9yIGRlc3Ryb3llZC4K
LSAgICBSZWYoSGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX3B0cihoYXNoVGFibGVEZWxl
dGVkVmFsdWUoKSkgeyB9Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcHRyID09IGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9Ci0gICAgc3RhdGlj
IFQqIGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+
KC0xKTsgfQorICAgIFJlZihIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fcHRyKFB0clRy
YWl0czo6aGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpIHsgfQorICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBQdHJUcmFpdHM6OmlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKG1fcHRyKTsgfQogCiAgICAgUmVmKEhhc2hUYWJsZUVtcHR5VmFsdWVUeXBlKSA6IG1f
cHRyKGhhc2hUYWJsZUVtcHR5VmFsdWUoKSkgeyB9CiAgICAgYm9vbCBpc0hhc2hUYWJsZUVtcHR5
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3B0ciA9PSBoYXNoVGFibGVFbXB0eVZhbHVlKCk7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oIGIvU291cmNlL1dURi93dGYvUmVm
UHRyLmgKaW5kZXggNmQ0YzY0NDRlN2VhZjFhYTFlYWFmNDMyOWE1ZjY5OGYwOTNlZDBiNi4uZGRi
YTI2NmU0MWZjZDlmNTRlNTBmOTI2MTRjYzIyM2YwNmYwNWMzMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvUmVmUHRyLmgKKysrIGIvU291cmNlL1dURi93dGYvUmVmUHRyLmgKQEAgLTQ0LDEw
ICs0NCwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBBTFdBWVNfSU5MSU5FIHZvaWQgZGVyZWZJ
Zk5vdE51bGwoVCogcHRyKQogICAgICAgICBwdHItPmRlcmVmKCk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFB0clRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFRyYWl0cz4KIGNsYXNzIFJlZlB0ciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CisgICAgdXNpbmcgUHRyVHJhaXRzID0gVHJhaXRzOwogICAgIHR5cGVkZWYgVCBW
YWx1ZVR5cGU7CiAgICAgdHlwZWRlZiBWYWx1ZVR5cGUqIFB0clR5cGU7CiAKQEAgLTYzLDggKzY0
LDggQEAgY2xhc3MgUmVmUHRyIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBYLCB0eXBlbmFtZSBZ
PiBSZWZQdHIoUmVmPFgsIFk+JiYpOwogCiAgICAgLy8gSGFzaCB0YWJsZSBkZWxldGVkIHZhbHVl
cywgd2hpY2ggYXJlIG9ubHkgY29uc3RydWN0ZWQgYW5kIG5ldmVyIGNvcGllZCBvciBkZXN0cm95
ZWQuCi0gICAgUmVmUHRyKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV9wdHIoaGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCkpIHsgfQotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX3B0ciA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQorICAg
IFJlZlB0cihIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fcHRyKFB0clRyYWl0czo6aGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkpIHsgfQorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFs
dWUoKSBjb25zdCB7IHJldHVybiBQdHJUcmFpdHM6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKG1f
cHRyKTsgfQogCiAgICAgQUxXQVlTX0lOTElORSB+UmVmUHRyKCkgeyBkZXJlZklmTm90TnVsbChQ
dHJUcmFpdHM6OmV4Y2hhbmdlKG1fcHRyLCBudWxscHRyKSk7IH0KIApAQCAtOTYsOCArOTcsNiBA
QCBjbGFzcyBSZWZQdHIgewogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4g
dm9pZCBzd2FwKFJlZlB0cjxYLCBZPiYpOwogCi0gICAgc3RhdGljIFQqIGhhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KC0xKTsgfQotCiAgICAgUmVm
UHRyIGNvcHlSZWYoKSAmJiA9IGRlbGV0ZTsKICAgICBSZWZQdHIgY29weVJlZigpIGNvbnN0ICYg
V0FSTl9VTlVTRURfUkVUVVJOIHsgcmV0dXJuIFJlZlB0cihtX3B0cik7IH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcAppbmRleCBhZDIyMjM0MzAzNzQ0MTgzM2MxODY0ZWM4
NjZjYjQyNmRjZjQ0YzE3Li4zNWIzYjRjMDJmZDY3ODVkMjk1YjgzNjU1OWQwOTY2MGNlN2FkYmRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdJbXBsLmNwcApAQCAtNjcsNyArNjcsNyBA
QCBjbGFzcyBBdG9tU3RyaW5nVGFibGVMb2NrZXIgewogCiAjZW5kaWYgLy8gVVNFKFdFQl9USFJF
QUQpCiAKLXVzaW5nIFN0cmluZ1RhYmxlSW1wbCA9IEhhc2hTZXQ8U3RyaW5nSW1wbCo+OwordXNp
bmcgU3RyaW5nVGFibGVJbXBsID0gSGFzaFNldDxQYWNrZWRQdHI8U3RyaW5nSW1wbD4+OwogCiBz
dGF0aWMgQUxXQVlTX0lOTElORSBTdHJpbmdUYWJsZUltcGwmIHN0cmluZ1RhYmxlKCkKIHsKQEAg
LTgyLDggKzgyLDggQEAgc3RhdGljIGlubGluZSBSZWY8QXRvbVN0cmluZ0ltcGw+IGFkZFRvU3Ry
aW5nVGFibGUoQXRvbVN0cmluZ1RhYmxlTG9ja2VyJiwgU3RyaW4KICAgICAvLyBJZiB0aGUgc3Ry
aW5nIGlzIG5ld2x5LXRyYW5zbGF0ZWQsIHRoZW4gd2UgbmVlZCB0byBhZG9wdCBpdC4KICAgICAv
LyBUaGUgYm9vbGVhbiBpbiB0aGUgcGFpciB0ZWxscyB1cyBpZiB0aGF0IGlzIHNvLgogICAgIGlm
IChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKHN0YXRpY19j
YXN0PEF0b21TdHJpbmdJbXBsJj4oKiphZGRSZXN1bHQuaXRlcmF0b3IpKTsKLSAgICByZXR1cm4g
KnN0YXRpY19jYXN0PEF0b21TdHJpbmdJbXBsKj4oKmFkZFJlc3VsdC5pdGVyYXRvcik7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxBdG9tU3RyaW5nSW1wbCY+KCphZGRSZXN1
bHQuaXRlcmF0b3ItPmdldCgpKSk7CisgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxBdG9tU3RyaW5n
SW1wbCo+KGFkZFJlc3VsdC5pdGVyYXRvci0+Z2V0KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBIYXNoVHJhbnNsYXRvcj4KQEAgLTk5LDE2ICs5OSwxNyBAQCBzdHJ1Y3Qg
Q1N0cmluZ1RyYW5zbGF0b3IgewogICAgICAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpjb21wdXRl
SGFzaEFuZE1hc2tUb3A4Qml0cyhjaGFyYWN0ZXJzKTsKICAgICB9CiAKLSAgICBzdGF0aWMgaW5s
aW5lIGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogc3RyLCBjb25zdCBMQ2hhciogY2hhcmFjdGVycykK
KyAgICBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWwoUGFja2VkUHRyPFN0cmluZ0ltcGw+IHN0ciwg
Y29uc3QgTENoYXIqIGNoYXJhY3RlcnMpCiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjplcXVh
bChzdHIsIGNoYXJhY3RlcnMpOworICAgICAgICByZXR1cm4gV1RGOjplcXVhbChzdHIuZ2V0KCks
IGNoYXJhY3RlcnMpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJ
bXBsKiYgbG9jYXRpb24sIGNvbnN0IExDaGFyKiBjb25zdCYgY2hhcmFjdGVycywgdW5zaWduZWQg
aGFzaCkKKyAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBs
b2NhdGlvbiwgY29uc3QgTENoYXIqIGNvbnN0JiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBoYXNoKQog
ICAgIHsKLSAgICAgICAgbG9jYXRpb24gPSAmU3RyaW5nSW1wbDo6Y3JlYXRlKGNoYXJhY3RlcnMp
LmxlYWtSZWYoKTsKLSAgICAgICAgbG9jYXRpb24tPnNldEhhc2goaGFzaCk7Ci0gICAgICAgIGxv
Y2F0aW9uLT5zZXRJc0F0b20odHJ1ZSk7CisgICAgICAgIGF1dG8qIHBvaW50ZXIgPSAmU3RyaW5n
SW1wbDo6Y3JlYXRlKGNoYXJhY3RlcnMpLmxlYWtSZWYoKTsKKyAgICAgICAgcG9pbnRlci0+c2V0
SGFzaChoYXNoKTsKKyAgICAgICAgcG9pbnRlci0+c2V0SXNBdG9tKHRydWUpOworICAgICAgICBs
b2NhdGlvbiA9IHBvaW50ZXI7CiAgICAgfQogfTsKIApAQCAtMTUwLDE2ICsxNTEsMTcgQEAgc3Ry
dWN0IFVDaGFyQnVmZmVyVHJhbnNsYXRvciB7CiAgICAgICAgIHJldHVybiBidWYuaGFzaDsKICAg
ICB9CiAKLSAgICBzdGF0aWMgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiBjb25zdCYgc3RyLCBjb25z
dCBVQ2hhckJ1ZmZlciYgYnVmKQorICAgIHN0YXRpYyBib29sIGVxdWFsKFBhY2tlZFB0cjxTdHJp
bmdJbXBsPiBjb25zdCYgc3RyLCBjb25zdCBVQ2hhckJ1ZmZlciYgYnVmKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIFdURjo6ZXF1YWwoc3RyLCBidWYuY2hhcmFjdGVycywgYnVmLmxlbmd0aCk7Cisg
ICAgICAgIHJldHVybiBXVEY6OmVxdWFsKHN0ci5nZXQoKSwgYnVmLmNoYXJhY3RlcnMsIGJ1Zi5s
ZW5ndGgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYg
bG9jYXRpb24sIGNvbnN0IFVDaGFyQnVmZmVyJiBidWYsIHVuc2lnbmVkIGhhc2gpCisgICAgc3Rh
dGljIHZvaWQgdHJhbnNsYXRlKFBhY2tlZFB0cjxTdHJpbmdJbXBsPiYgbG9jYXRpb24sIGNvbnN0
IFVDaGFyQnVmZmVyJiBidWYsIHVuc2lnbmVkIGhhc2gpCiAgICAgewotICAgICAgICBsb2NhdGlv
biA9ICZTdHJpbmdJbXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJsZShidWYuY2hhcmFjdGVycywgYnVm
Lmxlbmd0aCkubGVha1JlZigpOwotICAgICAgICBsb2NhdGlvbi0+c2V0SGFzaChoYXNoKTsKLSAg
ICAgICAgbG9jYXRpb24tPnNldElzQXRvbSh0cnVlKTsKKyAgICAgICAgYXV0byogcG9pbnRlciA9
ICZTdHJpbmdJbXBsOjpjcmVhdGU4Qml0SWZQb3NzaWJsZShidWYuY2hhcmFjdGVycywgYnVmLmxl
bmd0aCkubGVha1JlZigpOworICAgICAgICBwb2ludGVyLT5zZXRIYXNoKGhhc2gpOworICAgICAg
ICBwb2ludGVyLT5zZXRJc0F0b20odHJ1ZSk7CisgICAgICAgIGxvY2F0aW9uID0gcG9pbnRlcjsK
ICAgICB9CiB9OwogCkBAIC0xNzYsOCArMTc4LDkgQEAgc3RydWN0IEhhc2hBbmRVVEY4Q2hhcmFj
dGVyc1RyYW5zbGF0b3IgewogICAgICAgICByZXR1cm4gYnVmZmVyLmhhc2g7CiAgICAgfQogCi0g
ICAgc3RhdGljIGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogY29uc3QmIHN0cmluZywgY29uc3QgSGFz
aEFuZFVURjhDaGFyYWN0ZXJzJiBidWZmZXIpCisgICAgc3RhdGljIGJvb2wgZXF1YWwoUGFja2Vk
UHRyPFN0cmluZ0ltcGw+IGNvbnN0JiBwYXNzZWRTdHJpbmcsIGNvbnN0IEhhc2hBbmRVVEY4Q2hh
cmFjdGVycyYgYnVmZmVyKQogICAgIHsKKyAgICAgICAgYXV0byogc3RyaW5nID0gcGFzc2VkU3Ry
aW5nLmdldCgpOwogICAgICAgICBpZiAoYnVmZmVyLnV0ZjE2TGVuZ3RoICE9IHN0cmluZy0+bGVu
Z3RoKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIxMiw3ICsyMTUsNyBAQCBz
dHJ1Y3QgSGFzaEFuZFVURjhDaGFyYWN0ZXJzVHJhbnNsYXRvciB7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYgbG9j
YXRpb24sIGNvbnN0IEhhc2hBbmRVVEY4Q2hhcmFjdGVycyYgYnVmZmVyLCB1bnNpZ25lZCBoYXNo
KQorICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShQYWNrZWRQdHI8U3RyaW5nSW1wbD4mIGxvY2F0
aW9uLCBjb25zdCBIYXNoQW5kVVRGOENoYXJhY3RlcnMmIGJ1ZmZlciwgdW5zaWduZWQgaGFzaCkK
ICAgICB7CiAgICAgICAgIFVDaGFyKiB0YXJnZXQ7CiAgICAgICAgIGF1dG8gbmV3U3RyaW5nID0g
U3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChidWZmZXIudXRmMTZMZW5ndGgsIHRhcmdl
dCk7CkBAIC0yMjUsOSArMjI4LDEwIEBAIHN0cnVjdCBIYXNoQW5kVVRGOENoYXJhY3RlcnNUcmFu
c2xhdG9yIHsKICAgICAgICAgaWYgKGlzQWxsQVNDSUkpCiAgICAgICAgICAgICBuZXdTdHJpbmcg
PSBTdHJpbmdJbXBsOjpjcmVhdGUoYnVmZmVyLmNoYXJhY3RlcnMsIGJ1ZmZlci5sZW5ndGgpOwog
Ci0gICAgICAgIGxvY2F0aW9uID0gJm5ld1N0cmluZy5sZWFrUmVmKCk7Ci0gICAgICAgIGxvY2F0
aW9uLT5zZXRIYXNoKGhhc2gpOwotICAgICAgICBsb2NhdGlvbi0+c2V0SXNBdG9tKHRydWUpOwor
ICAgICAgICBhdXRvKiBwb2ludGVyID0gJm5ld1N0cmluZy5sZWFrUmVmKCk7CisgICAgICAgIHBv
aW50ZXItPnNldEhhc2goaGFzaCk7CisgICAgICAgIHBvaW50ZXItPnNldElzQXRvbSh0cnVlKTsK
KyAgICAgICAgbG9jYXRpb24gPSBwb2ludGVyOwogICAgIH0KIH07CiAKQEAgLTI2NiwxMSArMjcw
LDEyIEBAIHN0cnVjdCBTdWJzdHJpbmdMb2NhdGlvbiB7CiB9OwogCiBzdHJ1Y3QgU3Vic3RyaW5n
VHJhbnNsYXRvciB7Ci0gICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFN0cmluZ0ltcGwqJiBsb2Nh
dGlvbiwgY29uc3QgU3Vic3RyaW5nTG9jYXRpb24mIGJ1ZmZlciwgdW5zaWduZWQgaGFzaCkKKyAg
ICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBsb2NhdGlvbiwg
Y29uc3QgU3Vic3RyaW5nTG9jYXRpb24mIGJ1ZmZlciwgdW5zaWduZWQgaGFzaCkKICAgICB7Ci0g
ICAgICAgIGxvY2F0aW9uID0gJlN0cmluZ0ltcGw6OmNyZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBs
KCpidWZmZXIuYmFzZVN0cmluZywgYnVmZmVyLnN0YXJ0LCBidWZmZXIubGVuZ3RoKS5sZWFrUmVm
KCk7Ci0gICAgICAgIGxvY2F0aW9uLT5zZXRIYXNoKGhhc2gpOwotICAgICAgICBsb2NhdGlvbi0+
c2V0SXNBdG9tKHRydWUpOworICAgICAgICBhdXRvKiBwb2ludGVyID0gJlN0cmluZ0ltcGw6OmNy
ZWF0ZVN1YnN0cmluZ1NoYXJpbmdJbXBsKCpidWZmZXIuYmFzZVN0cmluZywgYnVmZmVyLnN0YXJ0
LCBidWZmZXIubGVuZ3RoKS5sZWFrUmVmKCk7CisgICAgICAgIHBvaW50ZXItPnNldEhhc2goaGFz
aCk7CisgICAgICAgIHBvaW50ZXItPnNldElzQXRvbSh0cnVlKTsKKyAgICAgICAgbG9jYXRpb24g
PSBwb2ludGVyOwogICAgIH0KIH07CiAKQEAgLTI4MCw5ICsyODUsOSBAQCBzdHJ1Y3QgU3Vic3Ry
aW5nVHJhbnNsYXRvcjggOiBTdWJzdHJpbmdUcmFuc2xhdG9yIHsKICAgICAgICAgcmV0dXJuIFN0
cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoYnVmZmVyLmJhc2VTdHJpbmct
PmNoYXJhY3RlcnM4KCkgKyBidWZmZXIuc3RhcnQsIGJ1ZmZlci5sZW5ndGgpOwogICAgIH0KIAot
ICAgIHN0YXRpYyBib29sIGVxdWFsKFN0cmluZ0ltcGwqIGNvbnN0JiBzdHJpbmcsIGNvbnN0IFN1
YnN0cmluZ0xvY2F0aW9uJiBidWZmZXIpCisgICAgc3RhdGljIGJvb2wgZXF1YWwoUGFja2VkUHRy
PFN0cmluZ0ltcGw+IGNvbnN0JiBzdHJpbmcsIGNvbnN0IFN1YnN0cmluZ0xvY2F0aW9uJiBidWZm
ZXIpCiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjplcXVhbChzdHJpbmcsIGJ1ZmZlci5iYXNl
U3RyaW5nLT5jaGFyYWN0ZXJzOCgpICsgYnVmZmVyLnN0YXJ0LCBidWZmZXIubGVuZ3RoKTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6ZXF1YWwoc3RyaW5nLmdldCgpLCBidWZmZXIuYmFzZVN0cmluZy0+
Y2hhcmFjdGVyczgoKSArIGJ1ZmZlci5zdGFydCwgYnVmZmVyLmxlbmd0aCk7CiAgICAgfQogfTsK
IApAQCAtMjkyLDkgKzI5Nyw5IEBAIHN0cnVjdCBTdWJzdHJpbmdUcmFuc2xhdG9yMTYgOiBTdWJz
dHJpbmdUcmFuc2xhdG9yIHsKICAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhh
c2hBbmRNYXNrVG9wOEJpdHMoYnVmZmVyLmJhc2VTdHJpbmctPmNoYXJhY3RlcnMxNigpICsgYnVm
ZmVyLnN0YXJ0LCBidWZmZXIubGVuZ3RoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBlcXVh
bChTdHJpbmdJbXBsKiBjb25zdCYgc3RyaW5nLCBjb25zdCBTdWJzdHJpbmdMb2NhdGlvbiYgYnVm
ZmVyKQorICAgIHN0YXRpYyBib29sIGVxdWFsKFBhY2tlZFB0cjxTdHJpbmdJbXBsPiBjb25zdCYg
c3RyaW5nLCBjb25zdCBTdWJzdHJpbmdMb2NhdGlvbiYgYnVmZmVyKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIFdURjo6ZXF1YWwoc3RyaW5nLCBidWZmZXIuYmFzZVN0cmluZy0+Y2hhcmFjdGVyczE2
KCkgKyBidWZmZXIuc3RhcnQsIGJ1ZmZlci5sZW5ndGgpOworICAgICAgICByZXR1cm4gV1RGOjpl
cXVhbChzdHJpbmcuZ2V0KCksIGJ1ZmZlci5iYXNlU3RyaW5nLT5jaGFyYWN0ZXJzMTYoKSArIGJ1
ZmZlci5zdGFydCwgYnVmZmVyLmxlbmd0aCk7CiAgICAgfQogfTsKIApAQCAtMzI2LDE2ICszMzEs
MTcgQEAgc3RydWN0IExDaGFyQnVmZmVyVHJhbnNsYXRvciB7CiAgICAgICAgIHJldHVybiBidWYu
aGFzaDsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiBjb25zdCYg
c3RyLCBjb25zdCBMQ2hhckJ1ZmZlciYgYnVmKQorICAgIHN0YXRpYyBib29sIGVxdWFsKFBhY2tl
ZFB0cjxTdHJpbmdJbXBsPiBjb25zdCYgc3RyLCBjb25zdCBMQ2hhckJ1ZmZlciYgYnVmKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIFdURjo6ZXF1YWwoc3RyLCBidWYuY2hhcmFjdGVycywgYnVmLmxl
bmd0aCk7CisgICAgICAgIHJldHVybiBXVEY6OmVxdWFsKHN0ci5nZXQoKSwgYnVmLmNoYXJhY3Rl
cnMsIGJ1Zi5sZW5ndGgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJp
bmdJbXBsKiYgbG9jYXRpb24sIGNvbnN0IExDaGFyQnVmZmVyJiBidWYsIHVuc2lnbmVkIGhhc2gp
CisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFBhY2tlZFB0cjxTdHJpbmdJbXBsPiYgbG9jYXRp
b24sIGNvbnN0IExDaGFyQnVmZmVyJiBidWYsIHVuc2lnbmVkIGhhc2gpCiAgICAgewotICAgICAg
ICBsb2NhdGlvbiA9ICZTdHJpbmdJbXBsOjpjcmVhdGUoYnVmLmNoYXJhY3RlcnMsIGJ1Zi5sZW5n
dGgpLmxlYWtSZWYoKTsKLSAgICAgICAgbG9jYXRpb24tPnNldEhhc2goaGFzaCk7Ci0gICAgICAg
IGxvY2F0aW9uLT5zZXRJc0F0b20odHJ1ZSk7CisgICAgICAgIGF1dG8qIHBvaW50ZXIgPSAmU3Ry
aW5nSW1wbDo6Y3JlYXRlKGJ1Zi5jaGFyYWN0ZXJzLCBidWYubGVuZ3RoKS5sZWFrUmVmKCk7Cisg
ICAgICAgIHBvaW50ZXItPnNldEhhc2goaGFzaCk7CisgICAgICAgIHBvaW50ZXItPnNldElzQXRv
bSh0cnVlKTsKKyAgICAgICAgbG9jYXRpb24gPSBwb2ludGVyOwogICAgIH0KIH07CiAKQEAgLTM0
NywxNiArMzUzLDE3IEBAIHN0cnVjdCBCdWZmZXJGcm9tU3RhdGljRGF0YVRyYW5zbGF0b3Igewog
ICAgICAgICByZXR1cm4gYnVmLmhhc2g7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZXF1YWwo
U3RyaW5nSW1wbCogY29uc3QmIHN0ciwgY29uc3QgQnVmZmVyJiBidWYpCisgICAgc3RhdGljIGJv
b2wgZXF1YWwoUGFja2VkUHRyPFN0cmluZ0ltcGw+IGNvbnN0JiBzdHIsIGNvbnN0IEJ1ZmZlciYg
YnVmKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6ZXF1YWwoc3RyLCBidWYuY2hhcmFjdGVy
cywgYnVmLmxlbmd0aCk7CisgICAgICAgIHJldHVybiBXVEY6OmVxdWFsKHN0ci5nZXQoKSwgYnVm
LmNoYXJhY3RlcnMsIGJ1Zi5sZW5ndGgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHRyYW5z
bGF0ZShTdHJpbmdJbXBsKiYgbG9jYXRpb24sIGNvbnN0IEJ1ZmZlciYgYnVmLCB1bnNpZ25lZCBo
YXNoKQorICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShQYWNrZWRQdHI8U3RyaW5nSW1wbD4mIGxv
Y2F0aW9uLCBjb25zdCBCdWZmZXImIGJ1ZiwgdW5zaWduZWQgaGFzaCkKICAgICB7Ci0gICAgICAg
IGxvY2F0aW9uID0gJlN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKGJ1Zi5jaGFyYWN0
ZXJzLCBidWYubGVuZ3RoKS5sZWFrUmVmKCk7Ci0gICAgICAgIGxvY2F0aW9uLT5zZXRIYXNoKGhh
c2gpOwotICAgICAgICBsb2NhdGlvbi0+c2V0SXNBdG9tKHRydWUpOworICAgICAgICBhdXRvKiBw
b2ludGVyID0gJlN0cmluZ0ltcGw6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKGJ1Zi5jaGFyYWN0ZXJz
LCBidWYubGVuZ3RoKS5sZWFrUmVmKCk7CisgICAgICAgIHBvaW50ZXItPnNldEhhc2goaGFzaCk7
CisgICAgICAgIHBvaW50ZXItPnNldElzQXRvbSh0cnVlKTsKKyAgICAgICAgbG9jYXRpb24gPSBw
b2ludGVyOwogICAgIH0KIH07CiAKQEAgLTQ0MywxMSArNDUwLDExIEBAIFJlZjxBdG9tU3RyaW5n
SW1wbD4gQXRvbVN0cmluZ0ltcGw6OmFkZFNsb3dDYXNlKFN0cmluZ0ltcGwmIHN0cmluZykKICAg
ICBhdXRvIGFkZFJlc3VsdCA9IHN0cmluZ1RhYmxlKCkuYWRkKCZzdHJpbmcpOwogCiAgICAgaWYg
KGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVCgqYWRkUmVzdWx0Lml0ZXJh
dG9yID09ICZzdHJpbmcpOworICAgICAgICBBU1NFUlQoYWRkUmVzdWx0Lml0ZXJhdG9yLT5nZXQo
KSA9PSAmc3RyaW5nKTsKICAgICAgICAgc3RyaW5nLnNldElzQXRvbSh0cnVlKTsKICAgICB9CiAK
LSAgICByZXR1cm4gKnN0YXRpY19jYXN0PEF0b21TdHJpbmdJbXBsKj4oKmFkZFJlc3VsdC5pdGVy
YXRvcik7CisgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxBdG9tU3RyaW5nSW1wbCo+KGFkZFJlc3Vs
dC5pdGVyYXRvci0+Z2V0KCkpOwogfQogCiBSZWY8QXRvbVN0cmluZ0ltcGw+IEF0b21TdHJpbmdJ
bXBsOjphZGRTbG93Q2FzZShBdG9tU3RyaW5nVGFibGUmIHN0cmluZ1RhYmxlLCBTdHJpbmdJbXBs
JiBzdHJpbmcpCkBAIC00NzMsMTEgKzQ4MCwxMSBAQCBSZWY8QXRvbVN0cmluZ0ltcGw+IEF0b21T
dHJpbmdJbXBsOjphZGRTbG93Q2FzZShBdG9tU3RyaW5nVGFibGUmIHN0cmluZ1RhYmxlLCBTdAog
ICAgIGF1dG8gYWRkUmVzdWx0ID0gc3RyaW5nVGFibGUudGFibGUoKS5hZGQoJnN0cmluZyk7CiAK
ICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgQVNTRVJUKCphZGRSZXN1
bHQuaXRlcmF0b3IgPT0gJnN0cmluZyk7CisgICAgICAgIEFTU0VSVChhZGRSZXN1bHQuaXRlcmF0
b3ItPmdldCgpID09ICZzdHJpbmcpOwogICAgICAgICBzdHJpbmcuc2V0SXNBdG9tKHRydWUpOwog
ICAgIH0KIAotICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8QXRvbVN0cmluZ0ltcGwqPigqYWRkUmVz
dWx0Lml0ZXJhdG9yKTsKKyAgICByZXR1cm4gKnN0YXRpY19jYXN0PEF0b21TdHJpbmdJbXBsKj4o
YWRkUmVzdWx0Lml0ZXJhdG9yLT5nZXQoKSk7CiB9CiAKIHZvaWQgQXRvbVN0cmluZ0ltcGw6OnJl
bW92ZShBdG9tU3RyaW5nSW1wbCogc3RyaW5nKQpAQCAtNDg3LDcgKzQ5NCw3IEBAIHZvaWQgQXRv
bVN0cmluZ0ltcGw6OnJlbW92ZShBdG9tU3RyaW5nSW1wbCogc3RyaW5nKQogICAgIGF1dG8mIGF0
b21TdHJpbmdUYWJsZSA9IHN0cmluZ1RhYmxlKCk7CiAgICAgYXV0byBpdGVyYXRvciA9IGF0b21T
dHJpbmdUYWJsZS5maW5kKHN0cmluZyk7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyYXRv
ciAhPSBhdG9tU3RyaW5nVGFibGUuZW5kKCksICJUaGUgc3RyaW5nIGJlaW5nIHJlbW92ZWQgaXMg
YW4gYXRvbSBpbiB0aGUgc3RyaW5nIHRhYmxlIG9mIGFuIG90aGVyIHRocmVhZCEiKTsKLSAgICBB
U1NFUlQoc3RyaW5nID09ICppdGVyYXRvcik7CisgICAgQVNTRVJUKHN0cmluZyA9PSBpdGVyYXRv
ci0+Z2V0KCkpOwogICAgIGF0b21TdHJpbmdUYWJsZS5yZW1vdmUoaXRlcmF0b3IpOwogfQogCkBA
IC01MDIsNyArNTA5LDcgQEAgUmVmUHRyPEF0b21TdHJpbmdJbXBsPiBBdG9tU3RyaW5nSW1wbDo6
bG9va1VwU2xvd0Nhc2UoU3RyaW5nSW1wbCYgc3RyaW5nKQogICAgIGF1dG8mIGF0b21TdHJpbmdU
YWJsZSA9IHN0cmluZ1RhYmxlKCk7CiAgICAgYXV0byBpdGVyYXRvciA9IGF0b21TdHJpbmdUYWJs
ZS5maW5kKCZzdHJpbmcpOwogICAgIGlmIChpdGVyYXRvciAhPSBhdG9tU3RyaW5nVGFibGUuZW5k
KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdG9tU3RyaW5nSW1wbCo+KCppdGVyYXRv
cik7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdG9tU3RyaW5nSW1wbCo+KGl0ZXJhdG9y
LT5nZXQoKSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTUyNiw3ICs1MzMsNyBAQCBS
ZWZQdHI8QXRvbVN0cmluZ0ltcGw+IEF0b21TdHJpbmdJbXBsOjpsb29rVXAoY29uc3QgTENoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkCiAgICAgTENoYXJCdWZmZXIgYnVmZmVyID0geyBjaGFyYWN0
ZXJzLCBsZW5ndGggfTsKICAgICBhdXRvIGl0ZXJhdG9yID0gdGFibGUuZmluZDxMQ2hhckJ1ZmZl
clRyYW5zbGF0b3I+KGJ1ZmZlcik7CiAgICAgaWYgKGl0ZXJhdG9yICE9IHRhYmxlLmVuZCgpKQot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbVN0cmluZ0ltcGwqPigqaXRlcmF0b3IpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbVN0cmluZ0ltcGwqPihpdGVyYXRvci0+Z2V0
KCkpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC01MzgsNyArNTQ1LDcgQEAgUmVmUHRy
PEF0b21TdHJpbmdJbXBsPiBBdG9tU3RyaW5nSW1wbDo6bG9va1VwKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZAogICAgIFVDaGFyQnVmZmVyIGJ1ZmZlciB7IGNoYXJhY3RlcnMsIGxl
bmd0aCB9OwogICAgIGF1dG8gaXRlcmF0b3IgPSB0YWJsZS5maW5kPFVDaGFyQnVmZmVyVHJhbnNs
YXRvcj4oYnVmZmVyKTsKICAgICBpZiAoaXRlcmF0b3IgIT0gdGFibGUuZW5kKCkpCi0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxBdG9tU3RyaW5nSW1wbCo+KCppdGVyYXRvcik7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxBdG9tU3RyaW5nSW1wbCo+KGl0ZXJhdG9yLT5nZXQoKSk7CiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
QXRvbVN0cmluZ1RhYmxlLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxl
LmNwcAppbmRleCBjMTM4MjUyOGQxMDkwOTA1ZjQ5MTE3MWQyMzliNTJkM2NjYTE5ZjE3Li40ZmUx
MjcyYzU0NmFjNTc5YjE2NGI5ZWU4NGM0NDJiYTRhMjhjN2RhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4
dC9BdG9tU3RyaW5nVGFibGUuY3BwCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVzcGFjZSBXVEYgewog
CiBBdG9tU3RyaW5nVGFibGU6On5BdG9tU3RyaW5nVGFibGUoKQogewotICAgIGZvciAoYXV0byog
c3RyaW5nIDogbV90YWJsZSkKKyAgICBmb3IgKGNvbnN0IFBhY2tlZFB0cjxTdHJpbmdJbXBsPiYg
c3RyaW5nIDogbV90YWJsZSkKICAgICAgICAgc3RyaW5nLT5zZXRJc0F0b20oZmFsc2UpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oIGIvU291
cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaAppbmRleCAyNGM2MGIxZmIyZDdlOGZi
ODk0MmU2NTAzMzkzZTQ4NDcxNjk1NjljLi4yZjA4OWNlOTYwODFhYTZjN2U1OGMxYmMxMmM0ZTMw
NDUxMTNhNTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJs
ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmgKQEAgLTIzLDYg
KzIzLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvUGFja2VkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCiBu
YW1lc3BhY2UgV1RGIHsKQEAgLTM0LDEwICszNSwxMCBAQCBjbGFzcyBBdG9tU3RyaW5nVGFibGUg
ewogcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+QXRvbVN0cmluZ1RhYmxlKCk7CiAK
LSAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPiYgdGFibGUoKSB7IHJldHVybiBtX3RhYmxlOyB9Cisg
ICAgSGFzaFNldDxQYWNrZWRQdHI8U3RyaW5nSW1wbD4+JiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFi
bGU7IH0KIAogcHJpdmF0ZToKLSAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPiBtX3RhYmxlOworICAg
IEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PiBtX3RhYmxlOwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmggYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1N0cmluZ0hhc2guaAppbmRleCBmOTU5NjE5OGE4ZDc2ZWMxMzNjYzYyZDJlZmNkNTRjNDdm
NmM1MGM1Li4xNmRiYTliMWRhYTM5YmJjYTNmOWVkOTkzYjU1MmQwM2UwY2U3OGMyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0hhc2guaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0hhc2guaApAQCAtNTYsNiArNTYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFJlZlB0cjxTdHJp
bmdJbXBsPiYga2V5KSB7IHJldHVybiBrZXktPmhhc2goKTsgfQorICAgICAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBQYWNrZWRQdHI8U3RyaW5nSW1wbD4mIGtleSkgeyByZXR1cm4ga2V5
LT5oYXNoKCk7IH0KICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUmVmUHRyPFN0cmlu
Z0ltcGw+JiBhLCBjb25zdCBSZWZQdHI8U3RyaW5nSW1wbD4mIGIpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJldHVybiBlcXVhbChhLmdldCgpLCBiLmdldCgpKTsKQEAgLTY5LDYgKzcwLDE5IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICAgICAgcmV0dXJuIGVxdWFsKGEsIGIuZ2V0KCkpOwog
ICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUGFja2VkUHRyPFN0
cmluZ0ltcGw+JiBhLCBjb25zdCBQYWNrZWRQdHI8U3RyaW5nSW1wbD4mIGIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBlcXVhbChhLmdldCgpLCBiLmdldCgpKTsKKyAgICAgICAgfQor
ICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQYWNrZWRQdHI8U3RyaW5nSW1wbD4mIGEs
IGNvbnN0IFN0cmluZ0ltcGwqIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcXVh
bChhLmdldCgpLCBiKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBTdHJpbmdJbXBsKiBhLCBjb25zdCBQYWNrZWRQdHI8U3RyaW5nSW1wbD4mIGIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBlcXVhbChhLCBiLmdldCgpKTsKKyAgICAgICAgfQorCiAg
ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFN0cmluZyYga2V5KSB7IHJldHVybiBr
ZXkuaW1wbCgpLT5oYXNoKCk7IH0KICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3Ry
aW5nJiBhLCBjb25zdCBTdHJpbmcmIGIpCiAgICAgICAgIHsKQEAgLTEzNSw2ICsxNDksMTYgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICByZXR1cm4gZXF1YWwoYS5nZXQoKSwgYi5nZXQo
KSk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQYWNr
ZWRQdHI8U3RyaW5nSW1wbD4mIGtleSkgCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBo
YXNoKGtleS5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBQYWNrZWRQdHI8U3RyaW5nSW1wbD4mIGEsIGNvbnN0IFBhY2tlZFB0cjxTdHJpbmdJbXBs
PiYgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVxdWFsKGEuZ2V0KCksIGIuZ2V0
KCkpOworICAgICAgICB9CisKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU3Ry
aW5nJiBrZXkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBoYXNoKGtleS5pbXBsKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmggYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAppbmRleCBjMzRlNGFlMTNmZWFhYjAzZTBhNGU5MmM2
NzRlYTE3YzY5N2NjOTI4Li44ZmIxOTZmY2NlMTk1ZTU2Mzc5ZmVlMWNiYWQ4NmY0YjdiNTVlYjFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUg
PHd0Zi9EZWJ1Z0hlYXAuaD4KICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9QYWNrZWQuaD4KICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0FTQ0lJRmFzdFBhdGguaD4KQEAgLTU5OCw2ICs1OTksOSBAQCB0ZW1wbGF0ZTw+IHN0cnVj
dCBEZWZhdWx0SGFzaDxTdHJpbmdJbXBsKj4gewogdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhh
c2g8UmVmUHRyPFN0cmluZ0ltcGw+PiB7CiAgICAgdHlwZWRlZiBTdHJpbmdIYXNoIEhhc2g7CiB9
OwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8UGFja2VkUHRyPFN0cmluZ0ltcGw+PiB7
CisgICAgdXNpbmcgSGFzaCA9IFN0cmluZ0hhc2g7Cit9OwogCiAjZGVmaW5lIE1BS0VfU1RBVElD
X1NUUklOR19JTVBMKGNoYXJhY3RlcnMpIChbXSB7IFwKICAgICAgICAgc3RhdGljIFN0YXRpY1N0
cmluZ0ltcGwgaW1wbChjaGFyYWN0ZXJzKTsgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0dDUmVhY2hhYmxlUmVmLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vR0NSZWFjaGFibGVSZWYu
aAppbmRleCA5OTdiYzVlNWM3NzViYTY1NzBjZDQ4NGE3MjQ5NDkzNzVlYzE2ZTE5Li44NDhhYzdi
ZTYyYWYzZTIwOTAzZjYxZmI0ZmQ3MjdlZDE5ODg3ZTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vR0NSZWFjaGFibGVSZWYuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vR0NSZWFj
aGFibGVSZWYuaApAQCAtNzQsNyArNzQsNyBAQCBjbGFzcyBHQ1JlYWNoYWJsZVJlZiB7CiAKICAg
ICAvLyBIYXNoIHRhYmxlIGRlbGV0ZWQgdmFsdWVzLCB3aGljaCBhcmUgb25seSBjb25zdHJ1Y3Rl
ZCBhbmQgbmV2ZXIgY29waWVkIG9yIGRlc3Ryb3llZC4KICAgICBHQ1JlYWNoYWJsZVJlZihXVEY6
Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9wdHIoUmVmUHRyPFQ+Ojpo
YXNoVGFibGVEZWxldGVkVmFsdWUoKSkKKyAgICAgICAgOiBtX3B0cihSZWZQdHI8VD46OlB0clRy
YWl0czo6aGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCiAgICAgeyB9CiAgICAgYm9vbCBpc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyLmlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5h
bWUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmgKaW5kZXggN2Q4MGI2MjY4
MDRhMzdhNDE3Mjg2ZmU1MzNiZWY0ZDM1ZjIzNWFiMi4uMzNmNzNjZTE2ZWNhOWY4ZGVmOGQ5MmZm
NTg0Y2UzMzBhMzgwOGExYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmll
ZE5hbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5oCkBAIC0xMDQs
NyArMTA0LDcgQEAgY2xhc3MgUXVhbGlmaWVkTmFtZSB7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIHZvaWQgaW5pdCgpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lSW1w
bCogaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gUmVmUHRyPFF1YWxpZmllZE5hbWVJ
bXBsPjo6aGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFt
ZUltcGwqIGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIFJlZlB0cjxRdWFsaWZpZWRO
YW1lSW1wbD46OlB0clRyYWl0czo6aGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KICAgICAKICAg
ICBSZWZQdHI8UXVhbGlmaWVkTmFtZUltcGw+IG1faW1wbDsKIH07CmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzAzM2ZhNGRlN2ZlMTFiMjI2YzVl
ZGM0NmQ5NmNmODhiMGE5ZDUyZi4uNmY0MWRhZmYwNzg3MGM0ZThkZjk1YTg4ODA4OGMxMzFiZjli
ZDZmMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE1IEBACisyMDIwLTAxLTE2ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBs
ZS5jb20+CisKKyAgICAgICAgW1dURl0gQXRvbVN0cmluZ1RhYmxlIHNob3VsZCBiZSBzbWFsbAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NDAwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMjAtMDEtMTYgIEtlaXRoIE1pbGxlciAg
PGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmVsYW5kIGJ5dGVjb2RlIGNoZWNr
cG9pbnRzIHNpbmNlIGJ1Z3MgaGF2ZSBiZWVuIGZpeGVkCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0hhc2hNYXAuY3BwCmluZGV4IGE3MGMxNjM1NmI2YzFkMjY5NjdmNzVjNjkxMGJjMWMw
MTQ2MjRmOGYuLjY2YjU1NzQyYjNlNTM5MjViOGE1NDU5YzhhNGM2MjY2Y2M1MWMxMWEgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwCkBAIC03MTYsNyArNzE2LDcg
QEAgVEVTVChXVEZfSGFzaE1hcCwgUmVmUHRyTm90WmVyb2VkQmVmb3JlRGVyZWYpCiAgICAgLy8g
dmFsdWUuCiAgICAgLy8gQSB6ZXJvIHdvdWxkIGJlIGEgaW5jb3JyZWN0IG91dGNvbWUgYXMgaXQg
d291bGQgbWVhbiB3ZSBudWxsZWQgdGhlIGJ1Y2tldCBiZWZvcmUgYW4gb3BhcXVlCiAgICAgLy8g
Y2FsbC4KLSAgICBFWFBFQ1RfVFJVRShvYnNlcnZlci0+b2JzZXJ2ZWRCdWNrZXQgPT0gb2JzZXJ2
ZXIuZ2V0KCkgfHwgb2JzZXJ2ZXItPm9ic2VydmVkQnVja2V0ID09IFJlZlB0cjxEZXJlZk9ic2Vy
dmVyPjo6aGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpOworICAgIEVYUEVDVF9UUlVFKG9ic2VydmVy
LT5vYnNlcnZlZEJ1Y2tldCA9PSBvYnNlcnZlci5nZXQoKSB8fCBvYnNlcnZlci0+b2JzZXJ2ZWRC
dWNrZXQgPT0gUmVmUHRyPERlcmVmT2JzZXJ2ZXI+OjpQdHJUcmFpdHM6Omhhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpKTsKICAgICBFWFBFQ1RfRVEob2JzZXJ2ZXItPmNvdW50LCAwdSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAKaW5kZXggZTY2YjljNzdlNzA1
Nzg0ZGE0NjFmZTEyNzA4ZDcxMDNkNzg1YzNhYS4uNDRlMjE3ZTBlMTAwMWMzZjFlZWI1NjU4ZjBj
ODkzZGIzYzIzYWI2NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
SGFzaFNldC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5j
cHAKQEAgLTMxNSw3ICszMTUsNyBAQCBURVNUKFdURl9IYXNoU2V0LCBSZWZQdHJOb3RaZXJvZWRC
ZWZvcmVEZXJlZikKICAgICAvLyB2YWx1ZS4KICAgICAvLyBBIHplcm8gd291bGQgYmUgYSBpbmNv
cnJlY3Qgb3V0Y29tZSBhcyBpdCB3b3VsZCBtZWFuIHdlIG51bGxlZCB0aGUgYnVja2V0IGJlZm9y
ZSBhbiBvcGFxdWUKICAgICAvLyBjYWxsLgotICAgIEVYUEVDVF9UUlVFKG9ic2VydmVyLT5vYnNl
cnZlZEJ1Y2tldCA9PSBvYnNlcnZlci5nZXQoKSB8fCBvYnNlcnZlci0+b2JzZXJ2ZWRCdWNrZXQg
PT0gUmVmUHRyPERlcmVmT2JzZXJ2ZXI+OjpoYXNoVGFibGVEZWxldGVkVmFsdWUoKSk7CisgICAg
RVhQRUNUX1RSVUUob2JzZXJ2ZXItPm9ic2VydmVkQnVja2V0ID09IG9ic2VydmVyLmdldCgpIHx8
IG9ic2VydmVyLT5vYnNlcnZlZEJ1Y2tldCA9PSBSZWZQdHI8RGVyZWZPYnNlcnZlcj46OlB0clRy
YWl0czo6aGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpOwogICAgIEVYUEVDVF9FUShvYnNlcnZlci0+
Y291bnQsIDB1KTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388138</attachid>
            <date>2020-01-18 01:00:57 -0800</date>
            <delta_ts>2020-01-18 01:01:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206400-20200118010056.patch</filename>
            <type>text/plain</type>
            <size>32062</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGE4YjFhNDY2NzQ0NjM1OWZiZjZkM2Rh
ZDliM2MyYTJiYzI4NjhmM2EuLjY5NGJlNzU0YmRkY2I4NjkxOTliMDBlZjZjYzkxN2E3ZmMzZTk5
ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNzIgQEAKKzIwMjAtMDEtMTggIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBBdG9tU3RyaW5nVGFibGUgc2hvdWxkIGJl
IHNtYWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDY0MDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
dG9tU3RyaW5nVGFibGUgaXMgdGhlIGxhcmdlc3QgaGFzaHRhYmxlIHR5cGljYWxseS4gSXQgdGFr
ZXMgbW9yZQorICAgICAgICB0aGFuIDI1NktCIHBlciBXZWJQcm9jZXNzIChzb21ldGltZXMsIGl0
IHRvb2sgMU1CIG9yIG1vcmUpLgorICAgICAgICBUaGlzIHBhdGNoIGxldmVyYWdlcyBQYWNrZWRQ
dHIgdG8gY29tcGFjdCBpdCBmcm9tIDggYnl0ZXMgcGVyIGVudHJ5CisgICAgICAgIHRvIDYgYnl0
ZXMgcGVyIGVudHJ5LgorCisgICAgICAgIFdoaWxlIHRoaXMgaXMgc3RpbGwgbGFyZ2UsIHdlIHNo
b3VsZCBpbnZlc3RpZ2F0ZSBob3cgdG8gY29tcGFjdCBDKysKKyAgICAgICAgcG9pbnRlcnMgaW4g
NCBieXRlc1sxXSB0byBzaHJpbmsgbWVtb3J5IGZvb3RwcmludCwgc2luY2UgV2ViS2l0CisgICAg
ICAgIG1lbW9yeSBpcyB1c2VkIGJ5IFZlY3RvciBhbmQgSGFzaFRhYmxlIGZ1bGZpbGxlZCB3aXRo
IHBvaW50ZXJzLgorCisgICAgICAgIFsxXTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNjQwMAorCisgICAgICAgICogd3RmL0R1bWJQdHJUcmFpdHMuaDoKKyAgICAg
ICAgKFdURjo6RHVtYlB0clRyYWl0czo6aGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAg
KFdURjo6RHVtYlB0clRyYWl0czo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAq
IHd0Zi9Gb3J3YXJkLmg6CisgICAgICAgICogd3RmL0hhc2hUcmFpdHMuaDoKKyAgICAgICAgKiB3
dGYvUGFja2VkLmg6CisgICAgICAgIChXVEY6OlBhY2tlZDxUOjpQYWNrZWQpOgorICAgICAgICAo
V1RGOjpQYWNrZWQ8VDo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAo
V1RGOjpHZXRQdHJIZWxwZXI8UGFja2VkUHRyPFQ+Pjo6Z2V0UHRyKToKKyAgICAgICAgKFdURjo6
UGFja2VkUHRyVHJhaXRzOjpoYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoV1RGOjpQ
YWNrZWRQdHJUcmFpdHM6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdURjo6
YWxpZ25vZik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1JlZi5oOgorICAgICAgICAoV1RGOjpS
ZWY6OlJlZik6CisgICAgICAgIChXVEY6OlJlZjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29u
c3QpOgorICAgICAgICAoV1RGOjpSZWY6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6IERlbGV0ZWQu
CisgICAgICAgICogd3RmL1JlZlB0ci5oOgorICAgICAgICAoV1RGOjpSZWZQdHI6OlJlZlB0cik6
CisgICAgICAgIChXVEY6OlJlZlB0cjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgor
ICAgICAgICAoV1RGOjpSZWZQdHI6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6IERlbGV0ZWQuCisg
ICAgICAgICogd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RGOjphZGRU
b1N0cmluZ1RhYmxlKToKKyAgICAgICAgKFdURjo6Q1N0cmluZ1RyYW5zbGF0b3I6OmVxdWFsKToK
KyAgICAgICAgKFdURjo6Q1N0cmluZ1RyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAgIChX
VEY6OlVDaGFyQnVmZmVyVHJhbnNsYXRvcjo6ZXF1YWwpOgorICAgICAgICAoV1RGOjpVQ2hhckJ1
ZmZlclRyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXVEY6Okhhc2hBbmRVVEY4Q2hh
cmFjdGVyc1RyYW5zbGF0b3I6OmVxdWFsKToKKyAgICAgICAgKFdURjo6SGFzaEFuZFVURjhDaGFy
YWN0ZXJzVHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdURjo6U3Vic3RyaW5nVHJh
bnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdURjo6U3Vic3RyaW5nVHJhbnNsYXRvcjg6
OmVxdWFsKToKKyAgICAgICAgKFdURjo6U3Vic3RyaW5nVHJhbnNsYXRvcjE2OjplcXVhbCk6Cisg
ICAgICAgIChXVEY6OkxDaGFyQnVmZmVyVHJhbnNsYXRvcjo6ZXF1YWwpOgorICAgICAgICAoV1RG
OjpMQ2hhckJ1ZmZlclRyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXVEY6OkJ1ZmZl
ckZyb21TdGF0aWNEYXRhVHJhbnNsYXRvcjo6ZXF1YWwpOgorICAgICAgICAoV1RGOjpCdWZmZXJG
cm9tU3RhdGljRGF0YVRyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXVEY6OkF0b21T
dHJpbmdJbXBsOjphZGRTbG93Q2FzZSk6CisgICAgICAgIChXVEY6OkF0b21TdHJpbmdJbXBsOjpy
ZW1vdmUpOgorICAgICAgICAoV1RGOjpBdG9tU3RyaW5nSW1wbDo6bG9va1VwU2xvd0Nhc2UpOgor
ICAgICAgICAoV1RGOjpBdG9tU3RyaW5nSW1wbDo6bG9va1VwKToKKyAgICAgICAgKiB3dGYvdGV4
dC9BdG9tU3RyaW5nVGFibGUuY3BwOgorICAgICAgICAoV1RGOjpBdG9tU3RyaW5nVGFibGU6On5B
dG9tU3RyaW5nVGFibGUpOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oOgor
ICAgICAgICAoV1RGOjpBdG9tU3RyaW5nVGFibGU6OnRhYmxlKToKKyAgICAgICAgKCk6IERlbGV0
ZWQuCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSGFzaC5oOgorICAgICAgICAoV1RGOjpTdHJp
bmdIYXNoOjpoYXNoKToKKyAgICAgICAgKFdURjo6U3RyaW5nSGFzaDo6ZXF1YWwpOgorICAgICAg
ICAoV1RGOjpBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhhc2gpOgorICAgICAgICAoV1RGOjpB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6OmVxdWFsKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJp
bmdJbXBsLmg6CisKIDIwMjAtMDEtMTYgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmVsYW5kIGJ5dGVjb2RlIGNoZWNrcG9pbnRzIHNpbmNlIGJ1Z3Mg
aGF2ZSBiZWVuIGZpeGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjQ1YTcxNDBjNTY3YWQ3ZThmYTRiMmYzYzdl
N2VjYzE5ODkyNzBlMS4uYTA4NzExMDZkZmQwNzhkMmRkNDM3OTlhODE3YjgyNjMzNzk0OTA5YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTAxLTE4ICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gQXRvbVN0cmluZ1RhYmxlIHNob3Vs
ZCBiZSBzbWFsbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjA2NDAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBkb20vR0NSZWFjaGFibGVSZWYu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkdDUmVhY2hhYmxlUmVmOjpHQ1JlYWNoYWJsZVJlZik6Cisg
ICAgICAgICogZG9tL1F1YWxpZmllZE5hbWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlF1YWxpZmll
ZE5hbWU6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisKIDIwMjAtMDEtMTcgIENhdGhpZSBDaGVu
ICA8Y2F0aGllY2hlbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBzY3Jv
bGwgYmVoYXZpb3IgcGFyc2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvRHVtYlB0clRy
YWl0cy5oIGIvU291cmNlL1dURi93dGYvRHVtYlB0clRyYWl0cy5oCmluZGV4IDUxZGViYTc2YmZm
ZTAzZDVkYWJjMzdkNTc1MTM3MmUxNjIyNjM0NWYuLmY0NmFjNjdkYWI5ZDlkMTZlZmRiM2YyYWNh
MTY1NTQ5MjIyNTI4NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0R1bWJQdHJUcmFpdHMu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9EdW1iUHRyVHJhaXRzLmgKQEAgLTQxLDYgKzQxLDkgQEAg
c3RydWN0IER1bWJQdHJUcmFpdHMgewogCiAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBz
d2FwKFN0b3JhZ2VUeXBlJiBhLCBTdG9yYWdlVHlwZSYgYikgeyBzdGQ6OnN3YXAoYSwgYik7IH0K
ICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBUKiB1bndyYXAoY29uc3QgU3RvcmFnZVR5cGUmIHB0
cikgeyByZXR1cm4gcHRyOyB9CisKKyAgICBzdGF0aWMgU3RvcmFnZVR5cGUgaGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PFN0b3JhZ2VUeXBlPihzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KC0xKSk7IH0KKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKGNvbnN0IFN0b3JhZ2VUeXBlJiBwdHIpIHsgcmV0dXJuIHB0ciA9
PSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmggYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3
YXJkLmgKaW5kZXggZmUyZGQ0NTc4ODdlMDUwMTI1YTA5MzdlZmJjMjk3ZGIyZmNiZjFkZi4uNzBk
ZGI5MTZlNTBjNmUyODUyYjdmOWU0ZTBlM2E1OGY3MDNhOGYwZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvRm9yd2FyZC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaApAQCAtNjIs
NiArNjIsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgTGF6eU5ldmVyRGVzdHJveWVkOwog
dGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIE5ldmVyRGVzdHJveWVkOwogdGVtcGxhdGU8dHlwZW5h
bWU+IGNsYXNzIE9wdGlvblNldDsKIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBPcHRpb25hbDsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFBhY2tlZDsKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCA9IGFsaWdub2YoVCk+IGNsYXNzIFBhY2tlZEFsaWduZWRQdHI7CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSA9IER1bWJQdHJUcmFpdHM8VD4+IGNsYXNzIFJlZjsKIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gRHVtYlB0clRyYWl0czxUPj4gY2xhc3MgUmVmUHRy
OwogdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFN0cmluZ0J1ZmZlcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaApp
bmRleCA1NTJkNGI2ZmViMjkwNTljOWRlOGE4M2E1ZWIwMjE3MDkzYmFkNWY0Li44OWEzZjMzMTA0
OWFhNDMzMTEzZmRjNmQxMDY2M2QzYzc3YTdmMzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9IYXNoVHJhaXRzLmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaFRyYWl0cy5oCkBAIC0yMjAs
NiArMjIwLDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBSZWZIYXNoVHJhaXRzIDog
U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFJlZjxQPj4gewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBz
dHJ1Y3QgSGFzaFRyYWl0czxSZWY8UD4+IDogUmVmSGFzaFRyYWl0czxQPiB7IH07CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBIYXNoVHJhaXRzPFBhY2tlZDxQKj4+IDogU2ltcGxlQ2xh
c3NIYXNoVHJhaXRzPFBhY2tlZDxQKj4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFz
SXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOworICAgIHVzaW5nIFRhcmdldFR5cGUgPSBQYWNr
ZWQ8UCo+OworICAgIHN0YXRpY19hc3NlcnQoVGFyZ2V0VHlwZTo6YWxpZ25tZW50IDwgNCAqIEtC
LCAiVGhlIGZpcnN0IHBhZ2UgaXMgYWx3YXlzIHVubWFwcGVkIHNpbmNlIGl0IGluY2x1ZGVzIG51
bGxwdHIuIik7CisKKyAgICBzdGF0aWMgUGFja2VkPFAqPiBlbXB0eVZhbHVlKCkgeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgIHN0YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25zdCBUYXJnZXRUeXBl
JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuZ2V0KCkgPT0gbnVsbHB0cjsgfQorCisgICAgdXNpbmcg
UGVla1R5cGUgPSBQKjsKKyAgICBzdGF0aWMgUGVla1R5cGUgcGVlayhjb25zdCBUYXJnZXRUeXBl
JiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuZ2V0KCk7IH0KKyAgICBzdGF0aWMgUGVla1R5cGUgcGVl
ayhQKiB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KK307CisKIHRlbXBsYXRlPD4gc3RydWN0IEhh
c2hUcmFpdHM8U3RyaW5nPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxTdHJpbmc+IHsKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOwogICAg
IHN0YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25zdCBTdHJpbmcmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL1BhY2tlZC5oIGIvU291cmNlL1dURi93dGYvUGFja2VkLmgKaW5kZXggYjIy
ZmM3NjFkNDI5NzRiOTgxMjViYjdlN2QxYzJkMWY5YTU3ODMwOC4uZTkxYTUxMzAzNmFjM2E5ZDA0
NzUwODM1ZjEzNWFiZTVhNTc4ZTc5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFja2Vk
LmgKKysrIGIvU291cmNlL1dURi93dGYvUGFja2VkLmgKQEAgLTI2LDYgKzI2LDkgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvVW5hbGlnbmVkQWNjZXNzLmg+CkBAIC0xMDAsMTEgKzEwMywxMiBAQCBj
bGFzcyBQYWNrZWQgewogLy8gUGFja2VkQWxpZ25lZFB0ciBjYW4gdGFrZSBhbGlnbm1lbnQgcGFy
YW1ldGVyIHRvby4gUGFja2VkQWxpZ25lZFB0ciBvbmx5IHVzZXMgdGhpcyBhbGlnbm1lbnQgaW5m
b3JtYXRpb24gaWYgaXQgaXMgcHJvZml0YWJsZTogd2UgdXNlCiAvLyBhbGlnbm1lbnQgaW5mb3Jt
YXRpb24gb25seSB3aGVuIHdlIGNhbiByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIHN0b3JhZ2UuIFNp
bmNlIHRoZSBwb2ludGVyIHdpZHRoIGlzIDM2IGJpdHMgYW5kIEpTQ2VsbHMgYXJlIGFsaWduZWQg
dG8gMTYgYnl0ZXMsCiAvLyB3ZSBjYW4gdXNlIDQgYml0cyBpbiBEYXJ3aW4gQVJNNjQsIHdlIGNh
biBjb21wYWN0IGNlbGwgcG9pbnRlciBpbnRvIDQgYnl0ZXMgKDMyIGJpdHMpLgotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGFsaWdubWVudCA9IGFsaWdub2YoVCk+Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgcGFzc2VkQWxpZ25tZW50PgogY2xhc3MgUGFja2VkQWxpZ25lZFB0ciB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljX2Fzc2Vy
dChoYXNPbmVCaXRTZXQoYWxpZ25tZW50KSwgIkFsaWdubWVudCBuZWVkcyB0byBiZSBwb3dlci1v
Zi10d28iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGhhc09uZUJpdFNldChwYXNzZWRBbGlnbm1lbnQp
LCAiQWxpZ25tZW50IG5lZWRzIHRvIGJlIHBvd2VyLW9mLXR3byIpOworICAgIHN0YXRpYyBjb25z
dGV4cHIgc2l6ZV90IGFsaWdubWVudCA9IHBhc3NlZEFsaWdubWVudDsKICAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaXNQYWNrZWRUeXBlID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIGFsaWdubWVudFNoaWZ0U2l6ZUlmUHJvZml0YWJsZSA9IGdldExTQlNldENvbnN0ZXhw
cihhbGlnbm1lbnQpOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgc3RvcmFnZVNpemVX
aXRob3V0QWxpZ25tZW50U2hpZnQgPSByb3VuZFVwVG9NdWx0aXBsZU9mPDg+KFdURl9DUFVfRUZG
RUNUSVZFX0FERFJFU1NfV0lEVEgpIC8gODsKQEAgLTIxNSwxMSArMjE5LDI2IEBAIGNsYXNzIFBh
Y2tlZDxUKj4gOiBwdWJsaWMgUGFja2VkQWxpZ25lZFB0cjxULCAxPiB7CiBwdWJsaWM6CiAgICAg
dXNpbmcgQmFzZSA9IFBhY2tlZEFsaWduZWRQdHI8VCwgMT47CiAgICAgdXNpbmcgQmFzZTo6QmFz
ZTsKKworICAgIC8vIEhhc2ggdGFibGUgZGVsZXRlZCB2YWx1ZXMsIHdoaWNoIGFyZSBvbmx5IGNv
bnN0cnVjdGVkIGFuZCBuZXZlciBjb3BpZWQgb3IgZGVzdHJveWVkLgorICAgIFBhY2tlZChIYXNo
VGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IEJhc2UoYml0d2lzZV9jYXN0PFQqPihzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KEJhc2U6OmFsaWdubWVudCkpKSB7IH0KKyAgICBib29sIGlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gQmFzZTo6Z2V0KCkgPT0gYml0d2lzZV9jYXN0
PFQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KEJhc2U6OmFsaWdubWVudCkpOyB9CiB9OwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdXNpbmcgUGFja2VkUHRyID0gUGFja2VkPFQqPjsKIAordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgR2V0UHRySGVscGVyPFBhY2tlZFB0cjxUPj4gewor
ICAgIHVzaW5nIFB0clR5cGUgPSBUKjsKKyAgICBzdGF0aWMgVCogZ2V0UHRyKGNvbnN0IFBhY2tl
ZFB0cjxUPiYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocC5nZXQoKSk7IH0KK307CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IElzU21hcnRQdHI8UGFja2VkUHRyPFQ+PiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0gdHJ1ZTsKK307CisKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CiBzdHJ1Y3QgUGFja2VkUHRyVHJhaXRzIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiB1c2luZyBSZWJpbmRUcmFpdHMgPSBQYWNrZWRQdHJUcmFpdHM8VT47CkBAIC0yMzEsOCAr
MjUwLDE2IEBAIHN0cnVjdCBQYWNrZWRQdHJUcmFpdHMgewogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE90aGVyPiBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHN3YXAoUGFja2VkUHRyPFQ+JiBhLCBP
dGhlciYgYikgeyBhLnN3YXAoYik7IH0KIAogICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIFQqIHVu
d3JhcChjb25zdCBTdG9yYWdlVHlwZSYgcHRyKSB7IHJldHVybiBwdHIuZ2V0KCk7IH0KKworICAg
IC8vIFdlIGFzc3VtZSB0aGF0LAorICAgIC8vIDEuIFRoZSBhbGlnbm1lbnQgaXMgPCA0S0IuIChJ
dCBpcyB0ZXN0ZWQgYnkgSGFzaFRyYWl0cykuCisgICAgLy8gMi4gVGhlIGZpcnN0IHBhZ2UgKGlu
Y2x1ZGluZyBudWxscHRyKSBpcyBuZXZlciBtYXBwZWQuCisgICAgc3RhdGljIFN0b3JhZ2VUeXBl
IGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIFN0b3JhZ2VUeXBlIHsgYml0d2lzZV9j
YXN0PFQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KFN0b3JhZ2VUeXBlOjphbGlnbm1lbnQpKSB9
OyB9CisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZShjb25zdCBTdG9yYWdlVHlwZSYgcHRyKSB7IHJldHVybiBwdHIuZ2V0KCkgPT0gYml0d2lzZV9j
YXN0PFQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KFN0b3JhZ2VUeXBlOjphbGlnbm1lbnQpKTsg
fQogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgUD4gc3RydWN0IERlZmF1bHRIYXNoPFBhY2tlZFB0
cjxQPj4geyB1c2luZyBIYXNoID0gUHRySGFzaDxQYWNrZWRQdHI8UD4+OyB9OworCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpQYWNrZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9SZWYuaCBiL1NvdXJjZS9XVEYvd3RmL1JlZi5oCmluZGV4IDhlMWI3NDZkMThiM2JkOTU3
YzU3Y2QwZGIyYjMwNmE1MTk0YWVhYWUuLjFhYjgyMTFjMzViN2Q1N2Q5ODA4NmFlOTYxYWY2OTYw
N2I0OWY4MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZi5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1JlZi5oCkBAIC00NSw5ICs0NSwxMCBAQCBpbmxpbmUgdm9pZCBhZG9wdGVkKGNvbnN0
IHZvaWQqKSB7IH0KIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFB0clRyYWl0cz4gY2xh
c3MgUmVmOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHRyVHJhaXRzID0gRHVtYlB0
clRyYWl0czxUPj4gUmVmPFQsIFB0clRyYWl0cz4gYWRvcHRSZWYoVCYpOwogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBUcmFpdHM+CiBjbGFzcyBSZWYgewogcHVibGljOgorICAgIHVzaW5nIFB0clRyYWl0cyA9
IFRyYWl0czsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNSZWYgPSB0cnVlOwogCiAgICAg
flJlZigpCkBAIC05NCw5ICs5NSw4IEBAIGNsYXNzIFJlZiB7CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgWCwgdHlwZW5hbWUgWT4gdm9pZCBzd2FwKFJlZjxYLCBZPiYpOwogCiAgICAgLy8gSGFzaCB0
YWJsZSBkZWxldGVkIHZhbHVlcywgd2hpY2ggYXJlIG9ubHkgY29uc3RydWN0ZWQgYW5kIG5ldmVy
IGNvcGllZCBvciBkZXN0cm95ZWQuCi0gICAgUmVmKEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
IDogbV9wdHIoaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpIHsgfQotICAgIGJvb2wgaXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3B0ciA9PSBoYXNoVGFibGVEZWxldGVk
VmFsdWUoKTsgfQotICAgIHN0YXRpYyBUKiBoYXNoVGFibGVEZWxldGVkVmFsdWUoKSB7IHJldHVy
biByZWludGVycHJldF9jYXN0PFQqPigtMSk7IH0KKyAgICBSZWYoSGFzaFRhYmxlRGVsZXRlZFZh
bHVlVHlwZSkgOiBtX3B0cihQdHJUcmFpdHM6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKSB7IH0K
KyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gUHRyVHJh
aXRzOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZShtX3B0cik7IH0KIAogICAgIFJlZihIYXNoVGFi
bGVFbXB0eVZhbHVlVHlwZSkgOiBtX3B0cihoYXNoVGFibGVFbXB0eVZhbHVlKCkpIHsgfQogICAg
IGJvb2wgaXNIYXNoVGFibGVFbXB0eVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wdHIgPT0gaGFz
aFRhYmxlRW1wdHlWYWx1ZSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIu
aCBiL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCmluZGV4IDZkNGM2NDQ0ZTdlYWYxYWExZWFhZjQz
MjlhNWY2OThmMDkzZWQwYjYuLmRkYmEyNjZlNDFmY2Q5ZjU0ZTUwZjkyNjE0Y2MyMjNmMDZmMDVj
MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1JlZlB0ci5oCkBAIC00NCwxMCArNDQsMTEgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gQUxX
QVlTX0lOTElORSB2b2lkIGRlcmVmSWZOb3ROdWxsKFQqIHB0cikKICAgICAgICAgcHRyLT5kZXJl
ZigpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJUcmFpdHM+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CiBjbGFzcyBSZWZQdHIgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgorICAgIHVzaW5nIFB0clRyYWl0cyA9IFRy
YWl0czsKICAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOwogICAgIHR5cGVkZWYgVmFsdWVUeXBlKiBQ
dHJUeXBlOwogCkBAIC02Myw4ICs2NCw4IEBAIGNsYXNzIFJlZlB0ciB7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4gUmVmUHRyKFJlZjxYLCBZPiYmKTsKIAogICAgIC8vIEhh
c2ggdGFibGUgZGVsZXRlZCB2YWx1ZXMsIHdoaWNoIGFyZSBvbmx5IGNvbnN0cnVjdGVkIGFuZCBu
ZXZlciBjb3BpZWQgb3IgZGVzdHJveWVkLgotICAgIFJlZlB0cihIYXNoVGFibGVEZWxldGVkVmFs
dWVUeXBlKSA6IG1fcHRyKGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKSB7IH0KLSAgICBib29sIGlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wdHIgPT0gaGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCk7IH0KKyAgICBSZWZQdHIoSGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkg
OiBtX3B0cihQdHJUcmFpdHM6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKSB7IH0KKyAgICBib29s
IGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gUHRyVHJhaXRzOjppc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZShtX3B0cik7IH0KIAogICAgIEFMV0FZU19JTkxJTkUgflJlZlB0
cigpIHsgZGVyZWZJZk5vdE51bGwoUHRyVHJhaXRzOjpleGNoYW5nZShtX3B0ciwgbnVsbHB0cikp
OyB9CiAKQEAgLTk2LDggKzk3LDYgQEAgY2xhc3MgUmVmUHRyIHsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFgsIHR5cGVuYW1lIFk+IHZvaWQgc3dhcChSZWZQdHI8WCwgWT4mKTsKIAotICAgIHN0
YXRpYyBUKiBoYXNoVGFibGVEZWxldGVkVmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0
PFQqPigtMSk7IH0KLQogICAgIFJlZlB0ciBjb3B5UmVmKCkgJiYgPSBkZWxldGU7CiAgICAgUmVm
UHRyIGNvcHlSZWYoKSBjb25zdCAmIFdBUk5fVU5VU0VEX1JFVFVSTiB7IHJldHVybiBSZWZQdHIo
bV9wdHIpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ0lt
cGwuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAKaW5kZXggYWQy
MjIzNDMwMzc0NDE4MzNjMTg2NGVjODY2Y2I0MjZkY2Y0NGMxNy4uMzViM2I0YzAyZmQ2Nzg1ZDI5
NWI4MzY1NTlkMDk2NjBjZTdhZGJkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9B
dG9tU3RyaW5nSW1wbC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1w
bC5jcHAKQEAgLTY3LDcgKzY3LDcgQEAgY2xhc3MgQXRvbVN0cmluZ1RhYmxlTG9ja2VyIHsKIAog
I2VuZGlmIC8vIFVTRShXRUJfVEhSRUFEKQogCi11c2luZyBTdHJpbmdUYWJsZUltcGwgPSBIYXNo
U2V0PFN0cmluZ0ltcGwqPjsKK3VzaW5nIFN0cmluZ1RhYmxlSW1wbCA9IEhhc2hTZXQ8UGFja2Vk
UHRyPFN0cmluZ0ltcGw+PjsKIAogc3RhdGljIEFMV0FZU19JTkxJTkUgU3RyaW5nVGFibGVJbXBs
JiBzdHJpbmdUYWJsZSgpCiB7CkBAIC04Miw4ICs4Miw4IEBAIHN0YXRpYyBpbmxpbmUgUmVmPEF0
b21TdHJpbmdJbXBsPiBhZGRUb1N0cmluZ1RhYmxlKEF0b21TdHJpbmdUYWJsZUxvY2tlciYsIFN0
cmluCiAgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBuZXdseS10cmFuc2xhdGVkLCB0aGVuIHdlIG5l
ZWQgdG8gYWRvcHQgaXQuCiAgICAgLy8gVGhlIGJvb2xlYW4gaW4gdGhlIHBhaXIgdGVsbHMgdXMg
aWYgdGhhdCBpcyBzby4KICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxBdG9tU3RyaW5nSW1wbCY+KCoqYWRkUmVzdWx0Lml0
ZXJhdG9yKSk7Ci0gICAgcmV0dXJuICpzdGF0aWNfY2FzdDxBdG9tU3RyaW5nSW1wbCo+KCphZGRS
ZXN1bHQuaXRlcmF0b3IpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8QXRv
bVN0cmluZ0ltcGwmPigqYWRkUmVzdWx0Lml0ZXJhdG9yLT5nZXQoKSkpOworICAgIHJldHVybiAq
c3RhdGljX2Nhc3Q8QXRvbVN0cmluZ0ltcGwqPihhZGRSZXN1bHQuaXRlcmF0b3ItPmdldCgpKTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSGFzaFRyYW5zbGF0b3I+CkBAIC05
OSwxNiArOTksMTcgQEAgc3RydWN0IENTdHJpbmdUcmFuc2xhdG9yIHsKICAgICAgICAgcmV0dXJu
IFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoY2hhcmFjdGVycyk7CiAg
ICAgfQogCi0gICAgc3RhdGljIGlubGluZSBib29sIGVxdWFsKFN0cmluZ0ltcGwqIHN0ciwgY29u
c3QgTENoYXIqIGNoYXJhY3RlcnMpCisgICAgc3RhdGljIGlubGluZSBib29sIGVxdWFsKFBhY2tl
ZFB0cjxTdHJpbmdJbXBsPiBzdHIsIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIFdURjo6ZXF1YWwoc3RyLCBjaGFyYWN0ZXJzKTsKKyAgICAgICAgcmV0dXJu
IFdURjo6ZXF1YWwoc3RyLmdldCgpLCBjaGFyYWN0ZXJzKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCB0cmFuc2xhdGUoU3RyaW5nSW1wbComIGxvY2F0aW9uLCBjb25zdCBMQ2hhciogY29uc3Qm
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGhhc2gpCisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFBh
Y2tlZFB0cjxTdHJpbmdJbXBsPiYgbG9jYXRpb24sIGNvbnN0IExDaGFyKiBjb25zdCYgY2hhcmFj
dGVycywgdW5zaWduZWQgaGFzaCkKICAgICB7Ci0gICAgICAgIGxvY2F0aW9uID0gJlN0cmluZ0lt
cGw6OmNyZWF0ZShjaGFyYWN0ZXJzKS5sZWFrUmVmKCk7Ci0gICAgICAgIGxvY2F0aW9uLT5zZXRI
YXNoKGhhc2gpOwotICAgICAgICBsb2NhdGlvbi0+c2V0SXNBdG9tKHRydWUpOworICAgICAgICBh
dXRvKiBwb2ludGVyID0gJlN0cmluZ0ltcGw6OmNyZWF0ZShjaGFyYWN0ZXJzKS5sZWFrUmVmKCk7
CisgICAgICAgIHBvaW50ZXItPnNldEhhc2goaGFzaCk7CisgICAgICAgIHBvaW50ZXItPnNldElz
QXRvbSh0cnVlKTsKKyAgICAgICAgbG9jYXRpb24gPSBwb2ludGVyOwogICAgIH0KIH07CiAKQEAg
LTE1MCwxNiArMTUxLDE3IEBAIHN0cnVjdCBVQ2hhckJ1ZmZlclRyYW5zbGF0b3IgewogICAgICAg
ICByZXR1cm4gYnVmLmhhc2g7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZXF1YWwoU3RyaW5n
SW1wbCogY29uc3QmIHN0ciwgY29uc3QgVUNoYXJCdWZmZXImIGJ1ZikKKyAgICBzdGF0aWMgYm9v
bCBlcXVhbChQYWNrZWRQdHI8U3RyaW5nSW1wbD4gY29uc3QmIHN0ciwgY29uc3QgVUNoYXJCdWZm
ZXImIGJ1ZikKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OmVxdWFsKHN0ciwgYnVmLmNoYXJh
Y3RlcnMsIGJ1Zi5sZW5ndGgpOworICAgICAgICByZXR1cm4gV1RGOjplcXVhbChzdHIuZ2V0KCks
IGJ1Zi5jaGFyYWN0ZXJzLCBidWYubGVuZ3RoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB0
cmFuc2xhdGUoU3RyaW5nSW1wbComIGxvY2F0aW9uLCBjb25zdCBVQ2hhckJ1ZmZlciYgYnVmLCB1
bnNpZ25lZCBoYXNoKQorICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShQYWNrZWRQdHI8U3RyaW5n
SW1wbD4mIGxvY2F0aW9uLCBjb25zdCBVQ2hhckJ1ZmZlciYgYnVmLCB1bnNpZ25lZCBoYXNoKQog
ICAgIHsKLSAgICAgICAgbG9jYXRpb24gPSAmU3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2li
bGUoYnVmLmNoYXJhY3RlcnMsIGJ1Zi5sZW5ndGgpLmxlYWtSZWYoKTsKLSAgICAgICAgbG9jYXRp
b24tPnNldEhhc2goaGFzaCk7Ci0gICAgICAgIGxvY2F0aW9uLT5zZXRJc0F0b20odHJ1ZSk7Cisg
ICAgICAgIGF1dG8qIHBvaW50ZXIgPSAmU3RyaW5nSW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUo
YnVmLmNoYXJhY3RlcnMsIGJ1Zi5sZW5ndGgpLmxlYWtSZWYoKTsKKyAgICAgICAgcG9pbnRlci0+
c2V0SGFzaChoYXNoKTsKKyAgICAgICAgcG9pbnRlci0+c2V0SXNBdG9tKHRydWUpOworICAgICAg
ICBsb2NhdGlvbiA9IHBvaW50ZXI7CiAgICAgfQogfTsKIApAQCAtMTc2LDggKzE3OCw5IEBAIHN0
cnVjdCBIYXNoQW5kVVRGOENoYXJhY3RlcnNUcmFuc2xhdG9yIHsKICAgICAgICAgcmV0dXJuIGJ1
ZmZlci5oYXNoOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIGVxdWFsKFN0cmluZ0ltcGwqIGNv
bnN0JiBzdHJpbmcsIGNvbnN0IEhhc2hBbmRVVEY4Q2hhcmFjdGVycyYgYnVmZmVyKQorICAgIHN0
YXRpYyBib29sIGVxdWFsKFBhY2tlZFB0cjxTdHJpbmdJbXBsPiBjb25zdCYgcGFzc2VkU3RyaW5n
LCBjb25zdCBIYXNoQW5kVVRGOENoYXJhY3RlcnMmIGJ1ZmZlcikKICAgICB7CisgICAgICAgIGF1
dG8qIHN0cmluZyA9IHBhc3NlZFN0cmluZy5nZXQoKTsKICAgICAgICAgaWYgKGJ1ZmZlci51dGYx
Nkxlbmd0aCAhPSBzdHJpbmctPmxlbmd0aCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkBAIC0yMTIsNyArMjE1LDcgQEAgc3RydWN0IEhhc2hBbmRVVEY4Q2hhcmFjdGVyc1RyYW5zbGF0
b3IgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB0cmFu
c2xhdGUoU3RyaW5nSW1wbComIGxvY2F0aW9uLCBjb25zdCBIYXNoQW5kVVRGOENoYXJhY3RlcnMm
IGJ1ZmZlciwgdW5zaWduZWQgaGFzaCkKKyAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoUGFja2Vk
UHRyPFN0cmluZ0ltcGw+JiBsb2NhdGlvbiwgY29uc3QgSGFzaEFuZFVURjhDaGFyYWN0ZXJzJiBi
dWZmZXIsIHVuc2lnbmVkIGhhc2gpCiAgICAgewogICAgICAgICBVQ2hhciogdGFyZ2V0OwogICAg
ICAgICBhdXRvIG5ld1N0cmluZyA9IFN0cmluZ0ltcGw6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYnVm
ZmVyLnV0ZjE2TGVuZ3RoLCB0YXJnZXQpOwpAQCAtMjI1LDkgKzIyOCwxMCBAQCBzdHJ1Y3QgSGFz
aEFuZFVURjhDaGFyYWN0ZXJzVHJhbnNsYXRvciB7CiAgICAgICAgIGlmIChpc0FsbEFTQ0lJKQog
ICAgICAgICAgICAgbmV3U3RyaW5nID0gU3RyaW5nSW1wbDo6Y3JlYXRlKGJ1ZmZlci5jaGFyYWN0
ZXJzLCBidWZmZXIubGVuZ3RoKTsKIAotICAgICAgICBsb2NhdGlvbiA9ICZuZXdTdHJpbmcubGVh
a1JlZigpOwotICAgICAgICBsb2NhdGlvbi0+c2V0SGFzaChoYXNoKTsKLSAgICAgICAgbG9jYXRp
b24tPnNldElzQXRvbSh0cnVlKTsKKyAgICAgICAgYXV0byogcG9pbnRlciA9ICZuZXdTdHJpbmcu
bGVha1JlZigpOworICAgICAgICBwb2ludGVyLT5zZXRIYXNoKGhhc2gpOworICAgICAgICBwb2lu
dGVyLT5zZXRJc0F0b20odHJ1ZSk7CisgICAgICAgIGxvY2F0aW9uID0gcG9pbnRlcjsKICAgICB9
CiB9OwogCkBAIC0yNjYsMTEgKzI3MCwxMiBAQCBzdHJ1Y3QgU3Vic3RyaW5nTG9jYXRpb24gewog
fTsKIAogc3RydWN0IFN1YnN0cmluZ1RyYW5zbGF0b3IgewotICAgIHN0YXRpYyB2b2lkIHRyYW5z
bGF0ZShTdHJpbmdJbXBsKiYgbG9jYXRpb24sIGNvbnN0IFN1YnN0cmluZ0xvY2F0aW9uJiBidWZm
ZXIsIHVuc2lnbmVkIGhhc2gpCisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFBhY2tlZFB0cjxT
dHJpbmdJbXBsPiYgbG9jYXRpb24sIGNvbnN0IFN1YnN0cmluZ0xvY2F0aW9uJiBidWZmZXIsIHVu
c2lnbmVkIGhhc2gpCiAgICAgewotICAgICAgICBsb2NhdGlvbiA9ICZTdHJpbmdJbXBsOjpjcmVh
dGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqYnVmZmVyLmJhc2VTdHJpbmcsIGJ1ZmZlci5zdGFydCwg
YnVmZmVyLmxlbmd0aCkubGVha1JlZigpOwotICAgICAgICBsb2NhdGlvbi0+c2V0SGFzaChoYXNo
KTsKLSAgICAgICAgbG9jYXRpb24tPnNldElzQXRvbSh0cnVlKTsKKyAgICAgICAgYXV0byogcG9p
bnRlciA9ICZTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqYnVmZmVyLmJh
c2VTdHJpbmcsIGJ1ZmZlci5zdGFydCwgYnVmZmVyLmxlbmd0aCkubGVha1JlZigpOworICAgICAg
ICBwb2ludGVyLT5zZXRIYXNoKGhhc2gpOworICAgICAgICBwb2ludGVyLT5zZXRJc0F0b20odHJ1
ZSk7CisgICAgICAgIGxvY2F0aW9uID0gcG9pbnRlcjsKICAgICB9CiB9OwogCkBAIC0yODAsOSAr
Mjg1LDkgQEAgc3RydWN0IFN1YnN0cmluZ1RyYW5zbGF0b3I4IDogU3Vic3RyaW5nVHJhbnNsYXRv
ciB7CiAgICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhC
aXRzKGJ1ZmZlci5iYXNlU3RyaW5nLT5jaGFyYWN0ZXJzOCgpICsgYnVmZmVyLnN0YXJ0LCBidWZm
ZXIubGVuZ3RoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBlcXVhbChTdHJpbmdJbXBsKiBj
b25zdCYgc3RyaW5nLCBjb25zdCBTdWJzdHJpbmdMb2NhdGlvbiYgYnVmZmVyKQorICAgIHN0YXRp
YyBib29sIGVxdWFsKFBhY2tlZFB0cjxTdHJpbmdJbXBsPiBjb25zdCYgc3RyaW5nLCBjb25zdCBT
dWJzdHJpbmdMb2NhdGlvbiYgYnVmZmVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6ZXF1
YWwoc3RyaW5nLCBidWZmZXIuYmFzZVN0cmluZy0+Y2hhcmFjdGVyczgoKSArIGJ1ZmZlci5zdGFy
dCwgYnVmZmVyLmxlbmd0aCk7CisgICAgICAgIHJldHVybiBXVEY6OmVxdWFsKHN0cmluZy5nZXQo
KSwgYnVmZmVyLmJhc2VTdHJpbmctPmNoYXJhY3RlcnM4KCkgKyBidWZmZXIuc3RhcnQsIGJ1ZmZl
ci5sZW5ndGgpOwogICAgIH0KIH07CiAKQEAgLTI5Miw5ICsyOTcsOSBAQCBzdHJ1Y3QgU3Vic3Ry
aW5nVHJhbnNsYXRvcjE2IDogU3Vic3RyaW5nVHJhbnNsYXRvciB7CiAgICAgICAgIHJldHVybiBT
dHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGJ1ZmZlci5iYXNlU3RyaW5n
LT5jaGFyYWN0ZXJzMTYoKSArIGJ1ZmZlci5zdGFydCwgYnVmZmVyLmxlbmd0aCk7CiAgICAgfQog
Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogY29uc3QmIHN0cmluZywgY29uc3Qg
U3Vic3RyaW5nTG9jYXRpb24mIGJ1ZmZlcikKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChQYWNrZWRQ
dHI8U3RyaW5nSW1wbD4gY29uc3QmIHN0cmluZywgY29uc3QgU3Vic3RyaW5nTG9jYXRpb24mIGJ1
ZmZlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OmVxdWFsKHN0cmluZywgYnVmZmVyLmJh
c2VTdHJpbmctPmNoYXJhY3RlcnMxNigpICsgYnVmZmVyLnN0YXJ0LCBidWZmZXIubGVuZ3RoKTsK
KyAgICAgICAgcmV0dXJuIFdURjo6ZXF1YWwoc3RyaW5nLmdldCgpLCBidWZmZXIuYmFzZVN0cmlu
Zy0+Y2hhcmFjdGVyczE2KCkgKyBidWZmZXIuc3RhcnQsIGJ1ZmZlci5sZW5ndGgpOwogICAgIH0K
IH07CiAKQEAgLTMyNiwxNiArMzMxLDE3IEBAIHN0cnVjdCBMQ2hhckJ1ZmZlclRyYW5zbGF0b3Ig
ewogICAgICAgICByZXR1cm4gYnVmLmhhc2g7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZXF1
YWwoU3RyaW5nSW1wbCogY29uc3QmIHN0ciwgY29uc3QgTENoYXJCdWZmZXImIGJ1ZikKKyAgICBz
dGF0aWMgYm9vbCBlcXVhbChQYWNrZWRQdHI8U3RyaW5nSW1wbD4gY29uc3QmIHN0ciwgY29uc3Qg
TENoYXJCdWZmZXImIGJ1ZikKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OmVxdWFsKHN0ciwg
YnVmLmNoYXJhY3RlcnMsIGJ1Zi5sZW5ndGgpOworICAgICAgICByZXR1cm4gV1RGOjplcXVhbChz
dHIuZ2V0KCksIGJ1Zi5jaGFyYWN0ZXJzLCBidWYubGVuZ3RoKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCB0cmFuc2xhdGUoU3RyaW5nSW1wbComIGxvY2F0aW9uLCBjb25zdCBMQ2hhckJ1ZmZl
ciYgYnVmLCB1bnNpZ25lZCBoYXNoKQorICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShQYWNrZWRQ
dHI8U3RyaW5nSW1wbD4mIGxvY2F0aW9uLCBjb25zdCBMQ2hhckJ1ZmZlciYgYnVmLCB1bnNpZ25l
ZCBoYXNoKQogICAgIHsKLSAgICAgICAgbG9jYXRpb24gPSAmU3RyaW5nSW1wbDo6Y3JlYXRlKGJ1
Zi5jaGFyYWN0ZXJzLCBidWYubGVuZ3RoKS5sZWFrUmVmKCk7Ci0gICAgICAgIGxvY2F0aW9uLT5z
ZXRIYXNoKGhhc2gpOwotICAgICAgICBsb2NhdGlvbi0+c2V0SXNBdG9tKHRydWUpOworICAgICAg
ICBhdXRvKiBwb2ludGVyID0gJlN0cmluZ0ltcGw6OmNyZWF0ZShidWYuY2hhcmFjdGVycywgYnVm
Lmxlbmd0aCkubGVha1JlZigpOworICAgICAgICBwb2ludGVyLT5zZXRIYXNoKGhhc2gpOworICAg
ICAgICBwb2ludGVyLT5zZXRJc0F0b20odHJ1ZSk7CisgICAgICAgIGxvY2F0aW9uID0gcG9pbnRl
cjsKICAgICB9CiB9OwogCkBAIC0zNDcsMTYgKzM1MywxNyBAQCBzdHJ1Y3QgQnVmZmVyRnJvbVN0
YXRpY0RhdGFUcmFuc2xhdG9yIHsKICAgICAgICAgcmV0dXJuIGJ1Zi5oYXNoOwogICAgIH0KIAot
ICAgIHN0YXRpYyBib29sIGVxdWFsKFN0cmluZ0ltcGwqIGNvbnN0JiBzdHIsIGNvbnN0IEJ1ZmZl
ciYgYnVmKQorICAgIHN0YXRpYyBib29sIGVxdWFsKFBhY2tlZFB0cjxTdHJpbmdJbXBsPiBjb25z
dCYgc3RyLCBjb25zdCBCdWZmZXImIGJ1ZikKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OmVx
dWFsKHN0ciwgYnVmLmNoYXJhY3RlcnMsIGJ1Zi5sZW5ndGgpOworICAgICAgICByZXR1cm4gV1RG
OjplcXVhbChzdHIuZ2V0KCksIGJ1Zi5jaGFyYWN0ZXJzLCBidWYubGVuZ3RoKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3RyaW5nSW1wbComIGxvY2F0aW9uLCBjb25zdCBC
dWZmZXImIGJ1ZiwgdW5zaWduZWQgaGFzaCkKKyAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoUGFj
a2VkUHRyPFN0cmluZ0ltcGw+JiBsb2NhdGlvbiwgY29uc3QgQnVmZmVyJiBidWYsIHVuc2lnbmVk
IGhhc2gpCiAgICAgewotICAgICAgICBsb2NhdGlvbiA9ICZTdHJpbmdJbXBsOjpjcmVhdGVXaXRo
b3V0Q29weWluZyhidWYuY2hhcmFjdGVycywgYnVmLmxlbmd0aCkubGVha1JlZigpOwotICAgICAg
ICBsb2NhdGlvbi0+c2V0SGFzaChoYXNoKTsKLSAgICAgICAgbG9jYXRpb24tPnNldElzQXRvbSh0
cnVlKTsKKyAgICAgICAgYXV0byogcG9pbnRlciA9ICZTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0
Q29weWluZyhidWYuY2hhcmFjdGVycywgYnVmLmxlbmd0aCkubGVha1JlZigpOworICAgICAgICBw
b2ludGVyLT5zZXRIYXNoKGhhc2gpOworICAgICAgICBwb2ludGVyLT5zZXRJc0F0b20odHJ1ZSk7
CisgICAgICAgIGxvY2F0aW9uID0gcG9pbnRlcjsKICAgICB9CiB9OwogCkBAIC00NDMsMTEgKzQ1
MCwxMSBAQCBSZWY8QXRvbVN0cmluZ0ltcGw+IEF0b21TdHJpbmdJbXBsOjphZGRTbG93Q2FzZShT
dHJpbmdJbXBsJiBzdHJpbmcpCiAgICAgYXV0byBhZGRSZXN1bHQgPSBzdHJpbmdUYWJsZSgpLmFk
ZCgmc3RyaW5nKTsKIAogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBB
U1NFUlQoKmFkZFJlc3VsdC5pdGVyYXRvciA9PSAmc3RyaW5nKTsKKyAgICAgICAgQVNTRVJUKGFk
ZFJlc3VsdC5pdGVyYXRvci0+Z2V0KCkgPT0gJnN0cmluZyk7CiAgICAgICAgIHN0cmluZy5zZXRJ
c0F0b20odHJ1ZSk7CiAgICAgfQogCi0gICAgcmV0dXJuICpzdGF0aWNfY2FzdDxBdG9tU3RyaW5n
SW1wbCo+KCphZGRSZXN1bHQuaXRlcmF0b3IpOworICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8QXRv
bVN0cmluZ0ltcGwqPihhZGRSZXN1bHQuaXRlcmF0b3ItPmdldCgpKTsKIH0KIAogUmVmPEF0b21T
dHJpbmdJbXBsPiBBdG9tU3RyaW5nSW1wbDo6YWRkU2xvd0Nhc2UoQXRvbVN0cmluZ1RhYmxlJiBz
dHJpbmdUYWJsZSwgU3RyaW5nSW1wbCYgc3RyaW5nKQpAQCAtNDczLDExICs0ODAsMTEgQEAgUmVm
PEF0b21TdHJpbmdJbXBsPiBBdG9tU3RyaW5nSW1wbDo6YWRkU2xvd0Nhc2UoQXRvbVN0cmluZ1Rh
YmxlJiBzdHJpbmdUYWJsZSwgU3QKICAgICBhdXRvIGFkZFJlc3VsdCA9IHN0cmluZ1RhYmxlLnRh
YmxlKCkuYWRkKCZzdHJpbmcpOwogCiAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Ci0g
ICAgICAgIEFTU0VSVCgqYWRkUmVzdWx0Lml0ZXJhdG9yID09ICZzdHJpbmcpOworICAgICAgICBB
U1NFUlQoYWRkUmVzdWx0Lml0ZXJhdG9yLT5nZXQoKSA9PSAmc3RyaW5nKTsKICAgICAgICAgc3Ry
aW5nLnNldElzQXRvbSh0cnVlKTsKICAgICB9CiAKLSAgICByZXR1cm4gKnN0YXRpY19jYXN0PEF0
b21TdHJpbmdJbXBsKj4oKmFkZFJlc3VsdC5pdGVyYXRvcik7CisgICAgcmV0dXJuICpzdGF0aWNf
Y2FzdDxBdG9tU3RyaW5nSW1wbCo+KGFkZFJlc3VsdC5pdGVyYXRvci0+Z2V0KCkpOwogfQogCiB2
b2lkIEF0b21TdHJpbmdJbXBsOjpyZW1vdmUoQXRvbVN0cmluZ0ltcGwqIHN0cmluZykKQEAgLTQ4
Nyw3ICs0OTQsNyBAQCB2b2lkIEF0b21TdHJpbmdJbXBsOjpyZW1vdmUoQXRvbVN0cmluZ0ltcGwq
IHN0cmluZykKICAgICBhdXRvJiBhdG9tU3RyaW5nVGFibGUgPSBzdHJpbmdUYWJsZSgpOwogICAg
IGF1dG8gaXRlcmF0b3IgPSBhdG9tU3RyaW5nVGFibGUuZmluZChzdHJpbmcpOwogICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoaXRlcmF0b3IgIT0gYXRvbVN0cmluZ1RhYmxlLmVuZCgpLCAiVGhlIHN0
cmluZyBiZWluZyByZW1vdmVkIGlzIGFuIGF0b20gaW4gdGhlIHN0cmluZyB0YWJsZSBvZiBhbiBv
dGhlciB0aHJlYWQhIik7Ci0gICAgQVNTRVJUKHN0cmluZyA9PSAqaXRlcmF0b3IpOworICAgIEFT
U0VSVChzdHJpbmcgPT0gaXRlcmF0b3ItPmdldCgpKTsKICAgICBhdG9tU3RyaW5nVGFibGUucmVt
b3ZlKGl0ZXJhdG9yKTsKIH0KIApAQCAtNTAyLDcgKzUwOSw3IEBAIFJlZlB0cjxBdG9tU3RyaW5n
SW1wbD4gQXRvbVN0cmluZ0ltcGw6Omxvb2tVcFNsb3dDYXNlKFN0cmluZ0ltcGwmIHN0cmluZykK
ICAgICBhdXRvJiBhdG9tU3RyaW5nVGFibGUgPSBzdHJpbmdUYWJsZSgpOwogICAgIGF1dG8gaXRl
cmF0b3IgPSBhdG9tU3RyaW5nVGFibGUuZmluZCgmc3RyaW5nKTsKICAgICBpZiAoaXRlcmF0b3Ig
IT0gYXRvbVN0cmluZ1RhYmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRv
bVN0cmluZ0ltcGwqPigqaXRlcmF0b3IpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRv
bVN0cmluZ0ltcGwqPihpdGVyYXRvci0+Z2V0KCkpOwogICAgIHJldHVybiBudWxscHRyOwogfQog
CkBAIC01MjYsNyArNTMzLDcgQEAgUmVmUHRyPEF0b21TdHJpbmdJbXBsPiBBdG9tU3RyaW5nSW1w
bDo6bG9va1VwKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZAogICAgIExDaGFyQnVm
ZmVyIGJ1ZmZlciA9IHsgY2hhcmFjdGVycywgbGVuZ3RoIH07CiAgICAgYXV0byBpdGVyYXRvciA9
IHRhYmxlLmZpbmQ8TENoYXJCdWZmZXJUcmFuc2xhdG9yPihidWZmZXIpOwogICAgIGlmIChpdGVy
YXRvciAhPSB0YWJsZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEF0b21TdHJp
bmdJbXBsKj4oKml0ZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEF0b21TdHJp
bmdJbXBsKj4oaXRlcmF0b3ItPmdldCgpKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAt
NTM4LDcgKzU0NSw3IEBAIFJlZlB0cjxBdG9tU3RyaW5nSW1wbD4gQXRvbVN0cmluZ0ltcGw6Omxv
b2tVcChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQKICAgICBVQ2hhckJ1ZmZlciBi
dWZmZXIgeyBjaGFyYWN0ZXJzLCBsZW5ndGggfTsKICAgICBhdXRvIGl0ZXJhdG9yID0gdGFibGUu
ZmluZDxVQ2hhckJ1ZmZlclRyYW5zbGF0b3I+KGJ1ZmZlcik7CiAgICAgaWYgKGl0ZXJhdG9yICE9
IHRhYmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbVN0cmluZ0ltcGwq
PigqaXRlcmF0b3IpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbVN0cmluZ0ltcGwq
PihpdGVyYXRvci0+Z2V0KCkpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5jcHAKaW5kZXggYzEzODI1MjhkMTA5MDkwNWY0OTExNzFk
MjM5YjUyZDNjY2ExOWYxNy4uNGZlMTI3MmM1NDZhYzU3OWIxNjRiOWVlODRjNDQyYmE0YTI4Yzdk
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmNwcApAQCAtMzEsNyArMzEs
NyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogQXRvbVN0cmluZ1RhYmxlOjp+QXRvbVN0cmluZ1RhYmxl
KCkKIHsKLSAgICBmb3IgKGF1dG8qIHN0cmluZyA6IG1fdGFibGUpCisgICAgZm9yIChjb25zdCBQ
YWNrZWRQdHI8U3RyaW5nSW1wbD4mIHN0cmluZyA6IG1fdGFibGUpCiAgICAgICAgIHN0cmluZy0+
c2V0SXNBdG9tKGZhbHNlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9B
dG9tU3RyaW5nVGFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmluZ1RhYmxlLmgK
aW5kZXggMjRjNjBiMWZiMmQ3ZThmYjg5NDJlNjUwMzM5M2U0ODQ3MTY5NTY5Yy4uMmYwODljZTk2
MDgxYWE2YzdlNThjMWJjMTJjNGUzMDQ1MTEzYTU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21T
dHJpbmdUYWJsZS5oCkBAIC0yMyw2ICsyMyw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1BhY2tlZC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0ltcGwuaD4KIAogbmFtZXNwYWNlIFdURiB7CkBAIC0zNCwxMCArMzUsMTAgQEAg
Y2xhc3MgQXRvbVN0cmluZ1RhYmxlIHsKIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
fkF0b21TdHJpbmdUYWJsZSgpOwogCi0gICAgSGFzaFNldDxTdHJpbmdJbXBsKj4mIHRhYmxlKCkg
eyByZXR1cm4gbV90YWJsZTsgfQorICAgIEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PiYg
dGFibGUoKSB7IHJldHVybiBtX3RhYmxlOyB9CiAKIHByaXZhdGU6Ci0gICAgSGFzaFNldDxTdHJp
bmdJbXBsKj4gbV90YWJsZTsKKyAgICBIYXNoU2V0PFBhY2tlZFB0cjxTdHJpbmdJbXBsPj4gbV90
YWJsZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFz
aC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmgKaW5kZXggZjk1OTYxOThhOGQ3
NmVjMTMzY2M2MmQyZWZjZDU0YzQ3ZjZjNTBjNS4uMTZkYmE5YjFkYWEzOWJiY2EzZjllZDk5M2I1
NTJkMDNlMGNlNzhjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNo
LmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmgKQEAgLTU2LDYgKzU2LDcg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBSZWZQdHI8U3RyaW5nSW1wbD4mIGtleSkgeyByZXR1cm4ga2V5LT5oYXNoKCk7
IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUGFja2VkUHRyPFN0cmluZ0lt
cGw+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IFJlZlB0cjxTdHJpbmdJbXBsPiYgYSwgY29uc3QgUmVmUHRyPFN0cmluZ0ltcGw+
JiBiKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZXF1YWwoYS5nZXQoKSwgYi5nZXQo
KSk7CkBAIC02OSw2ICs3MCwxOSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHJldHVy
biBlcXVhbChhLCBiLmdldCgpKTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IFBhY2tlZFB0cjxTdHJpbmdJbXBsPiYgYSwgY29uc3QgUGFja2VkUHRyPFN0cmlu
Z0ltcGw+JiBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXF1YWwoYS5nZXQoKSwg
Yi5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUGFj
a2VkUHRyPFN0cmluZ0ltcGw+JiBhLCBjb25zdCBTdHJpbmdJbXBsKiBiKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZXF1YWwoYS5nZXQoKSwgYik7CisgICAgICAgIH0KKyAgICAgICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgUGFja2VkUHRyPFN0
cmluZ0ltcGw+JiBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXF1YWwoYSwgYi5n
ZXQoKSk7CisgICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBT
dHJpbmcmIGtleSkgeyByZXR1cm4ga2V5LmltcGwoKS0+aGFzaCgpOyB9CiAgICAgICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKQogICAgICAgICB7
CkBAIC0xMzUsNiArMTQ5LDE2IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAgICAgcmV0dXJu
IGVxdWFsKGEuZ2V0KCksIGIuZ2V0KCkpOwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBrZXkpIAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaGFzaChrZXkuZ2V0KCkpOworICAgICAgICB9CisKKyAgICAg
ICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBhLCBjb25z
dCBQYWNrZWRQdHI8U3RyaW5nSW1wbD4mIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBlcXVhbChhLmdldCgpLCBiLmdldCgpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IFN0cmluZyYga2V5KQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gaGFzaChrZXkuaW1wbCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nSW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKaW5kZXggYzM0
ZTRhZTEzZmVhYWIwM2UwYTRlOTJjNjc0ZWExN2M2OTdjYzkyOC4uOGZiMTk2ZmNjZTE5NWU1NjM3
OWZlZTFjYmFkODZmNGI3YjU1ZWIxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdJbXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKQEAgLTI5
LDYgKzI5LDcgQEAKICNpbmNsdWRlIDx3dGYvRGVidWdIZWFwLmg+CiAjaW5jbHVkZSA8d3RmL0V4
cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFj
a2VkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BU0NJSUZhc3RQYXRoLmg+CkBAIC01OTgsNiArNTk5
LDkgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8U3RyaW5nSW1wbCo+IHsKIHRlbXBs
YXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFJlZlB0cjxTdHJpbmdJbXBsPj4gewogICAgIHR5cGVk
ZWYgU3RyaW5nSGFzaCBIYXNoOwogfTsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFBh
Y2tlZFB0cjxTdHJpbmdJbXBsPj4geworICAgIHVzaW5nIEhhc2ggPSBTdHJpbmdIYXNoOworfTsK
IAogI2RlZmluZSBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTChjaGFyYWN0ZXJzKSAoW10geyBcCiAg
ICAgICAgIHN0YXRpYyBTdGF0aWNTdHJpbmdJbXBsIGltcGwoY2hhcmFjdGVycyk7IFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9HQ1JlYWNoYWJsZVJlZi5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL0dDUmVhY2hhYmxlUmVmLmgKaW5kZXggOTk3YmM1ZTVjNzc1YmE2NTcwY2Q0ODRhNzI0
OTQ5Mzc1ZWMxNmUxOS4uODQ4YWM3YmU2MmFmM2UyMDkwM2Y2MWZiNGZkNzI3ZWQxOTg4N2U5YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0dDUmVhY2hhYmxlUmVmLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0dDUmVhY2hhYmxlUmVmLmgKQEAgLTc0LDcgKzc0LDcgQEAgY2xhc3Mg
R0NSZWFjaGFibGVSZWYgewogCiAgICAgLy8gSGFzaCB0YWJsZSBkZWxldGVkIHZhbHVlcywgd2hp
Y2ggYXJlIG9ubHkgY29uc3RydWN0ZWQgYW5kIG5ldmVyIGNvcGllZCBvciBkZXN0cm95ZWQuCiAg
ICAgR0NSZWFjaGFibGVSZWYoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQotICAgICAg
ICA6IG1fcHRyKFJlZlB0cjxUPjo6aGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCisgICAgICAgIDog
bV9wdHIoUmVmUHRyPFQ+OjpQdHJUcmFpdHM6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKQogICAg
IHsgfQogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3B0ci5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUXVhbGlmaWVk
TmFtZS5oCmluZGV4IDdkODBiNjI2ODA0YTM3YTQxNzI4NmZlNTMzYmVmNGQzNWYyMzVhYjIuLjMz
ZjczY2UxNmVjYTlmOGRlZjhkOTJmZjU4NGNlMzMwYTM4MDhhMWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1F1
YWxpZmllZE5hbWUuaApAQCAtMTA0LDcgKzEwNCw3IEBAIGNsYXNzIFF1YWxpZmllZE5hbWUgewog
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGluaXQoKTsKIAogcHJpdmF0ZToKLSAgICBz
dGF0aWMgUXVhbGlmaWVkTmFtZUltcGwqIGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJu
IFJlZlB0cjxRdWFsaWZpZWROYW1lSW1wbD46Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9Cisg
ICAgc3RhdGljIFF1YWxpZmllZE5hbWVJbXBsKiBoYXNoVGFibGVEZWxldGVkVmFsdWUoKSB7IHJl
dHVybiBSZWZQdHI8UXVhbGlmaWVkTmFtZUltcGw+OjpQdHJUcmFpdHM6Omhhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpOyB9CiAgICAgCiAgICAgUmVmUHRyPFF1YWxpZmllZE5hbWVJbXBsPiBtX2ltcGw7
CiB9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IDdjMWM3ZjY5MDdlMmY4M2ExNjkzN2Q3YmZkOGEwMWE4ZWY0MjdlYzMuLjcxZjA2MzllOWM5ZDc5
NTcxMzU3M2YzMTBjZjEzYWU1MjhkYWJmMmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0wMS0xOCAgWXVzdWtl
IFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtXVEZdIEF0b21TdHJpbmdU
YWJsZSBzaG91bGQgYmUgc21hbGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNjQwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaE1hcC5jcHA6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9IYXNoU2V0LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhY2tlZC5jcHA6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpURVNUKToKKwogMjAyMC0wMS0xNyAgQ2F0aGllIENoZW4gIDxjYXRoaWVjaGVuQGln
YWxpYS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHNjcm9sbCBiZWhhdmlvciBwYXJz
aW5nCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwCmluZGV4IGE3MGMx
NjM1NmI2YzFkMjY5NjdmNzVjNjkxMGJjMWMwMTQ2MjRmOGYuLjY2YjU1NzQyYjNlNTM5MjViOGE1
NDU5YzhhNGM2MjY2Y2M1MWMxMWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL0hhc2hNYXAuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hh
c2hNYXAuY3BwCkBAIC03MTYsNyArNzE2LDcgQEAgVEVTVChXVEZfSGFzaE1hcCwgUmVmUHRyTm90
WmVyb2VkQmVmb3JlRGVyZWYpCiAgICAgLy8gdmFsdWUuCiAgICAgLy8gQSB6ZXJvIHdvdWxkIGJl
IGEgaW5jb3JyZWN0IG91dGNvbWUgYXMgaXQgd291bGQgbWVhbiB3ZSBudWxsZWQgdGhlIGJ1Y2tl
dCBiZWZvcmUgYW4gb3BhcXVlCiAgICAgLy8gY2FsbC4KLSAgICBFWFBFQ1RfVFJVRShvYnNlcnZl
ci0+b2JzZXJ2ZWRCdWNrZXQgPT0gb2JzZXJ2ZXIuZ2V0KCkgfHwgb2JzZXJ2ZXItPm9ic2VydmVk
QnVja2V0ID09IFJlZlB0cjxEZXJlZk9ic2VydmVyPjo6aGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkp
OworICAgIEVYUEVDVF9UUlVFKG9ic2VydmVyLT5vYnNlcnZlZEJ1Y2tldCA9PSBvYnNlcnZlci5n
ZXQoKSB8fCBvYnNlcnZlci0+b2JzZXJ2ZWRCdWNrZXQgPT0gUmVmUHRyPERlcmVmT2JzZXJ2ZXI+
OjpQdHJUcmFpdHM6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKTsKICAgICBFWFBFQ1RfRVEob2Jz
ZXJ2ZXItPmNvdW50LCAwdSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0hhc2hTZXQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFz
aFNldC5jcHAKaW5kZXggZTY2YjljNzdlNzA1Nzg0ZGE0NjFmZTEyNzA4ZDcxMDNkNzg1YzNhYS4u
NDRlMjE3ZTBlMTAwMWMzZjFlZWI1NjU4ZjBjODkzZGIzYzIzYWI2NSAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAKQEAgLTMxNSw3ICszMTUsNyBAQCBURVNUKFdU
Rl9IYXNoU2V0LCBSZWZQdHJOb3RaZXJvZWRCZWZvcmVEZXJlZikKICAgICAvLyB2YWx1ZS4KICAg
ICAvLyBBIHplcm8gd291bGQgYmUgYSBpbmNvcnJlY3Qgb3V0Y29tZSBhcyBpdCB3b3VsZCBtZWFu
IHdlIG51bGxlZCB0aGUgYnVja2V0IGJlZm9yZSBhbiBvcGFxdWUKICAgICAvLyBjYWxsLgotICAg
IEVYUEVDVF9UUlVFKG9ic2VydmVyLT5vYnNlcnZlZEJ1Y2tldCA9PSBvYnNlcnZlci5nZXQoKSB8
fCBvYnNlcnZlci0+b2JzZXJ2ZWRCdWNrZXQgPT0gUmVmUHRyPERlcmVmT2JzZXJ2ZXI+OjpoYXNo
VGFibGVEZWxldGVkVmFsdWUoKSk7CisgICAgRVhQRUNUX1RSVUUob2JzZXJ2ZXItPm9ic2VydmVk
QnVja2V0ID09IG9ic2VydmVyLmdldCgpIHx8IG9ic2VydmVyLT5vYnNlcnZlZEJ1Y2tldCA9PSBS
ZWZQdHI8RGVyZWZPYnNlcnZlcj46OlB0clRyYWl0czo6aGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkp
OwogICAgIEVYUEVDVF9FUShvYnNlcnZlci0+Y291bnQsIDB1KTsKIH0KIApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFja2VkLmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL1BhY2tlZC5jcHAKaW5kZXggYjQ4NDliZGUzOGY0MTMxZjJkMWFiZGVm
NGVhYzM2MTdkYzM3YWEwMi4uMzIyMzYxOTI4YzgwYjNjMDRkODUzOWZjMDYxNThmODMzNjA1NmI5
NCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFja2VkLmNwcAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYWNrZWQuY3BwCkBAIC0yNiw2ICsy
Niw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlIDx3dGYvUGFja2VkLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJIHsKIApAQCAtODIsNCArODQsMjUgQEAgVEVTVChXVEZfUGFja2Vk
LCBQYWNrZWRBbGlnbmVkUHRyKQogICAgIH0KIH0KIAorc3RydWN0IFBhY2tpbmdUYXJnZXQgewor
ICAgIHVuc2lnbmVkIG1fdmFsdWUgeyAwIH07Cit9OworVEVTVChXVEZfUGFja2VkLCBIYXNoTWFw
KQoreworICAgIFZlY3RvcjxQYWNraW5nVGFyZ2V0PiB2ZWN0b3I7CisgICAgSGFzaE1hcDxQYWNr
ZWRQdHI8UGFja2luZ1RhcmdldD4sIHVuc2lnbmVkPiBtYXA7CisgICAgdmVjdG9yLnJlc2VydmVD
YXBhY2l0eSgxMDAwMCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDEwMDAwOyArK2kp
CisgICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBlbmQoUGFja2luZ1RhcmdldCB7IGkgfSk7CisK
KyAgICBmb3IgKGF1dG8mIHRhcmdldCA6IHZlY3RvcikKKyAgICAgICAgbWFwLmFkZCgmdGFyZ2V0
LCB0YXJnZXQubV92YWx1ZSk7CisKKyAgICBmb3IgKGF1dG8mIHRhcmdldCA6IHZlY3Rvcikgewor
ICAgICAgICBFWFBFQ1RfVFJVRShtYXAuY29udGFpbnMoJnRhcmdldCkpOworICAgICAgICBFWFBF
Q1RfRVEobWFwLmdldCgmdGFyZ2V0KSwgdGFyZ2V0Lm1fdmFsdWUpOworICAgIH0KK30KKworCiB9
IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388139</attachid>
            <date>2020-01-18 01:01:59 -0800</date>
            <delta_ts>2020-01-19 09:12:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206400-20200118010158.patch</filename>
            <type>text/plain</type>
            <size>32029</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGE4YjFhNDY2NzQ0NjM1OWZiZjZkM2Rh
ZDliM2MyYTJiYzI4NjhmM2EuLjY5NGJlNzU0YmRkY2I4NjkxOTliMDBlZjZjYzkxN2E3ZmMzZTk5
ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNzIgQEAKKzIwMjAtMDEtMTggIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBBdG9tU3RyaW5nVGFibGUgc2hvdWxkIGJl
IHNtYWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDY0MDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
dG9tU3RyaW5nVGFibGUgaXMgdGhlIGxhcmdlc3QgaGFzaHRhYmxlIHR5cGljYWxseS4gSXQgdGFr
ZXMgbW9yZQorICAgICAgICB0aGFuIDI1NktCIHBlciBXZWJQcm9jZXNzIChzb21ldGltZXMsIGl0
IHRvb2sgMU1CIG9yIG1vcmUpLgorICAgICAgICBUaGlzIHBhdGNoIGxldmVyYWdlcyBQYWNrZWRQ
dHIgdG8gY29tcGFjdCBpdCBmcm9tIDggYnl0ZXMgcGVyIGVudHJ5CisgICAgICAgIHRvIDYgYnl0
ZXMgcGVyIGVudHJ5LgorCisgICAgICAgIFdoaWxlIHRoaXMgaXMgc3RpbGwgbGFyZ2UsIHdlIHNo
b3VsZCBpbnZlc3RpZ2F0ZSBob3cgdG8gY29tcGFjdCBDKysKKyAgICAgICAgcG9pbnRlcnMgaW4g
NCBieXRlc1sxXSB0byBzaHJpbmsgbWVtb3J5IGZvb3RwcmludCwgc2luY2UgV2ViS2l0CisgICAg
ICAgIG1lbW9yeSBpcyB1c2VkIGJ5IFZlY3RvciBhbmQgSGFzaFRhYmxlIGZ1bGZpbGxlZCB3aXRo
IHBvaW50ZXJzLgorCisgICAgICAgIFsxXTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNjQwMAorCisgICAgICAgICogd3RmL0R1bWJQdHJUcmFpdHMuaDoKKyAgICAg
ICAgKFdURjo6RHVtYlB0clRyYWl0czo6aGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAg
KFdURjo6RHVtYlB0clRyYWl0czo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAq
IHd0Zi9Gb3J3YXJkLmg6CisgICAgICAgICogd3RmL0hhc2hUcmFpdHMuaDoKKyAgICAgICAgKiB3
dGYvUGFja2VkLmg6CisgICAgICAgIChXVEY6OlBhY2tlZDxUOjpQYWNrZWQpOgorICAgICAgICAo
V1RGOjpQYWNrZWQ8VDo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAo
V1RGOjpHZXRQdHJIZWxwZXI8UGFja2VkUHRyPFQ+Pjo6Z2V0UHRyKToKKyAgICAgICAgKFdURjo6
UGFja2VkUHRyVHJhaXRzOjpoYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoV1RGOjpQ
YWNrZWRQdHJUcmFpdHM6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdURjo6
YWxpZ25vZik6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1JlZi5oOgorICAgICAgICAoV1RGOjpS
ZWY6OlJlZik6CisgICAgICAgIChXVEY6OlJlZjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29u
c3QpOgorICAgICAgICAoV1RGOjpSZWY6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6IERlbGV0ZWQu
CisgICAgICAgICogd3RmL1JlZlB0ci5oOgorICAgICAgICAoV1RGOjpSZWZQdHI6OlJlZlB0cik6
CisgICAgICAgIChXVEY6OlJlZlB0cjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3QpOgor
ICAgICAgICAoV1RGOjpSZWZQdHI6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6IERlbGV0ZWQuCisg
ICAgICAgICogd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwOgorICAgICAgICAoV1RGOjphZGRU
b1N0cmluZ1RhYmxlKToKKyAgICAgICAgKFdURjo6Q1N0cmluZ1RyYW5zbGF0b3I6OmVxdWFsKToK
KyAgICAgICAgKFdURjo6Q1N0cmluZ1RyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAgIChX
VEY6OlVDaGFyQnVmZmVyVHJhbnNsYXRvcjo6ZXF1YWwpOgorICAgICAgICAoV1RGOjpVQ2hhckJ1
ZmZlclRyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXVEY6Okhhc2hBbmRVVEY4Q2hh
cmFjdGVyc1RyYW5zbGF0b3I6OmVxdWFsKToKKyAgICAgICAgKFdURjo6SGFzaEFuZFVURjhDaGFy
YWN0ZXJzVHJhbnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdURjo6U3Vic3RyaW5nVHJh
bnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdURjo6U3Vic3RyaW5nVHJhbnNsYXRvcjg6
OmVxdWFsKToKKyAgICAgICAgKFdURjo6U3Vic3RyaW5nVHJhbnNsYXRvcjE2OjplcXVhbCk6Cisg
ICAgICAgIChXVEY6OkxDaGFyQnVmZmVyVHJhbnNsYXRvcjo6ZXF1YWwpOgorICAgICAgICAoV1RG
OjpMQ2hhckJ1ZmZlclRyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXVEY6OkJ1ZmZl
ckZyb21TdGF0aWNEYXRhVHJhbnNsYXRvcjo6ZXF1YWwpOgorICAgICAgICAoV1RGOjpCdWZmZXJG
cm9tU3RhdGljRGF0YVRyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXVEY6OkF0b21T
dHJpbmdJbXBsOjphZGRTbG93Q2FzZSk6CisgICAgICAgIChXVEY6OkF0b21TdHJpbmdJbXBsOjpy
ZW1vdmUpOgorICAgICAgICAoV1RGOjpBdG9tU3RyaW5nSW1wbDo6bG9va1VwU2xvd0Nhc2UpOgor
ICAgICAgICAoV1RGOjpBdG9tU3RyaW5nSW1wbDo6bG9va1VwKToKKyAgICAgICAgKiB3dGYvdGV4
dC9BdG9tU3RyaW5nVGFibGUuY3BwOgorICAgICAgICAoV1RGOjpBdG9tU3RyaW5nVGFibGU6On5B
dG9tU3RyaW5nVGFibGUpOgorICAgICAgICAqIHd0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oOgor
ICAgICAgICAoV1RGOjpBdG9tU3RyaW5nVGFibGU6OnRhYmxlKToKKyAgICAgICAgKCk6IERlbGV0
ZWQuCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSGFzaC5oOgorICAgICAgICAoV1RGOjpTdHJp
bmdIYXNoOjpoYXNoKToKKyAgICAgICAgKFdURjo6U3RyaW5nSGFzaDo6ZXF1YWwpOgorICAgICAg
ICAoV1RGOjpBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6Omhhc2gpOgorICAgICAgICAoV1RGOjpB
U0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g6OmVxdWFsKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJp
bmdJbXBsLmg6CisKIDIwMjAtMDEtMTYgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmVsYW5kIGJ5dGVjb2RlIGNoZWNrcG9pbnRzIHNpbmNlIGJ1Z3Mg
aGF2ZSBiZWVuIGZpeGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjQ1YTcxNDBjNTY3YWQ3ZThmYTRiMmYzYzdl
N2VjYzE5ODkyNzBlMS4uMjc1NGFhMzhlNmIxZDk3Y2Q2NjViZTFiMTM5MzM5YzM4Zjk1ODlhMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTAxLTE4ICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gQXRvbVN0cmluZ1RhYmxlIHNob3Vs
ZCBiZSBzbWFsbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjA2NDAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBkb20vR0NSZWFjaGFibGVSZWYuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdDUmVhY2hhYmxl
UmVmOjpHQ1JlYWNoYWJsZVJlZik6CisgICAgICAgICogZG9tL1F1YWxpZmllZE5hbWUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlF1YWxpZmllZE5hbWU6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisK
IDIwMjAtMDEtMTcgIENhdGhpZSBDaGVuICA8Y2F0aGllY2hlbkBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIEFkZCBzdXBwb3J0IGZvciBzY3JvbGwgYmVoYXZpb3IgcGFyc2luZwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvRHVtYlB0clRyYWl0cy5oIGIvU291cmNlL1dURi93dGYvRHVtYlB0clRy
YWl0cy5oCmluZGV4IDUxZGViYTc2YmZmZTAzZDVkYWJjMzdkNTc1MTM3MmUxNjIyNjM0NWYuLmY0
NmFjNjdkYWI5ZDlkMTZlZmRiM2YyYWNhMTY1NTQ5MjIyNTI4NjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0R1bWJQdHJUcmFpdHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9EdW1iUHRyVHJh
aXRzLmgKQEAgLTQxLDYgKzQxLDkgQEAgc3RydWN0IER1bWJQdHJUcmFpdHMgewogCiAgICAgc3Rh
dGljIEFMV0FZU19JTkxJTkUgdm9pZCBzd2FwKFN0b3JhZ2VUeXBlJiBhLCBTdG9yYWdlVHlwZSYg
YikgeyBzdGQ6OnN3YXAoYSwgYik7IH0KICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBUKiB1bndy
YXAoY29uc3QgU3RvcmFnZVR5cGUmIHB0cikgeyByZXR1cm4gcHRyOyB9CisKKyAgICBzdGF0aWMg
U3RvcmFnZVR5cGUgaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0
PFN0b3JhZ2VUeXBlPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KC0xKSk7IH0KKyAgICBzdGF0aWMg
QUxXQVlTX0lOTElORSBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKGNvbnN0IFN0b3JhZ2VU
eXBlJiBwdHIpIHsgcmV0dXJuIHB0ciA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJk
LmggYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKaW5kZXggZmUyZGQ0NTc4ODdlMDUwMTI1YTA5
MzdlZmJjMjk3ZGIyZmNiZjFkZi4uNzBkZGI5MTZlNTBjNmUyODUyYjdmOWU0ZTBlM2E1OGY3MDNh
OGYwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL0ZvcndhcmQuaApAQCAtNjIsNiArNjIsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xh
c3MgTGF6eU5ldmVyRGVzdHJveWVkOwogdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIE5ldmVyRGVz
dHJveWVkOwogdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIE9wdGlvblNldDsKIHRlbXBsYXRlPHR5
cGVuYW1lPiBjbGFzcyBPcHRpb25hbDsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFBhY2tl
ZDsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCA9IGFsaWdub2YoVCk+IGNsYXNzIFBhY2tl
ZEFsaWduZWRQdHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IER1bWJQdHJUcmFp
dHM8VD4+IGNsYXNzIFJlZjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gRHVtYlB0
clRyYWl0czxUPj4gY2xhc3MgUmVmUHRyOwogdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFN0cmlu
Z0J1ZmZlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0hhc2hUcmFpdHMuaCBiL1NvdXJj
ZS9XVEYvd3RmL0hhc2hUcmFpdHMuaAppbmRleCA1NTJkNGI2ZmViMjkwNTljOWRlOGE4M2E1ZWIw
MjE3MDkzYmFkNWY0Li44OWEzZjMzMTA0OWFhNDMzMTEzZmRjNmQxMDY2M2QzYzc3YTdmMzM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVHJhaXRzLmgKKysrIGIvU291cmNlL1dURi93
dGYvSGFzaFRyYWl0cy5oCkBAIC0yMjAsNiArMjIwLDE5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFA+
IHN0cnVjdCBSZWZIYXNoVHJhaXRzIDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFJlZjxQPj4gewog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBzdHJ1Y3QgSGFzaFRyYWl0czxSZWY8UD4+IDogUmVmSGFz
aFRyYWl0czxQPiB7IH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVjdCBIYXNoVHJhaXRz
PFBhY2tlZDxQKj4+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFBhY2tlZDxQKj4+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOworICAg
IHVzaW5nIFRhcmdldFR5cGUgPSBQYWNrZWQ8UCo+OworICAgIHN0YXRpY19hc3NlcnQoVGFyZ2V0
VHlwZTo6YWxpZ25tZW50IDwgNCAqIEtCLCAiVGhlIGZpcnN0IHBhZ2UgaXMgYWx3YXlzIHVubWFw
cGVkIHNpbmNlIGl0IGluY2x1ZGVzIG51bGxwdHIuIik7CisKKyAgICBzdGF0aWMgUGFja2VkPFAq
PiBlbXB0eVZhbHVlKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHN0YXRpYyBib29sIGlzRW1w
dHlWYWx1ZShjb25zdCBUYXJnZXRUeXBlJiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuZ2V0KCkgPT0g
bnVsbHB0cjsgfQorCisgICAgdXNpbmcgUGVla1R5cGUgPSBQKjsKKyAgICBzdGF0aWMgUGVla1R5
cGUgcGVlayhjb25zdCBUYXJnZXRUeXBlJiB2YWx1ZSkgeyByZXR1cm4gdmFsdWUuZ2V0KCk7IH0K
KyAgICBzdGF0aWMgUGVla1R5cGUgcGVlayhQKiB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KK307
CisKIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8U3RyaW5nPiA6IFNpbXBsZUNsYXNzSGFz
aFRyYWl0czxTdHJpbmc+IHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSXNFbXB0eVZh
bHVlRnVuY3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25zdCBT
dHJpbmcmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BhY2tlZC5oIGIvU291cmNlL1dU
Ri93dGYvUGFja2VkLmgKaW5kZXggYjIyZmM3NjFkNDI5NzRiOTgxMjViYjdlN2QxYzJkMWY5YTU3
ODMwOC4uZTkxYTUxMzAzNmFjM2E5ZDA0NzUwODM1ZjEzNWFiZTVhNTc4ZTc5NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvUGFja2VkLmgKKysrIGIvU291cmNlL1dURi93dGYvUGFja2VkLmgK
QEAgLTI2LDYgKzI2LDkgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8YXJyYXk+CisjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hGdW5jdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVW5hbGlnbmVkQWNjZXNzLmg+
CkBAIC0xMDAsMTEgKzEwMywxMiBAQCBjbGFzcyBQYWNrZWQgewogLy8gUGFja2VkQWxpZ25lZFB0
ciBjYW4gdGFrZSBhbGlnbm1lbnQgcGFyYW1ldGVyIHRvby4gUGFja2VkQWxpZ25lZFB0ciBvbmx5
IHVzZXMgdGhpcyBhbGlnbm1lbnQgaW5mb3JtYXRpb24gaWYgaXQgaXMgcHJvZml0YWJsZTogd2Ug
dXNlCiAvLyBhbGlnbm1lbnQgaW5mb3JtYXRpb24gb25seSB3aGVuIHdlIGNhbiByZWR1Y2UgdGhl
IHNpemUgb2YgdGhlIHN0b3JhZ2UuIFNpbmNlIHRoZSBwb2ludGVyIHdpZHRoIGlzIDM2IGJpdHMg
YW5kIEpTQ2VsbHMgYXJlIGFsaWduZWQgdG8gMTYgYnl0ZXMsCiAvLyB3ZSBjYW4gdXNlIDQgYml0
cyBpbiBEYXJ3aW4gQVJNNjQsIHdlIGNhbiBjb21wYWN0IGNlbGwgcG9pbnRlciBpbnRvIDQgYnl0
ZXMgKDMyIGJpdHMpLgotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGFsaWdubWVudCA9IGFs
aWdub2YoVCk+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgcGFzc2VkQWxpZ25tZW50Pgog
Y2xhc3MgUGFja2VkQWxpZ25lZFB0ciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgc3RhdGljX2Fzc2VydChoYXNPbmVCaXRTZXQoYWxpZ25tZW50KSwgIkFsaWdu
bWVudCBuZWVkcyB0byBiZSBwb3dlci1vZi10d28iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGhhc09u
ZUJpdFNldChwYXNzZWRBbGlnbm1lbnQpLCAiQWxpZ25tZW50IG5lZWRzIHRvIGJlIHBvd2VyLW9m
LXR3byIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGFsaWdubWVudCA9IHBhc3NlZEFs
aWdubWVudDsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNQYWNrZWRUeXBlID0gdHJ1ZTsK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGFsaWdubWVudFNoaWZ0U2l6ZUlmUHJvZml0
YWJsZSA9IGdldExTQlNldENvbnN0ZXhwcihhbGlnbm1lbnQpOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgc3RvcmFnZVNpemVXaXRob3V0QWxpZ25tZW50U2hpZnQgPSByb3VuZFVwVG9N
dWx0aXBsZU9mPDg+KFdURl9DUFVfRUZGRUNUSVZFX0FERFJFU1NfV0lEVEgpIC8gODsKQEAgLTIx
NSwxMSArMjE5LDI2IEBAIGNsYXNzIFBhY2tlZDxUKj4gOiBwdWJsaWMgUGFja2VkQWxpZ25lZFB0
cjxULCAxPiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFBhY2tlZEFsaWduZWRQdHI8VCwg
MT47CiAgICAgdXNpbmcgQmFzZTo6QmFzZTsKKworICAgIC8vIEhhc2ggdGFibGUgZGVsZXRlZCB2
YWx1ZXMsIHdoaWNoIGFyZSBvbmx5IGNvbnN0cnVjdGVkIGFuZCBuZXZlciBjb3BpZWQgb3IgZGVz
dHJveWVkLgorICAgIFBhY2tlZChIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IEJhc2UoYml0
d2lzZV9jYXN0PFQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KEJhc2U6OmFsaWdubWVudCkpKSB7
IH0KKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gQmFz
ZTo6Z2V0KCkgPT0gYml0d2lzZV9jYXN0PFQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KEJhc2U6
OmFsaWdubWVudCkpOyB9CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdXNpbmcgUGFja2Vk
UHRyID0gUGFja2VkPFQqPjsKIAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgR2V0UHRy
SGVscGVyPFBhY2tlZFB0cjxUPj4geworICAgIHVzaW5nIFB0clR5cGUgPSBUKjsKKyAgICBzdGF0
aWMgVCogZ2V0UHRyKGNvbnN0IFBhY2tlZFB0cjxUPiYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxU
Kj4ocC5nZXQoKSk7IH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IElzU21h
cnRQdHI8UGFja2VkUHRyPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0g
dHJ1ZTsKK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgUGFja2VkUHRyVHJhaXRz
IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB1c2luZyBSZWJpbmRUcmFpdHMgPSBQYWNrZWRQ
dHJUcmFpdHM8VT47CkBAIC0yMzEsOCArMjUwLDE2IEBAIHN0cnVjdCBQYWNrZWRQdHJUcmFpdHMg
ewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyPiBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lk
IHN3YXAoUGFja2VkUHRyPFQ+JiBhLCBPdGhlciYgYikgeyBhLnN3YXAoYik7IH0KIAogICAgIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIFQqIHVud3JhcChjb25zdCBTdG9yYWdlVHlwZSYgcHRyKSB7IHJl
dHVybiBwdHIuZ2V0KCk7IH0KKworICAgIC8vIFdlIGFzc3VtZSB0aGF0LAorICAgIC8vIDEuIFRo
ZSBhbGlnbm1lbnQgaXMgPCA0S0IuIChJdCBpcyB0ZXN0ZWQgYnkgSGFzaFRyYWl0cykuCisgICAg
Ly8gMi4gVGhlIGZpcnN0IHBhZ2UgKGluY2x1ZGluZyBudWxscHRyKSBpcyBuZXZlciBtYXBwZWQu
CisgICAgc3RhdGljIFN0b3JhZ2VUeXBlIGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJu
IFN0b3JhZ2VUeXBlIHsgYml0d2lzZV9jYXN0PFQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KFN0
b3JhZ2VUeXBlOjphbGlnbm1lbnQpKSB9OyB9CisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9v
bCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZShjb25zdCBTdG9yYWdlVHlwZSYgcHRyKSB7IHJldHVy
biBwdHIuZ2V0KCkgPT0gYml0d2lzZV9jYXN0PFQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KFN0
b3JhZ2VUeXBlOjphbGlnbm1lbnQpKTsgfQogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgUD4gc3Ry
dWN0IERlZmF1bHRIYXNoPFBhY2tlZFB0cjxQPj4geyB1c2luZyBIYXNoID0gUHRySGFzaDxQYWNr
ZWRQdHI8UD4+OyB9OworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpQYWNrZWQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWYuaCBiL1NvdXJjZS9XVEYvd3RmL1JlZi5o
CmluZGV4IDhlMWI3NDZkMThiM2JkOTU3YzU3Y2QwZGIyYjMwNmE1MTk0YWVhYWUuLjFhYjgyMTFj
MzViN2Q1N2Q5ODA4NmFlOTYxYWY2OTYwN2I0OWY4MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL1JlZi5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZi5oCkBAIC00NSw5ICs0NSwxMCBAQCBp
bmxpbmUgdm9pZCBhZG9wdGVkKGNvbnN0IHZvaWQqKSB7IH0KIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFB0clRyYWl0cz4gY2xhc3MgUmVmOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgUHRyVHJhaXRzID0gRHVtYlB0clRyYWl0czxUPj4gUmVmPFQsIFB0clRyYWl0cz4gYWRv
cHRSZWYoVCYpOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQdHJUcmFpdHM+Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CiBjbGFzcyBSZWYgewogcHVibGlj
OgorICAgIHVzaW5nIFB0clRyYWl0cyA9IFRyYWl0czsKICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaXNSZWYgPSB0cnVlOwogCiAgICAgflJlZigpCkBAIC05NCw5ICs5NSw4IEBAIGNsYXNzIFJl
ZiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4gdm9pZCBzd2FwKFJlZjxY
LCBZPiYpOwogCiAgICAgLy8gSGFzaCB0YWJsZSBkZWxldGVkIHZhbHVlcywgd2hpY2ggYXJlIG9u
bHkgY29uc3RydWN0ZWQgYW5kIG5ldmVyIGNvcGllZCBvciBkZXN0cm95ZWQuCi0gICAgUmVmKEhh
c2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpIDogbV9wdHIoaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkp
IHsgfQotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3B0ciA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQotICAgIHN0YXRpYyBUKiBoYXNoVGFi
bGVEZWxldGVkVmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPigtMSk7IH0KKyAg
ICBSZWYoSGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX3B0cihQdHJUcmFpdHM6Omhhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpKSB7IH0KKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCkgY29uc3QgeyByZXR1cm4gUHRyVHJhaXRzOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZShtX3B0
cik7IH0KIAogICAgIFJlZihIYXNoVGFibGVFbXB0eVZhbHVlVHlwZSkgOiBtX3B0cihoYXNoVGFi
bGVFbXB0eVZhbHVlKCkpIHsgfQogICAgIGJvb2wgaXNIYXNoVGFibGVFbXB0eVZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV9wdHIgPT0gaGFzaFRhYmxlRW1wdHlWYWx1ZSgpOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9SZWZQdHIuaCBiL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCmluZGV4
IDZkNGM2NDQ0ZTdlYWYxYWExZWFhZjQzMjlhNWY2OThmMDkzZWQwYjYuLmRkYmEyNjZlNDFmY2Q5
ZjU0ZTUwZjkyNjE0Y2MyMjNmMDZmMDVjMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1Jl
ZlB0ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1JlZlB0ci5oCkBAIC00NCwxMCArNDQsMTEgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gQUxXQVlTX0lOTElORSB2b2lkIGRlcmVmSWZOb3ROdWxsKFQq
IHB0cikKICAgICAgICAgcHRyLT5kZXJlZigpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBQdHJUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+
CiBjbGFzcyBSZWZQdHIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgor
ICAgIHVzaW5nIFB0clRyYWl0cyA9IFRyYWl0czsKICAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOwog
ICAgIHR5cGVkZWYgVmFsdWVUeXBlKiBQdHJUeXBlOwogCkBAIC02Myw4ICs2NCw4IEBAIGNsYXNz
IFJlZlB0ciB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgWCwgdHlwZW5hbWUgWT4gUmVmUHRyKFJl
ZjxYLCBZPiYmKTsKIAogICAgIC8vIEhhc2ggdGFibGUgZGVsZXRlZCB2YWx1ZXMsIHdoaWNoIGFy
ZSBvbmx5IGNvbnN0cnVjdGVkIGFuZCBuZXZlciBjb3BpZWQgb3IgZGVzdHJveWVkLgotICAgIFJl
ZlB0cihIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fcHRyKGhhc2hUYWJsZURlbGV0ZWRW
YWx1ZSgpKSB7IH0KLSAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV9wdHIgPT0gaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KKyAgICBSZWZQdHIoSGFz
aFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX3B0cihQdHJUcmFpdHM6Omhhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpKSB7IH0KKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gUHRyVHJhaXRzOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZShtX3B0cik7IH0KIAog
ICAgIEFMV0FZU19JTkxJTkUgflJlZlB0cigpIHsgZGVyZWZJZk5vdE51bGwoUHRyVHJhaXRzOjpl
eGNoYW5nZShtX3B0ciwgbnVsbHB0cikpOyB9CiAKQEAgLTk2LDggKzk3LDYgQEAgY2xhc3MgUmVm
UHRyIHsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+IHZvaWQgc3dhcChS
ZWZQdHI8WCwgWT4mKTsKIAotICAgIHN0YXRpYyBUKiBoYXNoVGFibGVEZWxldGVkVmFsdWUoKSB7
IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPigtMSk7IH0KLQogICAgIFJlZlB0ciBjb3B5UmVm
KCkgJiYgPSBkZWxldGU7CiAgICAgUmVmUHRyIGNvcHlSZWYoKSBjb25zdCAmIFdBUk5fVU5VU0VE
X1JFVFVSTiB7IHJldHVybiBSZWZQdHIobV9wdHIpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvQXRvbVN0cmluZ0ltcGwuY3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9BdG9t
U3RyaW5nSW1wbC5jcHAKaW5kZXggYWQyMjIzNDMwMzc0NDE4MzNjMTg2NGVjODY2Y2I0MjZkY2Y0
NGMxNy4uMzViM2I0YzAyZmQ2Nzg1ZDI5NWI4MzY1NTlkMDk2NjBjZTdhZGJkZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAKKysrIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9BdG9tU3RyaW5nSW1wbC5jcHAKQEAgLTY3LDcgKzY3LDcgQEAgY2xhc3MgQXRv
bVN0cmluZ1RhYmxlTG9ja2VyIHsKIAogI2VuZGlmIC8vIFVTRShXRUJfVEhSRUFEKQogCi11c2lu
ZyBTdHJpbmdUYWJsZUltcGwgPSBIYXNoU2V0PFN0cmluZ0ltcGwqPjsKK3VzaW5nIFN0cmluZ1Rh
YmxlSW1wbCA9IEhhc2hTZXQ8UGFja2VkUHRyPFN0cmluZ0ltcGw+PjsKIAogc3RhdGljIEFMV0FZ
U19JTkxJTkUgU3RyaW5nVGFibGVJbXBsJiBzdHJpbmdUYWJsZSgpCiB7CkBAIC04Miw4ICs4Miw4
IEBAIHN0YXRpYyBpbmxpbmUgUmVmPEF0b21TdHJpbmdJbXBsPiBhZGRUb1N0cmluZ1RhYmxlKEF0
b21TdHJpbmdUYWJsZUxvY2tlciYsIFN0cmluCiAgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBuZXds
eS10cmFuc2xhdGVkLCB0aGVuIHdlIG5lZWQgdG8gYWRvcHQgaXQuCiAgICAgLy8gVGhlIGJvb2xl
YW4gaW4gdGhlIHBhaXIgdGVsbHMgdXMgaWYgdGhhdCBpcyBzby4KICAgICBpZiAoYWRkUmVzdWx0
LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihzdGF0aWNfY2FzdDxBdG9tU3Ry
aW5nSW1wbCY+KCoqYWRkUmVzdWx0Lml0ZXJhdG9yKSk7Ci0gICAgcmV0dXJuICpzdGF0aWNfY2Fz
dDxBdG9tU3RyaW5nSW1wbCo+KCphZGRSZXN1bHQuaXRlcmF0b3IpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoc3RhdGljX2Nhc3Q8QXRvbVN0cmluZ0ltcGwmPigqYWRkUmVzdWx0Lml0ZXJhdG9y
LT5nZXQoKSkpOworICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8QXRvbVN0cmluZ0ltcGwqPihhZGRS
ZXN1bHQuaXRlcmF0b3ItPmdldCgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgSGFzaFRyYW5zbGF0b3I+CkBAIC05OSwxNiArOTksMTcgQEAgc3RydWN0IENTdHJpbmdUcmFu
c2xhdG9yIHsKICAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNr
VG9wOEJpdHMoY2hhcmFjdGVycyk7CiAgICAgfQogCi0gICAgc3RhdGljIGlubGluZSBib29sIGVx
dWFsKFN0cmluZ0ltcGwqIHN0ciwgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMpCisgICAgc3RhdGlj
IGlubGluZSBib29sIGVxdWFsKFBhY2tlZFB0cjxTdHJpbmdJbXBsPiBzdHIsIGNvbnN0IExDaGFy
KiBjaGFyYWN0ZXJzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6ZXF1YWwoc3RyLCBjaGFy
YWN0ZXJzKTsKKyAgICAgICAgcmV0dXJuIFdURjo6ZXF1YWwoc3RyLmdldCgpLCBjaGFyYWN0ZXJz
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3RyaW5nSW1wbComIGxvY2F0
aW9uLCBjb25zdCBMQ2hhciogY29uc3QmIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGhhc2gpCisgICAg
c3RhdGljIHZvaWQgdHJhbnNsYXRlKFBhY2tlZFB0cjxTdHJpbmdJbXBsPiYgbG9jYXRpb24sIGNv
bnN0IExDaGFyKiBjb25zdCYgY2hhcmFjdGVycywgdW5zaWduZWQgaGFzaCkKICAgICB7Ci0gICAg
ICAgIGxvY2F0aW9uID0gJlN0cmluZ0ltcGw6OmNyZWF0ZShjaGFyYWN0ZXJzKS5sZWFrUmVmKCk7
Ci0gICAgICAgIGxvY2F0aW9uLT5zZXRIYXNoKGhhc2gpOwotICAgICAgICBsb2NhdGlvbi0+c2V0
SXNBdG9tKHRydWUpOworICAgICAgICBhdXRvKiBwb2ludGVyID0gJlN0cmluZ0ltcGw6OmNyZWF0
ZShjaGFyYWN0ZXJzKS5sZWFrUmVmKCk7CisgICAgICAgIHBvaW50ZXItPnNldEhhc2goaGFzaCk7
CisgICAgICAgIHBvaW50ZXItPnNldElzQXRvbSh0cnVlKTsKKyAgICAgICAgbG9jYXRpb24gPSBw
b2ludGVyOwogICAgIH0KIH07CiAKQEAgLTE1MCwxNiArMTUxLDE3IEBAIHN0cnVjdCBVQ2hhckJ1
ZmZlclRyYW5zbGF0b3IgewogICAgICAgICByZXR1cm4gYnVmLmhhc2g7CiAgICAgfQogCi0gICAg
c3RhdGljIGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogY29uc3QmIHN0ciwgY29uc3QgVUNoYXJCdWZm
ZXImIGJ1ZikKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChQYWNrZWRQdHI8U3RyaW5nSW1wbD4gY29u
c3QmIHN0ciwgY29uc3QgVUNoYXJCdWZmZXImIGJ1ZikKICAgICB7Ci0gICAgICAgIHJldHVybiBX
VEY6OmVxdWFsKHN0ciwgYnVmLmNoYXJhY3RlcnMsIGJ1Zi5sZW5ndGgpOworICAgICAgICByZXR1
cm4gV1RGOjplcXVhbChzdHIuZ2V0KCksIGJ1Zi5jaGFyYWN0ZXJzLCBidWYubGVuZ3RoKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3RyaW5nSW1wbComIGxvY2F0aW9uLCBj
b25zdCBVQ2hhckJ1ZmZlciYgYnVmLCB1bnNpZ25lZCBoYXNoKQorICAgIHN0YXRpYyB2b2lkIHRy
YW5zbGF0ZShQYWNrZWRQdHI8U3RyaW5nSW1wbD4mIGxvY2F0aW9uLCBjb25zdCBVQ2hhckJ1ZmZl
ciYgYnVmLCB1bnNpZ25lZCBoYXNoKQogICAgIHsKLSAgICAgICAgbG9jYXRpb24gPSAmU3RyaW5n
SW1wbDo6Y3JlYXRlOEJpdElmUG9zc2libGUoYnVmLmNoYXJhY3RlcnMsIGJ1Zi5sZW5ndGgpLmxl
YWtSZWYoKTsKLSAgICAgICAgbG9jYXRpb24tPnNldEhhc2goaGFzaCk7Ci0gICAgICAgIGxvY2F0
aW9uLT5zZXRJc0F0b20odHJ1ZSk7CisgICAgICAgIGF1dG8qIHBvaW50ZXIgPSAmU3RyaW5nSW1w
bDo6Y3JlYXRlOEJpdElmUG9zc2libGUoYnVmLmNoYXJhY3RlcnMsIGJ1Zi5sZW5ndGgpLmxlYWtS
ZWYoKTsKKyAgICAgICAgcG9pbnRlci0+c2V0SGFzaChoYXNoKTsKKyAgICAgICAgcG9pbnRlci0+
c2V0SXNBdG9tKHRydWUpOworICAgICAgICBsb2NhdGlvbiA9IHBvaW50ZXI7CiAgICAgfQogfTsK
IApAQCAtMTc2LDggKzE3OCw5IEBAIHN0cnVjdCBIYXNoQW5kVVRGOENoYXJhY3RlcnNUcmFuc2xh
dG9yIHsKICAgICAgICAgcmV0dXJuIGJ1ZmZlci5oYXNoOwogICAgIH0KIAotICAgIHN0YXRpYyBi
b29sIGVxdWFsKFN0cmluZ0ltcGwqIGNvbnN0JiBzdHJpbmcsIGNvbnN0IEhhc2hBbmRVVEY4Q2hh
cmFjdGVycyYgYnVmZmVyKQorICAgIHN0YXRpYyBib29sIGVxdWFsKFBhY2tlZFB0cjxTdHJpbmdJ
bXBsPiBjb25zdCYgcGFzc2VkU3RyaW5nLCBjb25zdCBIYXNoQW5kVVRGOENoYXJhY3RlcnMmIGJ1
ZmZlcikKICAgICB7CisgICAgICAgIGF1dG8qIHN0cmluZyA9IHBhc3NlZFN0cmluZy5nZXQoKTsK
ICAgICAgICAgaWYgKGJ1ZmZlci51dGYxNkxlbmd0aCAhPSBzdHJpbmctPmxlbmd0aCgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yMTIsNyArMjE1LDcgQEAgc3RydWN0IEhhc2hB
bmRVVEY4Q2hhcmFjdGVyc1RyYW5zbGF0b3IgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3RyaW5nSW1wbComIGxvY2F0aW9uLCBjb25z
dCBIYXNoQW5kVVRGOENoYXJhY3RlcnMmIGJ1ZmZlciwgdW5zaWduZWQgaGFzaCkKKyAgICBzdGF0
aWMgdm9pZCB0cmFuc2xhdGUoUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBsb2NhdGlvbiwgY29uc3Qg
SGFzaEFuZFVURjhDaGFyYWN0ZXJzJiBidWZmZXIsIHVuc2lnbmVkIGhhc2gpCiAgICAgewogICAg
ICAgICBVQ2hhciogdGFyZ2V0OwogICAgICAgICBhdXRvIG5ld1N0cmluZyA9IFN0cmluZ0ltcGw6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYnVmZmVyLnV0ZjE2TGVuZ3RoLCB0YXJnZXQpOwpAQCAtMjI1
LDkgKzIyOCwxMCBAQCBzdHJ1Y3QgSGFzaEFuZFVURjhDaGFyYWN0ZXJzVHJhbnNsYXRvciB7CiAg
ICAgICAgIGlmIChpc0FsbEFTQ0lJKQogICAgICAgICAgICAgbmV3U3RyaW5nID0gU3RyaW5nSW1w
bDo6Y3JlYXRlKGJ1ZmZlci5jaGFyYWN0ZXJzLCBidWZmZXIubGVuZ3RoKTsKIAotICAgICAgICBs
b2NhdGlvbiA9ICZuZXdTdHJpbmcubGVha1JlZigpOwotICAgICAgICBsb2NhdGlvbi0+c2V0SGFz
aChoYXNoKTsKLSAgICAgICAgbG9jYXRpb24tPnNldElzQXRvbSh0cnVlKTsKKyAgICAgICAgYXV0
byogcG9pbnRlciA9ICZuZXdTdHJpbmcubGVha1JlZigpOworICAgICAgICBwb2ludGVyLT5zZXRI
YXNoKGhhc2gpOworICAgICAgICBwb2ludGVyLT5zZXRJc0F0b20odHJ1ZSk7CisgICAgICAgIGxv
Y2F0aW9uID0gcG9pbnRlcjsKICAgICB9CiB9OwogCkBAIC0yNjYsMTEgKzI3MCwxMiBAQCBzdHJ1
Y3QgU3Vic3RyaW5nTG9jYXRpb24gewogfTsKIAogc3RydWN0IFN1YnN0cmluZ1RyYW5zbGF0b3Ig
ewotICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShTdHJpbmdJbXBsKiYgbG9jYXRpb24sIGNvbnN0
IFN1YnN0cmluZ0xvY2F0aW9uJiBidWZmZXIsIHVuc2lnbmVkIGhhc2gpCisgICAgc3RhdGljIHZv
aWQgdHJhbnNsYXRlKFBhY2tlZFB0cjxTdHJpbmdJbXBsPiYgbG9jYXRpb24sIGNvbnN0IFN1YnN0
cmluZ0xvY2F0aW9uJiBidWZmZXIsIHVuc2lnbmVkIGhhc2gpCiAgICAgewotICAgICAgICBsb2Nh
dGlvbiA9ICZTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJpbmdTaGFyaW5nSW1wbCgqYnVmZmVyLmJh
c2VTdHJpbmcsIGJ1ZmZlci5zdGFydCwgYnVmZmVyLmxlbmd0aCkubGVha1JlZigpOwotICAgICAg
ICBsb2NhdGlvbi0+c2V0SGFzaChoYXNoKTsKLSAgICAgICAgbG9jYXRpb24tPnNldElzQXRvbSh0
cnVlKTsKKyAgICAgICAgYXV0byogcG9pbnRlciA9ICZTdHJpbmdJbXBsOjpjcmVhdGVTdWJzdHJp
bmdTaGFyaW5nSW1wbCgqYnVmZmVyLmJhc2VTdHJpbmcsIGJ1ZmZlci5zdGFydCwgYnVmZmVyLmxl
bmd0aCkubGVha1JlZigpOworICAgICAgICBwb2ludGVyLT5zZXRIYXNoKGhhc2gpOworICAgICAg
ICBwb2ludGVyLT5zZXRJc0F0b20odHJ1ZSk7CisgICAgICAgIGxvY2F0aW9uID0gcG9pbnRlcjsK
ICAgICB9CiB9OwogCkBAIC0yODAsOSArMjg1LDkgQEAgc3RydWN0IFN1YnN0cmluZ1RyYW5zbGF0
b3I4IDogU3Vic3RyaW5nVHJhbnNsYXRvciB7CiAgICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6
OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGJ1ZmZlci5iYXNlU3RyaW5nLT5jaGFyYWN0ZXJz
OCgpICsgYnVmZmVyLnN0YXJ0LCBidWZmZXIubGVuZ3RoKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
Ym9vbCBlcXVhbChTdHJpbmdJbXBsKiBjb25zdCYgc3RyaW5nLCBjb25zdCBTdWJzdHJpbmdMb2Nh
dGlvbiYgYnVmZmVyKQorICAgIHN0YXRpYyBib29sIGVxdWFsKFBhY2tlZFB0cjxTdHJpbmdJbXBs
PiBjb25zdCYgc3RyaW5nLCBjb25zdCBTdWJzdHJpbmdMb2NhdGlvbiYgYnVmZmVyKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIFdURjo6ZXF1YWwoc3RyaW5nLCBidWZmZXIuYmFzZVN0cmluZy0+Y2hh
cmFjdGVyczgoKSArIGJ1ZmZlci5zdGFydCwgYnVmZmVyLmxlbmd0aCk7CisgICAgICAgIHJldHVy
biBXVEY6OmVxdWFsKHN0cmluZy5nZXQoKSwgYnVmZmVyLmJhc2VTdHJpbmctPmNoYXJhY3RlcnM4
KCkgKyBidWZmZXIuc3RhcnQsIGJ1ZmZlci5sZW5ndGgpOwogICAgIH0KIH07CiAKQEAgLTI5Miw5
ICsyOTcsOSBAQCBzdHJ1Y3QgU3Vic3RyaW5nVHJhbnNsYXRvcjE2IDogU3Vic3RyaW5nVHJhbnNs
YXRvciB7CiAgICAgICAgIHJldHVybiBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1Rv
cDhCaXRzKGJ1ZmZlci5iYXNlU3RyaW5nLT5jaGFyYWN0ZXJzMTYoKSArIGJ1ZmZlci5zdGFydCwg
YnVmZmVyLmxlbmd0aCk7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZXF1YWwoU3RyaW5nSW1w
bCogY29uc3QmIHN0cmluZywgY29uc3QgU3Vic3RyaW5nTG9jYXRpb24mIGJ1ZmZlcikKKyAgICBz
dGF0aWMgYm9vbCBlcXVhbChQYWNrZWRQdHI8U3RyaW5nSW1wbD4gY29uc3QmIHN0cmluZywgY29u
c3QgU3Vic3RyaW5nTG9jYXRpb24mIGJ1ZmZlcikKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6
OmVxdWFsKHN0cmluZywgYnVmZmVyLmJhc2VTdHJpbmctPmNoYXJhY3RlcnMxNigpICsgYnVmZmVy
LnN0YXJ0LCBidWZmZXIubGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6ZXF1YWwoc3RyaW5n
LmdldCgpLCBidWZmZXIuYmFzZVN0cmluZy0+Y2hhcmFjdGVyczE2KCkgKyBidWZmZXIuc3RhcnQs
IGJ1ZmZlci5sZW5ndGgpOwogICAgIH0KIH07CiAKQEAgLTMyNiwxNiArMzMxLDE3IEBAIHN0cnVj
dCBMQ2hhckJ1ZmZlclRyYW5zbGF0b3IgewogICAgICAgICByZXR1cm4gYnVmLmhhc2g7CiAgICAg
fQogCi0gICAgc3RhdGljIGJvb2wgZXF1YWwoU3RyaW5nSW1wbCogY29uc3QmIHN0ciwgY29uc3Qg
TENoYXJCdWZmZXImIGJ1ZikKKyAgICBzdGF0aWMgYm9vbCBlcXVhbChQYWNrZWRQdHI8U3RyaW5n
SW1wbD4gY29uc3QmIHN0ciwgY29uc3QgTENoYXJCdWZmZXImIGJ1ZikKICAgICB7Ci0gICAgICAg
IHJldHVybiBXVEY6OmVxdWFsKHN0ciwgYnVmLmNoYXJhY3RlcnMsIGJ1Zi5sZW5ndGgpOworICAg
ICAgICByZXR1cm4gV1RGOjplcXVhbChzdHIuZ2V0KCksIGJ1Zi5jaGFyYWN0ZXJzLCBidWYubGVu
Z3RoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3RyaW5nSW1wbComIGxv
Y2F0aW9uLCBjb25zdCBMQ2hhckJ1ZmZlciYgYnVmLCB1bnNpZ25lZCBoYXNoKQorICAgIHN0YXRp
YyB2b2lkIHRyYW5zbGF0ZShQYWNrZWRQdHI8U3RyaW5nSW1wbD4mIGxvY2F0aW9uLCBjb25zdCBM
Q2hhckJ1ZmZlciYgYnVmLCB1bnNpZ25lZCBoYXNoKQogICAgIHsKLSAgICAgICAgbG9jYXRpb24g
PSAmU3RyaW5nSW1wbDo6Y3JlYXRlKGJ1Zi5jaGFyYWN0ZXJzLCBidWYubGVuZ3RoKS5sZWFrUmVm
KCk7Ci0gICAgICAgIGxvY2F0aW9uLT5zZXRIYXNoKGhhc2gpOwotICAgICAgICBsb2NhdGlvbi0+
c2V0SXNBdG9tKHRydWUpOworICAgICAgICBhdXRvKiBwb2ludGVyID0gJlN0cmluZ0ltcGw6OmNy
ZWF0ZShidWYuY2hhcmFjdGVycywgYnVmLmxlbmd0aCkubGVha1JlZigpOworICAgICAgICBwb2lu
dGVyLT5zZXRIYXNoKGhhc2gpOworICAgICAgICBwb2ludGVyLT5zZXRJc0F0b20odHJ1ZSk7Cisg
ICAgICAgIGxvY2F0aW9uID0gcG9pbnRlcjsKICAgICB9CiB9OwogCkBAIC0zNDcsMTYgKzM1Mywx
NyBAQCBzdHJ1Y3QgQnVmZmVyRnJvbVN0YXRpY0RhdGFUcmFuc2xhdG9yIHsKICAgICAgICAgcmV0
dXJuIGJ1Zi5oYXNoOwogICAgIH0KIAotICAgIHN0YXRpYyBib29sIGVxdWFsKFN0cmluZ0ltcGwq
IGNvbnN0JiBzdHIsIGNvbnN0IEJ1ZmZlciYgYnVmKQorICAgIHN0YXRpYyBib29sIGVxdWFsKFBh
Y2tlZFB0cjxTdHJpbmdJbXBsPiBjb25zdCYgc3RyLCBjb25zdCBCdWZmZXImIGJ1ZikKICAgICB7
Ci0gICAgICAgIHJldHVybiBXVEY6OmVxdWFsKHN0ciwgYnVmLmNoYXJhY3RlcnMsIGJ1Zi5sZW5n
dGgpOworICAgICAgICByZXR1cm4gV1RGOjplcXVhbChzdHIuZ2V0KCksIGJ1Zi5jaGFyYWN0ZXJz
LCBidWYubGVuZ3RoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoU3RyaW5n
SW1wbComIGxvY2F0aW9uLCBjb25zdCBCdWZmZXImIGJ1ZiwgdW5zaWduZWQgaGFzaCkKKyAgICBz
dGF0aWMgdm9pZCB0cmFuc2xhdGUoUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBsb2NhdGlvbiwgY29u
c3QgQnVmZmVyJiBidWYsIHVuc2lnbmVkIGhhc2gpCiAgICAgewotICAgICAgICBsb2NhdGlvbiA9
ICZTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhidWYuY2hhcmFjdGVycywgYnVmLmxl
bmd0aCkubGVha1JlZigpOwotICAgICAgICBsb2NhdGlvbi0+c2V0SGFzaChoYXNoKTsKLSAgICAg
ICAgbG9jYXRpb24tPnNldElzQXRvbSh0cnVlKTsKKyAgICAgICAgYXV0byogcG9pbnRlciA9ICZT
dHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhidWYuY2hhcmFjdGVycywgYnVmLmxlbmd0
aCkubGVha1JlZigpOworICAgICAgICBwb2ludGVyLT5zZXRIYXNoKGhhc2gpOworICAgICAgICBw
b2ludGVyLT5zZXRJc0F0b20odHJ1ZSk7CisgICAgICAgIGxvY2F0aW9uID0gcG9pbnRlcjsKICAg
ICB9CiB9OwogCkBAIC00NDMsMTEgKzQ1MCwxMSBAQCBSZWY8QXRvbVN0cmluZ0ltcGw+IEF0b21T
dHJpbmdJbXBsOjphZGRTbG93Q2FzZShTdHJpbmdJbXBsJiBzdHJpbmcpCiAgICAgYXV0byBhZGRS
ZXN1bHQgPSBzdHJpbmdUYWJsZSgpLmFkZCgmc3RyaW5nKTsKIAogICAgIGlmIChhZGRSZXN1bHQu
aXNOZXdFbnRyeSkgewotICAgICAgICBBU1NFUlQoKmFkZFJlc3VsdC5pdGVyYXRvciA9PSAmc3Ry
aW5nKTsKKyAgICAgICAgQVNTRVJUKGFkZFJlc3VsdC5pdGVyYXRvci0+Z2V0KCkgPT0gJnN0cmlu
Zyk7CiAgICAgICAgIHN0cmluZy5zZXRJc0F0b20odHJ1ZSk7CiAgICAgfQogCi0gICAgcmV0dXJu
ICpzdGF0aWNfY2FzdDxBdG9tU3RyaW5nSW1wbCo+KCphZGRSZXN1bHQuaXRlcmF0b3IpOworICAg
IHJldHVybiAqc3RhdGljX2Nhc3Q8QXRvbVN0cmluZ0ltcGwqPihhZGRSZXN1bHQuaXRlcmF0b3It
PmdldCgpKTsKIH0KIAogUmVmPEF0b21TdHJpbmdJbXBsPiBBdG9tU3RyaW5nSW1wbDo6YWRkU2xv
d0Nhc2UoQXRvbVN0cmluZ1RhYmxlJiBzdHJpbmdUYWJsZSwgU3RyaW5nSW1wbCYgc3RyaW5nKQpA
QCAtNDczLDExICs0ODAsMTEgQEAgUmVmPEF0b21TdHJpbmdJbXBsPiBBdG9tU3RyaW5nSW1wbDo6
YWRkU2xvd0Nhc2UoQXRvbVN0cmluZ1RhYmxlJiBzdHJpbmdUYWJsZSwgU3QKICAgICBhdXRvIGFk
ZFJlc3VsdCA9IHN0cmluZ1RhYmxlLnRhYmxlKCkuYWRkKCZzdHJpbmcpOwogCiAgICAgaWYgKGFk
ZFJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIEFTU0VSVCgqYWRkUmVzdWx0Lml0ZXJhdG9y
ID09ICZzdHJpbmcpOworICAgICAgICBBU1NFUlQoYWRkUmVzdWx0Lml0ZXJhdG9yLT5nZXQoKSA9
PSAmc3RyaW5nKTsKICAgICAgICAgc3RyaW5nLnNldElzQXRvbSh0cnVlKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gKnN0YXRpY19jYXN0PEF0b21TdHJpbmdJbXBsKj4oKmFkZFJlc3VsdC5pdGVyYXRv
cik7CisgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxBdG9tU3RyaW5nSW1wbCo+KGFkZFJlc3VsdC5p
dGVyYXRvci0+Z2V0KCkpOwogfQogCiB2b2lkIEF0b21TdHJpbmdJbXBsOjpyZW1vdmUoQXRvbVN0
cmluZ0ltcGwqIHN0cmluZykKQEAgLTQ4Nyw3ICs0OTQsNyBAQCB2b2lkIEF0b21TdHJpbmdJbXBs
OjpyZW1vdmUoQXRvbVN0cmluZ0ltcGwqIHN0cmluZykKICAgICBhdXRvJiBhdG9tU3RyaW5nVGFi
bGUgPSBzdHJpbmdUYWJsZSgpOwogICAgIGF1dG8gaXRlcmF0b3IgPSBhdG9tU3RyaW5nVGFibGUu
ZmluZChzdHJpbmcpOwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaXRlcmF0b3IgIT0gYXRvbVN0
cmluZ1RhYmxlLmVuZCgpLCAiVGhlIHN0cmluZyBiZWluZyByZW1vdmVkIGlzIGFuIGF0b20gaW4g
dGhlIHN0cmluZyB0YWJsZSBvZiBhbiBvdGhlciB0aHJlYWQhIik7Ci0gICAgQVNTRVJUKHN0cmlu
ZyA9PSAqaXRlcmF0b3IpOworICAgIEFTU0VSVChzdHJpbmcgPT0gaXRlcmF0b3ItPmdldCgpKTsK
ICAgICBhdG9tU3RyaW5nVGFibGUucmVtb3ZlKGl0ZXJhdG9yKTsKIH0KIApAQCAtNTAyLDcgKzUw
OSw3IEBAIFJlZlB0cjxBdG9tU3RyaW5nSW1wbD4gQXRvbVN0cmluZ0ltcGw6Omxvb2tVcFNsb3dD
YXNlKFN0cmluZ0ltcGwmIHN0cmluZykKICAgICBhdXRvJiBhdG9tU3RyaW5nVGFibGUgPSBzdHJp
bmdUYWJsZSgpOwogICAgIGF1dG8gaXRlcmF0b3IgPSBhdG9tU3RyaW5nVGFibGUuZmluZCgmc3Ry
aW5nKTsKICAgICBpZiAoaXRlcmF0b3IgIT0gYXRvbVN0cmluZ1RhYmxlLmVuZCgpKQotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbVN0cmluZ0ltcGwqPigqaXRlcmF0b3IpOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbVN0cmluZ0ltcGwqPihpdGVyYXRvci0+Z2V0KCkpOwog
ICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC01MjYsNyArNTMzLDcgQEAgUmVmUHRyPEF0b21T
dHJpbmdJbXBsPiBBdG9tU3RyaW5nSW1wbDo6bG9va1VwKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZAogICAgIExDaGFyQnVmZmVyIGJ1ZmZlciA9IHsgY2hhcmFjdGVycywgbGVuZ3Ro
IH07CiAgICAgYXV0byBpdGVyYXRvciA9IHRhYmxlLmZpbmQ8TENoYXJCdWZmZXJUcmFuc2xhdG9y
PihidWZmZXIpOwogICAgIGlmIChpdGVyYXRvciAhPSB0YWJsZS5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEF0b21TdHJpbmdJbXBsKj4oKml0ZXJhdG9yKTsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEF0b21TdHJpbmdJbXBsKj4oaXRlcmF0b3ItPmdldCgpKTsKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAtNTM4LDcgKzU0NSw3IEBAIFJlZlB0cjxBdG9tU3RyaW5n
SW1wbD4gQXRvbVN0cmluZ0ltcGw6Omxvb2tVcChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQKICAgICBVQ2hhckJ1ZmZlciBidWZmZXIgeyBjaGFyYWN0ZXJzLCBsZW5ndGggfTsKICAg
ICBhdXRvIGl0ZXJhdG9yID0gdGFibGUuZmluZDxVQ2hhckJ1ZmZlclRyYW5zbGF0b3I+KGJ1ZmZl
cik7CiAgICAgaWYgKGl0ZXJhdG9yICE9IHRhYmxlLmVuZCgpKQotICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8QXRvbVN0cmluZ0ltcGwqPigqaXRlcmF0b3IpOworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8QXRvbVN0cmluZ0ltcGwqPihpdGVyYXRvci0+Z2V0KCkpOwogICAgIHJldHVybiBu
dWxscHRyOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdU
YWJsZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5jcHAKaW5kZXgg
YzEzODI1MjhkMTA5MDkwNWY0OTExNzFkMjM5YjUyZDNjY2ExOWYxNy4uNGZlMTI3MmM1NDZhYzU3
OWIxNjRiOWVlODRjNDQyYmE0YTI4YzdkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4
dC9BdG9tU3RyaW5nVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQXRvbVN0cmlu
Z1RhYmxlLmNwcApAQCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogQXRvbVN0cmlu
Z1RhYmxlOjp+QXRvbVN0cmluZ1RhYmxlKCkKIHsKLSAgICBmb3IgKGF1dG8qIHN0cmluZyA6IG1f
dGFibGUpCisgICAgZm9yIChjb25zdCBQYWNrZWRQdHI8U3RyaW5nSW1wbD4mIHN0cmluZyA6IG1f
dGFibGUpCiAgICAgICAgIHN0cmluZy0+c2V0SXNBdG9tKGZhbHNlKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaCBiL1NvdXJjZS9XVEYvd3Rm
L3RleHQvQXRvbVN0cmluZ1RhYmxlLmgKaW5kZXggMjRjNjBiMWZiMmQ3ZThmYjg5NDJlNjUwMzM5
M2U0ODQ3MTY5NTY5Yy4uMmYwODljZTk2MDgxYWE2YzdlNThjMWJjMTJjNGUzMDQ1MTEzYTU3ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9BdG9tU3RyaW5nVGFibGUuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L0F0b21TdHJpbmdUYWJsZS5oCkBAIC0yMyw2ICsyMyw3IEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Bh
Y2tlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KIAogbmFtZXNwYWNlIFdU
RiB7CkBAIC0zNCwxMCArMzUsMTAgQEAgY2xhc3MgQXRvbVN0cmluZ1RhYmxlIHsKIHB1YmxpYzoK
ICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkF0b21TdHJpbmdUYWJsZSgpOwogCi0gICAgSGFzaFNl
dDxTdHJpbmdJbXBsKj4mIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZTsgfQorICAgIEhhc2hTZXQ8
UGFja2VkUHRyPFN0cmluZ0ltcGw+PiYgdGFibGUoKSB7IHJldHVybiBtX3RhYmxlOyB9CiAKIHBy
aXZhdGU6Ci0gICAgSGFzaFNldDxTdHJpbmdJbXBsKj4gbV90YWJsZTsKKyAgICBIYXNoU2V0PFBh
Y2tlZFB0cjxTdHJpbmdJbXBsPj4gbV90YWJsZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nSGFzaC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdI
YXNoLmgKaW5kZXggZjk1OTYxOThhOGQ3NmVjMTMzY2M2MmQyZWZjZDU0YzQ3ZjZjNTBjNS4uMTZk
YmE5YjFkYWEzOWJiY2EzZjllZDk5M2I1NTJkMDNlMGNlNzhjMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdIYXNoLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdIYXNoLmgKQEAgLTU2LDYgKzU2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KIAog
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBSZWZQdHI8U3RyaW5nSW1wbD4mIGtl
eSkgeyByZXR1cm4ga2V5LT5oYXNoKCk7IH0KKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9
CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFJlZlB0cjxTdHJpbmdJbXBsPiYgYSwg
Y29uc3QgUmVmUHRyPFN0cmluZ0ltcGw+JiBiKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1
cm4gZXF1YWwoYS5nZXQoKSwgYi5nZXQoKSk7CkBAIC02OSw2ICs3MCwxOSBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgICAgIHJldHVybiBlcXVhbChhLCBiLmdldCgpKTsKICAgICAgICAgfQog
CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFBhY2tlZFB0cjxTdHJpbmdJbXBsPiYg
YSwgY29uc3QgUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBiKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZXF1YWwoYS5nZXQoKSwgYi5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBhLCBjb25zdCBTdHJp
bmdJbXBsKiBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXF1YWwoYS5nZXQoKSwg
Yik7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1w
bCogYSwgY29uc3QgUGFja2VkUHRyPFN0cmluZ0ltcGw+JiBiKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZXF1YWwoYSwgYi5nZXQoKSk7CisgICAgICAgIH0KKwogICAgICAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBTdHJpbmcmIGtleSkgeyByZXR1cm4ga2V5LmltcGwoKS0+
aGFzaCgpOyB9CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFN0cmluZyYgYSwgY29u
c3QgU3RyaW5nJiBiKQogICAgICAgICB7CkBAIC0xMzUsNiArMTQ5LDE2IEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICAgICAgcmV0dXJuIGVxdWFsKGEuZ2V0KCksIGIuZ2V0KCkpOwogICAgICAg
ICB9CiAKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUGFja2VkUHRyPFN0cmlu
Z0ltcGw+JiBrZXkpIAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaGFzaChrZXkuZ2V0
KCkpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUGFja2Vk
UHRyPFN0cmluZ0ltcGw+JiBhLCBjb25zdCBQYWNrZWRQdHI8U3RyaW5nSW1wbD4mIGIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcXVhbChhLmdldCgpLCBiLmdldCgpKTsKKyAgICAg
ICAgfQorCiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFN0cmluZyYga2V5KQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gaGFzaChrZXkuaW1wbCgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdJbXBsLmgKaW5kZXggYzM0ZTRhZTEzZmVhYWIwM2UwYTRlOTJjNjc0ZWExN2M2OTdj
YzkyOC4uOGZiMTk2ZmNjZTE5NWU1NjM3OWZlZTFjYmFkODZmNGI3YjU1ZWIxZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKKysrIGIvU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdJbXBsLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDx3dGYvRGVidWdI
ZWFwLmg+CiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFja2VkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BU0NJSUZh
c3RQYXRoLmg+CkBAIC01OTgsNiArNTk5LDkgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhh
c2g8U3RyaW5nSW1wbCo+IHsKIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFJlZlB0cjxT
dHJpbmdJbXBsPj4gewogICAgIHR5cGVkZWYgU3RyaW5nSGFzaCBIYXNoOwogfTsKK3RlbXBsYXRl
PD4gc3RydWN0IERlZmF1bHRIYXNoPFBhY2tlZFB0cjxTdHJpbmdJbXBsPj4geworICAgIHVzaW5n
IEhhc2ggPSBTdHJpbmdIYXNoOworfTsKIAogI2RlZmluZSBNQUtFX1NUQVRJQ19TVFJJTkdfSU1Q
TChjaGFyYWN0ZXJzKSAoW10geyBcCiAgICAgICAgIHN0YXRpYyBTdGF0aWNTdHJpbmdJbXBsIGlt
cGwoY2hhcmFjdGVycyk7IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9HQ1JlYWNo
YWJsZVJlZi5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0dDUmVhY2hhYmxlUmVmLmgKaW5kZXggOTk3
YmM1ZTVjNzc1YmE2NTcwY2Q0ODRhNzI0OTQ5Mzc1ZWMxNmUxOS4uODQ4YWM3YmU2MmFmM2UyMDkw
M2Y2MWZiNGZkNzI3ZWQxOTg4N2U5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0dD
UmVhY2hhYmxlUmVmLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0dDUmVhY2hhYmxlUmVmLmgK
QEAgLTc0LDcgKzc0LDcgQEAgY2xhc3MgR0NSZWFjaGFibGVSZWYgewogCiAgICAgLy8gSGFzaCB0
YWJsZSBkZWxldGVkIHZhbHVlcywgd2hpY2ggYXJlIG9ubHkgY29uc3RydWN0ZWQgYW5kIG5ldmVy
IGNvcGllZCBvciBkZXN0cm95ZWQuCiAgICAgR0NSZWFjaGFibGVSZWYoV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fcHRyKFJlZlB0cjxUPjo6aGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCkpCisgICAgICAgIDogbV9wdHIoUmVmUHRyPFQ+OjpQdHJUcmFpdHM6Omhhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpKQogICAgIHsgfQogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3B0ci5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5oCmluZGV4IDdkODBiNjI2ODA0YTM3YTQxNzI4
NmZlNTMzYmVmNGQzNWYyMzVhYjIuLjMzZjczY2UxNmVjYTlmOGRlZjhkOTJmZjU4NGNlMzMwYTM4
MDhhMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaApAQCAtMTA0LDcgKzEwNCw3IEBA
IGNsYXNzIFF1YWxpZmllZE5hbWUgewogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGlu
aXQoKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZUltcGwqIGhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIFJlZlB0cjxRdWFsaWZpZWROYW1lSW1wbD46Omhhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpOyB9CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWVJbXBsKiBoYXNo
VGFibGVEZWxldGVkVmFsdWUoKSB7IHJldHVybiBSZWZQdHI8UXVhbGlmaWVkTmFtZUltcGw+OjpQ
dHJUcmFpdHM6Omhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CiAgICAgCiAgICAgUmVmUHRyPFF1
YWxpZmllZE5hbWVJbXBsPiBtX2ltcGw7CiB9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDdjMWM3ZjY5MDdlMmY4M2ExNjkzN2Q3YmZkOGEwMWE4
ZWY0MjdlYzMuLjcxZjA2MzllOWM5ZDc5NTcxMzU3M2YzMTBjZjEzYWU1MjhkYWJmMmQgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NyBAQAorMjAyMC0wMS0xOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisg
ICAgICAgIFtXVEZdIEF0b21TdHJpbmdUYWJsZSBzaG91bGQgYmUgc21hbGwKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjQwMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvSGFzaE1hcC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcDoKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhY2tl
ZC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMC0wMS0xNyAgQ2F0
aGllIENoZW4gIDxjYXRoaWVjaGVuQGlnYWxpYS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQg
Zm9yIHNjcm9sbCBiZWhhdmlvciBwYXJzaW5nCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9IYXNoTWFwLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0hhc2hNYXAuY3BwCmluZGV4IGE3MGMxNjM1NmI2YzFkMjY5NjdmNzVjNjkxMGJjMWMwMTQ2MjRm
OGYuLjY2YjU1NzQyYjNlNTM5MjViOGE1NDU5YzhhNGM2MjY2Y2M1MWMxMWEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hNYXAuY3BwCkBAIC03MTYsNyArNzE2LDcgQEAgVEVT
VChXVEZfSGFzaE1hcCwgUmVmUHRyTm90WmVyb2VkQmVmb3JlRGVyZWYpCiAgICAgLy8gdmFsdWUu
CiAgICAgLy8gQSB6ZXJvIHdvdWxkIGJlIGEgaW5jb3JyZWN0IG91dGNvbWUgYXMgaXQgd291bGQg
bWVhbiB3ZSBudWxsZWQgdGhlIGJ1Y2tldCBiZWZvcmUgYW4gb3BhcXVlCiAgICAgLy8gY2FsbC4K
LSAgICBFWFBFQ1RfVFJVRShvYnNlcnZlci0+b2JzZXJ2ZWRCdWNrZXQgPT0gb2JzZXJ2ZXIuZ2V0
KCkgfHwgb2JzZXJ2ZXItPm9ic2VydmVkQnVja2V0ID09IFJlZlB0cjxEZXJlZk9ic2VydmVyPjo6
aGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpOworICAgIEVYUEVDVF9UUlVFKG9ic2VydmVyLT5vYnNl
cnZlZEJ1Y2tldCA9PSBvYnNlcnZlci5nZXQoKSB8fCBvYnNlcnZlci0+b2JzZXJ2ZWRCdWNrZXQg
PT0gUmVmUHRyPERlcmVmT2JzZXJ2ZXI+OjpQdHJUcmFpdHM6Omhhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpKTsKICAgICBFWFBFQ1RfRVEob2JzZXJ2ZXItPmNvdW50LCAwdSk7CiB9CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAKaW5kZXggZTY2YjljNzdlNzA1Nzg0ZGE0
NjFmZTEyNzA4ZDcxMDNkNzg1YzNhYS4uNDRlMjE3ZTBlMTAwMWMzZjFlZWI1NjU4ZjBjODkzZGIz
YzIzYWI2NSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNl
dC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaFNldC5jcHAKQEAg
LTMxNSw3ICszMTUsNyBAQCBURVNUKFdURl9IYXNoU2V0LCBSZWZQdHJOb3RaZXJvZWRCZWZvcmVE
ZXJlZikKICAgICAvLyB2YWx1ZS4KICAgICAvLyBBIHplcm8gd291bGQgYmUgYSBpbmNvcnJlY3Qg
b3V0Y29tZSBhcyBpdCB3b3VsZCBtZWFuIHdlIG51bGxlZCB0aGUgYnVja2V0IGJlZm9yZSBhbiBv
cGFxdWUKICAgICAvLyBjYWxsLgotICAgIEVYUEVDVF9UUlVFKG9ic2VydmVyLT5vYnNlcnZlZEJ1
Y2tldCA9PSBvYnNlcnZlci5nZXQoKSB8fCBvYnNlcnZlci0+b2JzZXJ2ZWRCdWNrZXQgPT0gUmVm
UHRyPERlcmVmT2JzZXJ2ZXI+OjpoYXNoVGFibGVEZWxldGVkVmFsdWUoKSk7CisgICAgRVhQRUNU
X1RSVUUob2JzZXJ2ZXItPm9ic2VydmVkQnVja2V0ID09IG9ic2VydmVyLmdldCgpIHx8IG9ic2Vy
dmVyLT5vYnNlcnZlZEJ1Y2tldCA9PSBSZWZQdHI8RGVyZWZPYnNlcnZlcj46OlB0clRyYWl0czo6
aGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpOwogICAgIEVYUEVDVF9FUShvYnNlcnZlci0+Y291bnQs
IDB1KTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFj
a2VkLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhY2tlZC5jcHAKaW5kZXgg
YjQ4NDliZGUzOGY0MTMxZjJkMWFiZGVmNGVhYzM2MTdkYzM3YWEwMi4uMzIyMzYxOTI4YzgwYjNj
MDRkODUzOWZjMDYxNThmODMzNjA1NmI5NCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvUGFja2VkLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9QYWNrZWQuY3BwCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNp
bmNsdWRlIDx3dGYvUGFja2VkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIApAQCAtODIsNCAr
ODQsMjUgQEAgVEVTVChXVEZfUGFja2VkLCBQYWNrZWRBbGlnbmVkUHRyKQogICAgIH0KIH0KIAor
c3RydWN0IFBhY2tpbmdUYXJnZXQgeworICAgIHVuc2lnbmVkIG1fdmFsdWUgeyAwIH07Cit9Owor
VEVTVChXVEZfUGFja2VkLCBIYXNoTWFwKQoreworICAgIFZlY3RvcjxQYWNraW5nVGFyZ2V0PiB2
ZWN0b3I7CisgICAgSGFzaE1hcDxQYWNrZWRQdHI8UGFja2luZ1RhcmdldD4sIHVuc2lnbmVkPiBt
YXA7CisgICAgdmVjdG9yLnJlc2VydmVDYXBhY2l0eSgxMDAwMCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDEwMDAwOyArK2kpCisgICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBlbmQo
UGFja2luZ1RhcmdldCB7IGkgfSk7CisKKyAgICBmb3IgKGF1dG8mIHRhcmdldCA6IHZlY3RvcikK
KyAgICAgICAgbWFwLmFkZCgmdGFyZ2V0LCB0YXJnZXQubV92YWx1ZSk7CisKKyAgICBmb3IgKGF1
dG8mIHRhcmdldCA6IHZlY3RvcikgeworICAgICAgICBFWFBFQ1RfVFJVRShtYXAuY29udGFpbnMo
JnRhcmdldCkpOworICAgICAgICBFWFBFQ1RfRVEobWFwLmdldCgmdGFyZ2V0KSwgdGFyZ2V0Lm1f
dmFsdWUpOworICAgIH0KK30KKworCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>
<flag name="review"
          id="403911"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>