<?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>220249</bug_id>
          
          <creation_ts>2021-01-04 10:43:50 -0800</creation_ts>
          <short_desc>[LFC][Integration] Factor marked text style collection code out of InlineTextBox</short_desc>
          <delta_ts>2021-01-11 09:39:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1717163</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-01-04 10:43:50 -0800</bug_when>
    <thetext>So we can teach LFC to paint selections and other marked text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717166</commentid>
    <comment_count>1</comment_count>
      <attachid>416956</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-01-04 10:46:06 -0800</bug_when>
    <thetext>Created attachment 416956
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717174</commentid>
    <comment_count>2</comment_count>
      <attachid>416957</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-01-04 11:41:22 -0800</bug_when>
    <thetext>Created attachment 416957
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717302</commentid>
    <comment_count>3</comment_count>
      <attachid>417002</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-01-05 07:18:14 -0800</bug_when>
    <thetext>Created attachment 417002
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717399</commentid>
    <comment_count>4</comment_count>
      <attachid>417002</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-01-05 11:05:46 -0800</bug_when>
    <thetext>Comment on attachment 417002
patch

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

&gt; Source/WebCore/rendering/MarkedTextStyle.h:57
&gt; +    float alpha;

hope this never leads to random alpha.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718593</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-10 03:56:35 -0800</bug_when>
    <thetext>Tools/Scripts/svn-apply failed to apply attachment 417002 to trunk.
Please resolve the conflicts and upload a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718596</commentid>
    <comment_count>6</comment_count>
      <attachid>417348</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-01-10 05:42:55 -0800</bug_when>
    <thetext>Created attachment 417348
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718602</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-10 10:09:14 -0800</bug_when>
    <thetext>Committed r271350: &lt;https://trac.webkit.org/changeset/271350&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 417348.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718603</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-01-10 10:10:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/72976067&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718711</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-01-11 09:39:22 -0800</bug_when>
    <thetext>Build fix https://trac.webkit.org/changeset/271364/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416956</attachid>
            <date>2021-01-04 10:46:06 -0800</date>
            <delta_ts>2021-01-04 11:41:22 -0800</delta_ts>
            <desc>patch</desc>
            <filename>marked-text-refactor.patch</filename>
            <type>text/plain</type>
            <size>23829</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzZjJiN2NmY2RlOTQuLjE1NmM0Y2EwNThhMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDM0IEBACisyMDIxLTAxLTA0ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gRmFjdG9yIG1hcmtlZCB0ZXh0IHN0eWxl
IGNvbGxlY3Rpb24gY29kZSBvdXQgb2YgSW5saW5lVGV4dEJveAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMjQ5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU28gd2UgY2FuIHRlYWNoIExGQyB0byBwYWlu
dCBzZWxlY3Rpb25zIGFuZCBvdGhlciBtYXJrZWQgdGV4dC4KKworICAgICAgICAqIHJlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6Ok1hcmtlZFRleHRTdHlsZTo6
YXJlQmFja2dyb3VuZE1hcmtlZFRleHRTdHlsZXNFcXVhbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpNYXJrZWRUZXh0U3R5bGU6OmFyZUZvcmVncm91bmRNYXJr
ZWRUZXh0U3R5bGVzRXF1YWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6TWFya2VkVGV4dFN0eWxlOjphcmVEZWNvcmF0aW9uTWFya2VkVGV4dFN0eWxlc0VxdWFs
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OlN0eWxlZE1hcmtl
ZFRleHQ6OlN0eWxlZE1hcmtlZFRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6Y29tcHV0ZVN0eWxlRm9yVW5tYXJrZWRNYXJrZWRUZXh0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnJlc29sdmVTdHlsZUZvck1h
cmtlZFRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6c3Vi
ZGl2aWRlQW5kUmVzb2x2ZVN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZVRleHRCb3g6OmNvYWxlc2NlQWRqYWNlbnRNYXJrZWRUZXh0cyk6IERlbGV0ZWQuCisgICAgICAg
ICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvTWFya2Vk
VGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlU3R5bGVGb3JNYXJrZWRUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVTdHlsZUZvclVubWFya2VkTWFya2VkVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpzdWJkaXZpZGVBbmRSZXNvbHZlU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29hbGVzY2VBZGphY2VudE1hcmtlZFRleHRzKToKKyAgICAgICAgKiByZW5kZXJpbmcv
TWFya2VkVGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6TWFya2VkVGV4dFN0eWxlOjphcmVCYWNr
Z3JvdW5kTWFya2VkVGV4dFN0eWxlc0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmtlZFRl
eHRTdHlsZTo6YXJlRm9yZWdyb3VuZE1hcmtlZFRleHRTdHlsZXNFcXVhbCk6CisgICAgICAgIChX
ZWJDb3JlOjpNYXJrZWRUZXh0U3R5bGU6OmFyZURlY29yYXRpb25NYXJrZWRUZXh0U3R5bGVzRXF1
YWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya2VkVGV4dDo6U3R5bGVkTWFya2VkVGV4
dCk6CisKIDIwMjEtMDEtMDQgIEplZmYgTWlsbGVyICA8amVmZm1AYXBwbGUuY29tPgogCiAgICAg
ICAgIFVwZGF0ZSB1c2VyLXZpc2libGUgY29weXJpZ2h0IHN0cmluZ3MgdG8gaW5jbHVkZSAyMDIx
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXggYmVlOGMw
ZGIzNjkxLi42NWUyODJlYjg2M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHAKQEAgLTQzMywzNiArNDMzLDYgQEAgT3B0aW9uYWw8Ym9vbD4gSW5saW5lVGV4
dEJveDo6ZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZShjb25zdCBSZW5kZXJTdHlsZSYgc3QK
ICAgICByZXR1cm4gaXNBYm92ZTsKIH0KIAotc3RydWN0IElubGluZVRleHRCb3g6Ok1hcmtlZFRl
eHRTdHlsZSB7Ci0gICAgc3RhdGljIGJvb2wgYXJlQmFja2dyb3VuZE1hcmtlZFRleHRTdHlsZXNF
cXVhbChjb25zdCBNYXJrZWRUZXh0U3R5bGUmIGEsIGNvbnN0IE1hcmtlZFRleHRTdHlsZSYgYikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhLmJhY2tncm91bmRDb2xvciA9PSBiLmJhY2tncm91bmRD
b2xvcjsKLSAgICB9Ci0gICAgc3RhdGljIGJvb2wgYXJlRm9yZWdyb3VuZE1hcmtlZFRleHRTdHls
ZXNFcXVhbChjb25zdCBNYXJrZWRUZXh0U3R5bGUmIGEsIGNvbnN0IE1hcmtlZFRleHRTdHlsZSYg
YikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhLnRleHRTdHlsZXMgPT0gYi50ZXh0U3R5bGVzICYm
IGEudGV4dFNoYWRvdyA9PSBiLnRleHRTaGFkb3cgJiYgYS5hbHBoYSA9PSBiLmFscGhhOwotICAg
IH0KLSAgICBzdGF0aWMgYm9vbCBhcmVEZWNvcmF0aW9uTWFya2VkVGV4dFN0eWxlc0VxdWFsKGNv
bnN0IE1hcmtlZFRleHRTdHlsZSYgYSwgY29uc3QgTWFya2VkVGV4dFN0eWxlJiBiKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGEudGV4dERlY29yYXRpb25TdHlsZXMgPT0gYi50ZXh0RGVjb3JhdGlv
blN0eWxlcyAmJiBhLnRleHRTaGFkb3cgPT0gYi50ZXh0U2hhZG93ICYmIGEuYWxwaGEgPT0gYi5h
bHBoYTsKLSAgICB9Ci0KLSAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3I7Ci0gICAgVGV4dFBhaW50
U3R5bGUgdGV4dFN0eWxlczsKLSAgICBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OlN0eWxlcyB0ZXh0
RGVjb3JhdGlvblN0eWxlczsKLSAgICBPcHRpb25hbDxTaGFkb3dEYXRhPiB0ZXh0U2hhZG93Owot
ICAgIGZsb2F0IGFscGhhOwotfTsKLQotc3RydWN0IElubGluZVRleHRCb3g6OlN0eWxlZE1hcmtl
ZFRleHQgOiBNYXJrZWRUZXh0IHsKLSAgICBTdHlsZWRNYXJrZWRUZXh0KGNvbnN0IE1hcmtlZFRl
eHQmIG1hcmtlcikKLSAgICAgICAgOiBNYXJrZWRUZXh0IHsgbWFya2VyIH0KLSAgICB7Ci0gICAg
fQotCi0gICAgTWFya2VkVGV4dFN0eWxlIHN0eWxlOwotfTsKLQogc3RhdGljIE1hcmtlZFRleHQg
Y3JlYXRlTWFya2VkVGV4dEZyb21TZWxlY3Rpb25JbkJveChjb25zdCBJbmxpbmVUZXh0Qm94JiBi
b3gpCiB7CiAgICAgYXV0byBbc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZF0gPSBib3guc2Vs
ZWN0aW9uU3RhcnRFbmQoKTsKQEAgLTU0NCw4ICs1MTQsNiBAQCB2b2lkIElubGluZVRleHRCb3g6
OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZz
ZXQsCiAgICAgYm9vbCBjb250YWluc0NvbXBvc2l0aW9uID0gcmVuZGVyZXIoKS50ZXh0Tm9kZSgp
ICYmIHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvbk5vZGUoKSA9PSByZW5k
ZXJlcigpLnRleHROb2RlKCk7CiAgICAgYm9vbCB1c2VDdXN0b21VbmRlcmxpbmVzID0gY29udGFp
bnNDb21wb3NpdGlvbiAmJiByZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9yKCkuY29tcG9zaXRpb25V
c2VzQ3VzdG9tVW5kZXJsaW5lcygpOwogCi0gICAgTWFya2VkVGV4dFN0eWxlIHVubWFya2VkU3R5
bGUgPSBjb21wdXRlU3R5bGVGb3JVbm1hcmtlZE1hcmtlZFRleHQocGFpbnRJbmZvKTsKLQogICAg
IC8vIDEuIFBhaW50IGJhY2tncm91bmRzIGJlaGluZCB0ZXh0IGlmIG5lZWRlZC4gRXhhbXBsZXMg
b2Ygc3VjaCBiYWNrZ3JvdW5kcyBpbmNsdWRlIHNlbGVjdGlvbgogICAgIC8vIGFuZCBjb21wb3Np
dGlvbiB1bmRlcmxpbmVzLgogICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6
U2VsZWN0aW9uICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpUZXh0Q2xpcCAmJiAh
aXNQcmludGluZykgewpAQCAtNTYzLDcgKzUzMSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFp
bnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwK
ICAgICAgICAgICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmQoV1RGTW92ZShzZWxlY3Rpb25NYXJr
ZWRUZXh0KSk7CiAgICAgICAgIH0KICNlbmRpZgotICAgICAgICBhdXRvIHN0eWxlZE1hcmtlZFRl
eHRzID0gc3ViZGl2aWRlQW5kUmVzb2x2ZVN0eWxlKG1hcmtlZFRleHRzLCB1bm1hcmtlZFN0eWxl
LCBwYWludEluZm8pOworICAgICAgICBhdXRvIHN0eWxlZE1hcmtlZFRleHRzID0gc3ViZGl2aWRl
QW5kUmVzb2x2ZVN0eWxlKG1hcmtlZFRleHRzLCByZW5kZXJlcigpLCBpc0ZpcnN0TGluZSgpLCBw
YWludEluZm8pOwogCiAgICAgICAgIC8vIENvYWxlc2NlIHN0eWxlcyBvZiBhZGphY2VudCBtYXJr
ZWQgdGV4dHMgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBkcmF3aW5nIGNvbW1hbmRzLgogICAg
ICAgICBhdXRvIGNvYWxlc2NlZFN0eWxlZE1hcmtlZFRleHRzID0gY29hbGVzY2VBZGphY2VudE1h
cmtlZFRleHRzKHN0eWxlZE1hcmtlZFRleHRzLCAmTWFya2VkVGV4dFN0eWxlOjphcmVCYWNrZ3Jv
dW5kTWFya2VkVGV4dFN0eWxlc0VxdWFsKTsKQEAgLTYxMSw3ICs1NzksNyBAQCB2b2lkIElubGlu
ZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZmZzZXQsCiAgICAgICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmQoV1RGTW92ZShzZWxl
Y3Rpb25NYXJrZWRUZXh0KSk7CiAgICAgfQogCi0gICAgYXV0byBzdHlsZWRNYXJrZWRUZXh0cyA9
IHN1YmRpdmlkZUFuZFJlc29sdmVTdHlsZShtYXJrZWRUZXh0cywgdW5tYXJrZWRTdHlsZSwgcGFp
bnRJbmZvKTsKKyAgICBhdXRvIHN0eWxlZE1hcmtlZFRleHRzID0gc3ViZGl2aWRlQW5kUmVzb2x2
ZVN0eWxlKG1hcmtlZFRleHRzLCByZW5kZXJlcigpLCBpc0ZpcnN0TGluZSgpLCBwYWludEluZm8p
OwogCiAgICAgLy8gLi4uIG5vdyByZW1vdmUgdGhlIHNlbGVjdGlvbiBtYXJrZWQgdGV4dCBpZiB3
ZSBhcmUgZXhjbHVkaW5nIHNlbGVjdGlvbi4KICAgICBpZiAoIWlzUHJpbnRpbmcgJiYgcGFpbnRJ
bmZvLnBhaW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6RXhjbHVkZVNlbGVjdGlv
bikpCkBAIC03OTYsMTQxICs3NjQsNiBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50UGxhdGZv
cm1Eb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0CiAgICAgY29u
dGV4dC5kcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGJvdW5kcywgbGluZVN0eWxlRm9yTWFya2Vk
VGV4dFR5cGUoKSk7CiB9CiAKLWF1dG8gSW5saW5lVGV4dEJveDo6Y29tcHV0ZVN0eWxlRm9yVW5t
YXJrZWRNYXJrZWRUZXh0KGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKSBjb25zdCAtPiBNYXJr
ZWRUZXh0U3R5bGUKLXsKLSAgICBhdXRvJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsK
LQotICAgIE1hcmtlZFRleHRTdHlsZSBzdHlsZTsKLSAgICBzdHlsZS50ZXh0RGVjb3JhdGlvblN0
eWxlcyA9IFRleHREZWNvcmF0aW9uUGFpbnRlcjo6c3R5bGVzRm9yUmVuZGVyZXIocmVuZGVyZXIo
KSwgbGluZVN0eWxlLnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCksIGlzRmlyc3RMaW5lKCkpOwot
ICAgIHN0eWxlLnRleHRTdHlsZXMgPSBjb21wdXRlVGV4dFBhaW50U3R5bGUocmVuZGVyZXIoKS5m
cmFtZSgpLCBsaW5lU3R5bGUsIHBhaW50SW5mbyk7Ci0gICAgc3R5bGUudGV4dFNoYWRvdyA9IFNo
YWRvd0RhdGE6OmNsb25lKHBhaW50SW5mby5mb3JjZVRleHRDb2xvcigpID8gbnVsbHB0ciA6IGxp
bmVTdHlsZS50ZXh0U2hhZG93KCkpOwotICAgIHN0eWxlLmFscGhhID0gMTsKLSAgICByZXR1cm4g
c3R5bGU7Ci19Ci0KLWF1dG8gSW5saW5lVGV4dEJveDo6cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4
dChjb25zdCBNYXJrZWRUZXh0JiBtYXJrZWRUZXh0LCBjb25zdCBNYXJrZWRUZXh0U3R5bGUmIGJh
c2VTdHlsZSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pIC0+IFN0eWxlZE1hcmtlZFRleHQK
LXsKLSAgICBNYXJrZWRUZXh0U3R5bGUgc3R5bGUgPSBiYXNlU3R5bGU7Ci0gICAgc3dpdGNoICht
YXJrZWRUZXh0LnR5cGUpIHsKLSAgICBjYXNlIE1hcmtlZFRleHQ6OkNvcnJlY3Rpb246Ci0gICAg
Y2FzZSBNYXJrZWRUZXh0OjpEaWN0YXRpb25BbHRlcm5hdGl2ZXM6Ci0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSAgICAvLyBGSVhNRTogU2VlIDxyZGFyOi8vcHJvYmxlbS84OTMzMzUyPi4gQWxz
bywgcmVtb3ZlIHRoZSBQTEFURk9STShJT1NfRkFNSUxZKS1ndWFyZC4KLSAgICBjYXNlIE1hcmtl
ZFRleHQ6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXM6Ci0jZW5kaWYKLSAgICBjYXNl
IE1hcmtlZFRleHQ6OkdyYW1tYXJFcnJvcjoKLSAgICBjYXNlIE1hcmtlZFRleHQ6OlNwZWxsaW5n
RXJyb3I6Ci0gICAgY2FzZSBNYXJrZWRUZXh0OjpVbm1hcmtlZDoKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBNYXJrZWRUZXh0OjpIaWdobGlnaHQ6Ci0gICAgICAgIGlmIChhdXRvIHJlbmRlclN0
eWxlID0gcGFyZW50KCktPnJlbmRlcmVyKCkuZ2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVk
b0lkOjpIaWdobGlnaHQsIG1hcmtlZFRleHQuaGlnaGxpZ2h0TmFtZSB9LCAmcGFyZW50KCktPnJl
bmRlcmVyKCkuc3R5bGUoKSkpIHsKLSAgICAgICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9
IHJlbmRlclN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICAgICAgICAgIHN0eWxlLnRleHRT
dHlsZXMuZmlsbENvbG9yID0gcmVuZGVyU3R5bGUtPmNvbXB1dGVkU3Ryb2tlQ29sb3IoKTsKLSAg
ICAgICAgICAgIHN0eWxlLnRleHRTdHlsZXMuc3Ryb2tlQ29sb3IgPSByZW5kZXJTdHlsZS0+Y29t
cHV0ZWRTdHJva2VDb2xvcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIGNvbG9y
ID0gVGV4dERlY29yYXRpb25QYWludGVyOjpkZWNvcmF0aW9uQ29sb3IoKnJlbmRlclN0eWxlLmdl
dCgpKTsKLSAgICAgICAgICAgIGF1dG8gZGVjb3JhdGlvblN0eWxlID0gcmVuZGVyU3R5bGUtPnRl
eHREZWNvcmF0aW9uU3R5bGUoKTsKLSAgICAgICAgICAgIGF1dG8gZGVjb3JhdGlvbnMgPSByZW5k
ZXJTdHlsZS0+dGV4dERlY29yYXRpb25zSW5FZmZlY3QoKTsKLQotICAgICAgICAgICAgaWYgKGRl
Y29yYXRpb25zLmNvbnRhaW5zKFRleHREZWNvcmF0aW9uOjpVbmRlcmxpbmUpKSB7Ci0gICAgICAg
ICAgICAgICAgc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMudW5kZXJsaW5lQ29sb3IgPSBjb2xv
cjsKLSAgICAgICAgICAgICAgICBzdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcy51bmRlcmxpbmVT
dHlsZSA9IGRlY29yYXRpb25TdHlsZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChk
ZWNvcmF0aW9ucy5jb250YWlucyhUZXh0RGVjb3JhdGlvbjo6T3ZlcmxpbmUpKSB7Ci0gICAgICAg
ICAgICAgICAgc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMub3ZlcmxpbmVDb2xvciA9IGNvbG9y
OwotICAgICAgICAgICAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGVzLm92ZXJsaW5lU3R5
bGUgPSBkZWNvcmF0aW9uU3R5bGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZGVj
b3JhdGlvbnMuY29udGFpbnMoVGV4dERlY29yYXRpb246OkxpbmVUaHJvdWdoKSkgewotICAgICAg
ICAgICAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGVzLmxpbmV0aHJvdWdoQ29sb3IgPSBj
b2xvcjsKLSAgICAgICAgICAgICAgICBzdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcy5saW5ldGhy
b3VnaFN0eWxlID0gZGVjb3JhdGlvblN0eWxlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotI2lmIEVOQUJMRShBUFBfSElHSExJR0hUUykKLSAgICBjYXNlIE1hcmtl
ZFRleHQ6OkFwcEhpZ2hsaWdodDogewotICAgICAgICBPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0
aW9ucz4gc3R5bGVDb2xvck9wdGlvbnMgPSB7IFN0eWxlQ29sb3I6Ok9wdGlvbnM6OlVzZVN5c3Rl
bUFwcGVhcmFuY2UgfTsKLSAgICAgICAgc3R5bGUuYmFja2dyb3VuZENvbG9yID0gcmVuZGVyZXIo
KS50aGVtZSgpLmFwcEhpZ2hsaWdodENvbG9yKHN0eWxlQ29sb3JPcHRpb25zKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotI2VuZGlmCi0gICAgY2FzZSBNYXJrZWRUZXh0OjpEcmFnZ2VkQ29udGVu
dDoKLSAgICAgICAgc3R5bGUuYWxwaGEgPSAwLjI1OwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IE1hcmtlZFRleHQ6OlNlbGVjdGlvbjogewotICAgICAgICBzdHlsZS50ZXh0U3R5bGVzID0gY29t
cHV0ZVRleHRTZWxlY3Rpb25QYWludFN0eWxlKHN0eWxlLnRleHRTdHlsZXMsIHJlbmRlcmVyKCks
IGxpbmVTdHlsZSgpLCBwYWludEluZm8sIHN0eWxlLnRleHRTaGFkb3cpOwotCi0gICAgICAgIENv
bG9yIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvciA9IHJlbmRlcmVyKCkuc2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKCk7Ci0gICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcjsKLSAgICAgICAgaWYgKHNlbGVjdGlvbkJhY2tncm91bmRDb2xvci5pc1Zh
bGlkKCkgJiYgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yLmlzVmlzaWJsZSgpICYmIHN0eWxlLnRl
eHRTdHlsZXMuZmlsbENvbG9yID09IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcikKLSAgICAgICAg
ICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvci5pbnZl
cnRlZENvbG9yV2l0aEFscGhhKDEuMCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IE1hcmtlZFRleHQ6OlRleHRNYXRjaDogewotICAgICAgICAvLyBUZXh0IG1hdGNoZXMgYWx3YXlz
IHVzZSB0aGUgbGlnaHQgc3lzdGVtIGFwcGVhcmFuY2UuCi0gICAgICAgIE9wdGlvblNldDxTdHls
ZUNvbG9yOjpPcHRpb25zPiBzdHlsZUNvbG9yT3B0aW9ucyA9IHsgU3R5bGVDb2xvcjo6T3B0aW9u
czo6VXNlU3lzdGVtQXBwZWFyYW5jZSB9OwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgc3R5
bGUudGV4dFN0eWxlcy5maWxsQ29sb3IgPSByZW5kZXJlcigpLnRoZW1lKCkuc3lzdGVtQ29sb3Io
Q1NTVmFsdWVBcHBsZVN5c3RlbUxhYmVsLCBzdHlsZUNvbG9yT3B0aW9ucyk7Ci0jZW5kaWYKLSAg
ICAgICAgc3R5bGUuYmFja2dyb3VuZENvbG9yID0gcmVuZGVyZXIoKS50aGVtZSgpLnRleHRTZWFy
Y2hIaWdobGlnaHRDb2xvcihzdHlsZUNvbG9yT3B0aW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICB9Ci0gICAgU3R5bGVkTWFya2VkVGV4dCBzdHlsZWRNYXJrZWRUZXh0ID0gbWFya2Vk
VGV4dDsKLSAgICBzdHlsZWRNYXJrZWRUZXh0LnN0eWxlID0gV1RGTW92ZShzdHlsZSk7Ci0gICAg
cmV0dXJuIHN0eWxlZE1hcmtlZFRleHQ7Ci19Ci0KLWF1dG8gSW5saW5lVGV4dEJveDo6c3ViZGl2
aWRlQW5kUmVzb2x2ZVN0eWxlKGNvbnN0IFZlY3RvcjxNYXJrZWRUZXh0PiYgdGV4dHNUb1N1YmRp
dmlkZSwgY29uc3QgTWFya2VkVGV4dFN0eWxlJiBiYXNlU3R5bGUsIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvKSAtPiBWZWN0b3I8U3R5bGVkTWFya2VkVGV4dD4KLXsKLSAgICBpZiAodGV4dHNU
b1N1YmRpdmlkZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBhdXRvIG1h
cmtlZFRleHRzID0gc3ViZGl2aWRlKHRleHRzVG9TdWJkaXZpZGUpOwotICAgIEFTU0VSVCghbWFy
a2VkVGV4dHMuaXNFbXB0eSgpKTsKLSAgICBpZiAoVU5MSUtFTFkobWFya2VkVGV4dHMuaXNFbXB0
eSgpKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIC8vIENvbXB1dGUgZnJvbnRtb3N0IG92
ZXJsYXBwaW5nIHN0eWxlZCBtYXJrZWQgdGV4dHMuCi0gICAgVmVjdG9yPFN0eWxlZE1hcmtlZFRl
eHQ+IGZyb250bW9zdE1hcmtlZFRleHRzOwotICAgIGZyb250bW9zdE1hcmtlZFRleHRzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobWFya2VkVGV4dHMuc2l6ZSgpKTsKLSAgICBmcm9udG1vc3RNYXJr
ZWRUZXh0cy51bmNoZWNrZWRBcHBlbmQocmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dChtYXJrZWRU
ZXh0c1swXSwgYmFzZVN0eWxlLCBwYWludEluZm8pKTsKLSAgICBmb3IgKGF1dG8gaXQgPSBtYXJr
ZWRUZXh0cy5iZWdpbigpICsgMSwgZW5kID0gbWFya2VkVGV4dHMuZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkgewotICAgICAgICBTdHlsZWRNYXJrZWRUZXh0JiBwcmV2aW91c1N0eWxlZE1hcmtlZFRl
eHQgPSBmcm9udG1vc3RNYXJrZWRUZXh0cy5sYXN0KCk7Ci0gICAgICAgIGlmIChwcmV2aW91c1N0
eWxlZE1hcmtlZFRleHQuc3RhcnRPZmZzZXQgPT0gaXQtPnN0YXJ0T2Zmc2V0ICYmIHByZXZpb3Vz
U3R5bGVkTWFya2VkVGV4dC5lbmRPZmZzZXQgPT0gaXQtPmVuZE9mZnNldCkgewotICAgICAgICAg
ICAgLy8gTWFya2VkIHRleHRzIGNvbXBsZXRlbHkgY292ZXIgZWFjaCBvdGhlci4KLSAgICAgICAg
ICAgIHByZXZpb3VzU3R5bGVkTWFya2VkVGV4dCA9IHJlc29sdmVTdHlsZUZvck1hcmtlZFRleHQo
Kml0LCBwcmV2aW91c1N0eWxlZE1hcmtlZFRleHQuc3R5bGUsIHBhaW50SW5mbyk7Ci0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBmcm9udG1vc3RNYXJrZWRUZXh0cy51
bmNoZWNrZWRBcHBlbmQocmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCgqaXQsIGJhc2VTdHlsZSwg
cGFpbnRJbmZvKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZyb250bW9zdE1hcmtlZFRleHRzOwot
fQotCi1hdXRvIElubGluZVRleHRCb3g6OmNvYWxlc2NlQWRqYWNlbnRNYXJrZWRUZXh0cyhjb25z
dCBWZWN0b3I8U3R5bGVkTWFya2VkVGV4dD4mIHRleHRzVG9Db2FsZXNjZSwgTWFya2VkVGV4dFN0
eWxlc0VxdWFsaXR5RnVuY3Rpb24gYXJlTWFya2VkVGV4dFN0eWxlc0VxdWFsKSAtPiBWZWN0b3I8
U3R5bGVkTWFya2VkVGV4dD4KLXsKLSAgICBpZiAodGV4dHNUb0NvYWxlc2NlLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGF1dG8gYXJlQWRqYWNlbnRNYXJrZWRUZXh0c1dp
dGhTYW1lU3R5bGUgPSBbJl0gKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIGEsIGNvbnN0IFN0eWxl
ZE1hcmtlZFRleHQmIGIpIHsKLSAgICAgICAgcmV0dXJuIGEuZW5kT2Zmc2V0ID09IGIuc3RhcnRP
ZmZzZXQgJiYgYXJlTWFya2VkVGV4dFN0eWxlc0VxdWFsKGEuc3R5bGUsIGIuc3R5bGUpOwotICAg
IH07Ci0KLSAgICBWZWN0b3I8U3R5bGVkTWFya2VkVGV4dD4gc3R5bGVkTWFya2VkVGV4dHM7Ci0g
ICAgc3R5bGVkTWFya2VkVGV4dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0ZXh0c1RvQ29hbGVz
Y2Uuc2l6ZSgpKTsKLSAgICBzdHlsZWRNYXJrZWRUZXh0cy51bmNoZWNrZWRBcHBlbmQodGV4dHNU
b0NvYWxlc2NlWzBdKTsKLSAgICBmb3IgKGF1dG8gaXQgPSB0ZXh0c1RvQ29hbGVzY2UuYmVnaW4o
KSArIDEsIGVuZCA9IHRleHRzVG9Db2FsZXNjZS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIFN0eWxlZE1hcmtlZFRleHQmIHByZXZpb3VzU3R5bGVkTWFya2VkVGV4dCA9IHN0eWxl
ZE1hcmtlZFRleHRzLmxhc3QoKTsKLSAgICAgICAgaWYgKGFyZUFkamFjZW50TWFya2VkVGV4dHNX
aXRoU2FtZVN0eWxlKHByZXZpb3VzU3R5bGVkTWFya2VkVGV4dCwgKml0KSkgewotICAgICAgICAg
ICAgcHJldmlvdXNTdHlsZWRNYXJrZWRUZXh0LmVuZE9mZnNldCA9IGl0LT5lbmRPZmZzZXQ7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBzdHlsZWRNYXJrZWRUZXh0
cy51bmNoZWNrZWRBcHBlbmQoKml0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3R5bGVkTWFya2Vk
VGV4dHM7Ci19Ci0KIFZlY3RvcjxNYXJrZWRUZXh0PiBJbmxpbmVUZXh0Qm94Ojpjb2xsZWN0TWFy
a2VkVGV4dHNGb3JEcmFnZ2VkQ29udGVudCgpCiB7CiAgICAgdXNpbmcgRHJhZ2dlbmRDb250ZW50
UmFuZ2UgPSBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5oCmluZGV4IDMyODliOTYyZWEwYS4uOGMzODViNjVmZGRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKQEAgLTIzLDYgKzIzLDcg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSW5saW5lQm94LmgiCisjaW5jbHVkZSAiTWFy
a2VkVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgi
CiAKQEAgLTMyLDcgKzMzLDYgQEAgY2xhc3MgUmVuZGVyQ29tYmluZVRleHQ7CiBjbGFzcyBSZW5k
ZXJlZERvY3VtZW50TWFya2VyOwogY2xhc3MgVGV4dFBhaW50ZXI7CiBzdHJ1Y3QgQ29tcG9zaXRp
b25VbmRlcmxpbmU7Ci1zdHJ1Y3QgTWFya2VkVGV4dDsKIHN0cnVjdCBUZXh0UGFpbnRTdHlsZTsK
IAogY29uc3QgdW5zaWduZWQgc2hvcnQgY05vVHJ1bmNhdGlvbiA9IFVTSFJUX01BWDsKQEAgLTE2
NCwyMiArMTY0LDEyIEBAIHB1YmxpYzoKICAgICBGbG9hdFJlY3QgY2FsY3VsYXRlRG9jdW1lbnRN
YXJrZXJCb3VuZHMoY29uc3QgTWFya2VkVGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHN0
cnVjdCBNYXJrZWRUZXh0U3R5bGU7Ci0gICAgc3RydWN0IFN0eWxlZE1hcmtlZFRleHQ7Ci0KICAg
ICBlbnVtIGNsYXNzIFRleHRQYWludFBoYXNlIHsgQmFja2dyb3VuZCwgRm9yZWdyb3VuZCwgRGVj
b3JhdGlvbiB9OwogCiAgICAgVmVjdG9yPE1hcmtlZFRleHQ+IGNvbGxlY3RNYXJrZWRUZXh0c0Zv
ckRyYWdnZWRDb250ZW50KCk7CiAgICAgVmVjdG9yPE1hcmtlZFRleHQ+IGNvbGxlY3RNYXJrZWRU
ZXh0c0ZvckRvY3VtZW50TWFya2VycyhUZXh0UGFpbnRQaGFzZSkgY29uc3Q7CiAgICAgVmVjdG9y
PE1hcmtlZFRleHQ+IGNvbGxlY3RNYXJrZWRUZXh0c0ZvckhpZ2hsaWdodHMoVGV4dFBhaW50UGhh
c2UpIGNvbnN0OwogCi0gICAgTWFya2VkVGV4dFN0eWxlIGNvbXB1dGVTdHlsZUZvclVubWFya2Vk
TWFya2VkVGV4dChjb25zdCBQYWludEluZm8mKSBjb25zdDsKLSAgICBTdHlsZWRNYXJrZWRUZXh0
IHJlc29sdmVTdHlsZUZvck1hcmtlZFRleHQoY29uc3QgTWFya2VkVGV4dCYsIGNvbnN0IE1hcmtl
ZFRleHRTdHlsZSYgYmFzZVN0eWxlLCBjb25zdCBQYWludEluZm8mKTsKLSAgICBWZWN0b3I8U3R5
bGVkTWFya2VkVGV4dD4gc3ViZGl2aWRlQW5kUmVzb2x2ZVN0eWxlKGNvbnN0IFZlY3RvcjxNYXJr
ZWRUZXh0PiYsIGNvbnN0IE1hcmtlZFRleHRTdHlsZSYgYmFzZVN0eWxlLCBjb25zdCBQYWludElu
Zm8mKTsKLQotICAgIHVzaW5nIE1hcmtlZFRleHRTdHlsZXNFcXVhbGl0eUZ1bmN0aW9uID0gYm9v
bCAoKikoY29uc3QgTWFya2VkVGV4dFN0eWxlJiwgY29uc3QgTWFya2VkVGV4dFN0eWxlJik7Ci0g
ICAgVmVjdG9yPFN0eWxlZE1hcmtlZFRleHQ+IGNvYWxlc2NlQWRqYWNlbnRNYXJrZWRUZXh0cyhj
b25zdCBWZWN0b3I8U3R5bGVkTWFya2VkVGV4dD4mLCBNYXJrZWRUZXh0U3R5bGVzRXF1YWxpdHlG
dW5jdGlvbik7Ci0KICAgICBGbG9hdFBvaW50IHRleHRPcmlnaW5Gcm9tQm94UmVjdChjb25zdCBG
bG9hdFJlY3QmKSBjb25zdDsKIAogICAgIHZvaWQgcGFpbnRNYXJrZWRUZXh0cyhQYWludEluZm8m
LCBUZXh0UGFpbnRQaGFzZSwgY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0LCBjb25zdCBWZWN0b3I8
U3R5bGVkTWFya2VkVGV4dD4mLCBjb25zdCBGbG9hdFJlY3QmIGRlY29yYXRpb25DbGlwT3V0UmVj
dCA9IHsgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFya2VkVGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFya2VkVGV4dC5jcHAKaW5kZXggZGI4
NDlhNGZiY2JmLi5mNDU4NmQ2YTliN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9NYXJrZWRUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFya2Vk
VGV4dC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjYsNiArMjYsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJN
YXJrZWRUZXh0LmgiCiAKKyNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgorI2luY2x1
ZGUgIlJlbmRlckVsZW1lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAi
UmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KIApAQCAtOTMsNiArOTcsMTQyIEBAIFZlY3RvcjxNYXJrZWRUZXh0PiBzdWJkaXZpZGUo
Y29uc3QgVmVjdG9yPE1hcmtlZFRleHQ+JiBtYXJrZWRUZXh0cywgT3ZlcmxhcFN0cmF0CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIFN0eWxlZE1hcmtlZFRleHQgcmVzb2x2ZVN0eWxl
Rm9yTWFya2VkVGV4dChjb25zdCBNYXJrZWRUZXh0JiBtYXJrZWRUZXh0LCBjb25zdCBNYXJrZWRU
ZXh0U3R5bGUmIGJhc2VTdHlsZSwgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIsIGNvbnN0IFJl
bmRlclN0eWxlJiBsaW5lU3R5bGUsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQoreworICAg
IE1hcmtlZFRleHRTdHlsZSBzdHlsZSA9IGJhc2VTdHlsZTsKKyAgICBzd2l0Y2ggKG1hcmtlZFRl
eHQudHlwZSkgeworICAgIGNhc2UgTWFya2VkVGV4dDo6Q29ycmVjdGlvbjoKKyAgICBjYXNlIE1h
cmtlZFRleHQ6OkRpY3RhdGlvbkFsdGVybmF0aXZlczoKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorICAgIC8vIEZJWE1FOiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzg5MzMzNTI+LiBBbHNvLCByZW1v
dmUgdGhlIFBMQVRGT1JNKElPU19GQU1JTFkpLWd1YXJkLgorICAgIGNhc2UgTWFya2VkVGV4dDo6
RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlczoKKyNlbmRpZgorICAgIGNhc2UgTWFya2Vk
VGV4dDo6R3JhbW1hckVycm9yOgorICAgIGNhc2UgTWFya2VkVGV4dDo6U3BlbGxpbmdFcnJvcjoK
KyAgICBjYXNlIE1hcmtlZFRleHQ6OlVubWFya2VkOgorICAgICAgICBicmVhazsKKyAgICBjYXNl
IE1hcmtlZFRleHQ6OkhpZ2hsaWdodDoKKyAgICAgICAgaWYgKGF1dG8gcmVuZGVyU3R5bGUgPSBy
ZW5kZXJlci5wYXJlbnQoKS0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpIaWdo
bGlnaHQsIG1hcmtlZFRleHQuaGlnaGxpZ2h0TmFtZSB9LCAmcmVuZGVyZXIuc3R5bGUoKSkpIHsK
KyAgICAgICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHJlbmRlclN0eWxlLT5iYWNrZ3Jv
dW5kQ29sb3IoKTsKKyAgICAgICAgICAgIHN0eWxlLnRleHRTdHlsZXMuZmlsbENvbG9yID0gcmVu
ZGVyU3R5bGUtPmNvbXB1dGVkU3Ryb2tlQ29sb3IoKTsKKyAgICAgICAgICAgIHN0eWxlLnRleHRT
dHlsZXMuc3Ryb2tlQ29sb3IgPSByZW5kZXJTdHlsZS0+Y29tcHV0ZWRTdHJva2VDb2xvcigpOwor
CisgICAgICAgICAgICBhdXRvIGNvbG9yID0gVGV4dERlY29yYXRpb25QYWludGVyOjpkZWNvcmF0
aW9uQ29sb3IoKnJlbmRlclN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGF1dG8gZGVjb3JhdGlv
blN0eWxlID0gcmVuZGVyU3R5bGUtPnRleHREZWNvcmF0aW9uU3R5bGUoKTsKKyAgICAgICAgICAg
IGF1dG8gZGVjb3JhdGlvbnMgPSByZW5kZXJTdHlsZS0+dGV4dERlY29yYXRpb25zSW5FZmZlY3Qo
KTsKKworICAgICAgICAgICAgaWYgKGRlY29yYXRpb25zLmNvbnRhaW5zKFRleHREZWNvcmF0aW9u
OjpVbmRlcmxpbmUpKSB7CisgICAgICAgICAgICAgICAgc3R5bGUudGV4dERlY29yYXRpb25TdHls
ZXMudW5kZXJsaW5lQ29sb3IgPSBjb2xvcjsKKyAgICAgICAgICAgICAgICBzdHlsZS50ZXh0RGVj
b3JhdGlvblN0eWxlcy51bmRlcmxpbmVTdHlsZSA9IGRlY29yYXRpb25TdHlsZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChkZWNvcmF0aW9ucy5jb250YWlucyhUZXh0RGVjb3JhdGlv
bjo6T3ZlcmxpbmUpKSB7CisgICAgICAgICAgICAgICAgc3R5bGUudGV4dERlY29yYXRpb25TdHls
ZXMub3ZlcmxpbmVDb2xvciA9IGNvbG9yOworICAgICAgICAgICAgICAgIHN0eWxlLnRleHREZWNv
cmF0aW9uU3R5bGVzLm92ZXJsaW5lU3R5bGUgPSBkZWNvcmF0aW9uU3R5bGU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoZGVjb3JhdGlvbnMuY29udGFpbnMoVGV4dERlY29yYXRpb246
OkxpbmVUaHJvdWdoKSkgeworICAgICAgICAgICAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uU3R5
bGVzLmxpbmV0aHJvdWdoQ29sb3IgPSBjb2xvcjsKKyAgICAgICAgICAgICAgICBzdHlsZS50ZXh0
RGVjb3JhdGlvblN0eWxlcy5saW5ldGhyb3VnaFN0eWxlID0gZGVjb3JhdGlvblN0eWxlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShBUFBfSElH
SExJR0hUUykKKyAgICBjYXNlIE1hcmtlZFRleHQ6OkFwcEhpZ2hsaWdodDogeworICAgICAgICBP
cHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gc3R5bGVDb2xvck9wdGlvbnMgPSB7IFN0eWxl
Q29sb3I6Ok9wdGlvbnM6OlVzZVN5c3RlbUFwcGVhcmFuY2UgfTsKKyAgICAgICAgc3R5bGUuYmFj
a2dyb3VuZENvbG9yID0gcmVuZGVyZXIoKS50aGVtZSgpLmFwcEhpZ2hsaWdodENvbG9yKHN0eWxl
Q29sb3JPcHRpb25zKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisgICAgY2FzZSBN
YXJrZWRUZXh0OjpEcmFnZ2VkQ29udGVudDoKKyAgICAgICAgc3R5bGUuYWxwaGEgPSAwLjI1Owor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIE1hcmtlZFRleHQ6OlNlbGVjdGlvbjogeworICAgICAg
ICBzdHlsZS50ZXh0U3R5bGVzID0gY29tcHV0ZVRleHRTZWxlY3Rpb25QYWludFN0eWxlKHN0eWxl
LnRleHRTdHlsZXMsIHJlbmRlcmVyLCBsaW5lU3R5bGUsIHBhaW50SW5mbywgc3R5bGUudGV4dFNo
YWRvdyk7CisKKyAgICAgICAgQ29sb3Igc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yID0gcmVuZGVy
ZXIuc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgIHN0eWxlLmJhY2tncm91bmRD
b2xvciA9IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsKKyAgICAgICAgaWYgKHNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvci5pc1ZhbGlkKCkgJiYgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yLmlzVmlz
aWJsZSgpICYmIHN0eWxlLnRleHRTdHlsZXMuZmlsbENvbG9yID09IHNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcikKKyAgICAgICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvci5pbnZlcnRlZENvbG9yV2l0aEFscGhhKDEuMCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIE1hcmtlZFRleHQ6OlRleHRNYXRjaDogeworICAgICAgICAvLyBU
ZXh0IG1hdGNoZXMgYWx3YXlzIHVzZSB0aGUgbGlnaHQgc3lzdGVtIGFwcGVhcmFuY2UuCisgICAg
ICAgIE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBzdHlsZUNvbG9yT3B0aW9ucyA9IHsg
U3R5bGVDb2xvcjo6T3B0aW9uczo6VXNlU3lzdGVtQXBwZWFyYW5jZSB9OworI2lmIFBMQVRGT1JN
KE1BQykKKyAgICAgICAgc3R5bGUudGV4dFN0eWxlcy5maWxsQ29sb3IgPSByZW5kZXJlci50aGVt
ZSgpLnN5c3RlbUNvbG9yKENTU1ZhbHVlQXBwbGVTeXN0ZW1MYWJlbCwgc3R5bGVDb2xvck9wdGlv
bnMpOworI2VuZGlmCisgICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHJlbmRlcmVyLnRo
ZW1lKCkudGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKHN0eWxlQ29sb3JPcHRpb25zKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIH0KKyAgICBTdHlsZWRNYXJrZWRUZXh0IHN0eWxlZE1hcmtl
ZFRleHQgPSBtYXJrZWRUZXh0OworICAgIHN0eWxlZE1hcmtlZFRleHQuc3R5bGUgPSBXVEZNb3Zl
KHN0eWxlKTsKKyAgICByZXR1cm4gc3R5bGVkTWFya2VkVGV4dDsKK30KKworc3RhdGljIE1hcmtl
ZFRleHRTdHlsZSBjb21wdXRlU3R5bGVGb3JVbm1hcmtlZE1hcmtlZFRleHQoY29uc3QgUmVuZGVy
VGV4dCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUsIGJvb2wgaXNGaXJz
dExpbmUsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQoreworICAgIE1hcmtlZFRleHRTdHls
ZSBzdHlsZTsKKyAgICBzdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcyA9IFRleHREZWNvcmF0aW9u
UGFpbnRlcjo6c3R5bGVzRm9yUmVuZGVyZXIocmVuZGVyZXIsIGxpbmVTdHlsZS50ZXh0RGVjb3Jh
dGlvbnNJbkVmZmVjdCgpLCBpc0ZpcnN0TGluZSk7CisgICAgc3R5bGUudGV4dFN0eWxlcyA9IGNv
bXB1dGVUZXh0UGFpbnRTdHlsZShyZW5kZXJlci5mcmFtZSgpLCBsaW5lU3R5bGUsIHBhaW50SW5m
byk7CisgICAgc3R5bGUudGV4dFNoYWRvdyA9IFNoYWRvd0RhdGE6OmNsb25lKHBhaW50SW5mby5m
b3JjZVRleHRDb2xvcigpID8gbnVsbHB0ciA6IGxpbmVTdHlsZS50ZXh0U2hhZG93KCkpOworICAg
IHN0eWxlLmFscGhhID0gMTsKKyAgICByZXR1cm4gc3R5bGU7Cit9CisKK1ZlY3RvcjxTdHlsZWRN
YXJrZWRUZXh0PiBzdWJkaXZpZGVBbmRSZXNvbHZlU3R5bGUoY29uc3QgVmVjdG9yPE1hcmtlZFRl
eHQ+JiB0ZXh0c1RvU3ViZGl2aWRlLCBjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlciwgYm9vbCBp
c0ZpcnN0TGluZSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pCit7CisgICAgaWYgKHRleHRz
VG9TdWJkaXZpZGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBt
YXJrZWRUZXh0cyA9IHN1YmRpdmlkZSh0ZXh0c1RvU3ViZGl2aWRlKTsKKyAgICBBU1NFUlQoIW1h
cmtlZFRleHRzLmlzRW1wdHkoKSk7CisgICAgaWYgKFVOTElLRUxZKG1hcmtlZFRleHRzLmlzRW1w
dHkoKSkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvJiBsaW5lU3R5bGUgPSBpc0Zp
cnN0TGluZSA/IHJlbmRlcmVyLmZpcnN0TGluZVN0eWxlKCkgOiByZW5kZXJlci5zdHlsZSgpOwor
ICAgIGF1dG8gYmFzZVN0eWxlID0gY29tcHV0ZVN0eWxlRm9yVW5tYXJrZWRNYXJrZWRUZXh0KHJl
bmRlcmVyLCBsaW5lU3R5bGUsIGlzRmlyc3RMaW5lLCBwYWludEluZm8pOworCisgICAgLy8gQ29t
cHV0ZSBmcm9udG1vc3Qgb3ZlcmxhcHBpbmcgc3R5bGVkIG1hcmtlZCB0ZXh0cy4KKyAgICBWZWN0
b3I8U3R5bGVkTWFya2VkVGV4dD4gZnJvbnRtb3N0TWFya2VkVGV4dHM7CisgICAgZnJvbnRtb3N0
TWFya2VkVGV4dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtYXJrZWRUZXh0cy5zaXplKCkpOwor
ICAgIGZyb250bW9zdE1hcmtlZFRleHRzLnVuY2hlY2tlZEFwcGVuZChyZXNvbHZlU3R5bGVGb3JN
YXJrZWRUZXh0KG1hcmtlZFRleHRzWzBdLCBiYXNlU3R5bGUsIHJlbmRlcmVyLCBsaW5lU3R5bGUs
IHBhaW50SW5mbykpOworICAgIGZvciAoYXV0byBpdCA9IG1hcmtlZFRleHRzLmJlZ2luKCkgKyAx
LCBlbmQgPSBtYXJrZWRUZXh0cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFN0
eWxlZE1hcmtlZFRleHQmIHByZXZpb3VzU3R5bGVkTWFya2VkVGV4dCA9IGZyb250bW9zdE1hcmtl
ZFRleHRzLmxhc3QoKTsKKyAgICAgICAgaWYgKHByZXZpb3VzU3R5bGVkTWFya2VkVGV4dC5zdGFy
dE9mZnNldCA9PSBpdC0+c3RhcnRPZmZzZXQgJiYgcHJldmlvdXNTdHlsZWRNYXJrZWRUZXh0LmVu
ZE9mZnNldCA9PSBpdC0+ZW5kT2Zmc2V0KSB7CisgICAgICAgICAgICAvLyBNYXJrZWQgdGV4dHMg
Y29tcGxldGVseSBjb3ZlciBlYWNoIG90aGVyLgorICAgICAgICAgICAgcHJldmlvdXNTdHlsZWRN
YXJrZWRUZXh0ID0gcmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCgqaXQsIHByZXZpb3VzU3R5bGVk
TWFya2VkVGV4dC5zdHlsZSwgcmVuZGVyZXIsIGxpbmVTdHlsZSwgcGFpbnRJbmZvKTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGZyb250bW9zdE1hcmtlZFRleHRz
LnVuY2hlY2tlZEFwcGVuZChyZXNvbHZlU3R5bGVGb3JNYXJrZWRUZXh0KCppdCwgYmFzZVN0eWxl
LCByZW5kZXJlciwgbGluZVN0eWxlLCBwYWludEluZm8pKTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZnJvbnRtb3N0TWFya2VkVGV4dHM7Cit9CisKK1ZlY3RvcjxTdHlsZWRNYXJrZWRUZXh0PiBjb2Fs
ZXNjZUFkamFjZW50TWFya2VkVGV4dHMoY29uc3QgVmVjdG9yPFN0eWxlZE1hcmtlZFRleHQ+JiB0
ZXh0c1RvQ29hbGVzY2UsIE1hcmtlZFRleHRTdHlsZXNFcXVhbGl0eUZ1bmN0aW9uIGFyZU1hcmtl
ZFRleHRTdHlsZXNFcXVhbCkKK3sKKyAgICBpZiAodGV4dHNUb0NvYWxlc2NlLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gYXJlQWRqYWNlbnRNYXJrZWRUZXh0c1dp
dGhTYW1lU3R5bGUgPSBbJl0gKGNvbnN0IFN0eWxlZE1hcmtlZFRleHQmIGEsIGNvbnN0IFN0eWxl
ZE1hcmtlZFRleHQmIGIpIHsKKyAgICAgICAgcmV0dXJuIGEuZW5kT2Zmc2V0ID09IGIuc3RhcnRP
ZmZzZXQgJiYgYXJlTWFya2VkVGV4dFN0eWxlc0VxdWFsKGEuc3R5bGUsIGIuc3R5bGUpOworICAg
IH07CisKKyAgICBWZWN0b3I8U3R5bGVkTWFya2VkVGV4dD4gc3R5bGVkTWFya2VkVGV4dHM7Cisg
ICAgc3R5bGVkTWFya2VkVGV4dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0ZXh0c1RvQ29hbGVz
Y2Uuc2l6ZSgpKTsKKyAgICBzdHlsZWRNYXJrZWRUZXh0cy51bmNoZWNrZWRBcHBlbmQodGV4dHNU
b0NvYWxlc2NlWzBdKTsKKyAgICBmb3IgKGF1dG8gaXQgPSB0ZXh0c1RvQ29hbGVzY2UuYmVnaW4o
KSArIDEsIGVuZCA9IHRleHRzVG9Db2FsZXNjZS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIFN0eWxlZE1hcmtlZFRleHQmIHByZXZpb3VzU3R5bGVkTWFya2VkVGV4dCA9IHN0eWxl
ZE1hcmtlZFRleHRzLmxhc3QoKTsKKyAgICAgICAgaWYgKGFyZUFkamFjZW50TWFya2VkVGV4dHNX
aXRoU2FtZVN0eWxlKHByZXZpb3VzU3R5bGVkTWFya2VkVGV4dCwgKml0KSkgeworICAgICAgICAg
ICAgcHJldmlvdXNTdHlsZWRNYXJrZWRUZXh0LmVuZE9mZnNldCA9IGl0LT5lbmRPZmZzZXQ7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBzdHlsZWRNYXJrZWRUZXh0
cy51bmNoZWNrZWRBcHBlbmQoKml0KTsKKyAgICB9CisKKyAgICByZXR1cm4gc3R5bGVkTWFya2Vk
VGV4dHM7Cit9CisKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TWFya2VkVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01hcmtlZFRleHQuaAppbmRl
eCBlNzk3OGE2NGNjN2IuLjJjN2Q1N2RiNzZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL01hcmtlZFRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFy
a2VkVGV4dC5oCkBAIC0yNSwxMSArMjUsMTUgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRl
ICJUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCIKKyNpbmNsdWRlICJUZXh0UGFpbnRTdHlsZS5oIgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFz
cyBSZW5kZXJUZXh0OwogY2xhc3MgUmVuZGVyZWREb2N1bWVudE1hcmtlcjsKIAogc3RydWN0IE1h
cmtlZFRleHQgewpAQCAtNjYsOCArNzAsNDIgQEAgc3RydWN0IE1hcmtlZFRleHQgewogICAgIH0K
IH07CiAKK3N0cnVjdCBNYXJrZWRUZXh0U3R5bGUgeworICAgIHN0YXRpYyBib29sIGFyZUJhY2tn
cm91bmRNYXJrZWRUZXh0U3R5bGVzRXF1YWwoY29uc3QgTWFya2VkVGV4dFN0eWxlJiBhLCBjb25z
dCBNYXJrZWRUZXh0U3R5bGUmIGIpCisgICAgeworICAgICAgICByZXR1cm4gYS5iYWNrZ3JvdW5k
Q29sb3IgPT0gYi5iYWNrZ3JvdW5kQ29sb3I7CisgICAgfQorICAgIHN0YXRpYyBib29sIGFyZUZv
cmVncm91bmRNYXJrZWRUZXh0U3R5bGVzRXF1YWwoY29uc3QgTWFya2VkVGV4dFN0eWxlJiBhLCBj
b25zdCBNYXJrZWRUZXh0U3R5bGUmIGIpCisgICAgeworICAgICAgICByZXR1cm4gYS50ZXh0U3R5
bGVzID09IGIudGV4dFN0eWxlcyAmJiBhLnRleHRTaGFkb3cgPT0gYi50ZXh0U2hhZG93ICYmIGEu
YWxwaGEgPT0gYi5hbHBoYTsKKyAgICB9CisgICAgc3RhdGljIGJvb2wgYXJlRGVjb3JhdGlvbk1h
cmtlZFRleHRTdHlsZXNFcXVhbChjb25zdCBNYXJrZWRUZXh0U3R5bGUmIGEsIGNvbnN0IE1hcmtl
ZFRleHRTdHlsZSYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhLnRleHREZWNvcmF0aW9uU3R5
bGVzID09IGIudGV4dERlY29yYXRpb25TdHlsZXMgJiYgYS50ZXh0U2hhZG93ID09IGIudGV4dFNo
YWRvdyAmJiBhLmFscGhhID09IGIuYWxwaGE7CisgICAgfQorCisgICAgQ29sb3IgYmFja2dyb3Vu
ZENvbG9yOworICAgIFRleHRQYWludFN0eWxlIHRleHRTdHlsZXM7CisgICAgVGV4dERlY29yYXRp
b25QYWludGVyOjpTdHlsZXMgdGV4dERlY29yYXRpb25TdHlsZXM7CisgICAgT3B0aW9uYWw8U2hh
ZG93RGF0YT4gdGV4dFNoYWRvdzsKKyAgICBmbG9hdCBhbHBoYTsKK307CisKK3N0cnVjdCBTdHls
ZWRNYXJrZWRUZXh0IDogTWFya2VkVGV4dCB7CisgICAgU3R5bGVkTWFya2VkVGV4dChjb25zdCBN
YXJrZWRUZXh0JiBtYXJrZXIpCisgICAgICAgIDogTWFya2VkVGV4dCB7IG1hcmtlciB9CisgICAg
eworICAgIH0KKworICAgIE1hcmtlZFRleHRTdHlsZSBzdHlsZTsKK307CisKIGVudW0gY2xhc3Mg
T3ZlcmxhcFN0cmF0ZWd5IHsgTm9uZSwgRnJvbnRtb3N0IH07CiBXRUJDT1JFX0VYUE9SVCBWZWN0
b3I8TWFya2VkVGV4dD4gc3ViZGl2aWRlKGNvbnN0IFZlY3RvcjxNYXJrZWRUZXh0PiYsIE92ZXJs
YXBTdHJhdGVneSA9IE92ZXJsYXBTdHJhdGVneTo6Tm9uZSk7CitWZWN0b3I8U3R5bGVkTWFya2Vk
VGV4dD4gc3ViZGl2aWRlQW5kUmVzb2x2ZVN0eWxlKGNvbnN0IFZlY3RvcjxNYXJrZWRUZXh0PiYs
IGNvbnN0IFJlbmRlclRleHQmLCBib29sIGlzRmlyc3RMaW5lLCBjb25zdCBQYWludEluZm8mKTsK
KwordXNpbmcgTWFya2VkVGV4dFN0eWxlc0VxdWFsaXR5RnVuY3Rpb24gPSBib29sICgqKShjb25z
dCBNYXJrZWRUZXh0U3R5bGUmLCBjb25zdCBNYXJrZWRUZXh0U3R5bGUmKTsKK1ZlY3RvcjxTdHls
ZWRNYXJrZWRUZXh0PiBjb2FsZXNjZUFkamFjZW50TWFya2VkVGV4dHMoY29uc3QgVmVjdG9yPFN0
eWxlZE1hcmtlZFRleHQ+JiwgTWFya2VkVGV4dFN0eWxlc0VxdWFsaXR5RnVuY3Rpb24pOwogCiB9
CiAK
</data>
<flag name="commit-queue"
          id="434562"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416957</attachid>
            <date>2021-01-04 11:41:22 -0800</date>
            <delta_ts>2021-01-05 07:18:14 -0800</delta_ts>
            <desc>patch</desc>
            <filename>marked-text-refactor-2.patch</filename>
            <type>text/plain</type>
            <size>28886</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzZjJiN2NmY2RlOTQuLjE1NmM0Y2EwNThhMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDM0IEBACisyMDIxLTAxLTA0ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gRmFjdG9yIG1hcmtlZCB0ZXh0IHN0eWxl
