<?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>111102</bug_id>
          
          <creation_ts>2013-02-28 12:38:16 -0800</creation_ts>
          <short_desc>It should be easy to determine if a DFG node exits forward or backward when doing type checks</short_desc>
          <delta_ts>2013-02-28 13:54:18 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>109389</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mario</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>844364</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-28 12:38:16 -0800</bug_when>
    <thetext>Right now, some nodes type check with forward exit, while others do it with backward exit.  Most nodes will use the same direction for all of their exits (the one exception is some typed array access).  But the only way you can even get a hint of exit directionality is by casing on node type.  This is sloppy, and could lead to bugs (if you replace a ForwardCheckStructure with a Phantom and intend to keep the cell check, you&apos;ve now introduced a really bad bug).

This patch fixes this by having a NodeFlag that tells the exit directionality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844377</commentid>
    <comment_count>1</comment_count>
      <attachid>190785</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-28 12:44:44 -0800</bug_when>
    <thetext>Created attachment 190785
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844387</commentid>
    <comment_count>2</comment_count>
      <attachid>190785</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-02-28 12:58:51 -0800</bug_when>
    <thetext>Comment on attachment 190785
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844388</commentid>
    <comment_count>3</comment_count>
      <attachid>190785</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-02-28 13:00:15 -0800</bug_when>
    <thetext>Comment on attachment 190785
the patch

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

&gt; Source/JavaScriptCore/dfg/DFGNodeFlags.h:70
&gt; +#define NodeExitsForward        0x10000

enum { NodeExitsForward = 0x10000 }?

I&apos;ve been leaning towards enums for constants lately as they&apos;re guaranteed to be constant (eg. no compiler deciding to do stupid loads) and are visible to the debugger</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844393</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-28 13:05:43 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 190785 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=190785&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGNodeFlags.h:70
&gt; &gt; +#define NodeExitsForward        0x10000
&gt; 
&gt; enum { NodeExitsForward = 0x10000 }?
&gt; 
&gt; I&apos;ve been leaning towards enums for constants lately as they&apos;re guaranteed to be constant (eg. no compiler deciding to do stupid loads) and are visible to the debugger

Separate patch?  DFGNodeFlags.h uses #define&apos;s extensively for all of the flags, and has been doing so since the DFG&apos;s beginning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844449</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-28 13:54:18 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/144362</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190785</attachid>
            <date>2013-02-28 12:44:44 -0800</date>
            <delta_ts>2013-02-28 13:00:15 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58380</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ0MzQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBA
CisyMDEzLTAyLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SXQgc2hvdWxkIGJlIGVhc3kgdG8gZGV0ZXJtaW5lIGlmIGEgREZHIG5vZGUgZXhpdHMgZm9yd2Fy
ZCBvciBiYWNrd2FyZCB3aGVuIGRvaW5nIHR5cGUgY2hlY2tzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTExMDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWRkcyBhIE5vZGVFeGl0
c0ZvcndhcmQgZmxhZywgd2hpY2ggdGVsbHMgeW91IHRoZSBleGl0IGRpcmVjdGlvbmFsaXR5IG9m
CisgICAgICAgIHR5cGUgY2hlY2tzIHBlcmZvcm1lZCBieSB0aGUgbm9kZS4gRXZlbiBpZiB5b3Ug
Y29udmVydCB0aGUgbm9kZSB0byBhIFBoYW50b20KKyAgICAgICAgYW5kIHVzZSB0aGUgRWRnZSBV
c2VLaW5kIGZvciB0eXBlIGNoZWNrcywgeW91J2xsIHN0aWxsIGdldCB0aGUgc2FtZSBleGl0Cisg
ICAgICAgIGRpcmVjdGlvbmFsaXR5IHRoYXQgdGhlIG9yaWdpbmFsIG5vZGUgd291bGQgaGF2ZSB3
YW50ZWQuCisKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6cnVu
KToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkFycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3I6OkFycmF5aWZ5U2xvd1BhdGhH
ZW5lcmF0b3IpOgorICAgICAgICAqIGRmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpydW4pOgorICAgICAg
ICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6Om1lcmdlQmxvY2tzKToKKyAgICAg
ICAgKiBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q1BTUmV0aHJlYWRpbmdQaGFzZTo6Y2Fub25pY2FsaXplRmx1c2hPclBoYW50b21Mb2NhbEZvcik6
CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQ
aGFzZTo6c2V0UmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjplbGlt
aW5hdGUpOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6Cisg
ICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmNoZWNr
QXJyYXkpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChOb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpzZXRPcEFuZERlZmF1bHROb25FeGl0RmxhZ3MpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb1BoYW50b20pOgorICAgICAgICAqIGRmZy9ERkdO
b2RlRmxhZ3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om5vZGVGbGFnc0FzU3RyaW5nKToKKyAg
ICAgICAgKiBkZmcvREZHTm9kZUZsYWdzLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRm
Zy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpiYWNrd2Fy
ZFNwZWN1bGF0aW9uQ2hlY2spOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRUeXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjp0eXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpmb3J3YXJkVHlwZUNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1
bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZh
bHVlVG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJ
bnQzMlRvRG91YmxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAg
ICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZDo6U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kOjpncHIpOgorICAgICAgICAoU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZURvdWJsZU9wZXJhbmQ6OlNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQ6OmZwcik6CisgICAgICAgIChTcGVjdWxhdGVEb3VibGVPcGVyYW5kKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGVDZWxsT3BlcmFuZDo6U3BlY3VsYXRlQ2VsbE9wZXJhbmQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kOjpncHIpOgorICAgICAgICAo
U3BlY3VsYXRlQ2VsbE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0ZUJvb2xl
YW5PcGVyYW5kOjpTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ6Omdwcik6CisgICAgICAgIChTcGVjdWxhdGVCb29sZWFu
T3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludFN0cmljdCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFu
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTMt
MDItMjcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgQ0ZB
IHNob3VsZCBsZWF2ZSBiZWhpbmQgaW5mb3JtYXRpb24gaW4gRWRnZSB0aGF0IHNheXMgaWYgdGhl
IEVkZ2UncyB0eXBlIGNoZWNrIGlzIHByb3ZlbiB0byBzdWNjZWVkCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE0NDM0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2OSw3ICs0NjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNP
S1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhh
bnRvbSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVy
YXRvci5oCShyZXZpc2lvbiAxNDQzNDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTMgKzYz
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICAg
ICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91
czoKLSAgICAgICAgICAgICAgICBtX2JhZFByb3BlcnR5SnVtcCA9IGppdC0+c3BlY3VsYXRpb25D
aGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CisgICAgICAgICAgICAgICAgbV9i
YWRQcm9wZXJ0eUp1bXAgPSBqaXQtPmJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIG1fYmFkSW5kZXhpbmdUeXBlSnVtcCA9IGppdC0+c3BlY3VsYXRpb25DaGVj
ayhCYWRJbmRleGluZ1R5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG1fYmFzZUdQUiks
IDApOworICAgICAgICBtX2JhZEluZGV4aW5nVHlwZUp1bXAgPSBqaXQtPmJhY2t3YXJkU3BlY3Vs
YXRpb25DaGVjayhCYWRJbmRleGluZ1R5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG1f
YmFzZUdQUiksIDApOwogICAgIH0KICAgICAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMTQ0MzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChibG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luID0gYmxvY2stPmxh
c3QoKS0+Y29kZU9yaWdpbjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+bGFz
dCgpLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBibG9jay0+bGFzdCgpLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5sYXN0KCktPnJlZkNvdW50KCkgPT0gMSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0
aXNvbkJsb2NrKGJsb2NrSW5kZXgsIG5vdFRha2VuQmxvY2tJbmRleCwgYm91bmRhcnlDb2RlT3Jp
Z2luKTsKQEAgLTE2Nyw3ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTm9kZSogYnJhbmNoID0gYmxvY2stPmxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoYnJhbmNoLT5pc1Rlcm1pbmFsKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChicmFuY2gtPm9wKCkgPT0gQnJhbmNoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmFuY2gtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaC0+Y29udmVydFRvUGhhbnRvbSgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChicmFuY2gtPnJlZkNvdW50KCkgPT0gMSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmxvY2stPmFwcGVuZE5vZGUoCkBAIC0zMjEsNyArMzIxLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgLy8gcmVhbGx5IHJlbW92ZSBpdDsgd2UgYWN0dWFsbHkgdHVybiBpdCBpbnRvIGEgUGhhbnRv
bS4KICAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKICAg
ICAgICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBmaXJzdEJsb2NrLT5sYXN0KCkt
PmNvZGVPcmlnaW47Ci0gICAgICAgIGZpcnN0QmxvY2stPmxhc3QoKS0+c2V0T3BBbmREZWZhdWx0
RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgIGZpcnN0QmxvY2stPmxhc3QoKS0+Y29udmVydFRvUGhh
bnRvbSgpOwogICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+bGFzdCgpLT5yZWZDb3VudCgpID09
IDEpOwogICAgICAgICAKICAgICAgICAgaWYgKGpldHRpc29uZWRCbG9ja0luZGV4ICE9IE5vQmxv
Y2spIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNS
ZXRocmVhZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQ0MzQ5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUyLDcgKzI1Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgLy8gU28gd2UgdHVybiB0aGlzIGludG8gYSBQaGFudG9tIG9uIHRoZSBjaGlsZCBvZiB0aGUg
U2V0TG9jYWwuCiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BB
bmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRv
UGhhbnRvbSgpOwogICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShvdGhl
ck5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNp
b24gMTQ0MzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMjUsNyArMTAyNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGRh
dGFMb2dGKCIgICBSZXBsYWNpbmcgQCV1IC0+IEAldSIsIG1fY3VycmVudE5vZGUtPmluZGV4KCks
IHJlcGxhY2VtZW50LT5pbmRleCgpKTsKICNlbmRpZgogICAgICAgICAKLSAgICAgICAgbV9jdXJy
ZW50Tm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgIG1fY3VycmVu
dE5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgbV9jdXJyZW50Tm9kZS0+c2V0UmVm
Q291bnQoMSk7CiAgICAgICAgIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4obV9j
dXJyZW50Tm9kZSk7CiAgICAgICAgIApAQCAtMTA0NSw3ICsxMDQ1LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgCiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5yZWZDb3VudCgpID09IDEpOwog
ICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+bXVzdEdlbmVyYXRlKCkpOwotICAgICAgICBt
X2N1cnJlbnROb2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgbV9j
dXJyZW50Tm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICBlbGltaW5hdGVJcnJlbGV2
YW50UGhhbnRvbUNoaWxkcmVuKG1fY3VycmVudE5vZGUpOwogICAgICAgICAKICAgICAgICAgbV9j
aGFuZ2VkID0gdHJ1ZTsKQEAgLTEwNTgsNyArMTA1OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlm
IChub2RlLT5yZWZDb3VudCgpICE9IDEpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEFT
U0VSVChub2RlLT5tdXN0R2VuZXJhdGUoKSk7Ci0gICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVs
dEZsYWdzKHBoYW50b21UeXBlKTsKKyAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0Tm9uRXhp
dEZsYWdzKHBoYW50b21UeXBlKTsKICAgICAgICAgaWYgKHBoYW50b21UeXBlID09IFBoYW50b20p
CiAgICAgICAgICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKG5vZGUpOwog
ICAgICAgICAKQEAgLTEyMTEsNyArMTIxMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBU1NF
UlQocmVwbGFjZW1lbnQtPnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgICAgICBBU1NFUlQocmVw
bGFjZW1lbnQtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgLy8gRklYTUU6IEludmVz
dGlnYXRlIHVzaW5nIG1heUV4aXQgYXMgYSBmdXJ0aGVyIG9wdGltaXphdGlvbi4KLSAgICAgICAg
ICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICAgICAgTm9kZSogZGF0YU5vZGUgPSByZXBs
YWNlbWVudC0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgQVNTRVJUKGRhdGFOb2RlLT5o
YXNSZXN1bHQoKSk7CiAgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEobm9k
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQ0MzQ5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg5LDcgKzg5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5tX3R5cGUpKQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+cmVm
Q291bnQoKSA9PSAxKTsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFn
cyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAg
ICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CkBAIC0xMDYsNyArMTA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5yZWZDb3VudCgpID09IDEpOwogICAg
ICAgICAgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gQ2F0Y2gg
dGhlIGZhY3QgdGhhdCB3ZSBtYXkgZmlsdGVyIG9uIGNlbGwuCi0gICAgICAgICAgICAgICAgICAg
IG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0
ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CkBAIC0xMjcsNyArMTI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUt
PmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIG1fc3RhdGUuZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBBU1NFUlQobm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKLSAgICAgICAgICAgICAgICBu
b2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKKyAgICAgICAgICAgICAgICBub2Rl
LT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xMzUsNyArMTM1LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjogewogICAgICAgICAg
ICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCkgIT0gbm9k
ZS0+ZnVuY3Rpb24oKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICAgICAg
bm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQzNDkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NTUsNyArODU1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
aWYgKHByZXZpb3VzTm9kZS0+b3AoKSA9PSBDaGVja1N0cnVjdHVyZQogICAgICAgICAgICAgICAg
ICAgICAgICAgJiYgcHJldmlvdXNOb2RlLT5jaGlsZDEoKSA9PSBhcnJheQogICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgcHJldmlvdXNOb2RlLT5jb2RlT3JpZ2luID09IGNvZGVPcmlnaW4pCi0g
ICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c05vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdz
KFBoYW50b20pOworICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNOb2RlLT5jb252ZXJ0
VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTQ0MzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw2ICsxOTYsMTcgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICBtX29wID0gb3A7CiAgICAgICAgIG1fZmxhZ3MgPSBkZWZhdWx0
RmxhZ3Mob3ApOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHNldE9wQW5kRGVmYXVsdE5vbkV4aXRG
bGFncyhOb2RlVHlwZSBvcCkKKyAgICB7CisgICAgICAgIG1fb3AgPSBvcDsKKyAgICAgICAgbV9m
bGFncyA9IChkZWZhdWx0RmxhZ3Mob3ApICYgfk5vZGVFeGl0c0ZvcndhcmQpIHwgKG1fZmxhZ3Mg
JiBOb2RlRXhpdHNGb3J3YXJkKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9QaGFu
dG9tKCkKKyAgICB7CisgICAgICAgIHNldE9wQW5kRGVmYXVsdE5vbkV4aXRGbGFncyhQaGFudG9t
KTsKKyAgICB9CiAKICAgICBib29sIG11c3RHZW5lcmF0ZSgpCiAgICAgewpAQCAtMTI1MCw4ICsx
MjYxLDggQEAgc3RydWN0IE5vZGUgewogICAgIEFkamFjZW5jeUxpc3QgY2hpbGRyZW47CiAKIHBy
aXZhdGU6Ci0gICAgdWludDE2X3QgbV9vcDsgLy8gcmVhbCB0eXBlIGlzIE5vZGVUeXBlCi0gICAg
Tm9kZUZsYWdzIG1fZmxhZ3M7CisgICAgdW5zaWduZWQgbV9vcCA6IDEwOyAvLyByZWFsIHR5cGUg
aXMgTm9kZVR5cGUKKyAgICB1bnNpZ25lZCBtX2ZsYWdzIDogMjI7CiAgICAgLy8gVGhlIHZpcnR1
YWwgcmVnaXN0ZXIgbnVtYmVyIChzcGlsbCBsb2NhdGlvbikgYXNzb2NpYXRlZCB3aXRoIHRoaXMg
LgogICAgIFZpcnR1YWxSZWdpc3RlciBtX3ZpcnR1YWxSZWdpc3RlcjsKICAgICAvLyBUaGUgbnVt
YmVyIG9mIHVzZXMgb2YgdGhlIHJlc3VsdCBvZiB0aGlzIG9wZXJhdGlvbiAoKzEgZm9yICdtdXN0
IGdlbmVyYXRlJyBub2Rlcywgd2hpY2ggaGF2ZSBzaWRlLWVmZmVjdHMpLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcAkocmV2aXNpb24gMTQ0MzQ5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xNDgsNiArMTQ4LDEzIEBAIGNvbnN0IGNoYXIqIG5vZGVGbGFnc0FzU3RyaW5nKE5vZGVG
bGFncyAKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQogICAgIAorICAgIGlmIChm
bGFncyAmIE5vZGVFeGl0c0ZvcndhcmQpIHsKKyAgICAgICAgaWYgKGhhc1ByaW50ZWQpCisgICAg
ICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7CisgICAgICAgIHB0ci5zdHJjYXQoIk5vZGVFeGl0c0Zv
cndhcmQiKTsKKyAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgfQorICAgIAogICAgICpw
dHIrKyA9IDA7CiAgICAgCiAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCShyZXZpc2lvbiAxNDQzNDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCSh3b3JraW5nIGNvcHkpCkBAIC02
Nyw3ICs2Nyw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogI2RlZmluZSBO
b2RlUmVsZXZhbnRUb09TUiAgICAgICAgMHg4MDAwCiAKLXR5cGVkZWYgdWludDE2X3QgTm9kZUZs
YWdzOworI2RlZmluZSBOb2RlRXhpdHNGb3J3YXJkICAgICAgICAweDEwMDAwCisKK3R5cGVkZWYg
dWludDMyX3QgTm9kZUZsYWdzOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgbm9kZVVzZWRBc051bWJl
cihOb2RlRmxhZ3MgZmxhZ3MpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCShyZXZpc2lvbiAxNDQzNDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIEFueSB0d28gbm9kZXMgdGhhdCBhcmUgcGFy
dCBvZiB0aGUgc2FtZSBQaGkgZ3JhcGggd2lsbCBzaGFyZSB0aGUgc2FtZSAqL1wKICAgICAvKiBW
YXJpYWJsZUFjY2Vzc0RhdGEsIGFuZCB0aHVzIHdpbGwgc2hhcmUgcHJlZGljdGlvbnMuICovXAog
ICAgIG1hY3JvKEdldExvY2FsLCBOb2RlUmVzdWx0SlMpIFwKLSAgICBtYWNybyhTZXRMb2NhbCwg
MCkgXAorICAgIG1hY3JvKFNldExvY2FsLCBOb2RlRXhpdHNGb3J3YXJkKSBcCiAgICAgbWFjcm8o
UGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3Jv
KE5vcCwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oUGhpLCBOb2RlRG9lc05vdEV4aXQg
fCBOb2RlUmVsZXZhbnRUb09TUikgXApAQCAtODgsMTQgKzg4LDE0IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBCaXR3aXNlIG9wZXJhdG9ycyBjYWxsIFRvSW50MzIg
b24gdGhlaXIgb3BlcmFuZHMuICovXAogICAgIG1hY3JvKFZhbHVlVG9JbnQzMiwgTm9kZVJlc3Vs
dEludDMyKSBcCiAgICAgLyogVXNlZCB0byBib3ggdGhlIHJlc3VsdCBvZiBVUlNoaWZ0IG5vZGVz
IChyZXN1bHQgaGFzIHJhbmdlIDAuLjJeMzItMSkuICovXAotICAgIG1hY3JvKFVJbnQzMlRvTnVt
YmVyLCBOb2RlUmVzdWx0TnVtYmVyKSBcCisgICAgbWFjcm8oVUludDMyVG9OdW1iZXIsIE5vZGVS
ZXN1bHROdW1iZXIgfCBOb2RlRXhpdHNGb3J3YXJkKSBcCiAgICAgXAogICAgIC8qIFVzZWQgdG8g
Y2FzdCBrbm93biBpbnRlZ2VycyB0byBkb3VibGVzLCBzbyBhcyB0byBzZXBhcmF0ZSB0aGUgZG91
YmxlIGZvcm0gKi9cCiAgICAgLyogb2YgdGhlIHZhbHVlIGZyb20gdGhlIGludGVnZXIgZm9ybS4g
Ki9cCiAgICAgbWFjcm8oSW50MzJUb0RvdWJsZSwgTm9kZVJlc3VsdE51bWJlcikgXAotICAgIG1h
Y3JvKEZvcndhcmRJbnQzMlRvRG91YmxlLCBOb2RlUmVzdWx0TnVtYmVyKSBcCisgICAgbWFjcm8o
Rm9yd2FyZEludDMyVG9Eb3VibGUsIE5vZGVSZXN1bHROdW1iZXIgfCBOb2RlRXhpdHNGb3J3YXJk
KSBcCiAgICAgLyogVXNlZCB0byBzcGVjdWxhdGUgdGhhdCBhIGRvdWJsZSB2YWx1ZSBpcyBhY3R1
YWxseSBhbiBpbnRlZ2VyLiAqL1wKLSAgICBtYWNybyhEb3VibGVBc0ludDMyLCBOb2RlUmVzdWx0
SW50MzIpIFwKKyAgICBtYWNybyhEb3VibGVBc0ludDMyLCBOb2RlUmVzdWx0SW50MzIgfCBOb2Rl
RXhpdHNGb3J3YXJkKSBcCiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBhcml0aG1ldGljIG9wZXJh
dGlvbnMuICovXAogICAgIG1hY3JvKEFyaXRoQWRkLCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9kZU11
c3RHZW5lcmF0ZSkgXApAQCAtMTI2LDcgKzEyNiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICBtYWNybyhQdXRCeUlkRGlyZWN0LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhDaGVja1N0cnVjdHVyZSwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKENoZWNrRXhlY3V0YWJsZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAot
ICAgIG1hY3JvKEZvcndhcmRDaGVja1N0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAg
IG1hY3JvKEZvcndhcmRDaGVja1N0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVFeGl0
c0ZvcndhcmQpIFwKICAgICAvKiBUcmFuc2l0aW9uIHdhdGNocG9pbnRzIGFyZSBhIGNvbnRyYWN0
IGJldHdlZW4gdGhlIHBhcnR5IHNldHRpbmcgdGhlIHdhdGNocG9pbnQgKi9cCiAgICAgLyogYW5k
IHRoZSBydW50aW1lIHN5c3RlbSwgd2hlcmUgdGhlIHBhcnR5IHByb21pc2VzIHRoYXQgdGhlIGNo
aWxkIG9iamVjdCBvbmNlIGhhZCAqL1wKICAgICAvKiB0aGUgc3RydWN0dXJlIGJlaW5nIHdhdGNo
ZWQsIGFuZCB0aGUgcnVudGltZSBzeXN0ZW0gaW4gdHVybiBwcm9taXNlcyB0aGF0IHRoZSAqL1wK
QEAgLTEzOSw3ICsxMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAg
LyogdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHJlY2hlY2tlZCBk
dWUgdG8gc2lkZS1lZmZlY3RpbmcgKi9cCiAgICAgLyogKGNsb2JiZXJpbmcpIG9wZXJhdGlvbnMu
ICovXAogICAgIG1hY3JvKFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBOb2RlTXVzdEdl
bmVyYXRlKSBcCi0gICAgbWFjcm8oRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oRm9yd2FyZFN0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUV4aXRzRm9yd2FyZCkgXAogICAg
IG1hY3JvKFB1dFN0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFBoYW50
b21QdXRTdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAg
ICBtYWNybyhBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVE
b2VzTm90RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE0NDM0
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgwNCw3ICs4MDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlCiB9CiAKIHRlbXBsYXRlPGJvb2wgc3RyaWN0PgotR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwoRWRnZSBlZGdlLCBEYXRhRm9y
bWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKK0dQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKEVkZ2UgZWRnZSwgRGF0
YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQogewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkK
ICAgICBkYXRhTG9nRigiU3BlY0ludEAlZCAgICIsIGVkZ2UtPmluZGV4KCkpOwpAQCAtODE5LDcg
KzgxOSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICBz
d2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6
IHsKICAgICAgICAgaWYgKChlZGdlLT5oYXNDb25zdGFudCgpICYmICFpc0ludDMyQ29uc3RhbnQo
ZWRnZS5ub2RlKCkpKSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkg
ewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIDAsIGRpcmVjdGlvbik7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAg
ICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgIHJldHVy
biBhbGxvY2F0ZSgpOwogICAgICAgICB9CkBAIC04NzAsNyArODcwLDcgQEAgR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5n
cHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgaWYgKHR5cGUgJiB+U3Bl
Y0ludDMyKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyhncHIpLCBlZGdlLCBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGdwciwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9qaXQu
YnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlcikpOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBE
YXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgLy8gSWYgIXN0cmljdCB3ZSdyZSBkb25lLCBy
ZXR1cm4uCiAgICAgICAgIGlmICghc3RyaWN0KSB7CkBAIC05MjcsNyArOTI3LDcgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgIGNhc2UgRGF0YUZvcm1hdEJv
b2xlYW46CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgogICAgIGNhc2UgRGF0YUZvcm1hdEpT
Qm9vbGVhbjogewotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgZGlyZWN0aW9uKTsKKyAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAg
ICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgcmV0dXJuIGFsbG9j
YXRlKCk7CiAgICAgfQpAQCAtOTQxLDIwICs5NDEsMjAgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlSW50SQogICAgIH0KIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlSW50KEVkZ2UgZWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0LCBTcGVj
dWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVJbnQoRWRnZSBlZGdlLCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpCiB7Ci0gICAg
cmV0dXJuIGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbDxmYWxzZT4oZWRnZSwgcmV0dXJuRm9ybWF0
LCBkaXJlY3Rpb24pOworICAgIHJldHVybiBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWw8ZmFsc2U+
KGVkZ2UsIHJldHVybkZvcm1hdCk7CiB9CiAKIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUludFN0cmljdChFZGdlIGVkZ2UpCiB7CiAgICAgRGF0YUZvcm1hdCBtdXN0QmVEYXRh
Rm9ybWF0SW50ZWdlcjsKLSAgICBHUFJSZWcgcmVzdWx0ID0gZmlsbFNwZWN1bGF0ZUludEludGVy
bmFsPHRydWU+KGVkZ2UsIG11c3RCZURhdGFGb3JtYXRJbnRlZ2VyLCBCYWNrd2FyZFNwZWN1bGF0
aW9uKTsKKyAgICBHUFJSZWcgcmVzdWx0ID0gZmlsbFNwZWN1bGF0ZUludEludGVybmFsPHRydWU+
KGVkZ2UsIG11c3RCZURhdGFGb3JtYXRJbnRlZ2VyKTsKICAgICBSRUxFQVNFX0FTU0VSVChtdXN0
QmVEYXRhRm9ybWF0SW50ZWdlciA9PSBEYXRhRm9ybWF0SW50ZWdlcik7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKEVk
Z2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorRlBSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKEVkZ2UgZWRnZSkKIHsKICNpZiBERkdfRU5BQkxF
KERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0YoIlNwZWNEb3VibGVAJWQgICAiLCBlZGdlLT5p
bmRleCgpKTsKQEAgLTk5MCw3ICs5OTAsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVEb3ViCiAgICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwg
ZnByKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIDAsIGRpcmVjdGlvbik7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4
ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAgICAgICByZXR1
cm4gZnByQWxsb2NhdGUoKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEwMzMsNyArMTAzMyw3
IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAogICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6Ci0g
ICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCAwLCBkaXJlY3Rpb24pOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAgIHJldHVybiBmcHJB
bGxvY2F0ZSgpOwogCiAgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgpAQCAtMTA0Nyw3ICsxMDQ3
LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpOwogCiAgICAgICAgIGlmICh0eXBlICYgflNwZWNOdW1iZXIpCi0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGpzVmFsdWVHcHIpLCBlZGdlLCBtX2pp
dC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciksIGRpcmVjdGlvbik7CisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGpzVmFsdWVHcHIpLCBlZGdlLCBtX2ppdC5i
cmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlcikpOwogCiAgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVy
ZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCiAgICAgICAgIG1faml0Lm1v
dmUoanNWYWx1ZUdwciwgdGVtcEdwcik7CkBAIC0xMTEwLDcgKzExMTAsNyBAQCBGUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgfQogfQogCi1HUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJlY3Rp
b24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbChF
ZGdlIGVkZ2UpCiB7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgIGRhdGFMb2dG
KCJTcGVjQ2VsbEAlZCAgICIsIGVkZ2UtPmluZGV4KCkpOwpAQCAtMTEyNSw3ICsxMTI1LDcgQEAg
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgIHN3aXRjaCAoaW5m
by5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewogICAgICAg
ICBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRJbnRlZ2VyIHx8IGluZm8uc3Bp
bGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgZGlyZWN0
aW9uKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtMTEzOSw3ICsxMTM5LDcgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBncHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgZGlyZWN0aW9uKTsKKyAg
ICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCAwKTsKICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgIH0KICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKTsKQEAg
LTExNDgsNyArMTE0OCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNl
bGwKIAogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0
SlMpOwogICAgICAgICBpZiAodHlwZSAmIH5TcGVjQ2VsbCkKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNoVGVz
dDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rl
ciksIGRpcmVjdGlvbik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKGdwciksIGVkZ2UsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKICAgICAgICAgaW5mby5m
aWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgIHJl
dHVybiBncHI7CiAgICAgfQpAQCAtMTE2NCw3ICsxMTY0LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsK
ICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgaWYgKHR5cGUgJiB+U3BlY0NlbGwp
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciks
IGVkZ2UsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBtX2ppdC5icmFuY2hU
ZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKSk7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3Jt
YXRKU0NlbGwpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTExNzUsNyArMTE3NSw3
IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICBjYXNlIERh
dGFGb3JtYXREb3VibGU6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgogICAgIGNhc2Ug
RGF0YUZvcm1hdEJvb2xlYW46IHsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAsIGRpcmVjdGlvbik7CisgICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAw
KTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgfQogCkBAIC0xMTg4LDcgKzExODgs
NyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgfQogfQog
Ci1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKEVkZ2UgZWRnZSwg
U3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlQm9vbGVhbihFZGdlIGVkZ2UpCiB7CiAjaWYgREZHX0VOQUJMRShERUJVR19W
RVJCT1NFKQogICAgIGRhdGFMb2dGKCJTcGVjQm9vbEAlZCAgICIsIGVkZ2UtPmluZGV4KCkpOwpA
QCAtMTIwMiw3ICsxMjAyLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Qm9vbAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRh
Rm9ybWF0Tm9uZTogewogICAgICAgICBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3Jt
YXRJbnRlZ2VyIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7Ci0g
ICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgMCwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0
aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAgICAg
IHJldHVybiBhbGxvY2F0ZSgpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTIxNiw3ICsxMjE2
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICAg
ICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jvb2xl
YW4pOwogICAgICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgMCwgZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAgICAgIHJldHVy
biBncHI7CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5mby5zcGlsbEZvcm1h
dCgpICYgRGF0YUZvcm1hdEpTKTsKQEAgLTEyMjYsNyArMTIyNiw3IEBAIEdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9z
dHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgaWYgKHR5cGUgJiB+U3BlY0Jvb2xl
YW4pIHsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdw
ciwgSW52YWxpZEdQUlJlZyksIGRpcmVjdGlvbik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ss
IGdwciwgSW52YWxpZEdQUlJlZykpOwogICAgICAgICAgICAgbV9qaXQueG9yNjQoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKICAgICAgICAgfQog
ICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNCb29s
ZWFuKTsKQEAgLTEyNDUsNyArMTI0NSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUJvb2wKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgaWYgKHR5cGUg
JiB+U3BlY0Jvb2xlYW4pIHsKICAgICAgICAgICAgIG1faml0LnhvcjY0KFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIG1faml0LmJyYW5j
aFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0
aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZyksIGRpcmVjdGlvbik7CisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIG1faml0LmJy
YW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1
bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZykpOwogICAgICAgICAgICAgbV9qaXQueG9y
NjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsK
ICAgICAgICAgfQogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRh
Rm9ybWF0SlNCb29sZWFuKTsKQEAgLTEyNTgsNyArMTI1OCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAg
Y2FzZSBEYXRhRm9ybWF0SlNDZWxsOgogICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6IHsKLSAgICAg
ICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIDAsIGRpcmVjdGlvbik7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRl
KCk7CiAgICAgfQogICAgICAgICAKQEAgLTE5NzgsNyArMTk3OCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgCiAgICAgICAgIGlmIChub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKICAgICAgICAg
ICAgIGlmIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0
KCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpLCBGb3J3YXJkU3BlY3VsYXRpb24pOworICAgICAgICAgICAgICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKHZhbHVlLmZwcigpLCBKSVRDb21waWxlcjo6YWRk
cmVzc0Zvcihub2RlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7
CiAgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGUgdGhhdCBpdCdzIG5vIGxvbmdlciBuZWNlc3Nh
cnkgdG8gcmV0cmlldmUgdGhlIHZhbHVlIG9mCkBAIC0xOTkwLDE0ICsxOTkwLDE0IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgCiAgICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCktPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAoaXNJbnQzMlNw
ZWN1bGF0aW9uKHByZWRpY3RlZFR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCksIEZvcndhcmRTcGVjdWxhdGlv
bik7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUuZ3By
KCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKG5vZGUtPmxvY2FsKCkpKTsKICAgICAgICAgICAg
ICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2Rl
LT5sb2NhbCgpLCBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjaykpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9u
KHByZWRpY3RlZFR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
Y2VsbCh0aGlzLCBub2RlLT5jaGlsZDEoKSwgRm9yd2FyZFNwZWN1bGF0aW9uKTsKKyAgICAgICAg
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgICAgICAgICBHUFJSZWcgY2VsbEdQUiA9IGNlbGwuZ3ByKCk7CiAgICAgICAgICAg
ICAgICAgbV9qaXQuc3RvcmU2NChjZWxsR1BSLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2Rl
LT5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC0yMDA1LDcg
KzIwMDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNCb29s
ZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxh
dGVCb29sZWFuT3BlcmFuZCBib29sZWFuKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBGb3J3YXJkU3Bl
Y3VsYXRpb24pOworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIGJvb2xl
YW4odGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQo
Ym9vbGVhbi5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS0+bG9jYWwoKSkpOwog
ICAgICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICAgICAgICAgIHJlY29yZFNl
dExvY2FsKG5vZGUtPmxvY2FsKCksIFZhbHVlU291cmNlKEJvb2xlYW5JbkpTU3RhY2spKTsKQEAg
LTM4ODYsOCArMzg4Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICBjYXNlIEZvcndhcmRD
aGVja1N0cnVjdHVyZTogewotICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24g
PSBub2RlLT5vcCgpID09IEZvcndhcmRDaGVja1N0cnVjdHVyZSA/IEZvcndhcmRTcGVjdWxhdGlv
biA6IEJhY2t3YXJkU3BlY3VsYXRpb247Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS0+Y2hpbGQxKCksIGRpcmVjdGlvbik7CisgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAKICAgICAgICAg
QVNTRVJUKG5vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSk7CiAgICAgICAgIApAQCAtMzkwMyw4
ICszOTAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaFdlYWtQdHIoCiAgICAgICAgICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCwKICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFk
ZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCi0gICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZVNldCgpWzBdKSwKLSAgICAgICAgICAgICAgICBkaXJl
Y3Rpb24pOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmVTZXQoKVswXSkpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlz
KTsKICAgICAgICAgICAgIApAQCAtMzkxOCw4ICszOTE2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAg
ICAgICAgICAgICAgICBleGl0S2luZCwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZS5n
cHIoKSksIDAsCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoV2Vha1B0cigKLSAgICAgICAg
ICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIG5vZGUt
PnN0cnVjdHVyZVNldCgpLmxhc3QoKSksCi0gICAgICAgICAgICAgICAgZGlyZWN0aW9uKTsKKyAg
ICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCks
IG5vZGUtPnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgfQpAQCAtMzkzNywxNiArMzkzNCwxMyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIC8vIHdlJ2xs
IGp1c3QgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHdoZW4gYSB3YXRjaHBvaW50IGZpcmVzIHRoZW4g
dGhhdCdzCiAgICAgICAgIC8vIHF1aXRlIGEgaGludCBhbHJlYWR5LgogICAgICAgICAKLSAgICAg
ICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gbm9kZS0+b3AoKSA9PSBGb3J3YXJk
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQgPyBGb3J3YXJkU3BlY3VsYXRpb24gOiBCYWNr
d2FyZFNwZWN1bGF0aW9uOwotCiAgICAgICAgIG1faml0LmFkZFdlYWtSZWZlcmVuY2Uobm9kZS0+
c3RydWN0dXJlKCkpOwogICAgICAgICBub2RlLT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldh
dGNocG9pbnQoCiAgICAgICAgICAgICBzcGVjdWxhdGlvbldhdGNocG9pbnQoCi0gICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQgPyBCYWRXZWFrQ29u
c3RhbnRDYWNoZSA6IEJhZENhY2hlLAotICAgICAgICAgICAgICAgIGRpcmVjdGlvbikpOworICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFdlYWtKU0NvbnN0YW50ID8gQmFk
V2Vha0NvbnN0YW50Q2FjaGUgOiBCYWRDYWNoZSkpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAot
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIGRp
cmVjdGlvbik7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzT0sgPSBtX2ppdC5icmFuY2hQ
dHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhvcDEuZ3ByKCksIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG5vZGUtPnN0cnVjdHVyZSgp
KSk7CiAgICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICAgICAgICAgaXNPSy5saW5rKCZtX2pp
dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkocmV2aXNpb24gMTQ0MzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVKU0FycmF5CiAgICAgICAgICAgICBzdHJ1
Y3R1cmUsIG51bUVsZW1lbnRzKSkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9k
ZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291
cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBU
b0ZhaWwpCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47CkBAIC0x
MTMsMTMgKzExMywzMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4
CiAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1Zh
bHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Io
bm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6YmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2Ug
anNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
JiBqdW1wc1RvRmFpbCkKK3sKKyAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgIHJldHVy
bjsKKyAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwor
ICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKGp1bXBzVG9GYWlsKTsKKyAgICBtX2ppdC5jb2RlQmxv
Y2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0Lmdy
YXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJl
YW0tPnNpemUoKSkpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNr
KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKK3sKKyAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCisgICAgICAgIHJldHVybjsKKyAgICBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soa2luZCwg
anNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcFRvRmFpbCk7CisgICAgaWYgKG1fc3BlY3VsYXRpb25E
aXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKQorICAgICAgICBjb252ZXJ0TGFzdE9TUkV4
aXRUb0ZvcndhcmQoKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVj
ayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVz
ZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKIHsKICAgICBBU1NFUlQobV9pc0No
ZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2so
a2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwpOwogfQogCi1P
U1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4
aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSkKK09T
UkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OmJhY2t3YXJkU3BlY3VsYXRpb25D
aGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5v
ZGUpCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm4gT1NSRXhpdEp1
bXBQbGFjZWhvbGRlcigpOwpAQCAtMTMwLDE5ICsxNDgsMTkgQEAgT1NSRXhpdEp1bXBQbGFjZWhv
bGRlciBTcGVjdWxhdGl2ZUpJVDo6cwogICAgIHJldHVybiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVy
KGluZGV4KTsKIH0KIAotT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2Us
IEVkZ2Ugbm9kZVVzZSkKK09TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OmJh
Y2t3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFs
dWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSkKIHsKICAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1l
bnRUeXBlcyB8fCBtX2NhbkV4aXQpOwotICAgIHJldHVybiBzcGVjdWxhdGlvbkNoZWNrKGtpbmQs
IGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpKTsKKyAgICByZXR1cm4gYmFja3dhcmRTcGVj
dWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1Zh
bHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIGNvbnN0IE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAg
ICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9j
YW5FeGl0KTsKLSAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wc1RvRmFpbCk7Ci0gICAgbV9q
aXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNl
LCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRo
aXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKKyAgICBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soa2lu
ZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcHNUb0ZhaWwpOworICAgIGlmIChtX3NwZWN1bGF0
aW9uRGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKKyAgICAgICAgY29udmVydExhc3RP
U1JFeGl0VG9Gb3J3YXJkKCk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9u
Q2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5v
ZGVVc2UsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCkBAIC0x
NTEsNyArMTY5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAog
ICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCks
IGp1bXBzVG9GYWlsKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVj
ayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUs
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3Zl
cnkmIHJlY292ZXJ5KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRTcGVjdWxhdGlvbkNo
ZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9k
ZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNv
dmVyeSYgcmVjb3ZlcnkpCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1
cm47CkBAIC0xNjEsMjIgKzE3OSwyNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlv
bkNoZWNrKEV4CiAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChr
aW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCksIG1faml0LmNvZGVCbG9jaygp
LT5udW1iZXJPZlNwZWN1bGF0aW9uUmVjb3ZlcmllcygpKSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1Zh
bHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWws
IGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6YmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2Ug
anNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9G
YWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkKIHsKICAgICBBU1NFUlQo
bV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwotICAgIHNwZWN1bGF0aW9u
Q2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwsIHJl
Y292ZXJ5KTsKKyAgICBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJj
ZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNl
IGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0Zh
aWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5LCBTcGVjdWxhdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24pCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4
aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYg
cmVjb3ZlcnkpCiB7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBu
b2RlLCBqdW1wVG9GYWlsLCByZWNvdmVyeSk7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBGb3J3YXJk
U3BlY3VsYXRpb24pCisgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICByZXR1cm47Cisg
ICAgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGUsIGp1
bXBUb0ZhaWwsIHJlY292ZXJ5KTsKKyAgICBpZiAobV9zcGVjdWxhdGlvbkRpcmVjdGlvbiA9PSBG
b3J3YXJkU3BlY3VsYXRpb24pCiAgICAgICAgIGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCgp
OwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBlZGdlLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSwg
U3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2Us
IEVkZ2UgZWRnZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3Vs
YXRpb25SZWNvdmVyeSYgcmVjb3ZlcnkpCiB7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBq
c1ZhbHVlU291cmNlLCBlZGdlLm5vZGUoKSwganVtcFRvRmFpbCwgcmVjb3ZlcnksIGRpcmVjdGlv
bik7CisgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBlZGdlLm5vZGUo
KSwganVtcFRvRmFpbCwgcmVjb3ZlcnkpOwogfQogCiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50
KiBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25XYXRjaHBvaW50KEV4aXRLaW5kIGtpbmQsIEpT
VmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSkKQEAgLTE5Miw2ICsyMTIsOCBA
QCBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBTcGVjdWxhdGl2ZUpJCiAgICAgICAgICAgICB0
aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSkpOwogICAgIGV4aXQubV93YXRjaHBvaW50SW5kZXggPSBt
X2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kV2F0Y2hwb2ludCgKICAgICAgICAgSnVtcFJlcGxhY2Vt
ZW50V2F0Y2hwb2ludChtX2ppdC53YXRjaHBvaW50TGFiZWwoKSkpOworICAgIGlmIChtX3NwZWN1
bGF0aW9uRGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKKyAgICAgICAgY29udmVydExh
c3RPU1JFeGl0VG9Gb3J3YXJkKCk7CiAgICAgcmV0dXJuICZtX2ppdC5jb2RlQmxvY2soKS0+d2F0
Y2hwb2ludChleGl0Lm1fd2F0Y2hwb2ludEluZGV4KTsKIH0KIApAQCAtMjY4LDQ4ICsyOTAsMjAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVydExhc3RPU1JFeGl0VAogICAgICAgICBuZXcg
VmFsdWVSZWNvdmVyeU92ZXJyaWRlKHNldExvY2FsLT5sb2NhbCgpLCB2YWx1ZVJlY292ZXJ5KSk7
CiB9CiAKLUp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIFNwZWN1bGF0aXZlSklUOjpmb3J3YXJk
U3BlY3VsYXRpb25XYXRjaHBvaW50KEV4aXRLaW5kIGtpbmQpCi17Ci0gICAgSnVtcFJlcGxhY2Vt
ZW50V2F0Y2hwb2ludCogcmVzdWx0ID0gc3BlY3VsYXRpb25XYXRjaHBvaW50KGtpbmQpOwotICAg
IGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LUp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbldh
dGNocG9pbnQoRXhpdEtpbmQga2luZCwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uKQot
ewotICAgIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIHJlc3VsdCA9IHNwZWN1bGF0aW9uV2F0
Y2hwb2ludChraW5kKTsKLSAgICBpZiAoZGlyZWN0aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikK
LSAgICAgICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJl
Y292ZXJ5KQogewogICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2Fu
RXhpdCk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlLCBq
dW1wVG9GYWlsKTsKKyAgICBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNv
dXJjZSwgbm9kZSwganVtcFRvRmFpbCk7CiAgICAgY29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJk
KHZhbHVlUmVjb3ZlcnkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpmb3J3YXJkU3BlY3Vs
YXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5v
ZGUqIG5vZGUsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwsIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCiB7CiAgICAgQVNTRVJUKG1faXNDaGVj
a2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKGtp
bmQsIGpzVmFsdWVTb3VyY2UsIG5vZGUsIGp1bXBzVG9GYWlsKTsKKyAgICBiYWNrd2FyZFNwZWN1
bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcHNUb0ZhaWwpOwogICAg
IGNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZCh2YWx1ZVJlY292ZXJ5KTsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291
cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBU
b0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBpZiAoZGlyZWN0
aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKLSAgICAgICAgZm9yd2FyZFNwZWN1bGF0aW9uQ2hl
Y2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZSwganVtcFRvRmFpbCk7Ci0gICAgZWxzZQotICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGUsIGp1bXBUb0Zh
aWwpOwotfQotCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBlZGdlLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBqdW1wVG9GYWlsLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCi17
Ci0gICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBlZGdlLm5vZGUoKSwg
anVtcFRvRmFpbCwgZGlyZWN0aW9uKTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWlu
YXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1
ZVJlZ3MsIE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlw
ZXMgfHwgbV9jYW5FeGl0KTsKQEAgLTMyOCwzOCArMzIyLDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXYKICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihraW5kLCBqc1ZhbHVlUmVncywgbm9kZVVzZS5ub2RlKCkpOwogfQogCi12b2lkIFNwZWN1bGF0
aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1Zh
bHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZSogbm9kZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGly
ZWN0aW9uKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFja3dhcmRUeXBlQ2hlY2soSlNWYWx1ZVNv
dXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdo
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQogewotICAgIEFTU0VSVChtX2lzQ2hl
Y2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19W
RVJCT1NFKQotICAgIGRhdGFMb2dGKCJTcGVjdWxhdGl2ZUpJVCB3YXMgdGVybWluYXRlZC5cbiIp
OwotI2VuZGlmCi0gICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICByZXR1cm47Ci0gICAg
c3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlUmVncywgbm9kZSwgbV9qaXQuanVtcCgpLCBk
aXJlY3Rpb24pOwotICAgIG1fY29tcGlsZU9rYXkgPSBmYWxzZTsKKyAgICBBU1NFUlQobmVlZHNU
eXBlQ2hlY2soZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoKSk7CisgICAgbV9zdGF0ZS5mb3JOb2Rl
KGVkZ2UpLmZpbHRlcih0eXBlc1Bhc3NlZFRocm91Z2gpOworICAgIGJhY2t3YXJkU3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBzb3VyY2UsIGVkZ2Uubm9kZSgpLCBqdW1wVG9GYWlsKTsKIH0KIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6dHlwZUNoZWNrKEpTVmFsdWVTb3VyY2Ugc291cmNlLCBFZGdl
IGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAganVtcFRvRmFpbCkKIHsKLSAgICBBU1NFUlQobmVlZHNUeXBlQ2hlY2soZWRnZSwgdHlw
ZXNQYXNzZWRUaHJvdWdoKSk7Ci0gICAgbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLmZpbHRlcih0eXBl
c1Bhc3NlZFRocm91Z2gpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgc291cmNlLCBl
ZGdlLCBqdW1wVG9GYWlsKTsKKyAgICBiYWNrd2FyZFR5cGVDaGVjayhzb3VyY2UsIGVkZ2UsIHR5
cGVzUGFzc2VkVGhyb3VnaCwganVtcFRvRmFpbCk7CisgICAgaWYgKG1fc3BlY3VsYXRpb25EaXJl
Y3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKQorICAgICAgICBjb252ZXJ0TGFzdE9TUkV4aXRU
b0ZvcndhcmQoKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFR5cGVDaGVjayhK
U1ZhbHVlU291cmNlIHNvdXJjZSwgRWRnZSBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3Nl
ZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCiB7Ci0gICAgdHlwZUNoZWNrKHNvdXJjZSwgZWRnZSwgdHlw
ZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9GYWlsKTsKKyAgICBiYWNrd2FyZFR5cGVDaGVjayhzb3Vy
Y2UsIGVkZ2UsIHR5cGVzUGFzc2VkVGhyb3VnaCwganVtcFRvRmFpbCk7CiAgICAgY29udmVydExh
c3RPU1JFeGl0VG9Gb3J3YXJkKHZhbHVlUmVjb3ZlcnkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZl
SklUOjp0eXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSBzb3VyY2UsIEVkZ2UgZWRnZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWls
LCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAgdHlwZUNoZWNrKHNvdXJj
ZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9GYWlsKTsKLSAgICBpZiAoZGlyZWN0
aW9uID09IEZvcndhcmRTcGVjdWxhdGlvbikKLSAgICAgICAgY29udmVydExhc3RPU1JFeGl0VG9G
b3J3YXJkKCk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFkZFNsb3dQYXRoR2VuZXJhdG9y
KFBhc3NPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoR2VuZXJhdG9yKQogewogICAg
IG1fc2xvd1BhdGhHZW5lcmF0b3JzLmFwcGVuZChzbG93UGF0aEdlbmVyYXRvci5sZWFrUHRyKCkp
OwpAQCAtOTE4LDcgKzkwMCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2Uo
RWRnZSAKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gTXVzdCBiZSBhIGNlbGw7IGZp
bGwgaXQgYXMgYSBjZWxsIGFuZCB0aGVuIHJldHVybiB0aGUgcG9pbnRlci4KLSAgICAgICAgcmV0
dXJuIGZpbGxTcGVjdWxhdGVDZWxsKGVkZ2UsIEJhY2t3YXJkU3BlY3VsYXRpb24pOworICAgICAg
ICByZXR1cm4gZmlsbFNwZWN1bGF0ZUNlbGwoZWRnZSk7CiAgICAgfQogICAgICAgICAKICAgICBj
YXNlIERhdGFGb3JtYXRTdG9yYWdlOiB7CkBAIC05MjgsNyArOTEwLDcgQEAgR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3RvcmFnZShFZGdlIAogICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIGZpbGxTcGVjdWxhdGVDZWxsKGVkZ2UsIEJhY2t3YXJkU3BlY3Vs
YXRpb24pOworICAgICAgICByZXR1cm4gZmlsbFNwZWN1bGF0ZUNlbGwoZWRnZSk7CiAgICAgfQog
fQogCkBAIC0xNzY2LDYgKzE3NDgsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJh
c2ljQmxvY2smCiAgICAgICAgICAgICBtX2ppdC54b3JQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW0zMihtX2N1cnJlbnROb2RlLT5pbmRleCgpKSwgR1BSSW5mbzo6cmVnVDApOwogI2VuZGlmCiAg
ICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fc3BlY3VsYXRpb25EaXJlY3Rpb24gPSAobV9jdXJyZW50Tm9kZS0+ZmxhZ3MoKSAmIE5vZGVF
eGl0c0ZvcndhcmQpID8gRm9yd2FyZFNwZWN1bGF0aW9uIDogQmFja3dhcmRTcGVjdWxhdGlvbjsK
KyAgICAgICAgICAgIAogICAgICAgICAgICAgY29tcGlsZShtX2N1cnJlbnROb2RlKTsKICAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkgewogICAgICAgICAgICAgICAgIG1fY29tcGlsZU9r
YXkgPSB0cnVlOwpAQCAtMTgyNSw2ICsxODEwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hl
Y2tBcmd1bWVudFR5cGVzKAogewogICAgIEFTU0VSVCghbV9jdXJyZW50Tm9kZSk7CiAgICAgbV9p
c0NoZWNraW5nQXJndW1lbnRUeXBlcyA9IHRydWU7CisgICAgbV9zcGVjdWxhdGlvbkRpcmVjdGlv
biA9IEJhY2t3YXJkU3BlY3VsYXRpb247CiAgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0gQ29kZU9y
aWdpbigwKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgp
OyArK2kpCkBAIC0yMTYyLDcgKzIxNDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
VmFsdWVUb0ludDMyCiAgICAgY2FzZSBOb3RDZWxsVXNlOiB7CiAgICAgICAgIHN3aXRjaCAoY2hl
Y2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CiAgICAg
ICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZEludGVnZXI6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgQmFja3dhcmRTcGVjdWxh
dGlvbiwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAg
ICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAg
ICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIG9wMS5mb3JtYXQoKSk7CkBAIC0y
MTcwLDcgKzIxNTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMy
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVyYW5kRG91YmxlOiB7CiAgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIEJhY2t3YXJkU3BlY3VsYXRp
b24sIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uKTsKICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBvcDEuZnByKCk7CiAgICAgICAgICAgICBH
UFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOwogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90VHJ1bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMy
KGZwciwgZ3ByLCBKSVRDb21waWxlcjo6QnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCk7CkBAIC0yMzc2
LDcgKzIzNjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50MzJUb0RvdWJsCiAg
ICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7IC8vIFRo
aXMgc2hvdWxkIGhhdmUgYmVlbiBjb25zdGFudCBmb2xkZWQuCiAgICAgCiAgICAgaWYgKGlzSW50
MzJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsK
LSAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgp
LCBCYWNrd2FyZFNwZWN1bGF0aW9uLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAg
ICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
CiAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMS5ncHIoKSwgcmVzdWx0LmZw
cigpKTsKICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CkBAIC0yNDAz
LDcgKzIzODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW50MzJUb0RvdWJsCiAg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBv
cDFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciksCiAgICAgICAgICAgICAgICAg
VmFsdWVSZWNvdmVyeTo6aW5HUFIob3AxR1BSLCBEYXRhRm9ybWF0SlMpKTsKICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHR5cGVDaGVjaygKKyAgICAgICAgICAgIGJhY2t3YXJkVHlwZUNo
ZWNrKAogICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgp
LCBTcGVjTnVtYmVyLAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fz
c2VtYmxlcjo6WmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsK
ICAgICAgICAgfQpAQCAtMjQzNCw3ICsyNDIwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUludDMyVG9Eb3VibAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxv
d2VzdFRhZykpLAogICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluUGFpcihvcDFUYWdH
UFIsIG9wMVBheWxvYWRHUFIpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHR5cGVD
aGVjaygKKyAgICAgICAgICAgIGJhY2t3YXJkVHlwZUNoZWNrKAogICAgICAgICAgICAgICAgIEpT
VmFsdWVSZWdzKG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVj
TnVtYmVyLAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykp
KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTQ0MzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTUsMTEgKzI5NSwx
MSBAQCBwdWJsaWM6CiAKICAgICAvLyBDYWxsZWQgYnkgdGhlIHNwZWN1bGF0aXZlIG9wZXJhbmQg
dHlwZXMsIGJlbG93LCB0byBmaWxsIG9wZXJhbmQgdG8KICAgICAvLyBtYWNoaW5lIHJlZ2lzdGVy
cywgaW1wbGljaXRseSBnZW5lcmF0aW5nIHNwZWN1bGF0aW9uIGNoZWNrcyBhcyBuZWVkZWQuCi0g
ICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVJbnQoRWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0
LCBTcGVjdWxhdGlvbkRpcmVjdGlvbik7CisgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVJbnQoRWRn
ZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUlu
dFN0cmljdChFZGdlKTsKLSAgICBGUFJSZWcgZmlsbFNwZWN1bGF0ZURvdWJsZShFZGdlLCBTcGVj
dWxhdGlvbkRpcmVjdGlvbik7Ci0gICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVDZWxsKEVkZ2UsIFNw
ZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUJvb2xlYW4oRWRn
ZSwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOworICAgIEZQUlJlZyBmaWxsU3BlY3VsYXRlRG91Ymxl
KEVkZ2UpOworICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlQ2VsbChFZGdlKTsKKyAgICBHUFJSZWcg
ZmlsbFNwZWN1bGF0ZUJvb2xlYW4oRWRnZSk7CiAgICAgR2VuZXJhdGVkT3BlcmFuZFR5cGUgY2hl
Y2tHZW5lcmF0ZWRUeXBlRm9yVG9JbnQzMihOb2RlKik7CiAKICAgICB2b2lkIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKFBhc3NPd25QdHI8U2xvd1BhdGhHZW5lcmF0b3I+KTsKQEAgLTIxNDAsMTkgKzIx
NDAsMjMgQEAgcHVibGljOgogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBKSVRDb21waWxl
cjo6SnVtcCBjb252ZXJ0VG9Eb3VibGUoSlNWYWx1ZU9wZXJhbmQmLCBGUFJSZWcgcmVzdWx0KTsK
ICNlbmRpZgorICAgIAorICAgIC8vIEFkZCBhIGJhY2t3YXJkIHNwZWN1bGF0aW9uIGNoZWNrLgor
ICAgIHZvaWQgYmFja3dhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNl
LCBOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCk7CisgICAgdm9pZCBiYWNr
d2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBjb25z
dCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKTsKIAogICAgIC8vIEFkZCBh
IHNwZWN1bGF0aW9uIGNoZWNrIHdpdGhvdXQgYWRkaXRpb25hbCByZWNvdmVyeS4KICAgICB2b2lk
IHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKTsKICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhp
dEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0Zh
aWwpOwogICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9uIGNoZWNrIHdpdGhvdXQgYWRkaXRpb25hbCBy
ZWNvdmVyeSwgYW5kIHdpdGggYSBwcm9taXNlIHRvIHN1cHBseSBhIGp1bXAgbGF0ZXIuCi0gICAg
T1NSRXhpdEp1bXBQbGFjZWhvbGRlciBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVl
U291cmNlLCBOb2RlKik7Ci0gICAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBzcGVjdWxhdGlvbkNo
ZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlKTsKKyAgICBPU1JFeGl0SnVtcFBsYWNl
aG9sZGVyIGJhY2t3YXJkU3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwg
Tm9kZSopOworICAgIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgYmFja3dhcmRTcGVjdWxhdGlvbkNo
ZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlKTsKICAgICAvLyBBZGQgYSBzZXQgb2Yg
c3BlY3VsYXRpb24gY2hlY2tzIHdpdGhvdXQgYWRkaXRpb25hbCByZWNvdmVyeS4KICAgICB2b2lk
IHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBjb25zdCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKTsKICAgICB2b2lkIHNwZWN1bGF0
aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIGNvbnN0IE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpOwogICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9uIGNo
ZWNrIHdpdGggYWRkaXRpb25hbCByZWNvdmVyeS4KLSAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2so
RXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1w
VG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jik7Ci0gICAgdm9pZCBzcGVjdWxhdGlv
bkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jik7CisgICAgdm9pZCBiYWNr
d2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jik7
CisgICAgdm9pZCBiYWNrd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3Vy
Y2UsIEVkZ2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0
aW9uUmVjb3ZlcnkmKTsKICAgICAvLyBVc2UgdGhpcyBsaWtlIHlvdSB3b3VsZCB1c2Ugc3BlY3Vs
YXRpb25DaGVjaygpLCBleGNlcHQgdGhhdCB5b3UgZG9uJ3QgcGFzcyBpdCBhIGp1bXAKICAgICAv
LyAoYmVjYXVzZSB5b3UgZG9uJ3QgaGF2ZSB0byBleGVjdXRlIGEgYnJhbmNoOyB0aGF0J3Mga2lu
ZCBvZiB0aGUgd2hvbGUgcG9pbnQpLCBhbmQgeW91CiAgICAgLy8gbXVzdCByZWdpc3RlciB0aGUg
cmV0dXJuZWQgV2F0Y2hwb2ludCB3aXRoIHNvbWV0aGluZyByZWxldmFudC4gSW4gZ2VuZXJhbCwg
dGhpcyBzaG91bGQKQEAgLTIxNzEsMjQgKzIxNzUsMTcgQEAgcHVibGljOgogICAgIC8vIHRoYXQg
eW91J3ZlIGVuc3VyZWQgdGhhdCB0aGVyZSBleGlzdHMgYSBNb3ZIaW50IHByaW9yIHRvIHlvdXIg
dXNlIG9mIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKCkuCiAgICAgdm9pZCBmb3J3YXJkU3BlY3Vs
YXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmID0gVmFsdWVSZWNvdmVyeSgp
KTsKICAgICB2b2lkIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291
cmNlLCBOb2RlKiwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCwg
Y29uc3QgVmFsdWVSZWNvdmVyeSYgPSBWYWx1ZVJlY292ZXJ5KCkpOwotICAgIHZvaWQgc3BlY3Vs
YXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTm9kZSosIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICB2b2lkIHNwZWN1
bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIEVkZ2UsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBUb0ZhaWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICB2b2lkIHNwZWN1
bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiwgU3BlY3VsYXRp
b25EaXJlY3Rpb24pOwotICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCwgSlNWYWx1
ZVNvdXJjZSwgRWRnZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3Bl
Y3VsYXRpb25SZWNvdmVyeSYsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICB2b2lkIHNwZWN1
bGF0aW9uQ2hlY2soRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE5vZGUqLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jik7CisgICAgdm9p
ZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBFZGdlLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5Jik7CiAg
ICAgLy8gQ2FsbGVkIHdoZW4gd2Ugc3RhdGljYWxseSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0
aW9uIHdpbGwgZmFpbC4KICAgICB2b2lkIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4
aXRLaW5kLCBKU1ZhbHVlUmVncywgTm9kZSopOwogICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRp
dmVFeGVjdXRpb24oRXhpdEtpbmQsIEpTVmFsdWVSZWdzLCBFZGdlKTsKLSAgICB2b2lkIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kLCBKU1ZhbHVlUmVncywgTm9kZSosIFNw
ZWN1bGF0aW9uRGlyZWN0aW9uKTsKLSAgICAvLyBJc3N1ZSBhIGZvcndhcmQgc3BlY3VsYXRpb24g
d2F0Y2hwb2ludCwgd2hpY2ggd2lsbCBleGl0IHRvIHRoZSBuZXh0IGluc3RydWN0aW9uIHJhdGhl
cgotICAgIC8vIHRoYW4gdGhlIGN1cnJlbnQgb25lLgotICAgIEp1bXBSZXBsYWNlbWVudFdhdGNo
cG9pbnQqIGZvcndhcmRTcGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtpbmQgPSBVbmNvdW50YWJs
ZVdhdGNocG9pbnQpOwotICAgIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIHNwZWN1bGF0aW9u
V2F0Y2hwb2ludChFeGl0S2luZCwgU3BlY3VsYXRpb25EaXJlY3Rpb24pOwogICAgIAogICAgIC8v
IEhlbHBlcnMgZm9yIHBlcmZvcm1pbmcgdHlwZSBjaGVja3Mgb24gYW4gZWRnZSBzdG9yZWQgaW4g
dGhlIGdpdmVuIHJlZ2lzdGVycy4KICAgICBib29sIG5lZWRzVHlwZUNoZWNrKEVkZ2UgZWRnZSwg
U3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoKSB7IHJldHVybiBtX3N0YXRlLmZvck5v
ZGUoZWRnZSkubV90eXBlICYgfnR5cGVzUGFzc2VkVGhyb3VnaDsgfQorICAgIHZvaWQgYmFja3dh
cmRUeXBlQ2hlY2soSlNWYWx1ZVNvdXJjZSwgRWRnZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNz
ZWRUaHJvdWdoLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKTsKICAgICB2b2lkIHR5
cGVDaGVjayhKU1ZhbHVlU291cmNlLCBFZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRo
cm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpOwogICAgIHZvaWQgZm9yd2Fy
ZFR5cGVDaGVjayhKU1ZhbHVlU291cmNlLCBFZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3Nl
ZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmKTsKLSAgICB2b2lkIHR5cGVDaGVjayhKU1ZhbHVlU291cmNlLCBFZGdlLCBTcGVjdWxh
dGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0Zh
aWwsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKIAogICAgIHZvaWQgc3BlY3VsYXRlSW50MzIoRWRn
ZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIoRWRnZSk7CkBAIC0yMjExLDcgKzIyMDgsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBhcnJheWlmeShOb2RlKik7CiAgICAgCiAgICAgdGVtcGxhdGU8
Ym9vbCBzdHJpY3Q+Ci0gICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbChFZGdlLCBE
YXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQsIFNwZWN1bGF0aW9uRGlyZWN0aW9uKTsKKyAgICBHUFJS
ZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKEVkZ2UsIERhdGFGb3JtYXQmIHJldHVybkZvcm1h
dCk7CiAgICAgCiAgICAgLy8gSXQgaXMgcG9zc2libGUsIGR1cmluZyBzcGVjdWxhdGl2ZSBnZW5l
cmF0aW9uLCB0byByZWFjaCBhIHNpdHVhdGlvbiBpbiB3aGljaCB3ZQogICAgIC8vIGNhbiBzdGF0
aWNhbGx5IGRldGVybWluZSBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbCAoZm9yIGV4YW1wbGUsIHdo
ZW4gdHdvIG5vZGVzCkBAIC0yMjYxLDYgKzIyNTgsNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGN1
cnJlbnQgbm9kZSBiZWluZyBnZW5lcmF0ZWQuCiAgICAgQmxvY2tJbmRleCBtX2Jsb2NrOwogICAg
IE5vZGUqIG1fY3VycmVudE5vZGU7CisgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9zcGVjdWxh
dGlvbkRpcmVjdGlvbjsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgYm9vbCBtX2NhbkV4aXQ7
CiAjZW5kaWYKQEAgLTI2NzMsMTQgKzI2NzEsMTMgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgewogcHVibGljOgotICAgIGV4cGxpY2l0IFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgU3BlY3VsYXRpb25EaXJl
Y3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbiwgT3BlcmFuZFNwZWN1bGF0aW9u
TW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQorICAgIGV4cGxpY2l0IFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSwgT3Bl
cmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQog
ICAgICAgICA6IG1faml0KGppdCkKICAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBt
X2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBt
X2Zvcm1hdChEYXRhRm9ybWF0Tm9uZSkKICNlbmRpZgotICAgICAgICAsIG1fZGlyZWN0aW9uKGRp
cmVjdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2ppdCk7CiAgICAgICAgIEFTU0VSVF9V
TlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNl
S2luZCgpID09IEludDMyVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duSW50MzJVc2UpKTsK
QEAgLTI3MTQsNyArMjcxMSw3IEBAIHB1YmxpYzoKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CiAg
ICAgICAgIGlmIChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAg
bV9ncHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0ZUludChlZGdlKCksIG1fZm9ybWF0
LCBtX2RpcmVjdGlvbik7CisgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxs
U3BlY3VsYXRlSW50KGVkZ2UoKSwgbV9mb3JtYXQpOwogICAgICAgICByZXR1cm4gbV9ncHJPcklu
dmFsaWQ7CiAgICAgfQogICAgIApAQCAtMjcyOCw3ICsyNzI1LDYgQEAgcHJpdmF0ZToKICAgICBF
ZGdlIG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiAgICAgRGF0YUZvcm1hdCBt
X2Zvcm1hdDsKLSAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIH07CiAKIGNs
YXNzIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCB7CkBAIC0yNzgwLDExICsyNzc2LDEwIEBA
IHByaXZhdGU6CiAKIGNsYXNzIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgewogcHVibGljOgotICAg
IGV4cGxpY2l0IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRn
ZSBlZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0
aW9uLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3Vs
YXRpb24pCisgICAgZXhwbGljaXQgU3BlY3VsYXRlRG91YmxlT3BlcmFuZChTcGVjdWxhdGl2ZUpJ
VCogaml0LCBFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRp
Y09wZXJhbmRTcGVjdWxhdGlvbikKICAgICAgICAgOiBtX2ppdChqaXQpCiAgICAgICAgICwgbV9l
ZGdlKGVkZ2UpCiAgICAgICAgICwgbV9mcHJPckludmFsaWQoSW52YWxpZEZQUlJlZykKLSAgICAg
ICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgewogICAgICAgICBBU1NFUlQobV9qaXQp
OwogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9PSBOdW1iZXJVc2UgfHwgZWRnZS51c2VLaW5kKCkg
PT0gS25vd25OdW1iZXJVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gUmVhbE51bWJlclVzZSkpOwpA
QCAtMjgxMSw3ICsyODA2LDcgQEAgcHVibGljOgogICAgIEZQUlJlZyBmcHIoKQogICAgIHsKICAg
ICAgICAgaWYgKG1fZnByT3JJbnZhbGlkID09IEludmFsaWRGUFJSZWcpCi0gICAgICAgICAgICBt
X2Zwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlRG91YmxlKGVkZ2UoKSwgbV9kaXJl
Y3Rpb24pOworICAgICAgICAgICAgbV9mcHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbFNwZWN1bGF0
ZURvdWJsZShlZGdlKCkpOwogICAgICAgICByZXR1cm4gbV9mcHJPckludmFsaWQ7CiAgICAgfQog
ICAgIApAQCAtMjgyNCwxNiArMjgxOSwxNCBAQCBwcml2YXRlOgogICAgIFNwZWN1bGF0aXZlSklU
KiBtX2ppdDsKICAgICBFZGdlIG1fZWRnZTsKICAgICBGUFJSZWcgbV9mcHJPckludmFsaWQ7Ci0g
ICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9OwogCiBjbGFzcyBTcGVjdWxh
dGVDZWxsT3BlcmFuZCB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBk
aXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1v
ZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCisgICAgZXhwbGljaXQgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3Vs
YXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgICAgIDog
bV9qaXQoaml0KQogICAgICAgICAsIG1fZWRnZShlZGdlKQogICAgICAgICAsIG1fZ3ByT3JJbnZh
bGlkKEludmFsaWRHUFJSZWcpCi0gICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAg
IHsKICAgICAgICAgQVNTRVJUKG1faml0KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBt
b2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCAoZWRnZS51c2VLaW5kKCkgPT0gQ2Vs
bFVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkNlbGxVc2UgfHwgZWRnZS51c2VLaW5kKCkg
PT0gT2JqZWN0VXNlIHx8IGVkZ2UudXNlS2luZCgpID09IFN0cmluZ1VzZSkpOwpAQCAtMjg2MCw3
ICsyODUzLDcgQEAgcHVibGljOgogICAgIEdQUlJlZyBncHIoKQogICAgIHsKICAgICAgICAgaWYg
KG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52
YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlQ2VsbChlZGdlKCksIG1fZGlyZWN0aW9uKTsKKyAg
ICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTcGVjdWxhdGVDZWxsKGVkZ2Uo
KSk7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CiAgICAgCkBAIC0yODcz
LDE2ICsyODY2LDE0IEBAIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OwogICAg
IEVkZ2UgbV9lZGdlOwogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKLSAgICBTcGVjdWxhdGlv
bkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIH07CiAKIGNsYXNzIFNwZWN1bGF0ZUJvb2xlYW5PcGVy
YW5kIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZChTcGVj
dWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlv
biA9IEJhY2t3YXJkU3BlY3VsYXRpb24sIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1
dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKKyAgICBleHBsaWNpdCBTcGVjdWxhdGVCb29sZWFu
T3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlv
bk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAgICAgICAgOiBtX2pp
dChqaXQpCiAgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQo
SW52YWxpZEdQUlJlZykKLSAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgewog
ICAgICAgICBBU1NFUlQobV9qaXQpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUg
PT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IEJvb2xlYW5V
c2UpOwpAQCAtMjkwOSw3ICsyOTAwLDcgQEAgcHVibGljOgogICAgIEdQUlJlZyBncHIoKQogICAg
IHsKICAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcpCi0gICAgICAg
ICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3BlY3VsYXRlQm9vbGVhbihlZGdlKCks
IG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxT
cGVjdWxhdGVCb29sZWFuKGVkZ2UoKSk7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsK
ICAgICB9CiAgICAgCkBAIC0yOTIyLDcgKzI5MTMsNiBAQCBwcml2YXRlOgogICAgIFNwZWN1bGF0
aXZlSklUKiBtX2ppdDsKICAgICBFZGdlIG1fZWRnZTsKICAgICBHUFJSZWcgbV9ncHJPckludmFs
aWQ7Ci0gICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9OwogCiAjZGVmaW5l
IERGR19UWVBFX0NIRUNLKHNvdXJjZSwgZWRnZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBqdW1wVG9G
YWlsKSBkbyB7IFwK
</data>
<flag name="review"
          id="211563"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>