<?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>208100</bug_id>
          
          <creation_ts>2020-02-22 22:06:54 -0800</creation_ts>
          <short_desc>Refine the DOM element iterator implementation</short_desc>
          <delta_ts>2020-02-23 14:45:58 -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>DOM</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>
          
          <blocked>207816</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>annulen</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>dbates</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1621957</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-22 22:06:54 -0800</bug_when>
    <thetext>Refine the DOM element iterator implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621958</commentid>
    <comment_count>1</comment_count>
      <attachid>391479</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-22 22:21:48 -0800</bug_when>
    <thetext>Created attachment 391479
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621965</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-22 23:16:56 -0800</bug_when>
    <thetext>Committed r257192: &lt;https://trac.webkit.org/changeset/257192&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621966</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-22 23:17:15 -0800</bug_when>
    <thetext>&lt;rdar://problem/59704205&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391479</attachid>
            <date>2020-02-22 22:21:48 -0800</date>
            <delta_ts>2020-02-23 14:45:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208100-20200222222147.patch</filename>
            <type>text/plain</type>
            <size>132660</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3MTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGEzNGY0NDZhOTRiMjQ1
NTc2M2ViMzkyN2M1ZGMzZjZlZDcwMThhNC4uZDgzY2QxMTBlODAyYmQ5MTc4ZTcwNTQ4N2QzMWEw
MmQ3N2Y1MDIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OSBAQAorMjAyMC0wMi0yMiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmaW5lIHRoZSBET00gZWxl
bWVudCBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4MTAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgLSBSZW1vdmVkIHRoZSBkdXBsaWNhdGUgZGVzY2VuZGFudCBp
dGVyYXRvciwga2VlcGluZyB0aGUgb25lIHRoYXQgbWF0Y2hlcworICAgICAgICAgIHRoZSBzdHls
ZSBvZiB0aGUgYW5jZXN0b3IgYW5kIGNoaWxkIGl0ZXJhdG9ycy4KKyAgICAgICAgLSBSZW1vdmVk
IHRoZSBub24tdGVtcGxhdGUgZWxlbWVudEFuY2VzdG9ycywgZWxlbWVudENoaWxkcmVuLCBlbGVt
ZW50RGVzY2VuZGFudHMsCisgICAgICAgICAgYW5kIGVsZW1lbnRMaW5lYWdlIGZ1bmN0aW9ucyBh
bmQgY2hhbmdlZCBjYWxsZXJzIHRvIHVzZSB4eHhPZlR5cGU8RWxlbWVudD4gaW5zdGVhZC4KKyAg
ICAgICAgLSBSZW5hbWVkICJJdGVyYXRvckFkYXB0ZXIiIHRlbXBsYXRlcyB0byAiUmFuZ2UiLCBj
aG9vc2luZyB0aGF0IHRlcm0gdG8gbWF0Y2ggdGhlCisgICAgICAgICAgdXBjb21pbmcgQysrMjAg
UmFuZ2VzIGxpYnJhcnkgYW5kIHJhbmdlLWJhc2VkIGZvciBsb29wcy4KKyAgICAgICAgLSBDaGFu
Z2VkIHRoZSBpdGVyYXRvcnMgdG8gdXNlIGFuIGFjdHVhbCAibnVsbHB0ciIgZm9yIGVuZCwgZm9s
bG93aW5nIHRoZSAic2VudGluZWwiCisgICAgICAgICAgZGVzaWduIHBhdHRlcm4gZnJvbSB0aGUg
UmFuZ2VzIGxpYnJhcnkuIFN0aWxsIGtlcHQgYSB0aW55IGJpdCBvZiB1c2luZyBhbiBpdGVyYXRv
cgorICAgICAgICAgIGZvciBlbmQgYXJvdW5kLCBvbmx5IHNvIHdlIGNhbiB1c2UgaXRlcmF0b3Ig
bGlicmFyeSBmdW5jdGlvbnMgbGlrZSBzdGQ6OmRpc3RhbmNlCisgICAgICAgICAgd2hpbGUgd2Fp
dGluZyBmb3Igc3RkOjpyYW5nZXM6OmRpc3RhbmNlLCB3aGljaCBpcyBjb21wYXRpYmxlIHdpdGgg
c2VudGluZWxzLgorICAgICAgICAtIEltcGxlbWVudGVkIGNvbnN0IGNvcnJlY3RuZXNzIGJ5IHVz
aW5nIGNvbnN0IHR5cGVzIGluc3RlYWQgb2Ygc2VwYXJhdGUgIkNvbnN0IgorICAgICAgICAgIGNs
YXNzIHRlbXBsYXRlcy4gVGhpcyBjdXQgZG93biBvbiBzb3VyY2UgY29kZSBzaXplIGEgbG90LiBU
aGVzZSBlbGVtZW50IGl0ZXJhdG9ycworICAgICAgICAgIGRvbid0IG5lZWQgd2hvbGUgc2VwYXJh
dGUgdGVtcGxhdGVzIHRvIGltcGxlbWVudCB0aGUgY29uc3QgY29ycmVjdG5lc3MgdGhlIHdheQor
ICAgICAgICAgIGNvbGxlY3Rpb24gY2xhc3NlcyBsaWtlIEhhc2hNYXAgZG8uCisgICAgICAgIC0g
SW1wcm92ZWQgc29tZSBvdGhlciBkZXRhaWxzLCBsaWtlIHVzaW5nIG1vcmUgY29uc3QgYW5kIGNv
bnN0ZXhwciBvbiBtZW1iZXJzLgorICAgICAgICAgIEFsbCB0aGUgZnVuY3Rpb25zIG9uIGEgcmFu
Z2UgYXJlIGNvbnN0LCBiZWNhdXNlIHRoZSByYW5nZSBpdHNlbGYgZG9lc24ndCBldmVyCisgICAg
ICAgICAgZ2V0IG1vZGlmaWVkLCBhbmQgYWxsIGZ1bmN0aW9ucyBvbiBhbiBpdGVyYXRvciBhcmUg
YWxzbyBjb25zdCwgYmVjYXVzZSBvbmx5CisgICAgICAgICAgb3BlcmF0aW9ucyBsaWtlICsrIGFu
ZCAtLSBhY3R1YWxseSBtb2RpZnkgdGhlIGl0ZXJhdG9yLgorICAgICAgICAtIEZvciBub3cgYXQg
bGVhc3QsIHJlbW92ZWQgZXh0cmEgY29kZSB3ZSBkb24ndCBuZWVkIGluIHByYWN0aWNlLiBXZSBu
ZXZlciBuZWVkIHRvCisgICAgICAgICAgY29tcGFyZSBpdGVyYXRvcnMgdG8gZWFjaCBvdGhlciBl
eGNlcHQgd2hlbiBpdGVyYXRpbmcgYSByYW5nZSwgZm9yIGV4YW1wbGUsIHNvCisgICAgICAgICAg
a2VwdCB0aGUgIT0gdXNlZCBmb3IgcmFuZ2UgaXRlcmF0aW9uIGJ1dCBub3QgPT0uCisgICAgICAg
IC0gU2ltcGxpZmllZCB0aGUgSFRNTENvbGxlY3Rpb24gaW1wbGVtZW50YXRpb25zIGJ5IHRha2lu
ZyBhZHZhbnRhZ2Ugb2YgdGhlIG51bGwtCisgICAgICAgICAgYmFzZWQgYW5kIHNlbnRpbmVsIGRl
c2lnbnMuIFRoZXJlIGFyZSB2YXJpb3VzIHBsYWNlcyB3aGVyZSB3ZSBjYW4gd3JpdGUKKyAgICAg
ICAgICBzaW1wbGVyIGNvZGUgYW5kIHBhc3MgYXJvdW5kIGZld2VyIGFyZ3VtZW50cy4KKyAgICAg
ICAgLSBBZGRlZCBhIG5ldyBkZXNjZW5kYW50c09mVHlwZSB0ZW1wbGF0ZSB0aGF0IHRha2VzIGEg
cHJlZGljYXRlIGFuZCBmaWx0ZXJzIHRvIG9ubHkKKyAgICAgICAgICB0aGUgZWxlbWVudHMgdGhh
dCBtYXRjaCB0aGF0IHByZWRpY2F0ZS4gU2ltaWxhciBjb25jZXB0IHRvIGhvdyB3ZSBpbXBsZW1l
bnQgSFRNTAorICAgICAgICAgIGNvbGxlY3Rpb25zLCBhbmQgcG9zc2libHkgY291bGQgYmUgdXNl
ZCBldmVuIG1vcmUgZXZlbnR1YWxseS4KKyAgICAgICAgLSBVc2Ugc3RkOjppdGVyYXRvciBpbiBF
bGVtZW50SXRlcmF0b3Igc28gd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGF0IGluIGRlcml2ZWQKKyAg
ICAgICAgICBjbGFzc2VzLiBBbHNvIG1hZGUgbW9yZSBvZiBFbGVtZW50SXRlcmF0b3IgcHJvdGVj
dGVkIHRvIG1ha2UgaXQgbW9yZSBleHBsaWNpdAorICAgICAgICAgIHRoYXQgaXQncyBhbiBhYnN0
cmFjdCBjbGFzcyB0ZW1wbGF0ZSBhbmQgbm90IHNvbWV0aGluZyB0byBiZSB1c2VkIGRpcmVjdGx5
LgorCisgICAgICAgIFRoZSBtb3N0IHVudXN1YWwgY2xpZW50cyBvZiB0aGUgZWxtZWVudCByYW5n
ZXMgYW5kIGl0ZXJhdG9ycyBhcmUgSFRNTENvbGxlY3Rpb24gYW5kCisgICAgICAgIHRoZSByZWxh
dGVkIGNhY2hlcywgYW5kIHRoaXMgcGF0Y2ggaW5jbHVkZXMgY2hhbmdlcyB0byB0aG9zZSB0byBh
ZG9wdCB0aGUgbmV3IG1vZGVsLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZTogUmVtb3ZlZCBF
bGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmguCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKworICAgICAgICAqIGRvbS9DaGlsZE5vZGVMaXN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZUxpc3Q6OkNoaWxkTm9kZUxpc3QpOiBSZW1v
dmVkIGluaXRpYWxpemF0aW9uIG9mIG1faW5kZXhDYWNoZQorICAgICAgICBzaW5jZSB0aGUgY29u
c3RydWN0b3Igbm8gbG9uZ2VyIHJlcXVpcmVzIGFyZ3VtZW50cy4KKyAgICAgICAgKFdlYkNvcmU6
OkNoaWxkTm9kZUxpc3Q6OmludmFsaWRhdGVDYWNoZSk6IFJlbW92ZWQgYXJndW1lbnQgdG8KKyAg
ICAgICAgQ29sbGVjdGlvbkluZGV4Q2FjaGU6OmludmFsaWRhdGUuCisgICAgICAgICogZG9tL0No
aWxkTm9kZUxpc3QuaDogUmVtb3ZlZCBjb2xsZWN0aW9uRW5kLCBzaW5jZSBpdCdzIG5vIGxvbmdl
ciBuZWVkZWQuCisKKyAgICAgICAgKiBkb20vQ29sbGVjdGlvbkluZGV4Q2FjaGUuaDogUmVtb3Zl
ZCB0aGUgY29sbGVjdGlvbiBhcmd1bWVudCB0byB0aGUKKyAgICAgICAgY29uc3RydWN0b3IsIGhh
c1ZhbGlkQ2FjaGUsIGFuZCBpbnZhbGlkYXRlIGZ1bmN0aW9ucy4gVXBkYXRlZCBhbGdvcml0aG1z
IHRvIHVzZQorICAgICAgICBudWxsIHN0eWxlIHRlcm1pbmF0aW9uIGluc3RlYWQgb2YgYWN0dWFs
bHkgcmVseWluZyBvbiBjb21wYXJpbmcgd2l0aCBhbiBlbmQKKyAgICAgICAgaXRlcmF0b3IsIHNp
bmNlIHRoYXQgd29ya3MgZm9yIG91ciBlbGVtZW50IGl0ZXJhdG9ycy4KKworICAgICAgICAqIGRv
bS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OmNo
aWxkRWxlbWVudENvdW50IGNvbnN0KTo6IFVzZSBhbiBlbXB0eSBpbml0aWFsaXplcgorICAgICAg
ICBsaXN0IGluc3RlYWQgb2YgdGhlIHJlc3VsdCBvZiB0aGUgZW5kIGZ1bmN0aW9uIHNpbmNlIHN0
ZDo6ZGlzdGFuY2UgcmVxdWlyZXMKKyAgICAgICAgYm90aCBiZWdpbiBhbmQgZW5kIGl0ZXJhdG9y
cyBoYXZlIHRoZSBzYW1lIHR5cGUuCisKKyAgICAgICAgKiBkb20vRWxlbWVudEFuY2VzdG9ySXRl
cmF0b3IuaDogTWFkZSB0aGUgY2hhbmdlcyBtZW50aW9uZWQgYWJvdmUsIHBsdXMgbW92ZWQgdGhl
CisgICAgICAgIGRlY2xhcmF0aW9ucyBvZiBmdW5jdGlvbnMgdG8gdGhlIHRvcCBvZiB0aGUgZmls
ZSwgc2luY2UgdGhlIGNsYXNzZXMgYXJlCisgICAgICAgIGltcGxlbWVudGF0aW9uIGRldGFpbHMs
IHVzZWQgZG93bmNhc3QgaW5zdGVhZCBvZiBzdGF0aWNfY2FzdC4KKworICAgICAgICAqIGRvbS9F
bGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRvci5oOiBSZW5hbWVkIEl0ZXJhdG9yQWRhcHRl
ciB0byBSYW5nZSwKKyAgICAgICAgbW9zdGx5IGRpZG4ndCBtYWtlIG90aGVyIGNoYW5nZXMgc2lu
Y2UgdGhpcyBpcyBub3Qgb25lIG9mIHRoZSBlbGVtZW50IGl0ZXJhdG9ycy4KKworICAgICAgICAq
IGRvbS9FbGVtZW50Q2hpbGRJdGVyYXRvci5oOiBNYWRlIHRoZSBjaGFuZ2VzIG1lbnRpb25lZCBh
Ym92ZSwgcGx1cyBtb3ZlZCB0aGUKKyAgICAgICAgZGVjbGFyYXRpb25zIG9mIGZ1bmN0aW9ucyB0
byB0aGUgdG9wIG9mIHRoZSBmaWxlLCBzaW5jZSB0aGUgY2xhc3NlcyBhcmUKKyAgICAgICAgaW1w
bGVtZW50YXRpb24gZGV0YWlscy4KKworICAgICAgICAqIGRvbS9FbGVtZW50RGVzY2VuZGFudEl0
ZXJhdG9yLmg6IFJlbW92ZWQuCisKKyAgICAgICAgKiBkb20vRWxlbWVudEl0ZXJhdG9yLmg6IE1h
ZGUgdGhlIGNoYW5nZXMgbWVudGlvbmVkIGFib3ZlLgorCisgICAgICAgICogZG9tL0xpdmVOb2Rl
TGlzdC5jcHA6IFJlbW92ZWQgc29tZSB1bm5lZWRlZCBpbmNsdWRlcywgaW5jbHVkaW5nIEhUTUxD
b2xsZWN0aW9uLmguCisgICAgICAgIChXZWJDb3JlOjpMaXZlTm9kZUxpc3Q6OkxpdmVOb2RlTGlz
dCk6IFNpbXBsaWZpZWQgYSBsaXR0bGUgYml0LgorICAgICAgICAoV2ViQ29yZTo6TGl2ZU5vZGVM
aXN0Ojpyb290Tm9kZSk6IE1vdmVkIHRvIHRoZSBoZWFkZXIuCisKKyAgICAgICAgKiBkb20vTGl2
ZU5vZGVMaXN0Lmg6IFVwZGF0ZWQgc2luY2UgQ29sbGVjdGlvblRyYXZlcnNhbCBub3cgdXNlcyB0
aGUKKyAgICAgICAgbW9yZSBtb2Rlcm4gRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciwgbm90IHRo
ZSBvbGRlciBvbmUgdGhhdCB1c2VkIGEgdmVjdG9yIG9mCisgICAgICAgIGFuY2VzdG9ycyB0byBk
byB0aGUgaXRlcmF0aW9uLiBBbHNvIHVzZSBXVEZfTUFLRV9JU09fTk9OQUxMT0NBVEFCTEUgc2lu
Y2UKKyAgICAgICAgTGl2ZU5vZGVMaXN0IGlzIGFuIGFic3RyYWN0IGNsYXNzLCBhbmQgbWFkZSBz
b21lIG1lbWJlcnMgcHJvdGVjdGVkLiBSZW1vdmVkCisgICAgICAgIENhY2hlZExpdmVOb2RlTGlz
dDo6cm9vdE5vZGUgc2luY2UgaXQgd2FzIGlkZW50aWNhbCB0byBMaXZlTm9kZUxpc3Q6OnJvb3RO
b2RlLAorICAgICAgICBhbmQgbWFkZSBMaXZlTm9kZUxpc3Q6OnJvb3ROb2RlIHByb3RlY3RlZCBz
byBpdCBjYW4gYmUgY2FsbGVkIGluCisgICAgICAgIENhY2hlZExpdmVOb2RlTGlzdCwgYW5kIG1v
dmVkIGl0IHRvIHRoZSBoZWFkZXIgc28gaXQgd2lsbCBzdGlsbCBiZSBpbmxpbmVkLgorICAgICAg
ICBTaW1wbGlmaWVkIENhY2hlZExpc3ROb2RlTGlzdCB0byB1c2UgbW9yZSBmaW5hbCwgdG8gbmFt
ZSBsb25nIHR5cGVzIGxlc3MgYnkKKyAgICAgICAgdXNpbmcgImF1dG8iIGFuZCAidXNpbmciLCBh
bmQgdG8gbm90IHBhc3MgYXJndW1lbnRzIHRvIGZ1bmN0aW9ucyB0aGF0IGRvbid0CisgICAgICAg
IG5lZWQgdGhlbSBhbnkgbW9yZS4KKworICAgICAgICAqIGRvbS9OYW1lTm9kZUxpc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TmFtZU5vZGVMaXN0OjpjcmVhdGUpOiBNb3ZlZCBoZXJlIGZyb20g
dGhlIGhlYWRlci4KKyAgICAgICAgKiBkb20vTmFtZU5vZGVMaXN0Lmg6IFJlbW92ZWQgdW5uZWVk
ZWQgaW5jbHVkZXMgYW5kIGNvbW1lbnQsIG1vdmVkIGNyZWF0ZQorICAgICAgICBmdW5jdGlvbiBv
dXQgb2YgdGhlIGhlYWRlci4KKworICAgICAgICAqIGRvbS9UeXBlZEVsZW1lbnREZXNjZW5kYW50
SXRlcmF0b3IuaDogTWFkZSBhbGwgdGhlIGNoYW5nZSBtZW50aW9uZWQgYWJvdmUuCisgICAgICAg
IEFsc28gYWRkZWQgYSBuZXcgZmlsdGVyZWREZXNjZW5kYW50cyBmdW5jdGlvbiwgcmFuZ2UsIGFu
ZCBpdGVyYXRvciB0aGF0IHVzZXMKKyAgICAgICAgYSBmaWx0ZXIgZnVuY3Rpb24uIE5vdCB1c2Vk
IHlldCBpbiB0aGlzIHBhdGNoOyB1c2UgY29tZXMgaW4gYSBmdXR1cmUgb25lLgorCisgICAgICAg
ICogaHRtbC9DYWNoZWRIVE1MQ29sbGVjdGlvbi5oOiBVcGRhdGVkIGluY2x1ZGVzLCBzaG9ydGVu
ZWQgdHlwZSBuYW1lcywKKyAgICAgICAgYW5kIHVzZWQgYXV0byB0byBzaW1wbGlmeSB0aGUgY29k
ZSBhIGJpdC4gUmVtb3ZlZCB1bm5lZWRlZCBjb2xsZWN0aW9uIGFyZ3VtZW50cworICAgICAgICBm
cm9tIHZhcmlvdXMgQ29sbGVjdGlvbkluZGV4Q2FjaGUgZnVuY3Rpb25zLgorCisgICAgICAgICog
aHRtbC9Db2xsZWN0aW9uVHJhdmVyc2FsLmg6IFVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcvdHlwZWQg
dmVyc2lvbiBvZgorICAgICAgICBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLiBSZW1vdmVkIGVu
ZCBmdW5jdGlvbnMuIFVzZSBzaG9ydGVyIHR5cGUgbmFtZXMuCisgICAgICAgIFR3ZWFrZWQgYWxn
b3JpdGhtcyB0byB1c2UgbnVsbCB0ZXJtaW5hdGlvbiBmb3IgbG9vcHMgaW5zdGVhZCBvZiBlbmQg
aXRlcmF0b3JzLgorCisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5o
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246Oml0ZW0gY29u
c3QpOiBSZW1vdmVkIHVubmVlZGVkIGNsYXNzCisgICAgICAgIHRlbXBsYXRlIGFyZ3VtZW50cy4K
KworICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleCk6IENoYW5nZWQgdG8gdXNlIHRoZSBu
dWxsIGNoZWNrCisgICAgICAgIGluc3RlYWQgb2YgY29tcGFyaW5nIGl0ZXJhdG9yIHdpdGggZW5k
LgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3ROZXh0U291cmNlQ2hpbGQpOiBEaXR0by4KKworICAg
ICAgICAqIGh0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6Om51bVJvd3MgY29uc3QpOiBQYXNzIGEgZGVmYXVs
dC1jb25zdHJ1Y3RlZAorICAgICAgICBpdGVyYXRvciBmb3IgZW5kIHRvIHN0ZDo6ZGlzdGFuY2Uu
IFdoZW4gd2UgZ2V0IEMrKzIwIHdlIGNhbiBjbGVhbiB0aGlzIHVwIGJ5CisgICAgICAgIHVzaW5n
IHN0ZDo6cmFuZ2VzOjpkaXN0YW5jZXMgaW5zdGVhZC4KKworICAgICAgICAqIGh0bWwvTGFiZWxz
Tm9kZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGFiZWxzTm9kZUxpc3Q6OmNyZWF0ZSk6
IE1vdmVkIGhlcmUgZnJvbSB0aGUgaGVhZGVyLgorICAgICAgICAqIGh0bWwvTGFiZWxzTm9kZUxp
c3QuaDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlLCB0d2Vha2VkIGNvZGluZyBzdHlsZSBhIGJp
dCwKKyAgICAgICAgbW92ZWQgY3JlYXRlIGZ1bmN0aW9uIGludG8gdGhlIC5jcHAgZmlsZS4KKwor
ICAgICAgICAqIGh0bWwvUmFkaW9Ob2RlTGlzdC5jcHA6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVk
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvTm9kZUxpc3Q6OmNyZWF0ZSk6IE1vdmVkIHRoaXMg
aGVyZSBmcm9tIHRoZSBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpub25FbXB0eVJhZGlvQnV0
dG9uKTogUmVuYW1lZCBmcm9tIHRvUmFkaW9CdXR0b25JbnB1dEVsZW1lbnQgdG8gbWFrZQorICAg
ICAgICBhIGxpdHRsZSBjbGVhcmVyIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMuCisgICAgICAgIChX
ZWJDb3JlOjpSYWRpb05vZGVMaXN0Ojp2YWx1ZSBjb25zdCk6IFVwZGF0ZWQgdG8gdXNlIG5vbkVt
cHR5UmFkaW9CdXR0b24gYW5kCisgICAgICAgIHN0cmFpZ2h0ZW4gb3V0IHRoZSBsb29wIGEgdGlu
eSBiaXQuCisgICAgICAgIChXZWJDb3JlOjpSYWRpb05vZGVMaXN0OjpzZXRWYWx1ZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9Ob2RlTGlzdDo6Y2hlY2tFbGVtZW50TWF0Y2hlc1Jh
ZGlvTm9kZUxpc3RGaWx0ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFk
aW9Ob2RlTGlzdDo6ZWxlbWVudE1hdGNoZXMgY29uc3QpOiBNZXJnZWQgaW4gdGhlIGxvZ2ljIGZy
b20KKyAgICAgICAgY2hlY2tFbGVtZW50TWF0Y2hlc1JhZGlvTm9kZUxpc3RGaWx0ZXIsIHNpbmNl
IHRoZSBzZXBhcmF0ZSBmdW5jdGlvbiB3YXNuJ3QgaGVscGZ1bC4KKworICAgICAgICAqIGh0bWwv
UmFkaW9Ob2RlTGlzdC5oOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGVzLiBNb3ZlZCB0aGUgY3Jl
YXRlIGZ1bmN0aW9uIG91dAorICAgICAgICBvZiB0aGUgaGVhZGVyLiBSZW1vdmVkIHVubmVlZGVk
IG92ZXJyaWRlIG9mIHRoZSBpdGVtIGZ1bmN0aW9uIHRvIHRpZ2h0ZW4gdGhlCisgICAgICAgIHJl
dHVybiB0eXBlOyBub3QgdXNlZCBpbiBXZWJDb3JlIGFuZCBub3QgaGVscGZ1bCBmb3IgYmluZGlu
Z3MuIE1hZGUgbW9yZSBwcml2YXRlLgorCisgICAgICAgICogc3R5bGUvU3R5bGVJbnZhbGlkYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6SW52YWxpZGF0b3I6OmludmFsaWRhdGVT
dHlsZUZvckRlc2NlbmRhbnRzKTogVXNlIG51bGwgY2hlY2tpbmcKKyAgICAgICAgc3R5bGUgZm9y
IHRoZSBsb29wIHJhdGhlciB0aGFuIGNvbXBhcmluZyB3aXRoIGVuZC4KKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpJbnZhbGlkYXRvcjo6aW52YWxpZGF0ZVN0eWxlV2l0aE1hdGNoRWxlbWVudCk6
IFJlbW92ZSBhbiB1bm5lZWRlZAorICAgICAgICBsb2NhbCB2YXJpYWJsZSBhbmQgYnJhY2VzLgor
CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVt
b3ZlRGlzYWxsb3dlZEVsZW1lbnRzRnJvbVN1YnRyZWUpOiBVc2UgbnVsbCBjaGVja2luZyBzdHls
ZSByYXRoZXIgdGhhbgorICAgICAgICBjb21wYXJpbmcgd2l0aCBlbmQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdVc2VFbGVtZW50OjpleHBhbmRVc2VFbGVtZW50c0luU2hhZG93VHJlZSBjb25zdCk6
IERpdHRvLiBBbHNvIHVzZQorICAgICAgICBkcm9wQXNzZXJ0aW9ucyByYXRoZXIgdGhhbiBhc3Np
Z25pbmcgdG8gZW5kIHdpdGggYSBjb21tZW50IHNheWluZyBpdCBkcm9wcyBhc3NlcnRpb25zLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6ZXhwYW5kU3ltYm9sRWxlbWVudHNJblNo
YWRvd1RyZWUgY29uc3QpOiBEaXR0by4KKwogMjAyMC0wMi0yMiAgSmVyIE5vYmxlICA8amVyLm5v
YmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIHVzaW5nIFFUS2l0IGZvciByZW5kZXJpbmcg
V0sxIHZpZGVvIGZ1bGxzY3JlZW4gY29udHJvbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGFkNGY3
MWQ3YzRiNDk2OTEwMzIxNjMzY2FhZmMzOGQ2MGY2MmNmMWQuLjUzMzc0OGNmZTdkNjU1NTFjMzAy
OTg5ZjhlNjU1MDRiZDNjMWQ2NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMu
Y21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMzkwLDcgKzM5MCw2
IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBkb20vRWxlbWVu
dENoaWxkSXRlcmF0b3IuaAogICAgIGRvbS9FbGVtZW50Q29udGV4dC5oCiAgICAgZG9tL0VsZW1l
bnREYXRhLmgKLSAgICBkb20vRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oCiAgICAgZG9tL0Vs
ZW1lbnRJZGVudGlmaWVyLmgKICAgICBkb20vRWxlbWVudEl0ZXJhdG9yLmgKICAgICBkb20vRWxl
bWVudEl0ZXJhdG9yQXNzZXJ0aW9ucy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODExMmY4MzA3YWNhYjZjM2VmNWI3NTk1ZGM4
YmVlZGVkZWQzOTIyNy4uZGRiYTk0OGMyYTA4ZjRhMzc4OTc3M2M3Y2U2YzFjMWYxNmQ1ZjExZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMjY5Myw3ICsyNjkzLDYgQEAKIAkJOTNEMTk2MzMxRDZDQUI4MjAwRkM3RTQ3IC8qIEV4
Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNEMTk2MzIxRDZDQUI4MjAwRkM3RTQ3IC8qIEV4Y2VwdGlvbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRDQzNzlGMUQ1N0IxNTMwMEFCODVF
QSAvKiBKU0V4ZWNTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOEY5MzREODMxMTg5RjFFRTAwNTA4RDVEIC8qIEpTRXhlY1N0YXRlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNENDM3QTAxRDU3
QjE5QTAwQUI4NUVBIC8qIEN1c3RvbUVsZW1lbnRSZWFjdGlvblF1ZXVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjU2QzlBODFDODkzMTI4MDBDNDU2
REYgLyogQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk5M0Q0MzdBMTFENTdCM0Y0MDBBQjg1RUEgLyog
RWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQURFMTFGNEExOEQ4MzExQjAwNzg5ODNCIC8qIEVsZW1lbnREZXNj
ZW5kYW50SXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk5M0Q0MzdBMjFENTdCM0ZFMDBBQjg1RUEgLyogVVJMVXRpbHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NkI5RENBMTg5REUxMDAw
MEJCODQyQyAvKiBVUkxVdGlscy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTkzRDQzN0EzMUQ1N0I3RTIwMEFCODVFQSAvKiBKU01lZGlhTGlzdEN1
c3RvbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ3
MjZGRTcxNkQ5RjIwNDAwM0E0RTZEIC8qIEpTTWVkaWFMaXN0Q3VzdG9tLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNEOUQ1M0MwREEyN0UxODAw
NzcyMTZDIC8qIFJhbmdlQm91bmRhcnlQb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNEOUQ1M0IwREEyN0UxODAwNzcyMTZDIC8qIFJhbmdlQm91
bmRhcnlQb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xMjI3OCw3ICsxMjI3Nyw2IEBACiAJCUFEREE5NEJGMTk2ODZGODAwMDQ1MzAyOSAv
KiBKU0RvY3VtZW50Q3VzdG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
RG9jdW1lbnRDdXN0b20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURERjFBRDQx
MjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1BhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHUGF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUFEREYxQUQ1MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRoLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1BhdGguaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQURFMTFGNEExOEQ4MzExQjAwNzg5ODNCIC8qIEVsZW1lbnRE
ZXNjZW5kYW50SXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWxl
bWVudERlc2NlbmRhbnRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
REUxNjczNjE4MTA1MEMzMDA0NjNBMkUgLyogUmVuZGVyUHRyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlclB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBREVDNzhGNzE4RUU1MzA4MDAxMzE1QzIgLyogSlNFbGVtZW50Q3VzdG9tLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRWxlbWVudEN1c3RvbS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBREZFMkI1NDFCRDVGNDEyMDBEQUI0NTcgLyogUmVzb3VyY2VVc2Fn
ZU92ZXJsYXlDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFJlc291cmNlVXNhZ2VPdmVybGF5Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yODEzNSw3ICsyODEzMyw2IEBACiAJCQkJMzEzQkNFMUIyMzVFM0JEQjAwRkMzOUU1IC8q
IEVsZW1lbnRDb250ZXh0LmggKi8sCiAJCQkJQjVCN0ExNkYxN0MxMDgwNjAwRTRBQTBBIC8qIEVs
ZW1lbnREYXRhLmNwcCAqLywKIAkJCQlCNUI3QTE2RTE3QzEwNDgwMDBFNEFBMEEgLyogRWxlbWVu
dERhdGEuaCAqLywKLQkJCQlBREUxMUY0QTE4RDgzMTFCMDA3ODk4M0IgLyogRWxlbWVudERlc2Nl
bmRhbnRJdGVyYXRvci5oICovLAogCQkJCTJEMkJFQjJGMjIzNEEzMzQwMDU1NDRDQSAvKiBFbGVt
ZW50SWRlbnRpZmllci5oICovLAogCQkJCUU0QUU3QzE1MTdEMUJCOTUwMDA5RkIzMSAvKiBFbGVt
ZW50SXRlcmF0b3IuaCAqLywKIAkJCQlFNDAxQzI3NDE3Q0U1M0VDMDBDNDFBMzUgLyogRWxlbWVu
dEl0ZXJhdG9yQXNzZXJ0aW9ucy5oICovLApAQCAtMjk4MDEsNyArMjk3OTgsNiBAQAogCQkJCUU0
NkEyQjFFMTdDQTc2QjEwMDBEQkNEOCAvKiBFbGVtZW50Q2hpbGRJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzEzQkNFMUMyMzVFM0JFNTAwRkMzOUU1IC8qIEVsZW1lbnRDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCNUI3QTE3MTE3QzEwQUMwMDBFNEFBMEEgLyogRWxlbWVudERh
dGEuaCBpbiBIZWFkZXJzICovLAotCQkJCTkzRDQzN0ExMUQ1N0IzRjQwMEFCODVFQSAvKiBFbGVt
ZW50RGVzY2VuZGFudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDJCRUIzMTIyMzRB
MzM1MDA1NTQ0Q0EgLyogRWxlbWVudElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0
QUU3QzE2MTdEMUJCOTUwMDA5RkIzMSAvKiBFbGVtZW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCUU0MDFDMjc1MTdDRTUzRUMwMEM0MUEzNSAvKiBFbGVtZW50SXRlcmF0b3JBc3NlcnRp
b25zLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGls
ZE5vZGVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAppbmRl
eCBjYmY2ZjFlNzgyNjkxMDkyNWE2NTY1MmMzM2FlMGNmZDU2NjdiMjAzLi40N2U0NmRjYmI1NTk4
ZTc4MjM3NTU2ZGI3YTdhY2ZlMjA0OThlMTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQ2hpbGROb2RlTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxp
c3QuY3BwCkBAIC0zOSw3ICszOSw2IEBAIEVtcHR5Tm9kZUxpc3Q6On5FbXB0eU5vZGVMaXN0KCkK
IAogQ2hpbGROb2RlTGlzdDo6Q2hpbGROb2RlTGlzdChDb250YWluZXJOb2RlJiBwYXJlbnQpCiAg
ICAgOiBtX3BhcmVudChwYXJlbnQpCi0gICAgLCBtX2luZGV4Q2FjaGUoKnRoaXMpCiB7CiB9CiAK
QEAgLTg3LDcgKzg2LDcgQEAgdm9pZCBDaGlsZE5vZGVMaXN0Ojpjb2xsZWN0aW9uVHJhdmVyc2VC
YWNrd2FyZChOb2RlKiYgY3VycmVudCwgdW5zaWduZWQgY291bnQpIGMKIAogdm9pZCBDaGlsZE5v
ZGVMaXN0OjppbnZhbGlkYXRlQ2FjaGUoKQogewotICAgIG1faW5kZXhDYWNoZS5pbnZhbGlkYXRl
KCp0aGlzKTsKKyAgICBtX2luZGV4Q2FjaGUuaW52YWxpZGF0ZSgpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlz
dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaAppbmRleCAxMTMyODJlZDk2
MjJhOWQ1MDFhYTc0ZTAzMmQ4N2M2OTFjYjkzN2I2Li4xMGI5YTI4NjkwMmY2ZGE3MzBkMWY0M2I1
M2Q3NjUzZjAwNDRmMzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2Rl
TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgKQEAgLTcyLDcg
KzcyLDYgQEAgcHVibGljOgogICAgIC8vIEZvciBDb2xsZWN0aW9uSW5kZXhDYWNoZQogICAgIE5v
ZGUqIGNvbGxlY3Rpb25CZWdpbigpIGNvbnN0OwogICAgIE5vZGUqIGNvbGxlY3Rpb25MYXN0KCkg
Y29uc3Q7Ci0gICAgTm9kZSogY29sbGVjdGlvbkVuZCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7
IH0KICAgICB2b2lkIGNvbGxlY3Rpb25UcmF2ZXJzZUZvcndhcmQoTm9kZSomLCB1bnNpZ25lZCBj
b3VudCwgdW5zaWduZWQmIHRyYXZlcnNlZENvdW50KSBjb25zdDsKICAgICB2b2lkIGNvbGxlY3Rp
b25UcmF2ZXJzZUJhY2t3YXJkKE5vZGUqJiwgdW5zaWduZWQgY291bnQpIGNvbnN0OwogICAgIGJv
b2wgY29sbGVjdGlvbkNhblRyYXZlcnNlQmFja3dhcmQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29sbGVjdGlvbkluZGV4Q2FjaGUuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Db2xsZWN0aW9uSW5kZXhDYWNoZS5oCmluZGV4IDI4MDE5NDJm
ZGEwODhjNWM1ZjZhMTE1YTI1OTQ3ODg1YjVlZWIxZjkuLjNmODFiMjNhNmRhNDUyOTU4NDIxNzYy
MzVkZjQ1MmE3NTY2OTRlMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db2xsZWN0
aW9uSW5kZXhDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db2xsZWN0aW9uSW5kZXhD
YWNoZS5oCkBAIC0zNCwxNSArMzQsMTUgQEAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnRFeHRy
YU1lbW9yeUFsbG9jYXRlZEZvckNvbGxlY3Rpb25JbmRleENhY2hlKHNpemVfdCk7CiB0ZW1wbGF0
ZSA8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3MgSXRlcmF0b3I+CiBjbGFzcyBDb2xsZWN0aW9uSW5k
ZXhDYWNoZSB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQ29sbGVjdGlvbkluZGV4Q2FjaGUoY29u
c3QgQ29sbGVjdGlvbiYpOworICAgIENvbGxlY3Rpb25JbmRleENhY2hlKCk7CiAKICAgICB0eXBl
ZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSBO
b2RlVHlwZTsKIAogICAgIHVuc2lnbmVkIG5vZGVDb3VudChjb25zdCBDb2xsZWN0aW9uJik7CiAg
ICAgTm9kZVR5cGUqIG5vZGVBdChjb25zdCBDb2xsZWN0aW9uJiwgdW5zaWduZWQgaW5kZXgpOwog
Ci0gICAgYm9vbCBoYXNWYWxpZENhY2hlKGNvbnN0IENvbGxlY3Rpb24mIGNvbGxlY3Rpb24pIGNv
bnN0IHsgcmV0dXJuIG1fY3VycmVudCAhPSBjb2xsZWN0aW9uLmNvbGxlY3Rpb25FbmQoKSB8fCBt
X25vZGVDb3VudFZhbGlkIHx8IG1fbGlzdFZhbGlkOyB9Ci0gICAgdm9pZCBpbnZhbGlkYXRlKGNv
bnN0IENvbGxlY3Rpb24mKTsKKyAgICBib29sIGhhc1ZhbGlkQ2FjaGUoKSBjb25zdCB7IHJldHVy
biBtX2N1cnJlbnQgfHwgbV9ub2RlQ291bnRWYWxpZCB8fCBtX2xpc3RWYWxpZDsgfQorICAgIHZv
aWQgaW52YWxpZGF0ZSgpOwogICAgIHNpemVfdCBtZW1vcnlDb3N0KCkKICAgICB7CiAgICAgICAg
IC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRo
cmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bApAQCAtNTYsMjAgKzU2LDE2IEBAIHByaXZh
dGU6CiAgICAgTm9kZVR5cGUqIHRyYXZlcnNlQmFja3dhcmRUbyhjb25zdCBDb2xsZWN0aW9uJiwg
dW5zaWduZWQpOwogICAgIE5vZGVUeXBlKiB0cmF2ZXJzZUZvcndhcmRUbyhjb25zdCBDb2xsZWN0
aW9uJiwgdW5zaWduZWQpOwogCi0gICAgSXRlcmF0b3IgbV9jdXJyZW50OwotICAgIHVuc2lnbmVk
IG1fY3VycmVudEluZGV4OwotICAgIHVuc2lnbmVkIG1fbm9kZUNvdW50OworICAgIEl0ZXJhdG9y
IG1fY3VycmVudCB7IH07CisgICAgdW5zaWduZWQgbV9jdXJyZW50SW5kZXggeyAwIH07CisgICAg
dW5zaWduZWQgbV9ub2RlQ291bnQgeyAwIH07CiAgICAgVmVjdG9yPE5vZGVUeXBlKj4gbV9jYWNo
ZWRMaXN0OwogICAgIGJvb2wgbV9ub2RlQ291bnRWYWxpZCA6IDE7CiAgICAgYm9vbCBtX2xpc3RW
YWxpZCA6IDE7CiB9OwogCi10ZW1wbGF0ZSA8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3MgSXRlcmF0
b3I+Ci1pbmxpbmUgQ29sbGVjdGlvbkluZGV4Q2FjaGU8Q29sbGVjdGlvbiwgSXRlcmF0b3I+OjpD
b2xsZWN0aW9uSW5kZXhDYWNoZShjb25zdCBDb2xsZWN0aW9uJiBjb2xsZWN0aW9uKQotICAgIDog
bV9jdXJyZW50KGNvbGxlY3Rpb24uY29sbGVjdGlvbkVuZCgpKQotICAgICwgbV9jdXJyZW50SW5k
ZXgoMCkKLSAgICAsIG1fbm9kZUNvdW50KDApCi0gICAgLCBtX25vZGVDb3VudFZhbGlkKGZhbHNl
KQordGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3MgSXRlcmF0b3I+IENvbGxlY3Rpb25J
bmRleENhY2hlPENvbGxlY3Rpb24sIEl0ZXJhdG9yPjo6Q29sbGVjdGlvbkluZGV4Q2FjaGUoKQor
ICAgIDogbV9ub2RlQ291bnRWYWxpZChmYWxzZSkKICAgICAsIG1fbGlzdFZhbGlkKGZhbHNlKQog
ewogfQpAQCAtNzgsNyArNzQsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3Mg
SXRlcmF0b3I+CiBpbmxpbmUgdW5zaWduZWQgQ29sbGVjdGlvbkluZGV4Q2FjaGU8Q29sbGVjdGlv
biwgSXRlcmF0b3I+Ojpub2RlQ291bnQoY29uc3QgQ29sbGVjdGlvbiYgY29sbGVjdGlvbikKIHsK
ICAgICBpZiAoIW1fbm9kZUNvdW50VmFsaWQpIHsKLSAgICAgICAgaWYgKCFoYXNWYWxpZENhY2hl
KGNvbGxlY3Rpb24pKQorICAgICAgICBpZiAoIWhhc1ZhbGlkQ2FjaGUoKSkKICAgICAgICAgICAg
IGNvbGxlY3Rpb24ud2lsbFZhbGlkYXRlSW5kZXhDYWNoZSgpOwogICAgICAgICBtX25vZGVDb3Vu
dCA9IGNvbXB1dGVOb2RlQ291bnRVcGRhdGluZ0xpc3RDYWNoZShjb2xsZWN0aW9uKTsKICAgICAg
ICAgbV9ub2RlQ291bnRWYWxpZCA9IHRydWU7CkBAIC05MSwxNiArODcsMTUgQEAgdGVtcGxhdGUg
PGNsYXNzIENvbGxlY3Rpb24sIGNsYXNzIEl0ZXJhdG9yPgogdW5zaWduZWQgQ29sbGVjdGlvbklu
ZGV4Q2FjaGU8Q29sbGVjdGlvbiwgSXRlcmF0b3I+Ojpjb21wdXRlTm9kZUNvdW50VXBkYXRpbmdM
aXN0Q2FjaGUoY29uc3QgQ29sbGVjdGlvbiYgY29sbGVjdGlvbikKIHsKICAgICBhdXRvIGN1cnJl
bnQgPSBjb2xsZWN0aW9uLmNvbGxlY3Rpb25CZWdpbigpOwotICAgIGF1dG8gZW5kID0gY29sbGVj
dGlvbi5jb2xsZWN0aW9uRW5kKCk7Ci0gICAgaWYgKGN1cnJlbnQgPT0gZW5kKQorICAgIGlmICgh
Y3VycmVudCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICB1bnNpZ25lZCBvbGRDYXBhY2l0eSA9
IG1fY2FjaGVkTGlzdC5jYXBhY2l0eSgpOwotICAgIHdoaWxlIChjdXJyZW50ICE9IGVuZCkgewor
ICAgIHdoaWxlIChjdXJyZW50KSB7CiAgICAgICAgIG1fY2FjaGVkTGlzdC5hcHBlbmQoJipjdXJy
ZW50KTsKICAgICAgICAgdW5zaWduZWQgdHJhdmVyc2VkOwogICAgICAgICBjb2xsZWN0aW9uLmNv
bGxlY3Rpb25UcmF2ZXJzZUZvcndhcmQoY3VycmVudCwgMSwgdHJhdmVyc2VkKTsKLSAgICAgICAg
QVNTRVJUKHRyYXZlcnNlZCA9PSAoY3VycmVudCAhPSBlbmQgPyAxIDogMCkpOworICAgICAgICBB
U1NFUlQodHJhdmVyc2VkID09IChjdXJyZW50ID8gMSA6IDApKTsKICAgICB9CiAgICAgbV9saXN0
VmFsaWQgPSB0cnVlOwogCkBAIC0xMTMsNyArMTA4LDcgQEAgdW5zaWduZWQgQ29sbGVjdGlvbklu
ZGV4Q2FjaGU8Q29sbGVjdGlvbiwgSXRlcmF0b3I+Ojpjb21wdXRlTm9kZUNvdW50VXBkYXRpbmdM
aXMKIHRlbXBsYXRlIDxjbGFzcyBDb2xsZWN0aW9uLCBjbGFzcyBJdGVyYXRvcj4KIGlubGluZSB0
eXBlbmFtZSBDb2xsZWN0aW9uSW5kZXhDYWNoZTxDb2xsZWN0aW9uLCBJdGVyYXRvcj46Ok5vZGVU
eXBlKiBDb2xsZWN0aW9uSW5kZXhDYWNoZTxDb2xsZWN0aW9uLCBJdGVyYXRvcj46OnRyYXZlcnNl
QmFja3dhcmRUbyhjb25zdCBDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkK
IHsKLSAgICBBU1NFUlQobV9jdXJyZW50ICE9IGNvbGxlY3Rpb24uY29sbGVjdGlvbkVuZCgpKTsK
KyAgICBBU1NFUlQobV9jdXJyZW50KTsKICAgICBBU1NFUlQoaW5kZXggPCBtX2N1cnJlbnRJbmRl
eCk7CiAKICAgICBib29sIGZpcnN0SXNDbG9zZXIgPSBpbmRleCA8IG1fY3VycmVudEluZGV4IC0g
aW5kZXg7CkBAIC0xMjIsNTAgKzExNyw1MCBAQCBpbmxpbmUgdHlwZW5hbWUgQ29sbGVjdGlvbklu
ZGV4Q2FjaGU8Q29sbGVjdGlvbiwgSXRlcmF0b3I+OjpOb2RlVHlwZSogQ29sbGVjdGlvbgogICAg
ICAgICBtX2N1cnJlbnRJbmRleCA9IDA7CiAgICAgICAgIGlmIChpbmRleCkKICAgICAgICAgICAg
IGNvbGxlY3Rpb24uY29sbGVjdGlvblRyYXZlcnNlRm9yd2FyZChtX2N1cnJlbnQsIGluZGV4LCBt
X2N1cnJlbnRJbmRleCk7Ci0gICAgICAgIEFTU0VSVChtX2N1cnJlbnQgIT0gY29sbGVjdGlvbi5j
b2xsZWN0aW9uRW5kKCkpOworICAgICAgICBBU1NFUlQobV9jdXJyZW50KTsKICAgICAgICAgcmV0
dXJuICYqbV9jdXJyZW50OwogICAgIH0KIAogICAgIGNvbGxlY3Rpb24uY29sbGVjdGlvblRyYXZl
cnNlQmFja3dhcmQobV9jdXJyZW50LCBtX2N1cnJlbnRJbmRleCAtIGluZGV4KTsKICAgICBtX2N1
cnJlbnRJbmRleCA9IGluZGV4OwogCi0gICAgQVNTRVJUKG1fY3VycmVudCAhPSBjb2xsZWN0aW9u
LmNvbGxlY3Rpb25FbmQoKSk7CisgICAgQVNTRVJUKG1fY3VycmVudCk7CiAgICAgcmV0dXJuICYq
bV9jdXJyZW50OwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3MgSXRlcmF0
b3I+CiBpbmxpbmUgdHlwZW5hbWUgQ29sbGVjdGlvbkluZGV4Q2FjaGU8Q29sbGVjdGlvbiwgSXRl
cmF0b3I+OjpOb2RlVHlwZSogQ29sbGVjdGlvbkluZGV4Q2FjaGU8Q29sbGVjdGlvbiwgSXRlcmF0
b3I+Ojp0cmF2ZXJzZUZvcndhcmRUbyhjb25zdCBDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNp
Z25lZCBpbmRleCkKIHsKLSAgICBBU1NFUlQobV9jdXJyZW50ICE9IGNvbGxlY3Rpb24uY29sbGVj
dGlvbkVuZCgpKTsKKyAgICBBU1NFUlQobV9jdXJyZW50KTsKICAgICBBU1NFUlQoaW5kZXggPiBt
X2N1cnJlbnRJbmRleCk7CiAgICAgQVNTRVJUKCFtX25vZGVDb3VudFZhbGlkIHx8IGluZGV4IDwg
bV9ub2RlQ291bnQpOwogCiAgICAgYm9vbCBsYXN0SXNDbG9zZXIgPSBtX25vZGVDb3VudFZhbGlk
ICYmIG1fbm9kZUNvdW50IC0gaW5kZXggPCBpbmRleCAtIG1fY3VycmVudEluZGV4OwogICAgIGlm
IChsYXN0SXNDbG9zZXIgJiYgY29sbGVjdGlvbi5jb2xsZWN0aW9uQ2FuVHJhdmVyc2VCYWNrd2Fy
ZCgpKSB7Ci0gICAgICAgIEFTU0VSVChoYXNWYWxpZENhY2hlKGNvbGxlY3Rpb24pKTsKKyAgICAg
ICAgQVNTRVJUKGhhc1ZhbGlkQ2FjaGUoKSk7CiAgICAgICAgIG1fY3VycmVudCA9IGNvbGxlY3Rp
b24uY29sbGVjdGlvbkxhc3QoKTsKICAgICAgICAgaWYgKGluZGV4IDwgbV9ub2RlQ291bnQgLSAx
KQogICAgICAgICAgICAgY29sbGVjdGlvbi5jb2xsZWN0aW9uVHJhdmVyc2VCYWNrd2FyZChtX2N1
cnJlbnQsIG1fbm9kZUNvdW50IC0gaW5kZXggLSAxKTsKICAgICAgICAgbV9jdXJyZW50SW5kZXgg
PSBpbmRleDsKLSAgICAgICAgQVNTRVJUKG1fY3VycmVudCAhPSBjb2xsZWN0aW9uLmNvbGxlY3Rp
b25FbmQoKSk7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnQpOwogICAgICAgICByZXR1cm4gJipt
X2N1cnJlbnQ7CiAgICAgfQogCi0gICAgaWYgKCFoYXNWYWxpZENhY2hlKGNvbGxlY3Rpb24pKQor
ICAgIGlmICghaGFzVmFsaWRDYWNoZSgpKQogICAgICAgICBjb2xsZWN0aW9uLndpbGxWYWxpZGF0
ZUluZGV4Q2FjaGUoKTsKIAogICAgIHVuc2lnbmVkIHRyYXZlcnNlZENvdW50OwogICAgIGNvbGxl
Y3Rpb24uY29sbGVjdGlvblRyYXZlcnNlRm9yd2FyZChtX2N1cnJlbnQsIGluZGV4IC0gbV9jdXJy
ZW50SW5kZXgsIHRyYXZlcnNlZENvdW50KTsKICAgICBtX2N1cnJlbnRJbmRleCA9IG1fY3VycmVu
dEluZGV4ICsgdHJhdmVyc2VkQ291bnQ7CiAKLSAgICBpZiAobV9jdXJyZW50ID09IGNvbGxlY3Rp
b24uY29sbGVjdGlvbkVuZCgpKSB7CisgICAgaWYgKCFtX2N1cnJlbnQpIHsKICAgICAgICAgQVNT
RVJUKG1fY3VycmVudEluZGV4IDwgaW5kZXgpOwogICAgICAgICAvLyBGYWlsZWQgdG8gZmluZCB0
aGUgaW5kZXggYnV0IGF0IGxlYXN0IHdlIG5vdyBrbm93IHRoZSBzaXplLgogICAgICAgICBtX25v
ZGVDb3VudCA9IG1fY3VycmVudEluZGV4ICsgMTsKICAgICAgICAgbV9ub2RlQ291bnRWYWxpZCA9
IHRydWU7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICBBU1NFUlQoaGFzVmFs
aWRDYWNoZShjb2xsZWN0aW9uKSk7CisgICAgQVNTRVJUKGhhc1ZhbGlkQ2FjaGUoKSk7CiAgICAg
cmV0dXJuICYqbV9jdXJyZW50OwogfQogCkBAIC0xNzgsOCArMTczLDcgQEAgaW5saW5lIHR5cGVu
YW1lIENvbGxlY3Rpb25JbmRleENhY2hlPENvbGxlY3Rpb24sIEl0ZXJhdG9yPjo6Tm9kZVR5cGUq
IENvbGxlY3Rpb24KICAgICBpZiAobV9saXN0VmFsaWQpCiAgICAgICAgIHJldHVybiBtX2NhY2hl
ZExpc3RbaW5kZXhdOwogCi0gICAgYXV0byBlbmQgPSBjb2xsZWN0aW9uLmNvbGxlY3Rpb25FbmQo
KTsKLSAgICBpZiAobV9jdXJyZW50ICE9IGVuZCkgeworICAgIGlmIChtX2N1cnJlbnQpIHsKICAg
ICAgICAgaWYgKGluZGV4ID4gbV9jdXJyZW50SW5kZXgpCiAgICAgICAgICAgICByZXR1cm4gdHJh
dmVyc2VGb3J3YXJkVG8oY29sbGVjdGlvbiwgaW5kZXgpOwogICAgICAgICBpZiAoaW5kZXggPCBt
X2N1cnJlbnRJbmRleCkKQEAgLTE4OSwzOSArMTgzLDM5IEBAIGlubGluZSB0eXBlbmFtZSBDb2xs
ZWN0aW9uSW5kZXhDYWNoZTxDb2xsZWN0aW9uLCBJdGVyYXRvcj46Ok5vZGVUeXBlKiBDb2xsZWN0
aW9uCiAKICAgICBib29sIGxhc3RJc0Nsb3NlciA9IG1fbm9kZUNvdW50VmFsaWQgJiYgbV9ub2Rl
Q291bnQgLSBpbmRleCA8IGluZGV4OwogICAgIGlmIChsYXN0SXNDbG9zZXIgJiYgY29sbGVjdGlv
bi5jb2xsZWN0aW9uQ2FuVHJhdmVyc2VCYWNrd2FyZCgpKSB7Ci0gICAgICAgIEFTU0VSVChoYXNW
YWxpZENhY2hlKGNvbGxlY3Rpb24pKTsKKyAgICAgICAgQVNTRVJUKGhhc1ZhbGlkQ2FjaGUoKSk7
CiAgICAgICAgIG1fY3VycmVudCA9IGNvbGxlY3Rpb24uY29sbGVjdGlvbkxhc3QoKTsKICAgICAg
ICAgaWYgKGluZGV4IDwgbV9ub2RlQ291bnQgLSAxKQogICAgICAgICAgICAgY29sbGVjdGlvbi5j
b2xsZWN0aW9uVHJhdmVyc2VCYWNrd2FyZChtX2N1cnJlbnQsIG1fbm9kZUNvdW50IC0gaW5kZXgg
LSAxKTsKICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBpbmRleDsKLSAgICAgICAgQVNTRVJUKG1f
Y3VycmVudCAhPSBlbmQpOworICAgICAgICBBU1NFUlQobV9jdXJyZW50KTsKICAgICAgICAgcmV0
dXJuICYqbV9jdXJyZW50OwogICAgIH0KIAotICAgIGlmICghaGFzVmFsaWRDYWNoZShjb2xsZWN0
aW9uKSkKKyAgICBpZiAoIWhhc1ZhbGlkQ2FjaGUoKSkKICAgICAgICAgY29sbGVjdGlvbi53aWxs
VmFsaWRhdGVJbmRleENhY2hlKCk7CiAKICAgICBtX2N1cnJlbnQgPSBjb2xsZWN0aW9uLmNvbGxl
Y3Rpb25CZWdpbigpOwogICAgIG1fY3VycmVudEluZGV4ID0gMDsKLSAgICBib29sIHN0YXJ0SXNF
bmQgPSBtX2N1cnJlbnQgPT0gZW5kOwotICAgIGlmIChpbmRleCAmJiAhc3RhcnRJc0VuZCkgewor
ICAgIGJvb2wgc3RhcnRJc0VuZCA9ICFtX2N1cnJlbnQ7CisgICAgaWYgKGluZGV4ICYmIG1fY3Vy
cmVudCkgewogICAgICAgICBjb2xsZWN0aW9uLmNvbGxlY3Rpb25UcmF2ZXJzZUZvcndhcmQobV9j
dXJyZW50LCBpbmRleCwgbV9jdXJyZW50SW5kZXgpOwotICAgICAgICBBU1NFUlQobV9jdXJyZW50
ICE9IGVuZCB8fCBtX2N1cnJlbnRJbmRleCA8IGluZGV4KTsKKyAgICAgICAgQVNTRVJUKG1fY3Vy
cmVudCB8fCBtX2N1cnJlbnRJbmRleCA8IGluZGV4KTsKICAgICB9Ci0gICAgaWYgKG1fY3VycmVu
dCA9PSBlbmQpIHsKKyAgICBpZiAoIW1fY3VycmVudCkgewogICAgICAgICAvLyBGYWlsZWQgdG8g
ZmluZCB0aGUgaW5kZXggYnV0IGF0IGxlYXN0IHdlIG5vdyBrbm93IHRoZSBzaXplLgogICAgICAg
ICBtX25vZGVDb3VudCA9IHN0YXJ0SXNFbmQgPyAwIDogbV9jdXJyZW50SW5kZXggKyAxOwogICAg
ICAgICBtX25vZGVDb3VudFZhbGlkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQotICAgIEFTU0VSVChoYXNWYWxpZENhY2hlKGNvbGxlY3Rpb24pKTsKKyAgICBBU1NFUlQo
aGFzVmFsaWRDYWNoZSgpKTsKICAgICByZXR1cm4gJiptX2N1cnJlbnQ7CiB9CiAKIHRlbXBsYXRl
IDxjbGFzcyBDb2xsZWN0aW9uLCBjbGFzcyBJdGVyYXRvcj4KLXZvaWQgQ29sbGVjdGlvbkluZGV4
Q2FjaGU8Q29sbGVjdGlvbiwgSXRlcmF0b3I+OjppbnZhbGlkYXRlKGNvbnN0IENvbGxlY3Rpb24m
IGNvbGxlY3Rpb24pCit2b2lkIENvbGxlY3Rpb25JbmRleENhY2hlPENvbGxlY3Rpb24sIEl0ZXJh
dG9yPjo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgbV9jdXJyZW50ID0gY29sbGVjdGlvbi5jb2xsZWN0
aW9uRW5kKCk7CisgICAgbV9jdXJyZW50ID0geyB9OwogICAgIG1fbm9kZUNvdW50VmFsaWQgPSBm
YWxzZTsKICAgICBtX2xpc3RWYWxpZCA9IGZhbHNlOwogICAgIG1fY2FjaGVkTGlzdC5zaHJpbmso
MCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKaW5kZXggN2FlMTM4MjhjNWYwMmY0
YmNmZDg5ZWE4NjAwMDQ5YTM1M2NhY2M3Yi4uOGQ0ZWY5NmRlNzcyY2Q3YTMyMzI0MWY3OWQzMmJi
MmViYTc3OTg2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcApAQCAtOTIzLDcg
KzkyMyw3IEBAIEVsZW1lbnQqIENvbnRhaW5lck5vZGU6Omxhc3RFbGVtZW50Q2hpbGQoKSBjb25z
dAogdW5zaWduZWQgQ29udGFpbmVyTm9kZTo6Y2hpbGRFbGVtZW50Q291bnQoKSBjb25zdAogewog
ICAgIGF1dG8gY2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxFbGVtZW50PigqdGhpcyk7Ci0gICAg
cmV0dXJuIHN0ZDo6ZGlzdGFuY2UoY2hpbGRyZW4uYmVnaW4oKSwgY2hpbGRyZW4uZW5kKCkpOwor
ICAgIHJldHVybiBzdGQ6OmRpc3RhbmNlKGNoaWxkcmVuLmJlZ2luKCksIHsgfSk7CiB9CiAKIEV4
Y2VwdGlvbk9yPHZvaWQ+IENvbnRhaW5lck5vZGU6OmFwcGVuZChWZWN0b3I8Tm9kZU9yU3RyaW5n
PiYmIHZlY3RvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QW5jZXN0
b3JJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBbmNlc3Rvckl0ZXJhdG9y
LmgKaW5kZXggNGI2MmQzOGIzOGZkMzg0OWM3MzdhY2E4N2VmODQ1MjdmODM3NTVmMC4uYzk5Yzc2
NjI3NTczZWQ5MTYxNzgyZmQwN2JkMWZjNjVmM2IyMzk5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNjMgKzI5LDM3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotY2xhc3MgRWxl
bWVudEFuY2VzdG9ySXRlcmF0b3IgOiBwdWJsaWMgRWxlbWVudEl0ZXJhdG9yPEVsZW1lbnRUeXBl
PiB7Ci1wdWJsaWM6Ci0gICAgRWxlbWVudEFuY2VzdG9ySXRlcmF0b3IoKTsKLSAgICBleHBsaWNp
dCBFbGVtZW50QW5jZXN0b3JJdGVyYXRvcihFbGVtZW50VHlwZSogY3VycmVudCk7Ci0gICAgRWxl
bWVudEFuY2VzdG9ySXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKLX07Cit0ZW1wbGF0ZTx0eXBlbmFt
ZT4gY2xhc3MgRWxlbWVudEFuY2VzdG9yUmFuZ2U7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVt
ZW50VHlwZT4KLWNsYXNzIEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3IgOiBwdWJsaWMgRWxl
bWVudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+IHsKLXB1YmxpYzoKLSAgICBFbGVtZW50QW5j
ZXN0b3JDb25zdEl0ZXJhdG9yKCk7Ci0gICAgZXhwbGljaXQgRWxlbWVudEFuY2VzdG9yQ29uc3RJ
dGVyYXRvcihjb25zdCBFbGVtZW50VHlwZSogY3VycmVudCk7Ci0gICAgRWxlbWVudEFuY2VzdG9y
Q29uc3RJdGVyYXRvciYgb3BlcmF0b3IrKygpOwotfTsKKy8vIFJhbmdlIGZvciBpdGVyYXRpbmcg
YW4gZWxlbWVudCBhbmQgaXRzIGFuY2VzdG9ycy4KK3RlbXBsYXRlPHR5cGVuYW1lIEVsZW1lbnRU
eXBlPiBFbGVtZW50QW5jZXN0b3JSYW5nZTxFbGVtZW50VHlwZT4gbGluZWFnZU9mVHlwZShFbGVt
ZW50JiBmaXJzdCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4gRWxlbWVudEFuY2Vz
dG9yUmFuZ2U8Y29uc3QgRWxlbWVudFR5cGU+IGxpbmVhZ2VPZlR5cGUoY29uc3QgRWxlbWVudCYg
Zmlyc3QpOworCisvLyBSYW5nZSBmb3IgaXRlcmF0aW5nIGEgbm9kZSdzIGVsZW1lbnQgYW5jZXN0
b3JzLgordGVtcGxhdGU8dHlwZW5hbWUgRWxlbWVudFR5cGU+IEVsZW1lbnRBbmNlc3RvclJhbmdl
PEVsZW1lbnRUeXBlPiBhbmNlc3RvcnNPZlR5cGUoTm9kZSYgZGVzY2VuZGFudCk7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4gRWxlbWVudEFuY2VzdG9yUmFuZ2U8Y29uc3QgRWxlbWVu
dFR5cGU+IGFuY2VzdG9yc09mVHlwZShjb25zdCBOb2RlJiBkZXNjZW5kYW50KTsKIAogdGVtcGxh
dGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotY2xhc3MgRWxlbWVudEFuY2VzdG9ySXRlcmF0b3JB
ZGFwdGVyIHsKK2NsYXNzIEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yIDogcHVibGljIEVsZW1lbnRJ
dGVyYXRvcjxFbGVtZW50VHlwZT4gewogcHVibGljOgotICAgIGV4cGxpY2l0IEVsZW1lbnRBbmNl
c3Rvckl0ZXJhdG9yQWRhcHRlcihFbGVtZW50VHlwZSogZmlyc3QpOwotICAgIEVsZW1lbnRBbmNl
c3Rvckl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBiZWdpbigpOwotICAgIEVsZW1lbnRBbmNlc3Rvckl0
ZXJhdG9yPEVsZW1lbnRUeXBlPiBlbmQoKTsKLSAgICBFbGVtZW50VHlwZSogZmlyc3QoKSB7IHJl
dHVybiBtX2ZpcnN0OyB9Ci0KLXByaXZhdGU6Ci0gICAgRWxlbWVudFR5cGUqIG1fZmlyc3Q7Cisg
ICAgZXhwbGljaXQgRWxlbWVudEFuY2VzdG9ySXRlcmF0b3IoRWxlbWVudFR5cGUqID0gbnVsbHB0
cik7CisgICAgRWxlbWVudEFuY2VzdG9ySXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKIH07CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KLWNsYXNzIEVsZW1lbnRBbmNlc3RvckNvbnN0
SXRlcmF0b3JBZGFwdGVyIHsKK2NsYXNzIEVsZW1lbnRBbmNlc3RvclJhbmdlIHsKIHB1YmxpYzoK
LSAgICBleHBsaWNpdCBFbGVtZW50QW5jZXN0b3JDb25zdEl0ZXJhdG9yQWRhcHRlcihjb25zdCBF
bGVtZW50VHlwZSogZmlyc3QpOwotICAgIEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3I8RWxl
bWVudFR5cGU+IGJlZ2luKCkgY29uc3Q7Ci0gICAgRWxlbWVudEFuY2VzdG9yQ29uc3RJdGVyYXRv
cjxFbGVtZW50VHlwZT4gZW5kKCkgY29uc3Q7Ci0gICAgY29uc3QgRWxlbWVudFR5cGUqIGZpcnN0
KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdDsgfQorICAgIGV4cGxpY2l0IEVsZW1lbnRBbmNlc3Rv
clJhbmdlKEVsZW1lbnRUeXBlKiBmaXJzdCk7CisgICAgRWxlbWVudEFuY2VzdG9ySXRlcmF0b3I8
RWxlbWVudFR5cGU+IGJlZ2luKCkgY29uc3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6Om51
bGxwdHJfdCBlbmQoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgRWxlbWVudFR5cGUqIGZpcnN0
KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdDsgfQogCiBwcml2YXRlOgotICAgIGNvbnN0IEVsZW1l
bnRUeXBlKiBtX2ZpcnN0OworICAgIEVsZW1lbnRUeXBlKiBjb25zdCBtX2ZpcnN0OwogfTsKIAot
RWxlbWVudEFuY2VzdG9ySXRlcmF0b3JBZGFwdGVyPEVsZW1lbnQ+IGVsZW1lbnRMaW5lYWdlKEVs
ZW1lbnQqIGZpcnN0KTsKLUVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1l
bnQ+IGVsZW1lbnRMaW5lYWdlKGNvbnN0IEVsZW1lbnQqIGZpcnN0KTsKLUVsZW1lbnRBbmNlc3Rv
ckl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50PiBlbGVtZW50QW5jZXN0b3JzKEVsZW1lbnQqIGRlc2Nl
bmRhbnQpOwotRWxlbWVudEFuY2VzdG9yQ29uc3RJdGVyYXRvckFkYXB0ZXI8RWxlbWVudD4gZWxl
bWVudEFuY2VzdG9ycyhjb25zdCBFbGVtZW50KiBkZXNjZW5kYW50KTsKLXRlbXBsYXRlIDx0eXBl
bmFtZSBFbGVtZW50VHlwZT4gRWxlbWVudEFuY2VzdG9ySXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRU
eXBlPiBsaW5lYWdlT2ZUeXBlKEVsZW1lbnQmIGZpcnN0KTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBF
bGVtZW50VHlwZT4gRWxlbWVudEFuY2VzdG9yQ29uc3RJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5
cGU+IGxpbmVhZ2VPZlR5cGUoY29uc3QgRWxlbWVudCYgZmlyc3QpOwotdGVtcGxhdGUgPHR5cGVu
YW1lIEVsZW1lbnRUeXBlPiBFbGVtZW50QW5jZXN0b3JJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5
cGU+IGFuY2VzdG9yc09mVHlwZShOb2RlJiBkZXNjZW5kYW50KTsKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBFbGVtZW50VHlwZT4gRWxlbWVudEFuY2VzdG9yQ29uc3RJdGVyYXRvckFkYXB0ZXI8RWxlbWVu
dFR5cGU+IGFuY2VzdG9yc09mVHlwZShjb25zdCBOb2RlJiBkZXNjZW5kYW50KTsKLQogLy8gRWxl
bWVudEFuY2VzdG9ySXRlcmF0b3IKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgot
aW5saW5lIEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6RWxlbWVudEFuY2Vz
dG9ySXRlcmF0b3IoKQotICAgIDogRWxlbWVudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihudWxscHRy
KQotewotfQotCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CiBpbmxpbmUgRWxlbWVu
dEFuY2VzdG9ySXRlcmF0b3I8RWxlbWVudFR5cGU+OjpFbGVtZW50QW5jZXN0b3JJdGVyYXRvcihF
bGVtZW50VHlwZSogY3VycmVudCkKICAgICA6IEVsZW1lbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4o
bnVsbHB0ciwgY3VycmVudCkKQEAgLTk1LDExOSArNjksNjIgQEAgaW5saW5lIEVsZW1lbnRBbmNl
c3Rvckl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6RWxlbWVudEFuY2VzdG9ySXRlcmF0b3IoRWxlbWVu
dFR5cGUKIHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KIGlubGluZSBFbGVtZW50QW5j
ZXN0b3JJdGVyYXRvcjxFbGVtZW50VHlwZT4mIEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yPEVsZW1l
bnRUeXBlPjo6b3BlcmF0b3IrKygpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRB
bmNlc3Rvckl0ZXJhdG9yPEVsZW1lbnRUeXBlPiY+KEVsZW1lbnRJdGVyYXRvcjxFbGVtZW50VHlw
ZT46OnRyYXZlcnNlQW5jZXN0b3IoKSk7Ci19Ci0KLS8vIEVsZW1lbnRBbmNlc3RvckNvbnN0SXRl
cmF0b3IKLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRB
bmNlc3RvckNvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpFbGVtZW50QW5jZXN0b3JDb25zdEl0
ZXJhdG9yKCkKLSAgICA6IEVsZW1lbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihudWxscHRy
KQotewotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgRWxlbWVu
dEFuY2VzdG9yQ29uc3RJdGVyYXRvcjxFbGVtZW50VHlwZT46OkVsZW1lbnRBbmNlc3RvckNvbnN0
SXRlcmF0b3IoY29uc3QgRWxlbWVudFR5cGUqIGN1cnJlbnQpCi0gICAgOiBFbGVtZW50Q29uc3RJ
dGVyYXRvcjxFbGVtZW50VHlwZT4obnVsbHB0ciwgY3VycmVudCkKLXsKLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0
b3I8RWxlbWVudFR5cGU+JiBFbGVtZW50QW5jZXN0b3JDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBl
Pjo6b3BlcmF0b3IrKygpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRBbmNlc3Rv
ckNvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+Jj4oRWxlbWVudENvbnN0SXRlcmF0b3I8RWxlbWVu
dFR5cGU+Ojp0cmF2ZXJzZUFuY2VzdG9yKCkpOworICAgIEVsZW1lbnRJdGVyYXRvcjxFbGVtZW50
VHlwZT46OnRyYXZlcnNlQW5jZXN0b3IoKTsKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAKLS8vIEVs
ZW1lbnRBbmNlc3Rvckl0ZXJhdG9yQWRhcHRlcgorLy8gRWxlbWVudEFuY2VzdG9yUmFuZ2UKIAog
dGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRBbmNlc3Rvckl0
ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46OkVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yQWRhcHRl
cihFbGVtZW50VHlwZSogZmlyc3QpCitpbmxpbmUgRWxlbWVudEFuY2VzdG9yUmFuZ2U8RWxlbWVu
dFR5cGU+OjpFbGVtZW50QW5jZXN0b3JSYW5nZShFbGVtZW50VHlwZSogZmlyc3QpCiAgICAgOiBt
X2ZpcnN0KGZpcnN0KQogewogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1p
bmxpbmUgRWxlbWVudEFuY2VzdG9ySXRlcmF0b3I8RWxlbWVudFR5cGU+IEVsZW1lbnRBbmNlc3Rv
ckl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46OmJlZ2luKCkKK2lubGluZSBFbGVtZW50QW5j
ZXN0b3JJdGVyYXRvcjxFbGVtZW50VHlwZT4gRWxlbWVudEFuY2VzdG9yUmFuZ2U8RWxlbWVudFR5
cGU+OjpiZWdpbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9y
PEVsZW1lbnRUeXBlPihtX2ZpcnN0KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRU
eXBlPgotaW5saW5lIEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBFbGVtZW50
QW5jZXN0b3JJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+OjplbmQoKQotewotICAgIHJldHVy
biBFbGVtZW50QW5jZXN0b3JJdGVyYXRvcjxFbGVtZW50VHlwZT4oKTsKLX0KLQotLy8gRWxlbWVu
dEFuY2VzdG9yQ29uc3RJdGVyYXRvckFkYXB0ZXIKLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1l
bnRUeXBlPgotaW5saW5lIEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1l
bnRUeXBlPjo6RWxlbWVudEFuY2VzdG9yQ29uc3RJdGVyYXRvckFkYXB0ZXIoY29uc3QgRWxlbWVu
dFR5cGUqIGZpcnN0KQotICAgIDogbV9maXJzdChmaXJzdCkKLXsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3I8
RWxlbWVudFR5cGU+IEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRU
eXBlPjo6YmVnaW4oKSBjb25zdAotewotICAgIHJldHVybiBFbGVtZW50QW5jZXN0b3JDb25zdEl0
ZXJhdG9yPEVsZW1lbnRUeXBlPihtX2ZpcnN0KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVs
ZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3I8RWxlbWVudFR5
cGU+IEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPjo6ZW5k
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gRWxlbWVudEFuY2VzdG9yQ29uc3RJdGVyYXRvcjxFbGVt
ZW50VHlwZT4oKTsKLX0KLQogLy8gU3RhbmRhbG9uZSBmdW5jdGlvbnMKIAotaW5saW5lIEVsZW1l
bnRBbmNlc3Rvckl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50PiBlbGVtZW50TGluZWFnZShFbGVtZW50
KiBmaXJzdCkKLXsKLSAgICByZXR1cm4gRWxlbWVudEFuY2VzdG9ySXRlcmF0b3JBZGFwdGVyPEVs
ZW1lbnQ+KGZpcnN0KTsKLX0KLQotaW5saW5lIEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3JB
ZGFwdGVyPEVsZW1lbnQ+IGVsZW1lbnRMaW5lYWdlKGNvbnN0IEVsZW1lbnQqIGZpcnN0KQordGVt
cGxhdGU8PiBpbmxpbmUgRWxlbWVudEFuY2VzdG9yUmFuZ2U8RWxlbWVudD4gbGluZWFnZU9mVHlw
ZTxFbGVtZW50PihFbGVtZW50JiBmaXJzdCkKIHsKLSAgICByZXR1cm4gRWxlbWVudEFuY2VzdG9y
Q29uc3RJdGVyYXRvckFkYXB0ZXI8RWxlbWVudD4oZmlyc3QpOwotfQotCi1pbmxpbmUgRWxlbWVu
dEFuY2VzdG9ySXRlcmF0b3JBZGFwdGVyPEVsZW1lbnQ+IGVsZW1lbnRBbmNlc3RvcnMoRWxlbWVu
dCogZGVzY2VuZGFudCkKLXsKLSAgICByZXR1cm4gRWxlbWVudEFuY2VzdG9ySXRlcmF0b3JBZGFw
dGVyPEVsZW1lbnQ+KGRlc2NlbmRhbnQtPnBhcmVudEVsZW1lbnQoKSk7Ci19Ci0KLWlubGluZSBF
bGVtZW50QW5jZXN0b3JDb25zdEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50PiBlbGVtZW50QW5jZXN0
b3JzKGNvbnN0IEVsZW1lbnQqIGRlc2NlbmRhbnQpCi17Ci0gICAgcmV0dXJuIEVsZW1lbnRBbmNl
c3RvckNvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnQ+KGRlc2NlbmRhbnQtPnBhcmVudEVsZW1l
bnQoKSk7CisgICAgcmV0dXJuIEVsZW1lbnRBbmNlc3RvclJhbmdlPEVsZW1lbnQ+KCZmaXJzdCk7
CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KLWlubGluZSBFbGVtZW50QW5j
ZXN0b3JJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+IGxpbmVhZ2VPZlR5cGUoRWxlbWVudCYg
Zmlyc3QpCitpbmxpbmUgRWxlbWVudEFuY2VzdG9yUmFuZ2U8RWxlbWVudFR5cGU+IGxpbmVhZ2VP
ZlR5cGUoRWxlbWVudCYgZmlyc3QpCiB7CiAgICAgaWYgKGlzPEVsZW1lbnRUeXBlPihmaXJzdCkp
Ci0gICAgICAgIHJldHVybiBFbGVtZW50QW5jZXN0b3JJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5
cGU+KHN0YXRpY19jYXN0PEVsZW1lbnRUeXBlKj4oJmZpcnN0KSk7CisgICAgICAgIHJldHVybiBF
bGVtZW50QW5jZXN0b3JSYW5nZTxFbGVtZW50VHlwZT4oJmRvd25jYXN0PEVsZW1lbnRUeXBlPihm
aXJzdCkpOwogICAgIHJldHVybiBhbmNlc3RvcnNPZlR5cGU8RWxlbWVudFR5cGU+KGZpcnN0KTsK
IH0KIAordGVtcGxhdGU8PiBpbmxpbmUgRWxlbWVudEFuY2VzdG9yUmFuZ2U8Y29uc3QgRWxlbWVu
dD4gbGluZWFnZU9mVHlwZTxFbGVtZW50Pihjb25zdCBFbGVtZW50JiBmaXJzdCkKK3sKKyAgICBy
ZXR1cm4gRWxlbWVudEFuY2VzdG9yUmFuZ2U8Y29uc3QgRWxlbWVudD4oJmZpcnN0KTsKK30KKwog
dGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRBbmNlc3RvckNv
bnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPiBsaW5lYWdlT2ZUeXBlKGNvbnN0IEVsZW1l
bnQmIGZpcnN0KQoraW5saW5lIEVsZW1lbnRBbmNlc3RvclJhbmdlPGNvbnN0IEVsZW1lbnRUeXBl
PiBsaW5lYWdlT2ZUeXBlKGNvbnN0IEVsZW1lbnQmIGZpcnN0KQogewogICAgIGlmIChpczxFbGVt
ZW50VHlwZT4oZmlyc3QpKQotICAgICAgICByZXR1cm4gRWxlbWVudEFuY2VzdG9yQ29uc3RJdGVy
YXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnRUeXBlKj4o
JmZpcnN0KSk7CisgICAgICAgIHJldHVybiBFbGVtZW50QW5jZXN0b3JSYW5nZTxjb25zdCBFbGVt
ZW50VHlwZT4oJmRvd25jYXN0PEVsZW1lbnRUeXBlPihmaXJzdCkpOwogICAgIHJldHVybiBhbmNl
c3RvcnNPZlR5cGU8RWxlbWVudFR5cGU+KGZpcnN0KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yQWRhcHRlcjxFbGVt
ZW50VHlwZT4gYW5jZXN0b3JzT2ZUeXBlKE5vZGUmIGRlc2NlbmRhbnQpCitpbmxpbmUgRWxlbWVu
dEFuY2VzdG9yUmFuZ2U8RWxlbWVudFR5cGU+IGFuY2VzdG9yc09mVHlwZShOb2RlJiBkZXNjZW5k
YW50KQogewotICAgIEVsZW1lbnRUeXBlKiBmaXJzdCA9IGZpbmRFbGVtZW50QW5jZXN0b3JPZlR5
cGU8RWxlbWVudFR5cGU+KGRlc2NlbmRhbnQpOwotICAgIHJldHVybiBFbGVtZW50QW5jZXN0b3JJ
dGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+KGZpcnN0KTsKKyAgICByZXR1cm4gRWxlbWVudEFu
Y2VzdG9yUmFuZ2U8RWxlbWVudFR5cGU+KGZpbmRFbGVtZW50QW5jZXN0b3JPZlR5cGU8RWxlbWVu
dFR5cGU+KGRlc2NlbmRhbnQpKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBl
PgotaW5saW5lIEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBl
PiBhbmNlc3RvcnNPZlR5cGUoY29uc3QgTm9kZSYgZGVzY2VuZGFudCkKK2lubGluZSBFbGVtZW50
QW5jZXN0b3JSYW5nZTxjb25zdCBFbGVtZW50VHlwZT4gYW5jZXN0b3JzT2ZUeXBlKGNvbnN0IE5v
ZGUmIGRlc2NlbmRhbnQpCiB7Ci0gICAgY29uc3QgRWxlbWVudFR5cGUqIGZpcnN0ID0gZmluZEVs
ZW1lbnRBbmNlc3Rvck9mVHlwZTxjb25zdCBFbGVtZW50VHlwZT4oZGVzY2VuZGFudCk7Ci0gICAg
cmV0dXJuIEVsZW1lbnRBbmNlc3RvckNvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPihm
aXJzdCk7CisgICAgcmV0dXJuIEVsZW1lbnRBbmNlc3RvclJhbmdlPGNvbnN0IEVsZW1lbnRUeXBl
PihmaW5kRWxlbWVudEFuY2VzdG9yT2ZUeXBlPGNvbnN0IEVsZW1lbnRUeXBlPihkZXNjZW5kYW50
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRvci5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yLmgKaW5kZXggNDhlM2IxYTYx
OGQyZmUwYTI4NzY3YjM3MzFmMmZhZGY5NzNlZmJjZS4uZDFkZGIwZjczNzUwMTU2NDU5N2IwYTAy
MzRlMmI0NjIwMWQ1ZGU3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRB
bmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yLmgKQEAgLTM2LDggKzM2LDggQEAgY2xhc3MgRWxl
bWVudEFuZFRleHREZXNjZW5kYW50SXRlcmF0b3IgewogcHVibGljOgogICAgIEVsZW1lbnRBbmRU
ZXh0RGVzY2VuZGFudEl0ZXJhdG9yKCk7CiAgICAgZW51bSBGaXJzdENoaWxkVGFnIHsgRmlyc3RD
aGlsZCB9OwotICAgIEVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yKENvbnRhaW5lck5v
ZGUmIHJvb3QsIEZpcnN0Q2hpbGRUYWcpOwotICAgIEVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0
ZXJhdG9yKENvbnRhaW5lck5vZGUmIHJvb3QsIE5vZGUqIGN1cnJlbnQpOworICAgIEVsZW1lbnRB
bmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yKGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3QsIEZpcnN0
Q2hpbGRUYWcpOworICAgIEVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yKGNvbnN0IENv
bnRhaW5lck5vZGUmIHJvb3QsIE5vZGUqIGN1cnJlbnQpOwogCiAgICAgRWxlbWVudEFuZFRleHRE
ZXNjZW5kYW50SXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7IHJldHVybiB0cmF2ZXJzZU5leHQoKTsg
fQogCkBAIC02Myw5ICs2Myw5IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgYm9v
bCBpc0VsZW1lbnRPclRleHQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gaXM8RWxlbWVudD4o
bm9kZSkgfHwgaXM8VGV4dD4obm9kZSk7IH0KLSAgICBzdGF0aWMgTm9kZSogZmlyc3RDaGlsZChO
b2RlJik7Ci0gICAgc3RhdGljIE5vZGUqIG5leHRTaWJsaW5nKE5vZGUmKTsKLSAgICBzdGF0aWMg
Tm9kZSogcHJldmlvdXNTaWJsaW5nKE5vZGUmKTsKKyAgICBzdGF0aWMgTm9kZSogZmlyc3RDaGls
ZChjb25zdCBOb2RlJik7CisgICAgc3RhdGljIE5vZGUqIG5leHRTaWJsaW5nKGNvbnN0IE5vZGUm
KTsKKyAgICBzdGF0aWMgTm9kZSogcHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUmKTsKIAogICAg
IHZvaWQgcG9wQW5jZXN0b3JTaWJsaW5nU3RhY2soKTsKIApAQCAtODIsMTcgKzgyLDE3IEBAIHBy
aXZhdGU6CiAjZW5kaWYKIH07CiAKLWNsYXNzIEVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJh
dG9yQWRhcHRlciB7CitjbGFzcyBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRSYW5nZSB7CiBwdWJs
aWM6Ci0gICAgZXhwbGljaXQgRWxlbWVudEFuZFRleHREZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVy
KENvbnRhaW5lck5vZGUmIHJvb3QpOwotICAgIEVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJh
dG9yIGJlZ2luKCk7Ci0gICAgRWxlbWVudEFuZFRleHREZXNjZW5kYW50SXRlcmF0b3IgZW5kKCk7
CisgICAgZXhwbGljaXQgRWxlbWVudEFuZFRleHREZXNjZW5kYW50UmFuZ2UoY29uc3QgQ29udGFp
bmVyTm9kZSYgcm9vdCk7CisgICAgRWxlbWVudEFuZFRleHREZXNjZW5kYW50SXRlcmF0b3IgYmVn
aW4oKSBjb25zdDsKKyAgICBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRvciBlbmQoKSBj
b25zdDsKIAogcHJpdmF0ZToKLSAgICBDb250YWluZXJOb2RlJiBtX3Jvb3Q7CisgICAgY29uc3Qg
Q29udGFpbmVyTm9kZSYgbV9yb290OwogfTsKIAotRWxlbWVudEFuZFRleHREZXNjZW5kYW50SXRl
cmF0b3JBZGFwdGVyIGVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudHMoQ29udGFpbmVyTm9kZSYpOwor
RWxlbWVudEFuZFRleHREZXNjZW5kYW50UmFuZ2UgZWxlbWVudEFuZFRleHREZXNjZW5kYW50cyhD
b250YWluZXJOb2RlJik7CiAKIC8vIEVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yCiAK
QEAgLTEwMSw3ICsxMDEsNyBAQCBpbmxpbmUgRWxlbWVudEFuZFRleHREZXNjZW5kYW50SXRlcmF0
b3I6OkVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yKCkKIHsKIH0KIAotaW5saW5lIEVs
ZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yOjpFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJ
dGVyYXRvcihDb250YWluZXJOb2RlJiByb290LCBGaXJzdENoaWxkVGFnKQoraW5saW5lIEVsZW1l
bnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yOjpFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVy
YXRvcihjb25zdCBDb250YWluZXJOb2RlJiByb290LCBGaXJzdENoaWxkVGFnKQogICAgIDogbV9j
dXJyZW50KGZpcnN0Q2hpbGQocm9vdCkpCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAsIG1fYXNz
ZXJ0aW9ucyhtX2N1cnJlbnQpCkBAIC0xMTMsNyArMTEzLDcgQEAgaW5saW5lIEVsZW1lbnRBbmRU
ZXh0RGVzY2VuZGFudEl0ZXJhdG9yOjpFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRvcihD
b250YWkKICAgICBtX2RlcHRoID0gMTsKIH0KIAotaW5saW5lIEVsZW1lbnRBbmRUZXh0RGVzY2Vu
ZGFudEl0ZXJhdG9yOjpFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRvcihDb250YWluZXJO
b2RlJiByb290LCBOb2RlKiBjdXJyZW50KQoraW5saW5lIEVsZW1lbnRBbmRUZXh0RGVzY2VuZGFu
dEl0ZXJhdG9yOjpFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRvcihjb25zdCBDb250YWlu
ZXJOb2RlJiByb290LCBOb2RlKiBjdXJyZW50KQogICAgIDogbV9jdXJyZW50KGN1cnJlbnQpCiAj
aWYgQVNTRVJUX0VOQUJMRUQKICAgICAsIG1fYXNzZXJ0aW9ucyhtX2N1cnJlbnQpCkBAIC0xNDgs
NyArMTQ4LDcgQEAgaW5saW5lIHZvaWQgRWxlbWVudEFuZFRleHREZXNjZW5kYW50SXRlcmF0b3I6
OmRyb3BBc3NlcnRpb25zKCkKICNlbmRpZgogfQogCi1pbmxpbmUgTm9kZSogRWxlbWVudEFuZFRl
eHREZXNjZW5kYW50SXRlcmF0b3I6OmZpcnN0Q2hpbGQoTm9kZSYgY3VycmVudCkKK2lubGluZSBO
b2RlKiBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRvcjo6Zmlyc3RDaGlsZChjb25zdCBO
b2RlJiBjdXJyZW50KQogewogICAgIGF1dG8qIG5vZGUgPSBjdXJyZW50LmZpcnN0Q2hpbGQoKTsK
ICAgICB3aGlsZSAobm9kZSAmJiAhaXNFbGVtZW50T3JUZXh0KCpub2RlKSkKQEAgLTE1Niw3ICsx
NTYsNyBAQCBpbmxpbmUgTm9kZSogRWxlbWVudEFuZFRleHREZXNjZW5kYW50SXRlcmF0b3I6OmZp
cnN0Q2hpbGQoTm9kZSYgY3VycmVudCkKICAgICByZXR1cm4gbm9kZTsKIH0KIAotaW5saW5lIE5v
ZGUqIEVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yOjpuZXh0U2libGluZyhOb2RlJiBj
dXJyZW50KQoraW5saW5lIE5vZGUqIEVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yOjpu
ZXh0U2libGluZyhjb25zdCBOb2RlJiBjdXJyZW50KQogewogICAgIGF1dG8qIG5vZGUgPSBjdXJy
ZW50Lm5leHRTaWJsaW5nKCk7CiAgICAgd2hpbGUgKG5vZGUgJiYgIWlzRWxlbWVudE9yVGV4dCgq
bm9kZSkpCkBAIC0xNjQsNyArMTY0LDcgQEAgaW5saW5lIE5vZGUqIEVsZW1lbnRBbmRUZXh0RGVz
Y2VuZGFudEl0ZXJhdG9yOjpuZXh0U2libGluZyhOb2RlJiBjdXJyZW50KQogICAgIHJldHVybiBu
b2RlOwogfQogCi1pbmxpbmUgTm9kZSogRWxlbWVudEFuZFRleHREZXNjZW5kYW50SXRlcmF0b3I6
OnByZXZpb3VzU2libGluZyhOb2RlJiBjdXJyZW50KQoraW5saW5lIE5vZGUqIEVsZW1lbnRBbmRU
ZXh0RGVzY2VuZGFudEl0ZXJhdG9yOjpwcmV2aW91c1NpYmxpbmcoY29uc3QgTm9kZSYgY3VycmVu
dCkKIHsKICAgICBhdXRvKiBub2RlID0gY3VycmVudC5wcmV2aW91c1NpYmxpbmcoKTsKICAgICB3
aGlsZSAobm9kZSAmJiAhaXNFbGVtZW50T3JUZXh0KCpub2RlKSkKQEAgLTI5NCwyOCArMjk0LDI4
IEBAIGlubGluZSBib29sIEVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yOjpvcGVyYXRv
ciE9KGNvbnN0IEVsZW1lbnRBbmRUZXh0RGVzCiAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OwogfQogCi0vLyBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXIKKy8vIEVs
ZW1lbnRBbmRUZXh0RGVzY2VuZGFudFJhbmdlCiAKLWlubGluZSBFbGVtZW50QW5kVGV4dERlc2Nl
bmRhbnRJdGVyYXRvckFkYXB0ZXI6OkVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yQWRh
cHRlcihDb250YWluZXJOb2RlJiByb290KQoraW5saW5lIEVsZW1lbnRBbmRUZXh0RGVzY2VuZGFu
dFJhbmdlOjpFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRSYW5nZShjb25zdCBDb250YWluZXJOb2Rl
JiByb290KQogICAgIDogbV9yb290KHJvb3QpCiB7CiB9CiAKLWlubGluZSBFbGVtZW50QW5kVGV4
dERlc2NlbmRhbnRJdGVyYXRvciBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRvckFkYXB0
ZXI6OmJlZ2luKCkKK2lubGluZSBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRvciBFbGVt
ZW50QW5kVGV4dERlc2NlbmRhbnRSYW5nZTo6YmVnaW4oKSBjb25zdAogewogICAgIHJldHVybiBF
bGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRvcihtX3Jvb3QsIEVsZW1lbnRBbmRUZXh0RGVz
Y2VuZGFudEl0ZXJhdG9yOjpGaXJzdENoaWxkKTsKIH0KIAotaW5saW5lIEVsZW1lbnRBbmRUZXh0
RGVzY2VuZGFudEl0ZXJhdG9yIEVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRl
cjo6ZW5kKCkKK2lubGluZSBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRvciBFbGVtZW50
QW5kVGV4dERlc2NlbmRhbnRSYW5nZTo6ZW5kKCkgY29uc3QKIHsKICAgICByZXR1cm4geyB9Owog
fQogCiAvLyBTdGFuZGFsb25lIGZ1bmN0aW9ucwogCi1pbmxpbmUgRWxlbWVudEFuZFRleHREZXNj
ZW5kYW50SXRlcmF0b3JBZGFwdGVyIGVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudHMoQ29udGFpbmVy
Tm9kZSYgcm9vdCkKK2lubGluZSBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRSYW5nZSBlbGVtZW50
QW5kVGV4dERlc2NlbmRhbnRzKENvbnRhaW5lck5vZGUmIHJvb3QpCiB7Ci0gICAgcmV0dXJuIEVs
ZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcihyb290KTsKKyAgICByZXR1cm4g
RWxlbWVudEFuZFRleHREZXNjZW5kYW50UmFuZ2Uocm9vdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50Q2hpbGRJdGVy
YXRvci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRDaGlsZEl0ZXJhdG9yLmgKaW5kZXgg
OGUzOGZiNTAzMmE4MjM3NzZlMmE3YmNhM2FjMjU4Y2IxNTA2YzQwMC4uZTY2YjI0OWY1OTUxMTAw
MDM4NGQ4NDcxMjc3YTNmMjAyMTZlNjFhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnRDaGlsZEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRD
aGlsZEl0ZXJhdG9yLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjksNzkgKzI5LDM5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
dGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIEVsZW1lbnRDaGlsZFJhbmdlOworCisvLyBSYW5nZSBm
b3IgaXRlcmF0aW5nIHRocm91Z2ggY2hpbGQgZWxlbWVudHMuCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
RWxlbWVudFR5cGU+IEVsZW1lbnRDaGlsZFJhbmdlPEVsZW1lbnRUeXBlPiBjaGlsZHJlbk9mVHlw
ZShDb250YWluZXJOb2RlJik7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+IEVsZW1l
bnRDaGlsZFJhbmdlPGNvbnN0IEVsZW1lbnRUeXBlPiBjaGlsZHJlbk9mVHlwZShjb25zdCBDb250
YWluZXJOb2RlJik7CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KIGNsYXNzIEVs
ZW1lbnRDaGlsZEl0ZXJhdG9yIDogcHVibGljIEVsZW1lbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4g
ewogcHVibGljOgotICAgIHR5cGVkZWYgRWxlbWVudFR5cGUgdmFsdWVfdHlwZTsKLSAgICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7Ci0gICAgdHlwZWRlZiBFbGVtZW50VHlwZSog
cG9pbnRlcjsKLSAgICB0eXBlZGVmIEVsZW1lbnRUeXBlJiByZWZlcmVuY2U7Ci0gICAgdHlwZWRl
ZiBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwotCi0gICAgRWxl
bWVudENoaWxkSXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSYgcGFyZW50KTsKKyAgICBFbGVt
ZW50Q2hpbGRJdGVyYXRvcigpID0gZGVmYXVsdDsKICAgICBFbGVtZW50Q2hpbGRJdGVyYXRvcihj
b25zdCBDb250YWluZXJOb2RlJiBwYXJlbnQsIEVsZW1lbnRUeXBlKiBjdXJyZW50KTsKICAgICBF
bGVtZW50Q2hpbGRJdGVyYXRvciYgb3BlcmF0b3ItLSgpOwogICAgIEVsZW1lbnRDaGlsZEl0ZXJh
dG9yJiBvcGVyYXRvcisrKCk7CiB9OwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+
Ci1jbGFzcyBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9yIDogcHVibGljIEVsZW1lbnRDb25zdEl0
ZXJhdG9yPEVsZW1lbnRUeXBlPiB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBjb25zdCBFbGVtZW50
VHlwZSB2YWx1ZV90eXBlOwotICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsK
LSAgICB0eXBlZGVmIGNvbnN0IEVsZW1lbnRUeXBlKiBwb2ludGVyOwotICAgIHR5cGVkZWYgY29u
c3QgRWxlbWVudFR5cGUmIHJlZmVyZW5jZTsKLSAgICB0eXBlZGVmIHN0ZDo6Zm9yd2FyZF9pdGVy
YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7Ci0KLSAgICBFbGVtZW50Q2hpbGRDb25zdEl0ZXJh
dG9yKGNvbnN0IENvbnRhaW5lck5vZGUmIHBhcmVudCk7Ci0gICAgRWxlbWVudENoaWxkQ29uc3RJ
dGVyYXRvcihjb25zdCBDb250YWluZXJOb2RlJiBwYXJlbnQsIGNvbnN0IEVsZW1lbnRUeXBlKiBj
dXJyZW50KTsKLSAgICBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9yJiBvcGVyYXRvci0tKCk7Ci0g
ICAgRWxlbWVudENoaWxkQ29uc3RJdGVyYXRvciYgb3BlcmF0b3IrKygpOwotfTsKLQotdGVtcGxh
dGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotY2xhc3MgRWxlbWVudENoaWxkSXRlcmF0b3JBZGFw
dGVyIHsKLXB1YmxpYzoKLSAgICBFbGVtZW50Q2hpbGRJdGVyYXRvckFkYXB0ZXIoQ29udGFpbmVy
Tm9kZSYgcGFyZW50KTsKLQotICAgIEVsZW1lbnRDaGlsZEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBi
ZWdpbigpOwotICAgIEVsZW1lbnRDaGlsZEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBlbmQoKTsKLSAg
ICBFbGVtZW50Q2hpbGRJdGVyYXRvcjxFbGVtZW50VHlwZT4gYmVnaW5BdChFbGVtZW50VHlwZSYp
OwotCi0gICAgRWxlbWVudFR5cGUqIGZpcnN0KCk7Ci0gICAgRWxlbWVudFR5cGUqIGxhc3QoKTsK
LQotcHJpdmF0ZToKLSAgICBDb250YWluZXJOb2RlJiBtX3BhcmVudDsKLX07Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KLWNsYXNzIEVsZW1lbnRDaGlsZENvbnN0SXRlcmF0b3JB
ZGFwdGVyIHsKK2NsYXNzIEVsZW1lbnRDaGlsZFJhbmdlIHsKIHB1YmxpYzoKLSAgICBFbGVtZW50
Q2hpbGRDb25zdEl0ZXJhdG9yQWRhcHRlcihjb25zdCBDb250YWluZXJOb2RlJiBwYXJlbnQpOwor
ICAgIEVsZW1lbnRDaGlsZFJhbmdlKGNvbnN0IENvbnRhaW5lck5vZGUmIHBhcmVudCk7CiAKLSAg
ICBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBiZWdpbigpIGNvbnN0Owot
ICAgIEVsZW1lbnRDaGlsZENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+IGVuZCgpIGNvbnN0Owot
ICAgIEVsZW1lbnRDaGlsZENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+IGJlZ2luQXQoY29uc3Qg
RWxlbWVudFR5cGUmKSBjb25zdDsKKyAgICBFbGVtZW50Q2hpbGRJdGVyYXRvcjxFbGVtZW50VHlw
ZT4gYmVnaW4oKSBjb25zdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6bnVsbHB0cl90IGVu
ZCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBFbGVtZW50Q2hpbGRJdGVyYXRvcjxFbGVtZW50
VHlwZT4gYmVnaW5BdChFbGVtZW50VHlwZSYpIGNvbnN0OwogCi0gICAgY29uc3QgRWxlbWVudFR5
cGUqIGZpcnN0KCkgY29uc3Q7Ci0gICAgY29uc3QgRWxlbWVudFR5cGUqIGxhc3QoKSBjb25zdDsK
KyAgICBFbGVtZW50VHlwZSogZmlyc3QoKSBjb25zdDsKKyAgICBFbGVtZW50VHlwZSogbGFzdCgp
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIGNvbnN0IENvbnRhaW5lck5vZGUmIG1fcGFyZW50Owog
fTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPiBFbGVtZW50Q2hpbGRJdGVyYXRv
ckFkYXB0ZXI8RWxlbWVudFR5cGU+IGNoaWxkcmVuT2ZUeXBlKENvbnRhaW5lck5vZGUmKTsKLXRl
bXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4gRWxlbWVudENoaWxkQ29uc3RJdGVyYXRvckFk
YXB0ZXI8RWxlbWVudFR5cGU+IGNoaWxkcmVuT2ZUeXBlKGNvbnN0IENvbnRhaW5lck5vZGUmKTsK
LQogLy8gRWxlbWVudENoaWxkSXRlcmF0b3IKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRU
eXBlPgotaW5saW5lIEVsZW1lbnRDaGlsZEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6RWxlbWVudENo
aWxkSXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSYgcGFyZW50KQotICAgIDogRWxlbWVudEl0
ZXJhdG9yPEVsZW1lbnRUeXBlPigmcGFyZW50KQotewotfQotCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RWxlbWVudFR5cGU+CiBpbmxpbmUgRWxlbWVudENoaWxkSXRlcmF0b3I8RWxlbWVudFR5cGU+OjpF
bGVtZW50Q2hpbGRJdGVyYXRvcihjb25zdCBDb250YWluZXJOb2RlJiBwYXJlbnQsIEVsZW1lbnRU
eXBlKiBjdXJyZW50KQogICAgIDogRWxlbWVudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPigmcGFyZW50
LCBjdXJyZW50KQpAQCAtMTExLDEzMiArNzEsNjIgQEAgaW5saW5lIEVsZW1lbnRDaGlsZEl0ZXJh
dG9yPEVsZW1lbnRUeXBlPjo6RWxlbWVudENoaWxkSXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm8K
IHRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KIGlubGluZSBFbGVtZW50Q2hpbGRJdGVy
YXRvcjxFbGVtZW50VHlwZT4mIEVsZW1lbnRDaGlsZEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6b3Bl
cmF0b3ItLSgpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRDaGlsZEl0ZXJhdG9y
PEVsZW1lbnRUeXBlPiY+KEVsZW1lbnRJdGVyYXRvcjxFbGVtZW50VHlwZT46OnRyYXZlcnNlUHJl
dmlvdXNTaWJsaW5nKCkpOworICAgIEVsZW1lbnRJdGVyYXRvcjxFbGVtZW50VHlwZT46OnRyYXZl
cnNlUHJldmlvdXNTaWJsaW5nKCk7CisgICAgcmV0dXJuICp0aGlzOwogfQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgRWxlbWVudFR5cGU+CiBpbmxpbmUgRWxlbWVudENoaWxkSXRlcmF0b3I8RWxlbWVu
dFR5cGU+JiBFbGVtZW50Q2hpbGRJdGVyYXRvcjxFbGVtZW50VHlwZT46Om9wZXJhdG9yKysoKQog
ewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Q2hpbGRJdGVyYXRvcjxFbGVtZW50VHlw
ZT4mPihFbGVtZW50SXRlcmF0b3I8RWxlbWVudFR5cGU+Ojp0cmF2ZXJzZU5leHRTaWJsaW5nKCkp
OwotfQotCi0vLyBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9yCi0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBFbGVtZW50VHlwZT4KLWlubGluZSBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9yPEVsZW1lbnRU
eXBlPjo6RWxlbWVudENoaWxkQ29uc3RJdGVyYXRvcihjb25zdCBDb250YWluZXJOb2RlJiBwYXJl
bnQpCi0gICAgOiBFbGVtZW50Q29uc3RJdGVyYXRvcjxFbGVtZW50VHlwZT4oJnBhcmVudCkKLXsK
LX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRDaGls
ZENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9yKGNv
bnN0IENvbnRhaW5lck5vZGUmIHBhcmVudCwgY29uc3QgRWxlbWVudFR5cGUqIGN1cnJlbnQpCi0g
ICAgOiBFbGVtZW50Q29uc3RJdGVyYXRvcjxFbGVtZW50VHlwZT4oJnBhcmVudCwgY3VycmVudCkK
LXsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRD
aGlsZENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+JiBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9y
PEVsZW1lbnRUeXBlPjo6b3BlcmF0b3ItLSgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEVs
ZW1lbnRDaGlsZENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+Jj4oRWxlbWVudENvbnN0SXRlcmF0
b3I8RWxlbWVudFR5cGU+Ojp0cmF2ZXJzZVByZXZpb3VzU2libGluZygpKTsKKyAgICBFbGVtZW50
SXRlcmF0b3I8RWxlbWVudFR5cGU+Ojp0cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgcmV0dXJu
ICp0aGlzOwogfQogCisvLyBFbGVtZW50Q2hpbGRSYW5nZQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RWxlbWVudFR5cGU+Ci1pbmxpbmUgRWxlbWVudENoaWxkQ29uc3RJdGVyYXRvcjxFbGVtZW50VHlw
ZT4mIEVsZW1lbnRDaGlsZENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpvcGVyYXRvcisrKCkK
LXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudENoaWxkQ29uc3RJdGVyYXRvcjxFbGVt
ZW50VHlwZT4mPihFbGVtZW50Q29uc3RJdGVyYXRvcjxFbGVtZW50VHlwZT46OnRyYXZlcnNlTmV4
dFNpYmxpbmcoKSk7Ci19Ci0KLS8vIEVsZW1lbnRDaGlsZEl0ZXJhdG9yQWRhcHRlcgotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgRWxlbWVudENoaWxkSXRlcmF0b3JB
ZGFwdGVyPEVsZW1lbnRUeXBlPjo6RWxlbWVudENoaWxkSXRlcmF0b3JBZGFwdGVyKENvbnRhaW5l
ck5vZGUmIHBhcmVudCkKK2lubGluZSBFbGVtZW50Q2hpbGRSYW5nZTxFbGVtZW50VHlwZT46OkVs
ZW1lbnRDaGlsZFJhbmdlKGNvbnN0IENvbnRhaW5lck5vZGUmIHBhcmVudCkKICAgICA6IG1fcGFy
ZW50KHBhcmVudCkKIHsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5s
aW5lIEVsZW1lbnRDaGlsZEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBFbGVtZW50Q2hpbGRJdGVyYXRv
ckFkYXB0ZXI8RWxlbWVudFR5cGU+OjpiZWdpbigpCitpbmxpbmUgRWxlbWVudENoaWxkSXRlcmF0
b3I8RWxlbWVudFR5cGU+IEVsZW1lbnRDaGlsZFJhbmdlPEVsZW1lbnRUeXBlPjo6YmVnaW4oKSBj
b25zdAogewogICAgIHJldHVybiBFbGVtZW50Q2hpbGRJdGVyYXRvcjxFbGVtZW50VHlwZT4obV9w
YXJlbnQsIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46OmZpcnN0Q2hpbGQobV9wYXJlbnQpKTsKIH0K
IAogdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRDaGlsZEl0
ZXJhdG9yPEVsZW1lbnRUeXBlPiBFbGVtZW50Q2hpbGRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5
cGU+OjplbmQoKQotewotICAgIHJldHVybiBFbGVtZW50Q2hpbGRJdGVyYXRvcjxFbGVtZW50VHlw
ZT4obV9wYXJlbnQpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxp
bmUgRWxlbWVudFR5cGUqIEVsZW1lbnRDaGlsZEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46
OmZpcnN0KCkKK2lubGluZSBFbGVtZW50VHlwZSogRWxlbWVudENoaWxkUmFuZ2U8RWxlbWVudFR5
cGU+OjpmaXJzdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46
OmZpcnN0Q2hpbGQobV9wYXJlbnQpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5
cGU+Ci1pbmxpbmUgRWxlbWVudFR5cGUqIEVsZW1lbnRDaGlsZEl0ZXJhdG9yQWRhcHRlcjxFbGVt
ZW50VHlwZT46Omxhc3QoKQoraW5saW5lIEVsZW1lbnRUeXBlKiBFbGVtZW50Q2hpbGRSYW5nZTxF
bGVtZW50VHlwZT46Omxhc3QoKSBjb25zdAogewogICAgIHJldHVybiBUcmF2ZXJzYWw8RWxlbWVu
dFR5cGU+OjpsYXN0Q2hpbGQobV9wYXJlbnQpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxl
bWVudFR5cGU+Ci1pbmxpbmUgRWxlbWVudENoaWxkSXRlcmF0b3I8RWxlbWVudFR5cGU+IEVsZW1l
bnRDaGlsZEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46OmJlZ2luQXQoRWxlbWVudFR5cGUm
IGNoaWxkKQoraW5saW5lIEVsZW1lbnRDaGlsZEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBFbGVtZW50
Q2hpbGRSYW5nZTxFbGVtZW50VHlwZT46OmJlZ2luQXQoRWxlbWVudFR5cGUmIGNoaWxkKSBjb25z
dAogewogICAgIEFTU0VSVChjaGlsZC5wYXJlbnROb2RlKCkgPT0gJm1fcGFyZW50KTsKICAgICBy
ZXR1cm4gRWxlbWVudENoaWxkSXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcGFyZW50LCAmY2hpbGQp
OwogfQogCi0vLyBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9yQWRhcHRlcgotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgRWxlbWVudENoaWxkQ29uc3RJdGVyYXRvckFk
YXB0ZXI8RWxlbWVudFR5cGU+OjpFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9yQWRhcHRlcihjb25z
dCBDb250YWluZXJOb2RlJiBwYXJlbnQpCi0gICAgOiBtX3BhcmVudChwYXJlbnQpCi17Ci19Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KLWlubGluZSBFbGVtZW50Q2hpbGRDb25z
dEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9yQWRhcHRlcjxF
bGVtZW50VHlwZT46OmJlZ2luKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRWxlbWVudENoaWxkQ29u
c3RJdGVyYXRvcjxFbGVtZW50VHlwZT4obV9wYXJlbnQsIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46
OmZpcnN0Q2hpbGQobV9wYXJlbnQpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRU
eXBlPgotaW5saW5lIEVsZW1lbnRDaGlsZENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+IEVsZW1l
bnRDaGlsZENvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPjo6ZW5kKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gRWxlbWVudENoaWxkQ29uc3RJdGVyYXRvcjxFbGVtZW50VHlwZT4obV9wYXJl
bnQpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgY29uc3Qg
RWxlbWVudFR5cGUqIEVsZW1lbnRDaGlsZENvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBl
Pjo6Zmlyc3QoKSBjb25zdAotewotICAgIHJldHVybiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+Ojpm
aXJzdENoaWxkKG1fcGFyZW50KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBl
PgotaW5saW5lIGNvbnN0IEVsZW1lbnRUeXBlKiBFbGVtZW50Q2hpbGRDb25zdEl0ZXJhdG9yQWRh
cHRlcjxFbGVtZW50VHlwZT46Omxhc3QoKSBjb25zdAotewotICAgIHJldHVybiBUcmF2ZXJzYWw8
RWxlbWVudFR5cGU+OjpsYXN0Q2hpbGQobV9wYXJlbnQpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgRWxlbWVudENoaWxkQ29uc3RJdGVyYXRvcjxFbGVtZW50
VHlwZT4gRWxlbWVudENoaWxkQ29uc3RJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+OjpiZWdp
bkF0KGNvbnN0IEVsZW1lbnRUeXBlJiBjaGlsZCkgY29uc3QKLXsKLSAgICBBU1NFUlQoY2hpbGQu
cGFyZW50Tm9kZSgpID09ICZtX3BhcmVudCk7Ci0gICAgcmV0dXJuIEVsZW1lbnRDaGlsZENvbnN0
SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcGFyZW50LCAmY2hpbGQpOwotfQotCiAvLyBTdGFuZGFs
b25lIGZ1bmN0aW9ucwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUg
RWxlbWVudENoaWxkSXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPiBjaGlsZHJlbk9mVHlwZShD
b250YWluZXJOb2RlJiBwYXJlbnQpCitpbmxpbmUgRWxlbWVudENoaWxkUmFuZ2U8RWxlbWVudFR5
cGU+IGNoaWxkcmVuT2ZUeXBlKENvbnRhaW5lck5vZGUmIHBhcmVudCkKIHsKLSAgICByZXR1cm4g
RWxlbWVudENoaWxkSXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPihwYXJlbnQpOworICAgIHJl
dHVybiBFbGVtZW50Q2hpbGRSYW5nZTxFbGVtZW50VHlwZT4ocGFyZW50KTsKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRDaGlsZENvbnN0SXRlcmF0
b3JBZGFwdGVyPEVsZW1lbnRUeXBlPiBjaGlsZHJlbk9mVHlwZShjb25zdCBDb250YWluZXJOb2Rl
JiBwYXJlbnQpCitpbmxpbmUgRWxlbWVudENoaWxkUmFuZ2U8Y29uc3QgRWxlbWVudFR5cGU+IGNo
aWxkcmVuT2ZUeXBlKGNvbnN0IENvbnRhaW5lck5vZGUmIHBhcmVudCkKIHsKLSAgICByZXR1cm4g
RWxlbWVudENoaWxkQ29uc3RJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+KHBhcmVudCk7Cisg
ICAgcmV0dXJuIEVsZW1lbnRDaGlsZFJhbmdlPGNvbnN0IEVsZW1lbnRUeXBlPihwYXJlbnQpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnREZXNjZW5kYW50SXRlcmF0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRi
ZGI5OWE2ZGRlOTY0NmRmYjQxNzQ2MTI5OTE4YzczNWVhZTQ5OS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudERl
c2NlbmRhbnRJdGVyYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzY2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25z
LmgiCi0jaW5jbHVkZSAiRWxlbWVudFRyYXZlcnNhbC5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBFbGVtZW50RGVzY2VuZGFudEl0ZXJh
dG9yIHsKLXB1YmxpYzoKLSAgICBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yKCk7Ci0gICAgZXhw
bGljaXQgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcihFbGVtZW50KiBjdXJyZW50KTsKLQotICAg
IEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKLSAgICBFbGVtZW50RGVz
Y2VuZGFudEl0ZXJhdG9yJiBvcGVyYXRvci0tKCk7Ci0KLSAgICBFbGVtZW50JiBvcGVyYXRvcioo
KTsKLSAgICBFbGVtZW50KiBvcGVyYXRvci0+KCk7Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciYgb3RoZXIpIGNvbnN0OwotICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yJiBvdGhlcikgY29uc3Q7Ci0K
LSAgICB2b2lkIGRyb3BBc3NlcnRpb25zKCk7Ci0KLXByaXZhdGU6Ci0gICAgRWxlbWVudCogbV9j
dXJyZW50OwotICAgIFZlY3RvcjxFbGVtZW50KiwgMTY+IG1fYW5jZXN0b3JTaWJsaW5nU3RhY2s7
Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIEVsZW1lbnRJdGVyYXRvckFzc2VydGlvbnMgbV9h
c3NlcnRpb25zOwotI2VuZGlmCi19OwotCi1jbGFzcyBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRl
cmF0b3IgewotcHVibGljOgotICAgIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvcigpOwot
ICAgIGV4cGxpY2l0IEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvcihjb25zdCBFbGVtZW50
Kik7Ci0KLSAgICBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3ImIG9wZXJhdG9yKysoKTsK
LQotICAgIGNvbnN0IEVsZW1lbnQmIG9wZXJhdG9yKigpIGNvbnN0OwotICAgIGNvbnN0IEVsZW1l
bnQqIG9wZXJhdG9yLT4oKSBjb25zdDsKLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBFbGVt
ZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3ImIG90aGVyKSBjb25zdDsKLSAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yJiBvdGhlcikgY29uc3Q7
Ci0KLSAgICB2b2lkIGRyb3BBc3NlcnRpb25zKCk7Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgRWxl
bWVudCogbV9jdXJyZW50OwotICAgIFZlY3RvcjxFbGVtZW50KiwgMTY+IG1fYW5jZXN0b3JTaWJs
aW5nU3RhY2s7Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIEVsZW1lbnRJdGVyYXRvckFzc2Vy
dGlvbnMgbV9hc3NlcnRpb25zOwotI2VuZGlmCi19OwotCi1jbGFzcyBFbGVtZW50RGVzY2VuZGFu
dEl0ZXJhdG9yQWRhcHRlciB7Ci1wdWJsaWM6Ci0gICAgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRv
ckFkYXB0ZXIoQ29udGFpbmVyTm9kZSYgcm9vdCk7Ci0gICAgRWxlbWVudERlc2NlbmRhbnRJdGVy
YXRvciBiZWdpbigpOwotICAgIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IgZW5kKCk7Ci0gICAg
RWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciBsYXN0KCk7Ci0KLXByaXZhdGU6Ci0gICAgQ29udGFp
bmVyTm9kZSYgbV9yb290OwotfTsKLQotY2xhc3MgRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJh
dG9yQWRhcHRlciB7Ci1wdWJsaWM6Ci0gICAgRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9y
QWRhcHRlcihjb25zdCBDb250YWluZXJOb2RlJiByb290KTsKLSAgICBFbGVtZW50RGVzY2VuZGFu
dENvbnN0SXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKLSAgICBFbGVtZW50RGVzY2VuZGFudENvbnN0
SXRlcmF0b3IgZW5kKCkgY29uc3Q7Ci0gICAgRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9y
IGxhc3QoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBjb25zdCBDb250YWluZXJOb2RlJiBtX3Jv
b3Q7Ci19OwotCi1FbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlciBlbGVtZW50RGVzY2Vu
ZGFudHMoQ29udGFpbmVyTm9kZSYpOwotRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yQWRh
cHRlciBlbGVtZW50RGVzY2VuZGFudHMoY29uc3QgQ29udGFpbmVyTm9kZSYpOwotCi0vLyBFbGVt
ZW50RGVzY2VuZGFudEl0ZXJhdG9yCi0KLWlubGluZSBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9y
OjpFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yKCkKLSAgICA6IG1fY3VycmVudChudWxscHRyKQot
ewotfQotCi1pbmxpbmUgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjo6RWxlbWVudERlc2NlbmRh
bnRJdGVyYXRvcihFbGVtZW50KiBjdXJyZW50KQotICAgIDogbV9jdXJyZW50KGN1cnJlbnQpCi0j
aWYgQVNTRVJUX0VOQUJMRUQKLSAgICAsIG1fYXNzZXJ0aW9ucyhjdXJyZW50KQotI2VuZGlmCi17
Ci0gICAgbV9hbmNlc3RvclNpYmxpbmdTdGFjay51bmNoZWNrZWRBcHBlbmQobnVsbHB0cik7Ci19
Ci0KLWlubGluZSB2b2lkIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I6OmRyb3BBc3NlcnRpb25z
KCkKLXsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIG1fYXNzZXJ0aW9ucy5jbGVhcigpOwotI2Vu
ZGlmCi19Ci0KLUFMV0FZU19JTkxJTkUgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciYgRWxlbWVu
dERlc2NlbmRhbnRJdGVyYXRvcjo6b3BlcmF0b3IrKygpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVu
dCk7Ci0gICAgQVNTRVJUKCFtX2Fzc2VydGlvbnMuZG9tVHJlZUhhc011dGF0ZWQoKSk7Ci0KLSAg
ICBFbGVtZW50KiBmaXJzdENoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RDaGlsZCgqbV9j
dXJyZW50KTsKLSAgICBFbGVtZW50KiBuZXh0U2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5l
eHRTaWJsaW5nKCptX2N1cnJlbnQpOwotCi0gICAgaWYgKGZpcnN0Q2hpbGQpIHsKLSAgICAgICAg
aWYgKG5leHRTaWJsaW5nKQotICAgICAgICAgICAgbV9hbmNlc3RvclNpYmxpbmdTdGFjay5hcHBl
bmQobmV4dFNpYmxpbmcpOwotICAgICAgICBtX2N1cnJlbnQgPSBmaXJzdENoaWxkOwotICAgICAg
ICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgaWYgKG5leHRTaWJsaW5nKSB7Ci0gICAgICAg
IG1fY3VycmVudCA9IG5leHRTaWJsaW5nOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQot
Ci0gICAgbV9jdXJyZW50ID0gbV9hbmNlc3RvclNpYmxpbmdTdGFjay50YWtlTGFzdCgpOwotCi0j
aWYgQVNTRVJUX0VOQUJMRUQKLSAgICAvLyBEcm9wIHRoZSBhc3NlcnRpb24gd2hlbiB0aGUgaXRl
cmF0b3IgcmVhY2hlcyB0aGUgZW5kLgotICAgIGlmICghbV9jdXJyZW50KQotICAgICAgICBtX2Fz
c2VydGlvbnMuZHJvcEV2ZW50RGlzcGF0Y2hBc3NlcnRpb24oKTsKLSNlbmRpZgotCi0gICAgcmV0
dXJuICp0aGlzOwotfQotCi1BTFdBWVNfSU5MSU5FIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3Im
IEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I6Om9wZXJhdG9yLS0oKQotewotICAgIEFTU0VSVCht
X2N1cnJlbnQpOwotICAgIEFTU0VSVCghbV9hc3NlcnRpb25zLmRvbVRyZWVIYXNNdXRhdGVkKCkp
OwotCi0gICAgRWxlbWVudCogcHJldmlvdXNTaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJl
dmlvdXNTaWJsaW5nKCptX2N1cnJlbnQpOwotCi0gICAgaWYgKCFwcmV2aW91c1NpYmxpbmcpIHsK
LSAgICAgICAgbV9jdXJyZW50ID0gbV9jdXJyZW50LT5wYXJlbnRFbGVtZW50KCk7Ci0gICAgICAg
IC8vIFRoZSBzdGFjayBvcHRpbWl6ZXMgZm9yIGZvcndhcmQgdHJhdmVyc2FsIG9ubHksIHRoaXMg
anVzdCBtYWludGFpbnMgY29uc2lzdGVuY3kuCi0gICAgICAgIGlmIChtX2N1cnJlbnQtPm5leHRT
aWJsaW5nKCkgJiYgbV9jdXJyZW50LT5uZXh0U2libGluZygpID09IG1fYW5jZXN0b3JTaWJsaW5n
U3RhY2subGFzdCgpKQotICAgICAgICAgICAgbV9hbmNlc3RvclNpYmxpbmdTdGFjay5yZW1vdmVM
YXN0KCk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBFbGVtZW50KiBkZWVw
ZXN0U2libGluZyA9IHByZXZpb3VzU2libGluZzsKLSAgICB3aGlsZSAoRWxlbWVudCogbGFzdENo
aWxkID0gRWxlbWVudFRyYXZlcnNhbDo6bGFzdENoaWxkKCpkZWVwZXN0U2libGluZykpCi0gICAg
ICAgIGRlZXBlc3RTaWJsaW5nID0gbGFzdENoaWxkOwotICAgIEFTU0VSVChkZWVwZXN0U2libGlu
Zyk7Ci0KLSAgICBpZiAoZGVlcGVzdFNpYmxpbmcgIT0gcHJldmlvdXNTaWJsaW5nKQotICAgICAg
ICBtX2FuY2VzdG9yU2libGluZ1N0YWNrLmFwcGVuZChtX2N1cnJlbnQpOwotCi0gICAgbV9jdXJy
ZW50ID0gZGVlcGVzdFNpYmxpbmc7Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIC8vIERyb3Ag
dGhlIGFzc2VydGlvbiB3aGVuIHRoZSBpdGVyYXRvciByZWFjaGVzIHRoZSBlbmQuCi0gICAgaWYg
KCFtX2N1cnJlbnQpCi0gICAgICAgIG1fYXNzZXJ0aW9ucy5kcm9wRXZlbnREaXNwYXRjaEFzc2Vy
dGlvbigpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLWlubGluZSBFbGVtZW50
JiBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yOjpvcGVyYXRvciooKQotewotICAgIEFTU0VSVCht
X2N1cnJlbnQpOwotICAgIEFTU0VSVCghbV9hc3NlcnRpb25zLmRvbVRyZWVIYXNNdXRhdGVkKCkp
OwotICAgIHJldHVybiAqbV9jdXJyZW50OwotfQotCi1pbmxpbmUgRWxlbWVudCogRWxlbWVudERl
c2NlbmRhbnRJdGVyYXRvcjo6b3BlcmF0b3ItPigpCi17Ci0gICAgQVNTRVJUKG1fY3VycmVudCk7
Ci0gICAgQVNTRVJUKCFtX2Fzc2VydGlvbnMuZG9tVHJlZUhhc011dGF0ZWQoKSk7Ci0gICAgcmV0
dXJuIG1fY3VycmVudDsKLX0KLQotaW5saW5lIGJvb2wgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRv
cjo6b3BlcmF0b3I9PShjb25zdCBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKLXsKLSAgICBBU1NFUlQoIW1fYXNzZXJ0aW9ucy5kb21UcmVlSGFzTXV0YXRlZCgpKTsKLSAg
ICByZXR1cm4gbV9jdXJyZW50ID09IG90aGVyLm1fY3VycmVudDsKLX0KLQotaW5saW5lIGJvb2wg
RWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBFbGVtZW50RGVzY2Vu
ZGFudEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7Ci19Ci0KLS8vIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvcgotCi1pbmxpbmUgRWxl
bWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yOjpFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0
b3IoKQotICAgIDogbV9jdXJyZW50KG51bGxwdHIpCi17Ci19Ci0KLWlubGluZSBFbGVtZW50RGVz
Y2VuZGFudENvbnN0SXRlcmF0b3I6OkVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvcihjb25z
dCBFbGVtZW50KiBjdXJyZW50KQotICAgIDogbV9jdXJyZW50KGN1cnJlbnQpCi0jaWYgQVNTRVJU
X0VOQUJMRUQKLSAgICAsIG1fYXNzZXJ0aW9ucyhjdXJyZW50KQotI2VuZGlmCi17Ci0gICAgbV9h
bmNlc3RvclNpYmxpbmdTdGFjay51bmNoZWNrZWRBcHBlbmQobnVsbHB0cik7Ci19Ci0KLWlubGlu
ZSB2b2lkIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvcjo6ZHJvcEFzc2VydGlvbnMoKQot
ewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgbV9hc3NlcnRpb25zLmNsZWFyKCk7Ci0jZW5kaWYK
LX0KLQotQUxXQVlTX0lOTElORSBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3ImIEVsZW1l
bnREZXNjZW5kYW50Q29uc3RJdGVyYXRvcjo6b3BlcmF0b3IrKygpCi17Ci0gICAgQVNTRVJUKG1f
Y3VycmVudCk7Ci0gICAgQVNTRVJUKCFtX2Fzc2VydGlvbnMuZG9tVHJlZUhhc011dGF0ZWQoKSk7
Ci0KLSAgICBFbGVtZW50KiBmaXJzdENoaWxkID0gRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RDaGls
ZCgqbV9jdXJyZW50KTsKLSAgICBFbGVtZW50KiBuZXh0U2libGluZyA9IEVsZW1lbnRUcmF2ZXJz
YWw6Om5leHRTaWJsaW5nKCptX2N1cnJlbnQpOwotCi0gICAgaWYgKGZpcnN0Q2hpbGQpIHsKLSAg
ICAgICAgaWYgKG5leHRTaWJsaW5nKQotICAgICAgICAgICAgbV9hbmNlc3RvclNpYmxpbmdTdGFj
ay5hcHBlbmQobmV4dFNpYmxpbmcpOwotICAgICAgICBtX2N1cnJlbnQgPSBmaXJzdENoaWxkOwot
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgaWYgKG5leHRTaWJsaW5nKSB7Ci0g
ICAgICAgIG1fY3VycmVudCA9IG5leHRTaWJsaW5nOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0g
ICAgfQotCi0gICAgbV9jdXJyZW50ID0gbV9hbmNlc3RvclNpYmxpbmdTdGFjay50YWtlTGFzdCgp
OwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAvLyBEcm9wIHRoZSBhc3NlcnRpb24gd2hlbiB0
aGUgaXRlcmF0b3IgcmVhY2hlcyB0aGUgZW5kLgotICAgIGlmICghbV9jdXJyZW50KQotICAgICAg
ICBtX2Fzc2VydGlvbnMuZHJvcEV2ZW50RGlzcGF0Y2hBc3NlcnRpb24oKTsKLSNlbmRpZgotCi0g
ICAgcmV0dXJuICp0aGlzOwotfQotCi1pbmxpbmUgY29uc3QgRWxlbWVudCYgRWxlbWVudERlc2Nl
bmRhbnRDb25zdEl0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAotewotICAgIEFTU0VSVChtX2N1
cnJlbnQpOwotICAgIEFTU0VSVCghbV9hc3NlcnRpb25zLmRvbVRyZWVIYXNNdXRhdGVkKCkpOwot
ICAgIHJldHVybiAqbV9jdXJyZW50OwotfQotCi1pbmxpbmUgY29uc3QgRWxlbWVudCogRWxlbWVu
dERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yOjpvcGVyYXRvci0+KCkgY29uc3QKLXsKLSAgICBBU1NF
UlQobV9jdXJyZW50KTsKLSAgICBBU1NFUlQoIW1fYXNzZXJ0aW9ucy5kb21UcmVlSGFzTXV0YXRl
ZCgpKTsKLSAgICByZXR1cm4gbV9jdXJyZW50OwotfQotCi1pbmxpbmUgYm9vbCBFbGVtZW50RGVz
Y2VuZGFudENvbnN0SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgRWxlbWVudERlc2NlbmRhbnRD
b25zdEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fYXNzZXJ0aW9ucy5k
b21UcmVlSGFzTXV0YXRlZCgpKTsKLSAgICByZXR1cm4gbV9jdXJyZW50ID09IG90aGVyLm1fY3Vy
cmVudDsKLX0KLQotaW5saW5lIGJvb2wgRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yOjpv
cGVyYXRvciE9KGNvbnN0IEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvciYgb3RoZXIpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotfQotCi0vLyBFbGVtZW50RGVz
Y2VuZGFudEl0ZXJhdG9yQWRhcHRlcgotCi1pbmxpbmUgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRv
ckFkYXB0ZXI6OkVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyKENvbnRhaW5lck5vZGUm
IHJvb3QpCi0gICAgOiBtX3Jvb3Qocm9vdCkKLXsKLX0KLQotaW5saW5lIEVsZW1lbnREZXNjZW5k
YW50SXRlcmF0b3IgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXI6OmJlZ2luKCkKLXsK
LSAgICByZXR1cm4gRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcihFbGVtZW50VHJhdmVyc2FsOjpm
aXJzdENoaWxkKG1fcm9vdCkpOwotfQotCi1pbmxpbmUgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRv
ciBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcjo6ZW5kKCkKLXsKLSAgICByZXR1cm4g
RWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcigpOwotfQotCi1pbmxpbmUgRWxlbWVudERlc2NlbmRh
bnRJdGVyYXRvciBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcjo6bGFzdCgpCi17Ci0g
ICAgcmV0dXJuIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IoRWxlbWVudFRyYXZlcnNhbDo6bGFz
dFdpdGhpbihtX3Jvb3QpKTsKLX0KLQotLy8gRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9y
QWRhcHRlcgotCi1pbmxpbmUgRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yQWRhcHRlcjo6
RWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yQWRhcHRlcihjb25zdCBDb250YWluZXJOb2Rl
JiByb290KQotICAgIDogbV9yb290KHJvb3QpCi17Ci19Ci0KLWlubGluZSBFbGVtZW50RGVzY2Vu
ZGFudENvbnN0SXRlcmF0b3IgRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yQWRhcHRlcjo6
YmVnaW4oKSBjb25zdAotewotICAgIHJldHVybiBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0
b3IoRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RDaGlsZChtX3Jvb3QpKTsKLX0KLQotaW5saW5lIEVs
ZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvciBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0
b3JBZGFwdGVyOjplbmQoKSBjb25zdAotewotICAgIHJldHVybiBFbGVtZW50RGVzY2VuZGFudENv
bnN0SXRlcmF0b3IoKTsKLX0KLQotaW5saW5lIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRv
ciBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3JBZGFwdGVyOjpsYXN0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yKEVsZW1lbnRUcmF2ZXJz
YWw6Omxhc3RXaXRoaW4obV9yb290KSk7Ci19Ci0KLS8vIFN0YW5kYWxvbmUgZnVuY3Rpb25zCi0K
LWlubGluZSBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlciBlbGVtZW50RGVzY2VuZGFu
dHMoQ29udGFpbmVyTm9kZSYgcm9vdCkKLXsKLSAgICByZXR1cm4gRWxlbWVudERlc2NlbmRhbnRJ
dGVyYXRvckFkYXB0ZXIocm9vdCk7Ci19Ci0KLWlubGluZSBFbGVtZW50RGVzY2VuZGFudENvbnN0
SXRlcmF0b3JBZGFwdGVyIGVsZW1lbnREZXNjZW5kYW50cyhjb25zdCBDb250YWluZXJOb2RlJiBy
b290KQotewotICAgIHJldHVybiBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3JBZGFwdGVy
KHJvb3QpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLW5hbWVzcGFjZSBzdGQgewot
dGVtcGxhdGUgPD4gc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxXZWJDb3JlOjpFbGVtZW50RGVzY2Vu
ZGFudEl0ZXJhdG9yPiB7Ci0gICAgdHlwZWRlZiBXZWJDb3JlOjpFbGVtZW50IHZhbHVlX3R5cGU7
Ci19OwotdGVtcGxhdGUgPD4gc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxXZWJDb3JlOjpFbGVtZW50
RGVzY2VuZGFudENvbnN0SXRlcmF0b3I+IHsKLSAgICB0eXBlZGVmIGNvbnN0IFdlYkNvcmU6OkVs
ZW1lbnQgdmFsdWVfdHlwZTsKLX07Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEl0ZXJhdG9yLmgK
aW5kZXggMzc0ZGJhN2E0YzI0NzhkZGQ5M2FlYjJhNGM0NGUzZGI4MmQ3M2I1Ni4uNjAxMmJiNjMy
NGYwYmUxOTE1NTAyZGNmOTk0YWM3N2M5NGQwZGJhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnRJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
SXRlcmF0b3IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNCwxNiArMzQsMTcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxh
dGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotY2xhc3MgRWxlbWVudEl0ZXJhdG9yIHsKK2NsYXNz
IEVsZW1lbnRJdGVyYXRvciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVy
YXRvcl90YWcsIEVsZW1lbnRUeXBlPiB7CiBwdWJsaWM6Ci0gICAgRWxlbWVudEl0ZXJhdG9yKGNv
bnN0IENvbnRhaW5lck5vZGUqIHJvb3QpOwotICAgIEVsZW1lbnRJdGVyYXRvcihjb25zdCBDb250
YWluZXJOb2RlKiByb290LCBFbGVtZW50VHlwZSogY3VycmVudCk7CisgICAgRWxlbWVudEl0ZXJh
dG9yKCkgPSBkZWZhdWx0OwogCiAgICAgRWxlbWVudFR5cGUmIG9wZXJhdG9yKigpIGNvbnN0Owog
ICAgIEVsZW1lbnRUeXBlKiBvcGVyYXRvci0+KCkgY29uc3Q7CiAKLSAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgRWxlbWVudEl0ZXJhdG9yJiBvdGhlcikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IEVsZW1lbnRJdGVyYXRvciYgb3RoZXIpIGNvbnN0OworICAgIGNvbnN0ZXhwciBv
cGVyYXRvciBib29sKCkgY29uc3Q7CisgICAgY29uc3RleHByIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3Q7CisgICAgY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShzdGQ6Om51bGxwdHJfdCkgY29uc3Q7
CisgICAgY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25zdCBFbGVtZW50SXRlcmF0b3ImKSBj
b25zdDsKIAogICAgIEVsZW1lbnRJdGVyYXRvciYgdHJhdmVyc2VOZXh0KCk7CiAgICAgRWxlbWVu
dEl0ZXJhdG9yJiB0cmF2ZXJzZVByZXZpb3VzKCk7CkBAIC01NCwzOSArNTUsMTIgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBkcm9wQXNzZXJ0aW9ucygpOwogCi1wcml2YXRlOgotICAgIGNvbnN0IENv
bnRhaW5lck5vZGUqIG1fcm9vdDsKLSAgICBFbGVtZW50VHlwZSogbV9jdXJyZW50OwotCi0jaWYg
QVNTRVJUX0VOQUJMRUQKLSAgICBFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25zIG1fYXNzZXJ0aW9u
czsKLSNlbmRpZgotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotY2xhc3Mg
RWxlbWVudENvbnN0SXRlcmF0b3IgewotcHVibGljOgotICAgIEVsZW1lbnRDb25zdEl0ZXJhdG9y
KGNvbnN0IENvbnRhaW5lck5vZGUqIHJvb3QpOwotICAgIEVsZW1lbnRDb25zdEl0ZXJhdG9yKGNv
bnN0IENvbnRhaW5lck5vZGUqIHJvb3QsIGNvbnN0IEVsZW1lbnRUeXBlKiBjdXJyZW50KTsKLQot
ICAgIGNvbnN0IEVsZW1lbnRUeXBlJiBvcGVyYXRvciooKSBjb25zdDsKLSAgICBjb25zdCBFbGVt
ZW50VHlwZSogb3BlcmF0b3ItPigpIGNvbnN0OwotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEVsZW1lbnRDb25zdEl0ZXJhdG9yJiBvdGhlcikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEVsZW1lbnRDb25zdEl0ZXJhdG9yJiBvdGhlcikgY29uc3Q7Ci0KLSAgICBFbGVtZW50
Q29uc3RJdGVyYXRvciYgdHJhdmVyc2VOZXh0KCk7Ci0gICAgRWxlbWVudENvbnN0SXRlcmF0b3Im
IHRyYXZlcnNlUHJldmlvdXMoKTsKLSAgICBFbGVtZW50Q29uc3RJdGVyYXRvciYgdHJhdmVyc2VO
ZXh0U2libGluZygpOwotICAgIEVsZW1lbnRDb25zdEl0ZXJhdG9yJiB0cmF2ZXJzZVByZXZpb3Vz
U2libGluZygpOwotICAgIEVsZW1lbnRDb25zdEl0ZXJhdG9yJiB0cmF2ZXJzZU5leHRTa2lwcGlu
Z0NoaWxkcmVuKCk7Ci0gICAgRWxlbWVudENvbnN0SXRlcmF0b3ImIHRyYXZlcnNlQW5jZXN0b3Io
KTsKLQotICAgIHZvaWQgZHJvcEFzc2VydGlvbnMoKTsKK3Byb3RlY3RlZDoKKyAgICBFbGVtZW50
SXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSogcm9vdCwgRWxlbWVudFR5cGUqIGN1cnJlbnQp
OwogCiBwcml2YXRlOgotICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIG1fcm9vdDsKLSAgICBjb25z
dCBFbGVtZW50VHlwZSogbV9jdXJyZW50OworICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIG1fcm9v
dCB7IG51bGxwdHIgfTsKKyAgICBFbGVtZW50VHlwZSogbV9jdXJyZW50IHsgbnVsbHB0ciB9Owog
CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25zIG1fYXNz
ZXJ0aW9uczsKQEAgLTk1LDEzICs2OSw2IEBAIHByaXZhdGU6CiAKIC8vIEVsZW1lbnRJdGVyYXRv
cgogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgRWxlbWVudEl0ZXJh
dG9yPEVsZW1lbnRUeXBlPjo6RWxlbWVudEl0ZXJhdG9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHJv
b3QpCi0gICAgOiBtX3Jvb3Qocm9vdCkKLSAgICAsIG1fY3VycmVudChudWxscHRyKQotewotfQot
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+CiBpbmxpbmUgRWxlbWVudEl0ZXJhdG9y
PEVsZW1lbnRUeXBlPjo6RWxlbWVudEl0ZXJhdG9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHJvb3Qs
IEVsZW1lbnRUeXBlKiBjdXJyZW50KQogICAgIDogbV9yb290KHJvb3QpCkBAIC0yMzcsMTYwICsy
MDQsMjUgQEAgaW5saW5lIEVsZW1lbnRUeXBlKiBFbGVtZW50SXRlcmF0b3I8RWxlbWVudFR5cGU+
OjpvcGVyYXRvci0+KCkgY29uc3QKICAgICByZXR1cm4gbV9jdXJyZW50OwogfQogCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgYm9vbCBFbGVtZW50SXRlcmF0b3I8RWxl
bWVudFR5cGU+OjpvcGVyYXRvcj09KGNvbnN0IEVsZW1lbnRJdGVyYXRvciYgb3RoZXIpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKG1fcm9vdCA9PSBvdGhlci5tX3Jvb3QpOwotICAgIEFTU0VSVCghbV9h
c3NlcnRpb25zLmRvbVRyZWVIYXNNdXRhdGVkKCkpOwotICAgIHJldHVybiBtX2N1cnJlbnQgPT0g
b3RoZXIubV9jdXJyZW50OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1p
bmxpbmUgYm9vbCBFbGVtZW50SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpvcGVyYXRvciE9KGNvbnN0
IEVsZW1lbnRJdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOwotfQotCi0vLyBFbGVtZW50Q29uc3RJdGVyYXRvcgotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgRWxlbWVudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+
OjpFbGVtZW50Q29uc3RJdGVyYXRvcihjb25zdCBDb250YWluZXJOb2RlKiByb290KQotICAgIDog
bV9yb290KHJvb3QpCi0gICAgLCBtX2N1cnJlbnQobnVsbHB0cikKK3RlbXBsYXRlPHR5cGVuYW1l
IEVsZW1lbnRUeXBlPiBjb25zdGV4cHIgRWxlbWVudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6b3Bl
cmF0b3IgYm9vbCgpIGNvbnN0CiB7CisgICAgcmV0dXJuIG1fY3VycmVudDsKIH0KIAotdGVtcGxh
dGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRDb25zdEl0ZXJhdG9yPEVs
ZW1lbnRUeXBlPjo6RWxlbWVudENvbnN0SXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSogcm9v
dCwgY29uc3QgRWxlbWVudFR5cGUqIGN1cnJlbnQpCi0gICAgOiBtX3Jvb3Qocm9vdCkKLSAgICAs
IG1fY3VycmVudChjdXJyZW50KQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgLCBtX2Fzc2VydGlv
bnMoY3VycmVudCkKLSNlbmRpZgotewotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5
cGU+Ci1pbmxpbmUgRWxlbWVudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+JiBFbGVtZW50Q29u
c3RJdGVyYXRvcjxFbGVtZW50VHlwZT46OnRyYXZlcnNlTmV4dCgpCi17Ci0gICAgQVNTRVJUKG1f
Y3VycmVudCk7Ci0gICAgQVNTRVJUKCFtX2Fzc2VydGlvbnMuZG9tVHJlZUhhc011dGF0ZWQoKSk7
Ci0gICAgbV9jdXJyZW50ID0gVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6bmV4dCgqbV9jdXJyZW50
LCBtX3Jvb3QpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgLy8gRHJvcCB0aGUgYXNzZXJ0aW9u
IHdoZW4gdGhlIGl0ZXJhdG9yIHJlYWNoZXMgdGhlIGVuZC4KLSAgICBpZiAoIW1fY3VycmVudCkK
LSAgICAgICAgbV9hc3NlcnRpb25zLmRyb3BFdmVudERpc3BhdGNoQXNzZXJ0aW9uKCk7Ci0jZW5k
aWYKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlw
ZT4KLWlubGluZSBFbGVtZW50Q29uc3RJdGVyYXRvcjxFbGVtZW50VHlwZT4mIEVsZW1lbnRDb25z
dEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6dHJhdmVyc2VQcmV2aW91cygpCi17Ci0gICAgQVNTRVJU
KG1fY3VycmVudCk7Ci0gICAgQVNTRVJUKCFtX2Fzc2VydGlvbnMuZG9tVHJlZUhhc011dGF0ZWQo
KSk7Ci0gICAgbV9jdXJyZW50ID0gVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6cHJldmlvdXMoKm1f
Y3VycmVudCwgbV9yb290KTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIC8vIERyb3AgdGhlIGFz
c2VydGlvbiB3aGVuIHRoZSBpdGVyYXRvciByZWFjaGVzIHRoZSBlbmQuCi0gICAgaWYgKCFtX2N1
cnJlbnQpCi0gICAgICAgIG1fYXNzZXJ0aW9ucy5kcm9wRXZlbnREaXNwYXRjaEFzc2VydGlvbigp
OwotI2VuZGlmCi0gICAgcmV0dXJuICp0aGlzOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxl
bWVudFR5cGU+Ci1pbmxpbmUgRWxlbWVudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+JiBFbGVt
ZW50Q29uc3RJdGVyYXRvcjxFbGVtZW50VHlwZT46OnRyYXZlcnNlTmV4dFNpYmxpbmcoKQotewot
ICAgIEFTU0VSVChtX2N1cnJlbnQpOwotICAgIEFTU0VSVCghbV9hc3NlcnRpb25zLmRvbVRyZWVI
YXNNdXRhdGVkKCkpOwotICAgIG1fY3VycmVudCA9IFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Om5l
eHRTaWJsaW5nKCptX2N1cnJlbnQpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgLy8gRHJvcCB0
aGUgYXNzZXJ0aW9uIHdoZW4gdGhlIGl0ZXJhdG9yIHJlYWNoZXMgdGhlIGVuZC4KLSAgICBpZiAo
IW1fY3VycmVudCkKLSAgICAgICAgbV9hc3NlcnRpb25zLmRyb3BFdmVudERpc3BhdGNoQXNzZXJ0
aW9uKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBFbGVtZW50VHlwZT4KLWlubGluZSBFbGVtZW50Q29uc3RJdGVyYXRvcjxFbGVtZW50VHlwZT4m
IEVsZW1lbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6dHJhdmVyc2VQcmV2aW91c1NpYmxp
bmcoKQotewotICAgIEFTU0VSVChtX2N1cnJlbnQpOwotICAgIEFTU0VSVCghbV9hc3NlcnRpb25z
LmRvbVRyZWVIYXNNdXRhdGVkKCkpOwotICAgIG1fY3VycmVudCA9IFRyYXZlcnNhbDxFbGVtZW50
VHlwZT46OnByZXZpb3VzU2libGluZygqbV9jdXJyZW50KTsKLSNpZiBBU1NFUlRfRU5BQkxFRAot
ICAgIC8vIERyb3AgdGhlIGFzc2VydGlvbiB3aGVuIHRoZSBpdGVyYXRvciByZWFjaGVzIHRoZSBl
bmQuCi0gICAgaWYgKCFtX2N1cnJlbnQpCi0gICAgICAgIG1fYXNzZXJ0aW9ucy5kcm9wRXZlbnRE
aXNwYXRjaEFzc2VydGlvbigpOwotI2VuZGlmCi0gICAgcmV0dXJuICp0aGlzOwotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgRWxlbWVudENvbnN0SXRlcmF0b3I8
RWxlbWVudFR5cGU+JiBFbGVtZW50Q29uc3RJdGVyYXRvcjxFbGVtZW50VHlwZT46OnRyYXZlcnNl
TmV4dFNraXBwaW5nQ2hpbGRyZW4oKQotewotICAgIEFTU0VSVChtX2N1cnJlbnQpOwotICAgIEFT
U0VSVCghbV9hc3NlcnRpb25zLmRvbVRyZWVIYXNNdXRhdGVkKCkpOwotICAgIG1fY3VycmVudCA9
IFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Om5leHRTa2lwcGluZ0NoaWxkcmVuKCptX2N1cnJlbnQs
IG1fcm9vdCk7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAvLyBEcm9wIHRoZSBhc3NlcnRpb24g
d2hlbiB0aGUgaXRlcmF0b3IgcmVhY2hlcyB0aGUgZW5kLgotICAgIGlmICghbV9jdXJyZW50KQot
ICAgICAgICBtX2Fzc2VydGlvbnMuZHJvcEV2ZW50RGlzcGF0Y2hBc3NlcnRpb24oKTsKLSNlbmRp
ZgotICAgIHJldHVybiAqdGhpczsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBl
PgotaW5saW5lIEVsZW1lbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiYgRWxlbWVudENvbnN0
SXRlcmF0b3I8RWxlbWVudFR5cGU+Ojp0cmF2ZXJzZUFuY2VzdG9yKCkKLXsKLSAgICBBU1NFUlQo
bV9jdXJyZW50KTsKLSAgICBBU1NFUlQobV9jdXJyZW50ICE9IG1fcm9vdCk7Ci0gICAgQVNTRVJU
KCFtX2Fzc2VydGlvbnMuZG9tVHJlZUhhc011dGF0ZWQoKSk7Ci0gICAgbV9jdXJyZW50ID0gZmlu
ZEVsZW1lbnRBbmNlc3Rvck9mVHlwZTxjb25zdCBFbGVtZW50VHlwZT4oKm1fY3VycmVudCk7Ci0j
aWYgQVNTRVJUX0VOQUJMRUQKLSAgICAvLyBEcm9wIHRoZSBhc3NlcnRpb24gd2hlbiB0aGUgaXRl
cmF0b3IgcmVhY2hlcyB0aGUgZW5kLgotICAgIGlmICghbV9jdXJyZW50KQotICAgICAgICBtX2Fz
c2VydGlvbnMuZHJvcEV2ZW50RGlzcGF0Y2hBc3NlcnRpb24oKTsKLSNlbmRpZgotICAgIHJldHVy
biAqdGhpczsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIHZv
aWQgRWxlbWVudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+Ojpkcm9wQXNzZXJ0aW9ucygpCi17
Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBtX2Fzc2VydGlvbnMuY2xlYXIoKTsKLSNlbmRpZgot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgY29uc3QgRWxlbWVu
dFR5cGUmIEVsZW1lbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6b3BlcmF0b3IqKCkgY29u
c3QKK3RlbXBsYXRlPHR5cGVuYW1lIEVsZW1lbnRUeXBlPiBjb25zdGV4cHIgYm9vbCBFbGVtZW50
SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpvcGVyYXRvciEoKSBjb25zdAogewotICAgIEFTU0VSVCht
X2N1cnJlbnQpOwotICAgIEFTU0VSVCghbV9hc3NlcnRpb25zLmRvbVRyZWVIYXNNdXRhdGVkKCkp
OwotICAgIHJldHVybiAqbV9jdXJyZW50OworICAgIHJldHVybiAhbV9jdXJyZW50OwogfQogCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgY29uc3QgRWxlbWVudFR5cGUq
IEVsZW1lbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6b3BlcmF0b3ItPigpIGNvbnN0Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4gY29uc3RleHByIGJvb2wgRWxlbWVudEl0ZXJh
dG9yPEVsZW1lbnRUeXBlPjo6b3BlcmF0b3IhPShzdGQ6Om51bGxwdHJfdCkgY29uc3QKIHsKLSAg
ICBBU1NFUlQobV9jdXJyZW50KTsKLSAgICBBU1NFUlQoIW1fYXNzZXJ0aW9ucy5kb21UcmVlSGFz
TXV0YXRlZCgpKTsKICAgICByZXR1cm4gbV9jdXJyZW50OwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgYm9vbCBFbGVtZW50Q29uc3RJdGVyYXRvcjxFbGVtZW50
VHlwZT46Om9wZXJhdG9yPT0oY29uc3QgRWxlbWVudENvbnN0SXRlcmF0b3ImIG90aGVyKSBjb25z
dAotewotICAgIEFTU0VSVChtX3Jvb3QgPT0gb3RoZXIubV9yb290KTsKLSAgICBBU1NFUlQoIW1f
YXNzZXJ0aW9ucy5kb21UcmVlSGFzTXV0YXRlZCgpKTsKLSAgICByZXR1cm4gbV9jdXJyZW50ID09
IG90aGVyLm1fY3VycmVudDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgot
aW5saW5lIGJvb2wgRWxlbWVudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpvcGVyYXRvciE9
KGNvbnN0IEVsZW1lbnRDb25zdEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKK3RlbXBsYXRlPHR5cGVu
YW1lIEVsZW1lbnRUeXBlPiBjb25zdGV4cHIgYm9vbCBFbGVtZW50SXRlcmF0b3I8RWxlbWVudFR5
cGU+OjpvcGVyYXRvciE9KGNvbnN0IEVsZW1lbnRJdGVyYXRvciYgb3RoZXIpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIEFTU0VSVChtX3Jvb3QgPT0gb3RoZXIu
bV9yb290IHx8ICFtX2N1cnJlbnQgfHwgIW90aGVyLm1fY3VycmVudCk7CisgICAgcmV0dXJuIG1f
Y3VycmVudCAhPSBvdGhlci5tX2N1cnJlbnQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxpc3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5jcHAKaW5kZXggZGQwYzk5OTE4MDljYmY3YzcxMDYw
MDUwMjE2NGU5YTE2ZmRjYzE5MS4uNDc4OTIzMDFlMjk2YWE2YTU3ZDhkMzg1M2FiN2I2OGRlNWI5
Y2E3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5jcHAKQEAgLTIsNyArMiw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNi0yMDA4LCAyMDEwLCAyMDEzLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywzMiArMjMsMTQgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMaXZlTm9kZUxpc3QuaCIKIAotI2luY2x1
ZGUgIkNsYXNzQ29sbGVjdGlvbi5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJF
bGVtZW50VHJhdmVyc2FsLmgiCi0jaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKLSNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdURl9N
QUtFX0lTT19BTExPQ0FURURfSU1QTChMaXZlTm9kZUxpc3QpOwotCiBMaXZlTm9kZUxpc3Q6Okxp
dmVOb2RlTGlzdChDb250YWluZXJOb2RlJiBvd25lck5vZGUsIE5vZGVMaXN0SW52YWxpZGF0aW9u
VHlwZSBpbnZhbGlkYXRpb25UeXBlKQogICAgIDogbV9vd25lck5vZGUob3duZXJOb2RlKQogICAg
ICwgbV9pbnZhbGlkYXRpb25UeXBlKGludmFsaWRhdGlvblR5cGUpCi0gICAgLCBtX2lzUmVnaXN0
ZXJlZEZvckludmFsaWRhdGlvbkF0RG9jdW1lbnQoZmFsc2UpCiB7Ci0gICAgQVNTRVJUKG1faW52
YWxpZGF0aW9uVHlwZSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW52YWxpZGF0aW9uVHlwZSkp
OwogfQogCiBMaXZlTm9kZUxpc3Q6On5MaXZlTm9kZUxpc3QoKSA9IGRlZmF1bHQ7CiAKLUNvbnRh
aW5lck5vZGUmIExpdmVOb2RlTGlzdDo6cm9vdE5vZGUoKSBjb25zdAotewotICAgIGlmIChpc1Jv
b3RlZEF0RG9jdW1lbnQoKSAmJiBvd25lck5vZGUoKS5pc0Nvbm5lY3RlZCgpKQotICAgICAgICBy
ZXR1cm4gb3duZXJOb2RlKCkuZG9jdW1lbnQoKTsKLQotICAgIHJldHVybiBvd25lck5vZGUoKTsK
LX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0xpdmVOb2RlTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5oCmlu
ZGV4IGYyN2YwZWY2NzRiYmQ5ODIzMTRjMGJiYjI1Yjg1MjQyMjM0ZGE1OGYuLjQ4OTE2MzYxMDc5
MTM4ZmQwYmM3OGU2ZDQxYWFhZjAzMThlMGJhOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9MaXZlTm9kZUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTGl2ZU5vZGVMaXN0
LmgKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJDb2xsZWN0aW9uSW5kZXhDYWNoZS5oIgog
I2luY2x1ZGUgIkNvbGxlY3Rpb25UcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgIkVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBA
IC0zOSwzOSArMzgsMzUgQEAgY2xhc3MgRWxlbWVudDsKIHN0YXRpYyBib29sIHNob3VsZEludmFs
aWRhdGVUeXBlT25BdHRyaWJ1dGVDaGFuZ2UoTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlLCBjb25z
dCBRdWFsaWZpZWROYW1lJik7CiAKIGNsYXNzIExpdmVOb2RlTGlzdCA6IHB1YmxpYyBOb2RlTGlz
dCB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChMaXZlTm9kZUxpc3QpOworICAgIFdURl9N
QUtFX0lTT19OT05BTExPQ0FUQUJMRShMaXZlTm9kZUxpc3QpOwogcHVibGljOgotICAgIExpdmVO
b2RlTGlzdChDb250YWluZXJOb2RlJiBvd25lck5vZGUsIE5vZGVMaXN0SW52YWxpZGF0aW9uVHlw
ZSk7CiAgICAgdmlydHVhbCB+TGl2ZU5vZGVMaXN0KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZWxl
bWVudE1hdGNoZXMoRWxlbWVudCYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNSb290
ZWRBdERvY3VtZW50KCkgY29uc3QgPSAwOwogCi0gICAgQUxXQVlTX0lOTElORSBOb2RlTGlzdElu
dmFsaWRhdGlvblR5cGUgaW52YWxpZGF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZT4obV9pbnZhbGlkYXRpb25UeXBlKTsgfQorICAg
IE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSBpbnZhbGlkYXRpb25UeXBlKCkgY29uc3QgeyByZXR1
cm4gbV9pbnZhbGlkYXRpb25UeXBlOyB9CiAgICAgQ29udGFpbmVyTm9kZSYgb3duZXJOb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9vd25lck5vZGU7IH0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgaW52
YWxpZGF0ZUNhY2hlRm9yQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKHNob3VsZEludmFsaWRhdGVUeXBlT25BdHRyaWJ1dGVD
aGFuZ2UoaW52YWxpZGF0aW9uVHlwZSgpLCBhdHRyTmFtZSkpCi0gICAgICAgICAgICBpbnZhbGlk
YXRlQ2FjaGUoKTsKLSAgICB9CisgICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGVGb3JBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIGludmFsaWRhdGVDYWNoZUZvckRvY3VtZW50KERvY3VtZW50JikgY29uc3QgPSAwOwogICAg
IHZvaWQgaW52YWxpZGF0ZUNhY2hlKCkgY29uc3QgeyBpbnZhbGlkYXRlQ2FjaGVGb3JEb2N1bWVu
dChkb2N1bWVudCgpKTsgfQogCiAgICAgYm9vbCBpc1JlZ2lzdGVyZWRGb3JJbnZhbGlkYXRpb25B
dERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc1JlZ2lzdGVyZWRGb3JJbnZhbGlkYXRpb25B
dERvY3VtZW50OyB9Ci0gICAgdm9pZCBzZXRSZWdpc3RlcmVkRm9ySW52YWxpZGF0aW9uQXREb2N1
bWVudChib29sIGYpIHsgbV9pc1JlZ2lzdGVyZWRGb3JJbnZhbGlkYXRpb25BdERvY3VtZW50ID0g
ZjsgfQorICAgIHZvaWQgc2V0UmVnaXN0ZXJlZEZvckludmFsaWRhdGlvbkF0RG9jdW1lbnQoYm9v
bCBpc1JlZ2lzdGVyZWQpIHsgbV9pc1JlZ2lzdGVyZWRGb3JJbnZhbGlkYXRpb25BdERvY3VtZW50
ID0gaXNSZWdpc3RlcmVkOyB9CiAKIHByb3RlY3RlZDoKKyAgICBMaXZlTm9kZUxpc3QoQ29udGFp
bmVyTm9kZSYgb3duZXJOb2RlLCBOb2RlTGlzdEludmFsaWRhdGlvblR5cGUpOworCiAgICAgRG9j
dW1lbnQmIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9vd25lck5vZGUtPmRvY3VtZW50KCk7
IH0KKyAgICBDb250YWluZXJOb2RlJiByb290Tm9kZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAg
IGJvb2wgaXNMaXZlTm9kZUxpc3QoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKLSAg
ICBDb250YWluZXJOb2RlJiByb290Tm9kZSgpIGNvbnN0OwotCiAgICAgUmVmPENvbnRhaW5lck5v
ZGU+IG1fb3duZXJOb2RlOwogCi0gICAgY29uc3QgdW5zaWduZWQgbV9pbnZhbGlkYXRpb25UeXBl
OwotICAgIGJvb2wgbV9pc1JlZ2lzdGVyZWRGb3JJbnZhbGlkYXRpb25BdERvY3VtZW50OworICAg
IGNvbnN0IE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSBtX2ludmFsaWRhdGlvblR5cGU7CisgICAg
Ym9vbCBtX2lzUmVnaXN0ZXJlZEZvckludmFsaWRhdGlvbkF0RG9jdW1lbnQgeyBmYWxzZSB9Owog
fTsKIAogdGVtcGxhdGUgPGNsYXNzIE5vZGVMaXN0VHlwZT4KQEAgLTgxLDE2ICs3NiwxNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB+Q2FjaGVkTGl2ZU5vZGVMaXN0KCk7CiAKICAgICB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2luZGV4Q2FjaGUubm9kZUNvdW50KG5v
ZGVMaXN0KCkpOyB9Ci0gICAgRWxlbWVudCogaXRlbSh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1faW5kZXhDYWNoZS5ub2RlQXQobm9kZUxpc3QoKSwgb2Zmc2V0KTsg
fQorICAgIEVsZW1lbnQqIGl0ZW0odW5zaWduZWQgb2Zmc2V0KSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2luZGV4Q2FjaGUubm9kZUF0KG5vZGVMaXN0KCksIG9mZnNldCk7IH0KIAogICAgIC8vIEZv
ciBDb2xsZWN0aW9uSW5kZXhDYWNoZQotICAgIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IgY29s
bGVjdGlvbkJlZ2luKCkgY29uc3QgeyByZXR1cm4gQ29sbGVjdGlvblRyYXZlcnNhbDxDb2xsZWN0
aW9uVHJhdmVyc2FsVHlwZTo6RGVzY2VuZGFudHM+OjpiZWdpbihub2RlTGlzdCgpLCByb290Tm9k
ZSgpKTsgfQotICAgIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IgY29sbGVjdGlvbkxhc3QoKSBj
b25zdCB7IHJldHVybiBDb2xsZWN0aW9uVHJhdmVyc2FsPENvbGxlY3Rpb25UcmF2ZXJzYWxUeXBl
OjpEZXNjZW5kYW50cz46Omxhc3Qobm9kZUxpc3QoKSwgcm9vdE5vZGUoKSk7IH0KLSAgICBFbGVt
ZW50RGVzY2VuZGFudEl0ZXJhdG9yIGNvbGxlY3Rpb25FbmQoKSBjb25zdCB7IHJldHVybiBFbGVt
ZW50RGVzY2VuZGFudEl0ZXJhdG9yKCk7IH0KLSAgICB2b2lkIGNvbGxlY3Rpb25UcmF2ZXJzZUZv
cndhcmQoRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciYgY3VycmVudCwgdW5zaWduZWQgY291bnQs
IHVuc2lnbmVkJiB0cmF2ZXJzZWRDb3VudCkgY29uc3QgeyBDb2xsZWN0aW9uVHJhdmVyc2FsPENv
bGxlY3Rpb25UcmF2ZXJzYWxUeXBlOjpEZXNjZW5kYW50cz46OnRyYXZlcnNlRm9yd2FyZChub2Rl
TGlzdCgpLCBjdXJyZW50LCBjb3VudCwgdHJhdmVyc2VkQ291bnQpOyB9Ci0gICAgdm9pZCBjb2xs
ZWN0aW9uVHJhdmVyc2VCYWNrd2FyZChFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yJiBjdXJyZW50
LCB1bnNpZ25lZCBjb3VudCkgY29uc3QgeyBDb2xsZWN0aW9uVHJhdmVyc2FsPENvbGxlY3Rpb25U
cmF2ZXJzYWxUeXBlOjpEZXNjZW5kYW50cz46OnRyYXZlcnNlQmFja3dhcmQobm9kZUxpc3QoKSwg
Y3VycmVudCwgY291bnQpOyB9CisgICAgdXNpbmcgVHJhdmVyc2FsID0gQ29sbGVjdGlvblRyYXZl
cnNhbDxDb2xsZWN0aW9uVHJhdmVyc2FsVHlwZTo6RGVzY2VuZGFudHM+OworICAgIHVzaW5nIEl0
ZXJhdG9yID0gVHJhdmVyc2FsOjpJdGVyYXRvcjsKKyAgICBhdXRvIGNvbGxlY3Rpb25CZWdpbigp
IGNvbnN0IHsgcmV0dXJuIFRyYXZlcnNhbDo6YmVnaW4obm9kZUxpc3QoKSwgcm9vdE5vZGUoKSk7
IH0KKyAgICBhdXRvIGNvbGxlY3Rpb25MYXN0KCkgY29uc3QgeyByZXR1cm4gVHJhdmVyc2FsOjps
YXN0KG5vZGVMaXN0KCksIHJvb3ROb2RlKCkpOyB9CisgICAgdm9pZCBjb2xsZWN0aW9uVHJhdmVy
c2VGb3J3YXJkKEl0ZXJhdG9yJiBjdXJyZW50LCB1bnNpZ25lZCBjb3VudCwgdW5zaWduZWQmIHRy
YXZlcnNlZENvdW50KSBjb25zdCB7IFRyYXZlcnNhbDo6dHJhdmVyc2VGb3J3YXJkKG5vZGVMaXN0
KCksIGN1cnJlbnQsIGNvdW50LCB0cmF2ZXJzZWRDb3VudCk7IH0KKyAgICB2b2lkIGNvbGxlY3Rp
b25UcmF2ZXJzZUJhY2t3YXJkKEl0ZXJhdG9yJiBjdXJyZW50LCB1bnNpZ25lZCBjb3VudCkgY29u
c3QgeyBUcmF2ZXJzYWw6OnRyYXZlcnNlQmFja3dhcmQobm9kZUxpc3QoKSwgY3VycmVudCwgY291
bnQpOyB9CiAgICAgYm9vbCBjb2xsZWN0aW9uQ2FuVHJhdmVyc2VCYWNrd2FyZCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KLSAgICB2b2lkIHdpbGxWYWxpZGF0ZUluZGV4Q2FjaGUoKSBjb25zdCB7
IGRvY3VtZW50KCkucmVnaXN0ZXJOb2RlTGlzdEZvckludmFsaWRhdGlvbihjb25zdF9jYXN0PENh
Y2hlZExpdmVOb2RlTGlzdDxOb2RlTGlzdFR5cGU+Jj4oKnRoaXMpKTsgfQorICAgIHZvaWQgd2ls
bFZhbGlkYXRlSW5kZXhDYWNoZSgpIGNvbnN0IHsgZG9jdW1lbnQoKS5yZWdpc3Rlck5vZGVMaXN0
Rm9ySW52YWxpZGF0aW9uKGNvbnN0X2Nhc3Q8Q2FjaGVkTGl2ZU5vZGVMaXN0Jj4oKnRoaXMpKTsg
fQogCiAgICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGVGb3JEb2N1bWVudChEb2N1bWVudCYpIGNvbnN0
IGZpbmFsOwogICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgZmluYWwKQEAgLTEwOCw5ICsx
MDQsNyBAQCBwcml2YXRlOgogICAgIE5vZGVMaXN0VHlwZSYgbm9kZUxpc3QoKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxOb2RlTGlzdFR5cGUmPigqdGhpcyk7IH0KICAgICBjb25zdCBOb2RlTGlzdFR5
cGUmIG5vZGVMaXN0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTm9kZUxpc3RU
eXBlJj4oKnRoaXMpOyB9CiAKLSAgICBDb250YWluZXJOb2RlJiByb290Tm9kZSgpIGNvbnN0Owot
Ci0gICAgbXV0YWJsZSBDb2xsZWN0aW9uSW5kZXhDYWNoZTxOb2RlTGlzdFR5cGUsIEVsZW1lbnRE
ZXNjZW5kYW50SXRlcmF0b3I+IG1faW5kZXhDYWNoZTsKKyAgICBtdXRhYmxlIENvbGxlY3Rpb25J
bmRleENhY2hlPE5vZGVMaXN0VHlwZSwgSXRlcmF0b3I+IG1faW5kZXhDYWNoZTsKIH07CiAKIEFM
V0FZU19JTkxJTkUgYm9vbCBzaG91bGRJbnZhbGlkYXRlVHlwZU9uQXR0cmlidXRlQ2hhbmdlKE5v
ZGVMaXN0SW52YWxpZGF0aW9uVHlwZSB0eXBlLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFt
ZSkKQEAgLTEzNywzNiArMTMxLDQwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBzaG91bGRJbnZhbGlk
YXRlVHlwZU9uQXR0cmlidXRlQ2hhbmdlKE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCitBTFdBWVNfSU5MSU5FIHZvaWQgTGl2ZU5vZGVMaXN0OjppbnZhbGlk
YXRlQ2FjaGVGb3JBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkg
Y29uc3QKK3sKKyAgICBpZiAoc2hvdWxkSW52YWxpZGF0ZVR5cGVPbkF0dHJpYnV0ZUNoYW5nZSht
X2ludmFsaWRhdGlvblR5cGUsIGF0dHJpYnV0ZU5hbWUpKQorICAgICAgICBpbnZhbGlkYXRlQ2Fj
aGUoKTsKK30KKworaW5saW5lIENvbnRhaW5lck5vZGUmIExpdmVOb2RlTGlzdDo6cm9vdE5vZGUo
KSBjb25zdAoreworICAgIGlmIChpc1Jvb3RlZEF0RG9jdW1lbnQoKSAmJiBtX293bmVyTm9kZS0+
aXNDb25uZWN0ZWQoKSkKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50KCk7CisKKyAgICByZXR1cm4g
bV9vd25lck5vZGU7Cit9CisKIHRlbXBsYXRlIDxjbGFzcyBOb2RlTGlzdFR5cGU+CiBDYWNoZWRM
aXZlTm9kZUxpc3Q8Tm9kZUxpc3RUeXBlPjo6Q2FjaGVkTGl2ZU5vZGVMaXN0KENvbnRhaW5lck5v
ZGUmIG93bmVyTm9kZSwgTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIGludmFsaWRhdGlvblR5cGUp
CiAgICAgOiBMaXZlTm9kZUxpc3Qob3duZXJOb2RlLCBpbnZhbGlkYXRpb25UeXBlKQotICAgICwg
bV9pbmRleENhY2hlKG5vZGVMaXN0KCkpCiB7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBOb2RlTGlz
dFR5cGU+CiBDYWNoZWRMaXZlTm9kZUxpc3Q8Tm9kZUxpc3RUeXBlPjo6fkNhY2hlZExpdmVOb2Rl
TGlzdCgpCiB7Ci0gICAgaWYgKG1faW5kZXhDYWNoZS5oYXNWYWxpZENhY2hlKG5vZGVMaXN0KCkp
KQorICAgIGlmIChtX2luZGV4Q2FjaGUuaGFzVmFsaWRDYWNoZSgpKQogICAgICAgICBkb2N1bWVu
dCgpLnVucmVnaXN0ZXJOb2RlTGlzdEZvckludmFsaWRhdGlvbigqdGhpcyk7CiB9CiAKLXRlbXBs
YXRlIDxjbGFzcyBOb2RlTGlzdFR5cGU+Ci1pbmxpbmUgQ29udGFpbmVyTm9kZSYgQ2FjaGVkTGl2
ZU5vZGVMaXN0PE5vZGVMaXN0VHlwZT46OnJvb3ROb2RlKCkgY29uc3QKLXsKLSAgICBpZiAobm9k
ZUxpc3QoKS5pc1Jvb3RlZEF0RG9jdW1lbnQoKSAmJiBvd25lck5vZGUoKS5pc0Nvbm5lY3RlZCgp
KQotICAgICAgICByZXR1cm4gb3duZXJOb2RlKCkuZG9jdW1lbnQoKTsKLQotICAgIHJldHVybiBv
d25lck5vZGUoKTsKLX0KLQogdGVtcGxhdGUgPGNsYXNzIE5vZGVMaXN0VHlwZT4KIHZvaWQgQ2Fj
aGVkTGl2ZU5vZGVMaXN0PE5vZGVMaXN0VHlwZT46OmludmFsaWRhdGVDYWNoZUZvckRvY3VtZW50
KERvY3VtZW50JiBkb2N1bWVudCkgY29uc3QKIHsKLSAgICBpZiAoIW1faW5kZXhDYWNoZS5oYXNW
YWxpZENhY2hlKG5vZGVMaXN0KCkpKQotICAgICAgICByZXR1cm47Ci0gICAgZG9jdW1lbnQudW5y
ZWdpc3Rlck5vZGVMaXN0Rm9ySW52YWxpZGF0aW9uKGNvbnN0X2Nhc3Q8Tm9kZUxpc3RUeXBlJj4o
bm9kZUxpc3QoKSkpOwotICAgIG1faW5kZXhDYWNoZS5pbnZhbGlkYXRlKG5vZGVMaXN0KCkpOwor
ICAgIGlmIChtX2luZGV4Q2FjaGUuaGFzVmFsaWRDYWNoZSgpKSB7CisgICAgICAgIGRvY3VtZW50
LnVucmVnaXN0ZXJOb2RlTGlzdEZvckludmFsaWRhdGlvbihjb25zdF9jYXN0PE5vZGVMaXN0VHlw
ZSY+KG5vZGVMaXN0KCkpKTsKKyAgICAgICAgbV9pbmRleENhY2hlLmludmFsaWRhdGUoKTsKKyAg
ICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9OYW1lTm9kZUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVOb2RlTGlz
dC5jcHAKaW5kZXggZjBhZGQyYWMyZDU0NjY2ZmEyZmU4NTc4OTYyY2I1NDA4ZmJiNzM1NC4uZjRm
YTI2ZmM3ZTYzNjI0NDFhYzM0Mzc0ZWMxMmU1MjQ4OWY3ZjkzOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05h
bWVOb2RlTGlzdC5jcHAKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxs
ZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNywgMjAxNC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMzgsNiArMzgsMTEgQEAgTmFtZU5vZGVMaXN0OjpOYW1lTm9kZUxpc3QoQ29udGFpbmVy
Tm9kZSYgcm9vdE5vZGUsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpCiB7CiB9CiAKK1JlZjxOYW1l
Tm9kZUxpc3Q+IE5hbWVOb2RlTGlzdDo6Y3JlYXRlKENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBj
b25zdCBBdG9tU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5hbWVO
b2RlTGlzdChyb290Tm9kZSwgbmFtZSkpOworfQorCiBOYW1lTm9kZUxpc3Q6On5OYW1lTm9kZUxp
c3QoKQogewogICAgIG93bmVyTm9kZSgpLm5vZGVMaXN0cygpLT5yZW1vdmVDYWNoZVdpdGhBdG9t
TmFtZSgqdGhpcywgbV9uYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1l
Tm9kZUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuaAppbmRleCA3MGM1
YzcwMGU5NTBlNTMxNDM3ZjBmZGU1MWNjYzM4ZDZkY2IzYWExLi45NDc1ZGVmZWQ0ZWI3ODlkZmUz
MTMxMjE5NDU0ZmUyMzg1MDFlN2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFt
ZU5vZGVMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5oCkBAIC0y
LDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDctMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDI0ICsyNCwxNyBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJMaXZlTm9kZUxpc3QuaCIKLSNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi0vLyBOb2RlTGlzdCB3aGljaCBsaXN0cyBhbGwgTm9kZXMgaW4gYSBF
bGVtZW50IHdpdGggYSBnaXZlbiAibmFtZSIgYXR0cmlidXRlCiBjbGFzcyBOYW1lTm9kZUxpc3Qg
ZmluYWwgOiBwdWJsaWMgQ2FjaGVkTGl2ZU5vZGVMaXN0PE5hbWVOb2RlTGlzdD4gewogICAgIFdU
Rl9NQUtFX0lTT19BTExPQ0FURUQoTmFtZU5vZGVMaXN0KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPE5hbWVOb2RlTGlzdD4gY3JlYXRlKENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBjb25zdCBB
dG9tU3RyaW5nJiBuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTmFt
ZU5vZGVMaXN0KHJvb3ROb2RlLCBuYW1lKSk7Ci0gICAgfQotCisgICAgc3RhdGljIFJlZjxOYW1l
Tm9kZUxpc3Q+IGNyZWF0ZShDb250YWluZXJOb2RlJiByb290Tm9kZSwgY29uc3QgQXRvbVN0cmlu
ZyYgbmFtZSk7CiAgICAgdmlydHVhbCB+TmFtZU5vZGVMaXN0KCk7CiAKLSAgICBib29sIGVsZW1l
bnRNYXRjaGVzKEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzUm9vdGVkQXRE
b2N1bWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBlbGVt
ZW50TWF0Y2hlcyhFbGVtZW50JikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1Jvb3RlZEF0RG9j
dW1lbnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQogCiBwcml2YXRlOgogICAgIE5h
bWVOb2RlTGlzdChDb250YWluZXJOb2RlJiByb290Tm9kZSwgY29uc3QgQXRvbVN0cmluZyYgbmFt
ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHlwZWRFbGVtZW50RGVzY2VuZGFu
dEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0
ZXJhdG9yLmgKaW5kZXggOWYzNTkzNWQ5NmM3OWU3NWI2OGQzMGMyOGNiZTNjNWEwNDNmMDMzMy4u
Nzg5NTc5N2FkNDg1ZDk1ZTJkZjk4ZTY5N2QwNmE5YTliMTNiZjlmMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1R5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9UeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5
LDI5NCArMjksMjQxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGU8dHlwZW5h
bWUgRWxlbWVudFR5cGU+IGNsYXNzIERvdWJsZVR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRv
cjsKK3RlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBEb3VibGVFbGVtZW50RGVzY2VuZGFudEl0ZXJh
dG9yOwordGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIERvdWJsZUVsZW1lbnREZXNjZW5kYW50UmFu
Z2U7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgRWxlbWVudERlc2NlbmRhbnRSYW5nZTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIEVsZW1lbnRUeXBlLCBib29sKGNvbnN0IEVsZW1lbnRUeXBlJik+IGNs
YXNzIEZpbHRlcmVkRWxlbWVudERlc2NlbmRhbnRSYW5nZTsKIAotdGVtcGxhdGUgPHR5cGVuYW1l
IEVsZW1lbnRUeXBlPgotY2xhc3MgVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yIDogcHVi
bGljIEVsZW1lbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4gewotcHVibGljOgotICAgIFR5cGVkRWxl
bWVudERlc2NlbmRhbnRJdGVyYXRvcihjb25zdCBDb250YWluZXJOb2RlJiByb290KTsKLSAgICBU
eXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdCwg
RWxlbWVudFR5cGUqIGN1cnJlbnQpOwotICAgIFR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRv
ciYgb3BlcmF0b3IrKygpOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgot
Y2xhc3MgVHlwZWRFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3IgOiBwdWJsaWMgRWxlbWVu
dENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+ICB7Ci1wdWJsaWM6Ci0gICAgVHlwZWRFbGVtZW50
RGVzY2VuZGFudENvbnN0SXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdCk7Ci0gICAg
VHlwZWRFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSYg
cm9vdCwgY29uc3QgRWxlbWVudFR5cGUqIGN1cnJlbnQpOwotICAgIFR5cGVkRWxlbWVudERlc2Nl
bmRhbnRDb25zdEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7Ci19OworLy8gUmFuZ2UgZm9yIGl0ZXJh
dGluZyB0aHJvdWdoIGRlc2NlbmRhbnQgZWxlbWVudHMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVt
ZW50VHlwZT4gRWxlbWVudERlc2NlbmRhbnRSYW5nZTxFbGVtZW50VHlwZT4gZGVzY2VuZGFudHNP
ZlR5cGUoQ29udGFpbmVyTm9kZSYpOwordGVtcGxhdGU8dHlwZW5hbWUgRWxlbWVudFR5cGU+IEVs
ZW1lbnREZXNjZW5kYW50UmFuZ2U8Y29uc3QgRWxlbWVudFR5cGU+IGRlc2NlbmRhbnRzT2ZUeXBl
KGNvbnN0IENvbnRhaW5lck5vZGUmKTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBl
PgotY2xhc3MgVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlciB7Ci1wdWJsaWM6
Ci0gICAgVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcihDb250YWluZXJOb2Rl
JiByb290KTsKLSAgICBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+
IGJlZ2luKCk7Ci0gICAgVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBl
PiBlbmQoKTsKLSAgICBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+
IGJlZ2luQXQoRWxlbWVudFR5cGUmKTsKLSAgICBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0
b3I8RWxlbWVudFR5cGU+IGZyb20oRWxlbWVudCYpOworLy8gUmFuZ2UgdGhhdCBza2lwcyBlbGVt
ZW50cyB3aGVyZSB0aGUgZmlsdGVyIHJldHVybnMgZmFsc2UuCit0ZW1wbGF0ZTx0eXBlbmFtZSBF
bGVtZW50VHlwZSwgYm9vbCBmaWx0ZXIoY29uc3QgRWxlbWVudFR5cGUmKT4gRmlsdGVyZWRFbGVt
ZW50RGVzY2VuZGFudFJhbmdlPGNvbnN0IEVsZW1lbnRUeXBlLCBmaWx0ZXI+IGZpbHRlcmVkRGVz
Y2VuZGFudHMoY29uc3QgQ29udGFpbmVyTm9kZSYpOwogCi0gICAgRWxlbWVudFR5cGUqIGZpcnN0
KCk7Ci0gICAgRWxlbWVudFR5cGUqIGxhc3QoKTsKKy8vIFJhbmdlIGZvciB1c2Ugd2hlbiBib3Ro
IHNldHMgb2YgZGVzY2VuZGFudHMgYXJlIGtub3duIHRvIGJlIHRoZSBzYW1lIGxlbmd0aC4KKy8v
IElmIHRoZXkgYXJlIGRpZmZlcmVudCBsZW5ndGhzLCB0aGlzIHdpbGwgc3RvcCB3aGVuIHRoZSBz
aG9ydGVyIG9uZSByZWFjaGVzIHRoZSBlbmQsIGJ1dCBhbHNvIGFuIGFzc2VydGlvbiB3aWxsIGZh
aWwuCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4gRG91YmxlRWxlbWVudERlc2NlbmRh
bnRSYW5nZTxFbGVtZW50VHlwZT4gZGVzY2VuZGFudHNPZlR5cGUoQ29udGFpbmVyTm9kZSYgZmly
c3RSb290LCBDb250YWluZXJOb2RlJiBzZWNvbmRSb290KTsKIAotcHJpdmF0ZToKLSAgICBDb250
YWluZXJOb2RlJiBtX3Jvb3Q7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4gY2xhc3Mg
RWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciA6IHB1YmxpYyBFbGVtZW50SXRlcmF0b3I8RWxlbWVu
dFR5cGU+IHsKK3B1YmxpYzoKKyAgICBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yKCkgPSBkZWZh
dWx0OworICAgIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSYg
cm9vdCwgRWxlbWVudFR5cGUqIGN1cnJlbnQpOworICAgIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0
b3ImIG9wZXJhdG9yKysoKTsKKyAgICBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yJiBvcGVyYXRv
ci0tKCk7CiB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1jbGFzcyBUeXBl
ZEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvckFkYXB0ZXIgewordGVtcGxhdGU8dHlwZW5h
bWUgRWxlbWVudFR5cGU+IGNsYXNzIEVsZW1lbnREZXNjZW5kYW50UmFuZ2UgewogcHVibGljOgot
ICAgIFR5cGVkRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yQWRhcHRlcihjb25zdCBDb250
YWluZXJOb2RlJiByb290KTsKLSAgICBUeXBlZEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRv
cjxFbGVtZW50VHlwZT4gYmVnaW4oKSBjb25zdDsKLSAgICBUeXBlZEVsZW1lbnREZXNjZW5kYW50
Q29uc3RJdGVyYXRvcjxFbGVtZW50VHlwZT4gZW5kKCkgY29uc3Q7Ci0gICAgVHlwZWRFbGVtZW50
RGVzY2VuZGFudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+IGJlZ2luQXQoY29uc3QgRWxlbWVu
dFR5cGUmKSBjb25zdDsKLSAgICBUeXBlZEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvcjxF
bGVtZW50VHlwZT4gZnJvbShjb25zdCBFbGVtZW50JikgY29uc3Q7CisgICAgRWxlbWVudERlc2Nl
bmRhbnRSYW5nZShjb25zdCBDb250YWluZXJOb2RlJiByb290KTsKKyAgICBFbGVtZW50RGVzY2Vu
ZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBiZWdpbigpIGNvbnN0OworICAgIHN0YXRpYyBjb25z
dGV4cHIgc3RkOjpudWxscHRyX3QgZW5kKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIEVsZW1l
bnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+IGJlZ2luQXQoRWxlbWVudFR5cGUmKSBj
b25zdDsKKyAgICBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBmcm9tKEVs
ZW1lbnQmKSBjb25zdDsKIAotICAgIGNvbnN0IEVsZW1lbnRUeXBlKiBmaXJzdCgpIGNvbnN0Owot
ICAgIGNvbnN0IEVsZW1lbnRUeXBlKiBsYXN0KCkgY29uc3Q7CisgICAgRWxlbWVudFR5cGUqIGZp
cnN0KCkgY29uc3Q7CisgICAgRWxlbWVudFR5cGUqIGxhc3QoKSBjb25zdDsKIAogcHJpdmF0ZToK
ICAgICBjb25zdCBDb250YWluZXJOb2RlJiBtX3Jvb3Q7CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBFbGVtZW50VHlwZT4gY2xhc3MgRG91YmxlVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9y
QWRhcHRlciB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4gY2xhc3MgRG91YmxlRWxl
bWVudERlc2NlbmRhbnRSYW5nZSB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBUeXBlZEVsZW1lbnRE
ZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPiBTaW5nbGVBZGFwdGVyOwotICAg
IHR5cGVkZWYgRG91YmxlVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBl
PiBJdGVyYXRvcjsKKyAgICB0eXBlZGVmIEVsZW1lbnREZXNjZW5kYW50UmFuZ2U8RWxlbWVudFR5
cGU+IFNpbmdsZUFkYXB0ZXI7CisgICAgdHlwZWRlZiBEb3VibGVFbGVtZW50RGVzY2VuZGFudEl0
ZXJhdG9yPEVsZW1lbnRUeXBlPiBJdGVyYXRvcjsKIAotICAgIERvdWJsZVR5cGVkRWxlbWVudERl
c2NlbmRhbnRJdGVyYXRvckFkYXB0ZXIoU2luZ2xlQWRhcHRlciYmLCBTaW5nbGVBZGFwdGVyJiYp
OwotICAgIEl0ZXJhdG9yIGJlZ2luKCk7Ci0gICAgSXRlcmF0b3IgZW5kKCk7CisgICAgRG91Ymxl
RWxlbWVudERlc2NlbmRhbnRSYW5nZShTaW5nbGVBZGFwdGVyJiYsIFNpbmdsZUFkYXB0ZXImJik7
CisgICAgSXRlcmF0b3IgYmVnaW4oKSBjb25zdDsKKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6
bnVsbHB0cl90IGVuZCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogcHJpdmF0ZToKICAgICBzdGQ6
OnBhaXI8U2luZ2xlQWRhcHRlciwgU2luZ2xlQWRhcHRlcj4gbV9wYWlyOwogfTsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgRWxlbWVudFR5cGU+IGNsYXNzIERvdWJsZVR5cGVkRWxlbWVudERlc2NlbmRh
bnRJdGVyYXRvciB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4gY2xhc3MgRG91Ymxl
RWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBUeXBlZEVs
ZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+IFNpbmdsZUl0ZXJhdG9yOworICAg
IHR5cGVkZWYgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4gU2luZ2xlSXRl
cmF0b3I7CiAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8RWxlbWVudFR5cGUmLCBFbGVtZW50VHlwZSY+
IFJlZmVyZW5jZVByb3h5OwogCi0gICAgRG91YmxlVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJh
dG9yKFNpbmdsZUl0ZXJhdG9yJiYsIFNpbmdsZUl0ZXJhdG9yJiYpOworICAgIERvdWJsZUVsZW1l
bnREZXNjZW5kYW50SXRlcmF0b3IoU2luZ2xlSXRlcmF0b3ImJiwgU2luZ2xlSXRlcmF0b3ImJik7
CiAgICAgUmVmZXJlbmNlUHJveHkgb3BlcmF0b3IqKCkgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IERvdWJsZVR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciYpIGNvbnN0Owot
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBEb3VibGVUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRl
cmF0b3ImKSBjb25zdDsKLSAgICBEb3VibGVUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3Im
IG9wZXJhdG9yKysoKTsKKyAgICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KHN0ZDo6bnVsbHB0
cl90KSBjb25zdDsKKyAgICBEb3VibGVFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yJiBvcGVyYXRv
cisrKCk7CiAKIHByaXZhdGU6CiAgICAgc3RkOjpwYWlyPFNpbmdsZUl0ZXJhdG9yLCBTaW5nbGVJ
dGVyYXRvcj4gbV9wYWlyOwogfTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPiBU
eXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPiBkZXNjZW5k
YW50c09mVHlwZShDb250YWluZXJOb2RlJik7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5
cGU+IFR5cGVkRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlw
ZT4gZGVzY2VuZGFudHNPZlR5cGUoY29uc3QgQ29udGFpbmVyTm9kZSYpOwotCi0vLyBUaGlzIG11
c3Qgb25seSBiZSB1c2VkIHdoZW4gYm90aCBzZXRzIG9mIGRlc2NlbmRhbnRzIGFyZSBrbm93biB0
byBiZSB0aGUgc2FtZSBsZW5ndGguCi0vLyBJZiB0aGV5IGFyZSBkaWZmZXJlbnQgbGVuZ3Rocywg
dGhpcyB3aWxsIHN0b3Agd2hlbiB0aGUgc2hvcnRlciBvbmUgcmVhY2hlcyB0aGUgZW5kLCBidXQg
YWxzbyBhbiBhc3NlcnRpb24gd2lsbCBmYWlsLgotdGVtcGxhdGU8dHlwZW5hbWUgRWxlbWVudFR5
cGU+IERvdWJsZVR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXI8RWxlbWVudFR5
cGU+IGRlc2NlbmRhbnRzT2ZUeXBlKENvbnRhaW5lck5vZGUmIGZpcnN0Um9vdCwgQ29udGFpbmVy
Tm9kZSYgc2Vjb25kUm9vdCk7Ci0KLS8vIFR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcgor
dGVtcGxhdGU8dHlwZW5hbWUgRWxlbWVudFR5cGUsIGJvb2wgZmlsdGVyKGNvbnN0IEVsZW1lbnRU
eXBlJik+IGNsYXNzIEZpbHRlcmVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciA6IHB1YmxpYyBF
bGVtZW50SXRlcmF0b3I8RWxlbWVudFR5cGU+IHsKK3B1YmxpYzoKKyAgICBGaWx0ZXJlZEVsZW1l
bnREZXNjZW5kYW50SXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSYsIEVsZW1lbnRUeXBlKiA9
IG51bGxwdHIpOworICAgIEZpbHRlcmVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciYgb3BlcmF0
b3IrKygpOworfTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIFR5
cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT46OlR5cGVkRWxlbWVudERl
c2NlbmRhbnRJdGVyYXRvcihjb25zdCBDb250YWluZXJOb2RlJiByb290KQotICAgIDogRWxlbWVu
dEl0ZXJhdG9yPEVsZW1lbnRUeXBlPigmcm9vdCkKLXsKLX0KK3RlbXBsYXRlPHR5cGVuYW1lIEVs
ZW1lbnRUeXBlLCBib29sIGZpbHRlcihjb25zdCBFbGVtZW50VHlwZSYpPiBjbGFzcyBGaWx0ZXJl
ZEVsZW1lbnREZXNjZW5kYW50UmFuZ2UgeworcHVibGljOgorICAgIHVzaW5nIEl0ZXJhdG9yID0g
RmlsdGVyZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlLCBmaWx0ZXI+Owog
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgVHlwZWRFbGVtZW50RGVz
Y2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6VHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJh
dG9yKGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3QsIEVsZW1lbnRUeXBlKiBjdXJyZW50KQotICAg
IDogRWxlbWVudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPigmcm9vdCwgY3VycmVudCkKLXsKLX0KKyAg
ICBGaWx0ZXJlZEVsZW1lbnREZXNjZW5kYW50UmFuZ2UoY29uc3QgQ29udGFpbmVyTm9kZSYpOwor
ICAgIEl0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6Om51
bGxwdHJfdCBlbmQoKSB7IHJldHVybiBudWxscHRyOyB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBF
bGVtZW50VHlwZT4KLWlubGluZSBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVu
dFR5cGU+JiBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpvcGVy
YXRvcisrKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZWRFbGVtZW50RGVzY2VuZGFu
dEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiY+KEVsZW1lbnRJdGVyYXRvcjxFbGVtZW50VHlwZT46OnRy
YXZlcnNlTmV4dCgpKTsKLX0KKyAgICBFbGVtZW50VHlwZSogZmlyc3QoKSBjb25zdDsKIAotLy8g
VHlwZWRFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3IKK3ByaXZhdGU6CisgICAgY29uc3Qg
Q29udGFpbmVyTm9kZSYgbV9yb290OworfTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRU
eXBlPgotaW5saW5lIFR5cGVkRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRU
eXBlPjo6VHlwZWRFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3IoY29uc3QgQ29udGFpbmVy
Tm9kZSYgcm9vdCkKLSAgICA6IEVsZW1lbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPigmcm9v
dCkKKy8vIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IKIAordGVtcGxhdGU8dHlwZW5hbWUgRWxl
bWVudFR5cGU+IEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpFbGVtZW50
RGVzY2VuZGFudEl0ZXJhdG9yKGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3QsIEVsZW1lbnRUeXBl
KiBjdXJyZW50KQorICAgIDogRWxlbWVudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPigmcm9vdCwgY3Vy
cmVudCkKIHsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIFR5
cGVkRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6VHlwZWRFbGVt
ZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3IoY29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdCwgY29u
c3QgRWxlbWVudFR5cGUqIGN1cnJlbnQpCi0gICAgOiBFbGVtZW50Q29uc3RJdGVyYXRvcjxFbGVt
ZW50VHlwZT4oJnJvb3QsIGN1cnJlbnQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4g
RWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4mIEVsZW1lbnREZXNjZW5kYW50
SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpvcGVyYXRvcisrKCkKIHsKKyAgICBFbGVtZW50SXRlcmF0
b3I8RWxlbWVudFR5cGU+Ojp0cmF2ZXJzZU5leHQoKTsKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAK
LXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KLWlubGluZSBUeXBlZEVsZW1lbnREZXNj
ZW5kYW50Q29uc3RJdGVyYXRvcjxFbGVtZW50VHlwZT4mIFR5cGVkRWxlbWVudERlc2NlbmRhbnRD
b25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6b3BlcmF0b3IrKygpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBFbGVtZW50VHlwZT4gRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4mIEVs
ZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpvcGVyYXRvci0tKCkKIHsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZWRFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3I8
RWxlbWVudFR5cGU+Jj4oRWxlbWVudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+Ojp0cmF2ZXJz
ZU5leHQoKSk7CisgICAgRWxlbWVudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6dHJhdmVyc2VQcmV2
aW91cygpOworICAgIHJldHVybiAqdGhpczsKIH0KIAotLy8gVHlwZWRFbGVtZW50RGVzY2VuZGFu
dEl0ZXJhdG9yQWRhcHRlcgorLy8gRWxlbWVudERlc2NlbmRhbnRSYW5nZQogCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJh
dG9yQWRhcHRlcjxFbGVtZW50VHlwZT46OlR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvckFk
YXB0ZXIoQ29udGFpbmVyTm9kZSYgcm9vdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEVsZW1lbnRUeXBl
PiBFbGVtZW50RGVzY2VuZGFudFJhbmdlPEVsZW1lbnRUeXBlPjo6RWxlbWVudERlc2NlbmRhbnRS
YW5nZShjb25zdCBDb250YWluZXJOb2RlJiByb290KQogICAgIDogbV9yb290KHJvb3QpCiB7CiB9
CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KLWlubGluZSBUeXBlZEVsZW1lbnRE
ZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+IFR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVy
YXRvckFkYXB0ZXI8RWxlbWVudFR5cGU+OjpiZWdpbigpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVt
ZW50VHlwZT4gRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4gRWxlbWVudERl
c2NlbmRhbnRSYW5nZTxFbGVtZW50VHlwZT46OmJlZ2luKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
VHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3Jvb3QsIFRyYXZl
cnNhbDxFbGVtZW50VHlwZT46OmZpcnN0V2l0aGluKG1fcm9vdCkpOworICAgIHJldHVybiBFbGVt
ZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3Jvb3QsIFRyYXZlcnNhbDxFbGVt
ZW50VHlwZT46OmZpcnN0V2l0aGluKG1fcm9vdCkpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
RWxlbWVudFR5cGU+Ci1pbmxpbmUgVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1l
bnRUeXBlPiBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBl
Pjo6ZW5kKCkKLXsKLSAgICByZXR1cm4gVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVs
ZW1lbnRUeXBlPihtX3Jvb3QpOwotfQotICAgIAotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRU
eXBlPgotaW5saW5lIFR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4g
VHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46OmJlZ2lu
QXQoRWxlbWVudFR5cGUmIGRlc2NlbmRhbnQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlw
ZT4gRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4gRWxlbWVudERlc2NlbmRh
bnRSYW5nZTxFbGVtZW50VHlwZT46OmJlZ2luQXQoRWxlbWVudFR5cGUmIGRlc2NlbmRhbnQpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGRlc2NlbmRhbnQuaXNEZXNjZW5kYW50T2YobV9yb290KSk7Ci0g
ICAgcmV0dXJuIFR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4obV9y
b290LCAmZGVzY2VuZGFudCk7CisgICAgcmV0dXJuIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8
RWxlbWVudFR5cGU+KG1fcm9vdCwgJmRlc2NlbmRhbnQpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVs
ZW1lbnRUeXBlPiBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRU
eXBlPjo6ZnJvbShFbGVtZW50JiBkZXNjZW5kYW50KQordGVtcGxhdGU8dHlwZW5hbWUgRWxlbWVu
dFR5cGU+IEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+IEVsZW1lbnREZXNj
ZW5kYW50UmFuZ2U8RWxlbWVudFR5cGU+Ojpmcm9tKEVsZW1lbnQmIGRlc2NlbmRhbnQpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGRlc2NlbmRhbnQuaXNEZXNjZW5kYW50T2YobV9yb290KSk7CiAgICAg
aWYgKGlzPEVsZW1lbnRUeXBlPihkZXNjZW5kYW50KSkKLSAgICAgICAgcmV0dXJuIFR5cGVkRWxl
bWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT4obV9yb290LCBkb3duY2FzdDxFbGVt
ZW50VHlwZT4oJmRlc2NlbmRhbnQpKTsKKyAgICAgICAgcmV0dXJuIEVsZW1lbnREZXNjZW5kYW50
SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcm9vdCwgZG93bmNhc3Q8RWxlbWVudFR5cGU+KCZkZXNj
ZW5kYW50KSk7CiAgICAgRWxlbWVudFR5cGUqIG5leHQgPSBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+
OjpuZXh0KGRlc2NlbmRhbnQsICZtX3Jvb3QpOwotICAgIHJldHVybiBUeXBlZEVsZW1lbnREZXNj
ZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcm9vdCwgbmV4dCk7CisgICAgcmV0dXJuIEVs
ZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcm9vdCwgbmV4dCk7CiB9CiAK
LXRlbXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KLWlubGluZSBFbGVtZW50VHlwZSogVHlw
ZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46OmZpcnN0KCkK
K3RlbXBsYXRlPHR5cGVuYW1lIEVsZW1lbnRUeXBlPiBFbGVtZW50VHlwZSogRWxlbWVudERlc2Nl
bmRhbnRSYW5nZTxFbGVtZW50VHlwZT46OmZpcnN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gVHJh
dmVyc2FsPEVsZW1lbnRUeXBlPjo6Zmlyc3RXaXRoaW4obV9yb290KTsKIH0KIAotdGVtcGxhdGUg
PHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIEVsZW1lbnRUeXBlKiBUeXBlZEVsZW1lbnRE
ZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPjo6bGFzdCgpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBFbGVtZW50VHlwZT4gRWxlbWVudFR5cGUqIEVsZW1lbnREZXNjZW5kYW50UmFuZ2U8
RWxlbWVudFR5cGU+OjpsYXN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gVHJhdmVyc2FsPEVsZW1l
bnRUeXBlPjo6bGFzdFdpdGhpbihtX3Jvb3QpOwogfQogCi0vLyBUeXBlZEVsZW1lbnREZXNjZW5k
YW50Q29uc3RJdGVyYXRvckFkYXB0ZXIKKy8vIERvdWJsZUVsZW1lbnREZXNjZW5kYW50UmFuZ2UK
IAotdGVtcGxhdGUgPHR5cGVuYW1lIEVsZW1lbnRUeXBlPgotaW5saW5lIFR5cGVkRWxlbWVudERl
c2NlbmRhbnRDb25zdEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46OlR5cGVkRWxlbWVudERl
c2NlbmRhbnRDb25zdEl0ZXJhdG9yQWRhcHRlcihjb25zdCBDb250YWluZXJOb2RlJiByb290KQot
ICAgIDogbV9yb290KHJvb3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4gRG91Ymxl
RWxlbWVudERlc2NlbmRhbnRSYW5nZTxFbGVtZW50VHlwZT46OkRvdWJsZUVsZW1lbnREZXNjZW5k
YW50UmFuZ2UoU2luZ2xlQWRhcHRlciYmIGZpcnN0LCBTaW5nbGVBZGFwdGVyJiYgc2Vjb25kKQor
ICAgIDogbV9wYWlyKFdURk1vdmUoZmlyc3QpLCBXVEZNb3ZlKHNlY29uZCkpCiB7CiB9CiAKLXRl
bXBsYXRlIDx0eXBlbmFtZSBFbGVtZW50VHlwZT4KLWlubGluZSBUeXBlZEVsZW1lbnREZXNjZW5k
YW50Q29uc3RJdGVyYXRvcjxFbGVtZW50VHlwZT4gVHlwZWRFbGVtZW50RGVzY2VuZGFudENvbnN0
SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPjo6YmVnaW4oKSBjb25zdAordGVtcGxhdGU8dHlw
ZW5hbWUgRWxlbWVudFR5cGU+IGF1dG8gRG91YmxlRWxlbWVudERlc2NlbmRhbnRSYW5nZTxFbGVt
ZW50VHlwZT46OmJlZ2luKCkgY29uc3QgLT4gSXRlcmF0b3IKIHsKLSAgICByZXR1cm4gVHlwZWRF
bGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcm9vdCwgVHJhdmVy
c2FsPEVsZW1lbnRUeXBlPjo6Zmlyc3RXaXRoaW4obV9yb290KSk7CisgICAgcmV0dXJuIEl0ZXJh
dG9yKG1fcGFpci5maXJzdC5iZWdpbigpLCBtX3BhaXIuc2Vjb25kLmJlZ2luKCkpOwogfQogCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgVHlwZWRFbGVtZW50RGVzY2Vu
ZGFudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+IFR5cGVkRWxlbWVudERlc2NlbmRhbnRDb25z
dEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46OmVuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFR5cGVkRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3Jvb3Qp
OwotfQorLy8gRG91YmxlRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcgogCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgVHlwZWRFbGVtZW50RGVzY2VuZGFudENvbnN0SXRl
cmF0b3I8RWxlbWVudFR5cGU+IFR5cGVkRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yQWRh
cHRlcjxFbGVtZW50VHlwZT46OmJlZ2luQXQoY29uc3QgRWxlbWVudFR5cGUmIGRlc2NlbmRhbnQp
IGNvbnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4gRG91YmxlRWxlbWVudERlc2Nl
bmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT46OkRvdWJsZUVsZW1lbnREZXNjZW5kYW50SXRlcmF0
b3IoU2luZ2xlSXRlcmF0b3ImJiBmaXJzdCwgU2luZ2xlSXRlcmF0b3ImJiBzZWNvbmQpCisgICAg
OiBtX3BhaXIoV1RGTW92ZShmaXJzdCksIFdURk1vdmUoc2Vjb25kKSkKIHsKLSAgICBBU1NFUlQo
ZGVzY2VuZGFudC5pc0Rlc2NlbmRhbnRPZihtX3Jvb3QpKTsKLSAgICByZXR1cm4gVHlwZWRFbGVt
ZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+KG1fcm9vdCwgJmRlc2NlbmRh
bnQpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+Ci1pbmxpbmUgVHlwZWRF
bGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3I8RWxlbWVudFR5cGU+IFR5cGVkRWxlbWVudERl
c2NlbmRhbnRDb25zdEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46OmZyb20oY29uc3QgRWxl
bWVudCYgZGVzY2VuZGFudCkgY29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIEVsZW1lbnRUeXBlPiBh
dXRvIERvdWJsZUVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpvcGVyYXRv
ciooKSBjb25zdCAtPiBSZWZlcmVuY2VQcm94eQogewotICAgIEFTU0VSVChkZXNjZW5kYW50Lmlz
RGVzY2VuZGFudE9mKG1fcm9vdCkpOwotICAgIGlmIChpczxFbGVtZW50VHlwZT4oZGVzY2VuZGFu
dCkpCi0gICAgICAgIHJldHVybiBUeXBlZEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvcjxF
bGVtZW50VHlwZT4obV9yb290LCBkb3duY2FzdDxFbGVtZW50VHlwZT4oJmRlc2NlbmRhbnQpKTsK
LSAgICBjb25zdCBFbGVtZW50VHlwZSogbmV4dCA9IFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Om5l
eHQoZGVzY2VuZGFudCwgJm1fcm9vdCk7Ci0gICAgcmV0dXJuIFR5cGVkRWxlbWVudERlc2NlbmRh
bnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3Jvb3QsIG5leHQpOworICAgIHJldHVybiB7
ICptX3BhaXIuZmlyc3QsICptX3BhaXIuc2Vjb25kIH07CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBFbGVtZW50VHlwZT4KLWlubGluZSBjb25zdCBFbGVtZW50VHlwZSogVHlwZWRFbGVtZW50RGVz
Y2VuZGFudENvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPjo6Zmlyc3QoKSBjb25zdAor
dGVtcGxhdGU8dHlwZW5hbWUgRWxlbWVudFR5cGU+IGNvbnN0ZXhwciBib29sIERvdWJsZUVsZW1l
bnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudFR5cGU+OjpvcGVyYXRvciE9KHN0ZDo6bnVsbHB0
cl90KSBjb25zdAogewotICAgIHJldHVybiBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpmaXJzdFdp
dGhpbihtX3Jvb3QpOworICAgIEFTU0VSVCghbV9wYWlyLmZpcnN0ID09ICFtX3BhaXIuc2Vjb25k
KTsKKyAgICByZXR1cm4gbV9wYWlyLmZpcnN0OwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxl
bWVudFR5cGU+Ci1pbmxpbmUgY29uc3QgRWxlbWVudFR5cGUqIFR5cGVkRWxlbWVudERlc2NlbmRh
bnRDb25zdEl0ZXJhdG9yQWRhcHRlcjxFbGVtZW50VHlwZT46Omxhc3QoKSBjb25zdAordGVtcGxh
dGU8dHlwZW5hbWUgRWxlbWVudFR5cGU+IERvdWJsZUVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8
RWxlbWVudFR5cGU+JiBEb3VibGVFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBl
Pjo6b3BlcmF0b3IrKygpCiB7Ci0gICAgcmV0dXJuIFRyYXZlcnNhbDxFbGVtZW50VHlwZT46Omxh
c3RXaXRoaW4obV9yb290KTsKKyAgICArK21fcGFpci5maXJzdDsKKyAgICArK21fcGFpci5zZWNv
bmQ7CisgICAgcmV0dXJuICp0aGlzOwogfQogCi0vLyBEb3VibGVUeXBlZEVsZW1lbnREZXNjZW5k
YW50SXRlcmF0b3JBZGFwdGVyCisvLyBGaWx0ZXJlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IK
IAotdGVtcGxhdGU8dHlwZW5hbWUgRWxlbWVudFR5cGU+IGlubGluZSBEb3VibGVUeXBlZEVsZW1l
bnREZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPjo6RG91YmxlVHlwZWRFbGVt
ZW50RGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcihTaW5nbGVBZGFwdGVyJiYgZmlyc3QsIFNpbmds
ZUFkYXB0ZXImJiBzZWNvbmQpCi0gICAgOiBtX3BhaXIoV1RGTW92ZShmaXJzdCksIFdURk1vdmUo
c2Vjb25kKSkKK3RlbXBsYXRlPHR5cGVuYW1lIEVsZW1lbnRUeXBlLCBib29sIGZpbHRlcihjb25z
dCBFbGVtZW50VHlwZSYpPiBGaWx0ZXJlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVu
dFR5cGUsIGZpbHRlcj46OkZpbHRlcmVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcihjb25zdCBD
b250YWluZXJOb2RlJiByb290LCBFbGVtZW50VHlwZSogZWxlbWVudCkKKyAgICA6IEVsZW1lbnRJ
dGVyYXRvcjxjb25zdCBFbGVtZW50VHlwZT4geyAmcm9vdCwgZWxlbWVudCB9CiB7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIEVsZW1lbnRUeXBlPiBpbmxpbmUgYXV0byBEb3VibGVUeXBlZEVsZW1l
bnREZXNjZW5kYW50SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPjo6YmVnaW4oKSAtPiBJdGVy
YXRvcgordGVtcGxhdGU8dHlwZW5hbWUgRWxlbWVudFR5cGUsIGJvb2wgZmlsdGVyKGNvbnN0IEVs
ZW1lbnRUeXBlJik+IEZpbHRlcmVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlw
ZSwgZmlsdGVyPiYgRmlsdGVyZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBl
LCBmaWx0ZXI+OjpvcGVyYXRvcisrKCkKIHsKLSAgICByZXR1cm4gSXRlcmF0b3IobV9wYWlyLmZp
cnN0LmJlZ2luKCksIG1fcGFpci5zZWNvbmQuYmVnaW4oKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIEVsZW1lbnRUeXBlPiBpbmxpbmUgYXV0byBEb3VibGVUeXBlZEVsZW1lbnREZXNjZW5kYW50
SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPjo6ZW5kKCkgLT4gSXRlcmF0b3IKLXsKLSAgICBy
ZXR1cm4gSXRlcmF0b3IobV9wYWlyLmZpcnN0LmVuZCgpLCBtX3BhaXIuc2Vjb25kLmVuZCgpKTsK
KyAgICBkbyB7CisgICAgICAgIEVsZW1lbnRJdGVyYXRvcjxFbGVtZW50VHlwZT46OnRyYXZlcnNl
TmV4dCgpOworICAgIH0gd2hpbGUgKCp0aGlzICYmICFmaWx0ZXIoKip0aGlzKSk7CisgICAgcmV0
dXJuICp0aGlzOwogfQogCi0vLyBEb3VibGVUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IK
Ky8vIEZpbHRlcmVkRWxlbWVudERlc2NlbmRhbnRSYW5nZQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBF
bGVtZW50VHlwZT4gaW5saW5lIERvdWJsZVR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxF
bGVtZW50VHlwZT46OkRvdWJsZVR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcihTaW5nbGVJ
dGVyYXRvciYmIGZpcnN0LCBTaW5nbGVJdGVyYXRvciYmIHNlY29uZCkKLSAgICA6IG1fcGFpcihX
VEZNb3ZlKGZpcnN0KSwgV1RGTW92ZShzZWNvbmQpKQordGVtcGxhdGU8dHlwZW5hbWUgRWxlbWVu
dFR5cGUsIGJvb2wgZmlsdGVyKGNvbnN0IEVsZW1lbnRUeXBlJik+IEZpbHRlcmVkRWxlbWVudERl
c2NlbmRhbnRSYW5nZTxFbGVtZW50VHlwZSwgZmlsdGVyPjo6RmlsdGVyZWRFbGVtZW50RGVzY2Vu
ZGFudFJhbmdlKGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3QpCisgICAgOiBtX3Jvb3QgeyByb290
IH0KIHsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgRWxlbWVudFR5cGU+IGlubGluZSBhdXRvIERv
dWJsZVR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcjxFbGVtZW50VHlwZT46Om9wZXJhdG9y
KigpIGNvbnN0IC0+IFJlZmVyZW5jZVByb3h5Cit0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlw
ZSwgYm9vbCBmaWx0ZXIoY29uc3QgRWxlbWVudFR5cGUmKT4gYXV0byBGaWx0ZXJlZEVsZW1lbnRE
ZXNjZW5kYW50UmFuZ2U8RWxlbWVudFR5cGUsIGZpbHRlcj46OmJlZ2luKCkgY29uc3QgLT4gSXRl
cmF0b3IKIHsKLSAgICByZXR1cm4geyAqbV9wYWlyLmZpcnN0LCAqbV9wYWlyLnNlY29uZCB9Owor
ICAgIHJldHVybiB7IG1fcm9vdCwgZmlyc3QoKSB9OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBF
bGVtZW50VHlwZT4gaW5saW5lIGJvb2wgRG91YmxlVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJh
dG9yPEVsZW1lbnRUeXBlPjo6b3BlcmF0b3I9PShjb25zdCBEb3VibGVUeXBlZEVsZW1lbnREZXNj
ZW5kYW50SXRlcmF0b3ImIG90aGVyKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgRWxlbWVudFR5
cGUsIGJvb2wgZmlsdGVyKGNvbnN0IEVsZW1lbnRUeXBlJik+IEVsZW1lbnRUeXBlKiBGaWx0ZXJl
ZEVsZW1lbnREZXNjZW5kYW50UmFuZ2U8RWxlbWVudFR5cGUsIGZpbHRlcj46OmZpcnN0KCkgY29u
c3QKIHsKLSAgICBBU1NFUlQoKG1fcGFpci5maXJzdCA9PSBvdGhlci5tX3BhaXIuZmlyc3QpID09
IChtX3BhaXIuc2Vjb25kID09IG90aGVyLm1fcGFpci5zZWNvbmQpKTsKLSAgICByZXR1cm4gbV9w
YWlyLmZpcnN0ID09IG90aGVyLm1fcGFpci5maXJzdCB8fCBtX3BhaXIuc2Vjb25kID09IG90aGVy
Lm1fcGFpci5zZWNvbmQ7CisgICAgZm9yIChhdXRvKiBlbGVtZW50ID0gVHJhdmVyc2FsPEVsZW1l
bnRUeXBlPjo6Zmlyc3RXaXRoaW4obV9yb290KTsgZWxlbWVudDsgZWxlbWVudCA9IFRyYXZlcnNh
bDxFbGVtZW50VHlwZT46Om5leHQoKmVsZW1lbnQsICZtX3Jvb3QpKSB7CisgICAgICAgIGlmIChm
aWx0ZXIoKmVsZW1lbnQpKQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfQorICAg
IHJldHVybiBudWxscHRyOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4gaW5s
aW5lIGJvb2wgRG91YmxlVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBl
Pjo6b3BlcmF0b3IhPShjb25zdCBEb3VibGVUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3Im
IG90aGVyKSBjb25zdAotewotICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKLX0KKy8vIFN0
YW5kYWxvbmUgZnVuY3Rpb25zCiAKLXRlbXBsYXRlPHR5cGVuYW1lIEVsZW1lbnRUeXBlPiBpbmxp
bmUgRG91YmxlVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiYgRG91
YmxlVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPjo6b3BlcmF0b3Ir
KygpCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4gRWxlbWVudERlc2NlbmRhbnRSYW5n
ZTxFbGVtZW50VHlwZT4gZGVzY2VuZGFudHNPZlR5cGUoQ29udGFpbmVyTm9kZSYgcm9vdCkKIHsK
LSAgICArK21fcGFpci5maXJzdDsKLSAgICArK21fcGFpci5zZWNvbmQ7Ci0gICAgcmV0dXJuICp0
aGlzOworICAgIHJldHVybiBFbGVtZW50RGVzY2VuZGFudFJhbmdlPEVsZW1lbnRUeXBlPihyb290
KTsKIH0KIAotLy8gU3RhbmRhbG9uZSBmdW5jdGlvbnMKLQotdGVtcGxhdGUgPHR5cGVuYW1lIEVs
ZW1lbnRUeXBlPgotaW5saW5lIFR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXI8
RWxlbWVudFR5cGU+IGRlc2NlbmRhbnRzT2ZUeXBlKENvbnRhaW5lck5vZGUmIHJvb3QpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBFbGVtZW50VHlwZT4gRWxlbWVudERlc2NlbmRhbnRSYW5nZTxjb25zdCBF
bGVtZW50VHlwZT4gZGVzY2VuZGFudHNPZlR5cGUoY29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdCkK
IHsKLSAgICByZXR1cm4gVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yQWRhcHRlcjxFbGVt
ZW50VHlwZT4ocm9vdCk7CisgICAgcmV0dXJuIEVsZW1lbnREZXNjZW5kYW50UmFuZ2U8Y29uc3Qg
RWxlbWVudFR5cGU+KHJvb3QpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgRWxlbWVudFR5cGU+
Ci1pbmxpbmUgVHlwZWRFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1l
bnRUeXBlPiBkZXNjZW5kYW50c09mVHlwZShjb25zdCBDb250YWluZXJOb2RlJiByb290KQordGVt
cGxhdGU8dHlwZW5hbWUgRWxlbWVudFR5cGU+IERvdWJsZUVsZW1lbnREZXNjZW5kYW50UmFuZ2U8
RWxlbWVudFR5cGU+IGRlc2NlbmRhbnRzT2ZUeXBlKENvbnRhaW5lck5vZGUmIGZpcnN0Um9vdCwg
Q29udGFpbmVyTm9kZSYgc2Vjb25kUm9vdCkKIHsKLSAgICByZXR1cm4gVHlwZWRFbGVtZW50RGVz
Y2VuZGFudENvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBlPihyb290KTsKKyAgICByZXR1
cm4geyBkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50VHlwZT4oZmlyc3RSb290KSwgZGVzY2VuZGFu
dHNPZlR5cGU8RWxlbWVudFR5cGU+KHNlY29uZFJvb3QpIH07CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIEVsZW1lbnRUeXBlPiBpbmxpbmUgRG91YmxlVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJh
dG9yQWRhcHRlcjxFbGVtZW50VHlwZT4gZGVzY2VuZGFudHNPZlR5cGUoQ29udGFpbmVyTm9kZSYg
Zmlyc3RSb290LCBDb250YWluZXJOb2RlJiBzZWNvbmRSb290KQordGVtcGxhdGU8dHlwZW5hbWUg
RWxlbWVudFR5cGUsIGJvb2wgZmlsdGVyKGNvbnN0IEVsZW1lbnRUeXBlJik+IEZpbHRlcmVkRWxl
bWVudERlc2NlbmRhbnRSYW5nZTxjb25zdCBFbGVtZW50VHlwZSwgZmlsdGVyPiBmaWx0ZXJlZERl
c2NlbmRhbnRzKGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3QpCiB7Ci0gICAgcmV0dXJuIHsgZGVz
Y2VuZGFudHNPZlR5cGU8RWxlbWVudFR5cGU+KGZpcnN0Um9vdCksIGRlc2NlbmRhbnRzT2ZUeXBl
PEVsZW1lbnRUeXBlPihzZWNvbmRSb290KSB9OworICAgIHJldHVybiB7IHJvb3QgfTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9D
YWNoZWRIVE1MQ29sbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DYWNoZWRIVE1MQ29s
bGVjdGlvbi5oCmluZGV4IDc5ZjQ3N2Q3NGYyMjRlNzFiNDZhYmE0NzdmNmNkYjBkYTg5ZGY0ODUu
LjBmMDZjMGIzYTFjOWY2OWQ3ZDE0MWIwYjIzNjRmOTZhMTllY2ZkYzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvQ2FjaGVkSFRNTENvbGxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0NhY2hlZEhUTUxDb2xsZWN0aW9uLmgKQEAgLTI1LDcgKzI1LDYgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDb2xsZWN0aW9uVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAi
SFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2MuaD4KQEAgLTUyLDE0ICs1MSwxNCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
Ly8gRm9yIENvbGxlY3Rpb25JbmRleENhY2hlOyBkbyBub3QgdXNlIGVsc2V3aGVyZS4KLSAgICB1
c2luZyBDb2xsZWN0aW9uVHJhdmVyc2FsSXRlcmF0b3IgPSB0eXBlbmFtZSBDb2xsZWN0aW9uVHJh
dmVyc2FsPHRyYXZlcnNhbFR5cGU+OjpJdGVyYXRvcjsKLSAgICBDb2xsZWN0aW9uVHJhdmVyc2Fs
SXRlcmF0b3IgY29sbGVjdGlvbkJlZ2luKCkgY29uc3QgeyByZXR1cm4gQ29sbGVjdGlvblRyYXZl
cnNhbDx0cmF2ZXJzYWxUeXBlPjo6YmVnaW4oY29sbGVjdGlvbigpLCByb290Tm9kZSgpKTsgfQot
ICAgIENvbGxlY3Rpb25UcmF2ZXJzYWxJdGVyYXRvciBjb2xsZWN0aW9uTGFzdCgpIGNvbnN0IHsg
cmV0dXJuIENvbGxlY3Rpb25UcmF2ZXJzYWw8dHJhdmVyc2FsVHlwZT46Omxhc3QoY29sbGVjdGlv
bigpLCByb290Tm9kZSgpKTsgfQotICAgIENvbGxlY3Rpb25UcmF2ZXJzYWxJdGVyYXRvciBjb2xs
ZWN0aW9uRW5kKCkgY29uc3QgeyByZXR1cm4gQ29sbGVjdGlvblRyYXZlcnNhbDx0cmF2ZXJzYWxU
eXBlPjo6ZW5kKHJvb3ROb2RlKCkpOyB9Ci0gICAgdm9pZCBjb2xsZWN0aW9uVHJhdmVyc2VGb3J3
YXJkKENvbGxlY3Rpb25UcmF2ZXJzYWxJdGVyYXRvciYgY3VycmVudCwgdW5zaWduZWQgY291bnQs
IHVuc2lnbmVkJiB0cmF2ZXJzZWRDb3VudCkgY29uc3QgeyBDb2xsZWN0aW9uVHJhdmVyc2FsPHRy
YXZlcnNhbFR5cGU+Ojp0cmF2ZXJzZUZvcndhcmQoY29sbGVjdGlvbigpLCBjdXJyZW50LCBjb3Vu
dCwgdHJhdmVyc2VkQ291bnQpOyB9Ci0gICAgdm9pZCBjb2xsZWN0aW9uVHJhdmVyc2VCYWNrd2Fy
ZChDb2xsZWN0aW9uVHJhdmVyc2FsSXRlcmF0b3ImIGN1cnJlbnQsIHVuc2lnbmVkIGNvdW50KSBj
b25zdCB7IENvbGxlY3Rpb25UcmF2ZXJzYWw8dHJhdmVyc2FsVHlwZT46OnRyYXZlcnNlQmFja3dh
cmQoY29sbGVjdGlvbigpLCBjdXJyZW50LCBjb3VudCk7IH0KKyAgICB1c2luZyBUcmF2ZXJzYWwg
PSBDb2xsZWN0aW9uVHJhdmVyc2FsPHRyYXZlcnNhbFR5cGU+OworICAgIHVzaW5nIEl0ZXJhdG9y
ID0gdHlwZW5hbWUgVHJhdmVyc2FsOjpJdGVyYXRvcjsKKyAgICBhdXRvIGNvbGxlY3Rpb25CZWdp
bigpIGNvbnN0IHsgcmV0dXJuIFRyYXZlcnNhbDo6YmVnaW4oY29sbGVjdGlvbigpLCByb290Tm9k
ZSgpKTsgfQorICAgIGF1dG8gY29sbGVjdGlvbkxhc3QoKSBjb25zdCB7IHJldHVybiBUcmF2ZXJz
YWw6Omxhc3QoY29sbGVjdGlvbigpLCByb290Tm9kZSgpKTsgfQorICAgIHZvaWQgY29sbGVjdGlv
blRyYXZlcnNlRm9yd2FyZChJdGVyYXRvciYgY3VycmVudCwgdW5zaWduZWQgY291bnQsIHVuc2ln
bmVkJiB0cmF2ZXJzZWRDb3VudCkgY29uc3QgeyBUcmF2ZXJzYWw6OnRyYXZlcnNlRm9yd2FyZChj
b2xsZWN0aW9uKCksIGN1cnJlbnQsIGNvdW50LCB0cmF2ZXJzZWRDb3VudCk7IH0KKyAgICB2b2lk
IGNvbGxlY3Rpb25UcmF2ZXJzZUJhY2t3YXJkKEl0ZXJhdG9yJiBjdXJyZW50LCB1bnNpZ25lZCBj
b3VudCkgY29uc3QgeyBUcmF2ZXJzYWw6OnRyYXZlcnNlQmFja3dhcmQoY29sbGVjdGlvbigpLCBj
dXJyZW50LCBjb3VudCk7IH0KICAgICBib29sIGNvbGxlY3Rpb25DYW5UcmF2ZXJzZUJhY2t3YXJk
KCkgY29uc3QgeyByZXR1cm4gdHJhdmVyc2FsVHlwZSAhPSBDb2xsZWN0aW9uVHJhdmVyc2FsVHlw
ZTo6Q3VzdG9tRm9yd2FyZE9ubHk7IH0KLSAgICB2b2lkIHdpbGxWYWxpZGF0ZUluZGV4Q2FjaGUo
KSBjb25zdCB7IGRvY3VtZW50KCkucmVnaXN0ZXJDb2xsZWN0aW9uKGNvbnN0X2Nhc3Q8Q2FjaGVk
SFRNTENvbGxlY3Rpb248SFRNTENvbGxlY3Rpb25DbGFzcywgdHJhdmVyc2FsVHlwZT4mPigqdGhp
cykpOyB9CisgICAgdm9pZCB3aWxsVmFsaWRhdGVJbmRleENhY2hlKCkgY29uc3QgeyBkb2N1bWVu
dCgpLnJlZ2lzdGVyQ29sbGVjdGlvbihjb25zdF9jYXN0PENhY2hlZEhUTUxDb2xsZWN0aW9uJj4o
KnRoaXMpKTsgfQogCiAgICAgdm9pZCBpbnZhbGlkYXRlQ2FjaGVGb3JEb2N1bWVudChEb2N1bWVu
dCYpIG92ZXJyaWRlOwogCkBAIC02OSwxOSArNjgsMTkgQEAgcHJpdmF0ZToKICAgICBIVE1MQ29s
bGVjdGlvbkNsYXNzJiBjb2xsZWN0aW9uKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTENvbGxl
Y3Rpb25DbGFzcyY+KCp0aGlzKTsgfQogICAgIGNvbnN0IEhUTUxDb2xsZWN0aW9uQ2xhc3MmIGNv
bGxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBIVE1MQ29sbGVjdGlv
bkNsYXNzJj4oKnRoaXMpOyB9CiAKLSAgICBtdXRhYmxlIENvbGxlY3Rpb25JbmRleENhY2hlPEhU
TUxDb2xsZWN0aW9uQ2xhc3MsIENvbGxlY3Rpb25UcmF2ZXJzYWxJdGVyYXRvcj4gbV9pbmRleENh
Y2hlOworICAgIG11dGFibGUgQ29sbGVjdGlvbkluZGV4Q2FjaGU8SFRNTENvbGxlY3Rpb25DbGFz
cywgSXRlcmF0b3I+IG1faW5kZXhDYWNoZTsKIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBIVE1M
Q29sbGVjdGlvbkNsYXNzLCBDb2xsZWN0aW9uVHJhdmVyc2FsVHlwZSB0cmF2ZXJzYWxUeXBlPgog
Q2FjaGVkSFRNTENvbGxlY3Rpb248SFRNTENvbGxlY3Rpb25DbGFzcywgdHJhdmVyc2FsVHlwZT46
OkNhY2hlZEhUTUxDb2xsZWN0aW9uKENvbnRhaW5lck5vZGUmIGJhc2UsIENvbGxlY3Rpb25UeXBl
IGNvbGxlY3Rpb25UeXBlKQogICAgIDogSFRNTENvbGxlY3Rpb24oYmFzZSwgY29sbGVjdGlvblR5
cGUpCi0gICAgLCBtX2luZGV4Q2FjaGUoY29sbGVjdGlvbigpKQoteyB9Cit7Cit9CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBIVE1MQ29sbGVjdGlvbkNsYXNzLCBDb2xsZWN0aW9uVHJhdmVyc2FsVHlw
ZSB0cmF2ZXJzYWxUeXBlPgogQ2FjaGVkSFRNTENvbGxlY3Rpb248SFRNTENvbGxlY3Rpb25DbGFz
cywgdHJhdmVyc2FsVHlwZT46On5DYWNoZWRIVE1MQ29sbGVjdGlvbigpCiB7Ci0gICAgaWYgKG1f
aW5kZXhDYWNoZS5oYXNWYWxpZENhY2hlKGNvbGxlY3Rpb24oKSkpCisgICAgaWYgKG1faW5kZXhD
YWNoZS5oYXNWYWxpZENhY2hlKCkpCiAgICAgICAgIGRvY3VtZW50KCkudW5yZWdpc3RlckNvbGxl
Y3Rpb24oKnRoaXMpOwogfQogCkBAIC04OSw5ICs4OCw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBI
VE1MQ29sbGVjdGlvbkNsYXNzLCBDb2xsZWN0aW9uVHJhdmVyc2FsVHlwZSB0cmF2ZXJzYWxUeXBl
Pgogdm9pZCBDYWNoZWRIVE1MQ29sbGVjdGlvbjxIVE1MQ29sbGVjdGlvbkNsYXNzLCB0cmF2ZXJz
YWxUeXBlPjo6aW52YWxpZGF0ZUNhY2hlRm9yRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQog
ewogICAgIEhUTUxDb2xsZWN0aW9uOjppbnZhbGlkYXRlQ2FjaGVGb3JEb2N1bWVudChkb2N1bWVu
dCk7Ci0gICAgaWYgKG1faW5kZXhDYWNoZS5oYXNWYWxpZENhY2hlKGNvbGxlY3Rpb24oKSkpIHsK
KyAgICBpZiAobV9pbmRleENhY2hlLmhhc1ZhbGlkQ2FjaGUoKSkgewogICAgICAgICBkb2N1bWVu
dC51bnJlZ2lzdGVyQ29sbGVjdGlvbigqdGhpcyk7Ci0gICAgICAgIG1faW5kZXhDYWNoZS5pbnZh
bGlkYXRlKGNvbGxlY3Rpb24oKSk7CisgICAgICAgIG1faW5kZXhDYWNoZS5pbnZhbGlkYXRlKCk7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NvbGxlY3Rpb25U
cmF2ZXJzYWwuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29sbGVjdGlvblRyYXZlcnNhbC5oCmlu
ZGV4IDY2ODI5MzM4ZDBiMWQxYjBjYWI1MTE3N2YwMzg3MjBjMTkyZjcxOTYuLjJhODhmNTdlMWJk
NjRiMTY4MTU4MzJiZjBiMDZlOGM0Y2FkMDZhYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvQ29sbGVjdGlvblRyYXZlcnNhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ29s
bGVjdGlvblRyYXZlcnNhbC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDggKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiQ29sbGVjdGlvblR5cGUuaCIKLSNpbmNsdWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgot
I2luY2x1ZGUgIkVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJFbGVtZW50
SXRlcmF0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNiw3NiArMzUsNjQgQEAg
c3RydWN0IENvbGxlY3Rpb25UcmF2ZXJzYWwgeyB9OwogCiB0ZW1wbGF0ZSA8Pgogc3RydWN0IENv
bGxlY3Rpb25UcmF2ZXJzYWw8Q29sbGVjdGlvblRyYXZlcnNhbFR5cGU6OkRlc2NlbmRhbnRzPiB7
Ci0gICAgdXNpbmcgSXRlcmF0b3IgPSBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yOwotCi0gICAg
c3RhdGljIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IgZW5kKENvbnRhaW5lck5vZGUmKSB7IHJl
dHVybiBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yKCk7IH0KKyAgICB1c2luZyBJdGVyYXRvciA9
IEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I8RWxlbWVudD47CiAKICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ29sbGVjdGlvbkNsYXNzPgotICAgIHN0YXRpYyBFbGVtZW50RGVzY2VuZGFudEl0ZXJh
dG9yIGJlZ2luKGNvbnN0IENvbGxlY3Rpb25DbGFzcyYsIENvbnRhaW5lck5vZGUmIHJvb3ROb2Rl
KTsKKyAgICBzdGF0aWMgSXRlcmF0b3IgYmVnaW4oY29uc3QgQ29sbGVjdGlvbkNsYXNzJiwgQ29u
dGFpbmVyTm9kZSYgcm9vdE5vZGUpOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvbGxlY3Rp
b25DbGFzcz4KLSAgICBzdGF0aWMgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciBsYXN0KGNvbnN0
IENvbGxlY3Rpb25DbGFzcyYsIENvbnRhaW5lck5vZGUmIHJvb3ROb2RlKTsKKyAgICBzdGF0aWMg
SXRlcmF0b3IgbGFzdChjb25zdCBDb2xsZWN0aW9uQ2xhc3MmLCBDb250YWluZXJOb2RlJiByb290
Tm9kZSk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29sbGVjdGlvbkNsYXNzPgotICAgIHN0
YXRpYyB2b2lkIHRyYXZlcnNlRm9yd2FyZChjb25zdCBDb2xsZWN0aW9uQ2xhc3MmLCBFbGVtZW50
RGVzY2VuZGFudEl0ZXJhdG9yJiBjdXJyZW50LCB1bnNpZ25lZCBjb3VudCwgdW5zaWduZWQmIHRy
YXZlcnNlZENvdW50KTsKKyAgICBzdGF0aWMgdm9pZCB0cmF2ZXJzZUZvcndhcmQoY29uc3QgQ29s
bGVjdGlvbkNsYXNzJiwgSXRlcmF0b3ImIGN1cnJlbnQsIHVuc2lnbmVkIGNvdW50LCB1bnNpZ25l
ZCYgdHJhdmVyc2VkQ291bnQpOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvbGxlY3Rpb25D
bGFzcz4KLSAgICBzdGF0aWMgdm9pZCB0cmF2ZXJzZUJhY2t3YXJkKGNvbnN0IENvbGxlY3Rpb25D
bGFzcyYsIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3ImIGN1cnJlbnQsIHVuc2lnbmVkIGNvdW50
KTsKKyAgICBzdGF0aWMgdm9pZCB0cmF2ZXJzZUJhY2t3YXJkKGNvbnN0IENvbGxlY3Rpb25DbGFz
cyYsIEl0ZXJhdG9yJiBjdXJyZW50LCB1bnNpZ25lZCBjb3VudCk7CiB9OwogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQ29sbGVjdGlvbkNsYXNzPgotaW5saW5lIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0
b3IgQ29sbGVjdGlvblRyYXZlcnNhbDxDb2xsZWN0aW9uVHJhdmVyc2FsVHlwZTo6RGVzY2VuZGFu
dHM+OjpiZWdpbihjb25zdCBDb2xsZWN0aW9uQ2xhc3MmIGNvbGxlY3Rpb24sIENvbnRhaW5lck5v
ZGUmIHJvb3ROb2RlKQoraW5saW5lIGF1dG8gQ29sbGVjdGlvblRyYXZlcnNhbDxDb2xsZWN0aW9u
VHJhdmVyc2FsVHlwZTo6RGVzY2VuZGFudHM+OjpiZWdpbihjb25zdCBDb2xsZWN0aW9uQ2xhc3Mm
IGNvbGxlY3Rpb24sIENvbnRhaW5lck5vZGUmIHJvb3ROb2RlKSAtPiBJdGVyYXRvcgogewotICAg
IGF1dG8gZGVzY2VuZGFudHMgPSBlbGVtZW50RGVzY2VuZGFudHMocm9vdE5vZGUpOwotICAgIGF1
dG8gZW5kID0gZGVzY2VuZGFudHMuZW5kKCk7Ci0gICAgZm9yIChhdXRvIGl0ID0gZGVzY2VuZGFu
dHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChjb2xsZWN0aW9uLmVs
ZW1lbnRNYXRjaGVzKCppdCkpIHsKLSAgICAgICAgICAgIC8vIERyb3AgaXRlcmF0b3IgYXNzZXJ0
aW9ucyBiZWNhdXNlIEhUTUxDb2xsZWN0aW9ucyAvIE5vZGVMaXN0IHVzZSBhIGZpbmUtZ3JhaW5l
ZCBpbnZhbGlkYXRpb24gc2NoZW1lLgotICAgICAgICAgICAgaXQuZHJvcEFzc2VydGlvbnMoKTsK
LSAgICAgICAgICAgIHJldHVybiBpdDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZW5k
OworICAgIGF1dG8gaXQgPSBkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50Pihyb290Tm9kZSkuYmVn
aW4oKTsKKyAgICB3aGlsZSAoaXQgJiYgIWNvbGxlY3Rpb24uZWxlbWVudE1hdGNoZXMoKml0KSkK
KyAgICAgICAgKytpdDsKKyAgICAvLyBEcm9wIGl0ZXJhdG9yIGFzc2VydGlvbnMgYmVjYXVzZSBI
VE1MQ29sbGVjdGlvbnMgLyBOb2RlTGlzdCB1c2UgYSBmaW5lLWdyYWluZWQgaW52YWxpZGF0aW9u
IHNjaGVtZS4KKyAgICBpdC5kcm9wQXNzZXJ0aW9ucygpOworICAgIHJldHVybiBpdDsKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIENvbGxlY3Rpb25DbGFzcz4KLWlubGluZSBFbGVtZW50RGVzY2Vu
ZGFudEl0ZXJhdG9yIENvbGxlY3Rpb25UcmF2ZXJzYWw8Q29sbGVjdGlvblRyYXZlcnNhbFR5cGU6
OkRlc2NlbmRhbnRzPjo6bGFzdChjb25zdCBDb2xsZWN0aW9uQ2xhc3MmIGNvbGxlY3Rpb24sIENv
bnRhaW5lck5vZGUmIHJvb3ROb2RlKQoraW5saW5lIGF1dG8gQ29sbGVjdGlvblRyYXZlcnNhbDxD
b2xsZWN0aW9uVHJhdmVyc2FsVHlwZTo6RGVzY2VuZGFudHM+OjpsYXN0KGNvbnN0IENvbGxlY3Rp
b25DbGFzcyYgY29sbGVjdGlvbiwgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUpIC0+IEl0ZXJhdG9y
CiB7Ci0gICAgYXV0byBkZXNjZW5kYW50cyA9IGVsZW1lbnREZXNjZW5kYW50cyhyb290Tm9kZSk7
Ci0gICAgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciBpbnZhbGlkOwotICAgIGZvciAoYXV0byBp
dCA9IGRlc2NlbmRhbnRzLmxhc3QoKTsgaXQgIT0gaW52YWxpZDsgLS1pdCkgewotICAgICAgICBp
ZiAoY29sbGVjdGlvbi5lbGVtZW50TWF0Y2hlcygqaXQpKSB7Ci0gICAgICAgICAgICAvLyBEcm9w
IGl0ZXJhdG9yIGFzc2VydGlvbnMgYmVjYXVzZSBIVE1MQ29sbGVjdGlvbnMgLyBOb2RlTGlzdCB1
c2UgYSBmaW5lLWdyYWluZWQgaW52YWxpZGF0aW9uIHNjaGVtZS4KLSAgICAgICAgICAgIGl0LmRy
b3BBc3NlcnRpb25zKCk7Ci0gICAgICAgICAgICByZXR1cm4gaXQ7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIGludmFsaWQ7CisgICAgSXRlcmF0b3IgaXQgeyByb290Tm9kZSwgRWxlbWVu
dFRyYXZlcnNhbDo6bGFzdFdpdGhpbihyb290Tm9kZSkgfTsKKyAgICB3aGlsZSAoaXQgJiYgIWNv
bGxlY3Rpb24uZWxlbWVudE1hdGNoZXMoKml0KSkKKyAgICAgICAgLS1pdDsKKyAgICAvLyBEcm9w
IGl0ZXJhdG9yIGFzc2VydGlvbnMgYmVjYXVzZSBIVE1MQ29sbGVjdGlvbnMgLyBOb2RlTGlzdCB1
c2UgYSBmaW5lLWdyYWluZWQgaW52YWxpZGF0aW9uIHNjaGVtZS4KKyAgICBpdC5kcm9wQXNzZXJ0
aW9ucygpOworICAgIHJldHVybiBpdDsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENvbGxlY3Rp
b25DbGFzcz4KLWlubGluZSB2b2lkIENvbGxlY3Rpb25UcmF2ZXJzYWw8Q29sbGVjdGlvblRyYXZl
cnNhbFR5cGU6OkRlc2NlbmRhbnRzPjo6dHJhdmVyc2VGb3J3YXJkKGNvbnN0IENvbGxlY3Rpb25D
bGFzcyYgY29sbGVjdGlvbiwgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciYgY3VycmVudCwgdW5z
aWduZWQgY291bnQsIHVuc2lnbmVkJiB0cmF2ZXJzZWRDb3VudCkKK2lubGluZSB2b2lkIENvbGxl
Y3Rpb25UcmF2ZXJzYWw8Q29sbGVjdGlvblRyYXZlcnNhbFR5cGU6OkRlc2NlbmRhbnRzPjo6dHJh
dmVyc2VGb3J3YXJkKGNvbnN0IENvbGxlY3Rpb25DbGFzcyYgY29sbGVjdGlvbiwgSXRlcmF0b3Im
IGN1cnJlbnQsIHVuc2lnbmVkIGNvdW50LCB1bnNpZ25lZCYgdHJhdmVyc2VkQ291bnQpCiB7CiAg
ICAgQVNTRVJUKGNvbGxlY3Rpb24uZWxlbWVudE1hdGNoZXMoKmN1cnJlbnQpKTsKLSAgICBFbGVt
ZW50RGVzY2VuZGFudEl0ZXJhdG9yIGludmFsaWQ7CiAgICAgZm9yICh0cmF2ZXJzZWRDb3VudCA9
IDA7IHRyYXZlcnNlZENvdW50IDwgY291bnQ7ICsrdHJhdmVyc2VkQ291bnQpIHsKICAgICAgICAg
ZG8gewogICAgICAgICAgICAgKytjdXJyZW50OwotICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0g
aW52YWxpZCkKKyAgICAgICAgICAgIGlmICghY3VycmVudCkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0gd2hpbGUgKCFjb2xsZWN0aW9uLmVsZW1lbnRNYXRjaGVzKCpjdXJyZW50
KSk7CiAgICAgfQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29sbGVjdGlvbkNsYXNzPgotaW5s
aW5lIHZvaWQgQ29sbGVjdGlvblRyYXZlcnNhbDxDb2xsZWN0aW9uVHJhdmVyc2FsVHlwZTo6RGVz
Y2VuZGFudHM+Ojp0cmF2ZXJzZUJhY2t3YXJkKGNvbnN0IENvbGxlY3Rpb25DbGFzcyYgY29sbGVj
dGlvbiwgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciYgY3VycmVudCwgdW5zaWduZWQgY291bnQp
CitpbmxpbmUgdm9pZCBDb2xsZWN0aW9uVHJhdmVyc2FsPENvbGxlY3Rpb25UcmF2ZXJzYWxUeXBl
OjpEZXNjZW5kYW50cz46OnRyYXZlcnNlQmFja3dhcmQoY29uc3QgQ29sbGVjdGlvbkNsYXNzJiBj
b2xsZWN0aW9uLCBJdGVyYXRvciYgY3VycmVudCwgdW5zaWduZWQgY291bnQpCiB7CiAgICAgQVNT
RVJUKGNvbGxlY3Rpb24uZWxlbWVudE1hdGNoZXMoKmN1cnJlbnQpKTsKLSAgICBFbGVtZW50RGVz
Y2VuZGFudEl0ZXJhdG9yIGludmFsaWQ7CiAgICAgZm9yICg7IGNvdW50OyAtLWNvdW50KSB7CiAg
ICAgICAgIGRvIHsKICAgICAgICAgICAgIC0tY3VycmVudDsKLSAgICAgICAgICAgIGlmIChjdXJy
ZW50ID09IGludmFsaWQpCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9IHdoaWxlICghY29sbGVjdGlvbi5lbGVtZW50TWF0Y2hlcygq
Y3VycmVudCkpOwogICAgIH0KQEAgLTExNSw3NSArMTAyLDYyIEBAIHRlbXBsYXRlIDw+CiBzdHJ1
Y3QgQ29sbGVjdGlvblRyYXZlcnNhbDxDb2xsZWN0aW9uVHJhdmVyc2FsVHlwZTo6Q2hpbGRyZW5P
bmx5PiB7CiAgICAgdXNpbmcgSXRlcmF0b3IgPSBFbGVtZW50Q2hpbGRJdGVyYXRvcjxFbGVtZW50
PjsKIAotICAgIHN0YXRpYyBFbGVtZW50Q2hpbGRJdGVyYXRvcjxFbGVtZW50PiBlbmQoQ29udGFp
bmVyTm9kZSYgcm9vdE5vZGUpIHsgcmV0dXJuIEVsZW1lbnRDaGlsZEl0ZXJhdG9yPEVsZW1lbnQ+
KHJvb3ROb2RlKTsgfQotCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvbGxlY3Rpb25DbGFzcz4K
LSAgICBzdGF0aWMgRWxlbWVudENoaWxkSXRlcmF0b3I8RWxlbWVudD4gYmVnaW4oY29uc3QgQ29s
bGVjdGlvbkNsYXNzJiwgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUpOworICAgIHN0YXRpYyBJdGVy
YXRvciBiZWdpbihjb25zdCBDb2xsZWN0aW9uQ2xhc3MmLCBDb250YWluZXJOb2RlJiByb290Tm9k
ZSk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29sbGVjdGlvbkNsYXNzPgotICAgIHN0YXRp
YyBFbGVtZW50Q2hpbGRJdGVyYXRvcjxFbGVtZW50PiBsYXN0KGNvbnN0IENvbGxlY3Rpb25DbGFz
cyYsIENvbnRhaW5lck5vZGUmIHJvb3ROb2RlKTsKKyAgICBzdGF0aWMgSXRlcmF0b3IgbGFzdChj
b25zdCBDb2xsZWN0aW9uQ2xhc3MmLCBDb250YWluZXJOb2RlJiByb290Tm9kZSk7CiAKICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ29sbGVjdGlvbkNsYXNzPgotICAgIHN0YXRpYyB2b2lkIHRyYXZl
cnNlRm9yd2FyZChjb25zdCBDb2xsZWN0aW9uQ2xhc3MmLCBFbGVtZW50Q2hpbGRJdGVyYXRvcjxF
bGVtZW50PiYgY3VycmVudCwgdW5zaWduZWQgY291bnQsIHVuc2lnbmVkJiB0cmF2ZXJzZWRDb3Vu
dCk7CisgICAgc3RhdGljIHZvaWQgdHJhdmVyc2VGb3J3YXJkKGNvbnN0IENvbGxlY3Rpb25DbGFz
cyYsIEl0ZXJhdG9yJiBjdXJyZW50LCB1bnNpZ25lZCBjb3VudCwgdW5zaWduZWQmIHRyYXZlcnNl
ZENvdW50KTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2xsZWN0aW9uQ2xhc3M+Ci0gICAg
c3RhdGljIHZvaWQgdHJhdmVyc2VCYWNrd2FyZChjb25zdCBDb2xsZWN0aW9uQ2xhc3MmLCBFbGVt
ZW50Q2hpbGRJdGVyYXRvcjxFbGVtZW50PiYgY3VycmVudCwgdW5zaWduZWQgY291bnQpOworICAg
IHN0YXRpYyB2b2lkIHRyYXZlcnNlQmFja3dhcmQoY29uc3QgQ29sbGVjdGlvbkNsYXNzJiwgSXRl
cmF0b3ImIGN1cnJlbnQsIHVuc2lnbmVkIGNvdW50KTsKIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDb2xsZWN0aW9uQ2xhc3M+Ci1pbmxpbmUgRWxlbWVudENoaWxkSXRlcmF0b3I8RWxlbWVudD4g
Q29sbGVjdGlvblRyYXZlcnNhbDxDb2xsZWN0aW9uVHJhdmVyc2FsVHlwZTo6Q2hpbGRyZW5Pbmx5
Pjo6YmVnaW4oY29uc3QgQ29sbGVjdGlvbkNsYXNzJiBjb2xsZWN0aW9uLCBDb250YWluZXJOb2Rl
JiByb290Tm9kZSkKK2lubGluZSBhdXRvIENvbGxlY3Rpb25UcmF2ZXJzYWw8Q29sbGVjdGlvblRy
YXZlcnNhbFR5cGU6OkNoaWxkcmVuT25seT46OmJlZ2luKGNvbnN0IENvbGxlY3Rpb25DbGFzcyYg
Y29sbGVjdGlvbiwgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUpIC0+IEl0ZXJhdG9yCiB7Ci0gICAg
YXV0byBjaGlsZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPEVsZW1lbnQ+KHJvb3ROb2RlKTsKLSAgICBh
dXRvIGVuZCA9IGNoaWxkcmVuLmVuZCgpOwotICAgIGZvciAoYXV0byBpdCA9IGNoaWxkcmVuLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoY29sbGVjdGlvbi5lbGVtZW50
TWF0Y2hlcygqaXQpKSB7Ci0gICAgICAgICAgICAvLyBEcm9wIGl0ZXJhdG9yIGFzc2VydGlvbnMg
YmVjYXVzZSBIVE1MQ29sbGVjdGlvbnMgLyBOb2RlTGlzdCB1c2UgYSBmaW5lLWdyYWluZWQgaW52
YWxpZGF0aW9uIHNjaGVtZS4KLSAgICAgICAgICAgIGl0LmRyb3BBc3NlcnRpb25zKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gaXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGVuZDsKKyAg
ICBhdXRvIGl0ID0gY2hpbGRyZW5PZlR5cGU8RWxlbWVudD4ocm9vdE5vZGUpLmJlZ2luKCk7Cisg
ICAgd2hpbGUgKGl0ICYmICFjb2xsZWN0aW9uLmVsZW1lbnRNYXRjaGVzKCppdCkpCisgICAgICAg
ICsraXQ7CisgICAgLy8gRHJvcCBpdGVyYXRvciBhc3NlcnRpb25zIGJlY2F1c2UgSFRNTENvbGxl
Y3Rpb25zIC8gTm9kZUxpc3QgdXNlIGEgZmluZS1ncmFpbmVkIGludmFsaWRhdGlvbiBzY2hlbWUu
CisgICAgaXQuZHJvcEFzc2VydGlvbnMoKTsKKyAgICByZXR1cm4gaXQ7CiB9CiAKIHRlbXBsYXRl
IDx0eXBlbmFtZSBDb2xsZWN0aW9uQ2xhc3M+Ci1pbmxpbmUgRWxlbWVudENoaWxkSXRlcmF0b3I8
RWxlbWVudD4gQ29sbGVjdGlvblRyYXZlcnNhbDxDb2xsZWN0aW9uVHJhdmVyc2FsVHlwZTo6Q2hp
bGRyZW5Pbmx5Pjo6bGFzdChjb25zdCBDb2xsZWN0aW9uQ2xhc3MmIGNvbGxlY3Rpb24sIENvbnRh
aW5lck5vZGUmIHJvb3ROb2RlKQoraW5saW5lIGF1dG8gQ29sbGVjdGlvblRyYXZlcnNhbDxDb2xs
ZWN0aW9uVHJhdmVyc2FsVHlwZTo6Q2hpbGRyZW5Pbmx5Pjo6bGFzdChjb25zdCBDb2xsZWN0aW9u
Q2xhc3MmIGNvbGxlY3Rpb24sIENvbnRhaW5lck5vZGUmIHJvb3ROb2RlKSAtPiBJdGVyYXRvcgog
ewotICAgIGF1dG8gY2hpbGRyZW4gPSBjaGlsZHJlbk9mVHlwZTxFbGVtZW50Pihyb290Tm9kZSk7
Ci0gICAgRWxlbWVudENoaWxkSXRlcmF0b3I8RWxlbWVudD4gaW52YWxpZChjb2xsZWN0aW9uLnJv
b3ROb2RlKCkpOwotICAgIEVsZW1lbnRDaGlsZEl0ZXJhdG9yPEVsZW1lbnQ+IGxhc3Qocm9vdE5v
ZGUsIGNoaWxkcmVuLmxhc3QoKSk7Ci0gICAgZm9yIChhdXRvIGl0ID0gbGFzdDsgaXQgIT0gaW52
YWxpZDsgLS1pdCkgewotICAgICAgICBpZiAoY29sbGVjdGlvbi5lbGVtZW50TWF0Y2hlcygqaXQp
KSB7Ci0gICAgICAgICAgICAvLyBEcm9wIGl0ZXJhdG9yIGFzc2VydGlvbnMgYmVjYXVzZSBIVE1M
Q29sbGVjdGlvbnMgLyBOb2RlTGlzdCB1c2UgYSBmaW5lLWdyYWluZWQgaW52YWxpZGF0aW9uIHNj
aGVtZS4KLSAgICAgICAgICAgIGl0LmRyb3BBc3NlcnRpb25zKCk7Ci0gICAgICAgICAgICByZXR1
cm4gaXQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGludmFsaWQ7CisgICAgYXV0byBp
dCA9IGNoaWxkcmVuT2ZUeXBlPEVsZW1lbnQ+KHJvb3ROb2RlKS5iZWdpbigpOworICAgIHdoaWxl
IChpdCAmJiAhY29sbGVjdGlvbi5lbGVtZW50TWF0Y2hlcygqaXQpKQorICAgICAgICAtLWl0Owor
ICAgIC8vIERyb3AgaXRlcmF0b3IgYXNzZXJ0aW9ucyBiZWNhdXNlIEhUTUxDb2xsZWN0aW9ucyAv
IE5vZGVMaXN0IHVzZSBhIGZpbmUtZ3JhaW5lZCBpbnZhbGlkYXRpb24gc2NoZW1lLgorICAgIGl0
LmRyb3BBc3NlcnRpb25zKCk7CisgICAgcmV0dXJuIGl0OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ29sbGVjdGlvbkNsYXNzPgotaW5saW5lIHZvaWQgQ29sbGVjdGlvblRyYXZlcnNhbDxDb2xs
ZWN0aW9uVHJhdmVyc2FsVHlwZTo6Q2hpbGRyZW5Pbmx5Pjo6dHJhdmVyc2VGb3J3YXJkKGNvbnN0
IENvbGxlY3Rpb25DbGFzcyYgY29sbGVjdGlvbiwgRWxlbWVudENoaWxkSXRlcmF0b3I8RWxlbWVu
dD4mIGN1cnJlbnQsIHVuc2lnbmVkIGNvdW50LCB1bnNpZ25lZCYgdHJhdmVyc2VkQ291bnQpCitp
bmxpbmUgdm9pZCBDb2xsZWN0aW9uVHJhdmVyc2FsPENvbGxlY3Rpb25UcmF2ZXJzYWxUeXBlOjpD
aGlsZHJlbk9ubHk+Ojp0cmF2ZXJzZUZvcndhcmQoY29uc3QgQ29sbGVjdGlvbkNsYXNzJiBjb2xs
ZWN0aW9uLCBJdGVyYXRvciYgY3VycmVudCwgdW5zaWduZWQgY291bnQsIHVuc2lnbmVkJiB0cmF2
ZXJzZWRDb3VudCkKIHsKICAgICBBU1NFUlQoY29sbGVjdGlvbi5lbGVtZW50TWF0Y2hlcygqY3Vy
cmVudCkpOwotICAgIEVsZW1lbnRDaGlsZEl0ZXJhdG9yPEVsZW1lbnQ+IGludmFsaWQoY29sbGVj
dGlvbi5yb290Tm9kZSgpKTsKICAgICBmb3IgKHRyYXZlcnNlZENvdW50ID0gMDsgdHJhdmVyc2Vk
Q291bnQgPCBjb3VudDsgKyt0cmF2ZXJzZWRDb3VudCkgewogICAgICAgICBkbyB7CiAgICAgICAg
ICAgICArK2N1cnJlbnQ7Ci0gICAgICAgICAgICBpZiAoY3VycmVudCA9PSBpbnZhbGlkKQorICAg
ICAgICAgICAgaWYgKCFjdXJyZW50KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fSB3aGlsZSAoIWNvbGxlY3Rpb24uZWxlbWVudE1hdGNoZXMoKmN1cnJlbnQpKTsKICAgICB9CiB9
CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2xsZWN0aW9uQ2xhc3M+Ci1pbmxpbmUgdm9pZCBDb2xs
ZWN0aW9uVHJhdmVyc2FsPENvbGxlY3Rpb25UcmF2ZXJzYWxUeXBlOjpDaGlsZHJlbk9ubHk+Ojp0
cmF2ZXJzZUJhY2t3YXJkKGNvbnN0IENvbGxlY3Rpb25DbGFzcyYgY29sbGVjdGlvbiwgRWxlbWVu
dENoaWxkSXRlcmF0b3I8RWxlbWVudD4mIGN1cnJlbnQsIHVuc2lnbmVkIGNvdW50KQoraW5saW5l
IHZvaWQgQ29sbGVjdGlvblRyYXZlcnNhbDxDb2xsZWN0aW9uVHJhdmVyc2FsVHlwZTo6Q2hpbGRy
ZW5Pbmx5Pjo6dHJhdmVyc2VCYWNrd2FyZChjb25zdCBDb2xsZWN0aW9uQ2xhc3MmIGNvbGxlY3Rp
b24sIEl0ZXJhdG9yJiBjdXJyZW50LCB1bnNpZ25lZCBjb3VudCkKIHsKICAgICBBU1NFUlQoY29s
bGVjdGlvbi5lbGVtZW50TWF0Y2hlcygqY3VycmVudCkpOwotICAgIEVsZW1lbnRDaGlsZEl0ZXJh
dG9yPEVsZW1lbnQ+IGludmFsaWQoY29sbGVjdGlvbi5yb290Tm9kZSgpKTsKICAgICBmb3IgKDsg
Y291bnQ7IC0tY291bnQpIHsKICAgICAgICAgZG8gewogICAgICAgICAgICAgLS1jdXJyZW50Owot
ICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gaW52YWxpZCkKKyAgICAgICAgICAgIGlmICghY3Vy
cmVudCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gd2hpbGUgKCFjb2xsZWN0
aW9uLmVsZW1lbnRNYXRjaGVzKCpjdXJyZW50KSk7CiAgICAgfQpAQCAtMTkzLDcgKzE2Nyw3IEBA
IHRlbXBsYXRlIDw+CiBzdHJ1Y3QgQ29sbGVjdGlvblRyYXZlcnNhbDxDb2xsZWN0aW9uVHJhdmVy
c2FsVHlwZTo6Q3VzdG9tRm9yd2FyZE9ubHk+IHsKICAgICB1c2luZyBJdGVyYXRvciA9IEVsZW1l
bnQqOwogCi0gICAgc3RhdGljIEVsZW1lbnQqIGVuZChDb250YWluZXJOb2RlJikgeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgRWxlbWVudCogZW5kKENvbnRhaW5lck5v
ZGUmKSB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29sbGVj
dGlvbkNsYXNzPgogICAgIHN0YXRpYyBFbGVtZW50KiBiZWdpbihjb25zdCBDb2xsZWN0aW9uQ2xh
c3MmLCBDb250YWluZXJOb2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29udHJvbHNDb2xsZWN0aW9uLmgKaW5kZXggNzc0ZTU0ZjU2NWNhMDE0OWQ0YmM2MTg5ZTZkZjNl
NjBkMDc5M2IzMS4uOTAyNzMwZWY1MzY2ZjU5MWM0OGI2ZTU5MzAzMWNjMTZjNzk3ZGY5OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaApA
QCAtNjMsNyArNjMsNyBAQCBwcml2YXRlOgogCiBpbmxpbmUgSFRNTEVsZW1lbnQqIEhUTUxGb3Jt
Q29udHJvbHNDb2xsZWN0aW9uOjppdGVtKHVuc2lnbmVkIG9mZnNldCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KENhY2hlZEhUTUxDb2xsZWN0aW9uPEhUTUxGb3Jt
Q29udHJvbHNDb2xsZWN0aW9uLCBDb2xsZWN0aW9uVHlwZVRyYWl0czxGb3JtQ29udHJvbHM+Ojp0
cmF2ZXJzYWxUeXBlPjo6aXRlbShvZmZzZXQpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEVs
ZW1lbnQ+KENhY2hlZEhUTUxDb2xsZWN0aW9uOjppdGVtKG9mZnNldCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKaW5k
ZXggZTdlNDE0Yzg3ZGMyNDg4YzU4NjZlMzVmMmJlZmQzNzFiZWM5YjE2MC4uMmQwOTNlZmMwNzli
ODJlZTE3ZmNmNGRkMGM5ZmFiM2Y5NzNiYzc2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcApAQCAtNTA5LDE0ICs1MDksMTMgQEAgdW5zaWduZWQgSFRNTEZvcm1FbGVt
ZW50Ojpmb3JtRWxlbWVudEluZGV4KEZvcm1Bc3NvY2lhdGVkRWxlbWVudCogYXNzb2NpYXRlZEVs
ZW0KICAgICBpZiAoIWFzc29jaWF0ZWRIVE1MRWxlbWVudC5pc0Rlc2NlbmRhbnRPZigqdGhpcykp
CiAgICAgICAgIHJldHVybiBjdXJyZW50QXNzb2NpYXRlZEVsZW1lbnRzQWZ0ZXJJbmRleDsKIAor
ICAgIGF1dG8gZGVzY2VuZGFudHMgPSBkZXNjZW5kYW50c09mVHlwZTxIVE1MRWxlbWVudD4oKnRo
aXMpOworCiAgICAgLy8gQ2hlY2sgZm9yIHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhpcyBlbGVt
ZW50IGlzIHRoZSB2ZXJ5IGxhc3QgdGhpbmcgaW4KICAgICAvLyB0aGUgZm9ybSdzIHRyZWUgb2Yg
Y2hpbGRyZW47IHdlIGRvbid0IHdhbnQgdG8gd2FsayB0aGUgZW50aXJlIHRyZWUgaW4gdGhhdAog
ICAgIC8vIGNvbW1vbiBjYXNlIHRoYXQgb2NjdXJzIGR1cmluZyBwYXJzaW5nOyBpbnN0ZWFkIHdl
J2xsIGp1c3QgcmV0dXJuIGEgdmFsdWUKICAgICAvLyB0aGF0IHNheXMgImFkZCB0aGlzIGZvcm0g
ZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoZSBhcnJheSIuCi0gICAgYXV0byBkZXNjZW5kYW50cyA9
IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxFbGVtZW50PigqdGhpcyk7Ci0gICAgYXV0byBpdCA9IGRl
c2NlbmRhbnRzLmJlZ2luQXQoYXNzb2NpYXRlZEhUTUxFbGVtZW50KTsKLSAgICBhdXRvIGVuZCA9
IGRlc2NlbmRhbnRzLmVuZCgpOwotICAgIGlmICgrK2l0ID09IGVuZCkKKyAgICBpZiAoISsrZGVz
Y2VuZGFudHMuYmVnaW5BdChhc3NvY2lhdGVkSFRNTEVsZW1lbnQpKQogICAgICAgICByZXR1cm4g
Y3VycmVudEFzc29jaWF0ZWRFbGVtZW50c0FmdGVySW5kZXg7CiAKICAgICB1bnNpZ25lZCBpID0g
bV9hc3NvY2lhdGVkRWxlbWVudHNCZWZvcmVJbmRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCmluZGV4IDllN2E5NjQ4NDQ0OTkwZTcxYjQzZDZmNzQ0NzcxM2QzMmZk
MGIyMDMuLjNmNzU3ODRiMzFlOWUzZTdmN2Y5NTRlODk3YzZiZjkyZjA2NjE2OWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtNDY1Myw3ICs0NjUzLDcgQEAg
VVJMIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE5leHRTb3VyY2VDaGlsZChDb250ZW50VHlwZSog
Y29udGVudFR5cGUsIFN0cmluZyoga2UKICAgICAvLyBlYWNoIHN0aWxsIGlzIGEgY2hpbGQgb2Yg
dGhpcyBtZWRpYSBlbGVtZW50IGJlZm9yZSB1c2luZy4KICAgICBWZWN0b3I8UmVmPEhUTUxTb3Vy
Y2VFbGVtZW50Pj4gcG90ZW50aWFsU291cmNlTm9kZXM7CiAgICAgYXV0byBzb3VyY2VzID0gY2hp
bGRyZW5PZlR5cGU8SFRNTFNvdXJjZUVsZW1lbnQ+KCp0aGlzKTsKLSAgICBmb3IgKGF1dG8gbmV4
dCA9IG1fbmV4dENoaWxkTm9kZVRvQ29uc2lkZXIgPyBzb3VyY2VzLmJlZ2luQXQoKm1fbmV4dENo
aWxkTm9kZVRvQ29uc2lkZXIpIDogc291cmNlcy5iZWdpbigpLCBlbmQgPSBzb3VyY2VzLmVuZCgp
OyBuZXh0ICE9IGVuZDsgKytuZXh0KQorICAgIGZvciAoYXV0byBuZXh0ID0gbV9uZXh0Q2hpbGRO
b2RlVG9Db25zaWRlciA/IHNvdXJjZXMuYmVnaW5BdCgqbV9uZXh0Q2hpbGROb2RlVG9Db25zaWRl
cikgOiBzb3VyY2VzLmJlZ2luKCk7IG5leHQ7ICsrbmV4dCkKICAgICAgICAgcG90ZW50aWFsU291
cmNlTm9kZXMuYXBwZW5kKCpuZXh0KTsKIAogICAgIGZvciAoYXV0byYgc291cmNlIDogcG90ZW50
aWFsU291cmNlTm9kZXMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0
aW9uRWxlbWVudC5jcHAKaW5kZXggZTUxNmE4MTg0ZDFmMGY4MzczY2QyMWE0YTdhNDA5M2NmOWJj
ZjJmMS4uNDk5OWMxNThlNmJhZjk4ODJiYTVlMDVkMjZmM2RkYTM0MThiYzNkYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAKQEAgLTI2LDcg
KzI2LDYgQEAKICNpbmNsdWRlICJIVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oIgogCiAjaW5jbHVk
ZSAiR2VuZXJpY0NhY2hlZEhUTUxDb2xsZWN0aW9uLmgiCi0jaW5jbHVkZSAiSFRNTENvbGxlY3Rp
b24uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MVGFibGVSb3dFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVudC5oIgpAQCAtOTUsNyArOTQsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6ZGVsZXRlUm93KGludCBp
bmRleCkKIGludCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6bnVtUm93cygpIGNvbnN0CiB7CiAg
ICAgYXV0byByb3dzID0gY2hpbGRyZW5PZlR5cGU8SFRNTFRhYmxlUm93RWxlbWVudD4oKnRoaXMp
OwotICAgIHJldHVybiBzdGQ6OmRpc3RhbmNlKHJvd3MuYmVnaW4oKSwgcm93cy5lbmQoKSk7Cisg
ICAgcmV0dXJuIHN0ZDo6ZGlzdGFuY2Uocm93cy5iZWdpbigpLCB7IH0pOwogfQogCiBSZWY8SFRN
TENvbGxlY3Rpb24+IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Ojpyb3dzKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9kZUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAKaW5kZXggZDQxMDE3ODZmYjAwNWYyNjg3YjE5MGFmMzcz
MWJjZDU1N2QyMGUwYS4uOTE5YTI4ZWQ2MDkzZmRiZWIxMWQyOTE2MDQ2NDI4MTZmMWVlMTFkMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5jcHAKQEAgLTIsNyArMiw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNywgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDkgKzI0LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJMYWJlbHNOb2RlTGlzdC5oIgogCi0jaW5jbHVkZSAiRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxMYWJlbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNs
dWRlICJMYWJlbGFibGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjaW5j
bHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtMzYsMTEgKzM2LDE2IEBAIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChMYWJl
bHNOb2RlTGlzdCk7CiAKLUxhYmVsc05vZGVMaXN0OjpMYWJlbHNOb2RlTGlzdChMYWJlbGFibGVF
bGVtZW50JiBmb3JOb2RlKQotICAgIDogQ2FjaGVkTGl2ZU5vZGVMaXN0KGZvck5vZGUsIEludmFs
aWRhdGVPbkZvclR5cGVBdHRyQ2hhbmdlKQorTGFiZWxzTm9kZUxpc3Q6OkxhYmVsc05vZGVMaXN0
KExhYmVsYWJsZUVsZW1lbnQmIGVsZW1lbnQpCisgICAgOiBDYWNoZWRMaXZlTm9kZUxpc3QoZWxl
bWVudCwgSW52YWxpZGF0ZU9uRm9yVHlwZUF0dHJDaGFuZ2UpCiB7CiB9CiAKK1JlZjxMYWJlbHNO
b2RlTGlzdD4gTGFiZWxzTm9kZUxpc3Q6OmNyZWF0ZShMYWJlbGFibGVFbGVtZW50JiBlbGVtZW50
LCBjb25zdCBBdG9tU3RyaW5nJikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBMYWJlbHNO
b2RlTGlzdChlbGVtZW50KSk7Cit9CisKIExhYmVsc05vZGVMaXN0Ojp+TGFiZWxzTm9kZUxpc3Qo
KQogewogICAgIG93bmVyTm9kZSgpLm5vZGVMaXN0cygpLT5yZW1vdmVDYWNoZVdpdGhBdG9tTmFt
ZSgqdGhpcywgc3RhckF0b20oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0xh
YmVsc05vZGVMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0xhYmVsc05vZGVMaXN0LmgKaW5k
ZXggZjUzOWQ3OWIwY2FhMDUwMDMwNDg4OGRjNDYxNzcyYWY3ZGIxNjI4Mi4uODBkOTc3ZmFjZDc2
MmRhYThmMzA4YWYwZGIzYjY1MGVhY2M3M2U4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9MYWJlbHNOb2RlTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvTGFiZWxzTm9k
ZUxpc3QuaApAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVl
bGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3LCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjQsMjUgKzI0LDIzIEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiTGFiZWxhYmxlRWxlbWVudC5oIgogI2luY2x1
ZGUgIkxpdmVOb2RlTGlzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIExhYmVs
YWJsZUVsZW1lbnQ7CisKIGNsYXNzIExhYmVsc05vZGVMaXN0IGZpbmFsIDogcHVibGljIENhY2hl
ZExpdmVOb2RlTGlzdDxMYWJlbHNOb2RlTGlzdD4gewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FU
RUQoTGFiZWxzTm9kZUxpc3QpOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8TGFiZWxzTm9kZUxp
c3Q+IGNyZWF0ZShMYWJlbGFibGVFbGVtZW50JiBmb3JOb2RlLCBjb25zdCBBdG9tU3RyaW5nJikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IExhYmVsc05vZGVMaXN0KGZvck5v
ZGUpKTsKLSAgICB9Ci0gICAgfkxhYmVsc05vZGVMaXN0KCk7CisgICAgc3RhdGljIFJlZjxMYWJl
bHNOb2RlTGlzdD4gY3JlYXRlKExhYmVsYWJsZUVsZW1lbnQmLCBjb25zdCBBdG9tU3RyaW5nJik7
CisgICAgdmlydHVhbCB+TGFiZWxzTm9kZUxpc3QoKTsKIAotICAgIGJvb2wgZWxlbWVudE1hdGNo
ZXMoRWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNSb290ZWRBdERvY3VtZW50
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgZWxlbWVudE1hdGNo
ZXMoRWxlbWVudCYpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNSb290ZWRBdERvY3VtZW50KCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IExh
YmVsc05vZGVMaXN0KExhYmVsYWJsZUVsZW1lbnQmIGZvck5vZGUpOworICAgIGV4cGxpY2l0IExh
YmVsc05vZGVMaXN0KExhYmVsYWJsZUVsZW1lbnQmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuY3BwCmluZGV4IDk0NzBlYTI5YWI1
Nzc0ODgwYzYzYjNiZjQ3NGVkODliZmY3YmIzNDYuLmRkMmM4MWU0NGIzY2FmMTljYzJjYmVjNGI0
NjY3MzU4ZmNhMmM1OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2Rl
TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmNwcApAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTIgTW90b3JvbGEgTW9iaWxpdHks
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNs
dWRlICJIVE1MT2JqZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgogI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC00MywxNiArNDIsMjEgQEAgV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJhZGlvTm9kZUxpc3QpOwogUmFkaW9Ob2RlTGlzdDo6UmFk
aW9Ob2RlTGlzdChDb250YWluZXJOb2RlJiByb290Tm9kZSwgY29uc3QgQXRvbVN0cmluZyYgbmFt
ZSkKICAgICA6IENhY2hlZExpdmVOb2RlTGlzdChyb290Tm9kZSwgSW52YWxpZGF0ZUZvckZvcm1D
b250cm9scykKICAgICAsIG1fbmFtZShuYW1lKQotICAgICwgbV9pc1Jvb3RlZEF0RG9jdW1lbnQo
aXM8SFRNTEZvcm1FbGVtZW50Pihvd25lck5vZGUoKSkpCisgICAgLCBtX2lzUm9vdGVkQXREb2N1
bWVudChpczxIVE1MRm9ybUVsZW1lbnQ+KHJvb3ROb2RlKSkKIHsKIH0KIAorUmVmPFJhZGlvTm9k
ZUxpc3Q+IFJhZGlvTm9kZUxpc3Q6OmNyZWF0ZShDb250YWluZXJOb2RlJiByb290Tm9kZSwgY29u
c3QgQXRvbVN0cmluZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSYWRpb05v
ZGVMaXN0KHJvb3ROb2RlLCBuYW1lKSk7Cit9CisKIFJhZGlvTm9kZUxpc3Q6On5SYWRpb05vZGVM
aXN0KCkKIHsKICAgICBvd25lck5vZGUoKS5ub2RlTGlzdHMoKS0+cmVtb3ZlQ2FjaGVXaXRoQXRv
bU5hbWUoKnRoaXMsIG1fbmFtZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgUmVmUHRyPEhUTUxJbnB1
dEVsZW1lbnQ+IHRvUmFkaW9CdXR0b25JbnB1dEVsZW1lbnQoSFRNTEVsZW1lbnQmIGVsZW1lbnQp
CitzdGF0aWMgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IG5vbkVtcHR5UmFkaW9CdXR0b24oRWxl
bWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoIWlzPEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTY3LDEwICs3MSwxMCBAQCBTdHJpbmcgUmFk
aW9Ob2RlTGlzdDo6dmFsdWUoKSBjb25zdAogewogICAgIGF1dG8gbGVuZ3RoID0gdGhpcy0+bGVu
Z3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIGF1dG8gaW5wdXRFbGVtZW50ID0gdG9SYWRpb0J1dHRvbklucHV0RWxlbWVudCgqaXRlbShp
KSk7Ci0gICAgICAgIGlmICghaW5wdXRFbGVtZW50IHx8ICFpbnB1dEVsZW1lbnQtPmNoZWNrZWQo
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT52
YWx1ZSgpOworICAgICAgICBpZiAoYXV0byBidXR0b24gPSBub25FbXB0eVJhZGlvQnV0dG9uKCpp
dGVtKGkpKSkgeworICAgICAgICAgICAgaWYgKGJ1dHRvbi0+Y2hlY2tlZCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBidXR0b24tPnZhbHVlKCk7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0
dXJuIFN0cmluZygpOwogfQpAQCAtNzksNDAgKzgzLDM0IEBAIHZvaWQgUmFkaW9Ob2RlTGlzdDo6
c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBhdXRvIGxlbmd0aCA9IHRoaXMt
Pmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewot
ICAgICAgICBhdXRvIGlucHV0RWxlbWVudCA9IHRvUmFkaW9CdXR0b25JbnB1dEVsZW1lbnQoKml0
ZW0oaSkpOwotICAgICAgICBpZiAoIWlucHV0RWxlbWVudCB8fCBpbnB1dEVsZW1lbnQtPnZhbHVl
KCkgIT0gdmFsdWUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaW5wdXRFbGVtZW50
LT5zZXRDaGVja2VkKHRydWUpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChhdXRvIGJ1
dHRvbiA9IG5vbkVtcHR5UmFkaW9CdXR0b24oKml0ZW0oaSkpKSB7CisgICAgICAgICAgICBpZiAo
YnV0dG9uLT52YWx1ZSgpID09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgYnV0dG9uLT5zZXRD
aGVja2VkKHRydWUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQogICAgIH0KIH0KIAotYm9vbCBSYWRpb05vZGVMaXN0OjpjaGVja0VsZW1lbnRNYXRj
aGVzUmFkaW9Ob2RlTGlzdEZpbHRlcihjb25zdCBFbGVtZW50JiB0ZXN0RWxlbWVudCkgY29uc3QK
K2Jvb2wgUmFkaW9Ob2RlTGlzdDo6ZWxlbWVudE1hdGNoZXMoRWxlbWVudCYgZWxlbWVudCkgY29u
c3QKIHsKLSAgICBBU1NFUlQoaXM8SFRNTE9iamVjdEVsZW1lbnQ+KHRlc3RFbGVtZW50KSB8fCBp
czxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pih0ZXN0RWxlbWVudCkpOworICAgIGlmICghaXM8SFRN
TE9iamVjdEVsZW1lbnQ+KGVsZW1lbnQpICYmICFpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pihl
bGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KGVsZW1lbnQpICYmIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KGVsZW1lbnQpLmlz
SW1hZ2VCdXR0b24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKGlzPEhUTUxG
b3JtRWxlbWVudD4ob3duZXJOb2RlKCkpKSB7Ci0gICAgICAgIFJlZlB0cjxIVE1MRm9ybUVsZW1l
bnQ+IGZvcm1FbGVtZW50OwotICAgICAgICBpZiAodGVzdEVsZW1lbnQuaGFzVGFnTmFtZShvYmpl
Y3RUYWcpKQotICAgICAgICAgICAgZm9ybUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MT2JqZWN0RWxl
bWVudD4odGVzdEVsZW1lbnQpLmZvcm0oKTsKKyAgICAgICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVu
dD4gZm9ybTsKKyAgICAgICAgaWYgKGlzPEhUTUxPYmplY3RFbGVtZW50PihlbGVtZW50KSkKKyAg
ICAgICAgICAgIGZvcm0gPSBkb3duY2FzdDxIVE1MT2JqZWN0RWxlbWVudD4oZWxlbWVudCkuZm9y
bSgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb3JtRWxlbWVudCA9IGRvd25jYXN0PEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ+KHRlc3RFbGVtZW50KS5mb3JtKCk7Ci0gICAgICAgIGlmICgh
Zm9ybUVsZW1lbnQgfHwgZm9ybUVsZW1lbnQgIT0gJm93bmVyTm9kZSgpKQorICAgICAgICAgICAg
Zm9ybSA9IGRvd25jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KGVsZW1lbnQpLmZvcm0oKTsK
KyAgICAgICAgaWYgKCFmb3JtIHx8IGZvcm0gIT0gJm93bmVyTm9kZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiB0ZXN0RWxlbWVudC5nZXRJZEF0dHJp
YnV0ZSgpID09IG1fbmFtZSB8fCB0ZXN0RWxlbWVudC5nZXROYW1lQXR0cmlidXRlKCkgPT0gbV9u
YW1lOworICAgIHJldHVybiBlbGVtZW50LmdldElkQXR0cmlidXRlKCkgPT0gbV9uYW1lIHx8IGVs
ZW1lbnQuZ2V0TmFtZUF0dHJpYnV0ZSgpID09IG1fbmFtZTsKIH0KIAotYm9vbCBSYWRpb05vZGVM
aXN0OjplbGVtZW50TWF0Y2hlcyhFbGVtZW50JiB0ZXN0RWxlbWVudCkgY29uc3QKLXsKLSAgICBp
ZiAoIWlzPEhUTUxPYmplY3RFbGVtZW50Pih0ZXN0RWxlbWVudCkgJiYgIWlzPEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ+KHRlc3RFbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KHRlc3RFbGVtZW50KSAmJiBkb3duY2FzdDxIVE1MSW5w
dXRFbGVtZW50Pih0ZXN0RWxlbWVudCkuaXNJbWFnZUJ1dHRvbigpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gY2hlY2tFbGVtZW50TWF0Y2hlc1JhZGlvTm9kZUxpc3RGaWx0
ZXIodGVzdEVsZW1lbnQpOwotfQotCi19IC8vIG5hbXNwYWNlCi0KK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmgKaW5kZXggYTMwMjc2MzMwYzdmZGI2
Y2NmNjJiMjE4ZTdiMTcyZDAyM2Q4YTZhMy4uNjQ0NzdjODEyNThmYjFiNzE3ZjNkZDYyZjliNWQ4
M2JhYWU4ZjNkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb05vZGVMaXN0LmgKQEAgLTEsNiArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDEyIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
Niw0MSArMjYsMjYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJIVE1MRWxlbWVudC5o
IgogI2luY2x1ZGUgIkxpdmVOb2RlTGlzdC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSYWRpb05vZGVMaXN0IGZpbmFs
IDogcHVibGljIENhY2hlZExpdmVOb2RlTGlzdDxSYWRpb05vZGVMaXN0PiB7CiAgICAgV1RGX01B
S0VfSVNPX0FMTE9DQVRFRChSYWRpb05vZGVMaXN0KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVm
PFJhZGlvTm9kZUxpc3Q+IGNyZWF0ZShDb250YWluZXJOb2RlJiByb290Tm9kZSwgY29uc3QgQXRv
bVN0cmluZyYgbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJhZGlv
Tm9kZUxpc3Qocm9vdE5vZGUsIG5hbWUpKTsKLSAgICB9Ci0KKyAgICBzdGF0aWMgUmVmPFJhZGlv
Tm9kZUxpc3Q+IGNyZWF0ZShDb250YWluZXJOb2RlJiByb290Tm9kZSwgY29uc3QgQXRvbVN0cmlu
ZyYgbmFtZSk7CiAgICAgdmlydHVhbCB+UmFkaW9Ob2RlTGlzdCgpOwogCi0gICAgSFRNTEVsZW1l
bnQqIGl0ZW0odW5zaWduZWQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKLQogICAgIFN0cmluZyB2
YWx1ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBi
b29sIGVsZW1lbnRNYXRjaGVzKEVsZW1lbnQmKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlz
Um9vdGVkQXREb2N1bWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faXNSb290ZWRBdERv
Y3VtZW50OyB9CisgICAgYm9vbCBlbGVtZW50TWF0Y2hlcyhFbGVtZW50JikgY29uc3QgZmluYWw7
CiAKIHByaXZhdGU6CiAgICAgUmFkaW9Ob2RlTGlzdChDb250YWluZXJOb2RlJiwgY29uc3QgQXRv
bVN0cmluZyYgbmFtZSk7Ci0gICAgYm9vbCBjaGVja0VsZW1lbnRNYXRjaGVzUmFkaW9Ob2RlTGlz
dEZpbHRlcihjb25zdCBFbGVtZW50JikgY29uc3Q7CisgICAgYm9vbCBpc1Jvb3RlZEF0RG9jdW1l
bnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lzUm9vdGVkQXREb2N1bWVudDsgfQogCiAgICAg
QXRvbVN0cmluZyBtX25hbWU7CiAgICAgYm9vbCBtX2lzUm9vdGVkQXREb2N1bWVudDsKIH07CiAK
LWlubGluZSBIVE1MRWxlbWVudCogUmFkaW9Ob2RlTGlzdDo6aXRlbSh1bnNpZ25lZCBvZmZzZXQp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvd25jYXN0PEhUTUxFbGVtZW50PihDYWNoZWRMaXZlTm9k
ZUxpc3Q8UmFkaW9Ob2RlTGlzdD46Oml0ZW0ob2Zmc2V0KSk7Ci19Ci0KLX0gLy8gbmFtZXBzYWNl
IFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlSW52YWxpZGF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVJbnZhbGlkYXRvci5jcHAKaW5kZXggNWU5OWZiYmQyZmUwMzg0Yjc5MGMwMDMwYzE1NmFmNmNm
NTc4NDM4Mi4uNmJlZjQ0OGUzYjE0NmQ1MzljMTk3MTE3MWMzOTZmZTdlOGRiOWM3NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVJbnZhbGlkYXRvci5jcHAKQEAgLTE3NSw4ICsxNzUsNyBA
QCB2b2lkIEludmFsaWRhdG9yOjppbnZhbGlkYXRlU3R5bGVGb3JEZXNjZW5kYW50cyhFbGVtZW50
JiByb290LCBTZWxlY3RvckZpbHRlciogZgogewogICAgIFZlY3RvcjxFbGVtZW50KiwgMjA+IHBh
cmVudFN0YWNrOwogICAgIEVsZW1lbnQqIHByZXZpb3VzRWxlbWVudCA9ICZyb290OwotICAgIGF1
dG8gZGVzY2VuZGFudHMgPSBkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50Pihyb290KTsKLSAgICBm
b3IgKGF1dG8gaXQgPSBkZXNjZW5kYW50cy5iZWdpbigpLCBlbmQgPSBkZXNjZW5kYW50cy5lbmQo
KTsgaXQgIT0gZW5kOykgeworICAgIGZvciAoYXV0byBpdCA9IGRlc2NlbmRhbnRzT2ZUeXBlPEVs
ZW1lbnQ+KHJvb3QpLmJlZ2luKCk7IGl0OyApIHsKICAgICAgICAgYXV0byYgZGVzY2VuZGFudCA9
ICppdDsKICAgICAgICAgYXV0byogcGFyZW50ID0gZGVzY2VuZGFudC5wYXJlbnRFbGVtZW50KCk7
CiAgICAgICAgIGlmIChwYXJlbnRTdGFjay5pc0VtcHR5KCkgfHwgcGFyZW50U3RhY2subGFzdCgp
ICE9IHBhcmVudCkgewpAQCAtMjc1LDEyICsyNzQsMTAgQEAgdm9pZCBJbnZhbGlkYXRvcjo6aW52
YWxpZGF0ZVN0eWxlV2l0aE1hdGNoRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBNYXRjaEVsZW1l
bnQKICAgICAgICAgZm9yIChhdXRvKiBzaWJsaW5nID0gZWxlbWVudC5uZXh0RWxlbWVudFNpYmxp
bmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50U2libGluZygpKQog
ICAgICAgICAgICAgaW52YWxpZGF0ZUlmTmVlZGVkKCpzaWJsaW5nLCBudWxscHRyKTsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBNYXRjaEVsZW1lbnQ6OkFueVNpYmxpbmc6IHsKLSAgICAgICAg
YXV0byBwYXJlbnRDaGlsZHJlbiA9IGNoaWxkcmVuT2ZUeXBlPEVsZW1lbnQ+KCplbGVtZW50LnBh
cmVudE5vZGUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgcGFyZW50Q2hpbGQgOiBwYXJlbnRDaGls
ZHJlbikKKyAgICBjYXNlIE1hdGNoRWxlbWVudDo6QW55U2libGluZzoKKyAgICAgICAgZm9yIChh
dXRvJiBwYXJlbnRDaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPEVsZW1lbnQ+KCplbGVtZW50LnBhcmVu
dE5vZGUoKSkpCiAgICAgICAgICAgICBpbnZhbGlkYXRlSWZOZWVkZWQocGFyZW50Q2hpbGQsIG51
bGxwdHIpOwogICAgICAgICBicmVhazsKLSAgICB9CiAgICAgY2FzZSBNYXRjaEVsZW1lbnQ6OlBh
cmVudFNpYmxpbmc6CiAgICAgICAgIGZvciAoYXV0byogc2libGluZyA9IGVsZW1lbnQubmV4dEVs
ZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNp
YmxpbmcoKSkgewogICAgICAgICAgICAgYXV0byBzaWJsaW5nQ2hpbGRyZW4gPSBjaGlsZHJlbk9m
VHlwZTxFbGVtZW50Pigqc2libGluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVXNlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAK
aW5kZXggMWU3NTUzMzkwZTliNWJkYmE4M2NhMjY4MTZjMTIyZTEzZmMxZWRhNy4uYzY5NzQ1ZDU4
NDcyODRkM2MxNjJkOTc0ODVmMGEwZDdkODcxYTUyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VF
bGVtZW50LmNwcApAQCAtMzMxLDggKzMzMSw3IEBAIHN0YXRpYyB2b2lkIHJlbW92ZURpc2FsbG93
ZWRFbGVtZW50c0Zyb21TdWJ0cmVlKFNWR0VsZW1lbnQmIHN1YnRyZWUpCiAgICAgQVNTRVJUKCFz
dWJ0cmVlLmlzQ29ubmVjdGVkKCkpOwogCiAgICAgVmVjdG9yPEVsZW1lbnQqPiBkaXNhbGxvd2Vk
RWxlbWVudHM7Ci0gICAgYXV0byBkZXNjZW5kYW50cyA9IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1l
bnQ+KHN1YnRyZWUpOwotICAgIGZvciAoYXV0byBpdCA9IGRlc2NlbmRhbnRzLmJlZ2luKCksIGVu
ZCA9IGRlc2NlbmRhbnRzLmVuZCgpOyBpdCAhPSBlbmQ7ICkgeworICAgIGZvciAoYXV0byBpdCA9
IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KHN1YnRyZWUpLmJlZ2luKCk7IGl0OyApIHsKICAg
ICAgICAgaWYgKGlzRGlzYWxsb3dlZEVsZW1lbnQoKml0KSkgewogICAgICAgICAgICAgZGlzYWxs
b3dlZEVsZW1lbnRzLmFwcGVuZCgmKml0KTsKICAgICAgICAgICAgIGl0LnRyYXZlcnNlTmV4dFNr
aXBwaW5nQ2hpbGRyZW4oKTsKQEAgLTQ1Miw5ICs0NTEsOSBAQCBzdGF0aWMgdm9pZCBjbG9uZURh
dGFBbmRDaGlsZHJlbihTVkdFbGVtZW50JiByZXBsYWNlbWVudENsb25lLCBTVkdFbGVtZW50JiBv
cmlnaQogdm9pZCBTVkdVc2VFbGVtZW50OjpleHBhbmRVc2VFbGVtZW50c0luU2hhZG93VHJlZSgp
IGNvbnN0CiB7CiAgICAgYXV0byBkZXNjZW5kYW50cyA9IGRlc2NlbmRhbnRzT2ZUeXBlPFNWR1Vz
ZUVsZW1lbnQ+KCp1c2VyQWdlbnRTaGFkb3dSb290KCkpOwotICAgIGZvciAoYXV0byBpdCA9IGRl
c2NlbmRhbnRzLmJlZ2luKCksIGVuZCA9IGRlc2NlbmRhbnRzLmVuZCgpOyBpdCAhPSBlbmQ7ICkg
eworICAgIGZvciAoYXV0byBpdCA9IGRlc2NlbmRhbnRzLmJlZ2luKCk7IGl0OyApIHsKICAgICAg
ICAgU1ZHVXNlRWxlbWVudCYgb3JpZ2luYWxDbG9uZSA9ICppdDsKLSAgICAgICAgaXQgPSBlbmQ7
IC8vIEVmZmljaWVudGx5IHF1aWV0cyBhc3NlcnRpb25zIGR1ZSB0byB0aGUgb3V0c3RhbmRpbmcg
aXRlcmF0b3IuCisgICAgICAgIGl0LmRyb3BBc3NlcnRpb25zKCk7CiAKICAgICAgICAgYXV0byog
dGFyZ2V0ID0gb3JpZ2luYWxDbG9uZS5maW5kVGFyZ2V0KCk7CiAKQEAgLTQ4NSw5ICs0ODQsOSBA
QCB2b2lkIFNWR1VzZUVsZW1lbnQ6OmV4cGFuZFVzZUVsZW1lbnRzSW5TaGFkb3dUcmVlKCkgY29u
c3QKIHZvaWQgU1ZHVXNlRWxlbWVudDo6ZXhwYW5kU3ltYm9sRWxlbWVudHNJblNoYWRvd1RyZWUo
KSBjb25zdAogewogICAgIGF1dG8gZGVzY2VuZGFudHMgPSBkZXNjZW5kYW50c09mVHlwZTxTVkdT
eW1ib2xFbGVtZW50PigqdXNlckFnZW50U2hhZG93Um9vdCgpKTsKLSAgICBmb3IgKGF1dG8gaXQg
PSBkZXNjZW5kYW50cy5iZWdpbigpLCBlbmQgPSBkZXNjZW5kYW50cy5lbmQoKTsgaXQgIT0gZW5k
OyApIHsKKyAgICBmb3IgKGF1dG8gaXQgPSBkZXNjZW5kYW50cy5iZWdpbigpOyBpdDsgKSB7CiAg
ICAgICAgIFNWR1N5bWJvbEVsZW1lbnQmIG9yaWdpbmFsQ2xvbmUgPSAqaXQ7Ci0gICAgICAgIGl0
ID0gZW5kOyAvLyBFZmZpY2llbnRseSBxdWlldHMgYXNzZXJ0aW9ucyBkdWUgdG8gdGhlIG91dHN0
YW5kaW5nIGl0ZXJhdG9yLgorICAgICAgICBpdC5kcm9wQXNzZXJ0aW9ucygpOwogCiAgICAgICAg
IC8vIFNwZWM6IFRoZSByZWZlcmVuY2VkICdzeW1ib2wnIGFuZCBpdHMgY29udGVudHMgYXJlIGRl
ZXAtY2xvbmVkIGludG8gdGhlIGdlbmVyYXRlZCB0cmVlLAogICAgICAgICAvLyB3aXRoIHRoZSBl
eGNlcHRpb24gdGhhdCB0aGUgJ3N5bWJvbCcgaXMgcmVwbGFjZWQgYnkgYW4gJ3N2ZycuIFRoaXMg
Z2VuZXJhdGVkICdzdmcnIHdpbGwK
</data>

          </attachment>
      

    </bug>

</bugzilla>