<?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>113905</bug_id>
          
          <creation_ts>2013-04-03 15:48:14 -0700</creation_ts>
          <short_desc>fourthTier: put DFG data into a DFG::JITCode, and put common DFG and FTL data into something accessible from both DFG::JITCode and FTL::JITCode</short_desc>
          <delta_ts>2013-04-03 22:54:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>113623</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>868933</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-03 15:48:14 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>868934</commentid>
    <comment_count>1</comment_count>
      <attachid>196419</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-03 15:49:29 -0700</bug_when>
    <thetext>Created attachment 196419
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869020</commentid>
    <comment_count>2</comment_count>
      <attachid>196439</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-03 22:38:40 -0700</bug_when>
    <thetext>Created attachment 196439
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869021</commentid>
    <comment_count>3</comment_count>
      <attachid>196439</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-03 22:48:42 -0700</bug_when>
    <thetext>Comment on attachment 196439
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869022</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-03 22:54:34 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/147609</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196419</attachid>
            <date>2013-04-03 15:49:29 -0700</date>
            <delta_ts>2013-04-03 22:38:40 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19526</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlz
aW9uIDE0NzU4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMjYyLDE0NCArMjYyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIH0KICNlbmRpZgogICAgICAgICAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAg
dm9pZCBjcmVhdGVERkdEYXRhSWZOZWNlc3NhcnkoKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoISFtX2RmZ0RhdGEpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBtX2RmZ0RhdGEgPSBhZG9wdFB0cihuZXcgREZHRGF0YSk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHZvaWQgc2F2ZUNvbXBpbGF0aW9uKFBhc3NSZWZQdHI8UHJvZmls
ZXI6OkNvbXBpbGF0aW9uPiBjb21waWxhdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgY3Jl
YXRlREZHRGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICBtX2RmZ0RhdGEtPmNvbXBpbGF0
aW9uID0gY29tcGlsYXRpb247Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFByb2ZpbGVy
OjpDb21waWxhdGlvbiogY29tcGlsYXRpb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
IW1fZGZnRGF0YSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHJldHVy
biBtX2RmZ0RhdGEtPmNvbXBpbGF0aW9uLmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBERkc6Ok9TUkVudHJ5RGF0YSogYXBwZW5kREZHT1NSRW50cnlEYXRhKHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjcmVhdGVERkdEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgIERGRzo6T1NS
RW50cnlEYXRhIGVudHJ5OwotICAgICAgICAgICAgZW50cnkubV9ieXRlY29kZUluZGV4ID0gYnl0
ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIGVudHJ5Lm1fbWFjaGluZUNvZGVPZmZzZXQgPSBtYWNo
aW5lQ29kZU9mZnNldDsKLSAgICAgICAgICAgIG1fZGZnRGF0YS0+b3NyRW50cnkuYXBwZW5kKGVu
dHJ5KTsKLSAgICAgICAgICAgIHJldHVybiAmbV9kZmdEYXRhLT5vc3JFbnRyeS5sYXN0KCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZERkdPU1JFbnRyaWVzKCkgY29uc3QK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX2RmZ0RhdGEpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gbV9kZmdEYXRhLT5vc3JFbnRyeS5zaXplKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgREZHOjpPU1JFbnRyeURhdGEqIGRmZ09TUkVudHJ5RGF0YSh1
bnNpZ25lZCBpKSB7IHJldHVybiAmbV9kZmdEYXRhLT5vc3JFbnRyeVtpXTsgfQotICAgICAgICBE
Rkc6Ok9TUkVudHJ5RGF0YSogZGZnT1NSRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleCh1bnNpZ25l
ZCBieXRlY29kZUluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fZGZnRGF0YSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHJldHVybiB0cnlCaW5hcnlT
ZWFyY2g8REZHOjpPU1JFbnRyeURhdGEsIHVuc2lnbmVkPigKLSAgICAgICAgICAgICAgICBtX2Rm
Z0RhdGEtPm9zckVudHJ5LCBtX2RmZ0RhdGEtPm9zckVudHJ5LnNpemUoKSwgYnl0ZWNvZGVJbmRl
eCwKLSAgICAgICAgICAgICAgICBERkc6OmdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgpOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBhcHBlbmRPU1JFeGl0KGNvbnN0
IERGRzo6T1NSRXhpdCYgb3NyRXhpdCkKLSAgICAgICAgewotICAgICAgICAgICAgY3JlYXRlREZH
RGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2RmZ0Rh
dGEtPm9zckV4aXQuc2l6ZSgpOwotICAgICAgICAgICAgbV9kZmdEYXRhLT5vc3JFeGl0LmFwcGVu
ZChvc3JFeGl0KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIERGRzo6T1NSRXhpdCYgbGFzdE9TUkV4aXQoKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbV9kZmdEYXRhLT5vc3JFeGl0Lmxhc3QoKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgdW5zaWduZWQgYXBwZW5kU3BlY3VsYXRpb25SZWNvdmVyeShjb25zdCBE
Rkc6OlNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjcmVhdGVERkdEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlc3Vs
dCA9IG1fZGZnRGF0YS0+c3BlY3VsYXRpb25SZWNvdmVyeS5zaXplKCk7Ci0gICAgICAgICAgICBt
X2RmZ0RhdGEtPnNwZWN1bGF0aW9uUmVjb3ZlcnkuYXBwZW5kKHJlY292ZXJ5KTsKLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVk
IGFwcGVuZFdhdGNocG9pbnQoY29uc3QgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCYgd2F0Y2hw
b2ludCkKLSAgICAgICAgewotICAgICAgICAgICAgY3JlYXRlREZHRGF0YUlmTmVjZXNzYXJ5KCk7
Ci0gICAgICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2RmZ0RhdGEtPndhdGNocG9pbnRzLnNp
emUoKTsKLSAgICAgICAgICAgIG1fZGZnRGF0YS0+d2F0Y2hwb2ludHMuYXBwZW5kKHdhdGNocG9p
bnQpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZPU1JFeGl0cygpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmICghbV9kZmdEYXRhKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAg
cmV0dXJuIG1fZGZnRGF0YS0+b3NyRXhpdC5zaXplKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHVuc2lnbmVkIG51bWJlck9mU3BlY3VsYXRpb25SZWNvdmVyaWVzKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKCFtX2RmZ0RhdGEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgICAgICByZXR1cm4gbV9kZmdEYXRhLT5zcGVjdWxhdGlvblJlY292ZXJ5LnNpemUo
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZXYXRjaHBv
aW50cygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV9kZmdEYXRhKQotICAgICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgcmV0dXJuIG1fZGZnRGF0YS0+d2F0Y2hwb2lu
dHMuc2l6ZSgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBERkc6Ok9TUkV4aXQmIG9z
ckV4aXQodW5zaWduZWQgaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2Rm
Z0RhdGEtPm9zckV4aXRbaW5kZXhdOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBERkc6
OlNwZWN1bGF0aW9uUmVjb3ZlcnkmIHNwZWN1bGF0aW9uUmVjb3ZlcnkodW5zaWduZWQgaW5kZXgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2RmZ0RhdGEtPnNwZWN1bGF0aW9uUmVj
b3ZlcnlbaW5kZXhdOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBKdW1wUmVwbGFjZW1l
bnRXYXRjaHBvaW50JiB3YXRjaHBvaW50KHVuc2lnbmVkIGluZGV4KQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbV9kZmdEYXRhLT53YXRjaHBvaW50c1tpbmRleF07Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHZvaWQgYXBwZW5kV2Vha1JlZmVyZW5jZShKU0NlbGwqIHRhcmdl
dCkKLSAgICAgICAgewotICAgICAgICAgICAgY3JlYXRlREZHRGF0YUlmTmVjZXNzYXJ5KCk7Ci0g
ICAgICAgICAgICBtX2RmZ0RhdGEtPndlYWtSZWZlcmVuY2VzLmFwcGVuZChXcml0ZUJhcnJpZXI8
SlNDZWxsPigqZ2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUoKSwgdGFyZ2V0KSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgYXBwZW5kV2Vha1JlZmVyZW5jZVRyYW5zaXRp
b24oSlNDZWxsKiBjb2RlT3JpZ2luLCBKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8pCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGNyZWF0ZURGR0RhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICAgICAg
bV9kZmdEYXRhLT50cmFuc2l0aW9ucy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgV2Vha1JlZmVy
ZW5jZVRyYW5zaXRpb24oKmdsb2JhbERhdGEoKSwgb3duZXJFeGVjdXRhYmxlKCksIGNvZGVPcmln
aW4sIGZyb20sIHRvKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIERGRzo6TWluaWZp
ZWRHcmFwaCYgbWluaWZpZWRERkcoKQotICAgICAgICB7Ci0gICAgICAgICAgICBjcmVhdGVERkdE
YXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgIHJldHVybiBtX2RmZ0RhdGEtPm1pbmlmaWVk
REZHOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBERkc6OlZhcmlhYmxlRXZlbnRTdHJl
YW0mIHZhcmlhYmxlRXZlbnRTdHJlYW0oKQotICAgICAgICB7Ci0gICAgICAgICAgICBjcmVhdGVE
RkdEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgIHJldHVybiBtX2RmZ0RhdGEtPnZhcmlh
YmxlRXZlbnRTdHJlYW07Ci0gICAgICAgIH0KLSNlbmRpZgotCiAgICAgICAgIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uKiByZXR1cm5BZGRyZXNzKQogICAgICAgICB7CiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5BZGRyZXNzID49IGluc3RydWN0aW9ucygpLmJl
Z2luKCkgJiYgcmV0dXJuQWRkcmVzcyA8IGluc3RydWN0aW9ucygpLmVuZCgpKTsKQEAgLTQyNiwx
MCArMjg4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2ppdENvZGUgPSBjb2Rl
OwogICAgICAgICAgICAgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5Q2hl
Y2s7CiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKEpJVENvZGU6OmppdFR5cGVGb3IobV9qaXRDb2RlKSkpIHsKLSAgICAgICAgICAg
ICAgICBjcmVhdGVERkdEYXRhSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAgIGlmIChKSVRDb2Rl
Ojppc09wdGltaXppbmdKSVQoSklUQ29kZTo6aml0VHlwZUZvcihtX2ppdENvZGUpKSkKICAgICAg
ICAgICAgICAgICBtX2dsb2JhbERhdGEtPmhlYXAubV9kZmdDb2RlQmxvY2tzLm1fc2V0LmFkZCh0
aGlzKTsKLSAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICB9CiAgICAgICAgIFBhc3NSZWZQ
dHI8SklUQ29kZT4gZ2V0SklUQ29kZSgpIHsgcmV0dXJuIG1faml0Q29kZTsgfQpAQCAtMTExMywx
MyArOTczLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgLy8gQ29kZUJsb2NrcyBk
b24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbiB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28K
ICAgICAgICAgICAgIC8vIHN0YWxlLiBTbyBpZiBhIGJhc2xpbmUgSklUIENvZGVCbG9jayBnZXRz
IHNjYW5uZWQsIHdlIGNhbiBhc3N1bWUgdGhhdAogICAgICAgICAgICAgLy8gdGhpcyBtZWFucyB0
aGF0IGl0J3MgbGl2ZS4KLSAgICAgICAgICAgIGlmICghbV9kZmdEYXRhKQorICAgICAgICAgICAg
aWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoZ2V0SklUVHlwZSgpKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRm9yIHNpbXBs
aWNpdHksIHdlIGRvbid0IGF0dGVtcHQgdG8gamV0dGlzb24gY29kZSBibG9ja3MgZHVyaW5nIEdD
IGlmCiAgICAgICAgICAgICAvLyB0aGV5IGFyZSBleGVjdXRpbmcuIEluc3RlYWQgd2Ugc3Ryb25n
bHkgbWFyayB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgdG8KICAgICAgICAgICAgIC8vIGFsbG93IHRo
ZW0gdG8gY29udGludWUgdG8gZXhlY3V0ZSBzb3VuZGx5LgotICAgICAgICAgICAgaWYgKG1fZGZn
RGF0YS0+bWF5QmVFeGVjdXRpbmcpCisgICAgICAgICAgICBpZiAobV9qaXRDb2RlLT5kZmdDb21t
b24oKS0+bWF5QmVFeGVjdXRpbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmIChPcHRpb25zOjpmb3JjZURGR0NvZGVCbG9ja0xpdmVu
ZXNzKCkpCkBAIC0xMTc4LDQ3ICsxMDM4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE93
blB0cjxDb21wYWN0SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFwOwogI2VuZGlmCiAjaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgICAgIHN0cnVjdCBXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiB7Ci0gICAg
ICAgICAgICBXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbigpIHsgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IEpTQ2VsbCogb3duZXIsIEpTQ2VsbCogY29kZU9yaWdpbiwgSlNDZWxsKiBmcm9tLCBKU0NlbGwq
IHRvKQotICAgICAgICAgICAgICAgIDogbV9mcm9tKGdsb2JhbERhdGEsIG93bmVyLCBmcm9tKQot
ICAgICAgICAgICAgICAgICwgbV90byhnbG9iYWxEYXRhLCBvd25lciwgdG8pCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKCEhY29kZU9yaWdpbikKLSAgICAgICAgICAgICAgICAg
ICAgbV9jb2RlT3JpZ2luLnNldChnbG9iYWxEYXRhLCBvd25lciwgY29kZU9yaWdpbik7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fY29kZU9yaWdp
bjsKLSAgICAgICAgICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fZnJvbTsKLSAgICAgICAgICAg
IFdyaXRlQmFycmllcjxKU0NlbGw+IG1fdG87Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAg
ICBzdHJ1Y3QgREZHRGF0YSB7Ci0gICAgICAgICAgICBERkdEYXRhKCkKLSAgICAgICAgICAgICAg
ICA6IG1heUJlRXhlY3V0aW5nKGZhbHNlKQotICAgICAgICAgICAgICAgICwgaXNKZXR0aXNvbmVk
KGZhbHNlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+IG9zckVudHJ5OwotICAgICAgICAgICAg
U2VnbWVudGVkVmVjdG9yPERGRzo6T1NSRXhpdCwgOD4gb3NyRXhpdDsKLSAgICAgICAgICAgIFZl
Y3RvcjxERkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk+IHNwZWN1bGF0aW9uUmVjb3Zlcnk7Ci0gICAg
ICAgICAgICBTZWdtZW50ZWRWZWN0b3I8SnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCwgMSwgMD4g
d2F0Y2hwb2ludHM7Ci0gICAgICAgICAgICBWZWN0b3I8V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24+
IHRyYW5zaXRpb25zOwotICAgICAgICAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+ID4g
d2Vha1JlZmVyZW5jZXM7Ci0gICAgICAgICAgICBERkc6OlZhcmlhYmxlRXZlbnRTdHJlYW0gdmFy
aWFibGVFdmVudFN0cmVhbTsKLSAgICAgICAgICAgIERGRzo6TWluaWZpZWRHcmFwaCBtaW5pZmll
ZERGRzsKLSAgICAgICAgICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0
aW9uOwotICAgICAgICAgICAgYm9vbCBtYXlCZUV4ZWN1dGluZzsKLSAgICAgICAgICAgIGJvb2wg
aXNKZXR0aXNvbmVkOwotICAgICAgICAgICAgYm9vbCBsaXZlbmVzc0hhc0JlZW5Qcm92ZWQ7IC8v
IEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgotICAgICAgICAgICAgYm9vbCBhbGxU
cmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkOyAvLyBJbml0aWFsaXplZCBhbmQgdXNlZCBvbiBldmVy
eSBHQy4KLSAgICAgICAgICAgIHVuc2lnbmVkIHZpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZDsg
Ly8gVW5zaWduZWQgdG8gbWFrZSBpdCB3b3JrIHNlYW1sZXNzbHkgd2l0aCB0aGUgYnJvYWRlc3Qg
c2V0IG9mIENBUyBpbXBsZW1lbnRhdGlvbnMuCi0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAg
ICBPd25QdHI8REZHRGF0YT4gbV9kZmdEYXRhOwotICAgICAgICAKICAgICAgICAgLy8gVGhpcyBp
cyByZWxldmFudCB0byBub24tREZHIGNvZGUgYmxvY2tzIHRoYXQgc2VydmUgYXMgdGhlIHByb2Zp
bGVkIGNvZGUgYmxvY2sKICAgICAgICAgLy8gZm9yIERGRyBjb2RlIGJsb2Nrcy4KICAgICAgICAg
REZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwpAQCAtMTQ1NCw3ICsxMjczLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmIChpdGVyID09IG1fc2V0LmVuZCgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgKCppdGVyKS0+bV9kZmdEYXRhLT5tYXlCZUV4
ZWN1dGluZyA9IHRydWU7CisgICAgICAgICgqaXRlciktPm1faml0Q29kZS0+ZGZnQ29tbW9uKCkt
Pm1heUJlRXhlY3V0aW5nID0gdHJ1ZTsKICAgICB9CiAjZW5kaWYKICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERGR0NvbW1vbkRhdGFfaAorI2RlZmluZSBERkdDb21tb25EYXRhX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCisvLyBDb21tb25EYXRhIGhvbGRzIHRoZSBzZXQgb2YgZGF0YSB0aGF0IGJvdGggREZHIGFu
ZCBGVEwgY29kZSBibG9ja3MgbmVlZCB0byBrbm93CisvLyBhYm91dCB0aGVtc2VsdmVzLgorCitz
dHJ1Y3QgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24geworICAgIFdlYWtSZWZlcmVuY2VUcmFuc2l0
aW9uKCkgeyB9CisgICAgCisgICAgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIGNvZGVPcmlnaW4sIEpTQ2VsbCog
ZnJvbSwgSlNDZWxsKiB0bykKKyAgICAgICAgOiBtX2Zyb20oZ2xvYmFsRGF0YSwgb3duZXIsIGZy
b20pCisgICAgICAgICwgbV90byhnbG9iYWxEYXRhLCBvd25lciwgdG8pCisgICAgeworICAgICAg
ICBpZiAoISFjb2RlT3JpZ2luKQorICAgICAgICAgICAgbV9jb2RlT3JpZ2luLnNldChnbG9iYWxE
YXRhLCBvd25lciwgY29kZU9yaWdpbik7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmllcjxK
U0NlbGw+IG1fY29kZU9yaWdpbjsKKyAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2Zyb207Cisg
ICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV90bzsKK307CisgICAgICAgIAorY2xhc3MgQ29tbW9u
RGF0YSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uRGF0YSk7CitwdWJsaWM6Cisg
ICAgQ29tbW9uRGF0YSgpCisgICAgICAgIDogbWF5QmVFeGVjdXRpbmcoZmFsc2UpCisgICAgICAg
ICwgaXNKZXR0aXNvbmVkKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPFdl
YWtSZWZlcmVuY2VUcmFuc2l0aW9uPiB0cmFuc2l0aW9uczsKKyAgICBWZWN0b3I8V3JpdGVCYXJy
aWVyPEpTQ2VsbD4gPiB3ZWFrUmVmZXJlbmNlczsKKyAgICAKKyAgICBSZWZQdHI8UHJvZmlsZXI6
OkNvbXBpbGF0aW9uPiBjb21waWxhdGlvbjsKKyAgICBib29sIG1heUJlRXhlY3V0aW5nOworICAg
IGJvb2wgaXNKZXR0aXNvbmVkOworICAgIGJvb2wgbGl2ZW5lc3NIYXNCZWVuUHJvdmVkOyAvLyBJ
bml0aWFsaXplZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KKyAgICBib29sIGFsbFRyYW5zaXRpb25z
SGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgorICAg
IHVuc2lnbmVkIHZpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZDsgLy8gVW5zaWduZWQgdG8gbWFr
ZSBpdCB3b3JrIHNlYW1sZXNzbHkgd2l0aCB0aGUgYnJvYWRlc3Qgc2V0IG9mIENBUyBpbXBsZW1l
bnRhdGlvbnMuCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0NvbW1vbkRhdGFfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitKSVRDb2RlOjpKSVRDb2RlKEpJVFR5cGUgdHlw
ZSkKKyAgICA6IERpcmVjdEpJVENvZGUodHlwZSkKK3sKK30KKworSlRDb2RlOjp+SklUQ29kZSgp
Cit7Cit9CisKK0NvbW1vbkRhdGEqIEpJVENvZGU6OmRmZ0NvbW1vbigpCit7CisgICAgcmV0dXJu
ICZjb21tb247Cit9CisKK0pJVENvZGUqIEpJVENvZGU6OmRmZygpCit7CisgICAgcmV0dXJuIHRo
aXM7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R0pJVENvZGVfaAorI2RlZmluZSBERkdKSVRDb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5j
bHVkZSAiREZHQ29tbW9uRGF0YS5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgSklUQ29tcGlsZXI7CisKK2NsYXNz
IEpJVENvZGUgOiBwdWJsaWMgRGlyZWN0SklUQ29kZSB7CitwdWJsaWM6CisgICAgSklUQ29kZShK
SVRUeXBlKTsKKyAgICB+SklUQ29kZSgpOworICAgIAorICAgIENvbW1vbkRhdGEqIGRmZ0NvbW1v
bigpOworICAgIEpJVENvZGUqIGRmZygpOworICAgIAorICAgIE9TUkVudHJ5RGF0YSogYXBwZW5k
T1NSRW50cnlEYXRhKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG1hY2hpbmVDb2Rl
T2Zmc2V0KQorICAgIHsKKyAgICAgICAgREZHOjpPU1JFbnRyeURhdGEgZW50cnk7CisgICAgICAg
IGVudHJ5Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgIGVudHJ5Lm1f
bWFjaGluZUNvZGVPZmZzZXQgPSBtYWNoaW5lQ29kZU9mZnNldDsKKyAgICAgICAgb3NyRW50cnku
YXBwZW5kKGVudHJ5KTsKKyAgICAgICAgcmV0dXJuICZvc3JFbnRyeS5sYXN0KCk7CisgICAgfQor
ICAgIAorICAgIE9TUkVudHJ5RGF0YSogb3NyRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleCh1bnNp
Z25lZCBieXRlY29kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJj
aDxPU1JFbnRyeURhdGEsIHVuc2lnbmVkPigKKyAgICAgICAgICAgIG9zckVudHJ5LCBvc3JFbnRy
eS5zaXplKCksIGJ5dGVjb2RlSW5kZXgsCisgICAgICAgICAgICBnZXRPU1JFbnRyeURhdGFCeXRl
Y29kZUluZGV4KTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYXBwZW5kT1NSRXhpdChjb25z
dCBPU1JFeGl0JiBvc3JFeGl0KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gb3Ny
RXhpdC5zaXplKCk7CisgICAgICAgIG9zckV4aXQuYXBwZW5kKG9zckV4aXQpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBPU1JFeGl0JiBsYXN0T1NSRXhpdCgpCisg
ICAgeworICAgICAgICByZXR1cm4gb3NyRXhpdC5sYXN0KCk7CisgICAgfQorICAgIAorICAgIHVu
c2lnbmVkIGFwcGVuZFNwZWN1bGF0aW9uUmVjb3ZlcnkoY29uc3QgU3BlY3VsYXRpb25SZWNvdmVy
eSYgcmVjb3ZlcnkpCisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBzcGVjdWxhdGlv
blJlY292ZXJ5LnNpemUoKTsKKyAgICAgICAgc3BlY3VsYXRpb25SZWNvdmVyeS5hcHBlbmQocmVj
b3ZlcnkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIEpJVENvbXBpbGVyOyAvLyBBbGxvdyBKSVRDb21waWxlciB0byBjYWxs
IHNldENvZGVSZWYoKS4KKworcHVibGljOgorICAgIENvbW1vbkRhdGEgY29tbW9uOworICAgIFZl
Y3RvcjxERkc6Ok9TUkVudHJ5RGF0YT4gb3NyRW50cnk7CisgICAgU2VnbWVudGVkVmVjdG9yPERG
Rzo6T1NSRXhpdCwgOD4gb3NyRXhpdDsKKyAgICBWZWN0b3I8REZHOjpTcGVjdWxhdGlvblJlY292
ZXJ5PiBzcGVjdWxhdGlvblJlY292ZXJ5OworICAgIFNlZ21lbnRlZFZlY3RvcjxKdW1wUmVwbGFj
ZW1lbnRXYXRjaHBvaW50LCAxLCAwPiB3YXRjaHBvaW50czsKKyAgICBERkc6OlZhcmlhYmxlRXZl
bnRTdHJlYW0gdmFyaWFibGVFdmVudFN0cmVhbTsKKyAgICBERkc6Ok1pbmlmaWVkR3JhcGggbWlu
aWZpZWRERkc7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0pJVENvZGVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHJldmlzaW9uIDE0NzU4NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDExICs0
NiwzNCBAQCBKU1ZhbHVlIEpJVENvZGU6OmV4ZWN1dGUoSlNTdGFjayogc3RhY2ssCiAgICAgcmV0
dXJuIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiA/IGpzTnVsbCgpIDogcmVzdWx0OwogfQogCitERkc6
OkNvbW1vbkRhdGEqIEpJVENvZGU6OmRmZ0NvbW1vbigpCit7CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworREZHOjpKSVRDb2RlKiBKSVRDb2Rl
OjpkZmcoKQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK0ZUTDo6SklUQ29kZSogSklUQ29kZTo6ZnRsKCkKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCiBQYXNzUmVmUHRyPEpJVENv
ZGU+IEpJVENvZGU6Omhvc3RGdW5jdGlvbihKSVRDb2RlOjpDb2RlUmVmIGNvZGUpCiB7CiAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKGNvZGUsIEhvc3RDYWxsVGh1bmspKTsK
IH0KIAorRGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZShKSVRUeXBlIGppdFR5cGUpCisgICAg
OiBKSVRDb2RlKGppdFR5cGUpCit7Cit9CisKIERpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUo
Y29uc3QgSklUQ29kZTo6Q29kZVJlZiByZWYsIEpJVFR5cGUgaml0VHlwZSkKICAgICA6IEpJVENv
ZGUoaml0VHlwZSkKICAgICAsIG1fcmVmKHJlZikKQEAgLTYxLDYgKzg0LDExIEBAIERpcmVjdEpJ
VENvZGU6On5EaXJlY3RKSVRDb2RlKCkKIHsKIH0KIAordm9pZCBEaXJlY3RKSVRDb2RlOjpzZXRD
b2RlUmVmKGNvbnN0IEpJVENvZGU6OkNvZGVSZWYgcmVmKQoreworICAgIG1fcmVmID0gcmVmOwor
fQorCiBKSVRDb2RlOjpDb2RlUHRyIERpcmVjdEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKCkKIHsK
ICAgICByZXR1cm4gbV9yZWYuY29kZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmgJKHJldmlzaW9uIDE0NzU4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywxNCBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAorbmFtZXNwYWNlIERGRyB7CitjbGFzcyBDb21tb25EYXRhOworY2xhc3MgSklUQ29kZTsK
K30KK25hbWVzcGFjZSBGVEwgeworY2xhc3MgSklUQ29kZTsKK30KKwogI2lmIEVOQUJMRShKSVQp
CiBjbGFzcyBKU0dsb2JhbERhdGE7CiBjbGFzcyBKU1N0YWNrOwpAQCAtMTQwLDYgKzE0OCwxMCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkKiBkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBv
ZmZzZXQpID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIG9mZnNldE9mKHZvaWQqIHBvaW50ZXJJ
bnRvQ29kZSkgPSAwOwogICAgIAorICAgIHZpcnR1YWwgREZHOjpDb21tb25EYXRhKiBkZmdDb21t
b24oKTsKKyAgICB2aXJ0dWFsIERGRzo6SklUQ29kZSogZGZnKCk7CisgICAgdmlydHVhbCBGVEw6
OkpJVENvZGUqIGZ0bCgpOworICAgIAogICAgIEpTVmFsdWUgZXhlY3V0ZShKU1N0YWNrKiwgQ2Fs
bEZyYW1lKiwgSlNHbG9iYWxEYXRhKik7CiAgICAgCiAgICAgdm9pZCogc3RhcnQoKSB7IHJldHVy
biBkYXRhQWRkcmVzc0F0T2Zmc2V0KDApOyB9CkBAIC0xNTYsNiArMTY4LDcgQEAgcHJpdmF0ZToK
IAogY2xhc3MgRGlyZWN0SklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlIHsKIHB1YmxpYzoKKyAgICBE
aXJlY3RKSVRDb2RlKEpJVFR5cGUpOwogICAgIERpcmVjdEpJVENvZGUoY29uc3QgQ29kZVJlZiwg
SklUVHlwZSk7CiAgICAgfkRpcmVjdEpJVENvZGUoKTsKICAgICAKQEAgLTE2Niw2ICsxNzksOSBA
QCBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKTsKICAgICBib29sIGNvbnRhaW5zKHZvaWQqKTsK
IAorcHJvdGVjdGVkOgorICAgIHZvaWQgc2V0Q29kZVJlZihDb2RlUmVmIHJlZik7CisgICAgCiBw
cml2YXRlOgogICAgIENvZGVSZWYgbV9yZWY7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196439</attachid>
            <date>2013-04-03 22:38:40 -0700</date>
            <delta_ts>2013-04-03 22:48:42 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>84241</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ3NjA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NiBA