IGNvbGxlY3Rpb24gY29kZSBvdXQgb2YgSW5saW5lVGV4dEJveAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMjQ5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU28gd2UgY2FuIHRlYWNoIExGQyB0byBwYWlu
dCBzZWxlY3Rpb25zIGFuZCBvdGhlciBtYXJrZWQgdGV4dC4KKworICAgICAgICAqIHJlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6Ok1hcmtlZFRleHRTdHlsZTo6
YXJlQmFja2dyb3VuZE1hcmtlZFRleHRTdHlsZXNFcXVhbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpNYXJrZWRUZXh0U3R5bGU6OmFyZUZvcmVncm91bmRNYXJr
ZWRUZXh0U3R5bGVzRXF1YWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6TWFya2VkVGV4dFN0eWxlOjphcmVEZWNvcmF0aW9uTWFya2VkVGV4dFN0eWxlc0VxdWFs
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OlN0eWxlZE1hcmtl
ZFRleHQ6OlN0eWxlZE1hcmtlZFRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6Y29tcHV0ZVN0eWxlRm9yVW5tYXJrZWRNYXJrZWRUZXh0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnJlc29sdmVTdHlsZUZvck1h
cmtlZFRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6c3Vi
ZGl2aWRlQW5kUmVzb2x2ZVN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZVRleHRCb3g6OmNvYWxlc2NlQWRqYWNlbnRNYXJrZWRUZXh0cyk6IERlbGV0ZWQuCisgICAgICAg
ICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvTWFya2Vk
VGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlU3R5bGVGb3JNYXJrZWRUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVTdHlsZUZvclVubWFya2VkTWFya2VkVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpzdWJkaXZpZGVBbmRSZXNvbHZlU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29hbGVzY2VBZGphY2VudE1hcmtlZFRleHRzKToKKyAgICAgICAgKiByZW5kZXJpbmcv
TWFya2VkVGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6TWFya2VkVGV4dFN0eWxlOjphcmVCYWNr
Z3JvdW5kTWFya2VkVGV4dFN0eWxlc0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmtlZFRl
eHRTdHlsZTo6YXJlRm9yZWdyb3VuZE1hcmtlZFRleHRTdHlsZXNFcXVhbCk6CisgICAgICAgIChX
ZWJDb3JlOjpNYXJrZWRUZXh0U3R5bGU6OmFyZURlY29yYXRpb25NYXJrZWRUZXh0U3R5bGVzRXF1
YWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya2VkVGV4dDo6U3R5bGVkTWFya2VkVGV4
dCk6CisKIDIwMjEtMDEtMDQgIEplZmYgTWlsbGVyICA8amVmZm1AYXBwbGUuY29tPgogCiAgICAg
ICAgIFVwZGF0ZSB1c2VyLXZpc2libGUgY29weXJpZ2h0IHN0cmluZ3MgdG8gaW5jbHVkZSAyMDIx
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZQppbmRleCBhZGU1YzY5MDI0MjkuLjk3OGZiZDc5OTIyOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCkBAIC0xNTExLDYgKzE1MTEsOCBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUFERVJTCiAgICAgcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAogICAgIHJlbmRl
cmluZy9TY3JvbGxBbGlnbm1lbnQuaAogICAgIHJlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEu
aAorICAgIHJlbmRlcmluZy9UZXh0RGVjb3JhdGlvblBhaW50ZXIuaAorICAgIHJlbmRlcmluZy9U
ZXh0UGFpbnRTdHlsZS5oCiAKICAgICByZW5kZXJpbmcvbGluZS9MaW5lV2lkdGguaAogICAgIHJl
bmRlcmluZy9saW5lL1RyYWlsaW5nT2JqZWN0cy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjU5YmEwOTc4NDQ2Li40ZDliNDYy
MzU2ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTE5MDQsNyArMTkwNCw3IEBACiAJCTU4MDM3MTY0MUE2NkYxRDMwMEJBRjUx
OSAvKiBMYXllckZyYWdtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1ODAzNzE2MzFBNjZGMUQzMDBCQUY1MTkgLyogTGF5ZXJGcmFnbWVudC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU4MjRBQkEz
MUFFODExMTYwMDkwNzRCNyAvKiBSdWJ5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTgyNEFCQTExQUU4MTExNjAwOTA3NEI3IC8qIFJ1YnlF
bGVtZW50LmggKi87IH07CiAJCTU4MjRBQkE3MUFFODEzODQwMDkwNzRCNyAvKiBSdWJ5VGV4dEVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4
MjRBQkE1MUFFODEzODQwMDkwNzRCNyAvKiBSdWJ5VGV4dEVsZW1lbnQuaCAqLzsgfTsKLQkJNTgy
REUzMjUxQzMwQzg1NDAwQkUwMkE4IC8qIFRleHREZWNvcmF0aW9uUGFpbnRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTgyREUzMjMxQzMwQzg1NDAw
QkUwMkE4IC8qIFRleHREZWNvcmF0aW9uUGFpbnRlci5oICovOyB9OworCQk1ODJERTMyNTFDMzBD
ODU0MDBCRTAyQTggLyogVGV4dERlY29yYXRpb25QYWludGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODJERTMyMzFDMzBDODU0MDBCRTAyQTggLyog
VGV4dERlY29yYXRpb25QYWludGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTg5NTU2RUQxOEQ0QTQ0MDAwNzY0QjAzIC8qIEJvcmRlckVkZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4OTU1NkVD
MThENEE0NDAwMDc2NEIwMyAvKiBCb3JkZXJFZGdlLmggKi87IH07CiAJCTU4QjJGOUY0MjIzMkQ0
NTMwMDkzOEQ2MyAvKiBSZXNpemVPYnNlcnZhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNThCMkY5RjMyMjMyRDQzRjAwOTM4RDYzIC8qIFJlc2l6
ZU9ic2VydmF0aW9uLmggKi87IH07CiAJCTU4QjJGOUY1MjIzMkQ0NTgwMDkzOEQ2MyAvKiBSZXNp
emVPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNThCMkY5RUMyMjMyRDQzQjAwOTM4RDYzIC8qIFJlc2l6ZU9ic2VydmVyLmggKi87IH07CkBA
IC01MTY4LDcgKzUxNjgsNyBAQAogCQlFNEMxNzg5QjBFRTY5MDM4MDA4MjRENjkgLyogQ1NTU2Vs
ZWN0b3JMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNEMxNzg5NjBFRTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTRDMjc5NTkwQ0Y5NzQx
OTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNEMyNzk1NzBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNEMz
QjFGQTBGMEU0MTYxMDA5NjkzRjYgLyogTGVnYWN5VGlsZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEMzQjFGOTBGMEU0MTYxMDA5NjkzRjYg
LyogTGVnYWN5VGlsZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJRTRDOTFBMEUxODAyMzQzMTAwQTE3RjZEIC8qIFRleHRQYWludFN0eWxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEM5MUEw
RDE4MDIzNDMxMDBBMTdGNkQgLyogVGV4dFBhaW50U3R5bGUuaCAqLzsgfTsKKwkJRTRDOTFBMEUx
ODAyMzQzMTAwQTE3RjZEIC8qIFRleHRQYWludFN0eWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEM5MUEwRDE4MDIzNDMxMDBBMTdGNkQgLyogVGV4
dFBhaW50U3R5bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlFNEM5MUExNjE4MDk5OUYxMDBBMTdGNkQgLyogUmVuZGVyVGV4dExpbmVCb3hlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDOTFBMTUx
ODA5OTlGMTAwQTE3RjZEIC8qIFJlbmRlclRleHRMaW5lQm94ZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNEQzM0YzQjI1MkFFRUNEMDA4MzdE
MDUgLyogSW5saW5lUnVuQW5kT2Zmc2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFNEQzM0YzOTI1MkFFRUNDMDA4MzdEMDUgLyogSW5saW5lUnVuQW5k
T2Zmc2V0LmggKi87IH07CiAJCUU0RDMzRjQxMjUyQzRCODMwMDgzN0QwNSAvKiBMYXlvdXRJbnRl
Z3JhdGlvbkxpbmVJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTREMzNGM0YyNTJDNEI4MjAwODM3RDA1IC8qIExheW91dEludGVncmF0aW9u
TGluZUl0ZXJhdG9yLmggKi87IH07CkBAIC02MDQ3LDggKzYwNDcsOCBAQAogCQkwRjRDREVBQTIz
RDkxQThBMDAyNTFCMDIgLyogU2Nyb2xsVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Ny
b2xsVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4MTIxM0Ix
QkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENTU0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGNTNGQjg0MjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODMyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTNGQjg0MjEzQjc4
NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY1M0ZCODkyMTNCNzY4NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyRmlsdGVycy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW5kZXJMYXllckZpbHRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY1M0ZCOEIyMTNCNzY4NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyRmlsdGVycy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJMYXllckZpbHRlcnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjU0RENFMzE4ODEwNTFEMDAzRUVEQkIgLyogVGV4dEF1dG9TaXpp
bmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dEF1dG9TaXpp
bmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IGJlZThjMGRiMzY5MS4uNjVlMjgyZWI4NjNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBAIC00MzMsMzYg
KzQzMyw2IEBAIE9wdGlvbmFsPGJvb2w+IElubGluZVRleHRCb3g6OmVtcGhhc2lzTWFya0V4aXN0
c0FuZElzQWJvdmUoY29uc3QgUmVuZGVyU3R5bGUmIHN0CiAgICAgcmV0dXJuIGlzQWJvdmU7CiB9
CiAKLXN0cnVjdCBJbmxpbmVUZXh0Qm94OjpNYXJrZWRUZXh0U3R5bGUgewotICAgIHN0YXRpYyBi
b29sIGFyZUJhY2tncm91bmRNYXJrZWRUZXh0U3R5bGVzRXF1YWwoY29uc3QgTWFya2VkVGV4dFN0
eWxlJiBhLCBjb25zdCBNYXJrZWRUZXh0U3R5bGUmIGIpCi0gICAgewotICAgICAgICByZXR1cm4g
YS5iYWNrZ3JvdW5kQ29sb3IgPT0gYi5iYWNrZ3JvdW5kQ29sb3I7Ci0gICAgfQotICAgIHN0YXRp
YyBib29sIGFyZUZvcmVncm91bmRNYXJrZWRUZXh0U3R5bGVzRXF1YWwoY29uc3QgTWFya2VkVGV4
dFN0eWxlJiBhLCBjb25zdCBNYXJrZWRUZXh0U3R5bGUmIGIpCi0gICAgewotICAgICAgICByZXR1
cm4gYS50ZXh0U3R5bGVzID09IGIudGV4dFN0eWxlcyAmJiBhLnRleHRTaGFkb3cgPT0gYi50ZXh0
U2hhZG93ICYmIGEuYWxwaGEgPT0gYi5hbHBoYTsKLSAgICB9Ci0gICAgc3RhdGljIGJvb2wgYXJl
RGVjb3JhdGlvbk1hcmtlZFRleHRTdHlsZXNFcXVhbChjb25zdCBNYXJrZWRUZXh0U3R5bGUmIGEs
IGNvbnN0IE1hcmtlZFRleHRTdHlsZSYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhLnRleHRE
ZWNvcmF0aW9uU3R5bGVzID09IGIudGV4dERlY29yYXRpb25TdHlsZXMgJiYgYS50ZXh0U2hhZG93
ID09IGIudGV4dFNoYWRvdyAmJiBhLmFscGhhID09IGIuYWxwaGE7Ci0gICAgfQotCi0gICAgQ29s
b3IgYmFja2dyb3VuZENvbG9yOwotICAgIFRleHRQYWludFN0eWxlIHRleHRTdHlsZXM7Ci0gICAg
VGV4dERlY29yYXRpb25QYWludGVyOjpTdHlsZXMgdGV4dERlY29yYXRpb25TdHlsZXM7Ci0gICAg
T3B0aW9uYWw8U2hhZG93RGF0YT4gdGV4dFNoYWRvdzsKLSAgICBmbG9hdCBhbHBoYTsKLX07Ci0K
LXN0cnVjdCBJbmxpbmVUZXh0Qm94OjpTdHlsZWRNYXJrZWRUZXh0IDogTWFya2VkVGV4dCB7Ci0g
ICAgU3R5bGVkTWFya2VkVGV4dChjb25zdCBNYXJrZWRUZXh0JiBtYXJrZXIpCi0gICAgICAgIDog
TWFya2VkVGV4dCB7IG1hcmtlciB9Ci0gICAgewotICAgIH0KLQotICAgIE1hcmtlZFRleHRTdHls
ZSBzdHlsZTsKLX07Ci0KIHN0YXRpYyBNYXJrZWRUZXh0IGNyZWF0ZU1hcmtlZFRleHRGcm9tU2Vs
ZWN0aW9uSW5Cb3goY29uc3QgSW5saW5lVGV4dEJveCYgYm94KQogewogICAgIGF1dG8gW3NlbGVj
dGlvblN0YXJ0LCBzZWxlY3Rpb25FbmRdID0gYm94LnNlbGVjdGlvblN0YXJ0RW5kKCk7CkBAIC01
NDQsOCArNTE0LDYgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LAogICAgIGJvb2wgY29udGFpbnND
b21wb3NpdGlvbiA9IHJlbmRlcmVyKCkudGV4dE5vZGUoKSAmJiByZW5kZXJlcigpLmZyYW1lKCku
ZWRpdG9yKCkuY29tcG9zaXRpb25Ob2RlKCkgPT0gcmVuZGVyZXIoKS50ZXh0Tm9kZSgpOwogICAg
IGJvb2wgdXNlQ3VzdG9tVW5kZXJsaW5lcyA9IGNvbnRhaW5zQ29tcG9zaXRpb24gJiYgcmVuZGVy
ZXIoKS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uVXNlc0N1c3RvbVVuZGVybGluZXMoKTsK
IAotICAgIE1hcmtlZFRleHRTdHlsZSB1bm1hcmtlZFN0eWxlID0gY29tcHV0ZVN0eWxlRm9yVW5t
YXJrZWRNYXJrZWRUZXh0KHBhaW50SW5mbyk7Ci0KICAgICAvLyAxLiBQYWludCBiYWNrZ3JvdW5k
cyBiZWhpbmQgdGV4dCBpZiBuZWVkZWQuIEV4YW1wbGVzIG9mIHN1Y2ggYmFja2dyb3VuZHMgaW5j
bHVkZSBzZWxlY3Rpb24KICAgICAvLyBhbmQgY29tcG9zaXRpb24gdW5kZXJsaW5lcy4KICAgICBp
ZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlNlbGVjdGlvbiAmJiBwYWludEluZm8u
cGhhc2UgIT0gUGFpbnRQaGFzZTo6VGV4dENsaXAgJiYgIWlzUHJpbnRpbmcpIHsKQEAgLTU2Myw3
ICs1MzEsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsCiAgICAgICAgICAgICAgICAgbWFya2Vk
VGV4dHMuYXBwZW5kKFdURk1vdmUoc2VsZWN0aW9uTWFya2VkVGV4dCkpOwogICAgICAgICB9CiAj
ZW5kaWYKLSAgICAgICAgYXV0byBzdHlsZWRNYXJrZWRUZXh0cyA9IHN1YmRpdmlkZUFuZFJlc29s
dmVTdHlsZShtYXJrZWRUZXh0cywgdW5tYXJrZWRTdHlsZSwgcGFpbnRJbmZvKTsKKyAgICAgICAg
YXV0byBzdHlsZWRNYXJrZWRUZXh0cyA9IHN1YmRpdmlkZUFuZFJlc29sdmVTdHlsZShtYXJrZWRU
ZXh0cywgcmVuZGVyZXIoKSwgaXNGaXJzdExpbmUoKSwgcGFpbnRJbmZvKTsKIAogICAgICAgICAv
LyBDb2FsZXNjZSBzdHlsZXMgb2YgYWRqYWNlbnQgbWFya2VkIHRleHRzIHRvIG1pbmltaXplIHRo
ZSBudW1iZXIgb2YgZHJhd2luZyBjb21tYW5kcy4KICAgICAgICAgYXV0byBjb2FsZXNjZWRTdHls
ZWRNYXJrZWRUZXh0cyA9IGNvYWxlc2NlQWRqYWNlbnRNYXJrZWRUZXh0cyhzdHlsZWRNYXJrZWRU
ZXh0cywgJk1hcmtlZFRleHRTdHlsZTo6YXJlQmFja2dyb3VuZE1hcmtlZFRleHRTdHlsZXNFcXVh
bCk7CkBAIC02MTEsNyArNTc5LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LAogICAgICAgICAg
ICAgbWFya2VkVGV4dHMuYXBwZW5kKFdURk1vdmUoc2VsZWN0aW9uTWFya2VkVGV4dCkpOwogICAg
IH0KIAotICAgIGF1dG8gc3R5bGVkTWFya2VkVGV4dHMgPSBzdWJkaXZpZGVBbmRSZXNvbHZlU3R5
bGUobWFya2VkVGV4dHMsIHVubWFya2VkU3R5bGUsIHBhaW50SW5mbyk7CisgICAgYXV0byBzdHls
ZWRNYXJrZWRUZXh0cyA9IHN1YmRpdmlkZUFuZFJlc29sdmVTdHlsZShtYXJrZWRUZXh0cywgcmVu
ZGVyZXIoKSwgaXNGaXJzdExpbmUoKSwgcGFpbnRJbmZvKTsKIAogICAgIC8vIC4uLiBub3cgcmVt
b3ZlIHRoZSBzZWxlY3Rpb24gbWFya2VkIHRleHQgaWYgd2UgYXJlIGV4Y2x1ZGluZyBzZWxlY3Rp
b24uCiAgICAgaWYgKCFpc1ByaW50aW5nICYmIHBhaW50SW5mby5wYWludEJlaGF2aW9yLmNvbnRh
aW5zKFBhaW50QmVoYXZpb3I6OkV4Y2x1ZGVTZWxlY3Rpb24pKQpAQCAtNzk2LDE0MSArNzY0LDYg
QEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXIoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdAogICAgIGNvbnRleHQuZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihib3VuZHMsIGxpbmVTdHlsZUZvck1hcmtlZFRleHRUeXBlKCkpOwogfQogCi1hdXRv
IElubGluZVRleHRCb3g6OmNvbXB1dGVTdHlsZUZvclVubWFya2VkTWFya2VkVGV4dChjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbykgY29uc3QgLT4gTWFya2VkVGV4dFN0eWxlCi17Ci0gICAgYXV0
byYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7Ci0KLSAgICBNYXJrZWRUZXh0U3R5bGUg
c3R5bGU7Ci0gICAgc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMgPSBUZXh0RGVjb3JhdGlvblBh
aW50ZXI6OnN0eWxlc0ZvclJlbmRlcmVyKHJlbmRlcmVyKCksIGxpbmVTdHlsZS50ZXh0RGVjb3Jh
dGlvbnNJbkVmZmVjdCgpLCBpc0ZpcnN0TGluZSgpKTsKLSAgICBzdHlsZS50ZXh0U3R5bGVzID0g
Y29tcHV0ZVRleHRQYWludFN0eWxlKHJlbmRlcmVyKCkuZnJhbWUoKSwgbGluZVN0eWxlLCBwYWlu
dEluZm8pOwotICAgIHN0eWxlLnRleHRTaGFkb3cgPSBTaGFkb3dEYXRhOjpjbG9uZShwYWludElu
Zm8uZm9yY2VUZXh0Q29sb3IoKSA/IG51bGxwdHIgOiBsaW5lU3R5bGUudGV4dFNoYWRvdygpKTsK
LSAgICBzdHlsZS5hbHBoYSA9IDE7Ci0gICAgcmV0dXJuIHN0eWxlOwotfQotCi1hdXRvIElubGlu
ZVRleHRCb3g6OnJlc29sdmVTdHlsZUZvck1hcmtlZFRleHQoY29uc3QgTWFya2VkVGV4dCYgbWFy
a2VkVGV4dCwgY29uc3QgTWFya2VkVGV4dFN0eWxlJiBiYXNlU3R5bGUsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvKSAtPiBTdHlsZWRNYXJrZWRUZXh0Ci17Ci0gICAgTWFya2VkVGV4dFN0eWxl
IHN0eWxlID0gYmFzZVN0eWxlOwotICAgIHN3aXRjaCAobWFya2VkVGV4dC50eXBlKSB7Ci0gICAg
Y2FzZSBNYXJrZWRUZXh0OjpDb3JyZWN0aW9uOgotICAgIGNhc2UgTWFya2VkVGV4dDo6RGljdGF0
aW9uQWx0ZXJuYXRpdmVzOgotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgLy8gRklYTUU6
IFNlZSA8cmRhcjovL3Byb2JsZW0vODkzMzM1Mj4uIEFsc28sIHJlbW92ZSB0aGUgUExBVEZPUk0o
SU9TX0ZBTUlMWSktZ3VhcmQuCi0gICAgY2FzZSBNYXJrZWRUZXh0OjpEaWN0YXRpb25QaHJhc2VX
aXRoQWx0ZXJuYXRpdmVzOgotI2VuZGlmCi0gICAgY2FzZSBNYXJrZWRUZXh0OjpHcmFtbWFyRXJy
b3I6Ci0gICAgY2FzZSBNYXJrZWRUZXh0OjpTcGVsbGluZ0Vycm9yOgotICAgIGNhc2UgTWFya2Vk
VGV4dDo6VW5tYXJrZWQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTWFya2VkVGV4dDo6SGln
aGxpZ2h0OgotICAgICAgICBpZiAoYXV0byByZW5kZXJTdHlsZSA9IHBhcmVudCgpLT5yZW5kZXJl
cigpLmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6SGlnaGxpZ2h0LCBtYXJrZWRU
ZXh0LmhpZ2hsaWdodE5hbWUgfSwgJnBhcmVudCgpLT5yZW5kZXJlcigpLnN0eWxlKCkpKSB7Ci0g
ICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSByZW5kZXJTdHlsZS0+YmFja2dyb3Vu
ZENvbG9yKCk7Ci0gICAgICAgICAgICBzdHlsZS50ZXh0U3R5bGVzLmZpbGxDb2xvciA9IHJlbmRl
clN0eWxlLT5jb21wdXRlZFN0cm9rZUNvbG9yKCk7Ci0gICAgICAgICAgICBzdHlsZS50ZXh0U3R5
bGVzLnN0cm9rZUNvbG9yID0gcmVuZGVyU3R5bGUtPmNvbXB1dGVkU3Ryb2tlQ29sb3IoKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBjb2xvciA9IFRleHREZWNvcmF0aW9uUGFpbnRl
cjo6ZGVjb3JhdGlvbkNvbG9yKCpyZW5kZXJTdHlsZS5nZXQoKSk7Ci0gICAgICAgICAgICBhdXRv
IGRlY29yYXRpb25TdHlsZSA9IHJlbmRlclN0eWxlLT50ZXh0RGVjb3JhdGlvblN0eWxlKCk7Ci0g
ICAgICAgICAgICBhdXRvIGRlY29yYXRpb25zID0gcmVuZGVyU3R5bGUtPnRleHREZWNvcmF0aW9u
c0luRWZmZWN0KCk7Ci0KLSAgICAgICAgICAgIGlmIChkZWNvcmF0aW9ucy5jb250YWlucyhUZXh0
RGVjb3JhdGlvbjo6VW5kZXJsaW5lKSkgewotICAgICAgICAgICAgICAgIHN0eWxlLnRleHREZWNv
cmF0aW9uU3R5bGVzLnVuZGVybGluZUNvbG9yID0gY29sb3I7Ci0gICAgICAgICAgICAgICAgc3R5
bGUudGV4dERlY29yYXRpb25TdHlsZXMudW5kZXJsaW5lU3R5bGUgPSBkZWNvcmF0aW9uU3R5bGU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZGVjb3JhdGlvbnMuY29udGFpbnMoVGV4
dERlY29yYXRpb246Ok92ZXJsaW5lKSkgewotICAgICAgICAgICAgICAgIHN0eWxlLnRleHREZWNv
cmF0aW9uU3R5bGVzLm92ZXJsaW5lQ29sb3IgPSBjb2xvcjsKLSAgICAgICAgICAgICAgICBzdHls
ZS50ZXh0RGVjb3JhdGlvblN0eWxlcy5vdmVybGluZVN0eWxlID0gZGVjb3JhdGlvblN0eWxlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRlY29yYXRpb25zLmNvbnRhaW5zKFRleHRE
ZWNvcmF0aW9uOjpMaW5lVGhyb3VnaCkpIHsKLSAgICAgICAgICAgICAgICBzdHlsZS50ZXh0RGVj
b3JhdGlvblN0eWxlcy5saW5ldGhyb3VnaENvbG9yID0gY29sb3I7Ci0gICAgICAgICAgICAgICAg
c3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMubGluZXRocm91Z2hTdHlsZSA9IGRlY29yYXRpb25T
dHlsZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSNpZiBFTkFC
TEUoQVBQX0hJR0hMSUdIVFMpCi0gICAgY2FzZSBNYXJrZWRUZXh0OjpBcHBIaWdobGlnaHQ6IHsK
LSAgICAgICAgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IHN0eWxlQ29sb3JPcHRpb25z
ID0geyBTdHlsZUNvbG9yOjpPcHRpb25zOjpVc2VTeXN0ZW1BcHBlYXJhbmNlIH07Ci0gICAgICAg
IHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHJlbmRlcmVyKCkudGhlbWUoKS5hcHBIaWdobGlnaHRD
b2xvcihzdHlsZUNvbG9yT3B0aW9ucyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSNlbmRpZgot
ICAgIGNhc2UgTWFya2VkVGV4dDo6RHJhZ2dlZENvbnRlbnQ6Ci0gICAgICAgIHN0eWxlLmFscGhh
ID0gMC4yNTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNYXJrZWRUZXh0OjpTZWxlY3Rpb246
IHsKLSAgICAgICAgc3R5bGUudGV4dFN0eWxlcyA9IGNvbXB1dGVUZXh0U2VsZWN0aW9uUGFpbnRT
dHlsZShzdHlsZS50ZXh0U3R5bGVzLCByZW5kZXJlcigpLCBsaW5lU3R5bGUoKSwgcGFpbnRJbmZv
LCBzdHlsZS50ZXh0U2hhZG93KTsKLQotICAgICAgICBDb2xvciBzZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IgPSByZW5kZXJlcigpLnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwotICAgICAgICBz
dHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3I7Ci0gICAgICAg
IGlmIChzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgpICYmIHNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvci5pc1Zpc2libGUoKSAmJiBzdHlsZS50ZXh0U3R5bGVzLmZpbGxDb2xvciA9PSBz
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpCi0gICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29s
b3IgPSBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSgxLjAp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBNYXJrZWRUZXh0OjpUZXh0TWF0Y2g6
IHsKLSAgICAgICAgLy8gVGV4dCBtYXRjaGVzIGFsd2F5cyB1c2UgdGhlIGxpZ2h0IHN5c3RlbSBh
cHBlYXJhbmNlLgotICAgICAgICBPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gc3R5bGVD
b2xvck9wdGlvbnMgPSB7IFN0eWxlQ29sb3I6Ok9wdGlvbnM6OlVzZVN5c3RlbUFwcGVhcmFuY2Ug
fTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIHN0eWxlLnRleHRTdHlsZXMuZmlsbENvbG9y
ID0gcmVuZGVyZXIoKS50aGVtZSgpLnN5c3RlbUNvbG9yKENTU1ZhbHVlQXBwbGVTeXN0ZW1MYWJl
bCwgc3R5bGVDb2xvck9wdGlvbnMpOwotI2VuZGlmCi0gICAgICAgIHN0eWxlLmJhY2tncm91bmRD
b2xvciA9IHJlbmRlcmVyKCkudGhlbWUoKS50ZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3Ioc3R5bGVD
b2xvck9wdGlvbnMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotICAgIFN0eWxlZE1h
cmtlZFRleHQgc3R5bGVkTWFya2VkVGV4dCA9IG1hcmtlZFRleHQ7Ci0gICAgc3R5bGVkTWFya2Vk
VGV4dC5zdHlsZSA9IFdURk1vdmUoc3R5bGUpOwotICAgIHJldHVybiBzdHlsZWRNYXJrZWRUZXh0
OwotfQotCi1hdXRvIElubGluZVRleHRCb3g6OnN1YmRpdmlkZUFuZFJlc29sdmVTdHlsZShjb25z
dCBWZWN0b3I8TWFya2VkVGV4dD4mIHRleHRzVG9TdWJkaXZpZGUsIGNvbnN0IE1hcmtlZFRleHRT
dHlsZSYgYmFzZVN0eWxlLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykgLT4gVmVjdG9yPFN0
eWxlZE1hcmtlZFRleHQ+Ci17Ci0gICAgaWYgKHRleHRzVG9TdWJkaXZpZGUuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4geyB9OwotCi0gICAgYXV0byBtYXJrZWRUZXh0cyA9IHN1YmRpdmlkZSh0
ZXh0c1RvU3ViZGl2aWRlKTsKLSAgICBBU1NFUlQoIW1hcmtlZFRleHRzLmlzRW1wdHkoKSk7Ci0g
ICAgaWYgKFVOTElLRUxZKG1hcmtlZFRleHRzLmlzRW1wdHkoKSkpCi0gICAgICAgIHJldHVybiB7
IH07Ci0KLSAgICAvLyBDb21wdXRlIGZyb250bW9zdCBvdmVybGFwcGluZyBzdHlsZWQgbWFya2Vk
IHRleHRzLgotICAgIFZlY3RvcjxTdHlsZWRNYXJrZWRUZXh0PiBmcm9udG1vc3RNYXJrZWRUZXh0
czsKLSAgICBmcm9udG1vc3RNYXJrZWRUZXh0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1hcmtl
ZFRleHRzLnNpemUoKSk7Ci0gICAgZnJvbnRtb3N0TWFya2VkVGV4dHMudW5jaGVja2VkQXBwZW5k
KHJlc29sdmVTdHlsZUZvck1hcmtlZFRleHQobWFya2VkVGV4dHNbMF0sIGJhc2VTdHlsZSwgcGFp
bnRJbmZvKSk7Ci0gICAgZm9yIChhdXRvIGl0ID0gbWFya2VkVGV4dHMuYmVnaW4oKSArIDEsIGVu
ZCA9IG1hcmtlZFRleHRzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU3R5bGVk
TWFya2VkVGV4dCYgcHJldmlvdXNTdHlsZWRNYXJrZWRUZXh0ID0gZnJvbnRtb3N0TWFya2VkVGV4
dHMubGFzdCgpOwotICAgICAgICBpZiAocHJldmlvdXNTdHlsZWRNYXJrZWRUZXh0LnN0YXJ0T2Zm
c2V0ID09IGl0LT5zdGFydE9mZnNldCAmJiBwcmV2aW91c1N0eWxlZE1hcmtlZFRleHQuZW5kT2Zm
c2V0ID09IGl0LT5lbmRPZmZzZXQpIHsKLSAgICAgICAgICAgIC8vIE1hcmtlZCB0ZXh0cyBjb21w
bGV0ZWx5IGNvdmVyIGVhY2ggb3RoZXIuCi0gICAgICAgICAgICBwcmV2aW91c1N0eWxlZE1hcmtl
ZFRleHQgPSByZXNvbHZlU3R5bGVGb3JNYXJrZWRUZXh0KCppdCwgcHJldmlvdXNTdHlsZWRNYXJr
ZWRUZXh0LnN0eWxlLCBwYWludEluZm8pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLSAgICAgICAgZnJvbnRtb3N0TWFya2VkVGV4dHMudW5jaGVja2VkQXBwZW5kKHJlc29sdmVT
dHlsZUZvck1hcmtlZFRleHQoKml0LCBiYXNlU3R5bGUsIHBhaW50SW5mbykpOwotICAgIH0KLQot
ICAgIHJldHVybiBmcm9udG1vc3RNYXJrZWRUZXh0czsKLX0KLQotYXV0byBJbmxpbmVUZXh0Qm94
Ojpjb2FsZXNjZUFkamFjZW50TWFya2VkVGV4dHMoY29uc3QgVmVjdG9yPFN0eWxlZE1hcmtlZFRl
eHQ+JiB0ZXh0c1RvQ29hbGVzY2UsIE1hcmtlZFRleHRTdHlsZXNFcXVhbGl0eUZ1bmN0aW9uIGFy
ZU1hcmtlZFRleHRTdHlsZXNFcXVhbCkgLT4gVmVjdG9yPFN0eWxlZE1hcmtlZFRleHQ+Ci17Ci0g
ICAgaWYgKHRleHRzVG9Db2FsZXNjZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0K
LSAgICBhdXRvIGFyZUFkamFjZW50TWFya2VkVGV4dHNXaXRoU2FtZVN0eWxlID0gWyZdIChjb25z
dCBTdHlsZWRNYXJrZWRUZXh0JiBhLCBjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBiKSB7Ci0gICAg
ICAgIHJldHVybiBhLmVuZE9mZnNldCA9PSBiLnN0YXJ0T2Zmc2V0ICYmIGFyZU1hcmtlZFRleHRT
dHlsZXNFcXVhbChhLnN0eWxlLCBiLnN0eWxlKTsKLSAgICB9OwotCi0gICAgVmVjdG9yPFN0eWxl
ZE1hcmtlZFRleHQ+IHN0eWxlZE1hcmtlZFRleHRzOwotICAgIHN0eWxlZE1hcmtlZFRleHRzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkodGV4dHNUb0NvYWxlc2NlLnNpemUoKSk7Ci0gICAgc3R5bGVk
TWFya2VkVGV4dHMudW5jaGVja2VkQXBwZW5kKHRleHRzVG9Db2FsZXNjZVswXSk7Ci0gICAgZm9y
IChhdXRvIGl0ID0gdGV4dHNUb0NvYWxlc2NlLmJlZ2luKCkgKyAxLCBlbmQgPSB0ZXh0c1RvQ29h
bGVzY2UuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTdHlsZWRNYXJrZWRUZXh0
JiBwcmV2aW91c1N0eWxlZE1hcmtlZFRleHQgPSBzdHlsZWRNYXJrZWRUZXh0cy5sYXN0KCk7Ci0g
ICAgICAgIGlmIChhcmVBZGphY2VudE1hcmtlZFRleHRzV2l0aFNhbWVTdHlsZShwcmV2aW91c1N0
eWxlZE1hcmtlZFRleHQsICppdCkpIHsKLSAgICAgICAgICAgIHByZXZpb3VzU3R5bGVkTWFya2Vk
VGV4dC5lbmRPZmZzZXQgPSBpdC0+ZW5kT2Zmc2V0OwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgc3R5bGVkTWFya2VkVGV4dHMudW5jaGVja2VkQXBwZW5kKCppdCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0eWxlZE1hcmtlZFRleHRzOwotfQotCiBWZWN0b3I8TWFy
a2VkVGV4dD4gSW5saW5lVGV4dEJveDo6Y29sbGVjdE1hcmtlZFRleHRzRm9yRHJhZ2dlZENvbnRl
bnQoKQogewogICAgIHVzaW5nIERyYWdnZW5kQ29udGVudFJhbmdlID0gc3RkOjpwYWlyPHVuc2ln
bmVkLCB1bnNpZ25lZD47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaApp
bmRleCAzMjg5Yjk2MmVhMGEuLjBmNzE3YmQ3NmIwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5oCkBAIC0zMyw2ICszMyw3IEBAIGNsYXNzIFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXI7CiBjbGFzcyBUZXh0UGFpbnRlcjsKIHN0cnVjdCBDb21wb3NpdGlvblVuZGVybGlu
ZTsKIHN0cnVjdCBNYXJrZWRUZXh0Oworc3RydWN0IFN0eWxlZE1hcmtlZFRleHQ7CiBzdHJ1Y3Qg
VGV4dFBhaW50U3R5bGU7CiAKIGNvbnN0IHVuc2lnbmVkIHNob3J0IGNOb1RydW5jYXRpb24gPSBV
U0hSVF9NQVg7CkBAIC0xNjQsMjIgKzE2NSwxMiBAQCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0IGNh
bGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IE1hcmtlZFRleHQmKSBjb25zdDsKIAog
cHJpdmF0ZToKLSAgICBzdHJ1Y3QgTWFya2VkVGV4dFN0eWxlOwotICAgIHN0cnVjdCBTdHlsZWRN
YXJrZWRUZXh0OwotCiAgICAgZW51bSBjbGFzcyBUZXh0UGFpbnRQaGFzZSB7IEJhY2tncm91bmQs
IEZvcmVncm91bmQsIERlY29yYXRpb24gfTsKIAogICAgIFZlY3RvcjxNYXJrZWRUZXh0PiBjb2xs
ZWN0TWFya2VkVGV4dHNGb3JEcmFnZ2VkQ29udGVudCgpOwogICAgIFZlY3RvcjxNYXJrZWRUZXh0
PiBjb2xsZWN0TWFya2VkVGV4dHNGb3JEb2N1bWVudE1hcmtlcnMoVGV4dFBhaW50UGhhc2UpIGNv
bnN0OwogICAgIFZlY3RvcjxNYXJrZWRUZXh0PiBjb2xsZWN0TWFya2VkVGV4dHNGb3JIaWdobGln
aHRzKFRleHRQYWludFBoYXNlKSBjb25zdDsKIAotICAgIE1hcmtlZFRleHRTdHlsZSBjb21wdXRl
U3R5bGVGb3JVbm1hcmtlZE1hcmtlZFRleHQoY29uc3QgUGFpbnRJbmZvJikgY29uc3Q7Ci0gICAg
U3R5bGVkTWFya2VkVGV4dCByZXNvbHZlU3R5bGVGb3JNYXJrZWRUZXh0KGNvbnN0IE1hcmtlZFRl
eHQmLCBjb25zdCBNYXJrZWRUZXh0U3R5bGUmIGJhc2VTdHlsZSwgY29uc3QgUGFpbnRJbmZvJik7
Ci0gICAgVmVjdG9yPFN0eWxlZE1hcmtlZFRleHQ+IHN1YmRpdmlkZUFuZFJlc29sdmVTdHlsZShj
b25zdCBWZWN0b3I8TWFya2VkVGV4dD4mLCBjb25zdCBNYXJrZWRUZXh0U3R5bGUmIGJhc2VTdHls
ZSwgY29uc3QgUGFpbnRJbmZvJik7Ci0KLSAgICB1c2luZyBNYXJrZWRUZXh0U3R5bGVzRXF1YWxp
dHlGdW5jdGlvbiA9IGJvb2wgKCopKGNvbnN0IE1hcmtlZFRleHRTdHlsZSYsIGNvbnN0IE1hcmtl
ZFRleHRTdHlsZSYpOwotICAgIFZlY3RvcjxTdHlsZWRNYXJrZWRUZXh0PiBjb2FsZXNjZUFkamFj
ZW50TWFya2VkVGV4dHMoY29uc3QgVmVjdG9yPFN0eWxlZE1hcmtlZFRleHQ+JiwgTWFya2VkVGV4
dFN0eWxlc0VxdWFsaXR5RnVuY3Rpb24pOwotCiAgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luRnJv
bUJveFJlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAKICAgICB2b2lkIHBhaW50TWFya2Vk
VGV4dHMoUGFpbnRJbmZvJiwgVGV4dFBhaW50UGhhc2UsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVj
dCwgY29uc3QgVmVjdG9yPFN0eWxlZE1hcmtlZFRleHQ+JiwgY29uc3QgRmxvYXRSZWN0JiBkZWNv
cmF0aW9uQ2xpcE91dFJlY3QgPSB7IH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL01hcmtlZFRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01hcmtlZFRl
eHQuY3BwCmluZGV4IGRiODQ5YTRmYmNiZi4uZjQ1ODZkNmE5YjdjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFya2VkVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL01hcmtlZFRleHQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiTWFya2VkVGV4dC5oIgogCisjaW5jbHVkZSAiRWxlbWVudFJ1bGVDb2xs
ZWN0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4
dC5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKQEAgLTkzLDYgKzk3LDE0MiBAQCBWZWN0b3I8TWFya2Vk
VGV4dD4gc3ViZGl2aWRlKGNvbnN0IFZlY3RvcjxNYXJrZWRUZXh0PiYgbWFya2VkVGV4dHMsIE92
ZXJsYXBTdHJhdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBTdHlsZWRNYXJrZWRU
ZXh0IHJlc29sdmVTdHlsZUZvck1hcmtlZFRleHQoY29uc3QgTWFya2VkVGV4dCYgbWFya2VkVGV4
dCwgY29uc3QgTWFya2VkVGV4dFN0eWxlJiBiYXNlU3R5bGUsIGNvbnN0IFJlbmRlclRleHQmIHJl
bmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbykKK3sKKyAgICBNYXJrZWRUZXh0U3R5bGUgc3R5bGUgPSBiYXNlU3R5bGU7CisgICAg
c3dpdGNoIChtYXJrZWRUZXh0LnR5cGUpIHsKKyAgICBjYXNlIE1hcmtlZFRleHQ6OkNvcnJlY3Rp
b246CisgICAgY2FzZSBNYXJrZWRUZXh0OjpEaWN0YXRpb25BbHRlcm5hdGl2ZXM6CisjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAvLyBGSVhNRTogU2VlIDxyZGFyOi8vcHJvYmxlbS84OTMz
MzUyPi4gQWxzbywgcmVtb3ZlIHRoZSBQTEFURk9STShJT1NfRkFNSUxZKS1ndWFyZC4KKyAgICBj
YXNlIE1hcmtlZFRleHQ6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXM6CisjZW5kaWYK
KyAgICBjYXNlIE1hcmtlZFRleHQ6OkdyYW1tYXJFcnJvcjoKKyAgICBjYXNlIE1hcmtlZFRleHQ6
OlNwZWxsaW5nRXJyb3I6CisgICAgY2FzZSBNYXJrZWRUZXh0OjpVbm1hcmtlZDoKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBNYXJrZWRUZXh0OjpIaWdobGlnaHQ6CisgICAgICAgIGlmIChhdXRv
IHJlbmRlclN0eWxlID0gcmVuZGVyZXIucGFyZW50KCktPmdldFVuY2FjaGVkUHNldWRvU3R5bGUo
eyBQc2V1ZG9JZDo6SGlnaGxpZ2h0LCBtYXJrZWRUZXh0LmhpZ2hsaWdodE5hbWUgfSwgJnJlbmRl
cmVyLnN0eWxlKCkpKSB7CisgICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSByZW5k
ZXJTdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgICAgICBzdHlsZS50ZXh0U3R5bGVz
LmZpbGxDb2xvciA9IHJlbmRlclN0eWxlLT5jb21wdXRlZFN0cm9rZUNvbG9yKCk7CisgICAgICAg
ICAgICBzdHlsZS50ZXh0U3R5bGVzLnN0cm9rZUNvbG9yID0gcmVuZGVyU3R5bGUtPmNvbXB1dGVk
U3Ryb2tlQ29sb3IoKTsKKworICAgICAgICAgICAgYXV0byBjb2xvciA9IFRleHREZWNvcmF0aW9u
UGFpbnRlcjo6ZGVjb3JhdGlvbkNvbG9yKCpyZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgICAg
ICBhdXRvIGRlY29yYXRpb25TdHlsZSA9IHJlbmRlclN0eWxlLT50ZXh0RGVjb3JhdGlvblN0eWxl
KCk7CisgICAgICAgICAgICBhdXRvIGRlY29yYXRpb25zID0gcmVuZGVyU3R5bGUtPnRleHREZWNv
cmF0aW9uc0luRWZmZWN0KCk7CisKKyAgICAgICAgICAgIGlmIChkZWNvcmF0aW9ucy5jb250YWlu
cyhUZXh0RGVjb3JhdGlvbjo6VW5kZXJsaW5lKSkgeworICAgICAgICAgICAgICAgIHN0eWxlLnRl
eHREZWNvcmF0aW9uU3R5bGVzLnVuZGVybGluZUNvbG9yID0gY29sb3I7CisgICAgICAgICAgICAg
ICAgc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMudW5kZXJsaW5lU3R5bGUgPSBkZWNvcmF0aW9u
U3R5bGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGVjb3JhdGlvbnMuY29udGFp
bnMoVGV4dERlY29yYXRpb246Ok92ZXJsaW5lKSkgeworICAgICAgICAgICAgICAgIHN0eWxlLnRl
eHREZWNvcmF0aW9uU3R5bGVzLm92ZXJsaW5lQ29sb3IgPSBjb2xvcjsKKyAgICAgICAgICAgICAg
ICBzdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcy5vdmVybGluZVN0eWxlID0gZGVjb3JhdGlvblN0
eWxlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlY29yYXRpb25zLmNvbnRhaW5z
KFRleHREZWNvcmF0aW9uOjpMaW5lVGhyb3VnaCkpIHsKKyAgICAgICAgICAgICAgICBzdHlsZS50
ZXh0RGVjb3JhdGlvblN0eWxlcy5saW5ldGhyb3VnaENvbG9yID0gY29sb3I7CisgICAgICAgICAg
ICAgICAgc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMubGluZXRocm91Z2hTdHlsZSA9IGRlY29y
YXRpb25TdHlsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyNp
ZiBFTkFCTEUoQVBQX0hJR0hMSUdIVFMpCisgICAgY2FzZSBNYXJrZWRUZXh0OjpBcHBIaWdobGln
aHQ6IHsKKyAgICAgICAgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IHN0eWxlQ29sb3JP
cHRpb25zID0geyBTdHlsZUNvbG9yOjpPcHRpb25zOjpVc2VTeXN0ZW1BcHBlYXJhbmNlIH07Cisg
ICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHJlbmRlcmVyKCkudGhlbWUoKS5hcHBIaWdo
bGlnaHRDb2xvcihzdHlsZUNvbG9yT3B0aW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNl
bmRpZgorICAgIGNhc2UgTWFya2VkVGV4dDo6RHJhZ2dlZENvbnRlbnQ6CisgICAgICAgIHN0eWxl
LmFscGhhID0gMC4yNTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNYXJrZWRUZXh0OjpTZWxl
Y3Rpb246IHsKKyAgICAgICAgc3R5bGUudGV4dFN0eWxlcyA9IGNvbXB1dGVUZXh0U2VsZWN0aW9u
UGFpbnRTdHlsZShzdHlsZS50ZXh0U3R5bGVzLCByZW5kZXJlciwgbGluZVN0eWxlLCBwYWludElu
Zm8sIHN0eWxlLnRleHRTaGFkb3cpOworCisgICAgICAgIENvbG9yIHNlbGVjdGlvbkJhY2tncm91
bmRDb2xvciA9IHJlbmRlcmVyLnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOworICAgICAgICBz
dHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3I7CisgICAgICAg
IGlmIChzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgpICYmIHNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvci5pc1Zpc2libGUoKSAmJiBzdHlsZS50ZXh0U3R5bGVzLmZpbGxDb2xvciA9PSBz
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpCisgICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29s
b3IgPSBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSgxLjAp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBNYXJrZWRUZXh0OjpUZXh0TWF0Y2g6
IHsKKyAgICAgICAgLy8gVGV4dCBtYXRjaGVzIGFsd2F5cyB1c2UgdGhlIGxpZ2h0IHN5c3RlbSBh
cHBlYXJhbmNlLgorICAgICAgICBPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gc3R5bGVD
b2xvck9wdGlvbnMgPSB7IFN0eWxlQ29sb3I6Ok9wdGlvbnM6OlVzZVN5c3RlbUFwcGVhcmFuY2Ug
fTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIHN0eWxlLnRleHRTdHlsZXMuZmlsbENvbG9y
ID0gcmVuZGVyZXIudGhlbWUoKS5zeXN0ZW1Db2xvcihDU1NWYWx1ZUFwcGxlU3lzdGVtTGFiZWws
IHN0eWxlQ29sb3JPcHRpb25zKTsKKyNlbmRpZgorICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29s
b3IgPSByZW5kZXJlci50aGVtZSgpLnRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihzdHlsZUNvbG9y
T3B0aW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisgICAgU3R5bGVkTWFya2Vk
VGV4dCBzdHlsZWRNYXJrZWRUZXh0ID0gbWFya2VkVGV4dDsKKyAgICBzdHlsZWRNYXJrZWRUZXh0
LnN0eWxlID0gV1RGTW92ZShzdHlsZSk7CisgICAgcmV0dXJuIHN0eWxlZE1hcmtlZFRleHQ7Cit9
CisKK3N0YXRpYyBNYXJrZWRUZXh0U3R5bGUgY29tcHV0ZVN0eWxlRm9yVW5tYXJrZWRNYXJrZWRU
ZXh0KGNvbnN0IFJlbmRlclRleHQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0
eWxlLCBib29sIGlzRmlyc3RMaW5lLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykKK3sKKyAg
ICBNYXJrZWRUZXh0U3R5bGUgc3R5bGU7CisgICAgc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMg
PSBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnN0eWxlc0ZvclJlbmRlcmVyKHJlbmRlcmVyLCBsaW5l
U3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSwgaXNGaXJzdExpbmUpOworICAgIHN0eWxl
LnRleHRTdHlsZXMgPSBjb21wdXRlVGV4dFBhaW50U3R5bGUocmVuZGVyZXIuZnJhbWUoKSwgbGlu
ZVN0eWxlLCBwYWludEluZm8pOworICAgIHN0eWxlLnRleHRTaGFkb3cgPSBTaGFkb3dEYXRhOjpj
bG9uZShwYWludEluZm8uZm9yY2VUZXh0Q29sb3IoKSA/IG51bGxwdHIgOiBsaW5lU3R5bGUudGV4
dFNoYWRvdygpKTsKKyAgICBzdHlsZS5hbHBoYSA9IDE7CisgICAgcmV0dXJuIHN0eWxlOworfQor
CitWZWN0b3I8U3R5bGVkTWFya2VkVGV4dD4gc3ViZGl2aWRlQW5kUmVzb2x2ZVN0eWxlKGNvbnN0
IFZlY3RvcjxNYXJrZWRUZXh0PiYgdGV4dHNUb1N1YmRpdmlkZSwgY29uc3QgUmVuZGVyVGV4dCYg
cmVuZGVyZXIsIGJvb2wgaXNGaXJzdExpbmUsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQor
eworICAgIGlmICh0ZXh0c1RvU3ViZGl2aWRlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIGF1dG8gbWFya2VkVGV4dHMgPSBzdWJkaXZpZGUodGV4dHNUb1N1YmRpdmlkZSk7
CisgICAgQVNTRVJUKCFtYXJrZWRUZXh0cy5pc0VtcHR5KCkpOworICAgIGlmIChVTkxJS0VMWSht
YXJrZWRUZXh0cy5pc0VtcHR5KCkpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byYg
bGluZVN0eWxlID0gaXNGaXJzdExpbmUgPyByZW5kZXJlci5maXJzdExpbmVTdHlsZSgpIDogcmVu
ZGVyZXIuc3R5bGUoKTsKKyAgICBhdXRvIGJhc2VTdHlsZSA9IGNvbXB1dGVTdHlsZUZvclVubWFy
a2VkTWFya2VkVGV4dChyZW5kZXJlciwgbGluZVN0eWxlLCBpc0ZpcnN0TGluZSwgcGFpbnRJbmZv
KTsKKworICAgIC8vIENvbXB1dGUgZnJvbnRtb3N0IG92ZXJsYXBwaW5nIHN0eWxlZCBtYXJrZWQg
dGV4dHMuCisgICAgVmVjdG9yPFN0eWxlZE1hcmtlZFRleHQ+IGZyb250bW9zdE1hcmtlZFRleHRz
OworICAgIGZyb250bW9zdE1hcmtlZFRleHRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWFya2Vk
VGV4dHMuc2l6ZSgpKTsKKyAgICBmcm9udG1vc3RNYXJrZWRUZXh0cy51bmNoZWNrZWRBcHBlbmQo
cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dChtYXJrZWRUZXh0c1swXSwgYmFzZVN0eWxlLCByZW5k
ZXJlciwgbGluZVN0eWxlLCBwYWludEluZm8pKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBtYXJrZWRU
ZXh0cy5iZWdpbigpICsgMSwgZW5kID0gbWFya2VkVGV4dHMuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBTdHlsZWRNYXJrZWRUZXh0JiBwcmV2aW91c1N0eWxlZE1hcmtlZFRleHQg
PSBmcm9udG1vc3RNYXJrZWRUZXh0cy5sYXN0KCk7CisgICAgICAgIGlmIChwcmV2aW91c1N0eWxl
ZE1hcmtlZFRleHQuc3RhcnRPZmZzZXQgPT0gaXQtPnN0YXJ0T2Zmc2V0ICYmIHByZXZpb3VzU3R5
bGVkTWFya2VkVGV4dC5lbmRPZmZzZXQgPT0gaXQtPmVuZE9mZnNldCkgeworICAgICAgICAgICAg
Ly8gTWFya2VkIHRleHRzIGNvbXBsZXRlbHkgY292ZXIgZWFjaCBvdGhlci4KKyAgICAgICAgICAg
IHByZXZpb3VzU3R5bGVkTWFya2VkVGV4dCA9IHJlc29sdmVTdHlsZUZvck1hcmtlZFRleHQoKml0
LCBwcmV2aW91c1N0eWxlZE1hcmtlZFRleHQuc3R5bGUsIHJlbmRlcmVyLCBsaW5lU3R5bGUsIHBh
aW50SW5mbyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBmcm9u
dG1vc3RNYXJrZWRUZXh0cy51bmNoZWNrZWRBcHBlbmQocmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4
dCgqaXQsIGJhc2VTdHlsZSwgcmVuZGVyZXIsIGxpbmVTdHlsZSwgcGFpbnRJbmZvKSk7CisgICAg
fQorCisgICAgcmV0dXJuIGZyb250bW9zdE1hcmtlZFRleHRzOworfQorCitWZWN0b3I8U3R5bGVk
TWFya2VkVGV4dD4gY29hbGVzY2VBZGphY2VudE1hcmtlZFRleHRzKGNvbnN0IFZlY3RvcjxTdHls
ZWRNYXJrZWRUZXh0PiYgdGV4dHNUb0NvYWxlc2NlLCBNYXJrZWRUZXh0U3R5bGVzRXF1YWxpdHlG
dW5jdGlvbiBhcmVNYXJrZWRUZXh0U3R5bGVzRXF1YWwpCit7CisgICAgaWYgKHRleHRzVG9Db2Fs
ZXNjZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGFyZUFkamFj
ZW50TWFya2VkVGV4dHNXaXRoU2FtZVN0eWxlID0gWyZdIChjb25zdCBTdHlsZWRNYXJrZWRUZXh0
JiBhLCBjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBiKSB7CisgICAgICAgIHJldHVybiBhLmVuZE9m
ZnNldCA9PSBiLnN0YXJ0T2Zmc2V0ICYmIGFyZU1hcmtlZFRleHRTdHlsZXNFcXVhbChhLnN0eWxl
LCBiLnN0eWxlKTsKKyAgICB9OworCisgICAgVmVjdG9yPFN0eWxlZE1hcmtlZFRleHQ+IHN0eWxl
ZE1hcmtlZFRleHRzOworICAgIHN0eWxlZE1hcmtlZFRleHRzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkodGV4dHNUb0NvYWxlc2NlLnNpemUoKSk7CisgICAgc3R5bGVkTWFya2VkVGV4dHMudW5jaGVj
a2VkQXBwZW5kKHRleHRzVG9Db2FsZXNjZVswXSk7CisgICAgZm9yIChhdXRvIGl0ID0gdGV4dHNU
b0NvYWxlc2NlLmJlZ2luKCkgKyAxLCBlbmQgPSB0ZXh0c1RvQ29hbGVzY2UuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICBTdHlsZWRNYXJrZWRUZXh0JiBwcmV2aW91c1N0eWxlZE1h
cmtlZFRleHQgPSBzdHlsZWRNYXJrZWRUZXh0cy5sYXN0KCk7CisgICAgICAgIGlmIChhcmVBZGph
Y2VudE1hcmtlZFRleHRzV2l0aFNhbWVTdHlsZShwcmV2aW91c1N0eWxlZE1hcmtlZFRleHQsICpp
dCkpIHsKKyAgICAgICAgICAgIHByZXZpb3VzU3R5bGVkTWFya2VkVGV4dC5lbmRPZmZzZXQgPSBp
dC0+ZW5kT2Zmc2V0OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg
c3R5bGVkTWFya2VkVGV4dHMudW5jaGVja2VkQXBwZW5kKCppdCk7CisgICAgfQorCisgICAgcmV0
dXJuIHN0eWxlZE1hcmtlZFRleHRzOworfQorCiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL01hcmtlZFRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9N
YXJrZWRUZXh0LmgKaW5kZXggZTc5NzhhNjRjYzdiLi42YjcxYTQxNzhiN2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NYXJrZWRUZXh0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL01hcmtlZFRleHQuaApAQCAtMjUsMTEgKzI1LDE2IEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSAiU2hhZG93RGF0YS5oIgorI2luY2x1ZGUgIlRleHREZWNvcmF0aW9u
UGFpbnRlci5oIgorI2luY2x1ZGUgIlRleHRQYWludFN0eWxlLmgiCisjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFJlbmRlclRleHQ7CiBj
bGFzcyBSZW5kZXJlZERvY3VtZW50TWFya2VyOwogCiBzdHJ1Y3QgTWFya2VkVGV4dCB7CkBAIC02
Niw4ICs3MSw0MiBAQCBzdHJ1Y3QgTWFya2VkVGV4dCB7CiAgICAgfQogfTsKIAorc3RydWN0IE1h
cmtlZFRleHRTdHlsZSB7CisgICAgc3RhdGljIGJvb2wgYXJlQmFja2dyb3VuZE1hcmtlZFRleHRT
dHlsZXNFcXVhbChjb25zdCBNYXJrZWRUZXh0U3R5bGUmIGEsIGNvbnN0IE1hcmtlZFRleHRTdHls
ZSYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhLmJhY2tncm91bmRDb2xvciA9PSBiLmJhY2tn
cm91bmRDb2xvcjsKKyAgICB9CisgICAgc3RhdGljIGJvb2wgYXJlRm9yZWdyb3VuZE1hcmtlZFRl
eHRTdHlsZXNFcXVhbChjb25zdCBNYXJrZWRUZXh0U3R5bGUmIGEsIGNvbnN0IE1hcmtlZFRleHRT
dHlsZSYgYikKKyAgICB7CisgICAgICAgIHJldHVybiBhLnRleHRTdHlsZXMgPT0gYi50ZXh0U3R5
bGVzICYmIGEudGV4dFNoYWRvdyA9PSBiLnRleHRTaGFkb3cgJiYgYS5hbHBoYSA9PSBiLmFscGhh
OworICAgIH0KKyAgICBzdGF0aWMgYm9vbCBhcmVEZWNvcmF0aW9uTWFya2VkVGV4dFN0eWxlc0Vx
dWFsKGNvbnN0IE1hcmtlZFRleHRTdHlsZSYgYSwgY29uc3QgTWFya2VkVGV4dFN0eWxlJiBiKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGEudGV4dERlY29yYXRpb25TdHlsZXMgPT0gYi50ZXh0RGVj
b3JhdGlvblN0eWxlcyAmJiBhLnRleHRTaGFkb3cgPT0gYi50ZXh0U2hhZG93ICYmIGEuYWxwaGEg
PT0gYi5hbHBoYTsKKyAgICB9CisKKyAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3I7CisgICAgVGV4
dFBhaW50U3R5bGUgdGV4dFN0eWxlczsKKyAgICBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OlN0eWxl
cyB0ZXh0RGVjb3JhdGlvblN0eWxlczsKKyAgICBPcHRpb25hbDxTaGFkb3dEYXRhPiB0ZXh0U2hh
ZG93OworICAgIGZsb2F0IGFscGhhOworfTsKKworc3RydWN0IFN0eWxlZE1hcmtlZFRleHQgOiBN
YXJrZWRUZXh0IHsKKyAgICBTdHlsZWRNYXJrZWRUZXh0KGNvbnN0IE1hcmtlZFRleHQmIG1hcmtl
cikKKyAgICAgICAgOiBNYXJrZWRUZXh0IHsgbWFya2VyIH0KKyAgICB7CisgICAgfQorCisgICAg
TWFya2VkVGV4dFN0eWxlIHN0eWxlOworfTsKKwogZW51bSBjbGFzcyBPdmVybGFwU3RyYXRlZ3kg
eyBOb25lLCBGcm9udG1vc3QgfTsKIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxNYXJrZWRUZXh0PiBz
dWJkaXZpZGUoY29uc3QgVmVjdG9yPE1hcmtlZFRleHQ+JiwgT3ZlcmxhcFN0cmF0ZWd5ID0gT3Zl
cmxhcFN0cmF0ZWd5OjpOb25lKTsKK1ZlY3RvcjxTdHlsZWRNYXJrZWRUZXh0PiBzdWJkaXZpZGVB
bmRSZXNvbHZlU3R5bGUoY29uc3QgVmVjdG9yPE1hcmtlZFRleHQ+JiwgY29uc3QgUmVuZGVyVGV4
dCYsIGJvb2wgaXNGaXJzdExpbmUsIGNvbnN0IFBhaW50SW5mbyYpOworCit1c2luZyBNYXJrZWRU
ZXh0U3R5bGVzRXF1YWxpdHlGdW5jdGlvbiA9IGJvb2wgKCopKGNvbnN0IE1hcmtlZFRleHRTdHls
ZSYsIGNvbnN0IE1hcmtlZFRleHRTdHlsZSYpOworVmVjdG9yPFN0eWxlZE1hcmtlZFRleHQ+IGNv
YWxlc2NlQWRqYWNlbnRNYXJrZWRUZXh0cyhjb25zdCBWZWN0b3I8U3R5bGVkTWFya2VkVGV4dD4m
LCBNYXJrZWRUZXh0U3R5bGVzRXF1YWxpdHlGdW5jdGlvbik7CiAKIH0KIAo=
</data>
<flag name="commit-queue"
          id="434569"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417002</attachid>
            <date>2021-01-05 07:18:14 -0800</date>
            <delta_ts>2021-01-10 05:42:55 -0800</delta_ts>
            <desc>patch</desc>
            <filename>marked-text-refactor-4.patch</filename>
            <type>text/plain</type>
            <size>34375</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkZWM2NjdmMWRkYjMuLmVlNzZlZTNjMGUwOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBA
