<?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>67378</bug_id>
          
          <creation_ts>2011-09-01 01:59:54 -0700</creation_ts>
          <short_desc>De-virtualize recalcStyle()</short_desc>
          <delta_ts>2011-09-02 06:05:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (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></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>dglazkov</cc>
    
    <cc>hyatt</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>460329</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-01 01:59:54 -0700</bug_when>
    <thetext>Element::recalcStyle() does not need to be virtual, there are very few legit overrides. This will also make it possible to de-recursify it later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460348</commentid>
    <comment_count>1</comment_count>
      <attachid>105930</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-01 02:49:02 -0700</bug_when>
    <thetext>Created attachment 105930
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460496</commentid>
    <comment_count>2</comment_count>
      <attachid>105930</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-09-01 08:57:59 -0700</bug_when>
    <thetext>Comment on attachment 105930
patch

this looks glorious. Your change highlights the greater problem of hacks around style recalculation. Adding those extra methods (and stealing a bit) from Node.h is a great motivator to fix this problem for realz. But... why are the EWS chipmunks so purple?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461094</commentid>
    <comment_count>3</comment_count>
      <attachid>106105</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-02 02:02:41 -0700</bug_when>
    <thetext>Created attachment 106105
tot patch for bots to chew</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461096</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-02 02:05:47 -0700</bug_when>
    <thetext>Attachment 106105 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/svg/SVGUseElement.h:67:  The parameter name &quot;change&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/svg/SVGUseElement.h:68:  The parameter name &quot;change&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461110</commentid>
    <comment_count>5</comment_count>
      <attachid>106105</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-02 02:50:32 -0700</bug_when>
    <thetext>Comment on attachment 106105
tot patch for bots to chew

Attachment 106105 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9582601

New failing tests:
svg/batik/text/textStyles.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461154</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-02 04:19:22 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/94406</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461155</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-02 04:19:56 -0700</bug_when>
    <thetext>Couldn&apos;t see the bot reported test failure locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461181</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-02 06:05:24 -0700</bug_when>
    <thetext>Folloup in bug 67480</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105930</attachid>
            <date>2011-09-01 02:49:02 -0700</date>
            <delta_ts>2011-09-02 02:02:41 -0700</delta_ts>
            <desc>patch</desc>
            <filename>devirtualize-recalcstyle-2.patch</filename>
            <type>text/plain</type>
            <size>26274</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0MjgwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTEtMDktMDEgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIERlLXZpcnR1YWxpemUgcmVjYWxj
U3R5bGUoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjczNzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBF
bGVtZW50OjpyZWNhbGNTdHlsZSgpIGRvZXMgbm90IG5lZWQgdG8gYmUgdmlydHVhbCwgdGhlcmUg
YXJlIHZlcnkgZmV3IGxlZ2l0IG92ZXJyaWRlcy4gVGhpcyB3aWxsCisgICAgICAgIGFsc28gbWFr
ZSBpdCBwb3NzaWJsZSB0byBkZS1yZWN1cnNpZnkgaXQgbGF0ZXIuCisgICAgICAgIAorICAgICAg
ICBBZGRlZCB3aWxsUmVjYWxjU3R5bGUoKS9kaWRSZWNhbGNTdHlsZSgpIHZpcnR1YWwgZnVuY3Rp
b24gZm9yIHN1YmNsYXNzZXMgdGhhdCBuZWVkIGN1c3RvbSBzdHlsZSByZWNhbGMuCisgICAgICAg
IFRoZXNlIGFyZSBvbmx5IGludm9rZWQgaWYgaGFzQ3VzdG9tV2lsbE9yRGlkUmVjYWxjU3R5bGUo
KSBiaXQgaXMgc2V0LgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6
CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
cmVjYWxjU3R5bGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
ZGlkUmVjYWxjU3R5bGUpOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpoYXNDdXN0b21XaWxsT3JEaWRSZWNhbGNTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpzZXRIYXNDdXN0b21XaWxsT3JEaWRSZWNhbGNTdHlsZSk6CisgICAgICAgICogZG9t
L1NoYWRvd1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6cmVjYWxjU2hh
ZG93VHJlZVN0eWxlKToKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5oOgorICAgICAgICAqIGRv
bS9UZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHQ6OnJlY2FsY1RleHRTdHlsZSk6Cisg
ICAgICAgICogZG9tL1RleHQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZv
cm1Db250cm9sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpkaWRSZWNhbGNTdHlsZSk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQ6OkhUTUxGcmFtZVNldEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lU2V0RWxlbWVudDo6d2lsbFJlY2FsY1N0eWxlKToKKyAg
ICAgICAgKiBodG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRN
TE1lZGlhRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpkaWRS
ZWNhbGNTdHlsZSk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxO
b1NjcmlwdEVsZW1lbnQ6OkhUTUxOb1NjcmlwdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE5vU2NyaXB0RWxlbWVudDo6d2lsbFJlY2FsY1N0eWxlKToKKyAgICAgICAgKiBodG1sL0hU
TUxOb1NjcmlwdEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxlbWVudDo6SFRNTFBs
dWdJbkltYWdlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50Ojp3aWxsUmVjYWxjU3R5bGUpOgorICAgICAgICAqIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxl
bWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAq
IGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHVFJlZkVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OlNWR1RSZWZFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1NoYWRvd1RleHQ6OndpbGxSZWNhbGNTdHlsZSk6CisgICAg
ICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxl
bWVudDo6U1ZHVXNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50Ojp3
aWxsUmVjYWxjU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6ZGlkUmVj
YWxjU3R5bGUpOgorICAgICAgICAqIHN2Zy9TVkdVc2VFbGVtZW50Lmg6CisKIDIwMTEtMDktMDEg
IEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVuYW1lIGNv
bG9yU2VsZWN0ZWQgdG8gZGlkQ2hvb3NlQ29sb3IKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkocmV2aXNpb24gOTQwODgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTMwLDkgKzE1MzAsMTMgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxj
U3R5bGUoU3R5bGVDaGFuZ2UgYwogICAgICAgICAgICAgcmVuZGVyZXIoKS0+c2V0U3R5bGUoZG9j
dW1lbnRTdHlsZS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIGZvciAoTm9kZSogbiA9IGZpcnN0
Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGlmIChjaGFuZ2UgPj0g
SW5oZXJpdCB8fCBuLT5jaGlsZE5lZWRzU3R5bGVSZWNhbGMoKSB8fCBuLT5uZWVkc1N0eWxlUmVj
YWxjKCkpCi0gICAgICAgICAgICBuLT5yZWNhbGNTdHlsZShjaGFuZ2UpOworICAgIGZvciAoTm9k
ZSogbiA9IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAg
aWYgKCFuLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKKyAgICAgICAgaWYg
KGNoYW5nZSA+PSBJbmhlcml0IHx8IGVsZW1lbnQtPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHx8
IGVsZW1lbnQtPm5lZWRzU3R5bGVSZWNhbGMoKSkKKyAgICAgICAgICAgIGVsZW1lbnQtPnJlY2Fs
Y1N0eWxlKGNoYW5nZSk7CisgICAgfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogICAgIGlmICh2aWV3KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA5
NDA4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MzksNyArNTM5LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8Q1NTU3R5bGVEZWNsYXJh
dGlvbj4gY3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOwogICAgIFBhc3NSZWZQdHI8RWRpdGlu
Z1RleHQ+IGNyZWF0ZUVkaXRpbmdUZXh0Tm9kZShjb25zdCBTdHJpbmcmKTsKIAotICAgIHZpcnR1
YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSA9IE5vQ2hhbmdlKTsKKyAgICB2b2lkIHJl
Y2FsY1N0eWxlKFN0eWxlQ2hhbmdlID0gTm9DaGFuZ2UpOwogICAgIGJvb2wgY2hpbGROZWVkc0Fu
ZE5vdEluU3R5bGVSZWNhbGMoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3R5bGVJZk5lZWRl
ZCgpOwogICAgIHZvaWQgdXBkYXRlTGF5b3V0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiA5NDA4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorI2luY2x1ZGUg
IlRleHQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJXZWJLaXRBbmlt
YXRpb25MaXN0LmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKQEAgLTEwOTUsNiArMTA5NiwxMSBA
QCBib29sIEVsZW1lbnQ6OnBzZXVkb1N0eWxlQ2FjaGVJc0ludmFsaWQoCiAKIHZvaWQgRWxlbWVu
dDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKQogeworICAgIGlmIChoYXNDdXN0b21X
aWxsT3JEaWRSZWNhbGNTdHlsZSgpKSB7CisgICAgICAgIGlmICghd2lsbFJlY2FsY1N0eWxlKGNo
YW5nZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgLy8gUmVmIGN1cnJlbnRT
dHlsZSBpbiBjYXNlIGl0IHdvdWxkIG90aGVyd2lzZSBiZSBkZWxldGVkIHdoZW4gc2V0UmVuZGVy
U3R5bGUoKSBpcyBjYWxsZWQuCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjdXJyZW50U3R5bGUo
cmVuZGVyU3R5bGUoKSk7CiAgICAgYm9vbCBoYXNQYXJlbnRTdHlsZSA9IHBhcmVudE5vZGVGb3JS
ZW5kZXJpbmdBbmRTdHlsZSgpID8gc3RhdGljX2Nhc3Q8Ym9vbD4ocGFyZW50Tm9kZUZvclJlbmRl
cmluZ0FuZFN0eWxlKCktPnJlbmRlclN0eWxlKCkpIDogZmFsc2U7CkBAIC0xMTE0LDkgKzExMjAs
MTIgQEAgdm9pZCBFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaAogICAgICAgICBp
ZiAoY2ggPT0gRGV0YWNoIHx8ICFjdXJyZW50U3R5bGUpIHsKICAgICAgICAgICAgIC8vIEZJWE1F
OiBUaGUgc3R5bGUgZ2V0cyBjb21wdXRlZCB0d2ljZSBieSBjYWxsaW5nIGF0dGFjaC4gV2UgY291
bGQgZG8gYmV0dGVyIGlmIHdlIHBhc3NlZCB0aGUgc3R5bGUgYWxvbmcuCiAgICAgICAgICAgICBy
ZWF0dGFjaCgpOwotICAgICAgICAgICAgLy8gYXR0YWNoIHJlY2FsdWxhdGVzIHRoZSBzdHlsZSBm
b3IgYWxsIGNoaWxkcmVuLiBObyBuZWVkIHRvIGRvIGl0IHR3aWNlLgorICAgICAgICAgICAgLy8g
YXR0YWNoIHJlY2FsY3VsYXRlcyB0aGUgc3R5bGUgZm9yIGFsbCBjaGlsZHJlbi4gTm8gbmVlZCB0
byBkbyBpdCB0d2ljZS4KICAgICAgICAgICAgIGNsZWFyTmVlZHNTdHlsZVJlY2FsYygpOwogICAg
ICAgICAgICAgY2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKKworICAgICAgICAgICAgaWYg
KGhhc0N1c3RvbVdpbGxPckRpZFJlY2FsY1N0eWxlKCkpCisgICAgICAgICAgICAgICAgZGlkUmVj
YWxjU3R5bGUoY2hhbmdlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0x
MTcxLDI4ICsxMTgwLDM3IEBAIHZvaWQgRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2Ug
Y2gKICAgICBib29sIGZvcmNlQ2hlY2tPZk5leHRFbGVtZW50U2libGluZyA9IGZhbHNlOwogICAg
IGJvb2wgZm9yY2VDaGVja09mQW55RWxlbWVudFNpYmxpbmcgPSBmYWxzZTsKICAgICBmb3IgKE5v
ZGUgKm4gPSBmaXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAg
IGJvb2wgY2hpbGRSdWxlc0NoYW5nZWQgPSBuLT5uZWVkc1N0eWxlUmVjYWxjKCkgJiYgbi0+c3R5
bGVDaGFuZ2VUeXBlKCkgPT0gRnVsbFN0eWxlQ2hhbmdlOwotICAgICAgICBpZiAoKGZvcmNlQ2hl
Y2tPZk5leHRFbGVtZW50U2libGluZyB8fCBmb3JjZUNoZWNrT2ZBbnlFbGVtZW50U2libGluZykg
JiYgbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgbi0+c2V0TmVlZHNTdHlsZVJlY2Fs
YygpOwotICAgICAgICBpZiAoY2hhbmdlID49IEluaGVyaXQgfHwgbi0+aXNUZXh0Tm9kZSgpIHx8
IG4tPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHx8IG4tPm5lZWRzU3R5bGVSZWNhbGMoKSkgewor
ICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICBwYXJlbnRQdXNoZXIu
cHVzaCgpOwotICAgICAgICAgICAgbi0+cmVjYWxjU3R5bGUoY2hhbmdlKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBmb3JjZUNoZWNr
T2ZOZXh0RWxlbWVudFNpYmxpbmcgPSBjaGlsZFJ1bGVzQ2hhbmdlZCAmJiBoYXNEaXJlY3RBZGph
Y2VudFJ1bGVzOwotICAgICAgICAgICAgZm9yY2VDaGVja09mQW55RWxlbWVudFNpYmxpbmcgPSBm
b3JjZUNoZWNrT2ZBbnlFbGVtZW50U2libGluZyB8fCAoY2hpbGRSdWxlc0NoYW5nZWQgJiYgaGFz
SW5kaXJlY3RBZGphY2VudFJ1bGVzKTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFRleHQqPihu
KS0+cmVjYWxjVGV4dFN0eWxlKGNoYW5nZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfSAKKyAgICAgICAgaWYgKCFuLT5pc0VsZW1lbnROb2RlKCkpIAorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
bik7CisgICAgICAgIGJvb2wgY2hpbGRSdWxlc0NoYW5nZWQgPSBlbGVtZW50LT5uZWVkc1N0eWxl
UmVjYWxjKCkgJiYgZWxlbWVudC0+c3R5bGVDaGFuZ2VUeXBlKCkgPT0gRnVsbFN0eWxlQ2hhbmdl
OworICAgICAgICBpZiAoKGZvcmNlQ2hlY2tPZk5leHRFbGVtZW50U2libGluZyB8fCBmb3JjZUNo
ZWNrT2ZBbnlFbGVtZW50U2libGluZykpCisgICAgICAgICAgICBlbGVtZW50LT5zZXROZWVkc1N0
eWxlUmVjYWxjKCk7CisgICAgICAgIGlmIChjaGFuZ2UgPj0gSW5oZXJpdCB8fCBlbGVtZW50LT5j
aGlsZE5lZWRzU3R5bGVSZWNhbGMoKSB8fCBlbGVtZW50LT5uZWVkc1N0eWxlUmVjYWxjKCkpIHsK
KyAgICAgICAgICAgIHBhcmVudFB1c2hlci5wdXNoKCk7CisgICAgICAgICAgICBlbGVtZW50LT5y
ZWNhbGNTdHlsZShjaGFuZ2UpOwogICAgICAgICB9CisgICAgICAgIGZvcmNlQ2hlY2tPZk5leHRF
bGVtZW50U2libGluZyA9IGNoaWxkUnVsZXNDaGFuZ2VkICYmIGhhc0RpcmVjdEFkamFjZW50UnVs
ZXM7CisgICAgICAgIGZvcmNlQ2hlY2tPZkFueUVsZW1lbnRTaWJsaW5nID0gZm9yY2VDaGVja09m
QW55RWxlbWVudFNpYmxpbmcgfHwgKGNoaWxkUnVsZXNDaGFuZ2VkICYmIGhhc0luZGlyZWN0QWRq
YWNlbnRSdWxlcyk7CiAgICAgfQogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGNhcmUgYWJv
dXQgc2libGluZyBjb21iaW5hdG9ycy4gV2lsbCBiZSBuZWNlc3NhcnkgaW4gWEJMMiB3b3JsZC4K
ICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93ID0gc2hhZG93Um9vdCgpKSB7CiAgICAgICAgIGlm
IChjaGFuZ2UgPj0gSW5oZXJpdCB8fCBzaGFkb3ctPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHx8
IHNoYWRvdy0+bmVlZHNTdHlsZVJlY2FsYygpKSB7CiAgICAgICAgICAgICBwYXJlbnRQdXNoZXIu
cHVzaCgpOwotICAgICAgICAgICAgc2hhZG93LT5yZWNhbGNTdHlsZShjaGFuZ2UpOworICAgICAg
ICAgICAgc2hhZG93LT5yZWNhbGNTaGFkb3dUcmVlU3R5bGUoY2hhbmdlKTsKICAgICAgICAgfQog
ICAgIH0KIAogICAgIGNsZWFyTmVlZHNTdHlsZVJlY2FsYygpOwogICAgIGNsZWFyQ2hpbGROZWVk
c1N0eWxlUmVjYWxjKCk7CisgICAgCisgICAgaWYgKGhhc0N1c3RvbVdpbGxPckRpZFJlY2FsY1N0
eWxlKCkpCisgICAgICAgIGRpZFJlY2FsY1N0eWxlKGNoYW5nZSk7CiB9CiAKIFNoYWRvd1Jvb3Qq
IEVsZW1lbnQ6OnNoYWRvd1Jvb3QoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZp
c2lvbiA5NDA4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIyOSw3ICsyMjksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgp
OwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCog
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwotICAgIHZpcnR1YWwg
dm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSA9IE5vQ2hhbmdlKTsKKyAgICB2b2lkIHJlY2Fs
Y1N0eWxlKFN0eWxlQ2hhbmdlID0gTm9DaGFuZ2UpOwogCiAgICAgU2hhZG93Um9vdCogc2hhZG93
Um9vdCgpIGNvbnN0OwogICAgIHZvaWQgc2V0U2hhZG93Um9vdChQYXNzUmVmUHRyPFNoYWRvd1Jv
b3Q+LCBFeGNlcHRpb25Db2RlJik7CkBAIC0zODAsNiArMzgwLDggQEAgcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVkRnJvbVRyZWUoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZChi
b29sIGNoYW5nZWRCeVBhcnNlciA9IGZhbHNlLCBOb2RlKiBiZWZvcmVDaGFuZ2UgPSAwLCBOb2Rl
KiBhZnRlckNoYW5nZSA9IDAsIGludCBjaGlsZENvdW50RGVsdGEgPSAwKTsKKyAgICB2aXJ0dWFs
IGJvb2wgd2lsbFJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlKSB7IHJldHVybiB0cnVlOyB9CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlKSB7IH0KIAogICAgIC8vIFRo
ZSBpbXBsZW1lbnRhdGlvbiBvZiBFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKCkgY2FsbHMgdGhl
IGZvbGxvd2luZyB0d28gZnVuY3Rpb25zLgogICAgIC8vIFRoZXkgYXJlIHNlcGFyYXRlZCB0byBh
bGxvdyBhIGRpZmZlcmVudCBmbG93IG9mIGNvbnRyb2wgaW4gU3R5bGVkRWxlbWVudDo6YXR0cmli
dXRlQ2hhbmdlZCgpLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiA5NDA4OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw4ICszNTIsNiBAQCBw
dWJsaWM6CiAgICAgLy8gTm90ZTogVGhpcyBtZXRob2Qgb25seSB3b3JrcyBwcm9wZXJseSBhZnRl
ciBsYXlvdXQgaGFzIG9jY3VycmVkLgogICAgIGJvb2wgaGFzTm9uRW1wdHlCb3VuZGluZ0JveCgp
IGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlID0gTm9D
aGFuZ2UpIHsgfQotCiAgICAgdW5zaWduZWQgbm9kZUluZGV4KCkgY29uc3Q7CiAKICAgICAvLyBS
ZXR1cm5zIHRoZSBET00gb3duZXJEb2N1bWVudCBhdHRyaWJ1dGUuIFRoaXMgbWV0aG9kIG5ldmVy
IHJldHVybnMgTlVMTCwgZXhjZXB0IGluIHRoZSBjYXNlIApAQCAtNjE3LDYgKzYxNSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIFN0eWxlQ2hhbmdlTWFzayA9IDEgPDwgbm9kZVN0eWxlQ2hhbmdlU2hp
ZnQgfCAxIDw8IChub2RlU3R5bGVDaGFuZ2VTaGlmdCArIDEpLAogCiAgICAgICAgIFNlbGZPckFu
Y2VzdG9ySGFzRGlyQXV0b0ZsYWcgPSAxIDw8IDI3LAorICAgICAgICBIYXNDdXN0b21XaWxsT3JE
aWRSZWNhbGNTdHlsZSA9IDEgPDwgMjgsCiAKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICBEZWZh
dWx0Tm9kZUZsYWdzID0gSXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZEZsYWcgfCBJc1N0eWxlQXR0
cmlidXRlVmFsaWRGbGFnIHwgQXJlU1ZHQXR0cmlidXRlc1ZhbGlkRmxhZwpAQCAtNjI1LDcgKzYy
NCw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB9OwogCi0gICAgLy8gNCBiaXRzIHJlbWFpbmlu
ZworICAgIC8vIDMgYml0cyByZW1haW5pbmcKIAogICAgIGJvb2wgZ2V0RmxhZyhOb2RlRmxhZ3Mg
bWFzaykgY29uc3QgeyByZXR1cm4gbV9ub2RlRmxhZ3MgJiBtYXNrOyB9CiAgICAgdm9pZCBzZXRG
bGFnKGJvb2wgZiwgTm9kZUZsYWdzIG1hc2spIGNvbnN0IHsgbV9ub2RlRmxhZ3MgPSAobV9ub2Rl
RmxhZ3MgJiB+bWFzaykgfCAoLShpbnQzMl90KWYgJiBtYXNrKTsgfSAKQEAgLTY1OCw2ICs2NTcs
OSBAQCBwcm90ZWN0ZWQ6CiAgICAgTm9kZVJhcmVEYXRhKiBlbnN1cmVSYXJlRGF0YSgpOwogICAg
IHZvaWQgY2xlYXJSYXJlRGF0YSgpOwogCisgICAgYm9vbCBoYXNDdXN0b21XaWxsT3JEaWRSZWNh
bGNTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoSGFzQ3VzdG9tV2lsbE9yRGlkUmVjYWxj
U3R5bGUpOyB9CisgICAgdm9pZCBzZXRIYXNDdXN0b21XaWxsT3JEaWRSZWNhbGNTdHlsZSgpIHsg
c2V0RmxhZyh0cnVlLCBIYXNDdXN0b21XaWxsT3JEaWRSZWNhbGNTdHlsZSk7IH0KKwogcHJpdmF0
ZToKICAgICAvLyBEbyBub3QgdXNlIHRoaXMgbWV0aG9kIHRvIGNoYW5nZSB0aGUgZG9jdW1lbnQg
b2YgYSBub2RlIHVudGlsIGFmdGVyIHRoZSBub2RlIGhhcyBiZWVuCiAgICAgLy8gcmVtb3ZlZCBm
cm9tIGl0cyBwcmV2aW91cyBkb2N1bWVudC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFk
b3dSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5j
cHAJKHJldmlzaW9uIDk0MDg4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRh
LmgiCiAjaW5jbHVkZSAiU2hhZG93Q29udGVudEVsZW1lbnQuaCIKICNpbmNsdWRlICJTaGFkb3dJ
bmNsdXNpb25TZWxlY3Rvci5oIgorI2luY2x1ZGUgIlRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC04MywxMyArODQsMTcgQEAgYm9vbCBTaGFkb3dSb290OjpjaGlsZFR5cGVBbGxv
d2VkKE5vZGVUeQogICAgIH0KIH0KIAotdm9pZCBTaGFkb3dSb290OjpyZWNhbGNTdHlsZShTdHls
ZUNoYW5nZSBjaGFuZ2UpCit2b2lkIFNoYWRvd1Jvb3Q6OnJlY2FsY1NoYWRvd1RyZWVTdHlsZShT
dHlsZUNoYW5nZSBjaGFuZ2UpCiB7CiAgICAgaWYgKGhhc0NvbnRlbnRFbGVtZW50KCkpCiAgICAg
ICAgIHJlYXR0YWNoKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGZvciAoTm9kZSogbiA9IGZpcnN0
Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICBuLT5yZWNhbGNT
dHlsZShjaGFuZ2UpOworICAgICAgICBmb3IgKE5vZGUqIG4gPSBmaXJzdENoaWxkKCk7IG47IG4g
PSBuLT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgp
KQorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+cmVjYWxjU3R5bGUo
Y2hhbmdlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG4tPmlzVGV4dE5vZGUoKSkKKyAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxUZXh0Kj4obiktPnJlY2FsY1RleHRTdHlsZShjaGFuZ2UpOwor
ICAgICAgICB9CiAgICAgfQogCiAgICAgY2xlYXJOZWVkc1N0eWxlUmVjYWxjKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9TaGFkb3dSb290LmgJKHJldmlzaW9uIDk0MDg4KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL1NoYWRvd1Jvb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBT
aGFkb3dSb290IDogcHVibGljIFRyZWVTY29wZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2hhZG93Um9vdD4gY3JlYXRlKERvY3VtZW50Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgPSBOb0NoYW5nZSk7CisgICAgdm9pZCByZWNhbGNTaGFk
b3dUcmVlU3R5bGUoU3R5bGVDaGFuZ2UpOwogCiAgICAgU2hhZG93Q29udGVudEVsZW1lbnQqIGlu
Y2x1ZGVyRm9yKE5vZGUqKSBjb25zdDsKICAgICB2b2lkIGhvc3RDaGlsZHJlbkNoYW5nZWQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vVGV4dC5jcHAJKHJldmlzaW9uIDk0MDg4KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNyArMjU0LDcgQEAgdm9pZCBUZXh0
OjphdHRhY2goKQogICAgIENoYXJhY3RlckRhdGE6OmF0dGFjaCgpOwogfQogCi12b2lkIFRleHQ6
OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKK3ZvaWQgVGV4dDo6cmVjYWxjVGV4dFN0
eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKIHsKICAgICBpZiAoY2hhbmdlICE9IE5vQ2hhbmdlICYm
IHBhcmVudE5vZGUoKSAmJiBwYXJlbnROb2RlKCktPnJlbmRlcmVyKCkpIHsKICAgICAgICAgaWYg
KHJlbmRlcmVyKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmgJKHJldmlzaW9uIDk0MDg4KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQCBwdWJs
aWM6CiAKICAgICBTdHJpbmcgd2hvbGVUZXh0KCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxUZXh0
PiByZXBsYWNlV2hvbGVUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAK
KyAgICB2b2lkIHJlY2FsY1RleHRTdHlsZShTdHlsZUNoYW5nZSk7CiAKICAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoKCk7CiAgICAgCkBAIC01MSw4ICs1Myw2IEBAIHByb3RlY3RlZDoKICAgICB7CiAg
ICAgfQogCi0gICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlID0gTm9DaGFu
Z2UpOwotCiBwcml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5NDA4OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDYgKzY0LDggQEAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZv
cm1Db250cm9sRQogICAgICAgICBzZXRGb3JtKGZpbmRGb3JtQW5jZXN0b3IoKSk7CiAgICAgaWYg
KHRoaXMtPmZvcm0oKSkKICAgICAgICAgdGhpcy0+Zm9ybSgpLT5yZWdpc3RlckZvcm1FbGVtZW50
KHRoaXMpOworCisgICAgc2V0SGFzQ3VzdG9tV2lsbE9yRGlkUmVjYWxjU3R5bGUoKTsKIH0KIAog
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoKQpAQCAtMjYy
LDEwICsyNjQsOCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVGcm9tRWxlbWVudENhbGxiYWNrKE5vCiAg
ICAgICAgIHJlbmRlcmVyLT51cGRhdGVGcm9tRWxlbWVudCgpOwogfQogCi12b2lkIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKK3ZvaWQgSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6ZGlkUmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UpCiB7Ci0gICAg
SFRNTEVsZW1lbnQ6OnJlY2FsY1N0eWxlKGNoYW5nZSk7Ci0KICAgICAvLyB1cGRhdGVGcm9tRWxl
bWVudCgpIGNhbiBjYXVzZSB0aGUgc2VsZWN0aW9uIHRvIGNoYW5nZSwgYW5kIGluIHR1cm4KICAg
ICAvLyB0cmlnZ2VyIHN5bmNocm9ub3VzIGxheW91dCwgc28gaXQgbXVzdCBub3QgYmUgY2FsbGVk
IGR1cmluZyBzdHlsZSByZWNhbGMuCiAgICAgaWYgKHJlbmRlcmVyKCkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkocmV2aXNpb24gOTQwODgp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wg
aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCByZWNhbGNT
dHlsZShTdHlsZUNoYW5nZSk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2FsY1N0eWxlKFN0eWxl
Q2hhbmdlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJFdmVudChQYXNzUmVmUHRy
PE5vZGU+IG5ld0ZvY3VzZWROb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJKHJldmlzaW9u
IDk0MDg4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsOCBAQCBIVE1MRnJhbWVTZXRFbGVtZW50OjpIVE1M
RnJhbWVTZXRFbGVtZW50CiAgICAgLCBtX25vcmVzaXplKGZhbHNlKQogewogICAgIEFTU0VSVCho
YXNUYWdOYW1lKGZyYW1lc2V0VGFnKSk7CisgICAgCisgICAgc2V0SGFzQ3VzdG9tV2lsbE9yRGlk
UmVjYWxjU3R5bGUoKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MRnJhbWVTZXRFbGVtZW50PiBIVE1M
RnJhbWVTZXRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvY3VtZW50KQpAQCAtMTk4LDEzICsyMDAsMTMgQEAgdm9pZCBIVE1MRnJhbWVTZXRF
bGVtZW50OjpkZWZhdWx0RXZlbnRIYQogICAgIEhUTUxFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKGV2dCk7CiB9CiAKLXZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5
bGVDaGFuZ2UgY2gpCitib29sIEhUTUxGcmFtZVNldEVsZW1lbnQ6OndpbGxSZWNhbGNTdHlsZShT
dHlsZUNoYW5nZSkKIHsKICAgICBpZiAobmVlZHNTdHlsZVJlY2FsYygpICYmIHJlbmRlcmVyKCkp
IHsKICAgICAgICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiAgICAgICAgIGNs
ZWFyTmVlZHNTdHlsZVJlY2FsYygpOwogICAgIH0KLSAgICBIVE1MRWxlbWVudDo6cmVjYWxjU3R5
bGUoY2gpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6
Omluc2VydGVkSW50b0RvY3VtZW50KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZy
YW1lU2V0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZy
YW1lU2V0RWxlbWVudC5oCShyZXZpc2lvbiA5NDA4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZyYW1lU2V0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHBy
aXZhdGU6CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQq
KTsKIAotICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7CisgICAgdmly
dHVhbCBib29sIHdpbGxSZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7CiAKICAgICB2aXJ0dWFsIHZv
aWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21E
b2N1bWVudCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA5NDA4OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw2ICsxOTQsOCBAQCBIVE1MTWVkaWFFbGVtZW50
OjpIVE1MTWVkaWFFbGVtZW50KGNvbnN0CiAgICAgCiAgICAgaWYgKGRvY3VtZW50LT5zZXR0aW5n
cygpICYmIGRvY3VtZW50LT5zZXR0aW5ncygpLT5tZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2Vz
dHVyZSgpKQogICAgICAgICBtX3Jlc3RyaWN0aW9ucyB8PSBSZXF1aXJlVXNlckdlc3R1cmVGb3JS
YXRlQ2hhbmdlUmVzdHJpY3Rpb247CisKKyAgICBzZXRIYXNDdXN0b21XaWxsT3JEaWRSZWNhbGNT
dHlsZSgpOwogfQogCiBIVE1MTWVkaWFFbGVtZW50Ojp+SFRNTE1lZGlhRWxlbWVudCgpCkBAIC0z
OTIsMTAgKzM5NCw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6YXR0YWNoKCkKICNlbmRpZgog
fQogCi12b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5n
ZSkKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkUmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UpCiB7
Ci0gICAgSFRNTEVsZW1lbnQ6OnJlY2FsY1N0eWxlKGNoYW5nZSk7Ci0KICAgICBpZiAocmVuZGVy
ZXIoKSkKICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiA5NDA4OCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzksNyArMjM5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3Jl
YXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwgdm9p
ZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURv
Y3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UpOwogICAgIAogICAgIHZp
cnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gOTQwODgpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw4IEBAIGlubGluZSBIVE1MTm9TY3JpcHRFbGVtZW50OjpIVE1MTm9T
Y3JpcHQKICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQogewogICAgIEFTU0VS
VChoYXNUYWdOYW1lKG5vc2NyaXB0VGFnKSk7CisKKyAgICBzZXRIYXNDdXN0b21XaWxsT3JEaWRS
ZWNhbGNTdHlsZSgpOwogfQogCiBQYXNzUmVmUHRyPEhUTUxOb1NjcmlwdEVsZW1lbnQ+IEhUTUxO
b1NjcmlwdEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jdW1lbnQpCkBAIC01NCwxMCArNTYsMTAgQEAgdm9pZCBIVE1MTm9TY3JpcHRFbGVt
ZW50OjphdHRhY2goKQogICAgIH0KIH0KIAotdm9pZCBIVE1MTm9TY3JpcHRFbGVtZW50OjpyZWNh
bGNTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCitib29sIEhUTUxOb1NjcmlwdEVsZW1lbnQ6Ondp
bGxSZWNhbGNTdHlsZShTdHlsZUNoYW5nZSkKIHsKICAgICBpZiAoIWRvY3VtZW50KCktPnNob3Vs
ZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQoKSB8fCAhcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+
c3R5bGUoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAv
LyBJZiA8bm9zY3JpcHQ+IG5lZWRzIHByb2Nlc3NpbmcsIHdlIG1ha2UgaXQgdmlzaWFibGUgaGVy
ZSwgaW5jbHVkaW5nIGl0cyB2aXNpYmxlIGNoaWxkcmVuCiAgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBzdHlsZSA9IHJlbmRlcmVyKCktPnN0eWxlKCk7CkBAIC03MSw2ICs3Myw3IEBAIHZvaWQgSFRN
TE5vU2NyaXB0RWxlbWVudDo6cmVjYWxjU3R5bGUoU3QKICAgICAgICAgICAgICAgICAgICAgbi0+
Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCgpOwogICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiBm
YWxzZTsKIH0KIAogYm9vbCBIVE1MTm9TY3JpcHRFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJl
bmRlcmVyKE5vZGUqKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTm9TY3Jp
cHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTm9TY3Jp
cHRFbGVtZW50LmgJKHJldmlzaW9uIDk0MDg4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Tm9TY3JpcHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgcHJpdmF0
ZToKICAgICBIVE1MTm9TY3JpcHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCopOwogCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwotICAgIHZpcnR1YWwgdm9pZCByZWNh
bGNTdHlsZShTdHlsZUNoYW5nZSk7CisgICAgdmlydHVhbCBib29sIHdpbGxSZWNhbGNTdHlsZShT
dHlsZUNoYW5nZSk7CiAgICAgdmlydHVhbCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIo
Tm9kZSopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNvbnN0IE5v
ZGVSZW5kZXJpbmdDb250ZXh0JikgeyAgcmV0dXJuIHRydWU7IH0KIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDk0
MDg4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpI
VE1MUGx1Z0luSW1hZ2VFCiAgICAgLCBtX25lZWRzV2lkZ2V0VXBkYXRlKCFjcmVhdGVkQnlQYXJz
ZXIpCiAgICAgLCBtX3Nob3VsZFByZWZlclBsdWdJbnNGb3JJbWFnZXMocHJlZmVyUGx1Z0luc0Zv
ckltYWdlc09wdGlvbiA9PSBTaG91bGRQcmVmZXJQbHVnSW5zRm9ySW1hZ2VzKQogeworICAgIHNl
dEhhc0N1c3RvbVdpbGxPckRpZFJlY2FsY1N0eWxlKCk7CiB9CiAKIFJlbmRlckVtYmVkZGVkT2Jq
ZWN0KiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZW5kZXJFbWJlZGRlZE9iamVjdCgpIGNvbnN0
CkBAIC0xMjEsMTIgKzEyMiwxMiBAQCBSZW5kZXJPYmplY3QqIEhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQ6OmNyCiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckVtYmVkZGVkT2JqZWN0KHRoaXMp
OwogfQogCi12b2lkIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hh
bmdlIGNoKQorYm9vbCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUoU3R5
bGVDaGFuZ2UpCiB7CiAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIG5lY2Vzc2FyeT8gIE1hbnVh
bCByZS1hdHRhY2ggaXMgYWxtb3N0IGFsd2F5cyB3cm9uZy4KICAgICBpZiAoIXVzZUZhbGxiYWNr
Q29udGVudCgpICYmIG5lZWRzV2lkZ2V0VXBkYXRlKCkgJiYgcmVuZGVyZXIoKSAmJiAhaXNJbWFn
ZVR5cGUoKSkKICAgICAgICAgcmVhdHRhY2goKTsKLSAgICBIVE1MUGx1Z0luRWxlbWVudDo6cmVj
YWxjU3R5bGUoY2gpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEhUTUxQbHVnSW5JbWFn
ZUVsZW1lbnQ6OmF0dGFjaCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVn
SW5JbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gOTQwODgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBA
QCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0
ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UpOworICAgIHZpcnR1YWwgYm9vbCB3aWxsUmVjYWxjU3R5
bGUoU3R5bGVDaGFuZ2UpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hQYXJzaW5nQ2hp
bGRyZW4oKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDk0MDg4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDExICs1OCw2IEBAIFBhc3NSZWZQdHI8SFRN
TFNlbGVjdEVsZW1lbnQ+IEhUTUxTZWxlY3QKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxT
ZWxlY3RFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBmb3JtKSk7CiB9CiAKLXZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKLXsKLSAgICBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpyZWNhbGNTdHlsZShjaGFuZ2UpOwotfQotCiBj
b25zdCBBdG9taWNTdHJpbmcmIEhUTUxTZWxlY3RFbGVtZW50Ojpmb3JtQ29udHJvbFR5cGUoKSBj
b25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBzZWxl
Y3RNdWx0aXBsZSwgKCJzZWxlY3QtbXVsdGlwbGUiKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU2VsZWN0RWxlbWVudC5oCShyZXZpc2lvbiA5NDA4OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDggKzEwMSw2
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9h
cmRFdmVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29u
c3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UpOwotCiAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRm9jdXNFdmVudChQYXNzUmVmUHRyPE5vZGU+IG9sZEZvY3Vz
ZWROb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hCbHVyRXZlbnQoUGFzc1JlZlB0cjxO
b2RlPiBuZXdGb2N1c2VkTm9kZSk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VFJlZkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVm
RWxlbWVudC5jcHAJKHJldmlzaW9uIDk0MDg4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RS
ZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOCBAQCBpbmxpbmUgU1ZH
VFJlZkVsZW1lbnQ6OlNWR1RSZWZFbGVtZW50KGNvCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUo
U1ZHTmFtZXM6OnRyZWZUYWcpKTsKICAgICByZWdpc3RlckFuaW1hdGVkUHJvcGVydGllc0ZvclNW
R1RSZWZFbGVtZW50KCk7CisgICAgCisgICAgc2V0SGFzQ3VzdG9tV2lsbE9yRGlkUmVjYWxjU3R5
bGUoKTsKIH0KIAogUGFzc1JlZlB0cjxTVkdUUmVmRWxlbWVudD4gU1ZHVFJlZkVsZW1lbnQ6OmNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCkBA
IC0xMTksNyArMTIxLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogICAgIHZpcnR1YWwgUmVu
ZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlKTsKKyAgICB2aXJ0dWFsIGJv
b2wgd2lsbFJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlKTsKIH07CiAKIFJlbmRlck9iamVjdCogU1ZH
U2hhZG93VGV4dDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHls
ZSopCkBAIC0xMjcsMTMgKzEyOSwxMyBAQCBSZW5kZXJPYmplY3QqIFNWR1NoYWRvd1RleHQ6OmNy
ZWF0ZVJlbmRlCiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNWR0lubGluZVRleHQodGhp
cywgZGF0YUltcGwoKSk7CiB9CiAKLXZvaWQgU1ZHU2hhZG93VGV4dDo6cmVjYWxjU3R5bGUoU3R5
bGVDaGFuZ2UgY2hhbmdlKQorYm9vbCBTVkdTaGFkb3dUZXh0Ojp3aWxsUmVjYWxjU3R5bGUoU3R5
bGVDaGFuZ2UgY2hhbmdlKQogewogICAgIGlmIChjaGFuZ2UgIT0gTm9DaGFuZ2UgJiYgcGFyZW50
Tm9kZSgpLT5zaGFkb3dIb3N0KCkpIHsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAg
ICAgICByZW5kZXJlcigpLT5zZXRTdHlsZShwYXJlbnROb2RlKCktPnNoYWRvd0hvc3QoKS0+cmVu
ZGVyZXIoKS0+c3R5bGUoKSk7CiAgICAgfQotICAgIFRleHQ6OnJlY2FsY1N0eWxlKGNoYW5nZSk7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OnVwZGF0ZVJlZmVy
ZW5jZWRUZXh0KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlz
aW9uIDk0MDg4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Niw2ICs4Niw4IEBAIGlubGluZSBTVkdVc2VFbGVtZW50OjpTVkdVc2VF
bGVtZW50KGNvbnMKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShTVkdOYW1lczo6dXNlVGFnKSk7
CiAgICAgcmVnaXN0ZXJBbmltYXRlZFByb3BlcnRpZXNGb3JTVkdVc2VFbGVtZW50KCk7CisgICAg
CisgICAgc2V0SGFzQ3VzdG9tV2lsbE9yRGlkUmVjYWxjU3R5bGUoKTsKIH0KIAogUGFzc1JlZlB0
cjxTVkdVc2VFbGVtZW50PiBTVkdVc2VFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQpAQCAtMzQzLDE2ICszNDUsMTggQEAgdm9p
ZCBTVkdVc2VFbGVtZW50Ojp1cGRhdGVDb250YWluZXJPZmZzZQogICAgICAgICBSZW5kZXJTVkdS
ZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKG9iamVj
dCk7CiB9CiAKLXZvaWQgU1ZHVXNlRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hh
bmdlKQorYm9vbCBTVkdVc2VFbGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hh
bmdlKQogewogICAgIC8vIEV2ZW50dWFsbHkgbWFyayBzaGFkb3cgcm9vdCBlbGVtZW50IG5lZWRp
bmcgc3R5bGUgcmVjYWxjCiAgICAgaWYgKChjaGFuZ2UgPj0gSW5oZXJpdCB8fCBuZWVkc1N0eWxl
UmVjYWxjKCkgfHwgY2hpbGROZWVkc1N0eWxlUmVjYWxjKCkpICYmIG1fdGFyZ2V0RWxlbWVudElu
c3RhbmNlICYmICFtX3VwZGF0ZXNCbG9ja2VkKSB7CiAgICAgICAgIGlmIChTVkdFbGVtZW50KiBz
aGFkb3dSb290ID0gbV90YXJnZXRFbGVtZW50SW5zdGFuY2UtPnNoYWRvd1RyZWVFbGVtZW50KCkp
CiAgICAgICAgICAgICBzaGFkb3dSb290LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQogCi0gICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6
OnJlY2FsY1N0eWxlKGNoYW5nZSk7Ci0KK3ZvaWQgU1ZHVXNlRWxlbWVudDo6ZGlkUmVjYWxjU3R5
bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKQorewogICAgIC8vIEFzc3VyZSB0aGF0IHRoZSBzaGFkb3cg
dHJlZSBoYXMgbm90IGJlZW4gbWFya2VkIGZvciByZWNyZWF0aW9uLCB3aGlsZSB3ZSdyZSBidWls
ZGluZyBpdC4KICAgICBpZiAobV91cGRhdGVzQmxvY2tlZCkKICAgICAgICAgQVNTRVJUKCFtX25l
ZWRzU2hhZG93VHJlZVJlY3JlYXRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Vz
ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVu
dC5oCShyZXZpc2lvbiA5NDA4OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lk
IHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCi0gICAgdmlydHVh
bCB2b2lkIHJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlID0gTm9DaGFuZ2UpOworICAgIHZpcnR1YWwg
Ym9vbCB3aWxsUmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKTsKKwogICAgIHZpcnR1YWwgUmVu
ZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CiAg
ICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsK
</data>
<flag name="review"
          id="102229"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106105</attachid>
            <date>2011-09-02 02:02:41 -0700</date>
            <delta_ts>2011-09-02 02:50:32 -0700</delta_ts>
            <desc>tot patch for bots to chew</desc>
            <filename>devirtualize-recalcstyle-3.patch</filename>
            <type>text/plain</type>
            <size>26683</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0MzkxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTEtMDktMDEgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIERlLXZpcnR1YWxpemUgcmVjYWxj
U3R5bGUoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjczNzgKKworICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCisKKyAgICAgICAg
RWxlbWVudDo6cmVjYWxjU3R5bGUoKSBkb2VzIG5vdCBuZWVkIHRvIGJlIHZpcnR1YWwsIHRoZXJl
IGFyZSB2ZXJ5IGZldyBsZWdpdCBvdmVycmlkZXMuIFRoaXMgd2lsbAorICAgICAgICBhbHNvIG1h
a2UgaXQgcG9zc2libGUgdG8gZGUtcmVjdXJzaWZ5IGl0IGxhdGVyLgorICAgICAgICAKKyAgICAg
ICAgQWRkZWQgd2lsbFJlY2FsY1N0eWxlKCkvZGlkUmVjYWxjU3R5bGUoKSB2aXJ0dWFsIGZ1bmN0
aW9uIGZvciBzdWJjbGFzc2VzIHRoYXQgbmVlZCBjdXN0b20gc3R5bGUgcmVjYWxjLgorICAgICAg
ICBUaGVzZSBhcmUgb25seSBpbnZva2VkIGlmIGhhc0N1c3RvbVdpbGxPckRpZFJlY2FsY1N0eWxl
KCkgYml0IGlzIHNldC4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6cmVjYWxjU3R5bGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5o
OgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OnJlY2FsY1N0eWxlKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6d2lsbFJlY2FsY1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OmRpZFJlY2FsY1N0eWxlKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6aGFzQ3VzdG9tV2lsbE9yRGlkUmVjYWxjU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6c2V0SGFzQ3VzdG9tV2lsbE9yRGlkUmVjYWxjU3R5bGUpOgorICAgICAgICAqIGRv
bS9TaGFkb3dSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OnJlY2FsY1No
YWRvd1RyZWVTdHlsZSk6CisgICAgICAgICogZG9tL1NoYWRvd1Jvb3QuaDoKKyAgICAgICAgKiBk
b20vVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0OjpyZWNhbGNUZXh0U3R5bGUpOgor
ICAgICAgICAqIGRvbS9UZXh0Lmg6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OkhUTUxG
b3JtQ29udHJvbEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxl
bWVudDo6ZGlkUmVjYWxjU3R5bGUpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxl
bWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRnJhbWVTZXRFbGVtZW50OjpIVE1MRnJhbWVTZXRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQ6OndpbGxSZWNhbGNTdHlsZSk6Cisg
ICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OkhU
TUxNZWRpYUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6ZGlk
UmVjYWxjU3R5bGUpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAg
ICAqIGh0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Tm9TY3JpcHRFbGVtZW50OjpIVE1MTm9TY3JpcHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxOb1NjcmlwdEVsZW1lbnQ6OndpbGxSZWNhbGNTdHlsZSk6CisgICAgICAgICogaHRtbC9I
VE1MTm9TY3JpcHRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OkhUTUxQ
bHVnSW5JbWFnZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBsdWdJbkltYWdlRWxl
bWVudDo6d2lsbFJlY2FsY1N0eWxlKToKKyAgICAgICAgKiBodG1sL0hUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAg
KiBodG1sL0hUTUxTZWxlY3RFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1RSZWZFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50OjpTVkdUUmVmRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdTaGFkb3dUZXh0Ojp3aWxsUmVjYWxjU3R5bGUpOgorICAg
ICAgICAqIHN2Zy9TVkdVc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVs
ZW1lbnQ6OlNWR1VzZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6
d2lsbFJlY2FsY1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OmRpZFJl
Y2FsY1N0eWxlKToKKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxlbWVudC5oOgorCiAyMDExLTA5LTAy
ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCByb2xsaW5nIG91dCByOTQzODkuCkBAIC0yODksNyArMzUwLDYgQEAKIAogICAg
ICAgICAqIHBhZ2UvRE9NV2luZG93LmlkbDoKIAotPj4+Pj4+PiAucjk0MzgyCiAyMDExLTA5LTAx
ICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzEwMDYzNDExPiBXZWJTY3JpcHRPYmplY3QuaCBkZWNsYXJlcyBhbiBPYmplY3RpdmUtQyBtZXRo
b2Qgd2l0aG91dCBhIHJldHVybiB0eXBlLgpAQCAtMTMyOCw2ICsxMzg4LDcgQEAKICAgICAgICAg
KFdlYkNvcmU6OldlYlNvY2tldDo6Z2V0RnJhbWluZ092ZXJoZWFkKToKICAgICAgICAgKiB3ZWJz
b2NrZXRzL1dlYlNvY2tldC5oOgogCis+Pj4+Pj4+IC5yOTQzOTEKIDIwMTEtMDktMDEgIEtlaXNo
aSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVuYW1lIGNvbG9yU2Vs
ZWN0ZWQgdG8gZGlkQ2hvb3NlQ29sb3IKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2
aXNpb24gOTQzOTEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTI5LDkgKzE1MjksMTMgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGUo
U3R5bGVDaGFuZ2UgYwogICAgICAgICAgICAgcmVuZGVyZXIoKS0+c2V0U3R5bGUoZG9jdW1lbnRT
dHlsZS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Q2hpbGQo
KTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGlmIChjaGFuZ2UgPj0gSW5oZXJp
dCB8fCBuLT5jaGlsZE5lZWRzU3R5bGVSZWNhbGMoKSB8fCBuLT5uZWVkc1N0eWxlUmVjYWxjKCkp
Ci0gICAgICAgICAgICBuLT5yZWNhbGNTdHlsZShjaGFuZ2UpOworICAgIGZvciAoTm9kZSogbiA9
IGZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFu
LT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKKyAgICAgICAgaWYgKGNoYW5n
ZSA+PSBJbmhlcml0IHx8IGVsZW1lbnQtPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHx8IGVsZW1l
bnQtPm5lZWRzU3R5bGVSZWNhbGMoKSkKKyAgICAgICAgICAgIGVsZW1lbnQtPnJlY2FsY1N0eWxl
KGNoYW5nZSk7CisgICAgfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAg
IGlmICh2aWV3KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA5NDM5MSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Mzks
NyArNTM5LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4g
Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOwogICAgIFBhc3NSZWZQdHI8RWRpdGluZ1RleHQ+
IGNyZWF0ZUVkaXRpbmdUZXh0Tm9kZShjb25zdCBTdHJpbmcmKTsKIAotICAgIHZpcnR1YWwgdm9p
ZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSA9IE5vQ2hhbmdlKTsKKyAgICB2b2lkIHJlY2FsY1N0
eWxlKFN0eWxlQ2hhbmdlID0gTm9DaGFuZ2UpOwogICAgIGJvb2wgY2hpbGROZWVkc0FuZE5vdElu
U3R5bGVSZWNhbGMoKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3R5bGVJZk5lZWRlZCgpOwog
ICAgIHZvaWQgdXBkYXRlTGF5b3V0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZp
c2lvbiA5NDM5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgorI2luY2x1ZGUgIlRleHQu
aCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJXZWJLaXRBbmltYXRpb25M
aXN0LmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKQEAgLTEwOTUsNiArMTA5NiwxMSBAQCBib29s
IEVsZW1lbnQ6OnBzZXVkb1N0eWxlQ2FjaGVJc0ludmFsaWQoCiAKIHZvaWQgRWxlbWVudDo6cmVj
YWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKQogeworICAgIGlmIChoYXNDdXN0b21XaWxsT3JE
aWRSZWNhbGNTdHlsZSgpKSB7CisgICAgICAgIGlmICghd2lsbFJlY2FsY1N0eWxlKGNoYW5nZSkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgLy8gUmVmIGN1cnJlbnRTdHlsZSBp
biBjYXNlIGl0IHdvdWxkIG90aGVyd2lzZSBiZSBkZWxldGVkIHdoZW4gc2V0UmVuZGVyU3R5bGUo
KSBpcyBjYWxsZWQuCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjdXJyZW50U3R5bGUocmVuZGVy
U3R5bGUoKSk7CiAgICAgYm9vbCBoYXNQYXJlbnRTdHlsZSA9IHBhcmVudE5vZGVGb3JSZW5kZXJp
bmdBbmRTdHlsZSgpID8gc3RhdGljX2Nhc3Q8Ym9vbD4ocGFyZW50Tm9kZUZvclJlbmRlcmluZ0Fu
ZFN0eWxlKCktPnJlbmRlclN0eWxlKCkpIDogZmFsc2U7CkBAIC0xMTE0LDkgKzExMjAsMTIgQEAg
dm9pZCBFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaAogICAgICAgICBpZiAoY2gg
PT0gRGV0YWNoIHx8ICFjdXJyZW50U3R5bGUpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUg
c3R5bGUgZ2V0cyBjb21wdXRlZCB0d2ljZSBieSBjYWxsaW5nIGF0dGFjaC4gV2UgY291bGQgZG8g
YmV0dGVyIGlmIHdlIHBhc3NlZCB0aGUgc3R5bGUgYWxvbmcuCiAgICAgICAgICAgICByZWF0dGFj
aCgpOwotICAgICAgICAgICAgLy8gYXR0YWNoIHJlY2FsdWxhdGVzIHRoZSBzdHlsZSBmb3IgYWxs
IGNoaWxkcmVuLiBObyBuZWVkIHRvIGRvIGl0IHR3aWNlLgorICAgICAgICAgICAgLy8gYXR0YWNo
IHJlY2FsY3VsYXRlcyB0aGUgc3R5bGUgZm9yIGFsbCBjaGlsZHJlbi4gTm8gbmVlZCB0byBkbyBp
dCB0d2ljZS4KICAgICAgICAgICAgIGNsZWFyTmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICAg
ICAgY2xlYXJDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKKworICAgICAgICAgICAgaWYgKGhhc0N1
c3RvbVdpbGxPckRpZFJlY2FsY1N0eWxlKCkpCisgICAgICAgICAgICAgICAgZGlkUmVjYWxjU3R5
bGUoY2hhbmdlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xMTcxLDI4
ICsxMTgwLDM3IEBAIHZvaWQgRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2gKICAg
ICBib29sIGZvcmNlQ2hlY2tPZk5leHRFbGVtZW50U2libGluZyA9IGZhbHNlOwogICAgIGJvb2wg
Zm9yY2VDaGVja09mQW55RWxlbWVudFNpYmxpbmcgPSBmYWxzZTsKICAgICBmb3IgKE5vZGUgKm4g
PSBmaXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGJvb2wg
Y2hpbGRSdWxlc0NoYW5nZWQgPSBuLT5uZWVkc1N0eWxlUmVjYWxjKCkgJiYgbi0+c3R5bGVDaGFu
Z2VUeXBlKCkgPT0gRnVsbFN0eWxlQ2hhbmdlOwotICAgICAgICBpZiAoKGZvcmNlQ2hlY2tPZk5l
eHRFbGVtZW50U2libGluZyB8fCBmb3JjZUNoZWNrT2ZBbnlFbGVtZW50U2libGluZykgJiYgbi0+
aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgbi0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwot
ICAgICAgICBpZiAoY2hhbmdlID49IEluaGVyaXQgfHwgbi0+aXNUZXh0Tm9kZSgpIHx8IG4tPmNo
aWxkTmVlZHNTdHlsZVJlY2FsYygpIHx8IG4tPm5lZWRzU3R5bGVSZWNhbGMoKSkgeworICAgICAg
ICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICBwYXJlbnRQdXNoZXIucHVzaCgp
OwotICAgICAgICAgICAgbi0+cmVjYWxjU3R5bGUoY2hhbmdlKTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBmb3JjZUNoZWNrT2ZOZXh0
RWxlbWVudFNpYmxpbmcgPSBjaGlsZFJ1bGVzQ2hhbmdlZCAmJiBoYXNEaXJlY3RBZGphY2VudFJ1
bGVzOwotICAgICAgICAgICAgZm9yY2VDaGVja09mQW55RWxlbWVudFNpYmxpbmcgPSBmb3JjZUNo
ZWNrT2ZBbnlFbGVtZW50U2libGluZyB8fCAoY2hpbGRSdWxlc0NoYW5nZWQgJiYgaGFzSW5kaXJl
Y3RBZGphY2VudFJ1bGVzKTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFRleHQqPihuKS0+cmVj
YWxjVGV4dFN0eWxlKGNoYW5nZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSAK
KyAgICAgICAgaWYgKCFuLT5pc0VsZW1lbnROb2RlKCkpIAorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Cisg
ICAgICAgIGJvb2wgY2hpbGRSdWxlc0NoYW5nZWQgPSBlbGVtZW50LT5uZWVkc1N0eWxlUmVjYWxj
KCkgJiYgZWxlbWVudC0+c3R5bGVDaGFuZ2VUeXBlKCkgPT0gRnVsbFN0eWxlQ2hhbmdlOworICAg
ICAgICBpZiAoKGZvcmNlQ2hlY2tPZk5leHRFbGVtZW50U2libGluZyB8fCBmb3JjZUNoZWNrT2ZB
bnlFbGVtZW50U2libGluZykpCisgICAgICAgICAgICBlbGVtZW50LT5zZXROZWVkc1N0eWxlUmVj
YWxjKCk7CisgICAgICAgIGlmIChjaGFuZ2UgPj0gSW5oZXJpdCB8fCBlbGVtZW50LT5jaGlsZE5l
ZWRzU3R5bGVSZWNhbGMoKSB8fCBlbGVtZW50LT5uZWVkc1N0eWxlUmVjYWxjKCkpIHsKKyAgICAg
ICAgICAgIHBhcmVudFB1c2hlci5wdXNoKCk7CisgICAgICAgICAgICBlbGVtZW50LT5yZWNhbGNT
dHlsZShjaGFuZ2UpOwogICAgICAgICB9CisgICAgICAgIGZvcmNlQ2hlY2tPZk5leHRFbGVtZW50
U2libGluZyA9IGNoaWxkUnVsZXNDaGFuZ2VkICYmIGhhc0RpcmVjdEFkamFjZW50UnVsZXM7Cisg
ICAgICAgIGZvcmNlQ2hlY2tPZkFueUVsZW1lbnRTaWJsaW5nID0gZm9yY2VDaGVja09mQW55RWxl
bWVudFNpYmxpbmcgfHwgKGNoaWxkUnVsZXNDaGFuZ2VkICYmIGhhc0luZGlyZWN0QWRqYWNlbnRS
dWxlcyk7CiAgICAgfQogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGNhcmUgYWJvdXQgc2li
bGluZyBjb21iaW5hdG9ycy4gV2lsbCBiZSBuZWNlc3NhcnkgaW4gWEJMMiB3b3JsZC4KICAgICBp
ZiAoU2hhZG93Um9vdCogc2hhZG93ID0gc2hhZG93Um9vdCgpKSB7CiAgICAgICAgIGlmIChjaGFu
Z2UgPj0gSW5oZXJpdCB8fCBzaGFkb3ctPmNoaWxkTmVlZHNTdHlsZVJlY2FsYygpIHx8IHNoYWRv
dy0+bmVlZHNTdHlsZVJlY2FsYygpKSB7CiAgICAgICAgICAgICBwYXJlbnRQdXNoZXIucHVzaCgp
OwotICAgICAgICAgICAgc2hhZG93LT5yZWNhbGNTdHlsZShjaGFuZ2UpOworICAgICAgICAgICAg
c2hhZG93LT5yZWNhbGNTaGFkb3dUcmVlU3R5bGUoY2hhbmdlKTsKICAgICAgICAgfQogICAgIH0K
IAogICAgIGNsZWFyTmVlZHNTdHlsZVJlY2FsYygpOwogICAgIGNsZWFyQ2hpbGROZWVkc1N0eWxl
UmVjYWxjKCk7CisgICAgCisgICAgaWYgKGhhc0N1c3RvbVdpbGxPckRpZFJlY2FsY1N0eWxlKCkp
CisgICAgICAgIGRpZFJlY2FsY1N0eWxlKGNoYW5nZSk7CiB9CiAKIFNoYWRvd1Jvb3QqIEVsZW1l
bnQ6OnNoYWRvd1Jvb3QoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZpc2lvbiA5
NDM5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTIyOSw3ICsyMjksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAg
IHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRl
UmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWNhbGNTdHlsZShTdHlsZUNoYW5nZSA9IE5vQ2hhbmdlKTsKKyAgICB2b2lkIHJlY2FsY1N0eWxl
KFN0eWxlQ2hhbmdlID0gTm9DaGFuZ2UpOwogCiAgICAgU2hhZG93Um9vdCogc2hhZG93Um9vdCgp
IGNvbnN0OwogICAgIHZvaWQgc2V0U2hhZG93Um9vdChQYXNzUmVmUHRyPFNoYWRvd1Jvb3Q+LCBF
eGNlcHRpb25Db2RlJik7CkBAIC0zODAsNiArMzgwLDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVk
RnJvbVRyZWUoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZChib29sIGNo
YW5nZWRCeVBhcnNlciA9IGZhbHNlLCBOb2RlKiBiZWZvcmVDaGFuZ2UgPSAwLCBOb2RlKiBhZnRl
ckNoYW5nZSA9IDAsIGludCBjaGlsZENvdW50RGVsdGEgPSAwKTsKKyAgICB2aXJ0dWFsIGJvb2wg
d2lsbFJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlKSB7IH0KIAogICAgIC8vIFRoZSBpbXBs
ZW1lbnRhdGlvbiBvZiBFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKCkgY2FsbHMgdGhlIGZvbGxv
d2luZyB0d28gZnVuY3Rpb25zLgogICAgIC8vIFRoZXkgYXJlIHNlcGFyYXRlZCB0byBhbGxvdyBh
IGRpZmZlcmVudCBmbG93IG9mIGNvbnRyb2wgaW4gU3R5bGVkRWxlbWVudDo6YXR0cmlidXRlQ2hh
bmdlZCgpLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiA5NDM5MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw4ICszNTIsNiBAQCBwdWJsaWM6
CiAgICAgLy8gTm90ZTogVGhpcyBtZXRob2Qgb25seSB3b3JrcyBwcm9wZXJseSBhZnRlciBsYXlv
dXQgaGFzIG9jY3VycmVkLgogICAgIGJvb2wgaGFzTm9uRW1wdHlCb3VuZGluZ0JveCgpIGNvbnN0
OwogCi0gICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlID0gTm9DaGFuZ2Up
IHsgfQotCiAgICAgdW5zaWduZWQgbm9kZUluZGV4KCkgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5z
IHRoZSBET00gb3duZXJEb2N1bWVudCBhdHRyaWJ1dGUuIFRoaXMgbWV0aG9kIG5ldmVyIHJldHVy
bnMgTlVMTCwgZXhjZXB0IGluIHRoZSBjYXNlIApAQCAtNjE3LDYgKzYxNSw3IEBAIHByaXZhdGU6
CiAgICAgICAgIFN0eWxlQ2hhbmdlTWFzayA9IDEgPDwgbm9kZVN0eWxlQ2hhbmdlU2hpZnQgfCAx
IDw8IChub2RlU3R5bGVDaGFuZ2VTaGlmdCArIDEpLAogCiAgICAgICAgIFNlbGZPckFuY2VzdG9y
SGFzRGlyQXV0b0ZsYWcgPSAxIDw8IDI3LAorICAgICAgICBIYXNDdXN0b21XaWxsT3JEaWRSZWNh
bGNTdHlsZSA9IDEgPDwgMjgsCiAKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICBEZWZhdWx0Tm9k
ZUZsYWdzID0gSXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZEZsYWcgfCBJc1N0eWxlQXR0cmlidXRl
VmFsaWRGbGFnIHwgQXJlU1ZHQXR0cmlidXRlc1ZhbGlkRmxhZwpAQCAtNjI1LDcgKzYyNCw3IEBA
IHByaXZhdGU6CiAjZW5kaWYKICAgICB9OwogCi0gICAgLy8gNCBiaXRzIHJlbWFpbmluZworICAg
IC8vIDMgYml0cyByZW1haW5pbmcKIAogICAgIGJvb2wgZ2V0RmxhZyhOb2RlRmxhZ3MgbWFzaykg
Y29uc3QgeyByZXR1cm4gbV9ub2RlRmxhZ3MgJiBtYXNrOyB9CiAgICAgdm9pZCBzZXRGbGFnKGJv
b2wgZiwgTm9kZUZsYWdzIG1hc2spIGNvbnN0IHsgbV9ub2RlRmxhZ3MgPSAobV9ub2RlRmxhZ3Mg
JiB+bWFzaykgfCAoLShpbnQzMl90KWYgJiBtYXNrKTsgfSAKQEAgLTY1OCw2ICs2NTcsOSBAQCBw
cm90ZWN0ZWQ6CiAgICAgTm9kZVJhcmVEYXRhKiBlbnN1cmVSYXJlRGF0YSgpOwogICAgIHZvaWQg
Y2xlYXJSYXJlRGF0YSgpOwogCisgICAgYm9vbCBoYXNDdXN0b21XaWxsT3JEaWRSZWNhbGNTdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoSGFzQ3VzdG9tV2lsbE9yRGlkUmVjYWxjU3R5bGUp
OyB9CisgICAgdm9pZCBzZXRIYXNDdXN0b21XaWxsT3JEaWRSZWNhbGNTdHlsZSgpIHsgc2V0Rmxh
Zyh0cnVlLCBIYXNDdXN0b21XaWxsT3JEaWRSZWNhbGNTdHlsZSk7IH0KKwogcHJpdmF0ZToKICAg
ICAvLyBEbyBub3QgdXNlIHRoaXMgbWV0aG9kIHRvIGNoYW5nZSB0aGUgZG9jdW1lbnQgb2YgYSBu
b2RlIHVudGlsIGFmdGVyIHRoZSBub2RlIGhhcyBiZWVuCiAgICAgLy8gcmVtb3ZlZCBmcm9tIGl0
cyBwcmV2aW91cyBkb2N1bWVudC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJKHJl
dmlzaW9uIDk0MzkxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAj
aW5jbHVkZSAiU2hhZG93Q29udGVudEVsZW1lbnQuaCIKICNpbmNsdWRlICJTaGFkb3dJbmNsdXNp
b25TZWxlY3Rvci5oIgorI2luY2x1ZGUgIlRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC04MywxMyArODQsMTcgQEAgYm9vbCBTaGFkb3dSb290OjpjaGlsZFR5cGVBbGxvd2VkKE5v
ZGVUeQogICAgIH0KIH0KIAotdm9pZCBTaGFkb3dSb290OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5n
ZSBjaGFuZ2UpCit2b2lkIFNoYWRvd1Jvb3Q6OnJlY2FsY1NoYWRvd1RyZWVTdHlsZShTdHlsZUNo
YW5nZSBjaGFuZ2UpCiB7CiAgICAgaWYgKGhhc0NvbnRlbnRFbGVtZW50KCkpCiAgICAgICAgIHJl
YXR0YWNoKCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Q2hpbGQo
KTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICBuLT5yZWNhbGNTdHlsZShj
aGFuZ2UpOworICAgICAgICBmb3IgKE5vZGUqIG4gPSBmaXJzdENoaWxkKCk7IG47IG4gPSBuLT5u
ZXh0U2libGluZygpKSB7CisgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKQorICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+cmVjYWxjU3R5bGUoY2hhbmdl
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG4tPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxUZXh0Kj4obiktPnJlY2FsY1RleHRTdHlsZShjaGFuZ2UpOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgY2xlYXJOZWVkc1N0eWxlUmVjYWxjKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TaGFkb3dSb290LmgJKHJldmlzaW9uIDk0MzkxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1No
YWRvd1Jvb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBTaGFkb3dS
b290IDogcHVibGljIFRyZWVTY29wZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U2hhZG93Um9vdD4gY3JlYXRlKERvY3VtZW50Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVjYWxj
U3R5bGUoU3R5bGVDaGFuZ2UgPSBOb0NoYW5nZSk7CisgICAgdm9pZCByZWNhbGNTaGFkb3dUcmVl
U3R5bGUoU3R5bGVDaGFuZ2UpOwogCiAgICAgU2hhZG93Q29udGVudEVsZW1lbnQqIGluY2x1ZGVy
Rm9yKE5vZGUqKSBjb25zdDsKICAgICB2b2lkIGhvc3RDaGlsZHJlbkNoYW5nZWQoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vVGV4dC5jcHAJKHJldmlzaW9uIDk0MzkxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Rl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQsNyArMjU0LDcgQEAgdm9pZCBUZXh0OjphdHRh
Y2goKQogICAgIENoYXJhY3RlckRhdGE6OmF0dGFjaCgpOwogfQogCi12b2lkIFRleHQ6OnJlY2Fs
Y1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKK3ZvaWQgVGV4dDo6cmVjYWxjVGV4dFN0eWxlKFN0
eWxlQ2hhbmdlIGNoYW5nZSkKIHsKICAgICBpZiAoY2hhbmdlICE9IE5vQ2hhbmdlICYmIHBhcmVu
dE5vZGUoKSAmJiBwYXJlbnROb2RlKCktPnJlbmRlcmVyKCkpIHsKICAgICAgICAgaWYgKHJlbmRl
cmVyKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9UZXh0LmgJKHJldmlzaW9uIDk0MzkxKQorKysgU291cmNlL1dlYkNv
cmUvZG9tL1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQCBwdWJsaWM6CiAK
ICAgICBTdHJpbmcgd2hvbGVUZXh0KCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxUZXh0PiByZXBs
YWNlV2hvbGVUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAKKyAgICB2
b2lkIHJlY2FsY1RleHRTdHlsZShTdHlsZUNoYW5nZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgYXR0
YWNoKCk7CiAgICAgCkBAIC01MSw4ICs1Myw2IEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgfQog
Ci0gICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlID0gTm9DaGFuZ2UpOwot
CiBwcml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5NDM5MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDYgKzY0LDggQEAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZvcm1Db250
cm9sRQogICAgICAgICBzZXRGb3JtKGZpbmRGb3JtQW5jZXN0b3IoKSk7CiAgICAgaWYgKHRoaXMt
PmZvcm0oKSkKICAgICAgICAgdGhpcy0+Zm9ybSgpLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMp
OworCisgICAgc2V0SGFzQ3VzdG9tV2lsbE9yRGlkUmVjYWxjU3R5bGUoKTsKIH0KIAogSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6fkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoKQpAQCAtMjYyLDEwICsy
NjQsOCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVGcm9tRWxlbWVudENhbGxiYWNrKE5vCiAgICAgICAg
IHJlbmRlcmVyLT51cGRhdGVGcm9tRWxlbWVudCgpOwogfQogCi12b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKK3ZvaWQgSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6ZGlkUmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UpCiB7Ci0gICAgSFRNTEVs
ZW1lbnQ6OnJlY2FsY1N0eWxlKGNoYW5nZSk7Ci0KICAgICAvLyB1cGRhdGVGcm9tRWxlbWVudCgp
IGNhbiBjYXVzZSB0aGUgc2VsZWN0aW9uIHRvIGNoYW5nZSwgYW5kIGluIHR1cm4KICAgICAvLyB0
cmlnZ2VyIHN5bmNocm9ub3VzIGxheW91dCwgc28gaXQgbXVzdCBub3QgYmUgY2FsbGVkIGR1cmlu
ZyBzdHlsZSByZWNhbGMuCiAgICAgaWYgKHJlbmRlcmVyKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkocmV2aXNpb24gOTQzOTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE3LDcgKzExNyw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgaXNLZXli
b2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlz
TW91c2VGb2N1c2FibGUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShT
dHlsZUNoYW5nZSk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdl
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJFdmVudChQYXNzUmVmUHRyPE5vZGU+
IG5ld0ZvY3VzZWROb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJKHJldmlzaW9uIDk0Mzkx
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNiArNTUsOCBAQCBIVE1MRnJhbWVTZXRFbGVtZW50OjpIVE1MRnJhbWVT
ZXRFbGVtZW50CiAgICAgLCBtX25vcmVzaXplKGZhbHNlKQogewogICAgIEFTU0VSVChoYXNUYWdO
YW1lKGZyYW1lc2V0VGFnKSk7CisgICAgCisgICAgc2V0SGFzQ3VzdG9tV2lsbE9yRGlkUmVjYWxj
U3R5bGUoKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MRnJhbWVTZXRFbGVtZW50PiBIVE1MRnJhbWVT
ZXRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQq
IGRvY3VtZW50KQpAQCAtMTk4LDEzICsyMDAsMTMgQEAgdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYQogICAgIEhUTUxFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2
dCk7CiB9CiAKLXZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFu
Z2UgY2gpCitib29sIEhUTUxGcmFtZVNldEVsZW1lbnQ6OndpbGxSZWNhbGNTdHlsZShTdHlsZUNo
YW5nZSkKIHsKICAgICBpZiAobmVlZHNTdHlsZVJlY2FsYygpICYmIHJlbmRlcmVyKCkpIHsKICAg
ICAgICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiAgICAgICAgIGNsZWFyTmVl
ZHNTdHlsZVJlY2FsYygpOwogICAgIH0KLSAgICBIVE1MRWxlbWVudDo6cmVjYWxjU3R5bGUoY2gp
OworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnQ6Omluc2Vy
dGVkSW50b0RvY3VtZW50KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lU2V0
RWxlbWVudC5oCShyZXZpc2lvbiA5NDM5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZy
YW1lU2V0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7CisgICAgdmlydHVhbCBi
b29sIHdpbGxSZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVu
dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZp
c2lvbiA5NDM5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwOSw2ICsyMDksOCBAQCBIVE1MTWVkaWFFbGVtZW50OjpIVE1M
TWVkaWFFbGVtZW50KGNvbnN0CiAgICAgbV9tZWRpYVNvdXJjZVVSTC5zZXRQcm90b2NvbChtZWRp
YVNvdXJjZVVSTFByb3RvY29sKTsKICAgICBtX21lZGlhU291cmNlVVJMLnNldFBhdGgoY3JlYXRl
Q2Fub25pY2FsVVVJRFN0cmluZygpKTsKICNlbmRpZgorCisgICAgc2V0SGFzQ3VzdG9tV2lsbE9y
RGlkUmVjYWxjU3R5bGUoKTsKIH0KIAogSFRNTE1lZGlhRWxlbWVudDo6fkhUTUxNZWRpYUVsZW1l
bnQoKQpAQCAtNDA3LDEwICs0MDksOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmF0dGFjaCgp
CiAjZW5kaWYKIH0KIAotdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNo
YW5nZSBjaGFuZ2UpCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmRpZFJlY2FsY1N0eWxlKFN0eWxl
Q2hhbmdlKQogewotICAgIEhUTUxFbGVtZW50OjpyZWNhbGNTdHlsZShjaGFuZ2UpOwotCiAgICAg
aWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUZyb21FbGVtZW50KCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkocmV2aXNpb24g
OTQzOTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUzLDcgKzI1Myw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBSZW5kZXJP
YmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKICAgICB2
aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlZEZyb21Eb2N1bWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNo
YW5nZSk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlKTsKICAg
ICAKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5jcHAJKHJldmlzaW9u
IDk0MzkxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQCBpbmxpbmUgSFRNTE5vU2NyaXB0RWxlbWVu
dDo6SFRNTE5vU2NyaXB0CiAgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKIHsK
ICAgICBBU1NFUlQoaGFzVGFnTmFtZShub3NjcmlwdFRhZykpOworCisgICAgc2V0SGFzQ3VzdG9t
V2lsbE9yRGlkUmVjYWxjU3R5bGUoKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MTm9TY3JpcHRFbGVt
ZW50PiBIVE1MTm9TY3JpcHRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQpAQCAtNTQsMTAgKzU2LDEwIEBAIHZvaWQgSFRNTE5v
U2NyaXB0RWxlbWVudDo6YXR0YWNoKCkKICAgICB9CiB9CiAKLXZvaWQgSFRNTE5vU2NyaXB0RWxl
bWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKQorYm9vbCBIVE1MTm9TY3JpcHRF
bGVtZW50Ojp3aWxsUmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UpCiB7CiAgICAgaWYgKCFkb2N1bWVu
dCgpLT5zaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KCkgfHwgIXJlbmRlcmVyKCkgfHwgIXJl
bmRlcmVyKCktPnN0eWxlKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgLy8gSWYgPG5vc2NyaXB0PiBuZWVkcyBwcm9jZXNzaW5nLCB3ZSBtYWtlIGl0IHZp
c2lhYmxlIGhlcmUsIGluY2x1ZGluZyBpdHMgdmlzaWJsZSBjaGlsZHJlbgogICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOwpAQCAtNzEsNiArNzMsNyBA
QCB2b2lkIEhUTUxOb1NjcmlwdEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0CiAgICAgICAgICAgICAg
ICAgICAgIG4tPmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKTsKICAgICAgICAgfQogICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgSFRNTE5vU2NyaXB0RWxlbWVudDo6Y2hpbGRTaG91
bGRDcmVhdGVSZW5kZXJlcihOb2RlKikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE5vU2NyaXB0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE5vU2NyaXB0RWxlbWVudC5oCShyZXZpc2lvbiA5NDM5MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE5vU2NyaXB0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3
IEBAIHByaXZhdGU6CiAgICAgSFRNTE5vU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UpOworICAgIHZpcnR1YWwgYm9vbCB3aWxsUmVj
YWxjU3R5bGUoU3R5bGVDaGFuZ2UpOwogICAgIHZpcnR1YWwgYm9vbCBjaGlsZFNob3VsZENyZWF0
ZVJlbmRlcmVyKE5vZGUqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRl
ZChjb25zdCBOb2RlUmVuZGVyaW5nQ29udGV4dCYpIHsgIHJldHVybiB0cnVlOyB9CiB9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA5NDM5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkltYWdlRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgSFRNTFBsdWdJbkltYWdl
RWxlbWVudDo6SFRNTFBsdWdJbkltYWdlRQogICAgICwgbV9uZWVkc1dpZGdldFVwZGF0ZSghY3Jl
YXRlZEJ5UGFyc2VyKQogICAgICwgbV9zaG91bGRQcmVmZXJQbHVnSW5zRm9ySW1hZ2VzKHByZWZl
clBsdWdJbnNGb3JJbWFnZXNPcHRpb24gPT0gU2hvdWxkUHJlZmVyUGx1Z0luc0ZvckltYWdlcykK
IHsKKyAgICBzZXRIYXNDdXN0b21XaWxsT3JEaWRSZWNhbGNTdHlsZSgpOwogfQogCiBSZW5kZXJF
bWJlZGRlZE9iamVjdCogSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6cmVuZGVyRW1iZWRkZWRPYmpl
Y3QoKSBjb25zdApAQCAtMTIxLDEyICsxMjIsMTIgQEAgUmVuZGVyT2JqZWN0KiBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50OjpjcgogICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJFbWJlZGRlZE9i
amVjdCh0aGlzKTsKIH0KIAotdm9pZCBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50OjpyZWNhbGNTdHls
ZShTdHlsZUNoYW5nZSBjaCkKK2Jvb2wgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6d2lsbFJlY2Fs
Y1N0eWxlKFN0eWxlQ2hhbmdlKQogewogICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBuZWNlc3Nh
cnk/ICBNYW51YWwgcmUtYXR0YWNoIGlzIGFsbW9zdCBhbHdheXMgd3JvbmcuCiAgICAgaWYgKCF1
c2VGYWxsYmFja0NvbnRlbnQoKSAmJiBuZWVkc1dpZGdldFVwZGF0ZSgpICYmIHJlbmRlcmVyKCkg
JiYgIWlzSW1hZ2VUeXBlKCkpCiAgICAgICAgIHJlYXR0YWNoKCk7Ci0gICAgSFRNTFBsdWdJbkVs
ZW1lbnQ6OnJlY2FsY1N0eWxlKGNoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50OjphdHRhY2goKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDk0MzkxKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTcz
LDcgKzczLDcgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgUmVuZGVyT2Jq
ZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7Ci0gICAgdmly
dHVhbCB2b2lkIHJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlKTsKKyAgICB2aXJ0dWFsIGJvb2wgd2ls
bFJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNo
UGFyc2luZ0NoaWxkcmVuKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVj
dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVj
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5NDM5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMSArNTgsNiBAQCBQYXNz
UmVmUHRyPEhUTUxTZWxlY3RFbGVtZW50PiBIVE1MU2VsZWN0CiAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBIVE1MU2VsZWN0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgZm9ybSkpOwogfQogCi12
b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCi17
Ci0gICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6cmVjYWxjU3R5bGUoY2hhbmdl
KTsKLX0KLQogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MU2VsZWN0RWxlbWVudDo6Zm9ybUNvbnRy
b2xUeXBlKCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0
cmluZywgc2VsZWN0TXVsdGlwbGUsICgic2VsZWN0LW11bHRpcGxlIikpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkocmV2aXNpb24gOTQzOTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
MSw4ICsxMDEsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNh
YmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3Vz
YWJsZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdl
KTsKLQogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEZvY3VzRXZlbnQoUGFzc1JlZlB0cjxOb2Rl
PiBvbGRGb2N1c2VkTm9kZSk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KFBh
c3NSZWZQdHI8Tm9kZT4gbmV3Rm9jdXNlZE5vZGUpOwogICAgIApJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiA5NDM5MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDggQEAg
aW5saW5lIFNWR1RSZWZFbGVtZW50OjpTVkdUUmVmRWxlbWVudChjbwogewogICAgIEFTU0VSVCho
YXNUYWdOYW1lKFNWR05hbWVzOjp0cmVmVGFnKSk7CiAgICAgcmVnaXN0ZXJBbmltYXRlZFByb3Bl
cnRpZXNGb3JTVkdUUmVmRWxlbWVudCgpOworICAgIAorICAgIHNldEhhc0N1c3RvbVdpbGxPckRp
ZFJlY2FsY1N0eWxlKCk7CiB9CiAKIFBhc3NSZWZQdHI8U1ZHVFJlZkVsZW1lbnQ+IFNWR1RSZWZF
bGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
Y3VtZW50KQpAQCAtMTE5LDcgKzEyMSw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KICAgICB2
aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJT
dHlsZSopOwotICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7CisgICAg
dmlydHVhbCBib29sIHdpbGxSZWNhbGNTdHlsZShTdHlsZUNoYW5nZSk7CiB9OwogCiBSZW5kZXJP
YmplY3QqIFNWR1NoYWRvd1RleHQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwg
UmVuZGVyU3R5bGUqKQpAQCAtMTI3LDEzICsxMjksMTMgQEAgUmVuZGVyT2JqZWN0KiBTVkdTaGFk
b3dUZXh0OjpjcmVhdGVSZW5kZQogICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJTVkdJbmxp
bmVUZXh0KHRoaXMsIGRhdGFJbXBsKCkpOwogfQogCi12b2lkIFNWR1NoYWRvd1RleHQ6OnJlY2Fs
Y1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKK2Jvb2wgU1ZHU2hhZG93VGV4dDo6d2lsbFJlY2Fs
Y1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKIHsKICAgICBpZiAoY2hhbmdlICE9IE5vQ2hhbmdl
ICYmIHBhcmVudE5vZGUoKS0+c2hhZG93SG9zdCgpKSB7CiAgICAgICAgIGlmIChyZW5kZXJlcigp
KQogICAgICAgICAgICAgcmVuZGVyZXIoKS0+c2V0U3R5bGUocGFyZW50Tm9kZSgpLT5zaGFkb3dI
b3N0KCktPnJlbmRlcmVyKCktPnN0eWxlKCkpOwogICAgIH0KLSAgICBUZXh0OjpyZWNhbGNTdHls
ZShjaGFuZ2UpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFNWR1RSZWZFbGVtZW50Ojp1
cGRhdGVSZWZlcmVuY2VkVGV4dCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA5NDM5MSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQCBpbmxpbmUgU1ZHVXNlRWxlbWVu
dDo6U1ZHVXNlRWxlbWVudChjb25zCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoU1ZHTmFtZXM6
OnVzZVRhZykpOwogICAgIHJlZ2lzdGVyQW5pbWF0ZWRQcm9wZXJ0aWVzRm9yU1ZHVXNlRWxlbWVu
dCgpOworICAgIAorICAgIHNldEhhc0N1c3RvbVdpbGxPckRpZFJlY2FsY1N0eWxlKCk7CiB9CiAK
IFBhc3NSZWZQdHI8U1ZHVXNlRWxlbWVudD4gU1ZHVXNlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKQEAgLTM0MywxNiArMzQ1
LDE4IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6dXBkYXRlQ29udGFpbmVyT2Zmc2UKICAgICAgICAg
UmVuZGVyU1ZHUmVzb3VyY2U6Om1hcmtGb3JMYXlvdXRBbmRQYXJlbnRSZXNvdXJjZUludmFsaWRh
dGlvbihvYmplY3QpOwogfQogCi12b2lkIFNWR1VzZUVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxl
Q2hhbmdlIGNoYW5nZSkKK2Jvb2wgU1ZHVXNlRWxlbWVudDo6d2lsbFJlY2FsY1N0eWxlKFN0eWxl
Q2hhbmdlIGNoYW5nZSkKIHsKICAgICAvLyBFdmVudHVhbGx5IG1hcmsgc2hhZG93IHJvb3QgZWxl
bWVudCBuZWVkaW5nIHN0eWxlIHJlY2FsYwogICAgIGlmICgoY2hhbmdlID49IEluaGVyaXQgfHwg
bmVlZHNTdHlsZVJlY2FsYygpIHx8IGNoaWxkTmVlZHNTdHlsZVJlY2FsYygpKSAmJiBtX3Rhcmdl
dEVsZW1lbnRJbnN0YW5jZSAmJiAhbV91cGRhdGVzQmxvY2tlZCkgewogICAgICAgICBpZiAoU1ZH
RWxlbWVudCogc2hhZG93Um9vdCA9IG1fdGFyZ2V0RWxlbWVudEluc3RhbmNlLT5zaGFkb3dUcmVl
RWxlbWVudCgpKQogICAgICAgICAgICAgc2hhZG93Um9vdC0+c2V0TmVlZHNTdHlsZVJlY2FsYygp
OwogICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50OjpyZWNhbGNTdHlsZShjaGFuZ2UpOwotCit2b2lkIFNWR1VzZUVsZW1lbnQ6OmRp
ZFJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSkKK3sKICAgICAvLyBBc3N1cmUgdGhhdCB0
aGUgc2hhZG93IHRyZWUgaGFzIG5vdCBiZWVuIG1hcmtlZCBmb3IgcmVjcmVhdGlvbiwgd2hpbGUg
d2UncmUgYnVpbGRpbmcgaXQuCiAgICAgaWYgKG1fdXBkYXRlc0Jsb2NrZWQpCiAgICAgICAgIEFT
U0VSVCghbV9uZWVkc1NoYWRvd1RyZWVSZWNyZWF0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdVc2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1VzZUVsZW1lbnQuaAkocmV2aXNpb24gOTQzOTEpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VXNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw5IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZp
cnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSA9IE5vQ2hhbmdlKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgd2lsbFJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSk7CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoYW5nZSk7CisKICAgICB2
aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJT
dHlsZSopOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0
YWNoKCk7Cg==
</data>
<flag name="commit-queue"
          id="102463"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>