QAorMjAxMy0wNC0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IHB1dCBERkcgZGF0YSBpbnRvIGEgREZHOjpKSVRDb2RlLCBhbmQgcHV0IGNv
bW1vbiBERkcgYW5kIEZUTCBkYXRhIGludG8gc29tZXRoaW5nIGFjY2Vzc2libGUgZnJvbSBib3Ro
IERGRzo6SklUQ29kZSBhbmQgRlRMOjpKSVRDb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM5MDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcmVtb3ZlcyBvbmUgcG9pbnRlciBm
cm9tIENvZGVCbG9jay4KKyAgICAgICAgCisgICAgICAgIEl0IGFsc28gZ2l2ZXMgdXMgYSBmcmFt
ZXdvcmsgZm9yIGhhdmluZyBKSVRUeXBlLXNwZWNpZmljIGRhdGEgaW4gQ29kZUJsb2NrLCBieQor
ICAgICAgICBwdXR0aW5nIGl0IGludG8gdGhlIGFwcHJvcHJpYXRlIEpJVENvZGUgY2xhc3MgKGVp
dGhlciBERkc6OkpJVENvZGUgb3IKKyAgICAgICAgRlRMOjpKSVRDb2RlKS4gQW5kIGl0IGFsbG93
cyB1cyB0byBoYXZlIERGRyBhbmQgRlRMIHNoYXJlIHNvbWUgY29tbW9uIGRhdGEsCisgICAgICAg
IHZpYSBERkc6OkNvbW1vbkRhdGEsIHdoaWNoIGlzIHN0b3JlZCBpbiBib3RoIERGRzo6SklUQ29k
ZSBhbmQgRlRMOjpKSVRDb2RlIGFuZAorICAgICAgICBhbHdheXMgYWNjZXNzaWJsZSB2aWEgSklU
Q29kZTo6ZGZnQ29tbW9uKCkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0QWdncmVn
YXRlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwZXJmb3JtVHJhY2luZ0ZpeHBvaW50SXRl
cmF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2Vz
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaHJpbmtUb0ZpdCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcyk6CisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmg6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OnNldEpJVENvZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZEltbWVkaWF0
ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKToKKyAgICAgICAgKEpTQzo6REZHQ29kZUJsb2Nr
czo6bWFyayk6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAq
IGRmZy9ERkdDb21tb25EYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAo
SlNDOjpERkc6OkNvbW1vbkRhdGE6Om5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OnNocmlua1RvRml0KToKKyAgICAgICAg
KiBkZmcvREZHQ29tbW9uRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChE
RkcpOgorICAgICAgICAoSlNDOjpERkc6OldlYWtSZWZlcmVuY2VUcmFuc2l0aW9uOjpXZWFrUmVm
ZXJlbmNlVHJhbnNpdGlvbik6CisgICAgICAgIChXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbik6Cisg
ICAgICAgIChDb21tb25EYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpDb21t
b25EYXRhKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
Ojpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21waWxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjp0cnlDb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuaDoK
KyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q29tcGlsZSk6CisgICAgICAg
IChKU0M6OkRGRzo6dHJ5Q29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGgu
aDoKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5jcHA6IEFkZGVk
LgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpKSVRDb2RlKToK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjp+SklUQ29kZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29kZTo6ZGZnQ29tbW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpkZmcp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OnNocmlua1RvRml0KToKKyAgICAgICAgKiBk
ZmcvREZHSklUQ29kZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKSVRDb2Rl
KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjphcHBlbmRPU1JFbnRyeURhdGEpOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVENvZGU6Om9zckVudHJ5RGF0YUZvckJ5dGVjb2RlSW5kZXgpOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvZGU6Omxhc3RPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2Rl
OjphcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2Rl
OjphcHBlbmRXYXRjaHBvaW50KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpKSVRDb21waWxlcik6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21w
aWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToK
KyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpJVENvbXBpbGVyKToK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YWRkV2Vha1JlZmVyZW5jZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6aml0Q29kZSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGRm
Zy9ERkdPU1JFeGl0Lmg6CisgICAgICAgIChPU1JFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NS
RXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uV2F0Y2hwb2lu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbnZlcnRMYXN0T1NSRXhp
dFRvRm9yd2FyZCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNw
cDoKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTEpJVENvZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkpJVENvZGU6OkpJVENvZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6On5KSVRDb2Rl
KToKKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6aW5pdGlhbGl6
ZUNvZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6RlRMOjpKSVRDb2RlOjpvZmZzZXRPZik6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29k
ZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6Y29udGFpbnMpOgorICAgICAg
ICAoSlNDOjpGVEw6OkpJVENvZGU6OmZ0bCk6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6
ZGZnQ29tbW9uKToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5oOgorICAgICAgICAoSklUQ29k
ZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVB1dFN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVQaGFudG9tUHV0
U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWRkV2Vha1Jl
ZmVyZW5jZSk6CisgICAgICAgIChMb3dlckRGR1RvTExWTSk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06OndlYWtQb2ludGVyKToKKyAgICAgICAgKiBmdGwvRlRMU3RhdGUuY3Bw
OgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpTdGF0ZTo6U3RhdGUpOgorICAg
ICAgICAoSlNDOjpGVEw6OlN0YXRlOjpkdW1wU3RhdGUpOgorICAgICAgICAqIGZ0bC9GVExTdGF0
ZS5oOgorICAgICAgICAoU3RhdGUpOgorICAgICAgICAqIGhlYXAvREZHQ29kZUJsb2Nrcy5jcHA6
CisgICAgICAgIChKU0M6OkRGR0NvZGVCbG9ja3M6On5ERkdDb2RlQmxvY2tzKToKKyAgICAgICAg
KEpTQzo6REZHQ29kZUJsb2Nrczo6amV0dGlzb24pOgorICAgICAgICAoSlNDOjpERkdDb2RlQmxv
Y2tzOjpjbGVhck1hcmtzKToKKyAgICAgICAgKEpTQzo6REZHQ29kZUJsb2Nrczo6ZGVsZXRlVW5t
YXJrZWRKZXR0aXNvbmVkQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGR0NvZGVCbG9ja3M6
OnRyYWNlTWFya2VkQ29kZUJsb2Nrcyk6CisgICAgICAgICogaml0L0pJVENvZGUuY3BwOgorICAg
ICAgICAoSlNDOjpKSVRDb2RlOjpkZmdDb21tb24pOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6ZGZnKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6ZnRsKToKKyAgICAg
ICAgKEpTQzo6RGlyZWN0SklUQ29kZTo6RGlyZWN0SklUQ29kZSk6CisgICAgICAgIChKU0M6OkRp
cmVjdEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKToKKyAgICAgICAgKEpTQzo6RGlyZWN0SklU
Q29kZTo6YWRkcmVzc0ZvckNhbGwpOgorICAgICAgICAoSlNDOjpEaXJlY3RKSVRDb2RlOjpleGVj
dXRhYmxlQWRkcmVzc0F0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RGlyZWN0SklUQ29kZTo6ZGF0
YUFkZHJlc3NBdE9mZnNldCk6CisgICAgICAgIChKU0M6OkRpcmVjdEpJVENvZGU6Om9mZnNldE9m
KToKKyAgICAgICAgKEpTQzo6RGlyZWN0SklUQ29kZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkRp
cmVjdEpJVENvZGU6OmNvbnRhaW5zKToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5oOgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSklUQ29k
ZSk6CisgICAgICAgIChEaXJlY3RKSVRDb2RlKToKKwogMjAxMy0wNC0wMyAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZvdXJ0aFRpZXI6IEluY2x1ZGUgTExWTSBo
ZWFkZXJzIHdpdGggc3Vycm91bmRpbmcgI3ByYWdtYXMgaW5zdGVhZCBvZiB1c2luZyBteSAjZGVm
aW5lCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNDc1
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTgyLDYgKzgyLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCiAgICAgZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKICAgICBk
ZmcvREZHQ29tbW9uLmNwcAorICAgIGRmZy9ERkdDb21tb25EYXRhLmNwcAogICAgIGRmZy9ERkdD
RkFQaGFzZS5jcHAKICAgICBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKICAgICBk
ZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAKQEAgLTk0LDYgKzk1LDcgQEAgc2V0KEphdmFT
Y3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHRWRnZS5jcHAKICAgICBkZmcvREZHRml4dXBQ
aGFzZS5jcHAKICAgICBkZmcvREZHR3JhcGguY3BwCisgICAgZGZnL0RGR0pJVENvZGUuY3BwCiAg
ICAgZGZnL0RGR0pJVENvbXBpbGVyLmNwcAogICAgIGRmZy9ERkdMb25nTGl2ZWRTdGF0ZS5jcHAK
ICAgICBkZmcvREZHTWluaWZpZWROb2RlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE0NzU4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNiArMjAy
LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24u
aCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwIFwKQEAgLTIyNSw2ICsyMjcsOCBAQCBqYXZhc2Ny
aXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb25nTGl2ZWRTdGF0ZS5jcHAgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDE0NzU4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNiArMTE5LDcgQEAgU09V
UkNFUyArPSBcCiAgICAgZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBcCiAgICAgZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHAgXAogICAgIGRmZy9ERkdDb21tb24uY3BwIFwKKyAgICBkZmcvREZHQ29t
bW9uRGF0YS5jcHAgXAogICAgIGRmZy9ERkdDRkFQaGFzZS5jcHAgXAogICAgIGRmZy9ERkdDRkdT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcCBcCiAgICAgZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2Uu
Y3BwIFwKQEAgLTEzMSw2ICsxMzIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkZmcvREZHRWRnZS5j
cHAgXAogICAgIGRmZy9ERkdGaXh1cFBoYXNlLmNwcCBcCiAgICAgZGZnL0RGR0dyYXBoLmNwcCBc
CisgICAgZGZnL0RGR0pJVENvZGUuY3BwIFwKICAgICBkZmcvREZHSklUQ29tcGlsZXIuY3BwIFwK
ICAgICBkZmcvREZHTG9uZ0xpdmVkU3RhdGUuY3BwIFwKICAgICBkZmcvREZHTWluaWZpZWROb2Rl
LmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQ3NTgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMwNCw2ICszMDQsMTAgQEAKIAkJMEZFQTBB
MjgxNzA5NjIzQjAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMjYxNzA5NjIzQjAw
QkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwICovOyB9OwogCQkwRkVBMEEyQTE3
MDk2Mjk2MDBCQjcyMkMgLyogRlRMT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTI5MTcwOTYyOTYwMEJCNzIyQyAvKiBGVExPdXRw
dXQuY3BwICovOyB9OwogCQkwRkVBMEEyQzE3MEI2NjE5MDBCQjcyMkMgLyogRlRMRm9ybWF0dGVk
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUEwQTJCMTcwQjY2MTkwMEJCNzIyQyAvKiBGVExGb3JtYXR0ZWRWYWx1ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRUEwQTMxMTcwRDQwQkYw
MEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTJEMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25E
YXRhLmNwcCAqLzsgfTsKKwkJMEZFQTBBMzIxNzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1vbkRh
dGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEw
QTJFMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFQTBBMzMxNzBENDBCRjAwQkI3MjJD
IC8qIERGR0pJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQTBBMkYxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuY3BwICovOyB9
OworCQkwRkVBMEEzNDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMzAxNzBENDBCRjAwQkI3
MjJDIC8qIERGR0pJVENvZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRkVCM0VDRDE2MjM3RjREMDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2Ny
aXB0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUIzRUNCMTYyMzdGNDcwMEFCNjdBRCAvKiBUeXBlZEFycmF5RGVzY3JpcHRvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUIzRUNGMTYyMzdG
NkMwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9B
c3NlbWJsZXIuY3BwICovOyB9OwogCQkwRkVGQzlBQTE2ODFBM0IzMDA1NjdGNTMgLyogREZHT1NS
RXhpdEp1bXBQbGFjZWhvbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVGQzlBNzE2ODFBM0IwMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQ
bGFjZWhvbGRlci5jcHAgKi87IH07CkBAIC0xMjQ0LDYgKzEyNDgsMTAgQEAKIAkJMEZFQTBBMjYx
NzA5NjIzQjAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHA7IHBh
dGggPSBmdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRUEwQTI5MTcwOTYyOTYwMEJCNzIyQyAvKiBGVExPdXRwdXQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMT3V0cHV0LmNwcDsgcGF0aCA9IGZ0
bC9GVExPdXRwdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEyQjE3
MEI2NjE5MDBCQjcyMkMgLyogRlRMRm9ybWF0dGVkVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRlRMRm9ybWF0dGVkVmFsdWUuaDsgcGF0aCA9IGZ0bC9GVExGb3JtYXR0
ZWRWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVBMEEyRDE3MEQ0MEJG
MDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdDb21tb25EYXRhLmNwcDsgcGF0aCA9IGRmZy9ERkdDb21tb25EYXRhLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQTBBMkUxNzBENDBCRjAwQkI3MjJD
IC8qIERGR0NvbW1vbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
Q29tbW9uRGF0YS5oOyBwYXRoID0gZGZnL0RGR0NvbW1vbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQTBBMkYxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSklUQ29kZS5jcHA7IHBh
dGggPSBkZmcvREZHSklUQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0pJVENvZGUuaDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIzRUNCMTYyMzdGNDcwMEFCNjdBRCAvKiBU
eXBlZEFycmF5RGVzY3JpcHRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
eXBlZEFycmF5RGVzY3JpcHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVC
M0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkVGQzlBNzE2ODFBM0IwMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1
bXBQbGFjZWhvbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0SnVtcFBs
YWNlaG9sZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3MzcsNiArMjc0
NSw4IEBACiAJCQkJMEYzQjNBMjUxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuaCAqLywKIAkJCQkwRkI0QjUxQTE2QjYyNzcyMDAzRjY5NkIgLyogREZHQ29tbW9u
LmNwcCAqLywKIAkJCQkwRkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIgLyogREZHQ29tbW9uLmggKi8s
CisJCQkJMEZFQTBBMkQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuY3BwICovLAor
CQkJCTBGRUEwQTJFMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggKi8sCiAJCQkJ
MEYzQjNBMTcxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCAq
LywKIAkJCQkwRjNCM0ExODE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuaCAqLywKIAkJCQkwRkJFMEY2QjE2QzFEQjAxMDA4MkM1RTggLyogREZHQ1BTUmV0aHJlYWRp
bmdQaGFzZS5jcHAgKi8sCkBAIC0yNzYyLDYgKzI3NzIsOCBAQAogCQkJCTg2RUM5REI3MTMyOERG
ODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgKi8sCiAJCQkJODZFQzlEQjgxMzI4REY4MjAwMkIy
QUQ3IC8qIERGR0dyYXBoLmggKi8sCiAJCQkJMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERG
R0luc2VydGlvblNldC5oICovLAorCQkJCTBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdK
SVRDb2RlLmNwcCAqLywKKwkJCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29k
ZS5oICovLAogCQkJCTg2RUM5REJCMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5j
cHAgKi8sCiAJCQkJODZFQzlEQkMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmgg
Ki8sCiAJCQkJMEZCNEI1MUMxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmNw
cCAqLywKQEAgLTMxNjcsNiArMzE3OSw3IEBACiAJCQkJMEYyQkRDNDkxNTIyODA5NjAwQ0Q4OTEw
IC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzRCMTUyMjgw
OUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVBMEEyNDE3MDk2MDY5MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFQTBBMzIxNzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1vbkRh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTYwMTRFRjkwQkQwMEM3MjUzMiAvKiBERkdW
aXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQy
NzMxMTU4RUJENTQwMDRDQjlGRiAvKiBEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMzA0NjA3MEUxRjQ5N0YwMDMyMzJDRiAvKiBFcnJvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MzU1LDYgKzMzNjgsNyBAQAogCQkJCUJDMThDNDQ0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBOdW1iZXJQ
cm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkQzOTM5MTAzRTQ1NjAwMDdEQ0I1MiAv
KiBOdW1lcmljU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZGM0VFQkQxNjhDREU5MzAw
NzdCOTJBIC8qIE9iakNDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVB
MEEzNDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZGM0VFQkYxNjhDREU5MzAwNzdCOTJBIC8qIE9iamNSdW50aW1lRXh0cmFzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNENBOTU4RDE2QUI1MEZBMDA5MzhBMDYgLyogT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQ1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBP
YmplY3RDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTUwLDYgKzM5NjQsNyBAQAog
CQkJCTg2REI2NDY0MEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRW
TVBvb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NkExRDUxNTAwMUNGNDAwMjk5MkIxIC8q
IEV4ZWN1dGlvbkNvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1ODUxNjc1NDgw
RjAwRjhBQjZFIC8qIEV4aXRLaW5kLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUEwQTMxMTcw
RDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
N0YzOUNCMTA3RUMzNzYwMDQyN0E0OCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1dGFi
bGVEdW1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNDMTA3RUMzNzYwMDQyN0E0OCAv
KiBGdW5jdGlvblByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQwODgsNiArNDEwMyw3
IEBACiAJCQkJMEYxMzkxMjkxNjc3MUMzMzAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1
ZW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlBRjE2NkFEMzVDMDAwRjVCQTMgLyog
UHJvZmlsZXJDb21waWxhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMDE2NkFE
MzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQTBBMzMxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZGNzI5QjExNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsZWRC
eXRlY29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMjE2NkFEMzVDMDAwRjVCQTMg
LyogUHJvZmlsZXJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM0QjE0OTE2RDQy
MDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNDc1
ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjMsMTAgKzYzLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSNpZiBF
TkFCTEUoREZHX0pJVCkKLXVzaW5nIG5hbWVzcGFjZSBERkc7Ci0jZW5kaWYKLQogU3RyaW5nIENv
ZGVCbG9jazo6aW5mZXJyZWROYW1lKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGNvZGVUeXBlKCkp
IHsKQEAgLTE1MDQsNyArMTUwMCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJp
bnRTdHJlYW0KICNlbmRpZgogICAgIAogI2lmIEVOQUJMRShERkdfSklUKQotICAgIFZlY3RvcjxG
cmVxdWVudEV4aXRTaXRlPiBleGl0U2l0ZXMgPSBleGl0UHJvZmlsZSgpLmV4aXRTaXRlc0Zvcihs
b2NhdGlvbik7CisgICAgVmVjdG9yPERGRzo6RnJlcXVlbnRFeGl0U2l0ZT4gZXhpdFNpdGVzID0g
ZXhpdFByb2ZpbGUoKS5leGl0U2l0ZXNGb3IobG9jYXRpb24pOwogICAgIGlmICghZXhpdFNpdGVz
LmlzRW1wdHkoKSkgewogICAgICAgICBvdXQucHJpbnQoIiAhISBmcmVxdWVudCBleGl0czogIik7
CiAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKQEAgLTIxMjYsMTMgKzIxMjIsMTUgQEAgdm9p
ZCBFdmFsQ29kZUNhY2hlOjp2aXNpdEFnZ3JlZ2F0ZShTbG90Vgogdm9pZCBDb2RlQmxvY2s6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogI2lmIEVOQUJMRShQQVJBTExF
TF9HQykgJiYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKCEhbV9kZmdEYXRhKSB7CisgICAgaWYg
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChnZXRKSVRUeXBlKCkpKSB7CisgICAgICAgIERGRzo6
Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKKyAgICAgICAg
CiAgICAgICAgIC8vIEkgbWF5IGJlIGFza2VkIHRvIHNjYW4gbXlzZWxmIG1vcmUgdGhhbiBvbmNl
LCBhbmQgaXQgbWF5IGV2ZW4gaGFwcGVuIGNvbmN1cnJlbnRseS4KICAgICAgICAgLy8gVG8gdGhp
cyBlbmQsIHVzZSBhIENBUyBsb29wIHRvIGNoZWNrIGlmIEkndmUgYmVlbiBjYWxsZWQgYWxyZWFk
eS4gT25seSBvbmUgdGhyZWFkCiAgICAgICAgIC8vIG1heSBwcm9jZWVkIHBhc3QgdGhpcyBwb2lu
dCAtIHdoaWNoZXZlciBvbmUgd2lucyB0aGUgQ0FTIHJhY2UuCiAgICAgICAgIHVuc2lnbmVkIG9s
ZFZhbHVlOwogICAgICAgICBkbyB7Ci0gICAgICAgICAgICBvbGRWYWx1ZSA9IG1fZGZnRGF0YS0+
dmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkOworICAgICAgICAgICAgb2xkVmFsdWUgPSBkZmdD
b21tb24tPnZpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZDsKICAgICAgICAgICAgIGlmIChvbGRW
YWx1ZSkgewogICAgICAgICAgICAgICAgIC8vIExvb2tzIGxpa2Ugc29tZW9uZSBlbHNlIHdvbiEg
UmV0dXJuIGltbWVkaWF0ZWx5IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0CiAgICAgICAgICAgICAg
ICAgLy8gdHJhY2UgdGhlIHNhbWUgQ29kZUJsb2NrIGNvbmN1cnJlbnRseS4gRG9pbmcgc28gaXMg
aGF6YXJkb3VzIHNpbmNlIHdlIHdpbGwKQEAgLTIxNDcsNyArMjE0NSw3IEBAIHZvaWQgQ29kZUJs
b2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQKICAgICAgICAgICAgICAgICAvLyB0ZXJtaW5h
dGlvbi4KICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0g
d2hpbGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmbV9kZmdEYXRhLT52aXNpdEFnZ3JlZ2F0
ZUhhc0JlZW5DYWxsZWQsIDAsIDEpKTsKKyAgICAgICAgfSB3aGlsZSAoIVdURjo6d2Vha0NvbXBh
cmVBbmRTd2FwKCZkZmdDb21tb24tPnZpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZCwgMCwgMSkp
OwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoUEFSQUxMRUxfR0MpICYmIEVOQUJMRShERkdfSklU
KQogICAgIApAQCAtMjE3OSwxNSArMjE3NywxNSBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0CiAgICAgLy8gb3RoZXIgcmVhc29ucywgdGhhdCB0aGlzIGl0ZXJhdGlv
biBzaG91bGQgcnVuIGFnYWluOyBpdCB3aWxsIG5vdGlmeSB1cyBvZiB0aGlzCiAgICAgLy8gZGVj
aXNpb24gYnkgY2FsbGluZyBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKS4KICAgICAKLSAgICBtX2Rm
Z0RhdGEtPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IGZhbHNlOwotICAgIG1fZGZnRGF0YS0+YWxs
VHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IGZhbHNlOworICAgIG1faml0Q29kZS0+ZGZnQ29t
bW9uKCktPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IGZhbHNlOworICAgIG1faml0Q29kZS0+ZGZn
Q29tbW9uKCktPmFsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQgPSBmYWxzZTsKICAgICAKICAg
ICBwZXJmb3JtVHJhY2luZ0ZpeHBvaW50SXRlcmF0aW9uKHZpc2l0b3IpOwogCiAgICAgLy8gR0Mg
ZG9lc24ndCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB5ZXQgZm9yIHVzIHRvIGRlY2lkZSB3aGV0
aGVyIHRvIGtlZXAgb3VyIERGRwogICAgIC8vIGRhdGEsIHNvIHdlIG5lZWQgdG8gcmVnaXN0ZXIg
YSBoYW5kbGVyIHRvIHJ1biBhZ2FpbiBhdCB0aGUgZW5kIG9mIEdDLCB3aGVuIG1vcmUKICAgICAv
LyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuCi0gICAgaWYgKCEobV9kZmdEYXRhLT5saXZlbmVz
c0hhc0JlZW5Qcm92ZWQgJiYgbV9kZmdEYXRhLT5hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2Vk
KSkKKyAgICBpZiAoIShtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5saXZlbmVzc0hhc0JlZW5Qcm92
ZWQgJiYgbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+YWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtl
ZCkpCiAgICAgICAgIHZpc2l0b3IuYWRkV2Vha1JlZmVyZW5jZUhhcnZlc3Rlcih0aGlzKTsKICAg
ICAKICNlbHNlIC8vIEVOQUJMRShERkdfSklUKQpAQCAtMjIwMSwxMiArMjE5OSwxMyBAQCB2b2lk
IENvZGVCbG9jazo6cGVyZm9ybVRyYWNpbmdGaXhwb2ludEl0CiAgICAgCiAjaWYgRU5BQkxFKERG
R19KSVQpCiAgICAgLy8gRXZhbHVhdGUgb3VyIHdlYWsgcmVmZXJlbmNlIHRyYW5zaXRpb25zLCBp
ZiB0aGVyZSBhcmUgc3RpbGwgc29tZSB0byBldmFsdWF0ZS4KLSAgICBpZiAoIW1fZGZnRGF0YS0+
YWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCkgeworICAgIERGRzo6Q29tbW9uRGF0YSogZGZn
Q29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKKyAgICBpZiAoIWRmZ0NvbW1vbi0+YWxs
VHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCkgewogICAgICAgICBib29sIGFsbEFyZU1hcmtlZFNv
RmFyID0gdHJ1ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGZnRGF0YS0+
dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgoIW1fZGZnRGF0YS0+
dHJhbnNpdGlvbnNbaV0ubV9jb2RlT3JpZ2luCi0gICAgICAgICAgICAgICAgIHx8IEhlYXA6Omlz
TWFya2VkKG1fZGZnRGF0YS0+dHJhbnNpdGlvbnNbaV0ubV9jb2RlT3JpZ2luLmdldCgpKSkKLSAg
ICAgICAgICAgICAgICAmJiBIZWFwOjppc01hcmtlZChtX2RmZ0RhdGEtPnRyYW5zaXRpb25zW2ld
Lm1fZnJvbS5nZXQoKSkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmZ0Nv
bW1vbi0+dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgoIWRmZ0Nv
bW1vbi0+dHJhbnNpdGlvbnNbaV0ubV9jb2RlT3JpZ2luCisgICAgICAgICAgICAgICAgIHx8IEhl
YXA6OmlzTWFya2VkKGRmZ0NvbW1vbi0+dHJhbnNpdGlvbnNbaV0ubV9jb2RlT3JpZ2luLmdldCgp
KSkKKyAgICAgICAgICAgICAgICAmJiBIZWFwOjppc01hcmtlZChkZmdDb21tb24tPnRyYW5zaXRp
b25zW2ldLm1fZnJvbS5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZm9sbG93
aW5nIHRocmVlIHRoaW5ncyBhcmUgbGl2ZSwgdGhlbiB0aGUgdGFyZ2V0IG9mIHRoZQogICAgICAg
ICAgICAgICAgIC8vIHRyYW5zaXRpb24gaXMgYWxzbyBsaXZlOgogICAgICAgICAgICAgICAgIC8v
IC0gVGhpcyBjb2RlIGJsb2NrLiBXZSBrbm93IGl0J3MgbGl2ZSBhbHJlYWR5IGJlY2F1c2Ugb3Ro
ZXJ3aXNlCkBAIC0yMjE4LDI1ICsyMjE3LDI1IEBAIHZvaWQgQ29kZUJsb2NrOjpwZXJmb3JtVHJh
Y2luZ0ZpeHBvaW50SXQKICAgICAgICAgICAgICAgICAvLyAtIFRoZSBzb3VyY2Ugb2YgdGhlIHRy
YW5zaXRpb24uIFRoZSB0cmFuc2l0aW9uIGNoZWNrcyBpZiBzb21lCiAgICAgICAgICAgICAgICAg
Ly8gICBoZWFwIGxvY2F0aW9uIGhvbGRzIHRoZSBzb3VyY2UsIGFuZCBpZiBzbywgc3RvcmVzIHRo
ZSB0YXJnZXQuCiAgICAgICAgICAgICAgICAgLy8gICBIZW5jZSB0aGUgc291cmNlIG11c3QgYmUg
bGl2ZSBmb3IgdGhlIHRyYW5zaXRpb24gdG8gYmUgbGl2ZS4KLSAgICAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmbV9kZmdEYXRhLT50cmFuc2l0aW9uc1tpXS5tX3RvKTsKKyAgICAgICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT50cmFuc2l0aW9uc1tpXS5tX3RvKTsKICAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFyID0gZmFs
c2U7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChhbGxBcmVNYXJrZWRTb0ZhcikK
LSAgICAgICAgICAgIG1fZGZnRGF0YS0+YWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IHRy
dWU7CisgICAgICAgICAgICBkZmdDb21tb24tPmFsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQg
PSB0cnVlOwogICAgIH0KICAgICAKICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGFueSByZW1haW5p
bmcgd29yayB0byBkby4KLSAgICBpZiAobV9kZmdEYXRhLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQp
CisgICAgaWYgKGRmZ0NvbW1vbi0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkKQogICAgICAgICByZXR1
cm47CiAgICAgCiAgICAgLy8gTm93IGNoZWNrIGFsbCBvZiBvdXIgd2VhayByZWZlcmVuY2VzLiBJ
ZiBhbGwgb2YgdGhlbSBhcmUgbGl2ZSwgdGhlbiB3ZQogICAgIC8vIGhhdmUgcHJvdmVkIGxpdmVu
ZXNzIGFuZCBzbyB3ZSBzY2FuIG91ciBzdHJvbmcgcmVmZXJlbmNlcy4gSWYgYXQgZW5kIG9mCiAg
ICAgLy8gR0Mgd2Ugc3RpbGwgaGF2ZSBub3QgcHJvdmVkIGxpdmVuZXNzLCB0aGVuIHRoaXMgY29k
ZSBibG9jayBpcyB0b2FzdC4KICAgICBib29sIGFsbEFyZUxpdmVTb0ZhciA9IHRydWU7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGZnRGF0YS0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX2RmZ0RhdGEtPndlYWtSZWZl
cmVuY2VzW2ldLmdldCgpKSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21t
b24tPndlYWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNN
YXJrZWQoZGZnQ29tbW9uLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKICAgICAgICAgICAg
IGFsbEFyZUxpdmVTb0ZhciA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
QEAgLTIyNDksNyArMjI0OCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpwZXJmb3JtVHJhY2luZ0ZpeHBv
aW50SXQKICAgICAKICAgICAvLyBBbGwgd2VhayByZWZlcmVuY2VzIGFyZSBsaXZlLiBSZWNvcmQg
dGhpcyBpbmZvcm1hdGlvbiBzbyB3ZSBkb24ndAogICAgIC8vIGNvbWUgYmFjayBoZXJlIGFnYWlu
LCBhbmQgc2NhbiB0aGUgc3Ryb25nIHJlZmVyZW5jZXMuCi0gICAgbV9kZmdEYXRhLT5saXZlbmVz
c0hhc0JlZW5Qcm92ZWQgPSB0cnVlOworICAgIGRmZ0NvbW1vbi0+bGl2ZW5lc3NIYXNCZWVuUHJv
dmVkID0gdHJ1ZTsKICAgICBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2aXNpdG9yKTsK
ICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KQEAgLTIzMjUsNyArMjMyNCw3IEBAIHZvaWQg
Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKIAogI2lmIEVOQUJMRShERkdfSklU
KQogICAgIC8vIENoZWNrIGlmIHdlJ3JlIG5vdCBsaXZlLiBJZiB3ZSBhcmUsIHRoZW4gamV0dGlz
b24uCi0gICAgaWYgKCEoc2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4o
KSB8fCBtX2RmZ0RhdGEtPmxpdmVuZXNzSGFzQmVlblByb3ZlZCkpIHsKKyAgICBpZiAoIShzaG91
bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpIHx8IG1faml0Q29kZS0+ZGZn
Q29tbW9uKCktPmxpdmVuZXNzSGFzQmVlblByb3ZlZCkpIHsKICAgICAgICAgaWYgKHZlcmJvc2VV
bmxpbmtpbmcpCiAgICAgICAgICAgICBkYXRhTG9nKCp0aGlzLCAiIGhhcyBkZWFkIHdlYWsgcmVm
ZXJlbmNlcywgamV0dGlzb25pbmcgZHVyaW5nIEdDLlxuIik7CiAKQEAgLTIzMzUsOCArMjMzNCw5
IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICAgICAgCiAg
ICAgICAgIGlmIChERkc6OnNob3VsZFNob3dEaXNhc3NlbWJseSgpKSB7CiAgICAgICAgICAgICBk
YXRhTG9nKCp0aGlzLCAiIHdpbGwgYmUgamV0dGlzb25lZCBiZWNhdXNlIG9mIHRoZSBmb2xsb3dp
bmcgZGVhZCByZWZlcmVuY2VzOlxuIik7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9kZmdEYXRhLT50cmFuc2l0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
ICAgIFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uJiB0cmFuc2l0aW9uID0gbV9kZmdEYXRhLT50cmFu
c2l0aW9uc1tpXTsKKyAgICAgICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9q
aXRDb2RlLT5kZmdDb21tb24oKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBkZmdDb21tb24tPnRyYW5zaXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAg
REZHOjpXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbiYgdHJhbnNpdGlvbiA9IGRmZ0NvbW1vbi0+dHJh
bnNpdGlvbnNbaV07CiAgICAgICAgICAgICAgICAgSlNDZWxsKiBvcmlnaW4gPSB0cmFuc2l0aW9u
Lm1fY29kZU9yaWdpbi5nZXQoKTsKICAgICAgICAgICAgICAgICBKU0NlbGwqIGZyb20gPSB0cmFu
c2l0aW9uLm1fZnJvbS5nZXQoKTsKICAgICAgICAgICAgICAgICBKU0NlbGwqIHRvID0gdHJhbnNp
dGlvbi5tX3RvLmdldCgpOwpAQCAtMjM0NCw4ICsyMzQ0LDggQEAgdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgVHJhbnNpdGlvbiB1bmRlciAiLCBKU1ZhbHVlKG9y
aWdpbiksICIsICIsIEpTVmFsdWUoZnJvbSksICIgLT4gIiwgSlNWYWx1ZSh0byksICIuXG4iKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Rm
Z0RhdGEtPndlYWtSZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgSlND
ZWxsKiB3ZWFrID0gbV9kZmdEYXRhLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtSZWZlcmVuY2VzLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgSlNDZWxsKiB3ZWFrID0gZGZnQ29tbW9uLT53
ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKTsKICAgICAgICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJr
ZWQod2VhaykpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICBXZWFrIHJlZmVyZW5jZSAiLCBKU1ZhbHVlKHdlYWspLCAiLlxuIik7CkBA
IC0yNDg2LDE4ICsyNDg2LDIwIEBAIHZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0V2Vha1Jl
ZmVyZW4KICAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
LSAgICBpZiAoIW1fZGZnRGF0YSkKKyAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChn
ZXRKSVRUeXBlKCkpKQogICAgICAgICByZXR1cm47CisgICAgCisgICAgREZHOjpDb21tb25EYXRh
KiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fZGZnRGF0YS0+dHJhbnNpdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKCEhbV9kZmdEYXRhLT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4pCi0gICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZCgmbV9kZmdEYXRhLT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmln
aW4pOyAvLyBBbG1vc3QgY2VydGFpbmx5IG5vdCBuZWNlc3NhcnksIHNpbmNlIHRoZSBjb2RlIG9y
aWdpbiBzaG91bGQgYWxzbyBiZSBhIHdlYWsgcmVmZXJlbmNlLiBCZXR0ZXIgdG8gYmUgc2FmZSwg
dGhvdWdoLgotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9kZmdEYXRhLT50cmFuc2l0aW9uc1tp
XS5tX2Zyb20pOwotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9kZmdEYXRhLT50cmFuc2l0aW9u
c1tpXS5tX3RvKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZnQ29tbW9uLT50cmFu
c2l0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoISFkZmdDb21tb24tPnRyYW5zaXRp
b25zW2ldLm1fY29kZU9yaWdpbikKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZkZmdDb21t
b24tPnRyYW5zaXRpb25zW2ldLm1fY29kZU9yaWdpbik7IC8vIEFsbW9zdCBjZXJ0YWlubHkgbm90
IG5lY2Vzc2FyeSwgc2luY2UgdGhlIGNvZGUgb3JpZ2luIHNob3VsZCBhbHNvIGJlIGEgd2VhayBy
ZWZlcmVuY2UuIEJldHRlciB0byBiZSBzYWZlLCB0aG91Z2guCisgICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldLm1fZnJvbSk7CisgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKCZkZmdDb21tb24tPnRyYW5zaXRpb25zW2ldLm1fdG8pOwogICAgIH0KICAgICAKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9kZmdEYXRhLT53ZWFrUmVmZXJlbmNlcy5zaXpl
KCk7ICsraSkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fZGZnRGF0YS0+d2Vha1JlZmVyZW5j
ZXNbaV0pOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZmdDb21tb24tPndlYWtSZWZl
cmVuY2VzLnNpemUoKTsgKytpKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZGZnQ29tbW9uLT53
ZWFrUmVmZXJlbmNlc1tpXSk7CiAjZW5kaWYgICAgCiB9CiAKQEAgLTI1NjcsMTggKzI1NjksNiBA
QCB2b2lkIENvZGVCbG9jazo6c2hyaW5rVG9GaXQoU2hyaW5rTW9kZSBzCiAgICAgICAgIG1fcmFy
ZURhdGEtPm1fY29kZU9yaWdpbnMuc2hyaW5rVG9GaXQoKTsKICNlbmRpZgogICAgIH0KLSAgICAK
LSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBpZiAobV9kZmdEYXRhKSB7Ci0gICAgICAgIG1fZGZn
RGF0YS0+b3NyRW50cnkuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9kZmdEYXRhLT5vc3JFeGl0
LnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1fZGZnRGF0YS0+c3BlY3VsYXRpb25SZWNvdmVyeS5z
aHJpbmtUb0ZpdCgpOwotICAgICAgICBtX2RmZ0RhdGEtPndlYWtSZWZlcmVuY2VzLnNocmlua1Rv
Rml0KCk7Ci0gICAgICAgIG1fZGZnRGF0YS0+dHJhbnNpdGlvbnMuc2hyaW5rVG9GaXQoKTsKLSAg
ICAgICAgbV9kZmdEYXRhLT5taW5pZmllZERGRy5wcmVwYXJlQW5kU2hyaW5rKCk7Ci0gICAgICAg
IG1fZGZnRGF0YS0+dmFyaWFibGVFdmVudFN0cmVhbS5zaHJpbmtUb0ZpdCgpOwotICAgIH0KLSNl
bmRpZgogfQogCiB2b2lkIENvZGVCbG9jazo6Y3JlYXRlQWN0aXZhdGlvbihDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKQEAgLTMyNjEsMTIgKzMyNTEsMTIgQEAgdm9pZCBDb2RlQmxvY2s6OnRhbGx5RnJl
cXVlbnRFeGl0U2l0ZXMoKQogewogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
Z2V0SklUVHlwZSgpKSk7CiAgICAgQVNTRVJUKGFsdGVybmF0aXZlKCktPmdldEpJVFR5cGUoKSA9
PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNTRVJUKCEhbV9kZmdEYXRhKTsKICAgICAK
ICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBhbHRlcm5hdGl2ZSgpOwogICAgIAotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RmZ0RhdGEtPm9zckV4aXQuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgREZHOjpPU1JFeGl0JiBleGl0ID0gbV9kZmdEYXRhLT5vc3JFeGl0W2ldOwor
ICAgIERGRzo6SklUQ29kZSogaml0Q29kZSA9IG1faml0Q29kZS0+ZGZnKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgREZHOjpPU1JFeGl0JiBleGl0ID0gaml0Q29kZS0+b3NyRXhpdFtpXTsKICAgICAgICAgCiAg
ICAgICAgIGlmICghZXhpdC5jb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZSh0aGlzLCBw
cm9maWxlZEJsb2NrKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTQ3NTg3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVNYXAuaCIKICNpbmNsdWRl
ICJERkdDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZH
Q29tbW9uRGF0YS5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCiAjaW5jbHVkZSAiREZH
TWluaWZpZWRHcmFwaC5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCkBAIC0yNjIsMTQ0ICsy
NjMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIAotI2lm
IEVOQUJMRShERkdfSklUKQotICAgICAgICB2b2lkIGNyZWF0ZURGR0RhdGFJZk5lY2Vzc2FyeSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghIW1fZGZnRGF0YSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZGZnRGF0YSA9IGFkb3B0UHRy
KG5ldyBERkdEYXRhKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBzYXZlQ29t
cGlsYXRpb24oUGFzc1JlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjcmVhdGVERkdEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAg
ICAgICAgIG1fZGZnRGF0YS0+Y29tcGlsYXRpb24gPSBjb21waWxhdGlvbjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbV9kZmdEYXRhKQotICAgICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICAgICAgcmV0dXJuIG1fZGZnRGF0YS0+Y29tcGlsYXRpb24uZ2V0KCk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIERGRzo6T1NSRW50cnlEYXRhKiBhcHBlbmRE
RkdPU1JFbnRyeURhdGEodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgbWFjaGluZUNv
ZGVPZmZzZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZURGR0RhdGFJZk5lY2Vzc2Fy
eSgpOwotICAgICAgICAgICAgREZHOjpPU1JFbnRyeURhdGEgZW50cnk7Ci0gICAgICAgICAgICBl
bnRyeS5tX2J5dGVjb2RlSW5kZXggPSBieXRlY29kZUluZGV4OwotICAgICAgICAgICAgZW50cnku
bV9tYWNoaW5lQ29kZU9mZnNldCA9IG1hY2hpbmVDb2RlT2Zmc2V0OwotICAgICAgICAgICAgbV9k
ZmdEYXRhLT5vc3JFbnRyeS5hcHBlbmQoZW50cnkpOwotICAgICAgICAgICAgcmV0dXJuICZtX2Rm
Z0RhdGEtPm9zckVudHJ5Lmxhc3QoKTsKLSAgICAgICAgfQotICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZkRGR09TUkVudHJpZXMoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1f
ZGZnRGF0YSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHJldHVybiBt
X2RmZ0RhdGEtPm9zckVudHJ5LnNpemUoKTsKLSAgICAgICAgfQotICAgICAgICBERkc6Ok9TUkVu
dHJ5RGF0YSogZGZnT1NSRW50cnlEYXRhKHVuc2lnbmVkIGkpIHsgcmV0dXJuICZtX2RmZ0RhdGEt
Pm9zckVudHJ5W2ldOyB9Ci0gICAgICAgIERGRzo6T1NSRW50cnlEYXRhKiBkZmdPU1JFbnRyeURh
dGFGb3JCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICghbV9kZmdEYXRhKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxERkc6Ok9TUkVudHJ5RGF0YSwgdW5zaWdu
ZWQ+KAotICAgICAgICAgICAgICAgIG1fZGZnRGF0YS0+b3NyRW50cnksIG1fZGZnRGF0YS0+b3Ny
RW50cnkuc2l6ZSgpLCBieXRlY29kZUluZGV4LAotICAgICAgICAgICAgICAgIERGRzo6Z2V0T1NS
RW50cnlEYXRhQnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHVu
c2lnbmVkIGFwcGVuZE9TUkV4aXQoY29uc3QgREZHOjpPU1JFeGl0JiBvc3JFeGl0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBjcmVhdGVERkdEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHJlc3VsdCA9IG1fZGZnRGF0YS0+b3NyRXhpdC5zaXplKCk7Ci0gICAgICAgICAg
ICBtX2RmZ0RhdGEtPm9zckV4aXQuYXBwZW5kKG9zckV4aXQpOwotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgREZHOjpPU1JFeGl0JiBsYXN0
T1NSRXhpdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2RmZ0RhdGEtPm9zckV4
aXQubGFzdCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBhcHBlbmRT
cGVjdWxhdGlvblJlY292ZXJ5KGNvbnN0IERGRzo6U3BlY3VsYXRpb25SZWNvdmVyeSYgcmVjb3Zl
cnkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZURGR0RhdGFJZk5lY2Vzc2FyeSgpOwot
ICAgICAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9kZmdEYXRhLT5zcGVjdWxhdGlvblJlY292
ZXJ5LnNpemUoKTsKLSAgICAgICAgICAgIG1fZGZnRGF0YS0+c3BlY3VsYXRpb25SZWNvdmVyeS5h
cHBlbmQocmVjb3ZlcnkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgYXBwZW5kV2F0Y2hwb2ludChjb25zdCBKdW1wUmVw
bGFjZW1lbnRXYXRjaHBvaW50JiB3YXRjaHBvaW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBj
cmVhdGVERkdEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9
IG1fZGZnRGF0YS0+d2F0Y2hwb2ludHMuc2l6ZSgpOwotICAgICAgICAgICAgbV9kZmdEYXRhLT53
YXRjaHBvaW50cy5hcHBlbmQod2F0Y2hwb2ludCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZk9TUkV4aXRz
KCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX2RmZ0RhdGEpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gbV9kZmdEYXRhLT5vc3JFeGl0LnNpemUo
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZTcGVjdWxh
dGlvblJlY292ZXJpZXMoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fZGZnRGF0YSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHJldHVybiBtX2RmZ0RhdGEt
PnNwZWN1bGF0aW9uUmVjb3Zlcnkuc2l6ZSgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICB1bnNpZ25lZCBudW1iZXJPZldhdGNocG9pbnRzKCkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKCFtX2RmZ0RhdGEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9kZmdEYXRhLT53YXRjaHBvaW50cy5zaXplKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIERGRzo6T1NSRXhpdCYgb3NyRXhpdCh1bnNpZ25lZCBpbmRleCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIG1fZGZnRGF0YS0+b3NyRXhpdFtpbmRleF07Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIERGRzo6U3BlY3VsYXRpb25SZWNvdmVyeSYgc3BlY3VsYXRp
b25SZWNvdmVyeSh1bnNpZ25lZCBpbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IG1fZGZnRGF0YS0+c3BlY3VsYXRpb25SZWNvdmVyeVtpbmRleF07Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQmIHdhdGNocG9pbnQodW5zaWdu
ZWQgaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2RmZ0RhdGEtPndhdGNo
cG9pbnRzW2luZGV4XTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBhcHBlbmRX
ZWFrUmVmZXJlbmNlKEpTQ2VsbCogdGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjcmVh
dGVERkdEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgICAgIG1fZGZnRGF0YS0+d2Vha1JlZmVy
ZW5jZXMuYXBwZW5kKFdyaXRlQmFycmllcjxKU0NlbGw+KCpnbG9iYWxEYXRhKCksIG93bmVyRXhl
Y3V0YWJsZSgpLCB0YXJnZXQpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBh
cHBlbmRXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbihKU0NlbGwqIGNvZGVPcmlnaW4sIEpTQ2VsbCog
ZnJvbSwgSlNDZWxsKiB0bykKLSAgICAgICAgewotICAgICAgICAgICAgY3JlYXRlREZHRGF0YUlm
TmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICBtX2RmZ0RhdGEtPnRyYW5zaXRpb25zLmFwcGVuZCgK
LSAgICAgICAgICAgICAgICBXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbigqZ2xvYmFsRGF0YSgpLCBv
d25lckV4ZWN1dGFibGUoKSwgY29kZU9yaWdpbiwgZnJvbSwgdG8pKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgREZHOjpNaW5pZmllZEdyYXBoJiBtaW5pZmllZERGRygpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGNyZWF0ZURGR0RhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICAgICAg
cmV0dXJuIG1fZGZnRGF0YS0+bWluaWZpZWRERkc7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIERGRzo6VmFyaWFibGVFdmVudFN0cmVhbSYgdmFyaWFibGVFdmVudFN0cmVhbSgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZURGR0RhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICAg
ICAgcmV0dXJuIG1fZGZnRGF0YS0+dmFyaWFibGVFdmVudFN0cmVhbTsKLSAgICAgICAgfQotI2Vu
ZGlmCi0KICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoSW5zdHJ1Y3Rpb24qIHJldHVy
bkFkZHJlc3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJldHVybkFk
ZHJlc3MgPj0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSAmJiByZXR1cm5BZGRyZXNzIDwgaW5zdHJ1
Y3Rpb25zKCkuZW5kKCkpOwpAQCAtNDI2LDEwICsyODksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIG1faml0Q29kZSA9IGNvZGU7CiAgICAgICAgICAgICBtX2ppdENvZGVXaXRoQXJp
dHlDaGVjayA9IGNvZGVXaXRoQXJpdHlDaGVjazsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAg
ICAgICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoSklUQ29kZTo6aml0VHlwZUZvciht
X2ppdENvZGUpKSkgewotICAgICAgICAgICAgICAgIGNyZWF0ZURGR0RhdGFJZk5lY2Vzc2FyeSgp
OworICAgICAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChKSVRDb2RlOjpqaXRU
eXBlRm9yKG1faml0Q29kZSkpKQogICAgICAgICAgICAgICAgIG1fZ2xvYmFsRGF0YS0+aGVhcC5t
X2RmZ0NvZGVCbG9ja3MubV9zZXQuYWRkKHRoaXMpOwotICAgICAgICAgICAgfQogI2VuZGlmCiAg
ICAgICAgIH0KICAgICAgICAgUGFzc1JlZlB0cjxKSVRDb2RlPiBnZXRKSVRDb2RlKCkgeyByZXR1
cm4gbV9qaXRDb2RlOyB9CkBAIC0xMTEzLDEzICs5NzQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICAvLyBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVu
IHRoZWlyIHdlYWsgcmVmZXJlbmNlcyBnbwogICAgICAgICAgICAgLy8gc3RhbGUuIFNvIGlmIGEg
YmFzbGluZSBKSVQgQ29kZUJsb2NrIGdldHMgc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0CiAg
ICAgICAgICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgaXQncyBsaXZlLgotICAgICAgICAgICAgaWYg
KCFtX2RmZ0RhdGEpCisgICAgICAgICAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChn
ZXRKSVRUeXBlKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICAvLyBGb3Igc2ltcGxpY2l0eSwgd2UgZG9uJ3QgYXR0ZW1wdCB0byBqZXR0
aXNvbiBjb2RlIGJsb2NrcyBkdXJpbmcgR0MgaWYKICAgICAgICAgICAgIC8vIHRoZXkgYXJlIGV4
ZWN1dGluZy4gSW5zdGVhZCB3ZSBzdHJvbmdseSBtYXJrIHRoZWlyIHdlYWsgcmVmZXJlbmNlcyB0
bwogICAgICAgICAgICAgLy8gYWxsb3cgdGhlbSB0byBjb250aW51ZSB0byBleGVjdXRlIHNvdW5k
bHkuCi0gICAgICAgICAgICBpZiAobV9kZmdEYXRhLT5tYXlCZUV4ZWN1dGluZykKKyAgICAgICAg
ICAgIGlmIChtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5tYXlCZUV4ZWN1dGluZykKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OmZvcmNlREZHQ29kZUJsb2NrTGl2ZW5lc3MoKSkKQEAgLTExNzgsNDcgKzEwMzksNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBtX2ppdENv
ZGVNYXA7CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgc3RydWN0IFdlYWtS
ZWZlcmVuY2VUcmFuc2l0aW9uIHsKLSAgICAgICAgICAgIFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9u
KCkgeyB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgSlNDZWxsKiBjb2RlT3Jp
Z2luLCBKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8pCi0gICAgICAgICAgICAgICAgOiBtX2Zyb20o
Z2xvYmFsRGF0YSwgb3duZXIsIGZyb20pCi0gICAgICAgICAgICAgICAgLCBtX3RvKGdsb2JhbERh
dGEsIG93bmVyLCB0bykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoISFjb2Rl
T3JpZ2luKQotICAgICAgICAgICAgICAgICAgICBtX2NvZGVPcmlnaW4uc2V0KGdsb2JhbERhdGEs
IG93bmVyLCBjb2RlT3JpZ2luKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgV3JpdGVC
YXJyaWVyPEpTQ2VsbD4gbV9jb2RlT3JpZ2luOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPEpT
Q2VsbD4gbV9mcm9tOwotICAgICAgICAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV90bzsKLSAg
ICAgICAgfTsKLSAgICAgICAgCi0gICAgICAgIHN0cnVjdCBERkdEYXRhIHsKLSAgICAgICAgICAg
IERGR0RhdGEoKQotICAgICAgICAgICAgICAgIDogbWF5QmVFeGVjdXRpbmcoZmFsc2UpCi0gICAg
ICAgICAgICAgICAgLCBpc0pldHRpc29uZWQoZmFsc2UpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFZlY3RvcjxERkc6Ok9TUkVudHJ5RGF0
YT4gb3NyRW50cnk7Ci0gICAgICAgICAgICBTZWdtZW50ZWRWZWN0b3I8REZHOjpPU1JFeGl0LCA4
PiBvc3JFeGl0OwotICAgICAgICAgICAgVmVjdG9yPERGRzo6U3BlY3VsYXRpb25SZWNvdmVyeT4g
c3BlY3VsYXRpb25SZWNvdmVyeTsKLSAgICAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxKdW1wUmVw
bGFjZW1lbnRXYXRjaHBvaW50LCAxLCAwPiB3YXRjaHBvaW50czsKLSAgICAgICAgICAgIFZlY3Rv
cjxXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbj4gdHJhbnNpdGlvbnM7Ci0gICAgICAgICAgICBWZWN0
b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4gPiB3ZWFrUmVmZXJlbmNlczsKLSAgICAgICAgICAgIERG
Rzo6VmFyaWFibGVFdmVudFN0cmVhbSB2YXJpYWJsZUV2ZW50U3RyZWFtOwotICAgICAgICAgICAg
REZHOjpNaW5pZmllZEdyYXBoIG1pbmlmaWVkREZHOwotICAgICAgICAgICAgUmVmUHRyPFByb2Zp
bGVyOjpDb21waWxhdGlvbj4gY29tcGlsYXRpb247Ci0gICAgICAgICAgICBib29sIG1heUJlRXhl
Y3V0aW5nOwotICAgICAgICAgICAgYm9vbCBpc0pldHRpc29uZWQ7Ci0gICAgICAgICAgICBib29s
IGxpdmVuZXNzSGFzQmVlblByb3ZlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkg
R0MuCi0gICAgICAgICAgICBib29sIGFsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIElu
aXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgotICAgICAgICAgICAgdW5zaWduZWQgdmlz
aXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkOyAvLyBVbnNpZ25lZCB0byBtYWtlIGl0IHdvcmsgc2Vh
bWxlc3NseSB3aXRoIHRoZSBicm9hZGVzdCBzZXQgb2YgQ0FTIGltcGxlbWVudGF0aW9ucy4KLSAg
ICAgICAgfTsKLSAgICAgICAgCi0gICAgICAgIE93blB0cjxERkdEYXRhPiBtX2RmZ0RhdGE7Ci0g
ICAgICAgIAogICAgICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9j
a3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jawogICAgICAgICAvLyBmb3Ig
REZHIGNvZGUgYmxvY2tzLgogICAgICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7
CkBAIC0xNDU0LDcgKzEyNzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYgKGl0ZXIg
PT0gbV9zZXQuZW5kKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICAo
Kml0ZXIpLT5tX2RmZ0RhdGEtPm1heUJlRXhlY3V0aW5nID0gdHJ1ZTsKKyAgICAgICAgKCppdGVy
KS0+bV9qaXRDb2RlLT5kZmdDb21tb24oKS0+bWF5QmVFeGVjdXRpbmcgPSB0cnVlOwogICAgIH0K
ICNlbmRpZgogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJs
eUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fz
c2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxNDc1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3
IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHRlBSSW5mby5oIgogI2lu
Y2x1ZGUgIkRGR0dQUkluZm8uaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAi
REZHTm9kZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0
YS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkpTR2xvYmFs
RGF0YS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCit2b2lkIENvbW1vbkRhdGE6Om5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRy
YW5zaXRpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGUqIG5vZGUpCit7CisgICAgdHJhbnNp
dGlvbnMuYXBwZW5kKAorICAgICAgICBXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbigKKyAgICAgICAg
ICAgICpjb2RlQmxvY2stPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwKKyAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uY29kZU9yaWdpbk93bmVyKCksCisgICAg
ICAgICAgICBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJl
LAorICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1
cmUpKTsKK30KKwordm9pZCBDb21tb25EYXRhOjpzaHJpbmtUb0ZpdCgpCit7CisgICAgd2Vha1Jl
ZmVyZW5jZXMuc2hyaW5rVG9GaXQoKTsKKyAgICB0cmFuc2l0aW9ucy5zaHJpbmtUb0ZpdCgpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ29tbW9uRGF0YV9oCisjZGVmaW5lIERG
R0NvbW1vbkRhdGFfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIlByb2ZpbGVyQ29tcGls
YXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIENvZGVCbG9jazsKKworbmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBOb2RlOwor
CisvLyBDb21tb25EYXRhIGhvbGRzIHRoZSBzZXQgb2YgZGF0YSB0aGF0IGJvdGggREZHIGFuZCBG
VEwgY29kZSBibG9ja3MgbmVlZCB0byBrbm93CisvLyBhYm91dCB0aGVtc2VsdmVzLgorCitzdHJ1
Y3QgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24geworICAgIFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9u
KCkgeyB9CisgICAgCisgICAgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBKU0NlbGwqIGNvZGVPcmlnaW4sIEpTQ2VsbCogZnJv
bSwgSlNDZWxsKiB0bykKKyAgICAgICAgOiBtX2Zyb20oZ2xvYmFsRGF0YSwgb3duZXIsIGZyb20p
CisgICAgICAgICwgbV90byhnbG9iYWxEYXRhLCBvd25lciwgdG8pCisgICAgeworICAgICAgICBp
ZiAoISFjb2RlT3JpZ2luKQorICAgICAgICAgICAgbV9jb2RlT3JpZ2luLnNldChnbG9iYWxEYXRh
LCBvd25lciwgY29kZU9yaWdpbik7CisgICAgfQorICAgIAorICAgIFdyaXRlQmFycmllcjxKU0Nl
bGw+IG1fY29kZU9yaWdpbjsKKyAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX2Zyb207CisgICAg
V3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV90bzsKK307CisgICAgICAgIAorY2xhc3MgQ29tbW9uRGF0
YSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uRGF0YSk7CitwdWJsaWM6CisgICAg
Q29tbW9uRGF0YSgpCisgICAgICAgIDogbWF5QmVFeGVjdXRpbmcoZmFsc2UpCisgICAgICAgICwg
aXNKZXR0aXNvbmVkKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBub3RpZnlD
b21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKENvZGVCbG9jayosIE5vZGUqKTsKKyAgICAKKyAg
ICB2b2lkIHNocmlua1RvRml0KCk7CisgICAgCisgICAgVmVjdG9yPFdlYWtSZWZlcmVuY2VUcmFu
c2l0aW9uPiB0cmFuc2l0aW9uczsKKyAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4gPiB3
ZWFrUmVmZXJlbmNlczsKKyAgICAKKyAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBj
b21waWxhdGlvbjsKKyAgICBib29sIG1heUJlRXhlY3V0aW5nOworICAgIGJvb2wgaXNKZXR0aXNv
bmVkOworICAgIGJvb2wgbGl2ZW5lc3NIYXNCZWVuUHJvdmVkOyAvLyBJbml0aWFsaXplZCBhbmQg
dXNlZCBvbiBldmVyeSBHQy4KKyAgICBib29sIGFsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7
IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgorICAgIHVuc2lnbmVkIHZpc2l0
QWdncmVnYXRlSGFzQmVlbkNhbGxlZDsgLy8gVW5zaWduZWQgdG8gbWFrZSBpdCB3b3JrIHNlYW1s
ZXNzbHkgd2l0aCB0aGUgYnJvYWRlc3Qgc2V0IG9mIENBUyBpbXBsZW1lbnRhdGlvbnMuCit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KworI2VuZGlmIC8vIERGR0NvbW1vbkRhdGFfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNDc1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAg
c3RhdGljIHZvaWQgZHVtcEFuZFZlcmlmeUdyYXBoKEdyYXBoJiBncgogfQogCiBlbnVtIENvbXBp
bGVNb2RlIHsgQ29tcGlsZUZ1bmN0aW9uLCBDb21waWxlT3RoZXIgfTsKLXN0YXRpYyBib29sIGNv
bXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRl
eCkKK3N0YXRpYyBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIEV4ZWNTdGF0
ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJlZlB0cjxKU0M6OkpJVENvZGU+JiBqaXRD
b2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlDaGVjaywgdW5zaWdu
ZWQgb3NyRW50cnlCeXRlY29kZUluZGV4KQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5n
UmVnaW9uKCJERkcgQ29tcGlsYXRpb24gKERyaXZlcikiKTsKICAgICAKQEAgLTE5NywxMiArMTk3
LDEyIEBAIHN0YXRpYyBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1ib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4KQorYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFJlZlB0cjxKU0M6OkpJVENvZGU+JiBqaXRDb2RlLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KQogewogICAgIHJldHVybiBjb21waWxlKENvbXBpbGVPdGhlciwgZXhlYywgY29kZUJsb2Nr
LCBqaXRDb2RlLCAwLCBieXRlY29kZUluZGV4KTsKIH0KIAotYm9vbCB0cnlDb21waWxlRnVuY3Rp
b24oRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmVmUHRyPEpJVENvZGU+
JiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaywg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK2Jvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJlZlB0cjxKU0M6OkpJVENvZGU+JiBqaXRD
b2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaywgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCkKIHsKICAgICByZXR1cm4gY29tcGlsZShDb21waWxlRnVuY3Rpb24s
IGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgJmppdENvZGVXaXRoQXJpdHlDaGVjaywgYnl0ZWNv
ZGVJbmRleCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHJl
dmlzaW9uIDE0NzU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDExICs0MSwxMSBAQCBuYW1lc3BhY2UgREZHIHsKIEpTX0VY
UE9SVF9QUklWQVRFIHVuc2lnbmVkIGdldE51bUNvbXBpbGF0aW9ucygpOwogCiAjaWYgRU5BQkxF
KERGR19KSVQpCi1ib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRy
PEpJVENvZGU+JiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7Ci1ib29sIHRyeUNvbXBpbGVGdW5j
dGlvbihFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBSZWZQdHI8SklUQ29kZT4mLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCk7Citib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpTQzo6
SklUQ29kZT4mLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKK2Jvb2wgdHJ5Q29tcGlsZUZ1bmN0
aW9uKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIFJlZlB0cjxKU0M6OkpJVENvZGU+JiwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpOwogI2Vsc2UKLWlubGluZSBib29sIHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJs
b2NrKiwgUmVmUHRyPEpJVENvZGU+JiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9Ci1pbmxp
bmUgYm9vbCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRy
PEpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiwgdW5zaWduZWQpIHsgcmV0dXJuIGZh
bHNlOyB9CitpbmxpbmUgYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIFJl
ZlB0cjxKU0M6OkpJVENvZGU+JiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUg
Ym9vbCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpT
Qzo6SklUQ29kZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImLCB1bnNpZ25lZCkgeyByZXR1cm4g
ZmFsc2U7IH0KICNlbmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDc1ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4NywxNiAr
Njg3LDYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHZvaWQgbm90aWZ5
Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwotICAgICAgICAK
LSAgICAgICAgbV9jb2RlQmxvY2stPmFwcGVuZFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uKAotICAg
ICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5jb2RlT3JpZ2luT3duZXIoKSwKLSAgICAgICAgICAg
IG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUsCi0gICAg
ICAgICAgICBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7Ci0g
ICAgfQotICAgIAogICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9j
ayogbV9jb2RlQmxvY2s7CiAgICAgUmVmUHRyPFByb2ZpbGVyOjpDb21waWxhdGlvbj4gbV9jb21w
aWxhdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
SklUQ29kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0pJVENvZGU6
OkpJVENvZGUoKQorICAgIDogRGlyZWN0SklUQ29kZShERkdKSVQpCit7Cit9CisKK0pJVENvZGU6
On5KSVRDb2RlKCkKK3sKK30KKworQ29tbW9uRGF0YSogSklUQ29kZTo6ZGZnQ29tbW9uKCkKK3sK
KyAgICByZXR1cm4gJmNvbW1vbjsKK30KKworSklUQ29kZSogSklUQ29kZTo6ZGZnKCkKK3sKKyAg
ICByZXR1cm4gdGhpczsKK30KKwordm9pZCBKSVRDb2RlOjpzaHJpbmtUb0ZpdCgpCit7CisgICAg
Y29tbW9uLnNocmlua1RvRml0KCk7CisgICAgb3NyRW50cnkuc2hyaW5rVG9GaXQoKTsKKyAgICBv
c3JFeGl0LnNocmlua1RvRml0KCk7CisgICAgc3BlY3VsYXRpb25SZWNvdmVyeS5zaHJpbmtUb0Zp
dCgpOworICAgIG1pbmlmaWVkREZHLnByZXBhcmVBbmRTaHJpbmsoKTsKKyAgICB2YXJpYWJsZUV2
ZW50U3RyZWFtLnNocmlua1RvRml0KCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR0pJVENvZGVfaAorI2RlZmluZSBERkdKSVRDb2RlX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdDb21tb25EYXRhLmgiCisjaW5jbHVkZSAiREZHTWluaWZpZWRHcmFwaC5oIgorI2lu
Y2x1ZGUgIkRGR09TUkVudHJ5LmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgorI2luY2x1ZGUg
IkRGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisjaW5jbHVk
ZSAiSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRW
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBKSVRD
b21waWxlcjsKKworY2xhc3MgSklUQ29kZSA6IHB1YmxpYyBEaXJlY3RKSVRDb2RlIHsKK3B1Ymxp
YzoKKyAgICBKSVRDb2RlKCk7CisgICAgfkpJVENvZGUoKTsKKyAgICAKKyAgICBDb21tb25EYXRh
KiBkZmdDb21tb24oKTsKKyAgICBKSVRDb2RlKiBkZmcoKTsKKyAgICAKKyAgICBPU1JFbnRyeURh
dGEqIGFwcGVuZE9TUkVudHJ5RGF0YSh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBt
YWNoaW5lQ29kZU9mZnNldCkKKyAgICB7CisgICAgICAgIERGRzo6T1NSRW50cnlEYXRhIGVudHJ5
OworICAgICAgICBlbnRyeS5tX2J5dGVjb2RlSW5kZXggPSBieXRlY29kZUluZGV4OworICAgICAg
ICBlbnRyeS5tX21hY2hpbmVDb2RlT2Zmc2V0ID0gbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgICAg
IG9zckVudHJ5LmFwcGVuZChlbnRyeSk7CisgICAgICAgIHJldHVybiAmb3NyRW50cnkubGFzdCgp
OworICAgIH0KKyAgICAKKyAgICBPU1JFbnRyeURhdGEqIG9zckVudHJ5RGF0YUZvckJ5dGVjb2Rl
SW5kZXgodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlC
aW5hcnlTZWFyY2g8T1NSRW50cnlEYXRhLCB1bnNpZ25lZD4oCisgICAgICAgICAgICBvc3JFbnRy
eSwgb3NyRW50cnkuc2l6ZSgpLCBieXRlY29kZUluZGV4LAorICAgICAgICAgICAgZ2V0T1NSRW50
cnlEYXRhQnl0ZWNvZGVJbmRleCk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGFwcGVuZE9T
UkV4aXQoY29uc3QgT1NSRXhpdCYgZXhpdCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHJlc3Vs
dCA9IG9zckV4aXQuc2l6ZSgpOworICAgICAgICBvc3JFeGl0LmFwcGVuZChleGl0KTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgT1NSRXhpdCYgbGFzdE9TUkV4aXQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9zckV4aXQubGFzdCgpOworICAgIH0KKyAgICAKKyAg
ICB1bnNpZ25lZCBhcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KGNvbnN0IFNwZWN1bGF0aW9uUmVj
b3ZlcnkmIHJlY292ZXJ5KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gc3BlY3Vs
YXRpb25SZWNvdmVyeS5zaXplKCk7CisgICAgICAgIHNwZWN1bGF0aW9uUmVjb3ZlcnkuYXBwZW5k
KHJlY292ZXJ5KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdW5z
aWduZWQgYXBwZW5kV2F0Y2hwb2ludChjb25zdCBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50JiB3
YXRjaHBvaW50KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gd2F0Y2hwb2ludHMu
c2l6ZSgpOworICAgICAgICB3YXRjaHBvaW50cy5hcHBlbmQod2F0Y2hwb2ludCk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKKyAg
ICAgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBKSVRDb21waWxlcjsgLy8gQWxsb3cg
SklUQ29tcGlsZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCkuCisKK3B1YmxpYzoKKyAgICBDb21tb25E
YXRhIGNvbW1vbjsKKyAgICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+IG9zckVudHJ5OworICAg
IFNlZ21lbnRlZFZlY3RvcjxERkc6Ok9TUkV4aXQsIDg+IG9zckV4aXQ7CisgICAgVmVjdG9yPERG
Rzo6U3BlY3VsYXRpb25SZWNvdmVyeT4gc3BlY3VsYXRpb25SZWNvdmVyeTsKKyAgICBTZWdtZW50
ZWRWZWN0b3I8SnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCwgMSwgMD4gd2F0Y2hwb2ludHM7Cisg
ICAgREZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRTdHJlYW07CisgICAgREZH
OjpNaW5pZmllZEdyYXBoIG1pbmlmaWVkREZHOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdKSVRDb2Rl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAJKHJldmlzaW9uIDE0NzU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRDb2Rl
LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkRGR1JlZ2lzdGVyQmFuay5oIgpAQCAtNDQsNiArNDUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBKSVRDb21waWxlcjo6SklUQ29tcGlsZXIo
R3JhcGgmIGRmZykKICAgICA6IENDYWxsSGVscGVycygmZGZnLm1fZ2xvYmFsRGF0YSwgZGZnLm1f
Y29kZUJsb2NrKQogICAgICwgbV9ncmFwaChkZmcpCisgICAgLCBtX2ppdENvZGUoYWRvcHRSZWYo
bmV3IEpJVENvZGUoKSkpCiAgICAgLCBtX2N1cnJlbnRDb2RlT3JpZ2luSW5kZXgoMCkKIHsKICAg
ICBpZiAoc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkgfHwgbV9ncmFwaC5tX2dsb2JhbERhdGEubV9w
ZXJCeXRlY29kZVByb2ZpbGVyKQpAQCAtNTIsMjkgKzU0LDI5IEBAIEpJVENvbXBpbGVyOjpKSVRD
b21waWxlcihHcmFwaCYgZGZnKQogCiB2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoKQog
ewotICAgIEFTU0VSVChjb2RlQmxvY2soKS0+bnVtYmVyT2ZPU1JFeGl0cygpID09IG1fZXhpdENv
bXBpbGF0aW9uSW5mby5zaXplKCkpOworICAgIEFTU0VSVChtX2ppdENvZGUtPm9zckV4aXQuc2l6
ZSgpID09IG1fZXhpdENvbXBpbGF0aW9uSW5mby5zaXplKCkpOwogICAgIGlmIChtX2dyYXBoLm1f
Y29tcGlsYXRpb24pIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvZGVCbG9j
aygpLT5udW1iZXJPZk9TUkV4aXRzKCk7ICsraSkgewotICAgICAgICAgICAgT1NSRXhpdCYgZXhp
dCA9IGNvZGVCbG9jaygpLT5vc3JFeGl0KGkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBPU1JF
eGl0JiBleGl0ID0gbV9qaXRDb2RlLT5vc3JFeGl0W2ldOwogICAgICAgICAgICAgVmVjdG9yPExh
YmVsPiBsYWJlbHM7CiAgICAgICAgICAgICBpZiAoZXhpdC5tX3dhdGNocG9pbnRJbmRleCA9PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpIHsKICAgICAgICAgICAgICAgICBP
U1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9leGl0Q29tcGlsYXRpb25JbmZvW2ldOwog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpbmZvLm1fZmFpbHVyZUp1
bXBzLmp1bXBzKCkuc2l6ZSgpOyArK2opCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscy5hcHBl
bmQoaW5mby5tX2ZhaWx1cmVKdW1wcy5qdW1wcygpW2pdLmxhYmVsKCkpOwogICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChjb2RlQmxvY2soKS0+d2F0Y2hw
b2ludChleGl0Lm1fd2F0Y2hwb2ludEluZGV4KS5zb3VyY2VMYWJlbCgpKTsKKyAgICAgICAgICAg
ICAgICBsYWJlbHMuYXBwZW5kKG1faml0Q29kZS0+d2F0Y2hwb2ludHNbZXhpdC5tX3dhdGNocG9p
bnRJbmRleF0uc291cmNlTGFiZWwoKSk7CiAgICAgICAgICAgICBtX2V4aXRTaXRlTGFiZWxzLmFw
cGVuZChsYWJlbHMpOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjb2RlQmxvY2soKS0+bnVtYmVyT2ZPU1JFeGl0cygpOyArK2kpIHsKLSAgICAg
ICAgT1NSRXhpdCYgZXhpdCA9IGNvZGVCbG9jaygpLT5vc3JFeGl0KGkpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2ppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgT1NSRXhpdCYgZXhpdCA9IG1faml0Q29kZS0+b3NyRXhpdFtpXTsKICAgICAgICAgSnVtcExp
c3QmIGZhaWx1cmVKdW1wcyA9IG1fZXhpdENvbXBpbGF0aW9uSW5mb1tpXS5tX2ZhaWx1cmVKdW1w
czsKICAgICAgICAgQVNTRVJUKGZhaWx1cmVKdW1wcy5lbXB0eSgpID09IChleGl0Lm1fd2F0Y2hw
b2ludEluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkpOwogICAg
ICAgICBpZiAoZXhpdC5tX3dhdGNocG9pbnRJbmRleCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCkpCiAgICAgICAgICAgICBmYWlsdXJlSnVtcHMubGluayh0aGlzKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgY29kZUJsb2NrKCktPndhdGNocG9pbnQoZXhpdC5tX3dh
dGNocG9pbnRJbmRleCkuc2V0RGVzdGluYXRpb24obGFiZWwoKSk7CisgICAgICAgICAgICBtX2pp
dENvZGUtPndhdGNocG9pbnRzW2V4aXQubV93YXRjaHBvaW50SW5kZXhdLnNldERlc3RpbmF0aW9u
KGxhYmVsKCkpOwogICAgICAgICBqaXRBc3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwogICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihpKSwgJmdsb2JhbERhdGEoKS0+b3NyRXhpdEluZGV4KTsK
ICAgICAgICAgZXhpdC5zZXRQYXRjaGFibGVDb2RlT2Zmc2V0KHBhdGNoYWJsZUp1bXAoKSk7CkBA
IC0yMTUsMTYgKzIxNywxNiBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxp
bmtCCiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRUaHVuayA9IGdsb2Jh
bERhdGEoKS0+Z2V0Q1RJU3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKICAg
ICBDb2RlTG9jYXRpb25MYWJlbCB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbChvc3JFeGl0VGh1
bmsuY29kZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29kZUJsb2NrKCktPm51
bWJlck9mT1NSRXhpdHMoKTsgKytpKSB7Ci0gICAgICAgIE9TUkV4aXQmIGV4aXQgPSBjb2RlQmxv
Y2soKS0+b3NyRXhpdChpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qaXRDb2Rl
LT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CisgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2ppdENv
ZGUtPm9zckV4aXRbaV07CiAgICAgICAgIGxpbmtCdWZmZXIubGluayhleGl0LmdldFBhdGNoYWJs
ZUNvZGVPZmZzZXRBc0p1bXAoKSwgdGFyZ2V0KTsKICAgICAgICAgZXhpdC5jb3JyZWN0SnVtcChs
aW5rQnVmZmVyKTsKICAgICAgICAgaWYgKGV4aXQubV93YXRjaHBvaW50SW5kZXggIT0gc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICAgICAgICAgY29kZUJsb2NrKCkt
PndhdGNocG9pbnQoZXhpdC5tX3dhdGNocG9pbnRJbmRleCkuY29ycmVjdExhYmVscyhsaW5rQnVm
ZmVyKTsKKyAgICAgICAgICAgIG1faml0Q29kZS0+d2F0Y2hwb2ludHNbZXhpdC5tX3dhdGNocG9p
bnRJbmRleF0uY29ycmVjdExhYmVscyhsaW5rQnVmZmVyKTsKICAgICB9CiAgICAgCiAgICAgaWYg
KG1fZ3JhcGgubV9jb21waWxhdGlvbikgewotICAgICAgICBBU1NFUlQobV9leGl0U2l0ZUxhYmVs
cy5zaXplKCkgPT0gY29kZUJsb2NrKCktPm51bWJlck9mT1NSRXhpdHMoKSk7CisgICAgICAgIEFT
U0VSVChtX2V4aXRTaXRlTGFiZWxzLnNpemUoKSA9PSBtX2ppdENvZGUtPm9zckV4aXQuc2l6ZSgp
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZXhpdFNpdGVMYWJlbHMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgICAgIFZlY3RvcjxMYWJlbD4mIGxhYmVscyA9IG1fZXhpdFNp
dGVMYWJlbHNbaV07CiAgICAgICAgICAgICBWZWN0b3I8Y29uc3Qgdm9pZCo+IGFkZHJlc3NlczsK
QEAgLTIzNSwxMiArMjM3LDEzIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYg
bGlua0IKICAgICB9IGVsc2UKICAgICAgICAgQVNTRVJUKCFtX2V4aXRTaXRlTGFiZWxzLnNpemUo
KSk7CiAgICAgCi0gICAgY29kZUJsb2NrKCktPnNhdmVDb21waWxhdGlvbihtX2dyYXBoLm1fY29t
cGlsYXRpb24pOworICAgIG1faml0Q29kZS0+Y29tbW9uLmNvbXBpbGF0aW9uID0gbV9ncmFwaC5t
X2NvbXBpbGF0aW9uOwogICAgIAorICAgIG1faml0Q29kZS0+c2hyaW5rVG9GaXQoKTsKICAgICBj
b2RlQmxvY2soKS0+c2hyaW5rVG9GaXQoQ29kZUJsb2NrOjpMYXRlU2hyaW5rKTsKIH0KIAotYm9v
bCBKSVRDb21waWxlcjo6Y29tcGlsZShSZWZQdHI8SklUQ29kZT4mIGVudHJ5KQorYm9vbCBKSVRD
b21waWxlcjo6Y29tcGlsZShSZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnkpCiB7CiAgICAgU2Ft
cGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBCYWNrZW5kIik7CiAKQEAgLTI3MSwxMyAr
Mjc0LDEyIEBAIGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGUoUmVmUHRyPEpJVENvZGUKICAgICBp
ZiAobV9ncmFwaC5tX2NvbXBpbGF0aW9uKQogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+cmVwb3J0
VG9Qcm9maWxlcihtX2dyYXBoLm1fY29tcGlsYXRpb24uZ2V0KCksIGxpbmtCdWZmZXIpOwogCi0g
ICAgZW50cnkgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSgKLSAgICAgICAgbGlua0J1ZmZl
ci5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKSwKLSAgICAgICAgSklUQ29kZTo6REZH
SklUKSk7CisgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihsaW5rQnVmZmVyLmZpbmFs
aXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpKTsKKyAgICBlbnRyeSA9IG1faml0Q29kZTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKFJl
ZlB0cjxKSVRDb2RlPiYgZW50cnksIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgZW50cnlXaXRoQXJp
dHlDaGVjaykKK2Jvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihSZWZQdHI8SlNDOjpK
SVRDb2RlPiYgZW50cnksIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgZW50cnlXaXRoQXJpdHlDaGVj
aykKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIEJhY2tlbmQiKTsK
ICAgICAKQEAgLTM2NSw5ICszNjcsOCBAQCBib29sIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rp
b24oUmVmUHRyCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5yZXBvcnRUb1Byb2ZpbGVyKG1fZ3Jh
cGgubV9jb21waWxhdGlvbi5nZXQoKSwgbGlua0J1ZmZlcik7CiAKICAgICBlbnRyeVdpdGhBcml0
eUNoZWNrID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGFyaXR5Q2hlY2spOwotICAgIGVudHJ5ID0g
YWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoCi0gICAgICAgIGxpbmtCdWZmZXIuZmluYWxpemVD
b2RlV2l0aG91dERpc2Fzc2VtYmx5KCksCi0gICAgICAgIEpJVENvZGU6OkRGR0pJVCkpOworICAg
IG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYobGlua0J1ZmZlci5maW5hbGl6ZUNvZGVXaXRo
b3V0RGlzYXNzZW1ibHkoKSk7CisgICAgZW50cnkgPSBtX2ppdENvZGU7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmgJKHJldmlzaW9uIDE0NzU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkRG
R0ZQUkluZm8uaCIKICNpbmNsdWRlICJERkdHUFJJbmZvLmgiCiAjaW5jbHVkZSAiREZHR3JhcGgu
aCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGF0
aW9uSW5mby5oIgogI2luY2x1ZGUgIkRGR1JlZ2lzdGVyQmFuay5oIgogI2luY2x1ZGUgIkRGR1Jl
Z2lzdGVyU2V0LmgiCkBAIC0yNDUsOCArMjQ2LDggQEAgY2xhc3MgSklUQ29tcGlsZXIgOiBwdWJs
aWMgQ0NhbGxIZWxwZXJzIAogcHVibGljOgogICAgIEpJVENvbXBpbGVyKEdyYXBoJiBkZmcpOwog
ICAgIAotICAgIGJvb2wgY29tcGlsZShSZWZQdHI8SklUQ29kZT4mIGVudHJ5KTsKLSAgICBib29s
IGNvbXBpbGVGdW5jdGlvbihSZWZQdHI8SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHImIGVudHJ5V2l0aEFyaXR5Q2hlY2spOworICAgIGJvb2wgY29tcGlsZShSZWZQdHI8SlND
OjpKSVRDb2RlPiYgZW50cnkpOworICAgIGJvb2wgY29tcGlsZUZ1bmN0aW9uKFJlZlB0cjxKU0M6
OkpJVENvZGU+JiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBlbnRyeVdpdGhBcml0eUNo
ZWNrKTsKIAogICAgIC8vIEFjY2Vzc29ycyBmb3IgcHJvcGVydGllcy4KICAgICBHcmFwaCYgZ3Jh
cGgoKSB7IHJldHVybiBtX2dyYXBoOyB9CkBAIC0zNjgsNyArMzY5LDcgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgYWRkV2Vha1JlZmVyZW5jZShKU0NlbGwqIHRhcmdldCkKICAgICB7Ci0gICAg
ICAgIG1fY29kZUJsb2NrLT5hcHBlbmRXZWFrUmVmZXJlbmNlKHRhcmdldCk7CisgICAgICAgIG1f
aml0Q29kZS0+Y29tbW9uLndlYWtSZWZlcmVuY2VzLmFwcGVuZChXcml0ZUJhcnJpZXI8SlNDZWxs
PihtX2dyYXBoLm1fZ2xvYmFsRGF0YSwgY29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCB0
YXJnZXQpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBhZGRXZWFrUmVmZXJlbmNlcyhjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCkKQEAgLTM5Miw3ICszOTMsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIGlmICghYmFzaWNCbG9jay5jZmFIYXNWaXNpdGVkKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKLSAgICAgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9jaygpLT5h
cHBlbmRERkdPU1JFbnRyeURhdGEoYmFzaWNCbG9jay5ieXRlY29kZUJlZ2luLCBsaW5rQnVmZmVy
Lm9mZnNldE9mKGJsb2NrSGVhZCkpOworICAgICAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0gbV9q
aXRDb2RlLT5hcHBlbmRPU1JFbnRyeURhdGEoYmFzaWNCbG9jay5ieXRlY29kZUJlZ2luLCBsaW5r
QnVmZmVyLm9mZnNldE9mKGJsb2NrSGVhZCkpOwogICAgICAgICAKICAgICAgICAgZW50cnktPm1f
ZXhwZWN0ZWRWYWx1ZXMgPSBiYXNpY0Jsb2NrLnZhbHVlc0F0SGVhZDsKICAgICAgICAgCkBAIC00
MTcsNiArNDE4LDggQEAgcHVibGljOgogICAgICAgICBVTlVTRURfUEFSQU0obGlua0J1ZmZlcik7
CiAjZW5kaWYKICAgICB9CisgICAgCisgICAgUGFzc1JlZlB0cjxKSVRDb2RlPiBqaXRDb2RlKCkg
eyByZXR1cm4gbV9qaXRDb2RlOyB9CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE9TUkV4
aXRKdW1wUGxhY2Vob2xkZXI7CkBAIC00MzUsNiArNDM4LDggQEAgcHJpdmF0ZToKIAogICAgIE93
blB0cjxEaXNhc3NlbWJsZXI+IG1fZGlzYXNzZW1ibGVyOwogICAgIAorICAgIFJlZlB0cjxKSVRD
b2RlPiBtX2ppdENvZGU7CisgICAgCiAgICAgLy8gVmVjdG9yIG9mIGNhbGxzIG91dCBmcm9tIEpJ
VCBjb2RlLCBpbmNsdWRpbmcgZXhjZXB0aW9uIGhhbmRsZXIgaW5mb3JtYXRpb24uCiAgICAgLy8g
Q291bnQgb2YgdGhlIG51bWJlciBvZiBDYWxsUmVjb3JkcyB3aXRoIGV4Y2VwdGlvbiBoYW5kbGVy
cy4KICAgICBWZWN0b3I8Q2FsbExpbmtSZWNvcmQ+IG1fY2FsbHM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMTQ3NTgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCiAj
aW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpAQCAtNDksNyArNTAsNyBA
QCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAjZW5kaWYKICAgICAK
ICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAg
IE9TUkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxvY2stPmRmZ09TUkVudHJ5RGF0YUZvckJ5dGVj
b2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CisgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IGNvZGVC
bG9jay0+Z2V0SklUQ29kZSgpLT5kZmcoKS0+b3NyRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChi
eXRlY29kZUluZGV4KTsKICAgICAKICAgICBpZiAoIWVudHJ5KSB7CiAjaWYgRU5BQkxFKEpJVF9W
RVJCT1NFX09TUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCShy
ZXZpc2lvbiAxNDc1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQu
aAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBwcml2YXRlOgogLy8gVGhpcyBzdHJ1
Y3R1cmUgZGVzY3JpYmVzIGhvdyB0byBleGl0IHRoZSBzcGVjdWxhdGl2ZSBwYXRoIGJ5CiAvLyBn
b2luZyBpbnRvIGJhc2VsaW5lIGNvZGUuCiBzdHJ1Y3QgT1NSRXhpdCB7Ci0gICAgT1NSRXhpdChF
eGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwgU3Bl
Y3VsYXRpdmVKSVQqLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRl
eCA9IDApOworICAgIE9TUkV4aXQoRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiwgdW5zaWduZWQgc3RyZWFtSW5kZXgs
IHVuc2lnbmVkIHJlY292ZXJ5SW5kZXggPSBVSU5UX01BWCk7CiAgICAgCiAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIG1fY29kZTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDE0NzU4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVk
ZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkxpbmtC
dWZmZXIuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZl
ci5oIgpAQCAtNTEsNyArNTIsNyBAQCB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhl
YykKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwog
ICAgIAogICAgIHVpbnQzMl90IGV4aXRJbmRleCA9IGdsb2JhbERhdGEtPm9zckV4aXRJbmRleDsK
LSAgICBPU1JFeGl0JiBleGl0ID0gY29kZUJsb2NrLT5vc3JFeGl0KGV4aXRJbmRleCk7CisgICAg
T1NSRXhpdCYgZXhpdCA9IGNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLT5kZmcoKS0+b3NyRXhpdFtl
eGl0SW5kZXhdOwogICAgIAogICAgIC8vIE1ha2Ugc3VyZSBhbGwgY29kZSBvbiBvdXIgaW5saW5l
IHN0YWNrIGlzIEpJVCBjb21waWxlZC4gVGhpcyBpcyBuZWNlc3Nhcnkgc2luY2UKICAgICAvLyB3
ZSBtYXkgb3B0IHRvIGlubGluZSBhIGNvZGUgYmxvY2sgZXZlbiBiZWZvcmUgaXQgaGFkIGV2ZXIg
YmVlbiBjb21waWxlZCBieSB0aGUKQEAgLTcwLDcgKzcxLDcgQEAgdm9pZCBjb21waWxlT1NSRXhp
dChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgCiAgICAgLy8gQ29tcHV0ZSB0aGUgdmFsdWUgcmVjb3Zl
cmllcy4KICAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiBvcGVyYW5kczsKLSAgICBjb2RlQmxv
Y2stPnZhcmlhYmxlRXZlbnRTdHJlYW0oKS5yZWNvbnN0cnVjdChjb2RlQmxvY2ssIGV4aXQubV9j
b2RlT3JpZ2luLCBjb2RlQmxvY2stPm1pbmlmaWVkREZHKCksIGV4aXQubV9zdHJlYW1JbmRleCwg
b3BlcmFuZHMpOworICAgIGNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLT5kZmcoKS0+dmFyaWFibGVF
dmVudFN0cmVhbS5yZWNvbnN0cnVjdChjb2RlQmxvY2ssIGV4aXQubV9jb2RlT3JpZ2luLCBjb2Rl
QmxvY2stPmdldEpJVENvZGUoKS0+ZGZnKCktPm1pbmlmaWVkREZHLCBleGl0Lm1fc3RyZWFtSW5k
ZXgsIG9wZXJhbmRzKTsKICAgICAKICAgICAvLyBUaGVyZSBtYXkgYmUgYW4gb3ZlcnJpZGUsIGZv
ciBmb3J3YXJkIHNwZWN1bGF0aW9ucy4KICAgICBpZiAoISFleGl0Lm1fdmFsdWVSZWNvdmVyeU92
ZXJyaWRlKSB7CkBAIC03OSw4ICs4MCw4IEBAIHZvaWQgY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRl
KiBleGVjKQogICAgIH0KICAgICAKICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9
IDA7Ci0gICAgaWYgKGV4aXQubV9yZWNvdmVyeUluZGV4KQotICAgICAgICByZWNvdmVyeSA9ICZj
b2RlQmxvY2stPnNwZWN1bGF0aW9uUmVjb3ZlcnkoZXhpdC5tX3JlY292ZXJ5SW5kZXggLSAxKTsK
KyAgICBpZiAoZXhpdC5tX3JlY292ZXJ5SW5kZXggIT0gVUlOVF9NQVgpCisgICAgICAgIHJlY292
ZXJ5ID0gJmNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLT5kZmcoKS0+c3BlY3VsYXRpb25SZWNvdmVy
eVtleGl0Lm1fcmVjb3ZlcnlJbmRleF07CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0Up
CiAgICAgZGF0YUxvZygKQEAgLTk1LDkgKzk2LDkgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVj
U3RhdGUqIGV4ZWMpCiAKICAgICAgICAgaml0LmppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7
CiAgICAgICAgIAotICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
ICYmIGNvZGVCbG9jay0+Y29tcGlsYXRpb24oKSkgeworICAgICAgICBpZiAoZ2xvYmFsRGF0YS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIGNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLT5kZmdDb21t
b24oKS0+Y29tcGlsYXRpb24pIHsKICAgICAgICAgICAgIFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0
YWJhc2UgPSAqZ2xvYmFsRGF0YS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyOwotICAgICAgICAgICAg
UHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGNvZGVCbG9jay0+Y29tcGlsYXRp
b24oKTsKKyAgICAgICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBj
b2RlQmxvY2stPmdldEpJVENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBQcm9maWxlcjo6T1NSRXhpdCogcHJvZmlsZXJFeGl0
ID0gY29tcGlsYXRpb24tPmFkZE9TUkV4aXQoCiAgICAgICAgICAgICAgICAgZXhpdEluZGV4LCBQ
cm9maWxlcjo6T3JpZ2luU3RhY2soZGF0YWJhc2UsIGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmln
aW4pLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNDc1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MDM1LDEzICs0MDM1LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgCiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOiB7CiAgICAgICAgIEFT
U0VSVChpc0tub3duQ2VsbChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKLSAgICAgICAgbV9qaXQu
Z3JhcGgoKS5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKG5vZGUpOworICAgICAg
ICBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0
aW9uKG1faml0LmNvZGVCbG9jaygpLCBub2RlKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7Ci0gICAgICAg
IG1faml0LmdyYXBoKCkubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihub2RlKTsK
KyAgICAgICAgbV9qaXQuaml0Q29kZSgpLT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJl
VHJhbnNpdGlvbihtX2ppdC5jb2RlQmxvY2soKSwgbm9kZSk7CiAKICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTQ3NTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzk0MSwxMyArMzk0MSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIAogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZTogewogICAg
ICAgICBBU1NFUlQoaXNLbm93bkNlbGwobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7Ci0gICAgICAg
IG1faml0LmdyYXBoKCkubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihub2RlKTsK
KyAgICAgICAgbV9qaXQuaml0Q29kZSgpLT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJl
VHJhbnNpdGlvbihtX2ppdC5jb2RlQmxvY2soKSwgbm9kZSk7CiAgICAgICAgIG5vUmVzdWx0KG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0
dXJlOiB7Ci0gICAgICAgIG1faml0LmdyYXBoKCkubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJh
bnNpdGlvbihub2RlKTsKKyAgICAgICAgbV9qaXQuaml0Q29kZSgpLT5jb21tb24ubm90aWZ5Q29t
cGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihtX2ppdC5jb2RlQmxvY2soKSwgbm9kZSk7CiAKICAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNDc1ODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgsOCArNDgsOCBAQCBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVK
SVQoSklUQ29tcGlsCiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgoKS5tX2xvY2FsVmFycykK
ICAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkK
ICAgICAsIG1fc3RhdGUobV9qaXQuZ3JhcGgoKSkKLSAgICAsIG1fc3RyZWFtKCZqaXQuY29kZUJs
b2NrKCktPnZhcmlhYmxlRXZlbnRTdHJlYW0oKSkKLSAgICAsIG1fbWluaWZpZWRHcmFwaCgmaml0
LmNvZGVCbG9jaygpLT5taW5pZmllZERGRygpKQorICAgICwgbV9zdHJlYW0oJmppdC5qaXRDb2Rl
KCktPnZhcmlhYmxlRXZlbnRTdHJlYW0pCisgICAgLCBtX21pbmlmaWVkR3JhcGgoJmppdC5qaXRD
b2RlKCktPm1pbmlmaWVkREZHKQogICAgICwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyhmYWxz
ZSkKIHsKIH0KQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpiYWNrd2Fy
ZFNwZWN1bGF0aW9uCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJn
dW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKGp1bXBU
b0ZhaWwpOwotICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2lu
ZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CisgICAgbV9qaXQuaml0Q29k
ZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3Jh
cGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVh
bS0+c2l6ZSgpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhY2t3YXJkU3BlY3VsYXRp
b25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUq
IG5vZGUsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCkBAIC0x
MTgsNyArMTE4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRTcGVjdWxhdGlvbgog
ICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwg
bV9jYW5FeGl0KTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wc1RvRmFpbCk7Ci0gICAg
bV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291
cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSks
IHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKKyAgICBtX2ppdC5qaXRDb2RlKCktPmFwcGVuZE9T
UkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsK
IH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5k
LCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBUb0ZhaWwpCkBAIC0xNDEsOSArMTQxLDkgQEAgT1NSRXhpdEp1bXBQbGFjZWhv
bGRlciBTcGVjdWxhdGl2ZUpJVDo6YgogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAg
cmV0dXJuIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIoKTsKICAgICBBU1NFUlQobV9pc0NoZWNraW5n
QXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gbV9qaXQu
Y29kZUJsb2NrKCktPm51bWJlck9mT1NSRXhpdHMoKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IG1f
aml0LmppdENvZGUoKS0+b3NyRXhpdC5zaXplKCk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8o
KTsKLSAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpz
VmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZv
cihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOworICAgIG1faml0LmppdENvZGUoKS0+
YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCku
bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNp
emUoKSkpOwogICAgIHJldHVybiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyKGluZGV4KTsKIH0KIApA
QCAtMTczLDkgKzE3Myw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhY2t3YXJkU3BlY3VsYXRp
b24KICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQo
bV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwotICAgIG1faml0LmNvZGVC
bG9jaygpLT5hcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KHJlY292ZXJ5KTsKKyAgICB1bnNpZ25l
ZCByZWNvdmVyeUluZGV4ID0gbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRTcGVjdWxhdGlvblJlY292
ZXJ5KHJlY292ZXJ5KTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wVG9GYWlsKTsKLSAg
ICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVT
b3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2Rl
KSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSwgbV9qaXQuY29kZUJsb2NrKCktPm51bWJlck9mU3Bl
Y3VsYXRpb25SZWNvdmVyaWVzKCkpKTsKKyAgICBtX2ppdC5qaXRDb2RlKCktPmFwcGVuZE9TUkV4
aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCksIHJlY292
ZXJ5SW5kZXgpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRTcGVjdWxhdGlv
bkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBu
b2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlv
blJlY292ZXJ5JiByZWNvdmVyeSkKQEAgLTIwNCwxNiArMjA0LDE2IEBAIEp1bXBSZXBsYWNlbWVu
dFdhdGNocG9pbnQqIFNwZWN1bGF0aXZlSkkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgQVNTRVJU
KG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBtX2ppdC5hcHBl
bmRFeGl0SW5mbyhKSVRDb21waWxlcjo6SnVtcExpc3QoKSk7Ci0gICAgT1NSRXhpdCYgZXhpdCA9
IG1faml0LmNvZGVCbG9jaygpLT5vc3JFeGl0KAotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+
YXBwZW5kT1NSRXhpdChPU1JFeGl0KAorICAgIE9TUkV4aXQmIGV4aXQgPSBtX2ppdC5qaXRDb2Rl
KCktPm9zckV4aXRbCisgICAgICAgIG1faml0LmppdENvZGUoKS0+YXBwZW5kT1NSRXhpdChPU1JF
eGl0KAogICAgICAgICAgICAga2luZCwganNWYWx1ZVNvdXJjZSwKICAgICAgICAgICAgIG1faml0
LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwKLSAgICAgICAg
ICAgIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKSk7Ci0gICAgZXhpdC5tX3dhdGNocG9pbnRJbmRl
eCA9IG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRXYXRjaHBvaW50KAorICAgICAgICAgICAgdGhp
cywgbV9zdHJlYW0tPnNpemUoKSkpXTsKKyAgICBleGl0Lm1fd2F0Y2hwb2ludEluZGV4ID0gbV9q
aXQuaml0Q29kZSgpLT5hcHBlbmRXYXRjaHBvaW50KAogICAgICAgICBKdW1wUmVwbGFjZW1lbnRX
YXRjaHBvaW50KG1faml0LndhdGNocG9pbnRMYWJlbCgpKSk7CiAgICAgaWYgKG1fc3BlY3VsYXRp
b25EaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKQogICAgICAgICBjb252ZXJ0TGFzdE9T
UkV4aXRUb0ZvcndhcmQoKTsKLSAgICByZXR1cm4gJm1faml0LmNvZGVCbG9jaygpLT53YXRjaHBv
aW50KGV4aXQubV93YXRjaHBvaW50SW5kZXgpOworICAgIHJldHVybiAmbV9qaXQuaml0Q29kZSgp
LT53YXRjaHBvaW50c1tleGl0Lm1fd2F0Y2hwb2ludEluZGV4XTsKIH0KIAogSnVtcFJlcGxhY2Vt
ZW50V2F0Y2hwb2ludCogU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0
S2luZCBraW5kKQpAQCAtMjIzLDcgKzIyMyw3IEBAIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQq
IFNwZWN1bGF0aXZlSkkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVydExhc3RPU1JFeGl0
VG9Gb3J3YXJkKGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCiB7Ci0gICAgbV9q
aXQuY29kZUJsb2NrKCktPmxhc3RPU1JFeGl0KCkuY29udmVydFRvRm9yd2FyZCgKKyAgICBtX2pp
dC5qaXRDb2RlKCktPmxhc3RPU1JFeGl0KCkuY29udmVydFRvRm9yd2FyZCgKICAgICAgICAgbV9q
aXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS5nZXQoKSwgbV9jdXJyZW50Tm9kZSwgbV9pbmRl
eEluQmxvY2ssIHZhbHVlUmVjb3ZlcnkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHJldmlzaW9uIDE0
NzU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVh
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNp
bmNsdWRlICJERkdWYWx1ZVNvdXJjZS5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlIDx3dGYvRGF0YUxvZy5oPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENv
bXBpbGUuY3BwCShyZXZpc2lvbiAxNDc1ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsMTEgKzE1MSwxMiBAQCB2b2lk
IGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBSZWZQdHI8SlNDOjpKCiAgICAgbGlua0J1ZmZlci5saW5r
KGNhbGxBcml0eUNoZWNrLCBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jay0+bV9pc0NvbnN0cnVjdG9y
ID8gY3RpX29wX2NvbnN0cnVjdF9hcml0eUNoZWNrIDogY3RpX29wX2NhbGxfYXJpdHlDaGVjayk7
CiAgICAgICAgIAogICAgIGppdENvZGVXaXRoQXJpdHlDaGVjayA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZihhcml0eUNoZWNrKTsKLSAgICBqaXRDb2RlID0gYWRvcHRSZWYobmV3IEZUTDo6SklUQ29k
ZSgKKyAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQ29kZSgKICAgICAgICAgZW5naW5lLAog
ICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKICAgICAgICAgICAgIGxpbmtCdWZmZXIsCi0gICAg
ICAgICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxv
Y2tXaXRoSklUVHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSku
ZGF0YSgpKSkpKTsKKyAgICAgICAgICAgICgiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIiwg
dG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBK
SVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKSk7CisgICAgaml0Q29kZSA9IHN0YXRlLmppdENvZGU7
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkocmV2aXNpb24gMTQ3NTg3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMzAgKzMw
LDQwIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAotSklUQ29kZTo6SklU
Q29kZShMTFZNRXhlY3V0aW9uRW5naW5lUmVmIGVuZ2luZSwgQ29kZVJlZiBlbnRyeXBvaW50KQor
SklUQ29kZTo6SklUQ29kZSgpCiAgICAgOiBKU0M6OkpJVENvZGUoRlRMSklUKQotICAgICwgbV9l
bmdpbmUoZW5naW5lKQotICAgICwgbV9lbnRyeXBvaW50KGVudHJ5cG9pbnQpCisgICAgLCBtX2Vu
Z2luZSgwKQogewogfQogCiBKSVRDb2RlOjp+SklUQ29kZSgpCiB7Ci0gICAgTExWTURpc3Bvc2VF
eGVjdXRpb25FbmdpbmUobV9lbmdpbmUpOworICAgIGlmIChtX2VuZ2luZSkKKyAgICAgICAgTExW
TURpc3Bvc2VFeGVjdXRpb25FbmdpbmUobV9lbmdpbmUpOworfQorCit2b2lkIEpJVENvZGU6Omlu
aXRpYWxpemVDb2RlKExMVk1FeGVjdXRpb25FbmdpbmVSZWYgZW5naW5lLCBDb2RlUmVmIGVudHJ5
cG9pbnQpCit7CisgICAgbV9lbmdpbmUgPSBlbmdpbmU7CisgICAgbV9lbnRyeXBvaW50ID0gZW50
cnlwb2ludDsKIH0KIAogSklUQ29kZTo6Q29kZVB0ciBKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbCgp
CiB7CisgICAgUkVMRUFTRV9BU1NFUlQobV9lbnRyeXBvaW50KTsKICAgICByZXR1cm4gbV9lbnRy
eXBvaW50LmNvZGUoKTsKIH0KIAogdm9pZCogSklUQ29kZTo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9m
ZnNldChzaXplX3Qgb2Zmc2V0KQogeworICAgIFJFTEVBU0VfQVNTRVJUKG1fZW50cnlwb2ludCk7
CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fZW50cnlwb2ludC5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSkgKyBvZmZzZXQ7CiB9CiAKIHZvaWQqIEpJVENvZGU6OmRhdGFB
ZGRyZXNzQXRPZmZzZXQoc2l6ZV90KQogeworICAgIFJFTEVBU0VfQVNTRVJUKG1fZW50cnlwb2lu
dCk7CisKICAgICAvLyBXZSBjYW4ndCBwYXRjaCBGVEwgY29kZSwgeWV0LiBFdmVuIGlmIHdlIGRp
ZCwgaXQncyBub3QgY2xlYXIgdGhhdCB3ZSB3b3VsZCBkbyBzbwogICAgIC8vIHRocm91Z2ggdGhp
cyBBUEkuCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTYyLDYgKzcyLDgg
QEAgdm9pZCogSklUQ29kZTo6ZGF0YUFkZHJlc3NBdE9mZnNldChzaXplXwogCiB1bnNpZ25lZCBK
SVRDb2RlOjpvZmZzZXRPZih2b2lkKikKIHsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2VudHJ5cG9p
bnQpOworCiAgICAgLy8gV2UgY3VycmVudGx5IGRvbid0IGhhdmUgdmlzaWJpbGl0eSBpbnRvIHRo
ZSBGVEwgY29kZS4KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVy
biAwOwpAQCAtNjksNiArODEsOCBAQCB1bnNpZ25lZCBKSVRDb2RlOjpvZmZzZXRPZih2b2lkKikK
IAogc2l6ZV90IEpJVENvZGU6OnNpemUoKQogeworICAgIFJFTEVBU0VfQVNTRVJUKG1fZW50cnlw
b2ludCk7CisKICAgICAvLyBXZSBkb24ndCBrbm93IHRoZSBzaXplIG9mIEZUTCBjb2RlLCB5ZXQu
IE1ha2UgYSB3aWxkIGd1ZXNzLiBUaGlzIGlzIG1vc3RseSB1c2VkIGZvcgogICAgIC8vIEdDIGxv
YWQgZXN0aW1hdGVzLgogICAgIHJldHVybiAxMDAwOwpAQCAtNzYsMTEgKzkwLDIzIEBAIHNpemVf
dCBKSVRDb2RlOjpzaXplKCkKIAogYm9vbCBKSVRDb2RlOjpjb250YWlucyh2b2lkKikKIHsKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX2VudHJ5cG9pbnQpOworCiAgICAgLy8gV2UgaGF2ZSBubyBpZGVh
IHdoYXQgYWRkcmVzc2VzIHRoZSBGVEwgY29kZSBjb250YWlucywgeWV0LgogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitKSVRDb2RlKiBK
SVRDb2RlOjpmdGwoKQoreworICAgIHJldHVybiB0aGlzOworfQorCitERkc6OkNvbW1vbkRhdGEq
IEpJVENvZGU6OmRmZ0NvbW1vbigpCit7CisgICAgcmV0dXJuICZjb21tb247Cit9CisKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJldmlzaW9uIDE0NzU4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw3IEBACiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAorI2luY2x1ZGUgIkRGR0Nv
bW1vbkRhdGEuaCIKICNpbmNsdWRlICJGVExMTFZNSGVhZGVycy5oIgogI2luY2x1ZGUgIkpJVENv
ZGUuaCIKIApAQCAtMzcsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAKIGNsYXNzIEpJVENvZGUgOiBwdWJsaWMgSlNDOjpKSVRDb2RlIHsKIHB1YmxpYzoKLSAgICBK
SVRDb2RlKExMVk1FeGVjdXRpb25FbmdpbmVSZWYsIENvZGVSZWYgZW50cnlwb2ludCk7CisgICAg
SklUQ29kZSgpOwogICAgIH5KSVRDb2RlKCk7CiAgICAgCiAgICAgQ29kZVB0ciBhZGRyZXNzRm9y
Q2FsbCgpOwpAQCAtNDcsNiArNDgsMTMgQEAgcHVibGljOgogICAgIHNpemVfdCBzaXplKCk7CiAg
ICAgYm9vbCBjb250YWlucyh2b2lkKik7CiAgICAgCisgICAgdm9pZCBpbml0aWFsaXplQ29kZShM
TFZNRXhlY3V0aW9uRW5naW5lUmVmLCBDb2RlUmVmIGVudHJ5cG9pbnQpOworICAgIAorICAgIEpJ
VENvZGUqIGZ0bCgpOworICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uKCk7CisgICAgCisg
ICAgREZHOjpDb21tb25EYXRhIGNvbW1vbjsKKyAgICAKIHByaXZhdGU6CiAgICAgLy8gRklYTUU6
IExMVk0gc2hvdWxkIHVzZSBvdXIgb3duIEpJVCBtZW1vcnkgYWxsb2NhdG9yLCBhbmQgd2Ugc2hv
dWxkbid0IGhhdmUgdG8KICAgICAvLyBrZWVwIGFyb3VuZCBhbiBMTFZNRXhlY3V0aW9uRW5naW5l
UmVmIHRvIGtlZXAgY29kZSBhbGl2ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNDc1ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzAwLDcgKzcwMCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKQogICAgIHsKLSAgICAgICAgY29kZUJsb2NrKCktPmFw
cGVuZFdlYWtSZWZlcmVuY2UobV9ub2RlLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIGFkZFdlYWtS
ZWZlcmVuY2UobV9ub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnRzLgogICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjQ3CkBAIC03MTAs
NyArNzEwLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVQdXRTdHJ1Y3R1cmUo
KQogICAgIHsKLSAgICAgICAgbV9ncmFwaC5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0
aW9uKG1fbm9kZSk7CisgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLm5vdGlmeUNv
bXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24oY29kZUJsb2NrKCksIG1fbm9kZSk7CiAgICAgICAg
IAogICAgICAgICBtX291dC5zdG9yZTY0KAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIo
bV9ub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSksCkBAIC03MTks
NyArNzE5LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVQaGFudG9tUHV0U3Ry
dWN0dXJlKCkKICAgICB7Ci0gICAgICAgIG1fZ3JhcGgubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJl
VHJhbnNpdGlvbihtX25vZGUpOworICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5u
b3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKGNvZGVCbG9jaygpLCBtX25vZGUpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRCdXR0ZXJmbHkoKQpAQCAtMTEwNSw5ICsx
MTA1LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChlZGdlLCBsb3dDZWxs
KGVkZ2UpKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBhZGRXZWFrUmVmZXJlbmNlKEpTQ2VsbCog
dGFyZ2V0KQorICAgIHsKKyAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24ud2Vha1Jl
ZmVyZW5jZXMuYXBwZW5kKAorICAgICAgICAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4oZ2xvYmFs
RGF0YSgpLCBjb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIHRhcmdldCkpOworICAgIH0K
KyAgICAKICAgICBMVmFsdWUgd2Vha1BvaW50ZXIoSlNDZWxsKiBwb2ludGVyKQogICAgIHsKLSAg
ICAgICAgY29kZUJsb2NrKCktPmFwcGVuZFdlYWtSZWZlcmVuY2UocG9pbnRlcik7CisgICAgICAg
IGFkZFdlYWtSZWZlcmVuY2UocG9pbnRlcik7CiAgICAgICAgIHJldHVybiBtX291dC5jb25zdElu
dFB0cihwb2ludGVyKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFN0YXRlLmNwcAkocmV2aXNpb24gMTQ3NTg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDE5IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAordXNpbmcgbmFtZXNwYWNlIERGRzsKKwor
U3RhdGU6OlN0YXRlKEdyYXBoJiBncmFwaCkKKyAgICA6IGdyYXBoKGdyYXBoKQorICAgICwgbW9k
dWxlKDApCisgICAgLCBmdW5jdGlvbigwKQorICAgICwgaml0Q29kZShhZG9wdFJlZihuZXcgSklU
Q29kZSgpKSkKK3sKK30KKwogdm9pZCBTdGF0ZTo6ZHVtcFN0YXRlKGNvbnN0IGNoYXIqIHdoZW4p
CiB7Ci0gICAgZGF0YUxvZygiTExWTSBJUiBmb3IgIiwgQ29kZUJsb2NrV2l0aEpJVFR5cGUoZ3Jh
cGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCksICIgIiwgd2hlbiwgIjpcbiIpOworICAg
IGRhdGFMb2coIkxMVk0gSVIgZm9yICIsIENvZGVCbG9ja1dpdGhKSVRUeXBlKGdyYXBoLm1fY29k
ZUJsb2NrLCBGVEw6OkpJVENvZGU6OkZUTEpJVCksICIgIiwgd2hlbiwgIjpcbiIpOwogICAgIGR1
bXBNb2R1bGUobW9kdWxlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3Rh
dGUuaAkocmV2aXNpb24gMTQ3NTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJERkdH
cmFwaC5oIgogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKyNpbmNsdWRlICJGVExKSVRD
b2RlLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKQEAgLTQwLDE4ICs0MSwxNCBAQCBjbGFzcyBTdGF0ZSB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoU3RhdGUpOwogICAgIAogcHVibGljOgotICAgIFN0YXRlKERGRzo6
R3JhcGgmIGdyYXBoKQotICAgICAgICA6IGdyYXBoKGdyYXBoKQotICAgICAgICAsIG1vZHVsZSgw
KQotICAgICAgICAsIGZ1bmN0aW9uKDApCi0gICAgewotICAgIH0KKyAgICBTdGF0ZShERkc6Okdy
YXBoJiBncmFwaCk7CiAgICAgCiAgICAgLy8gTm9uZSBvZiB0aGVzZSB0aGluZ3MgaXMgb3duZWQg
YnkgU3RhdGUuIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZgogICAgIC8vIEZUTCBwaGFzZXMg
dG8gcHJvcGVybHkgbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgdGhlIG1vZHVsZSBhbmQgZnVuY3Rp
b24uCiAgICAgREZHOjpHcmFwaCYgZ3JhcGg7CiAgICAgTE1vZHVsZSBtb2R1bGU7CiAgICAgTFZh
bHVlIGZ1bmN0aW9uOworICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlOwogICAgIAogICAgIHZv
aWQgZHVtcFN0YXRlKGNvbnN0IGNoYXIqIHdoZW4pOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCShyZXZpc2lvbiAxNDc1ODcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNyArNDEsNyBAQCBERkdDb2RlQmxvY2tzOjp+REZHQ29kZUJsb2NrcygpCiAgICAg
VmVjdG9yPENvZGVCbG9jayosIDE2PiB0b1JlbW92ZTsKICAgICAKICAgICBmb3IgKEhhc2hTZXQ8
Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldC5iZWdpbigpOyBpdGVyICE9IG1fc2V0
LmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCgqaXRlciktPm1fZGZnRGF0YS0+aXNKZXR0
aXNvbmVkKQorICAgICAgICBpZiAoKCppdGVyKS0+Z2V0SklUQ29kZSgpLT5kZmdDb21tb24oKS0+
aXNKZXR0aXNvbmVkKQogICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKCppdGVyKTsKICAgICB9
CiAgICAgCkBAIC01NywxOSArNTcsMTkgQEAgdm9pZCBERkdDb2RlQmxvY2tzOjpqZXR0aXNvbihQ
YXNzT3duUHRyPAogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2Nr
LT5nZXRKSVRUeXBlKCkpKTsKICAgICAKICAgICAvLyBJdCBzaG91bGQgbm90IGhhdmUgYWxyZWFk
eSBiZWVuIGpldHRpc29uZWQuCi0gICAgQVNTRVJUKCFjb2RlQmxvY2stPm1fZGZnRGF0YS0+aXNK
ZXR0aXNvbmVkKTsKKyAgICBBU1NFUlQoIWNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLT5kZmdDb21t
b24oKS0+aXNKZXR0aXNvbmVkKTsKIAogICAgIC8vIFdlIHNob3VsZCBoYXZlIHRoaXMgYmxvY2sg
YWxyZWFkeS4KICAgICBBU1NFUlQobV9zZXQuZmluZChjb2RlQmxvY2spICE9IG1fc2V0LmVuZCgp
KTsKICAgICAKLSAgICBjb2RlQmxvY2stPm1fZGZnRGF0YS0+aXNKZXR0aXNvbmVkID0gdHJ1ZTsK
KyAgICBjb2RlQmxvY2stPmdldEpJVENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzSmV0dGlzb25lZCA9
IHRydWU7CiB9CiAKIHZvaWQgREZHQ29kZUJsb2Nrczo6Y2xlYXJNYXJrcygpCiB7CiAgICAgZm9y
IChIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsgaXRl
ciAhPSBtX3NldC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICgqaXRlciktPm1fZGZnRGF0YS0+
bWF5QmVFeGVjdXRpbmcgPSBmYWxzZTsKLSAgICAgICAgKCppdGVyKS0+bV9kZmdEYXRhLT52aXNp
dEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQgPSBmYWxzZTsKKyAgICAgICAgKCppdGVyKS0+Z2V0SklU
Q29kZSgpLT5kZmdDb21tb24oKS0+bWF5QmVFeGVjdXRpbmcgPSBmYWxzZTsKKyAgICAgICAgKCpp
dGVyKS0+Z2V0SklUQ29kZSgpLT5kZmdDb21tb24oKS0+dmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2Fs
bGVkID0gZmFsc2U7CiAgICAgfQogfQogCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgREZHQ29kZUJs
b2Nrczo6ZGVsZXRlVW5tYXJrZWRKZXR0aXMKICAgICBWZWN0b3I8Q29kZUJsb2NrKiwgMTY+IHRv
UmVtb3ZlOwogICAgIAogICAgIGZvciAoSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRl
ciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9zZXQuZW5kKCk7ICsraXRlcikgewotICAgICAg
ICBpZiAoKCppdGVyKS0+bV9kZmdEYXRhLT5pc0pldHRpc29uZWQgJiYgISgqaXRlciktPm1fZGZn
RGF0YS0+bWF5QmVFeGVjdXRpbmcpCisgICAgICAgIGlmICgoKml0ZXIpLT5nZXRKSVRDb2RlKCkt
PmRmZ0NvbW1vbigpLT5pc0pldHRpc29uZWQgJiYgISgqaXRlciktPmdldEpJVENvZGUoKS0+ZGZn
Q29tbW9uKCktPm1heUJlRXhlY3V0aW5nKQogICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKCpp
dGVyKTsKICAgICB9CiAgICAgCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgREZHQ29kZUJsb2Nrczo6
ZGVsZXRlVW5tYXJrZWRKZXR0aXMKIHZvaWQgREZHQ29kZUJsb2Nrczo6dHJhY2VNYXJrZWRDb2Rl
QmxvY2tzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGZvciAoSGFzaFNldDxDb2RlQmxv
Y2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9zZXQuZW5kKCk7
ICsraXRlcikgewotICAgICAgICBpZiAoKCppdGVyKS0+bV9kZmdEYXRhLT5tYXlCZUV4ZWN1dGlu
ZykKKyAgICAgICAgaWYgKCgqaXRlciktPmdldEpJVENvZGUoKS0+ZGZnQ29tbW9uKCktPm1heUJl
RXhlY3V0aW5nKQogICAgICAgICAgICAgKCppdGVyKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7
CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCShyZXZp
c2lvbiAxNDc1ODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYsMzQgQEAgSlNWYWx1ZSBKSVRDb2RlOjpleGVjdXRl
KEpTU3RhY2sqIHN0YWNrLAogICAgIHJldHVybiBnbG9iYWxEYXRhLT5leGNlcHRpb24gPyBqc051
bGwoKSA6IHJlc3VsdDsKIH0KIAorREZHOjpDb21tb25EYXRhKiBKSVRDb2RlOjpkZmdDb21tb24o
KQoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK0RGRzo6SklUQ29kZSogSklUQ29kZTo6ZGZnKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitGVEw6OkpJVENvZGUqIEpJVENvZGU6
OmZ0bCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
MDsKK30KKwogUGFzc1JlZlB0cjxKSVRDb2RlPiBKSVRDb2RlOjpob3N0RnVuY3Rpb24oSklUQ29k
ZTo6Q29kZVJlZiBjb2RlKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29k
ZShjb2RlLCBIb3N0Q2FsbFRodW5rKSk7CiB9CiAKK0RpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENv
ZGUoSklUVHlwZSBqaXRUeXBlKQorICAgIDogSklUQ29kZShqaXRUeXBlKQoreworfQorCiBEaXJl
Y3RKSVRDb2RlOjpEaXJlY3RKSVRDb2RlKGNvbnN0IEpJVENvZGU6OkNvZGVSZWYgcmVmLCBKSVRU
eXBlIGppdFR5cGUpCiAgICAgOiBKSVRDb2RlKGppdFR5cGUpCiAgICAgLCBtX3JlZihyZWYpCkBA
IC02MSwyNCArODQsMzQgQEAgRGlyZWN0SklUQ29kZTo6fkRpcmVjdEpJVENvZGUoKQogewogfQog
Cit2b2lkIERpcmVjdEpJVENvZGU6OmluaXRpYWxpemVDb2RlUmVmKGNvbnN0IEpJVENvZGU6OkNv
ZGVSZWYgcmVmKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlZik7CisgICAgbV9yZWYgPSBy
ZWY7Cit9CisKIEpJVENvZGU6OkNvZGVQdHIgRGlyZWN0SklUQ29kZTo6YWRkcmVzc0ZvckNhbGwo
KQogeworICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKICAgICByZXR1cm4gbV9yZWYuY29kZSgp
OwogfQogCiB2b2lkKiBEaXJlY3RKSVRDb2RlOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNp
emVfdCBvZmZzZXQpCiB7CisgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwogICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkg
KyBvZmZzZXQ7CiB9CiAKIHZvaWQqIERpcmVjdEpJVENvZGU6OmRhdGFBZGRyZXNzQXRPZmZzZXQo
c2l6ZV90IG9mZnNldCkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3JlZik7CiAgICAgQVNTRVJU
KG9mZnNldCA8PSBzaXplKCkpOyAvLyB1c2UgPD0gaW5zdGVhZCBvZiA8IGJlY2F1c2UgaXQgaXMg
dmFsaWQgdG8gYXNrIGZvciBhbiBhZGRyZXNzIGF0IHRoZSBleGNsdXNpdmUgZW5kIG9mIHRoZSBj
b2RlLgogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihtX3JlZi5jb2RlKCkuZGF0
YUxvY2F0aW9uKCkpICsgb2Zmc2V0OwogfQogCiB1bnNpZ25lZCBEaXJlY3RKSVRDb2RlOjpvZmZz
ZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpCiB7CisgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYp
OwogICAgIGludHB0cl90IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50
ZXJJbnRvQ29kZSkgLSByZWludGVycHJldF9jYXN0PGludHB0cl90PihtX3JlZi5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludHB0cl90PihzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KSkgPT0gcmVzdWx0KTsKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCk7CkBAIC04NiwxMSArMTE5LDEzIEBAIHVuc2lnbmVkIERp
cmVjdEpJVENvZGU6Om9mZnNldE9mKHZvaWQqIHAKIAogc2l6ZV90IERpcmVjdEpJVENvZGU6OnNp
emUoKQogeworICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKICAgICByZXR1cm4gbV9yZWYuc2l6
ZSgpOwogfQogCiBib29sIERpcmVjdEpJVENvZGU6OmNvbnRhaW5zKHZvaWQqIGFkZHJlc3MpCiB7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOwogICAgIHJldHVybiBtX3JlZi5leGVjdXRhYmxl
TWVtb3J5KCktPmNvbnRhaW5zKGFkZHJlc3MpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvZGUuaAkocmV2aXNpb24gMTQ3NTg3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDE0IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCituYW1lc3BhY2UgREZHIHsKK2NsYXNzIENvbW1vbkRhdGE7CitjbGFzcyBK
SVRDb2RlOworfQorbmFtZXNwYWNlIEZUTCB7CitjbGFzcyBKSVRDb2RlOworfQorCiAjaWYgRU5B
QkxFKEpJVCkKIGNsYXNzIEpTR2xvYmFsRGF0YTsKIGNsYXNzIEpTU3RhY2s7CkBAIC0xNDAsNiAr
MTQ4LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQqIGRhdGFBZGRyZXNzQXRPZmZzZXQo
c2l6ZV90IG9mZnNldCkgPSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgb2Zmc2V0T2Yodm9pZCog
cG9pbnRlckludG9Db2RlKSA9IDA7CiAgICAgCisgICAgdmlydHVhbCBERkc6OkNvbW1vbkRhdGEq
IGRmZ0NvbW1vbigpOworICAgIHZpcnR1YWwgREZHOjpKSVRDb2RlKiBkZmcoKTsKKyAgICB2aXJ0
dWFsIEZUTDo6SklUQ29kZSogZnRsKCk7CisgICAgCiAgICAgSlNWYWx1ZSBleGVjdXRlKEpTU3Rh
Y2sqLCBDYWxsRnJhbWUqLCBKU0dsb2JhbERhdGEqKTsKICAgICAKICAgICB2b2lkKiBzdGFydCgp
IHsgcmV0dXJuIGRhdGFBZGRyZXNzQXRPZmZzZXQoMCk7IH0KQEAgLTE1Niw5ICsxNjgsMTIgQEAg
cHJpdmF0ZToKIAogY2xhc3MgRGlyZWN0SklUQ29kZSA6IHB1YmxpYyBKSVRDb2RlIHsKIHB1Ymxp
YzoKKyAgICBEaXJlY3RKSVRDb2RlKEpJVFR5cGUpOwogICAgIERpcmVjdEpJVENvZGUoY29uc3Qg
Q29kZVJlZiwgSklUVHlwZSk7CiAgICAgfkRpcmVjdEpJVENvZGUoKTsKICAgICAKKyAgICB2b2lk
IGluaXRpYWxpemVDb2RlUmVmKENvZGVSZWYgcmVmKTsKKwogICAgIENvZGVQdHIgYWRkcmVzc0Zv
ckNhbGwoKTsKICAgICB2b2lkKiBleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZz
ZXQpOwogICAgIHZvaWQqIGRhdGFBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCk7Cg==
</data>
<flag name="review"
          id="218510"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>