CisyMDIxLTAxLTA1ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBbTEZDXVtJbnRlZ3JhdGlvbl0gRmFjdG9yIG1hcmtlZCB0ZXh0IHN0eWxlIGNvbGxlY3Rpb24g
Y29kZSBvdXQgb2YgSW5saW5lVGV4dEJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMjQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBUZXN0RXhwZWN0YXRpb25zOgorCisgICAgICAgIE1hcmsgaHR0
cC93cHQvY3NzL2Nzcy1oaWdobGlnaHQtYXBpL2hpZ2hsaWdodC10ZXh0LWNhc2NhZGUuaHRtbCBm
YWlsaW5nLgorCisgICAgICAgIFRoaXMgdGVzdCByZXF1aXJlcyBDU1M0IGhpZ2hsaWdodCBwc2V1
ZG8gZWxlbWVudCBpbmhlcml0YW5jZSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMDMyNSkKKyAgICAgICAgd2hpY2ggd2UgKG9yIGFueW9uZSBlbHNlKSBkb24ndCBz
dXBwb3J0LgorCisgICAgICAgIEl0IHdhcyBwYXNzaW5nIGJ5IGFjY2lkZW50IGJlY2F1c2UgdGhl
IGNvZGUgd2FzIGdldHRpbmcgJzo6aGlnaGxpZ2h0JyBwc2V1ZG8gZWxlbWVudCBzdHlsZSBmcm9t
IGEgd3JvbmcgZWxlbWVudAorICAgICAgICAoY29udGFpbmluZyBibG9jayBpbnN0ZWFkIG9mIGlu
bGluZSBlbGVtZW50KSBpbiBjZXJ0YWluIGNhc2VzLiBSZW5kZXJlciB3YXMgZm91bmQgdmlhIElu
bGluZUJveCBwYXJlbnQoKSB3aGljaCBkb2Vzbid0CisgICAgICAgIG1hdGNoIHJlbmRlciB0cmVl
IHBhcmVudCBpbiBjYXNlIGlubGluZSBjdWxsaW5nIG9wdGltaXphdGlvbiBpcyBhY3RpdmUuIFRo
ZSBjb3JyZWN0IHdheSBpcyB0byB1c2UgcmVuZGVyIHRyZWUgcGFyZW50LgorCiAyMDIwLTEyLTE3
ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIElu
dHJpbnNpYyBzaXplIG5vdCBjb3JyZWN0bHkgc3RvcmVkIGZvciBTVkcgaW1hZ2VzCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvVGVzdEV4cGVj
dGF0aW9ucwppbmRleCBiZmY5NzhhYTRhOGUuLjUzNDU5NWM1N2I1MCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRp
b25zCkBAIC00NTk3LDMgKzQ1OTcsNSBAQCB3ZWJraXQub3JnL2IvMjE3OTMxIGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3Mvc2NyaXB0aW5nLTEvdAogd2Via2l0
Lm9yZy9iLzIxNzkzMSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50
aWNzL3NjcmlwdGluZy0xL3RoZS1zY3JpcHQtZWxlbWVudC9tb3ZpbmctYmV0d2Vlbi1kb2N1bWVu
dHMvbW92ZS1iYWNrLWlmcmFtZS1zdWNjZXNzLWV4dGVybmFsLWNsYXNzaWMuaHRtbCBbIFBhc3Mg
RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjE3OTMxIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvaHRtbC9zZW1hbnRpY3Mvc2NyaXB0aW5nLTEvdGhlLXNjcmlwdC1lbGVtZW50L21vdmlu
Zy1iZXR3ZWVuLWRvY3VtZW50cy9tb3ZlLWJhY2staWZyYW1lLXN1Y2Nlc3MtZXh0ZXJuYWwtbW9k
dWxlLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIxNzkzMSBpbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL3NjcmlwdGluZy0xL3RoZS1zY3Jp
cHQtZWxlbWVudC9tb3ZpbmctYmV0d2Vlbi1kb2N1bWVudHMvbW92ZS1iYWNrLWlmcmFtZS1zdWNj
ZXNzLWlubGluZS1jbGFzc2ljLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQorCit3ZWJraXQub3JnL2Iv
MjIwMzI1IGh0dHAvd3B0L2Nzcy9jc3MtaGlnaGxpZ2h0LWFwaS9oaWdobGlnaHQtdGV4dC1jYXNj
YWRlLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzZjJiN2NmY2RlOTQu
LjAwMmNjZjRlN2QwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDIxLTAxLTA1ICBB
bnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXVtJbnRlZ3Jh
dGlvbl0gRmFjdG9yIG1hcmtlZCB0ZXh0IHN0eWxlIGNvbGxlY3Rpb24gY29kZSBvdXQgb2YgSW5s
aW5lVGV4dEJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjIwMjQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgdGhlIGNvZGUgZnJvbSBMRkMgcGFpbnRp
bmcuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6TWFya2VkVGV4dFN0eWxlOjphcmVCYWNrZ3JvdW5kTWFya2Vk
VGV4dFN0eWxlc0VxdWFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRC
b3g6Ok1hcmtlZFRleHRTdHlsZTo6YXJlRm9yZWdyb3VuZE1hcmtlZFRleHRTdHlsZXNFcXVhbCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpNYXJrZWRUZXh0U3R5
bGU6OmFyZURlY29yYXRpb25NYXJrZWRUZXh0U3R5bGVzRXF1YWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6U3R5bGVkTWFya2VkVGV4dDo6U3R5bGVkTWFya2Vk
VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpjb21wdXRl
U3R5bGVGb3JVbm1hcmtlZE1hcmtlZFRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpzdWJkaXZpZGVBbmRSZXNvbHZlU3R5
bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6Y29hbGVzY2VB
ZGphY2VudE1hcmtlZFRleHRzKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9NYXJrZWRUZXh0U3R5bGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVTdHlsZUZvck1hcmtlZFRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29tcHV0ZVN0eWxlRm9yVW5tYXJrZWRNYXJrZWRUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OnN1YmRpdmlkZUFuZFJlc29sdmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpj
b2FsZXNjZUFkamFjZW50TWFya2VkVGV4dHMpOgorICAgICAgICAqIHJlbmRlcmluZy9NYXJrZWRU
ZXh0U3R5bGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNYXJrZWRUZXh0U3R5bGU6OmFy
ZUJhY2tncm91bmRNYXJrZWRUZXh0U3R5bGVzRXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6TWFy
a2VkVGV4dFN0eWxlOjphcmVGb3JlZ3JvdW5kTWFya2VkVGV4dFN0eWxlc0VxdWFsKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hcmtlZFRleHRTdHlsZTo6YXJlRGVjb3JhdGlvbk1hcmtlZFRleHRTdHls
ZXNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrZWRUZXh0OjpTdHlsZWRNYXJr
ZWRUZXh0KToKKwogMjAyMS0wMS0wNCAgSmVmZiBNaWxsZXIgIDxqZWZmbUBhcHBsZS5jb20+CiAK
ICAgICAgICAgVXBkYXRlIHVzZXItdmlzaWJsZSBjb3B5cmlnaHQgc3RyaW5ncyB0byBpbmNsdWRl
IDIwMjEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggYmI3ZjZjNGQwY2Y3Li45NTk3NWIwMjA4ODYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CkBAIC0yMTk0LDYgKzIxOTQsNyBAQCByZW5kZXJpbmcvTGF5ZXJPdmVybGFwTWFw
LmNwcAogcmVuZGVyaW5nL0xheW91dERpc2FsbG93ZWRTY29wZS5jcHAKIHJlbmRlcmluZy9MYXlv
dXRSZXBhaW50ZXIuY3BwCiByZW5kZXJpbmcvTWFya2VkVGV4dC5jcHAKK3JlbmRlcmluZy9NYXJr
ZWRUZXh0U3R5bGUuY3BwCiByZW5kZXJpbmcvT3JkZXJJdGVyYXRvci5jcHAKIHJlbmRlcmluZy9Q
b2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwCiByZW5kZXJpbmcvUmVuZGVyQXR0YWNobWVudC5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBiNTliYTA5Nzg0NDYuLmMzNjlhZmMzZTYyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTA5MCw2ICs1MDkwLDcgQEAK
IAkJRTQzQTAyM0IxN0VCMzcwQTAwNENERDI1IC8qIFJlbmRlckVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0M0EwMjNBMTdFQjM3MEEwMDRD
REQyNSAvKiBSZW5kZXJFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTQzQUY4RTcxQUM1QjdFQzAwQ0E3MTdFIC8qIENhY2hlVmFsaWRh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQz
QUY4RTUxQUM1QjdERDAwQ0E3MTdFIC8qIENhY2hlVmFsaWRhdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0NDBBQTk2MUM2ODQyMDgwMEEy
NjVDQyAvKiBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0MEFBOTUxQzY4NDIwODAwQTI2NUND
IC8qIEVsZW1lbnRBbmRUZXh0RGVzY2VuZGFudEl0ZXJhdG9yLmggKi87IH07CisJCUU0NDBGRDUz
MjVBNEFGREYwMEY3Qzg0OSAvKiBNYXJrZWRUZXh0U3R5bGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDBGRDUxMjVBNEFGREYwMEY3Qzg0OSAvKiBN
YXJrZWRUZXh0U3R5bGUuaCAqLzsgfTsKIAkJRTQ0NjEzQTIwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhU
TUxBdWRpb0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0NDYxMzkwMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmggKi87
IH07CiAJCUU0NDYxM0E1MENENjMzMTAwMEZBREE3NSAvKiBIVE1MTWVkaWFFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQ2MTM5MzBDRDYz
MzEwMDBGQURBNzUgLyogSFRNTE1lZGlhRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0NDYxM0E4MENENjMzMTAwMEZBREE3NSAvKiBI
VE1MU291cmNlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ0NjEzOTYwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxTb3VyY2VFbGVtZW50Lmgg
Ki87IH07CkBAIC02MDQ3LDggKzYwNDgsOCBAQAogCQkwRjRDREVBQTIzRDkxQThBMDAyNTFCMDIg
LyogU2Nyb2xsVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsVHlwZXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyog
Q1NTRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0Zp
bHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgzMjEzQjFCQjgw
MEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNTNGQjg0MjEzQjc4
NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY1M0ZCODMyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTNGQjg0MjEzQjc4NjQwMEM0MEQzNCAvKiBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODkyMTNC
NzY4NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyRmlsdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJMYXllckZpbHRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCOEIy
MTNCNzY4NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyRmlsdGVycy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW5kZXJMYXllckZpbHRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjU0RENFMzE4ODEwNTFEMDAzRUVEQkIgLyogVGV4dEF1dG9TaXppbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dEF1dG9TaXppbmcuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYyMzEsNiArMTYyMzIsOCBAQAogCQlFNDNBRjhFNDFB
QzVCN0REMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlVmFsaWRhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0M0FGOEU1MUFDNUI3REQwMENBNzE3RSAvKiBDYWNoZVZhbGlkYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVWYWxpZGF0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDBBQTk1MUM2ODQyMDgwMEEyNjVDQyAvKiBF
bGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFNDQwRkQ1MTI1QTRBRkRGMDBGN0M4NDkgLyogTWFya2VkVGV4
dFN0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcmtlZFRleHRTdHls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDQwRkQ1NDI1QTRBRkVFMDBGN0M4
NDkgLyogTWFya2VkVGV4dFN0eWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtlZFRleHRT
dHlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDUxMDc3MjAyQzdFMDEw
MDY1N0QzMyAvKiBDb21waWxlZFNlbGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvbXBpbGVkU2VsZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTQ0NjEzOEYwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxBdWRpb0VsZW1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTEF1ZGlvRWxlbWVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxMzkwMENENjMzMTAwMEZBREE3NSAvKiBIVE1M
QXVkaW9FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxBdWRp
b0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5NjQ1LDYgKzI5NjQ4
LDggQEAKIAkJCQk5QkEyNzNGMzE3MjIwNkJCMDA5N0NFNDcgLyogTG9naWNhbFNlbGVjdGlvbk9m
ZnNldENhY2hlcy5oICovLAogCQkJCUNFMTg2NjQyMUY3MkU1QjQwMEEwQ0FCNiAvKiBNYXJrZWRU
ZXh0LmNwcCAqLywKIAkJCQlDRTE4NjY0MzFGNzJFNUI0MDBBMENBQjYgLyogTWFya2VkVGV4dC5o
ICovLAorCQkJCUU0NDBGRDU0MjVBNEFGRUUwMEY3Qzg0OSAvKiBNYXJrZWRUZXh0U3R5bGUuY3Bw
ICovLAorCQkJCUU0NDBGRDUxMjVBNEFGREYwMEY3Qzg0OSAvKiBNYXJrZWRUZXh0U3R5bGUuaCAq
LywKIAkJCQlDREU3RkM0MjE4MTkwNEIxMDAyQkJCNzcgLyogT3JkZXJJdGVyYXRvci5jcHAgKi8s
CiAJCQkJQ0RFN0ZDNDMxODE5MDRCMTAwMkJCQjc3IC8qIE9yZGVySXRlcmF0b3IuaCAqLywKIAkJ
CQkzNzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Lmgg
Ki8sCkBAIC0zMzAzOCw2ICszMzA0Myw3IEBACiAJCQkJRTQ0NjE0MTkwQ0Q2ODI2OTAwRkFEQTc1
IC8qIEpTTWVkaWFFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RGNzU2QTMyMTVDMjlFOTAw
RUZDQjUwIC8qIEpTTWVkaWFLZXlFbmNyeXB0aW9uU2NoZW1lLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyRDlCRjcyODFEQkZEQjBEMDA3QTdEOTkgLyogSlNNZWRpYUtleU1lc3NhZ2VFdmVudC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRTQ0MEZENTMyNUE0QUZERjAwRjdDODQ5IC8qIE1hcmtlZFRleHRT
dHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5QkY3MjkxREJGREIxMDAwN0E3RDk5IC8qIEpT
TWVkaWFLZXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDlCRjcyQTFEQkZEQjEzMDA3QTdEOTkg
LyogSlNNZWRpYUtleVNlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUNERjRCNzFFMUUwMUUx
MUEwMEUyMzVBMiAvKiBKU01lZGlhS2V5U2Vzc2lvblR5cGUuaCBpbiBIZWFkZXJzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IGJlZThjMGRiMzY5
MS4uMjRkZTUxNTAzNjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveFN0eWxlLmgiCi0j
aW5jbHVkZSAiTWFya2VkVGV4dC5oIgorI2luY2x1ZGUgIk1hcmtlZFRleHRTdHlsZS5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJC
bG9jay5oIgpAQCAtNDMzLDM2ICs0MzMsNiBAQCBPcHRpb25hbDxib29sPiBJbmxpbmVUZXh0Qm94
OjplbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlKGNvbnN0IFJlbmRlclN0eWxlJiBzdAogICAg
IHJldHVybiBpc0Fib3ZlOwogfQogCi1zdHJ1Y3QgSW5saW5lVGV4dEJveDo6TWFya2VkVGV4dFN0
eWxlIHsKLSAgICBzdGF0aWMgYm9vbCBhcmVCYWNrZ3JvdW5kTWFya2VkVGV4dFN0eWxlc0VxdWFs
KGNvbnN0IE1hcmtlZFRleHRTdHlsZSYgYSwgY29uc3QgTWFya2VkVGV4dFN0eWxlJiBiKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGEuYmFja2dyb3VuZENvbG9yID09IGIuYmFja2dyb3VuZENvbG9y
OwotICAgIH0KLSAgICBzdGF0aWMgYm9vbCBhcmVGb3JlZ3JvdW5kTWFya2VkVGV4dFN0eWxlc0Vx
dWFsKGNvbnN0IE1hcmtlZFRleHRTdHlsZSYgYSwgY29uc3QgTWFya2VkVGV4dFN0eWxlJiBiKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGEudGV4dFN0eWxlcyA9PSBiLnRleHRTdHlsZXMgJiYgYS50
ZXh0U2hhZG93ID09IGIudGV4dFNoYWRvdyAmJiBhLmFscGhhID09IGIuYWxwaGE7Ci0gICAgfQot
ICAgIHN0YXRpYyBib29sIGFyZURlY29yYXRpb25NYXJrZWRUZXh0U3R5bGVzRXF1YWwoY29uc3Qg
TWFya2VkVGV4dFN0eWxlJiBhLCBjb25zdCBNYXJrZWRUZXh0U3R5bGUmIGIpCi0gICAgewotICAg
ICAgICByZXR1cm4gYS50ZXh0RGVjb3JhdGlvblN0eWxlcyA9PSBiLnRleHREZWNvcmF0aW9uU3R5
bGVzICYmIGEudGV4dFNoYWRvdyA9PSBiLnRleHRTaGFkb3cgJiYgYS5hbHBoYSA9PSBiLmFscGhh
OwotICAgIH0KLQotICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsKLSAgICBUZXh0UGFpbnRTdHls
ZSB0ZXh0U3R5bGVzOwotICAgIFRleHREZWNvcmF0aW9uUGFpbnRlcjo6U3R5bGVzIHRleHREZWNv
cmF0aW9uU3R5bGVzOwotICAgIE9wdGlvbmFsPFNoYWRvd0RhdGE+IHRleHRTaGFkb3c7Ci0gICAg
ZmxvYXQgYWxwaGE7Ci19OwotCi1zdHJ1Y3QgSW5saW5lVGV4dEJveDo6U3R5bGVkTWFya2VkVGV4
dCA6IE1hcmtlZFRleHQgewotICAgIFN0eWxlZE1hcmtlZFRleHQoY29uc3QgTWFya2VkVGV4dCYg
bWFya2VyKQotICAgICAgICA6IE1hcmtlZFRleHQgeyBtYXJrZXIgfQotICAgIHsKLSAgICB9Ci0K
LSAgICBNYXJrZWRUZXh0U3R5bGUgc3R5bGU7Ci19OwotCiBzdGF0aWMgTWFya2VkVGV4dCBjcmVh
dGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KGNvbnN0IElubGluZVRleHRCb3gmIGJveCkK
IHsKICAgICBhdXRvIFtzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kXSA9IGJveC5zZWxlY3Rp
b25TdGFydEVuZCgpOwpAQCAtNTQ0LDggKzUxNCw2IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFp
bnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwK
ICAgICBib29sIGNvbnRhaW5zQ29tcG9zaXRpb24gPSByZW5kZXJlcigpLnRleHROb2RlKCkgJiYg
cmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uTm9kZSgpID09IHJlbmRlcmVy
KCkudGV4dE5vZGUoKTsKICAgICBib29sIHVzZUN1c3RvbVVuZGVybGluZXMgPSBjb250YWluc0Nv
bXBvc2l0aW9uICYmIHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvblVzZXND
dXN0b21VbmRlcmxpbmVzKCk7CiAKLSAgICBNYXJrZWRUZXh0U3R5bGUgdW5tYXJrZWRTdHlsZSA9
IGNvbXB1dGVTdHlsZUZvclVubWFya2VkTWFya2VkVGV4dChwYWludEluZm8pOwotCiAgICAgLy8g
MS4gUGFpbnQgYmFja2dyb3VuZHMgYmVoaW5kIHRleHQgaWYgbmVlZGVkLiBFeGFtcGxlcyBvZiBz
dWNoIGJhY2tncm91bmRzIGluY2x1ZGUgc2VsZWN0aW9uCiAgICAgLy8gYW5kIGNvbXBvc2l0aW9u
IHVuZGVybGluZXMuCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpTZWxl
Y3Rpb24gJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlRleHRDbGlwICYmICFpc1By
aW50aW5nKSB7CkBAIC01NjMsNyArNTMxLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LAogICAg
ICAgICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZChXVEZNb3ZlKHNlbGVjdGlvbk1hcmtlZFRl
eHQpKTsKICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIGF1dG8gc3R5bGVkTWFya2VkVGV4dHMg
PSBzdWJkaXZpZGVBbmRSZXNvbHZlU3R5bGUobWFya2VkVGV4dHMsIHVubWFya2VkU3R5bGUsIHBh
aW50SW5mbyk7CisgICAgICAgIGF1dG8gc3R5bGVkTWFya2VkVGV4dHMgPSBzdWJkaXZpZGVBbmRS
ZXNvbHZlU3R5bGUobWFya2VkVGV4dHMsIHJlbmRlcmVyKCksIGlzRmlyc3RMaW5lKCksIHBhaW50
SW5mbyk7CiAKICAgICAgICAgLy8gQ29hbGVzY2Ugc3R5bGVzIG9mIGFkamFjZW50IG1hcmtlZCB0
ZXh0cyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGRyYXdpbmcgY29tbWFuZHMuCiAgICAgICAg
IGF1dG8gY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMgPSBjb2FsZXNjZUFkamFjZW50TWFya2Vk
VGV4dHMoc3R5bGVkTWFya2VkVGV4dHMsICZNYXJrZWRUZXh0U3R5bGU6OmFyZUJhY2tncm91bmRN
YXJrZWRUZXh0U3R5bGVzRXF1YWwpOwpAQCAtNjExLDcgKzU3OSw3IEBAIHZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnNldCwKICAgICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZChXVEZNb3ZlKHNlbGVjdGlv
bk1hcmtlZFRleHQpKTsKICAgICB9CiAKLSAgICBhdXRvIHN0eWxlZE1hcmtlZFRleHRzID0gc3Vi
ZGl2aWRlQW5kUmVzb2x2ZVN0eWxlKG1hcmtlZFRleHRzLCB1bm1hcmtlZFN0eWxlLCBwYWludElu
Zm8pOworICAgIGF1dG8gc3R5bGVkTWFya2VkVGV4dHMgPSBzdWJkaXZpZGVBbmRSZXNvbHZlU3R5
bGUobWFya2VkVGV4dHMsIHJlbmRlcmVyKCksIGlzRmlyc3RMaW5lKCksIHBhaW50SW5mbyk7CiAK
ICAgICAvLyAuLi4gbm93IHJlbW92ZSB0aGUgc2VsZWN0aW9uIG1hcmtlZCB0ZXh0IGlmIHdlIGFy
ZSBleGNsdWRpbmcgc2VsZWN0aW9uLgogICAgIGlmICghaXNQcmludGluZyAmJiBwYWludEluZm8u
cGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpFeGNsdWRlU2VsZWN0aW9uKSkK
QEAgLTc5NiwxNDEgKzc2NCw2IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRQbGF0Zm9ybURv
Y3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICBjb250ZXh0
LmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoYm91bmRzLCBsaW5lU3R5bGVGb3JNYXJrZWRUZXh0
VHlwZSgpKTsKIH0KIAotYXV0byBJbmxpbmVUZXh0Qm94Ojpjb21wdXRlU3R5bGVGb3JVbm1hcmtl
ZE1hcmtlZFRleHQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8pIGNvbnN0IC0+IE1hcmtlZFRl
eHRTdHlsZQotewotICAgIGF1dG8mIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwotCi0g
ICAgTWFya2VkVGV4dFN0eWxlIHN0eWxlOwotICAgIHN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGVz
ID0gVGV4dERlY29yYXRpb25QYWludGVyOjpzdHlsZXNGb3JSZW5kZXJlcihyZW5kZXJlcigpLCBs
aW5lU3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSwgaXNGaXJzdExpbmUoKSk7Ci0gICAg
c3R5bGUudGV4dFN0eWxlcyA9IGNvbXB1dGVUZXh0UGFpbnRTdHlsZShyZW5kZXJlcigpLmZyYW1l
KCksIGxpbmVTdHlsZSwgcGFpbnRJbmZvKTsKLSAgICBzdHlsZS50ZXh0U2hhZG93ID0gU2hhZG93
RGF0YTo6Y2xvbmUocGFpbnRJbmZvLmZvcmNlVGV4dENvbG9yKCkgPyBudWxscHRyIDogbGluZVN0
eWxlLnRleHRTaGFkb3coKSk7Ci0gICAgc3R5bGUuYWxwaGEgPSAxOwotICAgIHJldHVybiBzdHls
ZTsKLX0KLQotYXV0byBJbmxpbmVUZXh0Qm94OjpyZXNvbHZlU3R5bGVGb3JNYXJrZWRUZXh0KGNv
bnN0IE1hcmtlZFRleHQmIG1hcmtlZFRleHQsIGNvbnN0IE1hcmtlZFRleHRTdHlsZSYgYmFzZVN0
eWxlLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykgLT4gU3R5bGVkTWFya2VkVGV4dAotewot
ICAgIE1hcmtlZFRleHRTdHlsZSBzdHlsZSA9IGJhc2VTdHlsZTsKLSAgICBzd2l0Y2ggKG1hcmtl
ZFRleHQudHlwZSkgewotICAgIGNhc2UgTWFya2VkVGV4dDo6Q29ycmVjdGlvbjoKLSAgICBjYXNl
IE1hcmtlZFRleHQ6OkRpY3RhdGlvbkFsdGVybmF0aXZlczoKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIC8vIEZJWE1FOiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzg5MzMzNTI+LiBBbHNvLCBy
ZW1vdmUgdGhlIFBMQVRGT1JNKElPU19GQU1JTFkpLWd1YXJkLgotICAgIGNhc2UgTWFya2VkVGV4
dDo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlczoKLSNlbmRpZgotICAgIGNhc2UgTWFy
a2VkVGV4dDo6R3JhbW1hckVycm9yOgotICAgIGNhc2UgTWFya2VkVGV4dDo6U3BlbGxpbmdFcnJv
cjoKLSAgICBjYXNlIE1hcmtlZFRleHQ6OlVubWFya2VkOgotICAgICAgICBicmVhazsKLSAgICBj
YXNlIE1hcmtlZFRleHQ6OkhpZ2hsaWdodDoKLSAgICAgICAgaWYgKGF1dG8gcmVuZGVyU3R5bGUg
PSBwYXJlbnQoKS0+cmVuZGVyZXIoKS5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6
OkhpZ2hsaWdodCwgbWFya2VkVGV4dC5oaWdobGlnaHROYW1lIH0sICZwYXJlbnQoKS0+cmVuZGVy
ZXIoKS5zdHlsZSgpKSkgewotICAgICAgICAgICAgc3R5bGUuYmFja2dyb3VuZENvbG9yID0gcmVu
ZGVyU3R5bGUtPmJhY2tncm91bmRDb2xvcigpOwotICAgICAgICAgICAgc3R5bGUudGV4dFN0eWxl
cy5maWxsQ29sb3IgPSByZW5kZXJTdHlsZS0+Y29tcHV0ZWRTdHJva2VDb2xvcigpOwotICAgICAg
ICAgICAgc3R5bGUudGV4dFN0eWxlcy5zdHJva2VDb2xvciA9IHJlbmRlclN0eWxlLT5jb21wdXRl
ZFN0cm9rZUNvbG9yKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gY29sb3IgPSBU
ZXh0RGVjb3JhdGlvblBhaW50ZXI6OmRlY29yYXRpb25Db2xvcigqcmVuZGVyU3R5bGUuZ2V0KCkp
OwotICAgICAgICAgICAgYXV0byBkZWNvcmF0aW9uU3R5bGUgPSByZW5kZXJTdHlsZS0+dGV4dERl
Y29yYXRpb25TdHlsZSgpOwotICAgICAgICAgICAgYXV0byBkZWNvcmF0aW9ucyA9IHJlbmRlclN0
eWxlLT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwotCi0gICAgICAgICAgICBpZiAoZGVjb3Jh
dGlvbnMuY29udGFpbnMoVGV4dERlY29yYXRpb246OlVuZGVybGluZSkpIHsKLSAgICAgICAgICAg
ICAgICBzdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcy51bmRlcmxpbmVDb2xvciA9IGNvbG9yOwot
ICAgICAgICAgICAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGVzLnVuZGVybGluZVN0eWxl
ID0gZGVjb3JhdGlvblN0eWxlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRlY29y
YXRpb25zLmNvbnRhaW5zKFRleHREZWNvcmF0aW9uOjpPdmVybGluZSkpIHsKLSAgICAgICAgICAg
ICAgICBzdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcy5vdmVybGluZUNvbG9yID0gY29sb3I7Ci0g
ICAgICAgICAgICAgICAgc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMub3ZlcmxpbmVTdHlsZSA9
IGRlY29yYXRpb25TdHlsZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkZWNvcmF0
aW9ucy5jb250YWlucyhUZXh0RGVjb3JhdGlvbjo6TGluZVRocm91Z2gpKSB7Ci0gICAgICAgICAg
ICAgICAgc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMubGluZXRocm91Z2hDb2xvciA9IGNvbG9y
OwotICAgICAgICAgICAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGVzLmxpbmV0aHJvdWdo
U3R5bGUgPSBkZWNvcmF0aW9uU3R5bGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0jaWYgRU5BQkxFKEFQUF9ISUdITElHSFRTKQotICAgIGNhc2UgTWFya2VkVGV4
dDo6QXBwSGlnaGxpZ2h0OiB7Ci0gICAgICAgIE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25z
PiBzdHlsZUNvbG9yT3B0aW9ucyA9IHsgU3R5bGVDb2xvcjo6T3B0aW9uczo6VXNlU3lzdGVtQXBw
ZWFyYW5jZSB9OwotICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSByZW5kZXJlcigpLnRo
ZW1lKCkuYXBwSGlnaGxpZ2h0Q29sb3Ioc3R5bGVDb2xvck9wdGlvbnMpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0jZW5kaWYKLSAgICBjYXNlIE1hcmtlZFRleHQ6OkRyYWdnZWRDb250ZW50Ogot
ICAgICAgICBzdHlsZS5hbHBoYSA9IDAuMjU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTWFy
a2VkVGV4dDo6U2VsZWN0aW9uOiB7Ci0gICAgICAgIHN0eWxlLnRleHRTdHlsZXMgPSBjb21wdXRl
VGV4dFNlbGVjdGlvblBhaW50U3R5bGUoc3R5bGUudGV4dFN0eWxlcywgcmVuZGVyZXIoKSwgbGlu
ZVN0eWxlKCksIHBhaW50SW5mbywgc3R5bGUudGV4dFNoYWRvdyk7Ci0KLSAgICAgICAgQ29sb3Ig
c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yID0gcmVuZGVyZXIoKS5zZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoKTsKLSAgICAgICAgc3R5bGUuYmFja2dyb3VuZENvbG9yID0gc2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yOwotICAgICAgICBpZiAoc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yLmlzVmFsaWQo
KSAmJiBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IuaXNWaXNpYmxlKCkgJiYgc3R5bGUudGV4dFN0
eWxlcy5maWxsQ29sb3IgPT0gc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKQotICAgICAgICAgICAg
c3R5bGUuYmFja2dyb3VuZENvbG9yID0gc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yLmludmVydGVk
Q29sb3JXaXRoQWxwaGEoMS4wKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgTWFy
a2VkVGV4dDo6VGV4dE1hdGNoOiB7Ci0gICAgICAgIC8vIFRleHQgbWF0Y2hlcyBhbHdheXMgdXNl
IHRoZSBsaWdodCBzeXN0ZW0gYXBwZWFyYW5jZS4KLSAgICAgICAgT3B0aW9uU2V0PFN0eWxlQ29s
b3I6Ok9wdGlvbnM+IHN0eWxlQ29sb3JPcHRpb25zID0geyBTdHlsZUNvbG9yOjpPcHRpb25zOjpV
c2VTeXN0ZW1BcHBlYXJhbmNlIH07Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBzdHlsZS50
ZXh0U3R5bGVzLmZpbGxDb2xvciA9IHJlbmRlcmVyKCkudGhlbWUoKS5zeXN0ZW1Db2xvcihDU1NW
YWx1ZUFwcGxlU3lzdGVtTGFiZWwsIHN0eWxlQ29sb3JPcHRpb25zKTsKLSNlbmRpZgotICAgICAg
ICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSByZW5kZXJlcigpLnRoZW1lKCkudGV4dFNlYXJjaEhp
Z2hsaWdodENvbG9yKHN0eWxlQ29sb3JPcHRpb25zKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIH0KLSAgICBTdHlsZWRNYXJrZWRUZXh0IHN0eWxlZE1hcmtlZFRleHQgPSBtYXJrZWRUZXh0
OwotICAgIHN0eWxlZE1hcmtlZFRleHQuc3R5bGUgPSBXVEZNb3ZlKHN0eWxlKTsKLSAgICByZXR1
cm4gc3R5bGVkTWFya2VkVGV4dDsKLX0KLQotYXV0byBJbmxpbmVUZXh0Qm94OjpzdWJkaXZpZGVB
bmRSZXNvbHZlU3R5bGUoY29uc3QgVmVjdG9yPE1hcmtlZFRleHQ+JiB0ZXh0c1RvU3ViZGl2aWRl
LCBjb25zdCBNYXJrZWRUZXh0U3R5bGUmIGJhc2VTdHlsZSwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8pIC0+IFZlY3RvcjxTdHlsZWRNYXJrZWRUZXh0PgotewotICAgIGlmICh0ZXh0c1RvU3Vi
ZGl2aWRlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGF1dG8gbWFya2Vk
VGV4dHMgPSBzdWJkaXZpZGUodGV4dHNUb1N1YmRpdmlkZSk7Ci0gICAgQVNTRVJUKCFtYXJrZWRU
ZXh0cy5pc0VtcHR5KCkpOwotICAgIGlmIChVTkxJS0VMWShtYXJrZWRUZXh0cy5pc0VtcHR5KCkp
KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgLy8gQ29tcHV0ZSBmcm9udG1vc3Qgb3Zlcmxh
cHBpbmcgc3R5bGVkIG1hcmtlZCB0ZXh0cy4KLSAgICBWZWN0b3I8U3R5bGVkTWFya2VkVGV4dD4g
ZnJvbnRtb3N0TWFya2VkVGV4dHM7Ci0gICAgZnJvbnRtb3N0TWFya2VkVGV4dHMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShtYXJrZWRUZXh0cy5zaXplKCkpOwotICAgIGZyb250bW9zdE1hcmtlZFRl
eHRzLnVuY2hlY2tlZEFwcGVuZChyZXNvbHZlU3R5bGVGb3JNYXJrZWRUZXh0KG1hcmtlZFRleHRz
WzBdLCBiYXNlU3R5bGUsIHBhaW50SW5mbykpOwotICAgIGZvciAoYXV0byBpdCA9IG1hcmtlZFRl
eHRzLmJlZ2luKCkgKyAxLCBlbmQgPSBtYXJrZWRUZXh0cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIFN0eWxlZE1hcmtlZFRleHQmIHByZXZpb3VzU3R5bGVkTWFya2VkVGV4dCA9
IGZyb250bW9zdE1hcmtlZFRleHRzLmxhc3QoKTsKLSAgICAgICAgaWYgKHByZXZpb3VzU3R5bGVk
TWFya2VkVGV4dC5zdGFydE9mZnNldCA9PSBpdC0+c3RhcnRPZmZzZXQgJiYgcHJldmlvdXNTdHls
ZWRNYXJrZWRUZXh0LmVuZE9mZnNldCA9PSBpdC0+ZW5kT2Zmc2V0KSB7Ci0gICAgICAgICAgICAv
LyBNYXJrZWQgdGV4dHMgY29tcGxldGVseSBjb3ZlciBlYWNoIG90aGVyLgotICAgICAgICAgICAg
cHJldmlvdXNTdHlsZWRNYXJrZWRUZXh0ID0gcmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCgqaXQs
IHByZXZpb3VzU3R5bGVkTWFya2VkVGV4dC5zdHlsZSwgcGFpbnRJbmZvKTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGZyb250bW9zdE1hcmtlZFRleHRzLnVuY2hl
Y2tlZEFwcGVuZChyZXNvbHZlU3R5bGVGb3JNYXJrZWRUZXh0KCppdCwgYmFzZVN0eWxlLCBwYWlu
dEluZm8pKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZnJvbnRtb3N0TWFya2VkVGV4dHM7Ci19Ci0K
LWF1dG8gSW5saW5lVGV4dEJveDo6Y29hbGVzY2VBZGphY2VudE1hcmtlZFRleHRzKGNvbnN0IFZl
Y3RvcjxTdHlsZWRNYXJrZWRUZXh0PiYgdGV4dHNUb0NvYWxlc2NlLCBNYXJrZWRUZXh0U3R5bGVz
RXF1YWxpdHlGdW5jdGlvbiBhcmVNYXJrZWRUZXh0U3R5bGVzRXF1YWwpIC0+IFZlY3RvcjxTdHls
ZWRNYXJrZWRUZXh0PgotewotICAgIGlmICh0ZXh0c1RvQ29hbGVzY2UuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4geyB9OwotCi0gICAgYXV0byBhcmVBZGphY2VudE1hcmtlZFRleHRzV2l0aFNh
bWVTdHlsZSA9IFsmXSAoY29uc3QgU3R5bGVkTWFya2VkVGV4dCYgYSwgY29uc3QgU3R5bGVkTWFy
a2VkVGV4dCYgYikgewotICAgICAgICByZXR1cm4gYS5lbmRPZmZzZXQgPT0gYi5zdGFydE9mZnNl
dCAmJiBhcmVNYXJrZWRUZXh0U3R5bGVzRXF1YWwoYS5zdHlsZSwgYi5zdHlsZSk7Ci0gICAgfTsK
LQotICAgIFZlY3RvcjxTdHlsZWRNYXJrZWRUZXh0PiBzdHlsZWRNYXJrZWRUZXh0czsKLSAgICBz
dHlsZWRNYXJrZWRUZXh0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRleHRzVG9Db2FsZXNjZS5z
aXplKCkpOwotICAgIHN0eWxlZE1hcmtlZFRleHRzLnVuY2hlY2tlZEFwcGVuZCh0ZXh0c1RvQ29h
bGVzY2VbMF0pOwotICAgIGZvciAoYXV0byBpdCA9IHRleHRzVG9Db2FsZXNjZS5iZWdpbigpICsg
MSwgZW5kID0gdGV4dHNUb0NvYWxlc2NlLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgU3R5bGVkTWFya2VkVGV4dCYgcHJldmlvdXNTdHlsZWRNYXJrZWRUZXh0ID0gc3R5bGVkTWFy
a2VkVGV4dHMubGFzdCgpOwotICAgICAgICBpZiAoYXJlQWRqYWNlbnRNYXJrZWRUZXh0c1dpdGhT
YW1lU3R5bGUocHJldmlvdXNTdHlsZWRNYXJrZWRUZXh0LCAqaXQpKSB7Ci0gICAgICAgICAgICBw
cmV2aW91c1N0eWxlZE1hcmtlZFRleHQuZW5kT2Zmc2V0ID0gaXQtPmVuZE9mZnNldDsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIHN0eWxlZE1hcmtlZFRleHRzLnVu
Y2hlY2tlZEFwcGVuZCgqaXQpOwotICAgIH0KLQotICAgIHJldHVybiBzdHlsZWRNYXJrZWRUZXh0
czsKLX0KLQogVmVjdG9yPE1hcmtlZFRleHQ+IElubGluZVRleHRCb3g6OmNvbGxlY3RNYXJrZWRU
ZXh0c0ZvckRyYWdnZWRDb250ZW50KCkKIHsKICAgICB1c2luZyBEcmFnZ2VuZENvbnRlbnRSYW5n
ZSA9IHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmgKaW5kZXggMzI4OWI5NjJlYTBhLi4wZjcxN2JkNzZiMDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaApAQCAtMzMsNiArMzMsNyBAQCBj
bGFzcyBSZW5kZXJlZERvY3VtZW50TWFya2VyOwogY2xhc3MgVGV4dFBhaW50ZXI7CiBzdHJ1Y3Qg
Q29tcG9zaXRpb25VbmRlcmxpbmU7CiBzdHJ1Y3QgTWFya2VkVGV4dDsKK3N0cnVjdCBTdHlsZWRN
YXJrZWRUZXh0Owogc3RydWN0IFRleHRQYWludFN0eWxlOwogCiBjb25zdCB1bnNpZ25lZCBzaG9y
dCBjTm9UcnVuY2F0aW9uID0gVVNIUlRfTUFYOwpAQCAtMTY0LDIyICsxNjUsMTIgQEAgcHVibGlj
OgogICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVEb2N1bWVudE1hcmtlckJvdW5kcyhjb25zdCBNYXJr
ZWRUZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0IE1hcmtlZFRleHRTdHlsZTsK
LSAgICBzdHJ1Y3QgU3R5bGVkTWFya2VkVGV4dDsKLQogICAgIGVudW0gY2xhc3MgVGV4dFBhaW50
UGhhc2UgeyBCYWNrZ3JvdW5kLCBGb3JlZ3JvdW5kLCBEZWNvcmF0aW9uIH07CiAKICAgICBWZWN0
b3I8TWFya2VkVGV4dD4gY29sbGVjdE1hcmtlZFRleHRzRm9yRHJhZ2dlZENvbnRlbnQoKTsKICAg
ICBWZWN0b3I8TWFya2VkVGV4dD4gY29sbGVjdE1hcmtlZFRleHRzRm9yRG9jdW1lbnRNYXJrZXJz
KFRleHRQYWludFBoYXNlKSBjb25zdDsKICAgICBWZWN0b3I8TWFya2VkVGV4dD4gY29sbGVjdE1h
cmtlZFRleHRzRm9ySGlnaGxpZ2h0cyhUZXh0UGFpbnRQaGFzZSkgY29uc3Q7CiAKLSAgICBNYXJr
ZWRUZXh0U3R5bGUgY29tcHV0ZVN0eWxlRm9yVW5tYXJrZWRNYXJrZWRUZXh0KGNvbnN0IFBhaW50
SW5mbyYpIGNvbnN0OwotICAgIFN0eWxlZE1hcmtlZFRleHQgcmVzb2x2ZVN0eWxlRm9yTWFya2Vk
VGV4dChjb25zdCBNYXJrZWRUZXh0JiwgY29uc3QgTWFya2VkVGV4dFN0eWxlJiBiYXNlU3R5bGUs
IGNvbnN0IFBhaW50SW5mbyYpOwotICAgIFZlY3RvcjxTdHlsZWRNYXJrZWRUZXh0PiBzdWJkaXZp
ZGVBbmRSZXNvbHZlU3R5bGUoY29uc3QgVmVjdG9yPE1hcmtlZFRleHQ+JiwgY29uc3QgTWFya2Vk
VGV4dFN0eWxlJiBiYXNlU3R5bGUsIGNvbnN0IFBhaW50SW5mbyYpOwotCi0gICAgdXNpbmcgTWFy
a2VkVGV4dFN0eWxlc0VxdWFsaXR5RnVuY3Rpb24gPSBib29sICgqKShjb25zdCBNYXJrZWRUZXh0
U3R5bGUmLCBjb25zdCBNYXJrZWRUZXh0U3R5bGUmKTsKLSAgICBWZWN0b3I8U3R5bGVkTWFya2Vk
VGV4dD4gY29hbGVzY2VBZGphY2VudE1hcmtlZFRleHRzKGNvbnN0IFZlY3RvcjxTdHlsZWRNYXJr
ZWRUZXh0PiYsIE1hcmtlZFRleHRTdHlsZXNFcXVhbGl0eUZ1bmN0aW9uKTsKLQogICAgIEZsb2F0
UG9pbnQgdGV4dE9yaWdpbkZyb21Cb3hSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogCiAg
ICAgdm9pZCBwYWludE1hcmtlZFRleHRzKFBhaW50SW5mbyYsIFRleHRQYWludFBoYXNlLCBjb25z
dCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IFZlY3RvcjxTdHlsZWRNYXJrZWRUZXh0PiYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVjb3JhdGlvbkNsaXBPdXRSZWN0ID0geyB9KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NYXJrZWRUZXh0U3R5bGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL01hcmtlZFRleHRTdHlsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi41MmI0YTlkOTUyMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFya2VkVGV4dFN0eWxlLmNwcApAQCAtMCwwICsxLDE3MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXJrZWRUZXh0
U3R5bGUuaCIKKworI2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVjdG9yLmgiCisjaW5jbHVkZSAi
UmVuZGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKyNpbmNsdWRlICJSZW5k
ZXJUaGVtZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTdHlsZWRNYXJrZWRU
ZXh0IHJlc29sdmVTdHlsZUZvck1hcmtlZFRleHQoY29uc3QgTWFya2VkVGV4dCYgbWFya2VkVGV4
dCwgY29uc3QgTWFya2VkVGV4dFN0eWxlJiBiYXNlU3R5bGUsIGNvbnN0IFJlbmRlclRleHQmIHJl
bmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbykKK3sKKyAgICBNYXJrZWRUZXh0U3R5bGUgc3R5bGUgPSBiYXNlU3R5bGU7CisgICAg
c3dpdGNoIChtYXJrZWRUZXh0LnR5cGUpIHsKKyAgICBjYXNlIE1hcmtlZFRleHQ6OkNvcnJlY3Rp
b246CisgICAgY2FzZSBNYXJrZWRUZXh0OjpEaWN0YXRpb25BbHRlcm5hdGl2ZXM6CisjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAvLyBGSVhNRTogU2VlIDxyZGFyOi8vcHJvYmxlbS84OTMz
MzUyPi4gQWxzbywgcmVtb3ZlIHRoZSBQTEFURk9STShJT1NfRkFNSUxZKS1ndWFyZC4KKyAgICBj
YXNlIE1hcmtlZFRleHQ6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXM6CisjZW5kaWYK
KyAgICBjYXNlIE1hcmtlZFRleHQ6OkdyYW1tYXJFcnJvcjoKKyAgICBjYXNlIE1hcmtlZFRleHQ6
OlNwZWxsaW5nRXJyb3I6CisgICAgY2FzZSBNYXJrZWRUZXh0OjpVbm1hcmtlZDoKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBNYXJrZWRUZXh0OjpIaWdobGlnaHQ6CisgICAgICAgIGlmIChhdXRv
IHJlbmRlclN0eWxlID0gcmVuZGVyZXIucGFyZW50KCktPmdldFVuY2FjaGVkUHNldWRvU3R5bGUo
eyBQc2V1ZG9JZDo6SGlnaGxpZ2h0LCBtYXJrZWRUZXh0LmhpZ2hsaWdodE5hbWUgfSwgJnJlbmRl
cmVyLnN0eWxlKCkpKSB7CisgICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSByZW5k
ZXJTdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgICAgICBzdHlsZS50ZXh0U3R5bGVz
LmZpbGxDb2xvciA9IHJlbmRlclN0eWxlLT5jb21wdXRlZFN0cm9rZUNvbG9yKCk7CisgICAgICAg
ICAgICBzdHlsZS50ZXh0U3R5bGVzLnN0cm9rZUNvbG9yID0gcmVuZGVyU3R5bGUtPmNvbXB1dGVk
U3Ryb2tlQ29sb3IoKTsKKworICAgICAgICAgICAgYXV0byBjb2xvciA9IFRleHREZWNvcmF0aW9u
UGFpbnRlcjo6ZGVjb3JhdGlvbkNvbG9yKCpyZW5kZXJTdHlsZS5nZXQoKSk7CisgICAgICAgICAg
ICBhdXRvIGRlY29yYXRpb25TdHlsZSA9IHJlbmRlclN0eWxlLT50ZXh0RGVjb3JhdGlvblN0eWxl
KCk7CisgICAgICAgICAgICBhdXRvIGRlY29yYXRpb25zID0gcmVuZGVyU3R5bGUtPnRleHREZWNv
cmF0aW9uc0luRWZmZWN0KCk7CisKKyAgICAgICAgICAgIGlmIChkZWNvcmF0aW9ucy5jb250YWlu
cyhUZXh0RGVjb3JhdGlvbjo6VW5kZXJsaW5lKSkgeworICAgICAgICAgICAgICAgIHN0eWxlLnRl
eHREZWNvcmF0aW9uU3R5bGVzLnVuZGVybGluZUNvbG9yID0gY29sb3I7CisgICAgICAgICAgICAg
ICAgc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMudW5kZXJsaW5lU3R5bGUgPSBkZWNvcmF0aW9u
U3R5bGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGVjb3JhdGlvbnMuY29udGFp
bnMoVGV4dERlY29yYXRpb246Ok92ZXJsaW5lKSkgeworICAgICAgICAgICAgICAgIHN0eWxlLnRl
eHREZWNvcmF0aW9uU3R5bGVzLm92ZXJsaW5lQ29sb3IgPSBjb2xvcjsKKyAgICAgICAgICAgICAg
ICBzdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcy5vdmVybGluZVN0eWxlID0gZGVjb3JhdGlvblN0
eWxlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlY29yYXRpb25zLmNvbnRhaW5z
KFRleHREZWNvcmF0aW9uOjpMaW5lVGhyb3VnaCkpIHsKKyAgICAgICAgICAgICAgICBzdHlsZS50
ZXh0RGVjb3JhdGlvblN0eWxlcy5saW5ldGhyb3VnaENvbG9yID0gY29sb3I7CisgICAgICAgICAg
ICAgICAgc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMubGluZXRocm91Z2hTdHlsZSA9IGRlY29y
YXRpb25TdHlsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyNp
ZiBFTkFCTEUoQVBQX0hJR0hMSUdIVFMpCisgICAgY2FzZSBNYXJrZWRUZXh0OjpBcHBIaWdobGln
aHQ6IHsKKyAgICAgICAgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IHN0eWxlQ29sb3JP
cHRpb25zID0geyBTdHlsZUNvbG9yOjpPcHRpb25zOjpVc2VTeXN0ZW1BcHBlYXJhbmNlIH07Cisg
ICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHJlbmRlcmVyKCkudGhlbWUoKS5hcHBIaWdo
bGlnaHRDb2xvcihzdHlsZUNvbG9yT3B0aW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNl
bmRpZgorICAgIGNhc2UgTWFya2VkVGV4dDo6RHJhZ2dlZENvbnRlbnQ6CisgICAgICAgIHN0eWxl
LmFscGhhID0gMC4yNTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNYXJrZWRUZXh0OjpTZWxl
Y3Rpb246IHsKKyAgICAgICAgc3R5bGUudGV4dFN0eWxlcyA9IGNvbXB1dGVUZXh0U2VsZWN0aW9u
UGFpbnRTdHlsZShzdHlsZS50ZXh0U3R5bGVzLCByZW5kZXJlciwgbGluZVN0eWxlLCBwYWludElu
Zm8sIHN0eWxlLnRleHRTaGFkb3cpOworCisgICAgICAgIENvbG9yIHNlbGVjdGlvbkJhY2tncm91
bmRDb2xvciA9IHJlbmRlcmVyLnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOworICAgICAgICBz
dHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3I7CisgICAgICAg
IGlmIChzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgpICYmIHNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvci5pc1Zpc2libGUoKSAmJiBzdHlsZS50ZXh0U3R5bGVzLmZpbGxDb2xvciA9PSBz
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpCisgICAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29s
b3IgPSBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYSgxLjAp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBNYXJrZWRUZXh0OjpUZXh0TWF0Y2g6
IHsKKyAgICAgICAgLy8gVGV4dCBtYXRjaGVzIGFsd2F5cyB1c2UgdGhlIGxpZ2h0IHN5c3RlbSBh
cHBlYXJhbmNlLgorICAgICAgICBPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gc3R5bGVD
b2xvck9wdGlvbnMgPSB7IFN0eWxlQ29sb3I6Ok9wdGlvbnM6OlVzZVN5c3RlbUFwcGVhcmFuY2Ug
fTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIHN0eWxlLnRleHRTdHlsZXMuZmlsbENvbG9y
ID0gcmVuZGVyZXIudGhlbWUoKS5zeXN0ZW1Db2xvcihDU1NWYWx1ZUFwcGxlU3lzdGVtTGFiZWws
IHN0eWxlQ29sb3JPcHRpb25zKTsKKyNlbmRpZgorICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29s
b3IgPSByZW5kZXJlci50aGVtZSgpLnRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihzdHlsZUNvbG9y
T3B0aW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisgICAgU3R5bGVkTWFya2Vk
VGV4dCBzdHlsZWRNYXJrZWRUZXh0ID0gbWFya2VkVGV4dDsKKyAgICBzdHlsZWRNYXJrZWRUZXh0
LnN0eWxlID0gV1RGTW92ZShzdHlsZSk7CisgICAgcmV0dXJuIHN0eWxlZE1hcmtlZFRleHQ7Cit9
CisKK3N0YXRpYyBNYXJrZWRUZXh0U3R5bGUgY29tcHV0ZVN0eWxlRm9yVW5tYXJrZWRNYXJrZWRU
ZXh0KGNvbnN0IFJlbmRlclRleHQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0
eWxlLCBib29sIGlzRmlyc3RMaW5lLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykKK3sKKyAg
ICBNYXJrZWRUZXh0U3R5bGUgc3R5bGU7CisgICAgc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMg
PSBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnN0eWxlc0ZvclJlbmRlcmVyKHJlbmRlcmVyLCBsaW5l
U3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSwgaXNGaXJzdExpbmUpOworICAgIHN0eWxl
LnRleHRTdHlsZXMgPSBjb21wdXRlVGV4dFBhaW50U3R5bGUocmVuZGVyZXIuZnJhbWUoKSwgbGlu
ZVN0eWxlLCBwYWludEluZm8pOworICAgIHN0eWxlLnRleHRTaGFkb3cgPSBTaGFkb3dEYXRhOjpj
bG9uZShwYWludEluZm8uZm9yY2VUZXh0Q29sb3IoKSA/IG51bGxwdHIgOiBsaW5lU3R5bGUudGV4
dFNoYWRvdygpKTsKKyAgICBzdHlsZS5hbHBoYSA9IDE7CisgICAgcmV0dXJuIHN0eWxlOworfQor
CitWZWN0b3I8U3R5bGVkTWFya2VkVGV4dD4gc3ViZGl2aWRlQW5kUmVzb2x2ZVN0eWxlKGNvbnN0
IFZlY3RvcjxNYXJrZWRUZXh0PiYgdGV4dHNUb1N1YmRpdmlkZSwgY29uc3QgUmVuZGVyVGV4dCYg
cmVuZGVyZXIsIGJvb2wgaXNGaXJzdExpbmUsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQor
eworICAgIGlmICh0ZXh0c1RvU3ViZGl2aWRlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIGF1dG8gbWFya2VkVGV4dHMgPSBzdWJkaXZpZGUodGV4dHNUb1N1YmRpdmlkZSk7
CisgICAgQVNTRVJUKCFtYXJrZWRUZXh0cy5pc0VtcHR5KCkpOworICAgIGlmIChVTkxJS0VMWSht
YXJrZWRUZXh0cy5pc0VtcHR5KCkpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byYg
bGluZVN0eWxlID0gaXNGaXJzdExpbmUgPyByZW5kZXJlci5maXJzdExpbmVTdHlsZSgpIDogcmVu
ZGVyZXIuc3R5bGUoKTsKKyAgICBhdXRvIGJhc2VTdHlsZSA9IGNvbXB1dGVTdHlsZUZvclVubWFy
a2VkTWFya2VkVGV4dChyZW5kZXJlciwgbGluZVN0eWxlLCBpc0ZpcnN0TGluZSwgcGFpbnRJbmZv
KTsKKworICAgIC8vIENvbXB1dGUgZnJvbnRtb3N0IG92ZXJsYXBwaW5nIHN0eWxlZCBtYXJrZWQg
dGV4dHMuCisgICAgVmVjdG9yPFN0eWxlZE1hcmtlZFRleHQ+IGZyb250bW9zdE1hcmtlZFRleHRz
OworICAgIGZyb250bW9zdE1hcmtlZFRleHRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWFya2Vk
VGV4dHMuc2l6ZSgpKTsKKyAgICBmcm9udG1vc3RNYXJrZWRUZXh0cy51bmNoZWNrZWRBcHBlbmQo
cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dChtYXJrZWRUZXh0c1swXSwgYmFzZVN0eWxlLCByZW5k
ZXJlciwgbGluZVN0eWxlLCBwYWludEluZm8pKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBtYXJrZWRU
ZXh0cy5iZWdpbigpICsgMSwgZW5kID0gbWFya2VkVGV4dHMuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBTdHlsZWRNYXJrZWRUZXh0JiBwcmV2aW91c1N0eWxlZE1hcmtlZFRleHQg
PSBmcm9udG1vc3RNYXJrZWRUZXh0cy5sYXN0KCk7CisgICAgICAgIGlmIChwcmV2aW91c1N0eWxl
ZE1hcmtlZFRleHQuc3RhcnRPZmZzZXQgPT0gaXQtPnN0YXJ0T2Zmc2V0ICYmIHByZXZpb3VzU3R5
bGVkTWFya2VkVGV4dC5lbmRPZmZzZXQgPT0gaXQtPmVuZE9mZnNldCkgeworICAgICAgICAgICAg
Ly8gTWFya2VkIHRleHRzIGNvbXBsZXRlbHkgY292ZXIgZWFjaCBvdGhlci4KKyAgICAgICAgICAg
IHByZXZpb3VzU3R5bGVkTWFya2VkVGV4dCA9IHJlc29sdmVTdHlsZUZvck1hcmtlZFRleHQoKml0
LCBwcmV2aW91c1N0eWxlZE1hcmtlZFRleHQuc3R5bGUsIHJlbmRlcmVyLCBsaW5lU3R5bGUsIHBh
aW50SW5mbyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBmcm9u
dG1vc3RNYXJrZWRUZXh0cy51bmNoZWNrZWRBcHBlbmQocmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4
dCgqaXQsIGJhc2VTdHlsZSwgcmVuZGVyZXIsIGxpbmVTdHlsZSwgcGFpbnRJbmZvKSk7CisgICAg
fQorCisgICAgcmV0dXJuIGZyb250bW9zdE1hcmtlZFRleHRzOworfQorCitWZWN0b3I8U3R5bGVk
TWFya2VkVGV4dD4gY29hbGVzY2VBZGphY2VudE1hcmtlZFRleHRzKGNvbnN0IFZlY3RvcjxTdHls
ZWRNYXJrZWRUZXh0PiYgdGV4dHNUb0NvYWxlc2NlLCBNYXJrZWRUZXh0U3R5bGVzRXF1YWxpdHlG
dW5jdGlvbiBhcmVNYXJrZWRUZXh0U3R5bGVzRXF1YWwpCit7CisgICAgaWYgKHRleHRzVG9Db2Fs
ZXNjZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIGFyZUFkamFj
ZW50TWFya2VkVGV4dHNXaXRoU2FtZVN0eWxlID0gWyZdIChjb25zdCBTdHlsZWRNYXJrZWRUZXh0
JiBhLCBjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBiKSB7CisgICAgICAgIHJldHVybiBhLmVuZE9m
ZnNldCA9PSBiLnN0YXJ0T2Zmc2V0ICYmIGFyZU1hcmtlZFRleHRTdHlsZXNFcXVhbChhLnN0eWxl
LCBiLnN0eWxlKTsKKyAgICB9OworCisgICAgVmVjdG9yPFN0eWxlZE1hcmtlZFRleHQ+IHN0eWxl
ZE1hcmtlZFRleHRzOworICAgIHN0eWxlZE1hcmtlZFRleHRzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkodGV4dHNUb0NvYWxlc2NlLnNpemUoKSk7CisgICAgc3R5bGVkTWFya2VkVGV4dHMudW5jaGVj
a2VkQXBwZW5kKHRleHRzVG9Db2FsZXNjZVswXSk7CisgICAgZm9yIChhdXRvIGl0ID0gdGV4dHNU
b0NvYWxlc2NlLmJlZ2luKCkgKyAxLCBlbmQgPSB0ZXh0c1RvQ29hbGVzY2UuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICBTdHlsZWRNYXJrZWRUZXh0JiBwcmV2aW91c1N0eWxlZE1h
cmtlZFRleHQgPSBzdHlsZWRNYXJrZWRUZXh0cy5sYXN0KCk7CisgICAgICAgIGlmIChhcmVBZGph
Y2VudE1hcmtlZFRleHRzV2l0aFNhbWVTdHlsZShwcmV2aW91c1N0eWxlZE1hcmtlZFRleHQsICpp
dCkpIHsKKyAgICAgICAgICAgIHByZXZpb3VzU3R5bGVkTWFya2VkVGV4dC5lbmRPZmZzZXQgPSBp
dC0+ZW5kT2Zmc2V0OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg
c3R5bGVkTWFya2VkVGV4dHMudW5jaGVja2VkQXBwZW5kKCppdCk7CisgICAgfQorCisgICAgcmV0
dXJuIHN0eWxlZE1hcmtlZFRleHRzOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTWFya2VkVGV4dFN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TWFya2VkVGV4dFN0eWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li5iOTJkMmUwMTQ1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTWFya2VkVGV4dFN0eWxlLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiTWFya2VkVGV4dC5oIgorI2luY2x1ZGUgIlNoYWRvd0RhdGEu
aCIKKyNpbmNsdWRlICJUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCIKKyNpbmNsdWRlICJUZXh0UGFp
bnRTdHlsZS5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFJlbmRlclRleHQ7CitjbGFzcyBSZW5kZXJlZERvY3VtZW50TWFya2VyOwor
CitzdHJ1Y3QgTWFya2VkVGV4dFN0eWxlIHsKKyAgICBzdGF0aWMgYm9vbCBhcmVCYWNrZ3JvdW5k
TWFya2VkVGV4dFN0eWxlc0VxdWFsKGNvbnN0IE1hcmtlZFRleHRTdHlsZSYgYSwgY29uc3QgTWFy
a2VkVGV4dFN0eWxlJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEuYmFja2dyb3VuZENvbG9y
ID09IGIuYmFja2dyb3VuZENvbG9yOworICAgIH0KKyAgICBzdGF0aWMgYm9vbCBhcmVGb3JlZ3Jv
dW5kTWFya2VkVGV4dFN0eWxlc0VxdWFsKGNvbnN0IE1hcmtlZFRleHRTdHlsZSYgYSwgY29uc3Qg
TWFya2VkVGV4dFN0eWxlJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEudGV4dFN0eWxlcyA9
PSBiLnRleHRTdHlsZXMgJiYgYS50ZXh0U2hhZG93ID09IGIudGV4dFNoYWRvdyAmJiBhLmFscGhh
ID09IGIuYWxwaGE7CisgICAgfQorICAgIHN0YXRpYyBib29sIGFyZURlY29yYXRpb25NYXJrZWRU
ZXh0U3R5bGVzRXF1YWwoY29uc3QgTWFya2VkVGV4dFN0eWxlJiBhLCBjb25zdCBNYXJrZWRUZXh0
U3R5bGUmIGIpCisgICAgeworICAgICAgICByZXR1cm4gYS50ZXh0RGVjb3JhdGlvblN0eWxlcyA9
PSBiLnRleHREZWNvcmF0aW9uU3R5bGVzICYmIGEudGV4dFNoYWRvdyA9PSBiLnRleHRTaGFkb3cg
JiYgYS5hbHBoYSA9PSBiLmFscGhhOworICAgIH0KKworICAgIENvbG9yIGJhY2tncm91bmRDb2xv
cjsKKyAgICBUZXh0UGFpbnRTdHlsZSB0ZXh0U3R5bGVzOworICAgIFRleHREZWNvcmF0aW9uUGFp
bnRlcjo6U3R5bGVzIHRleHREZWNvcmF0aW9uU3R5bGVzOworICAgIE9wdGlvbmFsPFNoYWRvd0Rh
dGE+IHRleHRTaGFkb3c7CisgICAgZmxvYXQgYWxwaGE7Cit9OworCitzdHJ1Y3QgU3R5bGVkTWFy
a2VkVGV4dCA6IE1hcmtlZFRleHQgeworICAgIFN0eWxlZE1hcmtlZFRleHQoY29uc3QgTWFya2Vk
VGV4dCYgbWFya2VyKQorICAgICAgICA6IE1hcmtlZFRleHQgeyBtYXJrZXIgfQorICAgIHsKKyAg
ICB9CisKKyAgICBNYXJrZWRUZXh0U3R5bGUgc3R5bGU7Cit9OworCitWZWN0b3I8U3R5bGVkTWFy
a2VkVGV4dD4gc3ViZGl2aWRlQW5kUmVzb2x2ZVN0eWxlKGNvbnN0IFZlY3RvcjxNYXJrZWRUZXh0
PiYsIGNvbnN0IFJlbmRlclRleHQmLCBib29sIGlzRmlyc3RMaW5lLCBjb25zdCBQYWludEluZm8m
KTsKKwordXNpbmcgTWFya2VkVGV4dFN0eWxlc0VxdWFsaXR5RnVuY3Rpb24gPSBib29sICgqKShj
b25zdCBNYXJrZWRUZXh0U3R5bGUmLCBjb25zdCBNYXJrZWRUZXh0U3R5bGUmKTsKK1ZlY3RvcjxT
dHlsZWRNYXJrZWRUZXh0PiBjb2FsZXNjZUFkamFjZW50TWFya2VkVGV4dHMoY29uc3QgVmVjdG9y
PFN0eWxlZE1hcmtlZFRleHQ+JiwgTWFya2VkVGV4dFN0eWxlc0VxdWFsaXR5RnVuY3Rpb24pOwor
Cit9Cg==
</data>
<flag name="review"
          id="434639"
          type_id="1"
          status="+"
          setter="zalan"
    />
    <flag name="commit-queue"
          id="435040"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417348</attachid>
            <date>2021-01-10 05:42:55 -0800</date>
            <delta_ts>2021-01-10 10:09:16 -0800</delta_ts>
            <desc>patch</desc>
            <filename>marked-text-refactor-5.patch</filename>
            <type>text/plain</type>
            <size>32683</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlODU4YWIyYzE1N2EuLjcyZDA5NDdjZDY4ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBA
CisyMDIxLTAxLTEwICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBbTEZDXVtJbnRlZ3JhdGlvbl0gRmFjdG9yIG1hcmtlZCB0ZXh0IHN0eWxlIGNvbGxlY3Rpb24g
Y29kZSBvdXQgb2YgSW5saW5lVGV4dEJveAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMjQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWmFsYW4gQnVq
dGFzLgorCisgICAgICAgICogVGVzdEV4cGVjdGF0aW9uczoKKworICAgICAgICBNYXJrIGh0dHAv
d3B0L2Nzcy9jc3MtaGlnaGxpZ2h0LWFwaS9oaWdobGlnaHQtdGV4dC1jYXNjYWRlLmh0bWwgZmFp
bGluZy4KKworICAgICAgICBUaGlzIHRlc3QgcmVxdWlyZXMgQ1NTNCBoaWdobGlnaHQgcHNldWRv
IGVsZW1lbnQgaW5oZXJpdGFuY2UgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjAzMjUpCisgICAgICAgIHdoaWNoIHdlIChvciBhbnlvbmUgZWxzZSkgZG9uJ3Qgc3Vw
cG9ydC4KKworICAgICAgICBJdCB3YXMgcGFzc2luZyBieSBhY2NpZGVudCBiZWNhdXNlIHRoZSBj
b2RlIHdhcyBnZXR0aW5nICc6OmhpZ2hsaWdodCcgcHNldWRvIGVsZW1lbnQgc3R5bGUgZnJvbSBh
IHdyb25nIGVsZW1lbnQKKyAgICAgICAgKGNvbnRhaW5pbmcgYmxvY2sgaW5zdGVhZCBvZiBpbmxp
bmUgZWxlbWVudCkgaW4gY2VydGFpbiBjYXNlcy4gUmVuZGVyZXIgd2FzIGZvdW5kIHZpYSBJbmxp
bmVCb3ggcGFyZW50KCkgd2hpY2ggZG9lc24ndAorICAgICAgICBtYXRjaCByZW5kZXIgdHJlZSBw
YXJlbnQgaW4gY2FzZSBpbmxpbmUgY3VsbGluZyBvcHRpbWl6YXRpb24gaXMgYWN0aXZlLiBUaGUg
Y29ycmVjdCB3YXkgaXMgdG8gdXNlIHJlbmRlciB0cmVlIHBhcmVudC4KKwogMjAyMS0wMS0wOSAg
WmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIHBsYXkuZ29vZ2xlLmNv
bTogQXBwIHByZXZpZXcgaW1hZ2VzIGFyZSBjbGlwcGVkCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA4
ODg1ZTljY2M2NzguLjM1MTc2YTg4MGY4NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvVGVzdEV4
cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCkBAIC00NTk0LDMg
KzQ1OTQsNSBAQCB3ZWJraXQub3JnL2IvMjE3OTMxIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvaHRtbC9zZW1hbnRpY3Mvc2NyaXB0aW5nLTEvdAogd2Via2l0Lm9yZy9iLzIxNzkzMSBp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL3NjcmlwdGluZy0x
L3RoZS1zY3JpcHQtZWxlbWVudC9tb3ZpbmctYmV0d2Vlbi1kb2N1bWVudHMvbW92ZS1iYWNrLWlm
cmFtZS1zdWNjZXNzLWV4dGVybmFsLWNsYXNzaWMuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCiB3ZWJr
aXQub3JnL2IvMjE3OTMxIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1h
bnRpY3Mvc2NyaXB0aW5nLTEvdGhlLXNjcmlwdC1lbGVtZW50L21vdmluZy1iZXR3ZWVuLWRvY3Vt
ZW50cy9tb3ZlLWJhY2staWZyYW1lLXN1Y2Nlc3MtZXh0ZXJuYWwtbW9kdWxlLmh0bWwgWyBQYXNz
IEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIxNzkzMSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2h0bWwvc2VtYW50aWNzL3NjcmlwdGluZy0xL3RoZS1zY3JpcHQtZWxlbWVudC9tb3Zp
bmctYmV0d2Vlbi1kb2N1bWVudHMvbW92ZS1iYWNrLWlmcmFtZS1zdWNjZXNzLWlubGluZS1jbGFz
c2ljLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQorCit3ZWJraXQub3JnL2IvMjIwMzI1IGh0dHAvd3B0
L2Nzcy9jc3MtaGlnaGxpZ2h0LWFwaS9oaWdobGlnaHQtdGV4dC1jYXNjYWRlLmh0bWwgWyBJbWFn
ZU9ubHlGYWlsdXJlIF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5ZWNjMzQ1MzQ2NzkuLmE4Mzk0NmIwMDY4YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDIxLTAxLTEwICBBbnR0aSBLb2l2aXN0byAg
PGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gRmFjdG9yIG1h
cmtlZCB0ZXh0IHN0eWxlIGNvbGxlY3Rpb24gY29kZSBvdXQgb2YgSW5saW5lVGV4dEJveAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMjQ5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgWmFsYW4gQnVqdGFzLgorCisgICAgICAgIFRoaXMgbWFrZXMgaXQg
cG9zc2libGUgdG8gdXNlIHRoZSBjb2RlIGZyb20gTEZDIHBhaW50aW5nLgorCisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZVRleHRCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRC
b3g6Ok1hcmtlZFRleHRTdHlsZTo6YXJlQmFja2dyb3VuZE1hcmtlZFRleHRTdHlsZXNFcXVhbCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpNYXJrZWRUZXh0U3R5
bGU6OmFyZUZvcmVncm91bmRNYXJrZWRUZXh0U3R5bGVzRXF1YWwpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6TWFya2VkVGV4dFN0eWxlOjphcmVEZWNvcmF0aW9u
TWFya2VkVGV4dFN0eWxlc0VxdWFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZVRleHRCb3g6OlN0eWxlZE1hcmtlZFRleHQ6OlN0eWxlZE1hcmtlZFRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6Y29tcHV0ZVN0eWxlRm9yVW5tYXJrZWRN
YXJrZWRUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRC
b3g6OnJlc29sdmVTdHlsZUZvck1hcmtlZFRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lVGV4dEJveDo6c3ViZGl2aWRlQW5kUmVzb2x2ZVN0eWxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNvYWxlc2NlQWRqYWNlbnRNYXJrZWRUZXh0
cyk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvTWFya2VkVGV4dFN0eWxlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpyZXNvbHZlU3R5bGVGb3JNYXJrZWRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1
dGVTdHlsZUZvclVubWFya2VkTWFya2VkVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpzdWJkaXZp
ZGVBbmRSZXNvbHZlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29hbGVzY2VBZGphY2VudE1h
cmtlZFRleHRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvTWFya2VkVGV4dFN0eWxlLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6TWFya2VkVGV4dFN0eWxlOjphcmVCYWNrZ3JvdW5kTWFya2Vk
VGV4dFN0eWxlc0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmtlZFRleHRTdHlsZTo6YXJl
Rm9yZWdyb3VuZE1hcmtlZFRleHRTdHlsZXNFcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpNYXJr
ZWRUZXh0U3R5bGU6OmFyZURlY29yYXRpb25NYXJrZWRUZXh0U3R5bGVzRXF1YWwpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVkTWFya2VkVGV4dDo6U3R5bGVkTWFya2VkVGV4dCk6CisKIDIwMjEt
MDEtMTAgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92
ZSBJbmxpbmVCb3g6Omhhc1NlbGVjdGVkQ2hpbGRyZW4gYml0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGQx
ZWVkZDg3NWYyMi4uMWI5ZjBkODM3ODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjE5NSw2ICsyMTk1
LDcgQEAgcmVuZGVyaW5nL0xheWVyT3ZlcmxhcE1hcC5jcHAKIHJlbmRlcmluZy9MYXlvdXREaXNh
bGxvd2VkU2NvcGUuY3BwCiByZW5kZXJpbmcvTGF5b3V0UmVwYWludGVyLmNwcAogcmVuZGVyaW5n
L01hcmtlZFRleHQuY3BwCityZW5kZXJpbmcvTWFya2VkVGV4dFN0eWxlLmNwcAogcmVuZGVyaW5n
L09yZGVySXRlcmF0b3IuY3BwCiByZW5kZXJpbmcvUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmNwcAog
cmVuZGVyaW5nL1JlbmRlckF0dGFjaG1lbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzdkOWJiZjhhOWJlLi40MTlhMDkx
MTg0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTUwOTAsNiArNTA5MCw3IEBACiAJCUU0M0EwMjNCMTdFQjM3MEEwMDRDREQy
NSAvKiBSZW5kZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDNBMDIzQTE3RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0M0FGOEU3
MUFDNUI3RUMwMENBNzE3RSAvKiBDYWNoZVZhbGlkYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0M0FGOEU1MUFDNUI3REQwMENBNzE3RSAvKiBD
YWNoZVZhbGlkYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlFNDQwQUE5NjFDNjg0MjA4MDBBMjY1Q0MgLyogRWxlbWVudEFuZFRleHREZXNj
ZW5kYW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0NDBBQTk1MUM2ODQyMDgwMEEyNjVDQyAvKiBFbGVtZW50QW5kVGV4dERlc2NlbmRh
bnRJdGVyYXRvci5oICovOyB9OworCQlFNDQwRkQ1MzI1QTRBRkRGMDBGN0M4NDkgLyogTWFya2Vk
VGV4dFN0eWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDQwRkQ1MTI1QTRBRkRGMDBGN0M4NDkgLyogTWFya2VkVGV4dFN0eWxlLmggKi87IH07CiAJ
CUU0NDYxM0EyMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDQ2MTM5MDBDRDYzMzEwMDBG
QURBNzUgLyogSFRNTEF1ZGlvRWxlbWVudC5oICovOyB9OwogCQlFNDQ2MTNBNTBDRDYzMzEwMDBG
QURBNzUgLyogSFRNTE1lZGlhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTQ0NjEzOTMwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxNZWRpYUVs
ZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlFNDQ2MTNBODBDRDYzMzEwMDBGQURBNzUgLyogSFRNTFNvdXJjZUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDYxMzk2MENENjMzMTAw
MEZBREE3NSAvKiBIVE1MU291cmNlRWxlbWVudC5oICovOyB9OwpAQCAtMTYyMzIsNiArMTYyMzMs
OCBAQAogCQlFNDNBRjhFNDFBQzVCN0REMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlVmFsaWRhdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0M0FGOEU1MUFDNUI3REQwMENBNzE3RSAv
KiBDYWNoZVZhbGlkYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2Fj
aGVWYWxpZGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDBBQTk1MUM2
ODQyMDgwMEEyNjVDQyAvKiBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVyYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbGVtZW50QW5kVGV4dERlc2NlbmRhbnRJdGVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDQwRkQ1MTI1QTRBRkRGMDBG
N0M4NDkgLyogTWFya2VkVGV4dFN0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1hcmtlZFRleHRTdHlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDQw
RkQ1NDI1QTRBRkVFMDBGN0M4NDkgLyogTWFya2VkVGV4dFN0eWxlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1hcmtlZFRleHRTdHlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0NDUxMDc3MjAyQzdFMDEwMDY1N0QzMyAvKiBDb21waWxlZFNlbGVjdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBpbGVkU2VsZWN0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0NjEzOEYwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxBdWRpb0Vs
ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTEF1ZGlv
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxMzkwMENENjMz
MTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEhUTUxBdWRpb0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI5NjQ3LDYgKzI5NjUwLDggQEAKIAkJCQk5QkEyNzNGMzE3MjIwNkJCMDA5N0NFNDcgLyog
TG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5oICovLAogCQkJCUNFMTg2NjQyMUY3MkU1QjQw
MEEwQ0FCNiAvKiBNYXJrZWRUZXh0LmNwcCAqLywKIAkJCQlDRTE4NjY0MzFGNzJFNUI0MDBBMENB
QjYgLyogTWFya2VkVGV4dC5oICovLAorCQkJCUU0NDBGRDU0MjVBNEFGRUUwMEY3Qzg0OSAvKiBN
YXJrZWRUZXh0U3R5bGUuY3BwICovLAorCQkJCUU0NDBGRDUxMjVBNEFGREYwMEY3Qzg0OSAvKiBN
YXJrZWRUZXh0U3R5bGUuaCAqLywKIAkJCQlDREU3RkM0MjE4MTkwNEIxMDAyQkJCNzcgLyogT3Jk
ZXJJdGVyYXRvci5jcHAgKi8sCiAJCQkJQ0RFN0ZDNDMxODE5MDRCMTAwMkJCQjc3IC8qIE9yZGVy
SXRlcmF0b3IuaCAqLywKIAkJCQkzNzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRl
c3RSZXF1ZXN0Q2xpZW50LmggKi8sCkBAIC0zMzA0MSw2ICszMzA0Niw3IEBACiAJCQkJRTQ0NjE0
MTkwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTTWVkaWFFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0RGNzU2QTMyMTVDMjlFOTAwRUZDQjUwIC8qIEpTTWVkaWFLZXlFbmNyeXB0aW9uU2NoZW1lLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyRDlCRjcyODFEQkZEQjBEMDA3QTdEOTkgLyogSlNNZWRpYUtl
eU1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ0MEZENTMyNUE0QUZERjAwRjdD
ODQ5IC8qIE1hcmtlZFRleHRTdHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5QkY3MjkxREJG
REIxMDAwN0E3RDk5IC8qIEpTTWVkaWFLZXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDlCRjcy
QTFEQkZEQjEzMDA3QTdEOTkgLyogSlNNZWRpYUtleVNlc3Npb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCUNERjRCNzFFMUUwMUUxMUEwMEUyMzVBMiAvKiBKU01lZGlhS2V5U2Vzc2lvblR5cGUuaCBp
biBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
CmluZGV4IGJlZThjMGRiMzY5MS4uMjRkZTUxNTAzNjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAiSGl0
VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW5saW5l
VGV4dEJveFN0eWxlLmgiCi0jaW5jbHVkZSAiTWFya2VkVGV4dC5oIgorI2luY2x1ZGUgIk1hcmtl
ZFRleHRTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIK
ICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgpAQCAtNDMzLDM2ICs0MzMsNiBAQCBPcHRpb25hbDxi
b29sPiBJbmxpbmVUZXh0Qm94OjplbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlKGNvbnN0IFJl
bmRlclN0eWxlJiBzdAogICAgIHJldHVybiBpc0Fib3ZlOwogfQogCi1zdHJ1Y3QgSW5saW5lVGV4
dEJveDo6TWFya2VkVGV4dFN0eWxlIHsKLSAgICBzdGF0aWMgYm9vbCBhcmVCYWNrZ3JvdW5kTWFy
a2VkVGV4dFN0eWxlc0VxdWFsKGNvbnN0IE1hcmtlZFRleHRTdHlsZSYgYSwgY29uc3QgTWFya2Vk
VGV4dFN0eWxlJiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGEuYmFja2dyb3VuZENvbG9yID09
IGIuYmFja2dyb3VuZENvbG9yOwotICAgIH0KLSAgICBzdGF0aWMgYm9vbCBhcmVGb3JlZ3JvdW5k
TWFya2VkVGV4dFN0eWxlc0VxdWFsKGNvbnN0IE1hcmtlZFRleHRTdHlsZSYgYSwgY29uc3QgTWFy
a2VkVGV4dFN0eWxlJiBiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGEudGV4dFN0eWxlcyA9PSBi
LnRleHRTdHlsZXMgJiYgYS50ZXh0U2hhZG93ID09IGIudGV4dFNoYWRvdyAmJiBhLmFscGhhID09
IGIuYWxwaGE7Ci0gICAgfQotICAgIHN0YXRpYyBib29sIGFyZURlY29yYXRpb25NYXJrZWRUZXh0
U3R5bGVzRXF1YWwoY29uc3QgTWFya2VkVGV4dFN0eWxlJiBhLCBjb25zdCBNYXJrZWRUZXh0U3R5
bGUmIGIpCi0gICAgewotICAgICAgICByZXR1cm4gYS50ZXh0RGVjb3JhdGlvblN0eWxlcyA9PSBi
LnRleHREZWNvcmF0aW9uU3R5bGVzICYmIGEudGV4dFNoYWRvdyA9PSBiLnRleHRTaGFkb3cgJiYg
YS5hbHBoYSA9PSBiLmFscGhhOwotICAgIH0KLQotICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsK
LSAgICBUZXh0UGFpbnRTdHlsZSB0ZXh0U3R5bGVzOwotICAgIFRleHREZWNvcmF0aW9uUGFpbnRl
cjo6U3R5bGVzIHRleHREZWNvcmF0aW9uU3R5bGVzOwotICAgIE9wdGlvbmFsPFNoYWRvd0RhdGE+
IHRleHRTaGFkb3c7Ci0gICAgZmxvYXQgYWxwaGE7Ci19OwotCi1zdHJ1Y3QgSW5saW5lVGV4dEJv
eDo6U3R5bGVkTWFya2VkVGV4dCA6IE1hcmtlZFRleHQgewotICAgIFN0eWxlZE1hcmtlZFRleHQo
Y29uc3QgTWFya2VkVGV4dCYgbWFya2VyKQotICAgICAgICA6IE1hcmtlZFRleHQgeyBtYXJrZXIg
fQotICAgIHsKLSAgICB9Ci0KLSAgICBNYXJrZWRUZXh0U3R5bGUgc3R5bGU7Ci19OwotCiBzdGF0
aWMgTWFya2VkVGV4dCBjcmVhdGVNYXJrZWRUZXh0RnJvbVNlbGVjdGlvbkluQm94KGNvbnN0IElu
bGluZVRleHRCb3gmIGJveCkKIHsKICAgICBhdXRvIFtzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9u
RW5kXSA9IGJveC5zZWxlY3Rpb25TdGFydEVuZCgpOwpAQCAtNTQ0LDggKzUxNCw2IEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCwKICAgICBib29sIGNvbnRhaW5zQ29tcG9zaXRpb24gPSByZW5kZXJl
cigpLnRleHROb2RlKCkgJiYgcmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9u
Tm9kZSgpID09IHJlbmRlcmVyKCkudGV4dE5vZGUoKTsKICAgICBib29sIHVzZUN1c3RvbVVuZGVy
bGluZXMgPSBjb250YWluc0NvbXBvc2l0aW9uICYmIHJlbmRlcmVyKCkuZnJhbWUoKS5lZGl0b3Io
KS5jb21wb3NpdGlvblVzZXNDdXN0b21VbmRlcmxpbmVzKCk7CiAKLSAgICBNYXJrZWRUZXh0U3R5
bGUgdW5tYXJrZWRTdHlsZSA9IGNvbXB1dGVTdHlsZUZvclVubWFya2VkTWFya2VkVGV4dChwYWlu
dEluZm8pOwotCiAgICAgLy8gMS4gUGFpbnQgYmFja2dyb3VuZHMgYmVoaW5kIHRleHQgaWYgbmVl
ZGVkLiBFeGFtcGxlcyBvZiBzdWNoIGJhY2tncm91bmRzIGluY2x1ZGUgc2VsZWN0aW9uCiAgICAg
Ly8gYW5kIGNvbXBvc2l0aW9uIHVuZGVybGluZXMuCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSAh
PSBQYWludFBoYXNlOjpTZWxlY3Rpb24gJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6
OlRleHRDbGlwICYmICFpc1ByaW50aW5nKSB7CkBAIC01NjMsNyArNTMxLDcgQEAgdm9pZCBJbmxp
bmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0LAogICAgICAgICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZChXVEZNb3Zl
KHNlbGVjdGlvbk1hcmtlZFRleHQpKTsKICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIGF1dG8g
c3R5bGVkTWFya2VkVGV4dHMgPSBzdWJkaXZpZGVBbmRSZXNvbHZlU3R5bGUobWFya2VkVGV4dHMs
IHVubWFya2VkU3R5bGUsIHBhaW50SW5mbyk7CisgICAgICAgIGF1dG8gc3R5bGVkTWFya2VkVGV4
dHMgPSBzdWJkaXZpZGVBbmRSZXNvbHZlU3R5bGUobWFya2VkVGV4dHMsIHJlbmRlcmVyKCksIGlz
Rmlyc3RMaW5lKCksIHBhaW50SW5mbyk7CiAKICAgICAgICAgLy8gQ29hbGVzY2Ugc3R5bGVzIG9m
IGFkamFjZW50IG1hcmtlZCB0ZXh0cyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGRyYXdpbmcg
Y29tbWFuZHMuCiAgICAgICAgIGF1dG8gY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMgPSBjb2Fs
ZXNjZUFkamFjZW50TWFya2VkVGV4dHMoc3R5bGVkTWFya2VkVGV4dHMsICZNYXJrZWRUZXh0U3R5
bGU6OmFyZUJhY2tncm91bmRNYXJrZWRUZXh0U3R5bGVzRXF1YWwpOwpAQCAtNjExLDcgKzU3OSw3
IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCwKICAgICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVu
ZChXVEZNb3ZlKHNlbGVjdGlvbk1hcmtlZFRleHQpKTsKICAgICB9CiAKLSAgICBhdXRvIHN0eWxl
ZE1hcmtlZFRleHRzID0gc3ViZGl2aWRlQW5kUmVzb2x2ZVN0eWxlKG1hcmtlZFRleHRzLCB1bm1h
cmtlZFN0eWxlLCBwYWludEluZm8pOworICAgIGF1dG8gc3R5bGVkTWFya2VkVGV4dHMgPSBzdWJk
aXZpZGVBbmRSZXNvbHZlU3R5bGUobWFya2VkVGV4dHMsIHJlbmRlcmVyKCksIGlzRmlyc3RMaW5l
KCksIHBhaW50SW5mbyk7CiAKICAgICAvLyAuLi4gbm93IHJlbW92ZSB0aGUgc2VsZWN0aW9uIG1h
cmtlZCB0ZXh0IGlmIHdlIGFyZSBleGNsdWRpbmcgc2VsZWN0aW9uLgogICAgIGlmICghaXNQcmlu
dGluZyAmJiBwYWludEluZm8ucGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpF
eGNsdWRlU2VsZWN0aW9uKSkKQEAgLTc5NiwxNDEgKzc2NCw2IEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QKICAgICBjb250ZXh0LmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoYm91bmRzLCBsaW5l
U3R5bGVGb3JNYXJrZWRUZXh0VHlwZSgpKTsKIH0KIAotYXV0byBJbmxpbmVUZXh0Qm94Ojpjb21w
dXRlU3R5bGVGb3JVbm1hcmtlZE1hcmtlZFRleHQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8p
IGNvbnN0IC0+IE1hcmtlZFRleHRTdHlsZQotewotICAgIGF1dG8mIGxpbmVTdHlsZSA9IHRoaXMt
PmxpbmVTdHlsZSgpOwotCi0gICAgTWFya2VkVGV4dFN0eWxlIHN0eWxlOwotICAgIHN0eWxlLnRl
eHREZWNvcmF0aW9uU3R5bGVzID0gVGV4dERlY29yYXRpb25QYWludGVyOjpzdHlsZXNGb3JSZW5k
ZXJlcihyZW5kZXJlcigpLCBsaW5lU3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSwgaXNG
aXJzdExpbmUoKSk7Ci0gICAgc3R5bGUudGV4dFN0eWxlcyA9IGNvbXB1dGVUZXh0UGFpbnRTdHls
ZShyZW5kZXJlcigpLmZyYW1lKCksIGxpbmVTdHlsZSwgcGFpbnRJbmZvKTsKLSAgICBzdHlsZS50
ZXh0U2hhZG93ID0gU2hhZG93RGF0YTo6Y2xvbmUocGFpbnRJbmZvLmZvcmNlVGV4dENvbG9yKCkg
PyBudWxscHRyIDogbGluZVN0eWxlLnRleHRTaGFkb3coKSk7Ci0gICAgc3R5bGUuYWxwaGEgPSAx
OwotICAgIHJldHVybiBzdHlsZTsKLX0KLQotYXV0byBJbmxpbmVUZXh0Qm94OjpyZXNvbHZlU3R5
bGVGb3JNYXJrZWRUZXh0KGNvbnN0IE1hcmtlZFRleHQmIG1hcmtlZFRleHQsIGNvbnN0IE1hcmtl
ZFRleHRTdHlsZSYgYmFzZVN0eWxlLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykgLT4gU3R5
bGVkTWFya2VkVGV4dAotewotICAgIE1hcmtlZFRleHRTdHlsZSBzdHlsZSA9IGJhc2VTdHlsZTsK
LSAgICBzd2l0Y2ggKG1hcmtlZFRleHQudHlwZSkgewotICAgIGNhc2UgTWFya2VkVGV4dDo6Q29y
cmVjdGlvbjoKLSAgICBjYXNlIE1hcmtlZFRleHQ6OkRpY3RhdGlvbkFsdGVybmF0aXZlczoKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIC8vIEZJWE1FOiBTZWUgPHJkYXI6Ly9wcm9ibGVt
Lzg5MzMzNTI+LiBBbHNvLCByZW1vdmUgdGhlIFBMQVRGT1JNKElPU19GQU1JTFkpLWd1YXJkLgot
ICAgIGNhc2UgTWFya2VkVGV4dDo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlczoKLSNl
bmRpZgotICAgIGNhc2UgTWFya2VkVGV4dDo6R3JhbW1hckVycm9yOgotICAgIGNhc2UgTWFya2Vk
VGV4dDo6U3BlbGxpbmdFcnJvcjoKLSAgICBjYXNlIE1hcmtlZFRleHQ6OlVubWFya2VkOgotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIE1hcmtlZFRleHQ6OkhpZ2hsaWdodDoKLSAgICAgICAgaWYg
KGF1dG8gcmVuZGVyU3R5bGUgPSBwYXJlbnQoKS0+cmVuZGVyZXIoKS5nZXRVbmNhY2hlZFBzZXVk
b1N0eWxlKHsgUHNldWRvSWQ6OkhpZ2hsaWdodCwgbWFya2VkVGV4dC5oaWdobGlnaHROYW1lIH0s
ICZwYXJlbnQoKS0+cmVuZGVyZXIoKS5zdHlsZSgpKSkgewotICAgICAgICAgICAgc3R5bGUuYmFj
a2dyb3VuZENvbG9yID0gcmVuZGVyU3R5bGUtPmJhY2tncm91bmRDb2xvcigpOwotICAgICAgICAg
ICAgc3R5bGUudGV4dFN0eWxlcy5maWxsQ29sb3IgPSByZW5kZXJTdHlsZS0+Y29tcHV0ZWRTdHJv
a2VDb2xvcigpOwotICAgICAgICAgICAgc3R5bGUudGV4dFN0eWxlcy5zdHJva2VDb2xvciA9IHJl
bmRlclN0eWxlLT5jb21wdXRlZFN0cm9rZUNvbG9yKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGF1dG8gY29sb3IgPSBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OmRlY29yYXRpb25Db2xvcigq
cmVuZGVyU3R5bGUuZ2V0KCkpOwotICAgICAgICAgICAgYXV0byBkZWNvcmF0aW9uU3R5bGUgPSBy
ZW5kZXJTdHlsZS0+dGV4dERlY29yYXRpb25TdHlsZSgpOwotICAgICAgICAgICAgYXV0byBkZWNv
cmF0aW9ucyA9IHJlbmRlclN0eWxlLT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpOwotCi0gICAg
ICAgICAgICBpZiAoZGVjb3JhdGlvbnMuY29udGFpbnMoVGV4dERlY29yYXRpb246OlVuZGVybGlu
ZSkpIHsKLSAgICAgICAgICAgICAgICBzdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcy51bmRlcmxp
bmVDb2xvciA9IGNvbG9yOwotICAgICAgICAgICAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uU3R5
bGVzLnVuZGVybGluZVN0eWxlID0gZGVjb3JhdGlvblN0eWxlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKGRlY29yYXRpb25zLmNvbnRhaW5zKFRleHREZWNvcmF0aW9uOjpPdmVybGlu
ZSkpIHsKLSAgICAgICAgICAgICAgICBzdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcy5vdmVybGlu
ZUNvbG9yID0gY29sb3I7Ci0gICAgICAgICAgICAgICAgc3R5bGUudGV4dERlY29yYXRpb25TdHls
ZXMub3ZlcmxpbmVTdHlsZSA9IGRlY29yYXRpb25TdHlsZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChkZWNvcmF0aW9ucy5jb250YWlucyhUZXh0RGVjb3JhdGlvbjo6TGluZVRocm91
Z2gpKSB7Ci0gICAgICAgICAgICAgICAgc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMubGluZXRo
cm91Z2hDb2xvciA9IGNvbG9yOwotICAgICAgICAgICAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9u
U3R5bGVzLmxpbmV0aHJvdWdoU3R5bGUgPSBkZWNvcmF0aW9uU3R5bGU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKEFQUF9ISUdITElHSFRTKQot
ICAgIGNhc2UgTWFya2VkVGV4dDo6QXBwSGlnaGxpZ2h0OiB7Ci0gICAgICAgIE9wdGlvblNldDxT
dHlsZUNvbG9yOjpPcHRpb25zPiBzdHlsZUNvbG9yT3B0aW9ucyA9IHsgU3R5bGVDb2xvcjo6T3B0
aW9uczo6VXNlU3lzdGVtQXBwZWFyYW5jZSB9OwotICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29s
b3IgPSByZW5kZXJlcigpLnRoZW1lKCkuYXBwSGlnaGxpZ2h0Q29sb3Ioc3R5bGVDb2xvck9wdGlv
bnMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYKLSAgICBjYXNlIE1hcmtlZFRleHQ6
OkRyYWdnZWRDb250ZW50OgotICAgICAgICBzdHlsZS5hbHBoYSA9IDAuMjU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgTWFya2VkVGV4dDo6U2VsZWN0aW9uOiB7Ci0gICAgICAgIHN0eWxlLnRl
eHRTdHlsZXMgPSBjb21wdXRlVGV4dFNlbGVjdGlvblBhaW50U3R5bGUoc3R5bGUudGV4dFN0eWxl
cywgcmVuZGVyZXIoKSwgbGluZVN0eWxlKCksIHBhaW50SW5mbywgc3R5bGUudGV4dFNoYWRvdyk7
Ci0KLSAgICAgICAgQ29sb3Igc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yID0gcmVuZGVyZXIoKS5z
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICAgICAgc3R5bGUuYmFja2dyb3VuZENvbG9y
ID0gc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yOwotICAgICAgICBpZiAoc2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yLmlzVmFsaWQoKSAmJiBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IuaXNWaXNpYmxl
KCkgJiYgc3R5bGUudGV4dFN0eWxlcy5maWxsQ29sb3IgPT0gc2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yKQotICAgICAgICAgICAgc3R5bGUuYmFja2dyb3VuZENvbG9yID0gc2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yLmludmVydGVkQ29sb3JXaXRoQWxwaGEoMS4wKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgTWFya2VkVGV4dDo6VGV4dE1hdGNoOiB7Ci0gICAgICAgIC8vIFRleHQg
bWF0Y2hlcyBhbHdheXMgdXNlIHRoZSBsaWdodCBzeXN0ZW0gYXBwZWFyYW5jZS4KLSAgICAgICAg
T3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IHN0eWxlQ29sb3JPcHRpb25zID0geyBTdHls
ZUNvbG9yOjpPcHRpb25zOjpVc2VTeXN0ZW1BcHBlYXJhbmNlIH07Ci0jaWYgUExBVEZPUk0oTUFD
KQotICAgICAgICBzdHlsZS50ZXh0U3R5bGVzLmZpbGxDb2xvciA9IHJlbmRlcmVyKCkudGhlbWUo
KS5zeXN0ZW1Db2xvcihDU1NWYWx1ZUFwcGxlU3lzdGVtTGFiZWwsIHN0eWxlQ29sb3JPcHRpb25z
KTsKLSNlbmRpZgotICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSByZW5kZXJlcigpLnRo
ZW1lKCkudGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKHN0eWxlQ29sb3JPcHRpb25zKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLSAgICBTdHlsZWRNYXJrZWRUZXh0IHN0eWxlZE1hcmtl
ZFRleHQgPSBtYXJrZWRUZXh0OwotICAgIHN0eWxlZE1hcmtlZFRleHQuc3R5bGUgPSBXVEZNb3Zl
KHN0eWxlKTsKLSAgICByZXR1cm4gc3R5bGVkTWFya2VkVGV4dDsKLX0KLQotYXV0byBJbmxpbmVU
ZXh0Qm94OjpzdWJkaXZpZGVBbmRSZXNvbHZlU3R5bGUoY29uc3QgVmVjdG9yPE1hcmtlZFRleHQ+
JiB0ZXh0c1RvU3ViZGl2aWRlLCBjb25zdCBNYXJrZWRUZXh0U3R5bGUmIGJhc2VTdHlsZSwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8pIC0+IFZlY3RvcjxTdHlsZWRNYXJrZWRUZXh0Pgotewot
ICAgIGlmICh0ZXh0c1RvU3ViZGl2aWRlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsK
LQotICAgIGF1dG8gbWFya2VkVGV4dHMgPSBzdWJkaXZpZGUodGV4dHNUb1N1YmRpdmlkZSk7Ci0g
ICAgQVNTRVJUKCFtYXJrZWRUZXh0cy5pc0VtcHR5KCkpOwotICAgIGlmIChVTkxJS0VMWShtYXJr
ZWRUZXh0cy5pc0VtcHR5KCkpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgLy8gQ29tcHV0
ZSBmcm9udG1vc3Qgb3ZlcmxhcHBpbmcgc3R5bGVkIG1hcmtlZCB0ZXh0cy4KLSAgICBWZWN0b3I8
U3R5bGVkTWFya2VkVGV4dD4gZnJvbnRtb3N0TWFya2VkVGV4dHM7Ci0gICAgZnJvbnRtb3N0TWFy
a2VkVGV4dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtYXJrZWRUZXh0cy5zaXplKCkpOwotICAg
IGZyb250bW9zdE1hcmtlZFRleHRzLnVuY2hlY2tlZEFwcGVuZChyZXNvbHZlU3R5bGVGb3JNYXJr
ZWRUZXh0KG1hcmtlZFRleHRzWzBdLCBiYXNlU3R5bGUsIHBhaW50SW5mbykpOwotICAgIGZvciAo
YXV0byBpdCA9IG1hcmtlZFRleHRzLmJlZ2luKCkgKyAxLCBlbmQgPSBtYXJrZWRUZXh0cy5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFN0eWxlZE1hcmtlZFRleHQmIHByZXZpb3Vz
U3R5bGVkTWFya2VkVGV4dCA9IGZyb250bW9zdE1hcmtlZFRleHRzLmxhc3QoKTsKLSAgICAgICAg
aWYgKHByZXZpb3VzU3R5bGVkTWFya2VkVGV4dC5zdGFydE9mZnNldCA9PSBpdC0+c3RhcnRPZmZz
ZXQgJiYgcHJldmlvdXNTdHlsZWRNYXJrZWRUZXh0LmVuZE9mZnNldCA9PSBpdC0+ZW5kT2Zmc2V0
KSB7Ci0gICAgICAgICAgICAvLyBNYXJrZWQgdGV4dHMgY29tcGxldGVseSBjb3ZlciBlYWNoIG90
aGVyLgotICAgICAgICAgICAgcHJldmlvdXNTdHlsZWRNYXJrZWRUZXh0ID0gcmVzb2x2ZVN0eWxl
Rm9yTWFya2VkVGV4dCgqaXQsIHByZXZpb3VzU3R5bGVkTWFya2VkVGV4dC5zdHlsZSwgcGFpbnRJ
bmZvKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGZyb250bW9z
dE1hcmtlZFRleHRzLnVuY2hlY2tlZEFwcGVuZChyZXNvbHZlU3R5bGVGb3JNYXJrZWRUZXh0KCpp
dCwgYmFzZVN0eWxlLCBwYWludEluZm8pKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZnJvbnRtb3N0
TWFya2VkVGV4dHM7Ci19Ci0KLWF1dG8gSW5saW5lVGV4dEJveDo6Y29hbGVzY2VBZGphY2VudE1h
cmtlZFRleHRzKGNvbnN0IFZlY3RvcjxTdHlsZWRNYXJrZWRUZXh0PiYgdGV4dHNUb0NvYWxlc2Nl
LCBNYXJrZWRUZXh0U3R5bGVzRXF1YWxpdHlGdW5jdGlvbiBhcmVNYXJrZWRUZXh0U3R5bGVzRXF1
YWwpIC0+IFZlY3RvcjxTdHlsZWRNYXJrZWRUZXh0PgotewotICAgIGlmICh0ZXh0c1RvQ29hbGVz
Y2UuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgYXV0byBhcmVBZGphY2Vu
dE1hcmtlZFRleHRzV2l0aFNhbWVTdHlsZSA9IFsmXSAoY29uc3QgU3R5bGVkTWFya2VkVGV4dCYg
YSwgY29uc3QgU3R5bGVkTWFya2VkVGV4dCYgYikgewotICAgICAgICByZXR1cm4gYS5lbmRPZmZz
ZXQgPT0gYi5zdGFydE9mZnNldCAmJiBhcmVNYXJrZWRUZXh0U3R5bGVzRXF1YWwoYS5zdHlsZSwg
Yi5zdHlsZSk7Ci0gICAgfTsKLQotICAgIFZlY3RvcjxTdHlsZWRNYXJrZWRUZXh0PiBzdHlsZWRN
YXJrZWRUZXh0czsKLSAgICBzdHlsZWRNYXJrZWRUZXh0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KHRleHRzVG9Db2FsZXNjZS5zaXplKCkpOwotICAgIHN0eWxlZE1hcmtlZFRleHRzLnVuY2hlY2tl
ZEFwcGVuZCh0ZXh0c1RvQ29hbGVzY2VbMF0pOwotICAgIGZvciAoYXV0byBpdCA9IHRleHRzVG9D
b2FsZXNjZS5iZWdpbigpICsgMSwgZW5kID0gdGV4dHNUb0NvYWxlc2NlLmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgU3R5bGVkTWFya2VkVGV4dCYgcHJldmlvdXNTdHlsZWRNYXJr
ZWRUZXh0ID0gc3R5bGVkTWFya2VkVGV4dHMubGFzdCgpOwotICAgICAgICBpZiAoYXJlQWRqYWNl
bnRNYXJrZWRUZXh0c1dpdGhTYW1lU3R5bGUocHJldmlvdXNTdHlsZWRNYXJrZWRUZXh0LCAqaXQp
KSB7Ci0gICAgICAgICAgICBwcmV2aW91c1N0eWxlZE1hcmtlZFRleHQuZW5kT2Zmc2V0ID0gaXQt
PmVuZE9mZnNldDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIHN0
eWxlZE1hcmtlZFRleHRzLnVuY2hlY2tlZEFwcGVuZCgqaXQpOwotICAgIH0KLQotICAgIHJldHVy
biBzdHlsZWRNYXJrZWRUZXh0czsKLX0KLQogVmVjdG9yPE1hcmtlZFRleHQ+IElubGluZVRleHRC
b3g6OmNvbGxlY3RNYXJrZWRUZXh0c0ZvckRyYWdnZWRDb250ZW50KCkKIHsKICAgICB1c2luZyBE
cmFnZ2VuZENvbnRlbnRSYW5nZSA9IHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKaW5kZXggMzI4OWI5NjJlYTBhLi4w
ZjcxN2JkNzZiMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaApA
QCAtMzMsNiArMzMsNyBAQCBjbGFzcyBSZW5kZXJlZERvY3VtZW50TWFya2VyOwogY2xhc3MgVGV4
dFBhaW50ZXI7CiBzdHJ1Y3QgQ29tcG9zaXRpb25VbmRlcmxpbmU7CiBzdHJ1Y3QgTWFya2VkVGV4
dDsKK3N0cnVjdCBTdHlsZWRNYXJrZWRUZXh0Owogc3RydWN0IFRleHRQYWludFN0eWxlOwogCiBj
b25zdCB1bnNpZ25lZCBzaG9ydCBjTm9UcnVuY2F0aW9uID0gVVNIUlRfTUFYOwpAQCAtMTY0LDIy
ICsxNjUsMTIgQEAgcHVibGljOgogICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVEb2N1bWVudE1hcmtl
ckJvdW5kcyhjb25zdCBNYXJrZWRUZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0
IE1hcmtlZFRleHRTdHlsZTsKLSAgICBzdHJ1Y3QgU3R5bGVkTWFya2VkVGV4dDsKLQogICAgIGVu
dW0gY2xhc3MgVGV4dFBhaW50UGhhc2UgeyBCYWNrZ3JvdW5kLCBGb3JlZ3JvdW5kLCBEZWNvcmF0
aW9uIH07CiAKICAgICBWZWN0b3I8TWFya2VkVGV4dD4gY29sbGVjdE1hcmtlZFRleHRzRm9yRHJh
Z2dlZENvbnRlbnQoKTsKICAgICBWZWN0b3I8TWFya2VkVGV4dD4gY29sbGVjdE1hcmtlZFRleHRz
Rm9yRG9jdW1lbnRNYXJrZXJzKFRleHRQYWludFBoYXNlKSBjb25zdDsKICAgICBWZWN0b3I8TWFy
a2VkVGV4dD4gY29sbGVjdE1hcmtlZFRleHRzRm9ySGlnaGxpZ2h0cyhUZXh0UGFpbnRQaGFzZSkg
Y29uc3Q7CiAKLSAgICBNYXJrZWRUZXh0U3R5bGUgY29tcHV0ZVN0eWxlRm9yVW5tYXJrZWRNYXJr
ZWRUZXh0KGNvbnN0IFBhaW50SW5mbyYpIGNvbnN0OwotICAgIFN0eWxlZE1hcmtlZFRleHQgcmVz
b2x2ZVN0eWxlRm9yTWFya2VkVGV4dChjb25zdCBNYXJrZWRUZXh0JiwgY29uc3QgTWFya2VkVGV4
dFN0eWxlJiBiYXNlU3R5bGUsIGNvbnN0IFBhaW50SW5mbyYpOwotICAgIFZlY3RvcjxTdHlsZWRN
YXJrZWRUZXh0PiBzdWJkaXZpZGVBbmRSZXNvbHZlU3R5bGUoY29uc3QgVmVjdG9yPE1hcmtlZFRl
eHQ+JiwgY29uc3QgTWFya2VkVGV4dFN0eWxlJiBiYXNlU3R5bGUsIGNvbnN0IFBhaW50SW5mbyYp
OwotCi0gICAgdXNpbmcgTWFya2VkVGV4dFN0eWxlc0VxdWFsaXR5RnVuY3Rpb24gPSBib29sICgq
KShjb25zdCBNYXJrZWRUZXh0U3R5bGUmLCBjb25zdCBNYXJrZWRUZXh0U3R5bGUmKTsKLSAgICBW
ZWN0b3I8U3R5bGVkTWFya2VkVGV4dD4gY29hbGVzY2VBZGphY2VudE1hcmtlZFRleHRzKGNvbnN0
IFZlY3RvcjxTdHlsZWRNYXJrZWRUZXh0PiYsIE1hcmtlZFRleHRTdHlsZXNFcXVhbGl0eUZ1bmN0
aW9uKTsKLQogICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbkZyb21Cb3hSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpIGNvbnN0OwogCiAgICAgdm9pZCBwYWludE1hcmtlZFRleHRzKFBhaW50SW5mbyYsIFRl
eHRQYWludFBoYXNlLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IFZlY3RvcjxTdHls
ZWRNYXJrZWRUZXh0PiYsIGNvbnN0IEZsb2F0UmVjdCYgZGVjb3JhdGlvbkNsaXBPdXRSZWN0ID0g
eyB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NYXJrZWRUZXh0U3R5
bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01hcmtlZFRleHRTdHlsZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41MmI0YTlkOTUyMDAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFya2VkVGV4dFN0eWxlLmNw
cApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJNYXJrZWRUZXh0U3R5bGUuaCIKKworI2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVj
dG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQu
aCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBTdHlsZWRNYXJrZWRUZXh0IHJlc29sdmVTdHlsZUZvck1hcmtlZFRleHQoY29uc3QgTWFy
a2VkVGV4dCYgbWFya2VkVGV4dCwgY29uc3QgTWFya2VkVGV4dFN0eWxlJiBiYXNlU3R5bGUsIGNv
bnN0IFJlbmRlclRleHQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlLCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbykKK3sKKyAgICBNYXJrZWRUZXh0U3R5bGUgc3R5bGUg
PSBiYXNlU3R5bGU7CisgICAgc3dpdGNoIChtYXJrZWRUZXh0LnR5cGUpIHsKKyAgICBjYXNlIE1h
cmtlZFRleHQ6OkNvcnJlY3Rpb246CisgICAgY2FzZSBNYXJrZWRUZXh0OjpEaWN0YXRpb25BbHRl
cm5hdGl2ZXM6CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAvLyBGSVhNRTogU2VlIDxy
ZGFyOi8vcHJvYmxlbS84OTMzMzUyPi4gQWxzbywgcmVtb3ZlIHRoZSBQTEFURk9STShJT1NfRkFN
SUxZKS1ndWFyZC4KKyAgICBjYXNlIE1hcmtlZFRleHQ6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRl
cm5hdGl2ZXM6CisjZW5kaWYKKyAgICBjYXNlIE1hcmtlZFRleHQ6OkdyYW1tYXJFcnJvcjoKKyAg
ICBjYXNlIE1hcmtlZFRleHQ6OlNwZWxsaW5nRXJyb3I6CisgICAgY2FzZSBNYXJrZWRUZXh0OjpV
bm1hcmtlZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNYXJrZWRUZXh0OjpIaWdobGlnaHQ6
CisgICAgICAgIGlmIChhdXRvIHJlbmRlclN0eWxlID0gcmVuZGVyZXIucGFyZW50KCktPmdldFVu
Y2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6SGlnaGxpZ2h0LCBtYXJrZWRUZXh0LmhpZ2hs
aWdodE5hbWUgfSwgJnJlbmRlcmVyLnN0eWxlKCkpKSB7CisgICAgICAgICAgICBzdHlsZS5iYWNr
Z3JvdW5kQ29sb3IgPSByZW5kZXJTdHlsZS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgICAg
ICBzdHlsZS50ZXh0U3R5bGVzLmZpbGxDb2xvciA9IHJlbmRlclN0eWxlLT5jb21wdXRlZFN0cm9r
ZUNvbG9yKCk7CisgICAgICAgICAgICBzdHlsZS50ZXh0U3R5bGVzLnN0cm9rZUNvbG9yID0gcmVu
ZGVyU3R5bGUtPmNvbXB1dGVkU3Ryb2tlQ29sb3IoKTsKKworICAgICAgICAgICAgYXV0byBjb2xv
ciA9IFRleHREZWNvcmF0aW9uUGFpbnRlcjo6ZGVjb3JhdGlvbkNvbG9yKCpyZW5kZXJTdHlsZS5n
ZXQoKSk7CisgICAgICAgICAgICBhdXRvIGRlY29yYXRpb25TdHlsZSA9IHJlbmRlclN0eWxlLT50
ZXh0RGVjb3JhdGlvblN0eWxlKCk7CisgICAgICAgICAgICBhdXRvIGRlY29yYXRpb25zID0gcmVu
ZGVyU3R5bGUtPnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CisKKyAgICAgICAgICAgIGlmIChk
ZWNvcmF0aW9ucy5jb250YWlucyhUZXh0RGVjb3JhdGlvbjo6VW5kZXJsaW5lKSkgeworICAgICAg
ICAgICAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGVzLnVuZGVybGluZUNvbG9yID0gY29s
b3I7CisgICAgICAgICAgICAgICAgc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMudW5kZXJsaW5l
U3R5bGUgPSBkZWNvcmF0aW9uU3R5bGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
ZGVjb3JhdGlvbnMuY29udGFpbnMoVGV4dERlY29yYXRpb246Ok92ZXJsaW5lKSkgeworICAgICAg
ICAgICAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGVzLm92ZXJsaW5lQ29sb3IgPSBjb2xv
cjsKKyAgICAgICAgICAgICAgICBzdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcy5vdmVybGluZVN0
eWxlID0gZGVjb3JhdGlvblN0eWxlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRl
Y29yYXRpb25zLmNvbnRhaW5zKFRleHREZWNvcmF0aW9uOjpMaW5lVGhyb3VnaCkpIHsKKyAgICAg
ICAgICAgICAgICBzdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlcy5saW5ldGhyb3VnaENvbG9yID0g
Y29sb3I7CisgICAgICAgICAgICAgICAgc3R5bGUudGV4dERlY29yYXRpb25TdHlsZXMubGluZXRo
cm91Z2hTdHlsZSA9IGRlY29yYXRpb25TdHlsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoQVBQX0hJR0hMSUdIVFMpCisgICAgY2FzZSBNYXJr
ZWRUZXh0OjpBcHBIaWdobGlnaHQ6IHsKKyAgICAgICAgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9w
dGlvbnM+IHN0eWxlQ29sb3JPcHRpb25zID0geyBTdHlsZUNvbG9yOjpPcHRpb25zOjpVc2VTeXN0
ZW1BcHBlYXJhbmNlIH07CisgICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHJlbmRlcmVy
KCkudGhlbWUoKS5hcHBIaWdobGlnaHRDb2xvcihzdHlsZUNvbG9yT3B0aW9ucyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyNlbmRpZgorICAgIGNhc2UgTWFya2VkVGV4dDo6RHJhZ2dlZENvbnRl
bnQ6CisgICAgICAgIHN0eWxlLmFscGhhID0gMC4yNTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBNYXJrZWRUZXh0OjpTZWxlY3Rpb246IHsKKyAgICAgICAgc3R5bGUudGV4dFN0eWxlcyA9IGNv
bXB1dGVUZXh0U2VsZWN0aW9uUGFpbnRTdHlsZShzdHlsZS50ZXh0U3R5bGVzLCByZW5kZXJlciwg
bGluZVN0eWxlLCBwYWludEluZm8sIHN0eWxlLnRleHRTaGFkb3cpOworCisgICAgICAgIENvbG9y
IHNlbGVjdGlvbkJhY2tncm91bmRDb2xvciA9IHJlbmRlcmVyLnNlbGVjdGlvbkJhY2tncm91bmRD
b2xvcigpOworICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBzZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3I7CisgICAgICAgIGlmIChzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgp
ICYmIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvci5pc1Zpc2libGUoKSAmJiBzdHlsZS50ZXh0U3R5
bGVzLmZpbGxDb2xvciA9PSBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpCisgICAgICAgICAgICBz
dHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IuaW52ZXJ0ZWRD
b2xvcldpdGhBbHBoYSgxLjApOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBNYXJr
ZWRUZXh0OjpUZXh0TWF0Y2g6IHsKKyAgICAgICAgLy8gVGV4dCBtYXRjaGVzIGFsd2F5cyB1c2Ug
dGhlIGxpZ2h0IHN5c3RlbSBhcHBlYXJhbmNlLgorICAgICAgICBPcHRpb25TZXQ8U3R5bGVDb2xv
cjo6T3B0aW9ucz4gc3R5bGVDb2xvck9wdGlvbnMgPSB7IFN0eWxlQ29sb3I6Ok9wdGlvbnM6OlVz
ZVN5c3RlbUFwcGVhcmFuY2UgfTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIHN0eWxlLnRl
eHRTdHlsZXMuZmlsbENvbG9yID0gcmVuZGVyZXIudGhlbWUoKS5zeXN0ZW1Db2xvcihDU1NWYWx1
ZUFwcGxlU3lzdGVtTGFiZWwsIHN0eWxlQ29sb3JPcHRpb25zKTsKKyNlbmRpZgorICAgICAgICBz
dHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSByZW5kZXJlci50aGVtZSgpLnRleHRTZWFyY2hIaWdobGln
aHRDb2xvcihzdHlsZUNvbG9yT3B0aW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9
CisgICAgU3R5bGVkTWFya2VkVGV4dCBzdHlsZWRNYXJrZWRUZXh0ID0gbWFya2VkVGV4dDsKKyAg
ICBzdHlsZWRNYXJrZWRUZXh0LnN0eWxlID0gV1RGTW92ZShzdHlsZSk7CisgICAgcmV0dXJuIHN0
eWxlZE1hcmtlZFRleHQ7Cit9CisKK3N0YXRpYyBNYXJrZWRUZXh0U3R5bGUgY29tcHV0ZVN0eWxl
Rm9yVW5tYXJrZWRNYXJrZWRUZXh0KGNvbnN0IFJlbmRlclRleHQmIHJlbmRlcmVyLCBjb25zdCBS
ZW5kZXJTdHlsZSYgbGluZVN0eWxlLCBib29sIGlzRmlyc3RMaW5lLCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbykKK3sKKyAgICBNYXJrZWRUZXh0U3R5bGUgc3R5bGU7CisgICAgc3R5bGUudGV4
dERlY29yYXRpb25TdHlsZXMgPSBUZXh0RGVjb3JhdGlvblBhaW50ZXI6OnN0eWxlc0ZvclJlbmRl
cmVyKHJlbmRlcmVyLCBsaW5lU3R5bGUudGV4dERlY29yYXRpb25zSW5FZmZlY3QoKSwgaXNGaXJz
dExpbmUpOworICAgIHN0eWxlLnRleHRTdHlsZXMgPSBjb21wdXRlVGV4dFBhaW50U3R5bGUocmVu
ZGVyZXIuZnJhbWUoKSwgbGluZVN0eWxlLCBwYWludEluZm8pOworICAgIHN0eWxlLnRleHRTaGFk
b3cgPSBTaGFkb3dEYXRhOjpjbG9uZShwYWludEluZm8uZm9yY2VUZXh0Q29sb3IoKSA/IG51bGxw
dHIgOiBsaW5lU3R5bGUudGV4dFNoYWRvdygpKTsKKyAgICBzdHlsZS5hbHBoYSA9IDE7CisgICAg
cmV0dXJuIHN0eWxlOworfQorCitWZWN0b3I8U3R5bGVkTWFya2VkVGV4dD4gc3ViZGl2aWRlQW5k
UmVzb2x2ZVN0eWxlKGNvbnN0IFZlY3RvcjxNYXJrZWRUZXh0PiYgdGV4dHNUb1N1YmRpdmlkZSwg
Y29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIsIGJvb2wgaXNGaXJzdExpbmUsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvKQoreworICAgIGlmICh0ZXh0c1RvU3ViZGl2aWRlLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gbWFya2VkVGV4dHMgPSBzdWJkaXZpZGUo
dGV4dHNUb1N1YmRpdmlkZSk7CisgICAgQVNTRVJUKCFtYXJrZWRUZXh0cy5pc0VtcHR5KCkpOwor
ICAgIGlmIChVTkxJS0VMWShtYXJrZWRUZXh0cy5pc0VtcHR5KCkpKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgYXV0byYgbGluZVN0eWxlID0gaXNGaXJzdExpbmUgPyByZW5kZXJlci5maXJz
dExpbmVTdHlsZSgpIDogcmVuZGVyZXIuc3R5bGUoKTsKKyAgICBhdXRvIGJhc2VTdHlsZSA9IGNv
bXB1dGVTdHlsZUZvclVubWFya2VkTWFya2VkVGV4dChyZW5kZXJlciwgbGluZVN0eWxlLCBpc0Zp
cnN0TGluZSwgcGFpbnRJbmZvKTsKKworICAgIC8vIENvbXB1dGUgZnJvbnRtb3N0IG92ZXJsYXBw
aW5nIHN0eWxlZCBtYXJrZWQgdGV4dHMuCisgICAgVmVjdG9yPFN0eWxlZE1hcmtlZFRleHQ+IGZy
b250bW9zdE1hcmtlZFRleHRzOworICAgIGZyb250bW9zdE1hcmtlZFRleHRzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobWFya2VkVGV4dHMuc2l6ZSgpKTsKKyAgICBmcm9udG1vc3RNYXJrZWRUZXh0
cy51bmNoZWNrZWRBcHBlbmQocmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dChtYXJrZWRUZXh0c1sw
XSwgYmFzZVN0eWxlLCByZW5kZXJlciwgbGluZVN0eWxlLCBwYWludEluZm8pKTsKKyAgICBmb3Ig
KGF1dG8gaXQgPSBtYXJrZWRUZXh0cy5iZWdpbigpICsgMSwgZW5kID0gbWFya2VkVGV4dHMuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBTdHlsZWRNYXJrZWRUZXh0JiBwcmV2aW91
c1N0eWxlZE1hcmtlZFRleHQgPSBmcm9udG1vc3RNYXJrZWRUZXh0cy5sYXN0KCk7CisgICAgICAg
IGlmIChwcmV2aW91c1N0eWxlZE1hcmtlZFRleHQuc3RhcnRPZmZzZXQgPT0gaXQtPnN0YXJ0T2Zm
c2V0ICYmIHByZXZpb3VzU3R5bGVkTWFya2VkVGV4dC5lbmRPZmZzZXQgPT0gaXQtPmVuZE9mZnNl
dCkgeworICAgICAgICAgICAgLy8gTWFya2VkIHRleHRzIGNvbXBsZXRlbHkgY292ZXIgZWFjaCBv
dGhlci4KKyAgICAgICAgICAgIHByZXZpb3VzU3R5bGVkTWFya2VkVGV4dCA9IHJlc29sdmVTdHls
ZUZvck1hcmtlZFRleHQoKml0LCBwcmV2aW91c1N0eWxlZE1hcmtlZFRleHQuc3R5bGUsIHJlbmRl
cmVyLCBsaW5lU3R5bGUsIHBhaW50SW5mbyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorICAgICAgICBmcm9udG1vc3RNYXJrZWRUZXh0cy51bmNoZWNrZWRBcHBlbmQocmVzb2x2
ZVN0eWxlRm9yTWFya2VkVGV4dCgqaXQsIGJhc2VTdHlsZSwgcmVuZGVyZXIsIGxpbmVTdHlsZSwg
cGFpbnRJbmZvKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZyb250bW9zdE1hcmtlZFRleHRzOwor
fQorCitWZWN0b3I8U3R5bGVkTWFya2VkVGV4dD4gY29hbGVzY2VBZGphY2VudE1hcmtlZFRleHRz
KGNvbnN0IFZlY3RvcjxTdHlsZWRNYXJrZWRUZXh0PiYgdGV4dHNUb0NvYWxlc2NlLCBNYXJrZWRU
ZXh0U3R5bGVzRXF1YWxpdHlGdW5jdGlvbiBhcmVNYXJrZWRUZXh0U3R5bGVzRXF1YWwpCit7Cisg
ICAgaWYgKHRleHRzVG9Db2FsZXNjZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBhdXRvIGFyZUFkamFjZW50TWFya2VkVGV4dHNXaXRoU2FtZVN0eWxlID0gWyZdIChjb25z
dCBTdHlsZWRNYXJrZWRUZXh0JiBhLCBjb25zdCBTdHlsZWRNYXJrZWRUZXh0JiBiKSB7CisgICAg
ICAgIHJldHVybiBhLmVuZE9mZnNldCA9PSBiLnN0YXJ0T2Zmc2V0ICYmIGFyZU1hcmtlZFRleHRT
dHlsZXNFcXVhbChhLnN0eWxlLCBiLnN0eWxlKTsKKyAgICB9OworCisgICAgVmVjdG9yPFN0eWxl
ZE1hcmtlZFRleHQ+IHN0eWxlZE1hcmtlZFRleHRzOworICAgIHN0eWxlZE1hcmtlZFRleHRzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkodGV4dHNUb0NvYWxlc2NlLnNpemUoKSk7CisgICAgc3R5bGVk
TWFya2VkVGV4dHMudW5jaGVja2VkQXBwZW5kKHRleHRzVG9Db2FsZXNjZVswXSk7CisgICAgZm9y
IChhdXRvIGl0ID0gdGV4dHNUb0NvYWxlc2NlLmJlZ2luKCkgKyAxLCBlbmQgPSB0ZXh0c1RvQ29h
bGVzY2UuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBTdHlsZWRNYXJrZWRUZXh0
JiBwcmV2aW91c1N0eWxlZE1hcmtlZFRleHQgPSBzdHlsZWRNYXJrZWRUZXh0cy5sYXN0KCk7Cisg
ICAgICAgIGlmIChhcmVBZGphY2VudE1hcmtlZFRleHRzV2l0aFNhbWVTdHlsZShwcmV2aW91c1N0
eWxlZE1hcmtlZFRleHQsICppdCkpIHsKKyAgICAgICAgICAgIHByZXZpb3VzU3R5bGVkTWFya2Vk
VGV4dC5lbmRPZmZzZXQgPSBpdC0+ZW5kT2Zmc2V0OworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgc3R5bGVkTWFya2VkVGV4dHMudW5jaGVja2VkQXBwZW5kKCppdCk7
CisgICAgfQorCisgICAgcmV0dXJuIHN0eWxlZE1hcmtlZFRleHRzOworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFya2VkVGV4dFN0eWxlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvTWFya2VkVGV4dFN0eWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi5iOTJkMmUwMTQ1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFya2VkVGV4dFN0eWxlLmgKQEAgLTAsMCArMSw3NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTWFya2VkVGV4dC5oIgorI2lu
Y2x1ZGUgIlNoYWRvd0RhdGEuaCIKKyNpbmNsdWRlICJUZXh0RGVjb3JhdGlvblBhaW50ZXIuaCIK
KyNpbmNsdWRlICJUZXh0UGFpbnRTdHlsZS5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclRleHQ7CitjbGFzcyBSZW5kZXJl
ZERvY3VtZW50TWFya2VyOworCitzdHJ1Y3QgTWFya2VkVGV4dFN0eWxlIHsKKyAgICBzdGF0aWMg
Ym9vbCBhcmVCYWNrZ3JvdW5kTWFya2VkVGV4dFN0eWxlc0VxdWFsKGNvbnN0IE1hcmtlZFRleHRT
dHlsZSYgYSwgY29uc3QgTWFya2VkVGV4dFN0eWxlJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGEuYmFja2dyb3VuZENvbG9yID09IGIuYmFja2dyb3VuZENvbG9yOworICAgIH0KKyAgICBzdGF0
aWMgYm9vbCBhcmVGb3JlZ3JvdW5kTWFya2VkVGV4dFN0eWxlc0VxdWFsKGNvbnN0IE1hcmtlZFRl
eHRTdHlsZSYgYSwgY29uc3QgTWFya2VkVGV4dFN0eWxlJiBiKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGEudGV4dFN0eWxlcyA9PSBiLnRleHRTdHlsZXMgJiYgYS50ZXh0U2hhZG93ID09IGIudGV4
dFNoYWRvdyAmJiBhLmFscGhhID09IGIuYWxwaGE7CisgICAgfQorICAgIHN0YXRpYyBib29sIGFy
ZURlY29yYXRpb25NYXJrZWRUZXh0U3R5bGVzRXF1YWwoY29uc3QgTWFya2VkVGV4dFN0eWxlJiBh
LCBjb25zdCBNYXJrZWRUZXh0U3R5bGUmIGIpCisgICAgeworICAgICAgICByZXR1cm4gYS50ZXh0
RGVjb3JhdGlvblN0eWxlcyA9PSBiLnRleHREZWNvcmF0aW9uU3R5bGVzICYmIGEudGV4dFNoYWRv
dyA9PSBiLnRleHRTaGFkb3cgJiYgYS5hbHBoYSA9PSBiLmFscGhhOworICAgIH0KKworICAgIENv
bG9yIGJhY2tncm91bmRDb2xvcjsKKyAgICBUZXh0UGFpbnRTdHlsZSB0ZXh0U3R5bGVzOworICAg
IFRleHREZWNvcmF0aW9uUGFpbnRlcjo6U3R5bGVzIHRleHREZWNvcmF0aW9uU3R5bGVzOworICAg
IE9wdGlvbmFsPFNoYWRvd0RhdGE+IHRleHRTaGFkb3c7CisgICAgZmxvYXQgYWxwaGE7Cit9Owor
CitzdHJ1Y3QgU3R5bGVkTWFya2VkVGV4dCA6IE1hcmtlZFRleHQgeworICAgIFN0eWxlZE1hcmtl
ZFRleHQoY29uc3QgTWFya2VkVGV4dCYgbWFya2VyKQorICAgICAgICA6IE1hcmtlZFRleHQgeyBt
YXJrZXIgfQorICAgIHsKKyAgICB9CisKKyAgICBNYXJrZWRUZXh0U3R5bGUgc3R5bGU7Cit9Owor
CitWZWN0b3I8U3R5bGVkTWFya2VkVGV4dD4gc3ViZGl2aWRlQW5kUmVzb2x2ZVN0eWxlKGNvbnN0
IFZlY3RvcjxNYXJrZWRUZXh0PiYsIGNvbnN0IFJlbmRlclRleHQmLCBib29sIGlzRmlyc3RMaW5l
LCBjb25zdCBQYWludEluZm8mKTsKKwordXNpbmcgTWFya2VkVGV4dFN0eWxlc0VxdWFsaXR5RnVu
Y3Rpb24gPSBib29sICgqKShjb25zdCBNYXJrZWRUZXh0U3R5bGUmLCBjb25zdCBNYXJrZWRUZXh0
U3R5bGUmKTsKK1ZlY3RvcjxTdHlsZWRNYXJrZWRUZXh0PiBjb2FsZXNjZUFkamFjZW50TWFya2Vk
VGV4dHMoY29uc3QgVmVjdG9yPFN0eWxlZE1hcmtlZFRleHQ+JiwgTWFya2VkVGV4dFN0eWxlc0Vx
dWFsaXR5RnVuY3Rpb24pOworCit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>