<?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>130300</bug_id>
          
          <creation_ts>2014-03-15 23:14:07 -0700</creation_ts>
          <short_desc>Add CompareStrictEq(StringIdent:, NotStringVar:) and CompareStrictEq(String:, Untyped:)</short_desc>
          <delta_ts>2014-03-19 04:14:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>130449</dependson>
          <blocked>112840</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>kling</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>990934</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-15 23:14:07 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991056</commentid>
    <comment_count>1</comment_count>
      <attachid>226867</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-16 17:57:30 -0700</bug_when>
    <thetext>Created attachment 226867
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991058</commentid>
    <comment_count>2</comment_count>
      <attachid>226868</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-16 18:24:55 -0700</bug_when>
    <thetext>Created attachment 226868
moar!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991059</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-16 18:27:08 -0700</bug_when>
    <thetext>I&apos;m using this as an opportunity to add is-cell/is-not-cell/is-other/is-not-other branch abstractions to deduplicate more 64-bit/32-bit code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991082</commentid>
    <comment_count>4</comment_count>
      <attachid>226876</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-16 21:28:47 -0700</bug_when>
    <thetext>Created attachment 226876
getting there

I wrote all of the DFG code, but there is still some FTL code to write.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991548</commentid>
    <comment_count>5</comment_count>
      <attachid>227011</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-17 21:53:55 -0700</bug_when>
    <thetext>Created attachment 227011
basically done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991794</commentid>
    <comment_count>6</comment_count>
      <attachid>227089</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-18 12:35:14 -0700</bug_when>
    <thetext>Created attachment 227089
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991851</commentid>
    <comment_count>7</comment_count>
      <attachid>227089</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-03-18 13:37:35 -0700</bug_when>
    <thetext>Comment on attachment 227089
the patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:3859
&gt; +    JITCompiler::JumpList fastSlow;

fastFalse</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991864</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-03-18 13:54:17 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/165842</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992069</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-03-19 04:14:03 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Landed in http://trac.webkit.org/changeset/165842

It caused regression on 32 bit x86 - https://bugs.webkit.org/show_bug.cgi?id=130449</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226867</attachid>
            <date>2014-03-16 17:57:30 -0700</date>
            <delta_ts>2014-03-16 18:24:55 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13019</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5oCShyZXZpc2lvbiAxNjU2ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3BlY3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCwxMSBAQCBpbmxp
bmUgYm9vbCBpc1N0cmluZ0lkZW50U3BlY3VsYXRpb24oU3BlCiAgICAgcmV0dXJuIHZhbHVlID09
IFNwZWNTdHJpbmdJZGVudDsKIH0KIAoraW5saW5lIGJvb2wgaXNOb3RTdHJpbmdWYXJTcGVjdWxh
dGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gISh2YWx1ZSAmIFNwZWNT
dHJpbmdWYXIpOworfQorCiBpbmxpbmUgYm9vbCBpc1N0cmluZ1NwZWN1bGF0aW9uKFNwZWN1bGF0
ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVybiAhIXZhbHVlICYmICh2YWx1ZSAmIFNwZWNTdHJp
bmcpID09IHZhbHVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCShyZXZpc2lvbiAxNjU2ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzYsNiArNDM2LDI2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgZml4RWRnZTxNaXNjVXNlPihub2RlLT5jaGlsZDIoKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZ0lkZW50KCkKKyAgICAgICAgICAg
ICAgICAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlTm90U3RyaW5nVmFyKCkpIHsK
KyAgICAgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ0lkZW50VXNlPihub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICAgICAgZml4RWRnZTxOb3RTdHJpbmdWYXJVc2U+KG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nSWRlbnQoKQorICAgICAgICAg
ICAgICAgICYmIG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOb3RTdHJpbmdWYXIoKSkg
eworICAgICAgICAgICAgICAgIGZpeEVkZ2U8U3RyaW5nSWRlbnRVc2U+KG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgICAgICAgICBmaXhFZGdlPE5vdFN0cmluZ1ZhclVzZT4obm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgeworICAgICAgICAg
ICAgICAgIGZpeEVkZ2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkt
PnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAgICAgICAgICAgZml4RWRnZTxTdHJp
bmdVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNjU2ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxOSw2ICsxNDE5LDExIEBA
IHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIHJldHVybiBpc1N0cmluZ0lkZW50U3BlY3Vs
YXRpb24ocHJlZGljdGlvbigpKTsKICAgICB9CisgICAgCisgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVOb3RTdHJpbmdWYXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzTm90U3RyaW5nVmFyU3Bl
Y3VsYXRpb24ocHJlZGljdGlvbigpKTsKKyAgICB9CiAgCiAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVTdHJpbmcoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTY1Njg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDc0NSw2ICs0NzQ1LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcihKU0NlbGwKICAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCiAg
ICAgICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7CiB9CisKK0pJVENvbXBpbGVyOjpKdW1wIGJy
YW5jaElzQ2VsbChKU1ZhbHVlUmVncyByZWdzKQoreworICAgIHJldHVybiBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSk7Cit9CisKK0pJVENvbXBpbGVyOjpKdW1wIGJyYW5jaE5vdENlbGwoSlNW
YWx1ZVJlZ3MgcmVncykKK3sKKyAgICByZXR1cm4gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZykpOworfQogI2VuZGlmIC8vIEVOQUJMRShHR0MpCiAKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAxNjU2ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQ7CiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50SXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5v
ZGUoKSkpCi0gICAgICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBhcmdHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAg
ICAgICAgICBub3RDZWxsID0gYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyhhcmdHUFIpKTsKIAog
ICAgICAgICBtX2ppdC5tb3ZlKGludmVydCA/IFRydXN0ZWRJbW0zMigxKSA6IFRydXN0ZWRJbW0z
MigwKSwgcmVzdWx0R1BSKTsKICAgICAgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IG1f
aml0Lmp1bXAoKTsKQEAgLTI1Miw4ICsyNTIsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZU5vblBlCiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogCiAg
ICAgICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQotICAgICAgICAgICAgbm90
Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgYXJnR1BS
LCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotCisgICAgICAgICAgICBub3RDZWxsID0gYnJh
bmNoTm90Q2VsbChKU1ZhbHVlUmVncyhhcmdHUFIpKTsKKyAgICAgICAgCiAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IG1faml0LmJyYW5jaFRlc3Q4
KAogICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sIAogICAgICAgICAgICAgSklUQ29t
cGlsZXI6OkFkZHJlc3MoYXJnR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIApA
QCAtMzExLDggKzMxMSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVl
cGgKICAgICAKICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxs
VmFsaWQoKSkgewogICAgICAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQubm9kZSgpKSkKLSAg
ICAgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLQorICAgICAgICAgICAg
bm90Q2VsbCA9IGJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3MoYXJnR1BSKSk7CisgICAgICAgIAog
ICAgICAgICBqdW1wKGludmVydCA/IHRha2VuIDogbm90VGFrZW4sIEZvcmNlSnVtcCk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGxvY2FsR2xvYmFsT2JqZWN0KHRoaXMpOwpA
QCAtMzIwLDggKzMyMCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVl
cGgKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKICAgICAgICAgaWYgKCFp
c0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpCi0gICAgICAgICAgICBub3RDZWxsID0gbV9qaXQu
YnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBhcmdHUFIsIEdQUkluZm86OnRh
Z01hc2tSZWdpc3Rlcik7Ci0KKyAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKEpT
VmFsdWVSZWdzKGFyZ0dQUikpOworICAgICAgICAKICAgICAgICAgYnJhbmNoVGVzdDgoSklUQ29t
cGlsZXI6Olplcm8sIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYXJnR1BSLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSwgCkBAIC0xMzY3LDcgKzEzNjcs
NyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAKICAgICAgICAg
aW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAg
aWYgKHR5cGUgJiB+U3BlY0NlbGwpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgYnJh
bmNoTm90Q2VsbChKU1ZhbHVlUmVncyhncHIpKSk7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUo
Km1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICByZXR1cm4gZ3ByOwog
ICAgIH0KQEAgLTUwNzksNiArNTA3OSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJh
cnJpZXIoSlNDZWxsCiAgICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQogICAg
ICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOwogfQorCitKSVRDb21waWxlcjo6SnVtcCBicmFu
Y2hJc0NlbGwoSlNWYWx1ZVJlZ3MgcmVncykKK3sKKyAgICByZXR1cm4gbV9qaXQuYnJhbmNoVGVz
dDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVn
aXN0ZXIpOworfQorCitKSVRDb21waWxlcjo6SnVtcCBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdz
IHJlZ3MpCit7CisgICAgcmV0dXJuIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKK30KICNlbmRp
ZiAvLyBFTkFCTEUoR0dDKQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNjU2ODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzg4MCw2ICszODgwLDM4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJp
bmdJZGVudEUKICNlbmRpZgogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5n
SWRlbnRUb05vdFN0cmluZ1ZhckVxdWFsaXR5KAorICAgIE5vZGUqIG5vZGUsIEVkZ2Ugc3RyaW5n
RWRnZSwgRWRnZSBub3RTdHJpbmdWYXJFZGdlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGxlZnQodGhpcywgc3RyaW5nRWRnZSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgcmlnaHQodGhpcywg
bm90U3RyaW5nVmFyRWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICBHUFJUZW1w
b3JhcnkgbGVmdFRlbXAodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHJpZ2h0VGVtcCh0aGlzKTsK
KyAgICAKKyAgICBHUFJSZWcgbGVmdEdQUiA9IGxlZnQuZ3ByKCk7CisgICAgR1BSUmVnIHJpZ2h0
R1BSID0gcmlnaHQuZ3ByKCk7CisgICAgR1BSUmVnIGxlZnRUZW1wR1BSID0gbGVmdFRlbXAuZ3By
KCk7CisgICAgR1BSUmVnIHJpZ2h0VGVtcEdQUiA9IHJpZ2h0VGVtcC5ncHIoKTsKKworICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCB0cnVlQ2FzZTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qg
ZmFsc2VDYXNlOworICAgIAorICAgIHNwZWN1bGF0ZVN0cmluZyhub2RlLT5jaGlsZDEoKSwgbGVm
dEdQUik7CisgICAgc3BlY3VsYXRlU3RyaW5nKG5vZGUtPmNoaWxkMigpLCByaWdodEdQUik7Cisg
ICAgCisgICAgc3BlY3VsYXRlU3RyaW5nSWRlbnRBbmRMb2FkU3RvcmFnZShub2RlLT5jaGlsZDEo
KSwgbGVmdEdQUiwgbGVmdFRlbXBHUFIpOworICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50QW5kTG9h
ZFN0b3JhZ2Uobm9kZS0+Y2hpbGQyKCksIHJpZ2h0R1BSLCByaWdodFRlbXBHUFIpOworICAgIAor
ICAgIG1faml0LmNvbXBhcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBsZWZ0VGVtcEdQUiwg
cmlnaHRUZW1wR1BSLCBsZWZ0VGVtcEdQUik7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgbGVmdFRlbXBHUFIpOworICAg
IGpzVmFsdWVSZXN1bHQobGVmdFRlbXBHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwor
I2Vsc2UKKyAgICBib29sZWFuUmVzdWx0KGxlZnRUZW1wR1BSLCBub2RlKTsKKyNlbmRpZgorfQor
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5nWmVyb0xlbmd0aChOb2RlKiBub2Rl
KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHN0cih0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CkBAIC00NjEwLDcgKzQ2NDIsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmpl
Y3RPck90CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTdHJpbmcoRWRnZSBlZGdlLCBH
UFJSZWcgY2VsbCkKIHsKICAgICBERkdfVFlQRV9DSEVDSygKLSAgICAgICAgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwoY2VsbCksIGVkZ2UsIFNwZWNTdHJpbmcsIG1faml0LmJyYW5jaFN0cnVj
dHVyZVB0cigKKyAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2VsbCksIGVkZ2Us
IFNwZWNTdHJpbmcgfCB+U3BlY0NlbGwsCisgICAgICAgIG1faml0LmJyYW5jaFN0cnVjdHVyZVB0
cigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgCiAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCAKICAgICAgICAgICAgIG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwpAQCAt
NDYzMiw3ICs0NjY1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nSWRl
bgogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZSwgU3RyaW5nSW1w
bDo6ZmxhZ3NPZmZzZXQoKSksCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKFN0cmluZ0ltcGw6OmZsYWdJc0lkZW50aWZpZXIoKSkpKTsKICAgICAKLSAgICBtX2ludGVy
cHJldGVyLmZpbHRlcihlZGdlLCBTcGVjU3RyaW5nSWRlbnQpOworICAgIG1faW50ZXJwcmV0ZXIu
ZmlsdGVyKGVkZ2UsIFNwZWNTdHJpbmdJZGVudCB8IH5TcGVjU3RyaW5nKTsKIH0KIAogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nSWRlbnQoRWRnZSBlZGdlLCBHUFJSZWcgc3Ry
aW5nKQpAQCAtNDcwOSw2ICs0NzQyLDMzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0
ZVN0cmluZ09yU3QKICAgICBtX2ludGVycHJldGVyLmZpbHRlcihlZGdlLCBTcGVjU3RyaW5nIHwg
U3BlY1N0cmluZ09iamVjdCk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU5v
dFN0cmluZ1ZhcihFZGdlIGVkZ2UpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlz
LCBlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFyeSB0ZW1w
KHRoaXMpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hU
ZXN0NjQoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcGVyYW5kLmdwcigpLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgIEdQUlJlZyBjZWxsID0gb3BlcmFuZC5ncHIo
KTsKKyNlbHNlCisgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMy
KAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wZXJhbmQudGFnR1BSKCksIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgR1BSUmVnIGNlbGwgPSBvcGVyYW5k
LnBheWxvYWRHUFIoKTsKKyNlbmRpZgorICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFN0
cmluZyA9IG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICBtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpOworICAgIAorICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50QW5kTG9hZFN0b3JhZ2Uo
ZWRnZSwgY2VsbCwgdGVtcEdQUik7CisgICAgCisgICAgbm90U3RyaW5nLmxpbmsoJm1faml0KTsK
KyAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRlTm90Q2VsbChFZGdlIGVkZ2UpCiB7CiAgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdl
LCB+U3BlY0NlbGwpKQpAQCAtNDgzNCw2ICs0ODk0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRlKE5vZGUqLCBFZAogICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CiAg
ICAgICAgIHNwZWN1bGF0ZVN0cmluZ09yU3RyaW5nT2JqZWN0KGVkZ2UpOwogICAgICAgICBicmVh
azsKKyAgICBjYXNlIE5vdFN0cmluZ1ZhclVzZToKKyAgICAgICAgc3BlY3VsYXRlTm90U3RyaW5n
VmFyKGVkZ2UpOworICAgICAgICBicmVhazsKICAgICBjYXNlIE5vdENlbGxVc2U6CiAgICAgICAg
IHNwZWN1bGF0ZU5vdENlbGwoZWRnZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTY1Njg5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTgyLDYgKzE5ODIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxl
TG9naWNhbE5vdChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlU3RyaW5nRXF1YWxpdHkoTm9kZSop
OwogICAgIHZvaWQgY29tcGlsZVN0cmluZ0lkZW50RXF1YWxpdHkoTm9kZSopOworICAgIHZvaWQg
Y29tcGlsZVN0cmluZ1RvVW50eXBlZEVxdWFsaXR5KE5vZGUqLCBFZGdlIHN0cmluZ0VkZ2UsIEVk
Z2UgdW50eXBlZEVkZ2UpOworICAgIHZvaWQgY29tcGlsZVN0cmluZ0lkZW50VG9Ob3RTdHJpbmdW
YXJFcXVhbGl0eShOb2RlKiwgRWRnZSBzdHJpbmdFZGdlLCBFZGdlIG5vdFN0cmluZ1ZhckVkZ2Up
OwogICAgIHZvaWQgY29tcGlsZVN0cmluZ1plcm9MZW5ndGgoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZU1pc2NTdHJpY3RFcShOb2RlKik7CiAKQEAgLTIwNzgsNiArMjA4MCw5IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbkV4cHJlc3Npb24oTm9kZSopOwogICAgIGJvb2wg
Y29tcGlsZVJlZ0V4cEV4ZWMoTm9kZSopOwogICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIGJy
YW5jaElzQ2VsbChKU1ZhbHVlUmVncyk7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgYnJhbmNoTm90
Q2VsbChKU1ZhbHVlUmVncyk7CisgICAgCiAgICAgLy8gc2l6ZSBjYW4gYmUgYW4gaW1tZWRpYXRl
IG9yIGEgcmVnaXN0ZXIsIGFuZCBtdXN0IGJlIGluIGJ5dGVzLiBJZiBzaXplIGlzIGEgcmVnaXN0
ZXIsCiAgICAgLy8gaXQgbXVzdCBiZSBhIGRpZmZlcmVudCByZWdpc3RlciB0aGFuIHJlc3VsdEdQ
Ui4gRW1pdHMgY29kZSB0aGF0IHBsYWNlIGEgcG9pbnRlciB0bwogICAgIC8vIHRoZSBlbmQgb2Yg
dGhlIGFsbG9jYXRpb24uIFRoZSByZXR1cm5lZCBqdW1wIGlzIHRoZSBqdW1wIHRvIHRoZSBzbG93
IHBhdGguCkBAIC0yMTkzLDYgKzIxOTgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzcGVjdWxhdGVT
dHJpbmdJZGVudChFZGdlIGVkZ2UsIEdQUlJlZyBzdHJpbmcpOwogICAgIHZvaWQgc3BlY3VsYXRl
U3RyaW5nSWRlbnQoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoRWRnZSk7CisgICAg
dm9pZCBzcGVjdWxhdGVOb3RTdHJpbmdWYXIoRWRnZSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
U3RydWN0dXJlTG9jYXRpb25UeXBlPgogICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9y
U3RydWN0dXJlKEVkZ2UsIFN0cnVjdHVyZUxvY2F0aW9uVHlwZSk7CiAgICAgdm9pZCBzcGVjdWxh
dGVTdHJpbmdPYmplY3QoRWRnZSwgR1BSUmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVXNlS2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdVc2VLaW5kLmNwcAkocmV2aXNpb24gMTY1Njg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsOSBA
QCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVXNlCiAgICAgY2FzZSBTdHJp
bmdPclN0cmluZ09iamVjdFVzZToKICAgICAgICAgb3V0LnByaW50KCJTdHJpbmdPclN0cmluZ09i
amVjdCIpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vdFN0cmluZ1ZhclVzZToKKyAgICAg
ICAgb3V0LnByaW50KCJOb3RTdHJpbmdWYXIiKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBO
b3RDZWxsVXNlOgogICAgICAgICBvdXQucHJpbnQoIk5vdENlbGwiKTsKICAgICAgICAgYnJlYWs7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMTY1
Njg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDYgKzUyLDcgQEAgZW51bSBVc2VLaW5kIHsKICAgICBLbm93blN0cmluZ1Vz
ZSwKICAgICBTdHJpbmdPYmplY3RVc2UsCiAgICAgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2UsCisg
ICAgTm90U3RyaW5nVmFyVXNlLAogICAgIE5vdENlbGxVc2UsCiAgICAgT3RoZXJVc2UsCiAgICAg
TWlzY1VzZSwKQEAgLTkzLDYgKzk0LDggQEAgQUxXQVlTX0lOTElORSBTcGVjdWxhdGVkVHlwZSB0
eXBlRmlsdGVyRgogICAgICAgICByZXR1cm4gU3BlY1N0cmluZ09iamVjdDsKICAgICBjYXNlIFN0
cmluZ09yU3RyaW5nT2JqZWN0VXNlOgogICAgICAgICByZXR1cm4gU3BlY1N0cmluZyB8IFNwZWNT
dHJpbmdPYmplY3Q7CisgICAgY2FzZSBOb3RTdHJpbmdWYXJVc2U6CisgICAgICAgIHJldHVybiB+
U3RyaW5nVmFyOwogICAgIGNhc2UgTm90Q2VsbFVzZToKICAgICAgICAgcmV0dXJuIH5TcGVjQ2Vs
bDsKICAgICBjYXNlIE90aGVyVXNlOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226868</attachid>
            <date>2014-03-16 18:24:55 -0700</date>
            <delta_ts>2014-03-16 21:28:47 -0700</delta_ts>
            <desc>moar!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33198</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5oCShyZXZpc2lvbiAxNjU2ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3BlY3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCwxMSBAQCBpbmxp
bmUgYm9vbCBpc1N0cmluZ0lkZW50U3BlY3VsYXRpb24oU3BlCiAgICAgcmV0dXJuIHZhbHVlID09
IFNwZWNTdHJpbmdJZGVudDsKIH0KIAoraW5saW5lIGJvb2wgaXNOb3RTdHJpbmdWYXJTcGVjdWxh
dGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gISh2YWx1ZSAmIFNwZWNT
dHJpbmdWYXIpOworfQorCiBpbmxpbmUgYm9vbCBpc1N0cmluZ1NwZWN1bGF0aW9uKFNwZWN1bGF0
ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVybiAhIXZhbHVlICYmICh2YWx1ZSAmIFNwZWNTdHJp
bmcpID09IHZhbHVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCShyZXZpc2lvbiAxNjU2ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzYsNiArNDM2LDI2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgZml4RWRnZTxNaXNjVXNlPihub2RlLT5jaGlsZDIoKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZ0lkZW50KCkKKyAgICAgICAgICAg
ICAgICAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlTm90U3RyaW5nVmFyKCkpIHsK
KyAgICAgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ0lkZW50VXNlPihub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICAgICAgZml4RWRnZTxOb3RTdHJpbmdWYXJVc2U+KG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nSWRlbnQoKQorICAgICAgICAg
ICAgICAgICYmIG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOb3RTdHJpbmdWYXIoKSkg
eworICAgICAgICAgICAgICAgIGZpeEVkZ2U8U3RyaW5nSWRlbnRVc2U+KG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgICAgICAgICBmaXhFZGdlPE5vdFN0cmluZ1ZhclVzZT4obm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgeworICAgICAgICAg
ICAgICAgIGZpeEVkZ2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkt
PnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAgICAgICAgICAgZml4RWRnZTxTdHJp
bmdVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNjU2ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxOSw2ICsxNDE5LDExIEBA
IHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIHJldHVybiBpc1N0cmluZ0lkZW50U3BlY3Vs
YXRpb24ocHJlZGljdGlvbigpKTsKICAgICB9CisgICAgCisgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVOb3RTdHJpbmdWYXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzTm90U3RyaW5nVmFyU3Bl
Y3VsYXRpb24ocHJlZGljdGlvbigpKTsKKyAgICB9CiAgCiAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVTdHJpbmcoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTY1Njg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjM2LDggKzIzNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlTm9uUGUKICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkOyAgIAogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxW
YWxpZCgpKSB7CiAgICAgICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQotICAg
ICAgICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgYXJnVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotCisgICAgICAg
ICAgICBub3RDZWxsID0gYnJhbmNoTm90Q2VsbChhcmcuanNWYWx1ZVJlZ3MoKSk7CisgICAgICAg
IAogICAgICAgICBtX2ppdC5tb3ZlKGludmVydCA/IFRydXN0ZWRJbW0zMigxKSA6IFRydXN0ZWRJ
bW0zMigwKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBtX2ppdC5qdW1wKCk7CiAgICAgfSBlbHNlIHsKQEAgLTI0NSw4ICsyNDUsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgICAgIEdQUlRlbXBv
cmFyeSByZW1vdGVHbG9iYWxPYmplY3QodGhpcyk7CiAKICAgICAgICAgaWYgKCFpc0tub3duQ2Vs
bChvcGVyYW5kLm5vZGUoKSkpCi0gICAgICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBhcmdUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSk7Ci0KKyAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKGFyZy5q
c1ZhbHVlUmVncygpKTsKKyAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgSklU
Q29tcGlsZXI6Ok5vblplcm8sIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYXJn
UGF5bG9hZEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCAKQEAgLTMwNSwxNiAr
MzA1LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKIAogICAg
IGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7CiAg
ICAgICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQotICAgICAgICAgICAgbm90
Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnVGFnR1BS
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotCisgICAgICAgICAgICBub3RDZWxs
ID0gYnJhbmNoTm90Q2VsbChhcmcuanNWYWx1ZVJlZ3MoKSk7CisgICAgICAgIAogICAgICAgICBq
dW1wKGludmVydCA/IHRha2VuIDogbm90VGFrZW4sIEZvcmNlSnVtcCk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IGxvY2FsR2xvYmFsT2JqZWN0KHRoaXMpOwogICAgICAgICBH
UFJUZW1wb3JhcnkgcmVtb3RlR2xvYmFsT2JqZWN0KHRoaXMpOwogCiAgICAgICAgIGlmICghaXNL
bm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQotICAgICAgICAgICAgbm90Q2VsbCA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnVGFnR1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZykpOwotCisgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoTm90Q2Vs
bChhcmcuanNWYWx1ZVJlZ3MoKSk7CisgICAgICAgIAogICAgICAgICBicmFuY2hUZXN0OChKSVRD
b21waWxlcjo6WmVybywgCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhhcmdQYXls
b2FkR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIAogICAgICAgICAgICAgSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSwgCkBAIC00NzQ1
LDYgKzQ3NDUsMzQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEpTQ2VsbAog
ICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKICAgICAgICAgaXNOb3RDZWxs
LmxpbmsoJm1faml0KTsKIH0KKworSklUQ29tcGlsZXI6Okp1bXAgYnJhbmNoSXNDZWxsKEpTVmFs
dWVSZWdzIHJlZ3MpCit7CisgICAgcmV0dXJuIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsK
K30KKworSklUQ29tcGlsZXI6Okp1bXAgYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyByZWdzKQor
eworICAgIHJldHVybiBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJl
Z3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7Cit9CisKK0pJVENv
bXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpicmFuY2hJc090aGVyKEpTVmFsdWVSZWdzIHJl
Z3MsIEdQUlJlZyB0ZW1wR1BSKQoreworICAgIG1faml0Lm1vdmUocmVncy50YWdHUFIoKSwgdGVt
cEdQUik7CisgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoMSksIHRlbXBHUFIpOworICAgIHJl
dHVybiBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB0ZW1w
R1BSLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bGxU
YWcpKTsKK30KKworSklUQ29tcGlsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6OmJyYW5jaE5vdE90
aGVyKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSKQoreworICAgIG1faml0Lm1vdmUo
cmVncy50YWdHUFIoKSwgdGVtcEdQUik7CisgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoMSks
IHRlbXBHUFIpOworICAgIHJldHVybiBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6Ok51bGxUYWcpKTsKK30KICNlbmRpZiAvLyBFTkFCTEUoR0dDKQogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTY1Njg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQyLDcgKzI0
Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICBKSVRD
b21waWxlcjo6SnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkOwogICAgIGlmIChtYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIGlmICgh
aXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQotICAgICAgICAgICAgbm90Q2VsbCA9IG1faml0
LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgYXJnR1BSLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaE5vdENlbGwoSlNW
YWx1ZVJlZ3MoYXJnR1BSKSk7CiAKICAgICAgICAgbV9qaXQubW92ZShpbnZlcnQgPyBUcnVzdGVk
SW1tMzIoMSkgOiBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CiAgICAgICAgIG5vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSBtX2ppdC5qdW1wKCk7CkBAIC0yNTIsOCArMjUyLDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQubm9k
ZSgpKSkKLSAgICAgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLQorICAg
ICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3MoYXJnR1BSKSk7Cisg
ICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBtX2ppdC5icmFuY2hUZXN0OCgKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJv
LCAKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGFyZ0dQUiwgSlNDZWxsOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCAKQEAgLTMxMSw4ICszMTEsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgCiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgaWYgKCFpc0tub3duQ2Vs
bChvcGVyYW5kLm5vZGUoKSkpCi0gICAgICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVz
dDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBhcmdHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdp
c3Rlcik7Ci0KKyAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdz
KGFyZ0dQUikpOworICAgICAgICAKICAgICAgICAganVtcChpbnZlcnQgPyB0YWtlbiA6IG5vdFRh
a2VuLCBGb3JjZUp1bXApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBsb2Nh
bEdsb2JhbE9iamVjdCh0aGlzKTsKQEAgLTMyMCw4ICszMjAsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMpOwogCiAgICAgICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQotICAgICAg
ICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgYXJnR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotCisgICAgICAgICAgICBub3RD
ZWxsID0gYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyhhcmdHUFIpKTsKKyAgICAgICAgCiAgICAg
ICAgIGJyYW5jaFRlc3Q4KEpJVENvbXBpbGVyOjpaZXJvLCAKICAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpBZGRyZXNzKGFyZ0dQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCAKICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCksIApAQCAtMTM2Nyw3ICsxMzY3LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlQ2VsbAogCiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERh
dGFGb3JtYXRKUyk7CiAgICAgICAgIGlmICh0eXBlICYgflNwZWNDZWxsKQotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBtX2ppdC5i
cmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKGdwciksIGVkZ2UsIGJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3MoZ3ByKSkpOwogICAg
ICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsK
ICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC0xMzc3LDcgKzEzNzcsNyBAQCBHUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgICAgIEdQUlJlZyBncHIgPSBp
bmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhncHIpOwogICAgICAgICBpZiAoIUFTU0VS
VF9ESVNBQkxFRCkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2tDZWxs
ID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBncHIsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVj
a0NlbGwgPSBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKGdwcikpOwogICAgICAgICAgICAgbV9q
aXQuYnJlYWtwb2ludCgpOwogICAgICAgICAgICAgY2hlY2tDZWxsLmxpbmsoJm1faml0KTsKICAg
ICAgICAgfQpAQCAtMTM4OCw3ICsxMzg4LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlQ2VsbAogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAg
bV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgaWYgKHR5cGUgJiB+U3BlY0NlbGwpCi0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIG1f
aml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyhncHIpKSk7
CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Nl
bGwpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTE2MjIsOCArMTYyMiw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUKICAgICAKICAgICAvLyBJdCBz
ZWVtcyB0aGF0IG1vc3Qgb2YgdGhlIHRpbWUgd2hlbiBwcm9ncmFtcyBkbyBhID09IGIgd2hlcmUg
YiBtYXkgYmUgZWl0aGVyIG51bGwvdW5kZWZpbmVkCiAgICAgLy8gb3IgYW4gb2JqZWN0LCBiIGlz
IHVzdWFsbHkgYW4gb2JqZWN0LiBCYWxhbmNlIHRoZSBicmFuY2hlcyB0byBtYWtlIHRoYXQgY2Fz
ZSBmYXN0LgotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJpZ2h0Tm90Q2VsbCA9Ci0gICAgICAg
IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AyR1BSLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJpZ2h0Tm90
Q2VsbCA9IGJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3Mob3AyR1BSKSk7CiAgICAgCiAgICAgLy8g
V2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2Vs
bC4gCiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKQEAg
LTE3MTMsOCArMTcxMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9i
amUKIAogICAgIC8vIEl0IHNlZW1zIHRoYXQgbW9zdCBvZiB0aGUgdGltZSB3aGVuIHByb2dyYW1z
IGRvIGEgPT0gYiB3aGVyZSBiIG1heSBiZSBlaXRoZXIgbnVsbC91bmRlZmluZWQKICAgICAvLyBv
ciBhbiBvYmplY3QsIGIgaXMgdXN1YWxseSBhbiBvYmplY3QuIEJhbGFuY2UgdGhlIGJyYW5jaGVz
IHRvIG1ha2UgdGhhdCBjYXNlIGZhc3QuCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmlnaHRO
b3RDZWxsID0KLSAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCBvcDJHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgcmlnaHROb3RDZWxsID0gYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyhvcDJHUFIp
KTsKICAgICAKICAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGluIHRoaXMgYnJhbmNoLCByaWdodENo
aWxkIG11c3QgYmUgYSBjZWxsLiAKICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnRWYWxpZCkgewpAQCAtMTg0Nyw3ICsxODQ1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU9iamVjdE9yT3RoZQogICAgICAgICBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
ICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNo
VGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gYnJhbmNoTm90
Q2VsbChKU1ZhbHVlUmVncyh2YWx1ZUdQUikpOwogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludFZhbGlkKSB7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmpl
Y3QsIG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKQEAgLTE5OTcsNyArMTk5NSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICAgICAgc3RydWN0dXJlR1BS
ID0gc3RydWN0dXJlLmdwcigpOwogICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5v
dENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVl
R1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7CiAgICAgaWYg
KG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCkpIHsKICAgICAg
ICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5v
ZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJhbmNoU3RydWN0dXJlUHRy
KApAQCAtMzQyMiw3ICszNDIwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICAKICAgICAgICAgb3AxLnVzZSgpOwogICAgICAgICAKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgYWxyZWFkeVByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFRlc3Q2
NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhbHJlYWR5UHJpbWl0aXZlID0gYnJh
bmNoTm90Q2VsbChKU1ZhbHVlUmVncyhvcDFHUFIpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbm90UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoU3RydWN0dXJlUHRyKAogICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCkBAIC0zNDUw
LDggKzM0NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmU7CiAgICAgICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNTdHJpbmcpIHsKLSAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aDEgPSBtX2ppdC5icmFuY2hU
ZXN0NjQoCi0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLCBvcDFHUFIs
IEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgc2xvd1BhdGgxID0gYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyhvcDFHUFIpKTsKICAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aDIgPSBtX2ppdC5icmFuY2hT
dHJ1Y3R1cmVQdHIoCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwK
ICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLApAQCAtMzgxMCw4ICszODA3LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRl
bXAuZ3ByKCk7CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xv
d0Nhc2VzOwotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NCgKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0aGlzVmFsdWVHUFIsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaE5vdENl
bGwoSlNWYWx1ZVJlZ3ModGhpc1ZhbHVlR1BSKSkpOwogICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaDgoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0aGlzVmFsdWVHUFIsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLApAQCAtNDAwOCw3ICs0MDA0LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAKICAgICAgICAgICAgIGJhc2Uu
dXNlKCk7CiAgICAgICAgIAotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9
IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5m
bzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENl
bGwgPSBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKGJhc2VHUFIpKTsKICAgICAgICAgCiAgICAg
ICAgICAgICBjYWNoZWRHZXRCeUlkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgYmFzZUdQUiwgcmVz
dWx0R1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGwpOwogICAgICAgICAKQEAg
LTQwNTgsNyArNDA1NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygp
OwogICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBtX2pp
dC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGJhc2VHUFIsIEdQUkluZm86OnRh
Z01hc2tSZWdpc3Rlcik7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0g
YnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyhiYXNlR1BSKSk7CiAgICAgICAgIAogICAgICAgICAg
ICAgY2FjaGVkR2V0QnlJZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGJhc2VHUFIsIHJlc3VsdEdQ
Uiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsLCBEb250U3BpbGwpOwogICAgICAg
ICAKQEAgLTQzODksNyArNDM4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlbW90ZUdsb2JhbE9iamVjdCh0aGlzKTsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKLSAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCB2
YWx1ZS5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNDZWxsID0gYnJhbmNoSXNDZWxsKHZhbHVlLmpzVmFsdWVSZWdzKCkpOwogCiAg
ICAgICAgIG1faml0LmNvbXBhcmU2NChKSVRDb21waWxlcjo6RXF1YWwsIHZhbHVlLmdwcigpLCBU
cnVzdGVkSW1tMzIoVmFsdWVVbmRlZmluZWQpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwpAQCAtNDQ0OSw3ICs0NDQ1LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVlKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9u
WmVybywgdmFsdWUuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaE5vdENlbGwodmFsdWUuanNWYWx1ZVJl
Z3MoKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5jb21wYXJlOChKSVRDb21waWxlcjo6RXF1
YWwsIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3ModmFsdWUuZ3ByKCksIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCAKQEAgLTQ1MDEsNyArNDQ5Nyw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgCiAgICAgICAgIEFTU0VS
VChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSB8fCBub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3Ry
aW5nVXNlKTsKIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5i
cmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBicmFu
Y2hOb3RDZWxsKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7CiAgICAgICAgIGlmIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgIT0gVW50eXBlZFVzZSkKICAgICAgICAgICAgIERGR19UWVBFX0NIRUNL
KEpTVmFsdWVTb3VyY2UodmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwsIGlzTm90
Q2VsbCk7CiAKQEAgLTUwNTYsOCArNTA1Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcihHUFJSZWcKIHsKICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGw7CiAgICAg
aWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQotICAgICAgICBpc05vdENlbGwgPSBt
X2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpOwotCisgICAgICAgIGlzTm90Q2VsbCA9IGJyYW5jaE5vdENlbGwo
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpKTsKKyAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBvd25l
ck5vdE1hcmtlZE9yQWxyZWFkeVJlbWVtYmVyZWQgPSBtX2ppdC5jaGVja01hcmtCeXRlKG93bmVy
R1BSKTsKICAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwg
c2NyYXRjaDIpOwogICAgIG93bmVyTm90TWFya2VkT3JBbHJlYWR5UmVtZW1iZXJlZC5saW5rKCZt
X2ppdCk7CkBAIC01MDcwLDggKzUwNjYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJh
cnJpZXIoSlNDZWxsCiB7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsOwogICAgIGlm
ICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsID0gbV9q
aXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKTsKLQorICAgICAgICBpc05vdENlbGwgPSBicmFuY2hOb3RDZWxsKEpT
VmFsdWVSZWdzKHZhbHVlR1BSKSk7CisgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgb3duZXJO
b3RNYXJrZWRPckFscmVhZHlSZW1lbWJlcmVkID0gbV9qaXQuY2hlY2tNYXJrQnl0ZShvd25lcik7
CiAgICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lciwgc2NyYXRjaDEsIHNjcmF0Y2gy
KTsKICAgICBvd25lck5vdE1hcmtlZE9yQWxyZWFkeVJlbWVtYmVyZWQubGluaygmbV9qaXQpOwpA
QCAtNTA3OSw2ICs1MDc1LDM0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihK
U0NlbGwKICAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCiAgICAgICAgIGlz
Tm90Q2VsbC5saW5rKCZtX2ppdCk7CiB9CisKK0pJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZl
SklUOjpicmFuY2hJc0NlbGwoSlNWYWx1ZVJlZ3MgcmVncykKK3sKKyAgICByZXR1cm4gbV9qaXQu
YnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZWdzLmdwcigpLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpOworfQorCitKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6
YnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyByZWdzKQoreworICAgIHJldHVybiBtX2ppdC5icmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHJlZ3MuZ3ByKCksIEdQUkluZm86OnRh
Z01hc2tSZWdpc3Rlcik7Cit9CisKK0pJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpi
cmFuY2hJc090aGVyKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSKQoreworICAgIG1f
aml0Lm1vdmUocmVncy5ncHIoKSwgdGVtcEdQUik7CisgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgdGVtcEdQUik7CisgICAgcmV0
dXJuIG1faml0LmJyYW5jaDY0KAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHRlbXBH
UFIsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSk7Cit9
CisKK0pJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpicmFuY2hOb3RPdGhlcihKU1Zh
bHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUikKK3sKKyAgICBtX2ppdC5tb3ZlKHJlZ3MuZ3By
KCksIHRlbXBHUFIpOworICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoflRhZ0JpdFVuZGVmaW5lZCksIHRlbXBHUFIpOworICAgIHJldHVybiBtX2ppdC5icmFuY2g2
NCgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLAorICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpOworfQogI2VuZGlmIC8vIEVO
QUJMRShHR0MpCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE2NTY4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTM5LDkgKzE5MzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMy
CiAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdW1iZXIgPSBtX2ppdC5icmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBERkdfVFlQ
RV9DSEVDSygKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS0+Y2hp
bGQxKCksIH5TcGVjQ2VsbCwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0
KAotICAgICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Olplcm8sIGdwciwgR1BSSW5m
bzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKGdw
ciksIG5vZGUtPmNoaWxkMSgpLCB+U3BlY0NlbGwsIGJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3Mo
Z3ByKSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90IGEg
Y2VsbDogc28gdHJ1ZSB0dXJucyBpbnRvIDEgYW5kIGFsbCBlbHNlIHR1cm5zIGludG8gMC4KICAg
ICAgICAgICAgICAgICBtX2ppdC5jb21wYXJlNjQoSklUQ29tcGlsZXI6OkVxdWFsLCBncHIsIFRy
dXN0ZWRJbW0zMihWYWx1ZVRydWUpLCByZXN1bHRHcHIpOwpAQCAtMjU0MiwxNCArMjU0MCwxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvCiAgICAgLy8gV2FsayB1
cCB0aGUgcHJvdG90eXBlIGNoYWluIG9mIHRoZSB2YWx1ZSAoaW4gc2NyYXRjaFJlZyksIGNvbXBh
cmluZyB0byBwcm90b3R5cGVSZWcuCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AoJm1f
aml0KTsKICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZShzY3JhdGNoUmVnLCBzY3JhdGNoUmVn
LCBzY3JhdGNoMlJlZyk7CisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoUmVnLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpICsgQ2VsbFBheWxvYWRP
ZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0luc3RhbmNl
ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaFJlZywgcHJv
dG90eXBlUmVnKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1faml0LmxvYWQ2NChNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgp
KSwgc2NyYXRjaFJlZyk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNJbnN0YW5jZSA9IG1f
aml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaFJlZywgcHJvdG90eXBl
UmVnKTsKLSAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0
Y2hSZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikubGlua1RvKGxvb3AsICZtX2ppdCk7Cisg
ICAgYnJhbmNoSXNDZWxsKEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKS5saW5rVG8obG9vcCwgJm1f
aml0KTsKICNlbHNlCi0gICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNj
cmF0Y2hSZWcsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCBzY3JhdGNoUmVnKTsKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBpc0luc3RhbmNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgc2NyYXRjaFJlZywgcHJvdG90eXBlUmVnKTsKLSAgICBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hSZWcpLmxpbmtUbyhsb29wLCAmbV9qaXQp
OworICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0
Y2hSZWcpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwogI2VuZGlmCiAgICAgCiAgICAgLy8gTm8gbWF0
Y2ggLSByZXN1bHQgaXMgZmFsc2UuCkBAIC0yNTg2LDE0ICsyNTgyLDExIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mKE4KICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcg
PSBzY3JhdGNoLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5n
cHIoKTsKICAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzQ2VsbCA9IGJy
YW5jaElzQ2VsbCh2YWx1ZS5qc1ZhbHVlUmVncygpKTsKKyAgICAgICAgR1BSUmVnIHZhbHVlUmVn
ID0gdmFsdWUuanNWYWx1ZVJlZ3MoKS5wYXlsb2FkR1BSKCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGlzQ2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6
WmVybywgdmFsdWVSZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKGZhbHNlKSkpLCBzY3JhdGNoUmVnKTsKICNlbHNlCi0gICAgICAgIEdQUlJlZyB2YWx1ZVRh
Z1JlZyA9IHZhbHVlLnRhZ0dQUigpOwotICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5w
YXlsb2FkR1BSKCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzQ2VsbCA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVUYWdSZWcsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSk7CiAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigwKSwgc2NyYXRjaFJlZyk7CiAjZW5kaWYKIApAQCAtMzg4MCw2ICszODcz
LDM4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdJZGVudEUKICNlbmRpZgog
fQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5nSWRlbnRUb05vdFN0cmluZ1Zh
ckVxdWFsaXR5KAorICAgIE5vZGUqIG5vZGUsIEVkZ2Ugc3RyaW5nRWRnZSwgRWRnZSBub3RTdHJp
bmdWYXJFZGdlKQoreworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGxlZnQodGhpcywgc3RyaW5n
RWRnZSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgcmlnaHQodGhpcywgbm90U3RyaW5nVmFyRWRnZSwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICBHUFJUZW1wb3JhcnkgbGVmdFRlbXAodGhp
cyk7CisgICAgR1BSVGVtcG9yYXJ5IHJpZ2h0VGVtcCh0aGlzKTsKKyAgICAKKyAgICBHUFJSZWcg
bGVmdEdQUiA9IGxlZnQuZ3ByKCk7CisgICAgR1BSUmVnIHJpZ2h0R1BSID0gcmlnaHQuZ3ByKCk7
CisgICAgR1BSUmVnIGxlZnRUZW1wR1BSID0gbGVmdFRlbXAuZ3ByKCk7CisgICAgR1BSUmVnIHJp
Z2h0VGVtcEdQUiA9IHJpZ2h0VGVtcC5ncHIoKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wTGlz
dCB0cnVlQ2FzZTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZmFsc2VDYXNlOworICAgIAor
ICAgIHNwZWN1bGF0ZVN0cmluZyhub2RlLT5jaGlsZDEoKSwgbGVmdEdQUik7CisgICAgc3BlY3Vs
YXRlU3RyaW5nKG5vZGUtPmNoaWxkMigpLCByaWdodEdQUik7CisgICAgCisgICAgc3BlY3VsYXRl
U3RyaW5nSWRlbnRBbmRMb2FkU3RvcmFnZShub2RlLT5jaGlsZDEoKSwgbGVmdEdQUiwgbGVmdFRl
bXBHUFIpOworICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50QW5kTG9hZFN0b3JhZ2Uobm9kZS0+Y2hp
bGQyKCksIHJpZ2h0R1BSLCByaWdodFRlbXBHUFIpOworICAgIAorICAgIG1faml0LmNvbXBhcmVQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBsZWZ0VGVtcEdQUiwgcmlnaHRUZW1wR1BSLCBsZWZ0
VGVtcEdQUik7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBtX2ppdC5vcjMyKFRydXN0
ZWRJbW0zMihWYWx1ZUZhbHNlKSwgbGVmdFRlbXBHUFIpOworICAgIGpzVmFsdWVSZXN1bHQobGVm
dFRlbXBHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworI2Vsc2UKKyAgICBib29sZWFu
UmVzdWx0KGxlZnRUZW1wR1BSLCBub2RlKTsKKyNlbmRpZgorfQorCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlU3RyaW5nWmVyb0xlbmd0aChOb2RlKiBub2RlKQogewogICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIHN0cih0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC00NTU5LDU4ICs0NTg0
LDI4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdE9yT3QKICAgICBKU1Zh
bHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7
CiAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1w
LmdwcigpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgR1BSUmVnIGdwciA9IG9wZXJhbmQuZ3By
KCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2
NCgKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gYnJhbmNoTm90
Q2VsbChvcGVyYW5kLmpzVmFsdWVSZWdzKCkpOworICAgIEdQUlJlZyBncHIgPSBvcGVyYW5kLmpz
VmFsdWVSZWdzKCkucGF5bG9hZEdQUigpOwogICAgIERGR19UWVBFX0NIRUNLKAotICAgICAgICBK
U1ZhbHVlUmVncyhncHIpLCBlZGdlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJy
YW5jaFN0cnVjdHVyZVB0cigKKyAgICAgICAgb3BlcmFuZC5qc1ZhbHVlUmVncygpLCBlZGdlLCAo
flNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhncHIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAogICAgICAgICAg
ICAgbV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsK
ICAgICBpZiAobmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKSB7Ci0g
ICAgICAgIG1faml0Lm1vdmUoZ3ByLCB0ZW1wR1BSKTsKLSAgICAgICAgbV9qaXQuYW5kNjQoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgdGVtcEdQUik7Ci0g
ICAgICAgIAotICAgICAgICB0eXBlQ2hlY2soCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhncHIp
LCBlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaDY0
KAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwKLSAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsK
LSAgICB9Ci0gICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0jZWxzZQotICAgIEdQUlJlZyB0YWdHUFIg
PSBvcGVyYW5kLnRhZ0dQUigpOwotICAgIEdQUlJlZyBwYXlsb2FkR1BSID0gb3BlcmFuZC5wYXls
b2FkR1BSKCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9Ci0gICAgICAgIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotICAgIERGR19UWVBFX0NIRUNLKAotICAgICAgICBKU1Zh
bHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBlZGdlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmpl
Y3QsIG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwYXlsb2FkR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIG1faml0LnZtKCkt
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUg
PSBtX2ppdC5qdW1wKCk7Ci0gICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7Ci0gICAgaWYgKG5lZWRz
VHlwZUNoZWNrKGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgewotICAgICAgICBtX2ppdC5t
b3ZlKHRhZ0dQUiwgdGVtcEdQUik7Ci0gICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEp
LCB0ZW1wR1BSKTsKLSAgICAgICAgCiAgICAgICAgIHR5cGVDaGVjaygKLSAgICAgICAgICAgIEpT
VmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVy
LAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpKTsKKyAgICAgICAgICAgIG9wZXJhbmQu
anNWYWx1ZVJlZ3MoKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsCisgICAgICAgICAgICBi
cmFuY2hOb3RPdGhlcihvcGVyYW5kLmpzVmFsdWVSZWdzKCksIHRlbXBHUFIpKTsKICAgICB9CiAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRlU3RyaW5nKEVkZ2UgZWRnZSwgR1BSUmVnIGNlbGwpCiB7CiAgICAgREZHX1RZUEVf
Q0hFQ0soCi0gICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGNlbGwpLCBlZGdlLCBT
cGVjU3RyaW5nLCBtX2ppdC5icmFuY2hTdHJ1Y3R1cmVQdHIoCisgICAgICAgIEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKGNlbGwpLCBlZGdlLCBTcGVjU3RyaW5nIHwgflNwZWNDZWxsLAorICAg
ICAgICBtX2ppdC5icmFuY2hTdHJ1Y3R1cmVQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbCwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCiAgICAgICAgICAgICBtX2ppdC52bSgpLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKQEAgLTQ2MzIsNyArNDYyNyw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmluZ0lkZW4KICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2UsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLAogICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihTdHJpbmdJbXBsOjpmbGFnSXNJZGVudGlm
aWVyKCkpKSk7CiAgICAgCi0gICAgbV9pbnRlcnByZXRlci5maWx0ZXIoZWRnZSwgU3BlY1N0cmlu
Z0lkZW50KTsKKyAgICBtX2ludGVycHJldGVyLmZpbHRlcihlZGdlLCBTcGVjU3RyaW5nSWRlbnQg
fCB+U3BlY1N0cmluZyk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmlu
Z0lkZW50KEVkZ2UgZWRnZSwgR1BSUmVnIHN0cmluZykKQEAgLTQ3MDksMjMgKzQ3MDQsMzMgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nT3JTdAogICAgIG1faW50ZXJwcmV0
ZXIuZmlsdGVyKGVkZ2UsIFNwZWNTdHJpbmcgfCBTcGVjU3RyaW5nT2JqZWN0KTsKIH0KIAordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTm90U3RyaW5nVmFyKEVkZ2UgZWRnZSkKK3sKKyAg
ICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbik7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgR1BSUmVnIHRlbXBHUFIg
PSB0ZW1wLmdwcigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBicmFu
Y2hOb3RDZWxsKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSk7CisgICAgR1BSUmVnIGNlbGwgPSBvcGVy
YW5kLmpzVmFsdWVSZWdzKCkucGF5bG9hZEdQUigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpK
dW1wIG5vdFN0cmluZyA9IG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxs
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICBtX2ppdC52bSgpLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgIAorICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50QW5kTG9h
ZFN0b3JhZ2UoZWRnZSwgY2VsbCwgdGVtcEdQUik7CisgICAgCisgICAgbm90U3RyaW5nLmxpbmso
Jm1faml0KTsKKyAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKK30KKwogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRlTm90Q2VsbChFZGdlIGVkZ2UpCiB7CiAgICAgaWYgKCFuZWVkc1R5cGVD
aGVjayhlZGdlLCB+U3BlY0NlbGwpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgSlNWYWx1
ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwot
I2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdHlwZUNoZWNrKAotICAgICAgICBKU1ZhbHVlUmVncyhv
cGVyYW5kLmdwcigpKSwgZWRnZSwgflNwZWNDZWxsLAotICAgICAgICBtX2ppdC5icmFuY2hUZXN0
NjQoCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6WmVybywgb3BlcmFuZC5ncHIoKSwgR1BSSW5m
bzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0jZWxzZQotICAgIHR5cGVDaGVjaygKLSAgICAgICAgSlNW
YWx1ZVJlZ3Mob3BlcmFuZC50YWdHUFIoKSwgb3BlcmFuZC5wYXlsb2FkR1BSKCkpLCBlZGdlLCB+
U3BlY0NlbGwsCi0gICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgSklUQ29tcGls
ZXI6OkVxdWFsLCBvcGVyYW5kLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZykpKTsKLSNlbmRpZgorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSwgTWFu
dWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsgCisgICAgdHlwZUNoZWNrKG9wZXJhbmQuanNWYWx1ZVJl
Z3MoKSwgZWRnZSwgflNwZWNDZWxsLCBicmFuY2hJc0NlbGwob3BlcmFuZC5qc1ZhbHVlUmVncygp
KSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU90aGVyKEVkZ2UgZWRnZSkK
QEAgLTQ3MzYsMjEgKzQ3NDEsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPdGhl
cihFZGdlCiAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pOwogICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgIEdQUlJl
ZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1faml0Lm1v
dmUob3BlcmFuZC5ncHIoKSwgdGVtcEdQUik7Ci0gICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgdGVtcEdQUik7CiAgICAgdHlwZUNo
ZWNrKAogICAgICAgICBKU1ZhbHVlUmVncyhvcGVyYW5kLmdwcigpKSwgZWRnZSwgU3BlY090aGVy
LAotICAgICAgICBtX2ppdC5icmFuY2g2NCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgdGVtcEdQUiwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQoVmFsdWVOdWxsKSkpOwotI2Vsc2UKLSAgICBtX2ppdC5tb3ZlKG9wZXJhbmQudGFnR1BSKCks
IHRlbXBHUFIpOwotICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCB0ZW1wR1BSKTsKLSAg
ICB0eXBlQ2hlY2soCi0gICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQudGFnR1BSKCksIG9wZXJh
bmQucGF5bG9hZEdQUigpKSwgZWRnZSwgU3BlY090aGVyLAotICAgICAgICBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpOdWxsVGFnKSkpOwotI2VuZGlmICAgIAorICAgICAgICBicmFuY2hOb3RPdGhlcihvcGVyYW5k
LmpzVmFsdWVSZWdzKCksIHRlbXBHUFIpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRlTWlzYyhFZGdlIGVkZ2UsIEpTVmFsdWVSZWdzIHJlZ3MpCkBAIC00ODM0LDYgKzQ4Mjcs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2FzZSBT
dHJpbmdPclN0cmluZ09iamVjdFVzZToKICAgICAgICAgc3BlY3VsYXRlU3RyaW5nT3JTdHJpbmdP
YmplY3QoZWRnZSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm90U3RyaW5nVmFyVXNlOgor
ICAgICAgICBzcGVjdWxhdGVOb3RTdHJpbmdWYXIoZWRnZSk7CisgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgTm90Q2VsbFVzZToKICAgICAgICAgc3BlY3VsYXRlTm90Q2VsbChlZGdlKTsKICAgICAg
ICAgYnJlYWs7CkBAIC00OTgyLDE3ICs0OTc4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dFN3aXRjaENoYXIoTm9kZQogICAgICAgICAKICAgICAgICAgb3AxLnVzZSgpOwogICAgICAgICAK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBhZGRCcmFuY2goCi0gICAgICAgICAgICBtX2pp
dC5icmFuY2hUZXN0NjQoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IG9wMVJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlciksCi0gICAgICAgICAgICBk
YXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7Ci0jZWxzZQotICAgICAgICBhZGRCcmFuY2goCi0gICAg
ICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIG9wMVJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSksCi0gICAgICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7Ci0jZW5kaWYKKyAgICAg
ICAgYWRkQnJhbmNoKGJyYW5jaE5vdENlbGwob3AxUmVncykpOwogICAgICAgICAKICAgICAgICAg
YWRkQnJhbmNoKAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoU3RydWN0dXJlUHRyKApAQCAtNTI4
MiwxNyArNTI2OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmcoTm8K
ICAgICAgICAgCiAgICAgICAgIG9wMS51c2UoKTsKICAgICAgICAgCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgYWRkQnJhbmNoKAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDFSZWdzLmdwcigpLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLAotICAgICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2gu
YmxvY2spOwotI2Vsc2UKLSAgICAgICAgYWRkQnJhbmNoKAotICAgICAgICAgICAgbV9qaXQuYnJh
bmNoMzIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFSZWdz
LnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpLAotICAgICAgICAgICAg
ZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spOwotI2VuZGlmCisgICAgICAgIGFkZEJyYW5jaChicmFu
Y2hOb3RDZWxsKG9wMVJlZ3MpKTsKICAgICAgICAgCiAgICAgICAgIGFkZEJyYW5jaCgKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE2NTY4OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTk4Miw2ICsxOTgyLDggQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxO
b3QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVN0cmluZ0VxdWFsaXR5KE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVTdHJpbmdJZGVudEVxdWFsaXR5KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVT
dHJpbmdUb1VudHlwZWRFcXVhbGl0eShOb2RlKiwgRWRnZSBzdHJpbmdFZGdlLCBFZGdlIHVudHlw
ZWRFZGdlKTsKKyAgICB2b2lkIGNvbXBpbGVTdHJpbmdJZGVudFRvTm90U3RyaW5nVmFyRXF1YWxp
dHkoTm9kZSosIEVkZ2Ugc3RyaW5nRWRnZSwgRWRnZSBub3RTdHJpbmdWYXJFZGdlKTsKICAgICB2
b2lkIGNvbXBpbGVTdHJpbmdaZXJvTGVuZ3RoKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVNaXNj
U3RyaWN0RXEoTm9kZSopOwogCkBAIC0yMDc4LDYgKzIwODAsMTEgQEAgcHVibGljOgogICAgIHZv
aWQgY29tcGlsZU5ld0Z1bmN0aW9uRXhwcmVzc2lvbihOb2RlKik7CiAgICAgYm9vbCBjb21waWxl
UmVnRXhwRXhlYyhOb2RlKik7CiAgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgYnJhbmNoSXND
ZWxsKEpTVmFsdWVSZWdzKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBicmFuY2hOb3RDZWxsKEpT
VmFsdWVSZWdzKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBicmFuY2hJc090aGVyKEpTVmFsdWVS
ZWdzLCBHUFJSZWcgdGVtcEdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgYnJhbmNoTm90T3Ro
ZXIoSlNWYWx1ZVJlZ3MsIEdQUlJlZyB0ZW1wR1BSKTsKKyAgICAKICAgICAvLyBzaXplIGNhbiBi
ZSBhbiBpbW1lZGlhdGUgb3IgYSByZWdpc3RlciwgYW5kIG11c3QgYmUgaW4gYnl0ZXMuIElmIHNp
emUgaXMgYSByZWdpc3RlciwKICAgICAvLyBpdCBtdXN0IGJlIGEgZGlmZmVyZW50IHJlZ2lzdGVy
IHRoYW4gcmVzdWx0R1BSLiBFbWl0cyBjb2RlIHRoYXQgcGxhY2UgYSBwb2ludGVyIHRvCiAgICAg
Ly8gdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGlvbi4gVGhlIHJldHVybmVkIGp1bXAgaXMgdGhlIGp1
bXAgdG8gdGhlIHNsb3cgcGF0aC4KQEAgLTIxOTMsNiArMjIwMCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNwZWN1bGF0ZVN0cmluZ0lkZW50KEVkZ2UgZWRnZSwgR1BSUmVnIHN0cmluZyk7CiAgICAg
dm9pZCBzcGVjdWxhdGVTdHJpbmdJZGVudChFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZVN0cmlu
ZyhFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZU5vdFN0cmluZ1ZhcihFZGdlKTsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBTdHJ1Y3R1cmVMb2NhdGlvblR5cGU+CiAgICAgdm9pZCBzcGVjdWxhdGVT
dHJpbmdPYmplY3RGb3JTdHJ1Y3R1cmUoRWRnZSwgU3RydWN0dXJlTG9jYXRpb25UeXBlKTsKICAg
ICB2b2lkIHNwZWN1bGF0ZVN0cmluZ09iamVjdChFZGdlLCBHUFJSZWcpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCShyZXZpc2lvbiAxNjU2ODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MSw2ICs5MSw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBVc2UK
ICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgogICAgICAgICBvdXQucHJpbnQoIlN0
cmluZ09yU3RyaW5nT2JqZWN0Iik7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm90U3RyaW5n
VmFyVXNlOgorICAgICAgICBvdXQucHJpbnQoIk5vdFN0cmluZ1ZhciIpOworICAgICAgICBicmVh
azsKICAgICBjYXNlIE5vdENlbGxVc2U6CiAgICAgICAgIG91dC5wcmludCgiTm90Q2VsbCIpOwog
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2lu
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5o
CShyZXZpc2lvbiAxNjU2ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtp
bmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBlbnVtIFVzZUtpbmQgewogICAg
IEtub3duU3RyaW5nVXNlLAogICAgIFN0cmluZ09iamVjdFVzZSwKICAgICBTdHJpbmdPclN0cmlu
Z09iamVjdFVzZSwKKyAgICBOb3RTdHJpbmdWYXJVc2UsCiAgICAgTm90Q2VsbFVzZSwKICAgICBP
dGhlclVzZSwKICAgICBNaXNjVXNlLApAQCAtOTMsNiArOTQsOCBAQCBBTFdBWVNfSU5MSU5FIFNw
ZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGCiAgICAgICAgIHJldHVybiBTcGVjU3RyaW5nT2JqZWN0
OwogICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CiAgICAgICAgIHJldHVybiBTcGVj
U3RyaW5nIHwgU3BlY1N0cmluZ09iamVjdDsKKyAgICBjYXNlIE5vdFN0cmluZ1ZhclVzZToKKyAg
ICAgICAgcmV0dXJuIH5TdHJpbmdWYXI7CiAgICAgY2FzZSBOb3RDZWxsVXNlOgogICAgICAgICBy
ZXR1cm4gflNwZWNDZWxsOwogICAgIGNhc2UgT3RoZXJVc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCShyZXZpc2lvbiAxNjU2ODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwMCw2ICsxMDAsMTIgQEAgdW5pb24gRW5jb2RlZFZhbHVlRGVzY3JpcHRvciB7CiAjZGVmaW5l
IFRhZ09mZnNldCAoT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy50YWcpKQogI2RlZmluZSBQYXlsb2FkT2Zmc2V0IChPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKQogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyNk
ZWZpbmUgQ2VsbFBheWxvYWRPZmZzZXQgMAorI2Vsc2UKKyNkZWZpbmUgQ2VsbFBheWxvYWRPZmZz
ZXQgUGF5bG9hZE9mZnNldAorI2VuZGlmCisKIGVudW0gV2hpY2hWYWx1ZVdvcmQgewogICAgIFRh
Z1dvcmQsCiAgICAgUGF5bG9hZFdvcmQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226876</attachid>
            <date>2014-03-16 21:28:47 -0700</date>
            <delta_ts>2014-03-17 21:53:55 -0700</delta_ts>
            <desc>getting there</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56441</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5oCShyZXZpc2lvbiAxNjU2ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3BlY3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDYgKzEyMCwxMSBAQCBpbmxp
bmUgYm9vbCBpc1N0cmluZ0lkZW50U3BlY3VsYXRpb24oU3BlCiAgICAgcmV0dXJuIHZhbHVlID09
IFNwZWNTdHJpbmdJZGVudDsKIH0KIAoraW5saW5lIGJvb2wgaXNOb3RTdHJpbmdWYXJTcGVjdWxh
dGlvbihTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gISh2YWx1ZSAmIFNwZWNT
dHJpbmdWYXIpOworfQorCiBpbmxpbmUgYm9vbCBpc1N0cmluZ1NwZWN1bGF0aW9uKFNwZWN1bGF0
ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVybiAhIXZhbHVlICYmICh2YWx1ZSAmIFNwZWNTdHJp
bmcpID09IHZhbHVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCShyZXZpc2lvbiAxNjU2ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzYsNiArNDM2LDI2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgZml4RWRnZTxNaXNjVXNlPihub2RlLT5jaGlsZDIoKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZ0lkZW50KCkKKyAgICAgICAgICAg
ICAgICAmJiBub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlTm90U3RyaW5nVmFyKCkpIHsK
KyAgICAgICAgICAgICAgICBmaXhFZGdlPFN0cmluZ0lkZW50VXNlPihub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICAgICAgZml4RWRnZTxOb3RTdHJpbmdWYXJVc2U+KG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nSWRlbnQoKQorICAgICAgICAg
ICAgICAgICYmIG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOb3RTdHJpbmdWYXIoKSkg
eworICAgICAgICAgICAgICAgIGZpeEVkZ2U8U3RyaW5nSWRlbnRVc2U+KG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgICAgICAgICBmaXhFZGdlPE5vdFN0cmluZ1ZhclVzZT4obm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgeworICAgICAgICAg
ICAgICAgIGZpeEVkZ2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkt
PnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAgICAgICAgICAgZml4RWRnZTxTdHJp
bmdVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNjU2ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxOSw2ICsxNDE5LDExIEBA
IHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIHJldHVybiBpc1N0cmluZ0lkZW50U3BlY3Vs
YXRpb24ocHJlZGljdGlvbigpKTsKICAgICB9CisgICAgCisgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVOb3RTdHJpbmdWYXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzTm90U3RyaW5nVmFyU3Bl
Y3VsYXRpb24ocHJlZGljdGlvbigpKTsKKyAgICB9CiAgCiAgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVTdHJpbmcoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTY1Njg5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjM2LDggKzIzNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlTm9uUGUKICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkOyAgIAogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxW
YWxpZCgpKSB7CiAgICAgICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQotICAg
ICAgICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgYXJnVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotCisgICAgICAg
ICAgICBub3RDZWxsID0gYnJhbmNoTm90Q2VsbChhcmcuanNWYWx1ZVJlZ3MoKSk7CisgICAgICAg
IAogICAgICAgICBtX2ppdC5tb3ZlKGludmVydCA/IFRydXN0ZWRJbW0zMigxKSA6IFRydXN0ZWRJ
bW0zMigwKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBtX2ppdC5qdW1wKCk7CiAgICAgfSBlbHNlIHsKQEAgLTI0NSw4ICsyNDUsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgICAgIEdQUlRlbXBv
cmFyeSByZW1vdGVHbG9iYWxPYmplY3QodGhpcyk7CiAKICAgICAgICAgaWYgKCFpc0tub3duQ2Vs
bChvcGVyYW5kLm5vZGUoKSkpCi0gICAgICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBhcmdUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSk7Ci0KKyAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKGFyZy5q
c1ZhbHVlUmVncygpKTsKKyAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgSklU
Q29tcGlsZXI6Ok5vblplcm8sIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYXJn
UGF5bG9hZEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCAKQEAgLTMwNSwxNiAr
MzA1LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKIAogICAg
IGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7CiAg
ICAgICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQotICAgICAgICAgICAgbm90
Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnVGFnR1BS
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotCisgICAgICAgICAgICBub3RDZWxs
ID0gYnJhbmNoTm90Q2VsbChhcmcuanNWYWx1ZVJlZ3MoKSk7CisgICAgICAgIAogICAgICAgICBq
dW1wKGludmVydCA/IHRha2VuIDogbm90VGFrZW4sIEZvcmNlSnVtcCk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IGxvY2FsR2xvYmFsT2JqZWN0KHRoaXMpOwogICAgICAgICBH
UFJUZW1wb3JhcnkgcmVtb3RlR2xvYmFsT2JqZWN0KHRoaXMpOwogCiAgICAgICAgIGlmICghaXNL
bm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQotICAgICAgICAgICAgbm90Q2VsbCA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnVGFnR1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZykpOwotCisgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoTm90Q2Vs
bChhcmcuanNWYWx1ZVJlZ3MoKSk7CisgICAgICAgIAogICAgICAgICBicmFuY2hUZXN0OChKSVRD
b21waWxlcjo6WmVybywgCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhhcmdQYXls
b2FkR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIAogICAgICAgICAgICAgSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSwgCkBAIC02ODIs
NyArNjgyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAg
ICAgbV9qaXQuZW1pdFN0b3JlQ29kZU9yaWdpbihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAg
IAotICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIGNhbGxlZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7Cisg
ICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaE5vdENlbGwoY2FsbGVlLmpzVmFsdWVSZWdzKCkpKTsK
ICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgY2FsbGVlUGF5bG9hZEdQUiwgdGFyZ2V0VG9DaGVjaykpOwogICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlUGF5bG9hZEdQUiwgT0JK
RUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGUpKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAg
ICAgbV9qaXQuc3RvcmVQdHIocmVzdWx0UGF5bG9hZEdQUiwgY2FsbGVlRnJhbWVQYXlsb2FkU2xv
dChKU1N0YWNrOjpTY29wZUNoYWluKSk7CkBAIC05ODAsOCArOTgwLDE2IEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VS
VCgoaW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKSB8fCBpbmZvLnNwaWxsRm9ybWF0
KCkgPT0gRGF0YUZvcm1hdENlbGwpOwotICAgICAgICBpZiAodHlwZSAmIH5TcGVjQ2VsbCkKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZShKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgZWRnZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdp
c3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICBpZiAodHlw
ZSAmIH5TcGVjQ2VsbCkgeworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAg
ICAgICAgICBCYWRUeXBlLAorICAgICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2UoSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSksCisgICAgICAgICAgICAgICAgZWRnZSwK
KyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6
dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksCisgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICB9CiAgICAgICAgIEdQUlJlZyBncHIgPSBh
bGxvY2F0ZSgpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwpAQCAtMTAwMSw4ICsxMDA5LDExIEBAIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgR1BSUmVnIHBh
eWxvYWRHUFIgPSBpbmZvLnBheWxvYWRHUFIoKTsKICAgICAgICAgbV9ncHJzLmxvY2sodGFnR1BS
KTsKICAgICAgICAgbV9ncHJzLmxvY2socGF5bG9hZEdQUik7Ci0gICAgICAgIGlmICh0eXBlICYg
flNwZWNDZWxsKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
UmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBlZGdlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7
CisgICAgICAgIGlmICh0eXBlICYgflNwZWNDZWxsKSB7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAorICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5
bG9hZEdQUiksIGVkZ2UsCisgICAgICAgICAgICAgICAgYnJhbmNoTm90Q2VsbChpbmZvLmpzVmFs
dWVSZWdzKCkpKTsKKyAgICAgICAgfQogICAgICAgICBtX2dwcnMudW5sb2NrKHRhZ0dQUik7CiAg
ICAgICAgIG1fZ3Bycy5yZWxlYXNlKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBh
eWxvYWRHUFIpOwpAQCAtMTI0MCw4ICsxMjUxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU9iamVjdFRvT2JqZQogICAgIAogICAgIC8vIEl0IHNlZW1zIHRoYXQgbW9zdCBvZiB0aGUg
dGltZSB3aGVuIHByb2dyYW1zIGRvIGEgPT0gYiB3aGVyZSBiIG1heSBiZSBlaXRoZXIgbnVsbC91
bmRlZmluZWQKICAgICAvLyBvciBhbiBvYmplY3QsIGIgaXMgdXN1YWxseSBhbiBvYmplY3QuIEJh
bGFuY2UgdGhlIGJyYW5jaGVzIHRvIG1ha2UgdGhhdCBjYXNlIGZhc3QuCi0gICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgcmlnaHROb3RDZWxsID0KLSAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDJUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmlnaHROb3RDZWxsID0gYnJhbmNoTm90
Q2VsbChvcDIuanNWYWx1ZVJlZ3MoKSk7CiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhp
biB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4KICAgICBpZiAobWFzcXVl
cmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCkgewpAQCAtMTMzNCw4ICsxMzQ0LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIAogICAgIC8vIEl0
IHNlZW1zIHRoYXQgbW9zdCBvZiB0aGUgdGltZSB3aGVuIHByb2dyYW1zIGRvIGEgPT0gYiB3aGVy
ZSBiIG1heSBiZSBlaXRoZXIgbnVsbC91bmRlZmluZWQKICAgICAvLyBvciBhbiBvYmplY3QsIGIg
aXMgdXN1YWxseSBhbiBvYmplY3QuIEJhbGFuY2UgdGhlIGJyYW5jaGVzIHRvIG1ha2UgdGhhdCBj
YXNlIGZhc3QuCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmlnaHROb3RDZWxsID0KLSAgICAg
ICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDJUYWdHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
cmlnaHROb3RDZWxsID0gYnJhbmNoTm90Q2VsbChvcDIuanNWYWx1ZVJlZ3MoKSk7CiAgICAgCiAg
ICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJl
IGEgY2VsbC4KICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCkg
ewpAQCAtMTQzMiw3ICsxNDQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVj
dE9yT3RoZQogICAgICAgICBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAgICAgfQog
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IGJyYW5jaE5vdENl
bGwodmFsdWUuanNWYWx1ZVJlZ3MoKSk7CiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50VmFsaWQpIHsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBK
U1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwgKH5TcGVj
Q2VsbCkgfCBTcGVjT2JqZWN0LApAQCAtMTU2Miw3ICsxNTcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2
YWx1ZS5wYXlsb2FkR1BSKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZykpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBicmFu
Y2hOb3RDZWxsKHZhbHVlLmpzVmFsdWVSZWdzKCkpOwogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIERGR19UWVBFX0NIRUNL
KAogICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiks
IG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwKQEAgLTMwNjksNyArMzA3OCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1f
aml0Lm1vdmUob3AxVGFnR1BSLCByZXN1bHRUYWdHUFIpOwogICAgICAgICAgICAgbV9qaXQubW92
ZShvcDFQYXlsb2FkR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFscmVhZHlQcmltaXRpdmUgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFs
cmVhZHlQcmltaXRpdmUgPSBicmFuY2hOb3RDZWxsKG9wMS5qc1ZhbHVlUmVncygpKTsKICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdFByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMVBh
eWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBhbHJlYWR5UHJpbWl0aXZlLmxpbmsoJm1faml0KTsKQEAgLTMw
OTksOCArMzEwOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZTsKICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY1N0cmluZykgewot
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoMSA9IG1faml0LmJyYW5j
aDMyKAotICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsIG9wMVRhZ0dQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICAgICAgICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBzbG93UGF0aDEgPSBicmFuY2hOb3RDZWxsKG9wMS5qc1ZhbHVlUmVncygp
KTsKICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aDIgPSBtX2ppdC5i
cmFuY2hQdHIoCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKICAg
ICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxUGF5bG9hZEdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKQEAgLTM0NjcsOCArMzQ3NSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVnIHRlbXBUYWdH
UFIgPSB0ZW1wVGFnLmdwcigpOwogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gz
MigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGhpc1ZhbHVlVGFnR1BS
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2hOb3RDZWxsKHRoaXNWYWx1ZS5qc1ZhbHVlUmVncygpKSk7CiAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoOCgKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRoaXNWYWx1
ZVBheWxvYWRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLApAQCAtMzY3OSw3ICsz
Njg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAKICAgICAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgIAotICAgICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVh
bCwgYmFzZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKGJhc2UuanNWYWx1
ZVJlZ3MoKSk7CiAgICAgICAgIAogICAgICAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLT5vcmln
aW4uc2VtYW50aWMsIGJhc2VUYWdHUFIsIGJhc2VQYXlsb2FkR1BSLCByZXN1bHRUYWdHUFIsIHJl
c3VsdFBheWxvYWRHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgbm90Q2VsbCk7CiAgICAg
ICAgIApAQCAtMzczNSw3ICszNzQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICAKICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAg
ICAgIAotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5j
aDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYmFzZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBi
cmFuY2hOb3RDZWxsKGJhc2UuanNWYWx1ZVJlZ3MoKSk7CiAgICAgICAgIAogICAgICAgICAgICAg
Y2FjaGVkR2V0QnlJZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGJhc2VUYWdHUFIsIGJhc2VQYXls
b2FkR1BSLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUtPmlkZW50aWZpZXJO
dW1iZXIoKSwgbm90Q2VsbCwgRG9udFNwaWxsKTsKICAgICAgICAgCkBAIC00MDc5LDcgKzQwODYs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQ
UlRlbXBvcmFyeSBsb2NhbEdsb2JhbE9iamVjdCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlbW90ZUdsb2JhbE9iamVjdCh0aGlzKTsKIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBp
c0NlbGwgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHZhbHVlLnRhZ0dQUigp
LCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgaXNDZWxsID0gYnJhbmNoSXNDZWxsKHZhbHVlLmpzVmFsdWVSZWdz
KCkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuY29tcGFyZTMyKEpJVENvbXBpbGVyOjpFcXVh
bCwgdmFsdWUudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZXN1bHQuZ3ByKCkpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVt
cCgpOwpAQCAtNDEzNSw3ICs0MTQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVlLCBU
YWdXb3JkKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9
IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgdmFsdWUudGFnR1BSKCksIEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBicmFuY2hOb3RDZWxsKHZhbHVlLmpzVmFsdWVSZWdz
KCkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQuY29tcGFyZTgoSklUQ29tcGlsZXI6OkVxdWFs
LCAKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHZhbHVlLnBheWxvYWRHUFIoKSwg
SlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIApAQCAtNDE4OCw3ICs0MTk1LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgICAgIEFTU0VSVChu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSB8fCBub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5n
VXNlKTsKIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFu
Y2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90
Q2VsbCA9IGJyYW5jaE5vdENlbGwodmFsdWUuanNWYWx1ZVJlZ3MoKSk7CiAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0gVW50eXBlZFVzZSkKICAgICAgICAgICAgIERGR19U
WVBFX0NIRUNLKEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgp
LCBTcGVjQ2VsbCwgaXNOb3RDZWxsKTsKIApAQCAtNDc0Nyw2ICs0NzU0LDQ4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihKU0NlbGwKIH0KICNlbmRpZiAvLyBFTkFCTEUoR0dD
KQogCitKSVRDb21waWxlcjo6SnVtcCBicmFuY2hJc0NlbGwoSlNWYWx1ZVJlZ3MgcmVncykKK3sK
KyAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCByZWdzLnRh
Z0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworfQorCitKSVRDb21waWxl
cjo6SnVtcCBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzIHJlZ3MpCit7CisgICAgcmV0dXJuIG1f
aml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKK30KKworSklUQ29tcGlsZXI6Okp1bXAgU3Bl
Y3VsYXRpdmVKSVQ6OmJyYW5jaElzT3RoZXIoSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBH
UFIpCit7CisgICAgbV9qaXQubW92ZShyZWdzLnRhZ0dQUigpLCB0ZW1wR1BSKTsKKyAgICBtX2pp
dC5vcjMyKFRydXN0ZWRJbW0zMigxKSwgdGVtcEdQUik7CisgICAgcmV0dXJuIG1faml0LmJyYW5j
aDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHRlbXBHUFIsCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVsbFRhZykpOworfQorCitKSVRD
b21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoTm90T3RoZXIoSlNWYWx1ZVJlZ3Mg
cmVncywgR1BSUmVnIHRlbXBHUFIpCit7CisgICAgbV9qaXQubW92ZShyZWdzLnRhZ0dQUigpLCB0
ZW1wR1BSKTsKKyAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMigxKSwgdGVtcEdQUik7CisgICAg
cmV0dXJuIG1faml0LmJyYW5jaDMyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IHRlbXBHUFIsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TnVsbFRhZykpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjptb3ZlVHJ1ZVRvKEdQUlJlZyBn
cHIpCit7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMSksIGdwcik7Cit9CisKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6Om1vdmVGYWxzZVRvKEdQUlJlZyBncHIpCit7CisgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tMzIoMCksIGdwcik7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJsZXNz
Qm9vbGVhbihHUFJSZWcgZ3ByKQoreworfQorCiAjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjU2ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsNyAr
MjQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQ7CiAgICAgaWYgKG1hc3F1
ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgaWYg
KCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpCi0gICAgICAgICAgICBub3RDZWxsID0gbV9q
aXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBhcmdHUFIsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoTm90Q2VsbChK
U1ZhbHVlUmVncyhhcmdHUFIpKTsKIAogICAgICAgICBtX2ppdC5tb3ZlKGludmVydCA/IFRydXN0
ZWRJbW0zMigxKSA6IFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKICAgICAgICAgbm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IG1faml0Lmp1bXAoKTsKQEAgLTI1Miw4ICsyNTIsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOwogCiAgICAgICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5u
b2RlKCkpKQotICAgICAgICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgYXJnR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotCisg
ICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyhhcmdHUFIpKTsK
KyAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblpl
cm8sIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYXJnR1BSLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIApAQCAtMzExLDggKzMxMSw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAKICAgICBpZiAobWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKSkgewogICAgICAgICBpZiAoIWlzS25vd25D
ZWxsKG9wZXJhbmQubm9kZSgpKSkKLSAgICAgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hU
ZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFza1Jl
Z2lzdGVyKTsKLQorICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaE5vdENlbGwoSlNWYWx1ZVJl
Z3MoYXJnR1BSKSk7CisgICAgICAgIAogICAgICAgICBqdW1wKGludmVydCA/IHRha2VuIDogbm90
VGFrZW4sIEZvcmNlSnVtcCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IGxv
Y2FsR2xvYmFsT2JqZWN0KHRoaXMpOwpAQCAtMzIwLDggKzMyMCw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CiAKICAgICAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpCi0gICAg
ICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCBhcmdHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0KKyAgICAgICAgICAgIG5v
dENlbGwgPSBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKGFyZ0dQUikpOworICAgICAgICAKICAg
ICAgICAgYnJhbmNoVGVzdDgoSklUQ29tcGlsZXI6Olplcm8sIAogICAgICAgICAgICAgSklUQ29t
cGlsZXI6OkFkZHJlc3MoYXJnR1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIAog
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKSwgCkBAIC0xMzY3LDcgKzEzNjcsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVDZWxsCiAKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwg
RGF0YUZvcm1hdEpTKTsKICAgICAgICAgaWYgKHR5cGUgJiB+U3BlY0NlbGwpCi0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIG1faml0
LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyhncHIpKSk7CiAg
ICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0NlbGwp
OwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTEzNzcsNyArMTM3Nyw3IEBAIEdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgR1BSUmVnIGdwciA9
IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CiAgICAgICAgIGlmICghQVNT
RVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVja0Nl
bGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGdwciwgR1BSSW5m
bzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNo
ZWNrQ2VsbCA9IGJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3MoZ3ByKSk7CiAgICAgICAgICAgICBt
X2ppdC5icmVha3BvaW50KCk7CiAgICAgICAgICAgICBjaGVja0NlbGwubGluaygmbV9qaXQpOwog
ICAgICAgICB9CkBAIC0xMzg4LDcgKzEzODgsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVDZWxsCiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAg
ICBtX2dwcnMubG9jayhncHIpOwogICAgICAgICBpZiAodHlwZSAmIH5TcGVjQ2VsbCkKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwg
bV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKGdwcikp
KTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpT
Q2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQpAQCAtMTYyMiw4ICsxNjIyLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogICAgIAogICAgIC8vIEl0
IHNlZW1zIHRoYXQgbW9zdCBvZiB0aGUgdGltZSB3aGVuIHByb2dyYW1zIGRvIGEgPT0gYiB3aGVy
ZSBiIG1heSBiZSBlaXRoZXIgbnVsbC91bmRlZmluZWQKICAgICAvLyBvciBhbiBvYmplY3QsIGIg
aXMgdXN1YWxseSBhbiBvYmplY3QuIEJhbGFuY2UgdGhlIGJyYW5jaGVzIHRvIG1ha2UgdGhhdCBj
YXNlIGZhc3QuCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmlnaHROb3RDZWxsID0KLSAgICAg
ICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDJHUFIsIEdQ
UkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmlnaHRO
b3RDZWxsID0gYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyhvcDJHUFIpKTsKICAgICAKICAgICAv
LyBXZSBrbm93IHRoYXQgd2l0aGluIHRoaXMgYnJhbmNoLCByaWdodENoaWxkIG11c3QgYmUgYSBj
ZWxsLiAKICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCkgewpA
QCAtMTcxMyw4ICsxNzEyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xl
T2JqZQogCiAgICAgLy8gSXQgc2VlbXMgdGhhdCBtb3N0IG9mIHRoZSB0aW1lIHdoZW4gcHJvZ3Jh
bXMgZG8gYSA9PSBiIHdoZXJlIGIgbWF5IGJlIGVpdGhlciBudWxsL3VuZGVmaW5lZAogICAgIC8v
IG9yIGFuIG9iamVjdCwgYiBpcyB1c3VhbGx5IGFuIG9iamVjdC4gQmFsYW5jZSB0aGUgYnJhbmNo
ZXMgdG8gbWFrZSB0aGF0IGNhc2UgZmFzdC4KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCByaWdo
dE5vdENlbGwgPQotICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIG9wMkdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCByaWdodE5vdENlbGwgPSBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKG9wMkdQ
UikpOwogICAgIAogICAgIC8vIFdlIGtub3cgdGhhdCB3aXRoaW4gdGhpcyBicmFuY2gsIHJpZ2h0
Q2hpbGQgbXVzdCBiZSBhIGNlbGwuIAogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludFZhbGlkKSB7CkBAIC0xODQ3LDcgKzE4NDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgICAgIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OwogICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBicmFuY2hO
b3RDZWxsKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7CiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAg
ICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09i
amVjdCwgbV9qaXQuYnJhbmNoU3RydWN0dXJlUHRyKApAQCAtMTk5Nyw3ICsxOTk1LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgICAgICBzdHJ1Y3R1cmVH
UFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
bm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFs
dWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbm90Q2VsbCA9IGJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3ModmFsdWVHUFIpKTsKICAgICBp
ZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKSkgewogICAg
ICAgICBERkdfVFlQRV9DSEVDSygKICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
bm9kZVVzZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBtX2ppdC5icmFuY2hTdHJ1Y3R1cmVQ
dHIoCkBAIC0zNDIyLDcgKzM0MjAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIAogICAgICAgICBvcDEudXNlKCk7CiAgICAgICAgIAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhbHJlYWR5UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoVGVz
dDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdp
c3Rlcik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFscmVhZHlQcmltaXRpdmUgPSBi
cmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKG9wMUdQUikpOwogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBub3RQcmltaXRpdmUgPSBtX2ppdC5icmFuY2hTdHJ1Y3R1cmVQdHIoCiAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKQEAgLTM0
NTAsOCArMzQ0OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZTsKICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY1N0cmluZykgewot
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoMSA9IG1faml0LmJyYW5j
aFRlc3Q2NCgKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sIG9wMUdQ
UiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBzbG93UGF0aDEgPSBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKG9wMUdQUikpOwog
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoMiA9IG1faml0LmJyYW5j
aFN0cnVjdHVyZVB0cigKICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFs
LAogICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhvcDFHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksCkBAIC0zODEwLDggKzM4MDcsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0g
dGVtcC5ncHIoKTsKICAgICAgICAgCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBz
bG93Q2FzZXM7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDY0KAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRoaXNWYWx1ZUdQUiwgR1BSSW5m
bzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoTm90
Q2VsbChKU1ZhbHVlUmVncyh0aGlzVmFsdWVHUFIpKSk7CiAgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQobV9qaXQuYnJhbmNoOCgKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwK
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRoaXNWYWx1ZUdQUiwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCkBAIC00MDA4LDcgKzQwMDQsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIAogICAgICAgICAgICAgYmFz
ZS51c2UoKTsKICAgICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxs
ID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBiYXNlR1BSLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90
Q2VsbCA9IGJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3MoYmFzZUdQUikpOwogICAgICAgICAKICAg
ICAgICAgICAgIGNhY2hlZEdldEJ5SWQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBiYXNlR1BSLCBy
ZXN1bHRHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgbm90Q2VsbCk7CiAgICAgICAgIApA
QCAtNDA1OCw3ICs0MDU0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CiAgICAgICAgIAotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1f
aml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwg
PSBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKGJhc2VHUFIpKTsKICAgICAgICAgCiAgICAgICAg
ICAgICBjYWNoZWRHZXRCeUlkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgYmFzZUdQUiwgcmVzdWx0
R1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGwsIERvbnRTcGlsbCk7CiAgICAg
ICAgIApAQCAtNDM4OSw3ICs0Mzg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICBHUFJUZW1wb3JhcnkgcmVtb3RlR2xvYmFsT2JqZWN0KHRoaXMp
OwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAotICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBpc0NlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8s
IHZhbHVlLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBpc0NlbGwgPSBicmFuY2hJc0NlbGwodmFsdWUuanNWYWx1ZVJlZ3MoKSk7CiAK
ICAgICAgICAgbV9qaXQuY29tcGFyZTY0KEpJVENvbXBpbGVyOjpFcXVhbCwgdmFsdWUuZ3ByKCks
IFRydXN0ZWRJbW0zMihWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CkBAIC00NDQ5LDcgKzQ0NDUsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgdmFsdWUpOwogICAgICAgICAKLSAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpO
b25aZXJvLCB2YWx1ZS5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsID0gYnJhbmNoTm90Q2VsbCh2YWx1ZS5qc1ZhbHVl
UmVncygpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmNvbXBhcmU4KEpJVENvbXBpbGVyOjpF
cXVhbCwgCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyh2YWx1ZS5ncHIoKSwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIApAQCAtNDUwMSw3ICs0NDk3LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAKICAgICAgICAgQVNT
RVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBT
dHJpbmdVc2UpOwogCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1faml0
LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRh
Z01hc2tSZWdpc3Rlcik7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IGJy
YW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3ModmFsdWVHUFIpKTsKICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKQogICAgICAgICAgICAgREZHX1RZUEVfQ0hF
Q0soSlNWYWx1ZVNvdXJjZSh2YWx1ZUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCwgaXNO
b3RDZWxsKTsKIApAQCAtNTA1Niw4ICs1MDUyLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3Jp
dGVCYXJyaWVyKEdQUlJlZwogewogICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbDsKICAg
ICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIGlzTm90Q2VsbCA9
IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUklu
Zm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0KKyAgICAgICAgaXNOb3RDZWxsID0gYnJhbmNoTm90Q2Vs
bChKU1ZhbHVlUmVncyh2YWx1ZUdQUikpOworICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIG93
bmVyTm90TWFya2VkT3JBbHJlYWR5UmVtZW1iZXJlZCA9IG1faml0LmNoZWNrTWFya0J5dGUob3du
ZXJHUFIpOwogICAgIHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIob3duZXJHUFIsIHNjcmF0Y2gx
LCBzY3JhdGNoMik7CiAgICAgb3duZXJOb3RNYXJrZWRPckFscmVhZHlSZW1lbWJlcmVkLmxpbmso
Jm1faml0KTsKQEAgLTUwNzAsOCArNTA2Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcihKU0NlbGwKIHsKICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGw7CiAgICAg
aWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQotICAgICAgICBpc05vdENlbGwgPSBt
X2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpOwotCisgICAgICAgIGlzTm90Q2VsbCA9IGJyYW5jaE5vdENlbGwo
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpKTsKKyAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBvd25l
ck5vdE1hcmtlZE9yQWxyZWFkeVJlbWVtYmVyZWQgPSBtX2ppdC5jaGVja01hcmtCeXRlKG93bmVy
KTsKICAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKG93bmVyLCBzY3JhdGNoMSwgc2NyYXRj
aDIpOwogICAgIG93bmVyTm90TWFya2VkT3JBbHJlYWR5UmVtZW1iZXJlZC5saW5rKCZtX2ppdCk7
CkBAIC01MDgxLDYgKzUwNzcsNDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVy
KEpTQ2VsbAogfQogI2VuZGlmIC8vIEVOQUJMRShHR0MpCiAKK0pJVENvbXBpbGVyOjpKdW1wIFNw
ZWN1bGF0aXZlSklUOjpicmFuY2hJc0NlbGwoSlNWYWx1ZVJlZ3MgcmVncykKK3sKKyAgICByZXR1
cm4gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZWdzLmdwcigpLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworfQorCitKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxh
dGl2ZUpJVDo6YnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyByZWdzKQoreworICAgIHJldHVybiBt
X2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHJlZ3MuZ3ByKCksIEdQ
UkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Cit9CisKK0pJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0
aXZlSklUOjpicmFuY2hJc090aGVyKEpTVmFsdWVSZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSKQor
eworICAgIG1faml0Lm1vdmUocmVncy5ncHIoKSwgdGVtcEdQUik7CisgICAgbV9qaXQuYW5kNjQo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgdGVtcEdQUik7
CisgICAgcmV0dXJuIG1faml0LmJyYW5jaDY0KAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIHRlbXBHUFIsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVO
dWxsKSk7Cit9CisKK0pJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpicmFuY2hOb3RP
dGhlcihKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUikKK3sKKyAgICBtX2ppdC5tb3Zl
KHJlZ3MuZ3ByKCksIHRlbXBHUFIpOworICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHRlbXBHUFIpOworICAgIHJldHVybiBtX2pp
dC5icmFuY2g2NCgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLAor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpOworfQorCit2
b2lkIFNwZWN1bGF0aXZlSklUOjptb3ZlVHJ1ZVRvKEdQUlJlZyBncHIpCit7CisgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgZ3ByKTsKK30KKwordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bW92ZUZhbHNlVG8oR1BSUmVnIGdwcikKK3sKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW0zMihWYWx1ZUZhbHNlKSwgZ3ByKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Ymxlc3NC
b29sZWFuKEdQUlJlZyBncHIpCit7CisgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVG
YWxzZSksIGdwcik7Cit9CisKICNlbmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkocmV2aXNpb24gMTY1Njg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4NiwxMyArODg2LDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluKE5vZGUqIG5vZAogICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3Ioc2xvd1BhdGgucmVsZWFzZSgpKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGJhc2UudXNlKCk7Ci0gICAgICAgICAgICAgICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoCi0gICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBu
b2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwot
I2Vsc2UKLSAgICAgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotI2VuZGlmCisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRF
eHBsaWNpdGx5KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTkx
MCwxMSArOTA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluKE5vZGUqIG5vZAog
ICAgIGNhbGxPcGVyYXRpb24oCiAgICAgICAgIG9wZXJhdGlvbkdlbmVyaWNJbiwgZXh0cmFjdFJl
c3VsdChKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVzdWx0R1BSKSksCiAgICAgICAgIGJhc2VH
UFIsIHJlZ3MpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRH
UFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7Ci0jZWxzZQotICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOwotI2VuZGlmCisgICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVz
dWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCiBib29sIFNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhcmUoTm9kZSogbm9kZSwgTWFjcm9Bc3Nl
bWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBl
ckZ1bmN0aW9uKQpAQCAtMTkzOSw5ICsxOTMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlVG9JbnQzMgogICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTnVt
YmVyID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdz
KGdwciksIG5vZGUtPmNoaWxkMSgpLCB+U3BlY0NlbGwsCi0gICAgICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaFRlc3Q2NCgKLSAgICAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpa
ZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyhncHIpLCBub2RlLT5jaGlsZDEoKSwgflNwZWNDZWxsLCBicmFuY2hOb3RD
ZWxsKEpTVmFsdWVSZWdzKGdwcikpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAvLyBJdCdzIG5vdCBhIGNlbGw6IHNvIHRydWUgdHVybnMgaW50byAxIGFuZCBhbGwgZWxzZSB0
dXJucyBpbnRvIDAuCiAgICAgICAgICAgICAgICAgbV9qaXQuY29tcGFyZTY0KEpJVENvbXBpbGVy
OjpFcXVhbCwgZ3ByLCBUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0R3ByKTsKQEAgLTE5
ODgsNyArMTk3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIK
IAogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTnVtYmVy
VXNlKSB7CiAgICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAotICAgICAgICAgICAg
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQx
KCksIFNwZWNGdWxsTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgcDEuanNWYWx1ZVJl
Z3MoKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdGFnR1BSLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CkBAIC0xOTk2LDkgKzE5ODUs
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMyCiAgICAgICAgICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTnVtYmVyID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93LCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RU
YWcpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIERGR19UWVBF
X0NIRUNLKAotICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXls
b2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIH5TcGVjQ2VsbCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG9wMS5qc1ZhbHVlUmVncygpLCBub2RlLT5jaGlsZDEoKSwg
flNwZWNDZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoSXNDZWxsKG9wMS5qc1Zh
bHVlUmVncygpKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAv
LyBJdCdzIG5vdCBhIGNlbGw6IHNvIHRydWUgdHVybnMgaW50byAxIGFuZCBhbGwgZWxzZSB0dXJu
cyBpbnRvIDAuCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzQm9vbGVh
biA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOwpAQCAtMjU0MiwxNCArMjUzMCwxMiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvCiAgICAgLy8gV2FsayB1cCB0aGUgcHJv
dG90eXBlIGNoYWluIG9mIHRoZSB2YWx1ZSAoaW4gc2NyYXRjaFJlZyksIGNvbXBhcmluZyB0byBw
cm90b3R5cGVSZWcuCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AoJm1faml0KTsKICAg
ICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZShzY3JhdGNoUmVnLCBzY3JhdGNoUmVnLCBzY3JhdGNo
MlJlZyk7CisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNo
UmVnLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpICsgQ2VsbFBheWxvYWRPZmZzZXQpLCBz
Y3JhdGNoUmVnKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0luc3RhbmNlID0gbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaFJlZywgcHJvdG90eXBlUmVn
KTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoUmVnLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpKSwgc2NyYXRj
aFJlZyk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNJbnN0YW5jZSA9IG1faml0LmJyYW5j
aDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaFJlZywgcHJvdG90eXBlUmVnKTsKLSAg
ICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hSZWcsIEdQ
UkluZm86OnRhZ01hc2tSZWdpc3RlcikubGlua1RvKGxvb3AsICZtX2ppdCk7CisgICAgYnJhbmNo
SXNDZWxsKEpTVmFsdWVSZWdzKHNjcmF0Y2hHUFIpKS5saW5rVG8obG9vcCwgJm1faml0KTsKICNl
bHNlCi0gICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcs
IFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMucGF5bG9hZCkpLCBzY3JhdGNoUmVnKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBpc0luc3RhbmNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2Ny
YXRjaFJlZywgcHJvdG90eXBlUmVnKTsKLSAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hSZWcpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAgIG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hSZWcpLmxp
bmtUbyhsb29wLCAmbV9qaXQpOwogI2VuZGlmCiAgICAgCiAgICAgLy8gTm8gbWF0Y2ggLSByZXN1
bHQgaXMgZmFsc2UuCkBAIC0yNTg2LDE2ICsyNTcyLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUluc3RhbmNlT2YoTgogICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2gu
Z3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHNjcmF0Y2gyLmdwcigpOwogICAg
ICAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1
ZS5ncHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNDZWxsID0gbV9qaXQuYnJh
bmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZVJlZywgR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKTsKLSAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIHNjcmF0Y2hSZWcpOwotI2Vs
c2UKLSAgICAgICAgR1BSUmVnIHZhbHVlVGFnUmVnID0gdmFsdWUudGFnR1BSKCk7Ci0gICAgICAg
IEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLnBheWxvYWRHUFIoKTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgaXNDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCB2YWx1ZVRhZ1JlZywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKLSAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCBzY3JhdGNoUmVnKTsK
LSNlbmRpZgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0NlbGwgPSBicmFuY2hJc0Nl
bGwodmFsdWUuanNWYWx1ZVJlZ3MoKSk7CisgICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVl
LmpzVmFsdWVSZWdzKCkucGF5bG9hZEdQUigpOworICAgICAgICBtb3ZlRmFsc2VUbyhzY3JhdGNo
UmVnKTsKIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgp
OwogICAgICAgICAKQEAgLTI2MDUsMTEgKzI1ODQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlSW5zdGFuY2VPZihOCiAgICAgICAgIAogICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
IAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGpzVmFsdWVSZXN1bHQoc2NyYXRjaFJlZywg
bm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Ci0jZWxzZQotICAgICAgICBib29sZWFuUmVzdWx0
KHNjcmF0Y2hSZWcsIG5vZGUpOwotI2VuZGlmCisgICAgICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0
KHNjcmF0Y2hSZWcsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMjYy
NiwxMSArMjYwMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mKE4K
ICAgICAKICAgICBjb21waWxlSW5zdGFuY2VPZkZvck9iamVjdChub2RlLCB2YWx1ZVJlZywgcHJv
dG90eXBlUmVnLCBzY3JhdGNoUmVnLCBzY3JhdGNoMlJlZyk7CiAKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGpzVmFsdWVSZXN1bHQoc2NyYXRjaFJlZywgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVh
bik7Ci0jZWxzZQotICAgIGJvb2xlYW5SZXN1bHQoc2NyYXRjaFJlZywgbm9kZSk7Ci0jZW5kaWYK
KyAgICBibGVzc2VkQm9vbGVhblJlc3VsdChzY3JhdGNoUmVnLCBub2RlKTsKIH0KIAogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBub2RlKQpAQCAtMzczMSw2ICszNzAyLDI2
IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICAKKyAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKFN0
cmluZ0lkZW50VXNlLCBOb3RTdHJpbmdWYXJVc2UpKSB7CisgICAgICAgIGNvbXBpbGVTdHJpbmdJ
ZGVudFRvTm90U3RyaW5nVmFyRXF1YWxpdHkobm9kZSwgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAobm9k
ZS0+aXNCaW5hcnlVc2VLaW5kKE5vdFN0cmluZ1ZhclVzZSwgU3RyaW5nSWRlbnRVc2UpKSB7Cisg
ICAgICAgIGNvbXBpbGVTdHJpbmdJZGVudFRvTm90U3RyaW5nVmFyRXF1YWxpdHkobm9kZSwgbm9k
ZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAKKyAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKFN0cmluZ1VzZSwgVW50eXBl
ZFVzZSkpIHsKKyAgICAgICAgY29tcGlsZVN0cmluZ1RvVW50eXBlZEVxdWFsaXR5KG5vZGUsIG5v
ZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgCisgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlLCBTdHJp
bmdVc2UpKSB7CisgICAgICAgIGNvbXBpbGVTdHJpbmdUb1VudHlwZWRFcXVhbGl0eShub2RlLCBu
b2RlLT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5
cGVkVXNlKSk7CiAgICAgcmV0dXJuIG5vblNwZWN1bGF0aXZlU3RyaWN0RXEobm9kZSk7CiB9CkBA
IC0zNzQzLDQ0ICszNzM0LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVCb29sZWFu
Q29tcGEKICAgICAKICAgICBtX2ppdC5jb21wYXJlMzIoY29uZGl0aW9uLCBvcDEuZ3ByKCksIG9w
Mi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAKLSAgICAvLyBJZiB3ZSBhZGQgYSBEYXRhRm9y
bWF0Qm9vbCwgd2Ugc2hvdWxkIHVzZSBpdCBoZXJlLgotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgYm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwotI2Vsc2UKLSAgICBtX2ppdC5v
cjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKLSAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jdXJyZW50Tm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7
Ci0jZW5kaWYKKyAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7
CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdFcXVhbGl0eShOb2RlKiBu
b2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ0VxdWFsaXR5KAorICAgIE5v
ZGUqIG5vZGUsIEdQUlJlZyBsZWZ0R1BSLCBHUFJSZWcgcmlnaHRHUFIsIEdQUlJlZyBsZW5ndGhH
UFIsIEdQUlJlZyBsZWZ0VGVtcEdQUiwKKyAgICBHUFJSZWcgcmlnaHRUZW1wR1BSLCBHUFJSZWcg
bGVmdFRlbXAyR1BSLCBHUFJSZWcgcmlnaHRUZW1wMkdQUiwKKyAgICBKSVRDb21waWxlcjo6SnVt
cExpc3QgZmFzdFRydWUsIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBmYXN0U2xvdykKIHsKLSAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBsZWZ0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCByaWdodCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgR1BSVGVt
cG9yYXJ5IGxlbmd0aCh0aGlzKTsKLSAgICBHUFJUZW1wb3JhcnkgbGVmdFRlbXAodGhpcyk7Ci0g
ICAgR1BSVGVtcG9yYXJ5IHJpZ2h0VGVtcCh0aGlzKTsKLSAgICBHUFJUZW1wb3JhcnkgbGVmdFRl
bXAyKHRoaXMsIFJldXNlLCBsZWZ0KTsKLSAgICBHUFJUZW1wb3JhcnkgcmlnaHRUZW1wMih0aGlz
LCBSZXVzZSwgcmlnaHQpOwotICAgIAotICAgIEdQUlJlZyBsZWZ0R1BSID0gbGVmdC5ncHIoKTsK
LSAgICBHUFJSZWcgcmlnaHRHUFIgPSByaWdodC5ncHIoKTsKLSAgICBHUFJSZWcgbGVuZ3RoR1BS
ID0gbGVuZ3RoLmdwcigpOwotICAgIEdQUlJlZyBsZWZ0VGVtcEdQUiA9IGxlZnRUZW1wLmdwcigp
OwotICAgIEdQUlJlZyByaWdodFRlbXBHUFIgPSByaWdodFRlbXAuZ3ByKCk7Ci0gICAgR1BSUmVn
IGxlZnRUZW1wMkdQUiA9IGxlZnRUZW1wMi5ncHIoKTsKLSAgICBHUFJSZWcgcmlnaHRUZW1wMkdQ
UiA9IHJpZ2h0VGVtcDIuZ3ByKCk7Ci0gICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHRy
dWVDYXNlOwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBmYWxzZUNhc2U7CiAgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlOwogICAgIAotICAgIHNwZWN1bGF0ZVN0cmluZyhub2Rl
LT5jaGlsZDEoKSwgbGVmdEdQUik7Ci0gICAgCi0gICAgLy8gSXQncyBzYWZlIHRvIGJyYW5jaCBh
cm91bmQgdGhlIHR5cGUgY2hlY2sgYmVsb3csIHNpbmNlIHByb3ZpbmcgdGhhdCB0aGUgdmFsdWVz
IGFyZQotICAgIC8vIGVxdWFsIGRvZXMgaW5kZWVkIHByb3ZlIHRoYXQgdGhlIHJpZ2h0IHZhbHVl
IGlzIGEgc3RyaW5nLgotICAgIHRydWVDYXNlLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCBsZWZ0R1BSLCByaWdodEdQUikpOwotICAgIAotICAgIHNwZWN1bGF0
ZVN0cmluZyhub2RlLT5jaGlsZDIoKSwgcmlnaHRHUFIpOworICAgIHRydWVDYXNlLmFwcGVuZChm
YXN0VHJ1ZSk7CisgICAgZmFsc2VDYXNlLmFwcGVuZChmYXN0RmFsc2UpOwogCiAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGxlZnRHUFIsIEpTU3RyaW5nOjpvZmZzZXRP
Zkxlbmd0aCgpKSwgbGVuZ3RoR1BSKTsKICAgICAKQEAgLTM4MjIsNDggKzM3ODksMTA0IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdFcXVhbGkKICAgICBtX2ppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGxlbmd0aEdQUikubGlua1RvKGxvb3AsICZt
X2ppdCk7CiAgICAgCiAgICAgdHJ1ZUNhc2UubGluaygmbV9qaXQpOwotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoVmFsdWVUcnVlKSwgbGVmdFRlbXBHUFIp
OwotI2Vsc2UKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMih0cnVlKSwgbGVmdFRlbXBHUFIp
OwotI2VuZGlmCisgICAgbW92ZVRydWVUbyhsZWZ0VGVtcEdQUik7CiAgICAgCiAgICAgSklUQ29t
cGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKIAogICAgIGZhbHNlQ2FzZS5saW5rKCZt
X2ppdCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChW
YWx1ZUZhbHNlKSwgbGVmdFRlbXBHUFIpOwotI2Vsc2UKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW0zMihmYWxzZSksIGxlZnRUZW1wR1BSKTsKLSNlbmRpZgorICAgIG1vdmVGYWxzZVRvKGxlZnRU
ZW1wR1BSKTsKICAgICAKICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgc2xvd0Nhc2UsIHRo
aXMsIG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgbGVmdFRlbXBHUFIsIGxlZnRHUFIsIHJpZ2h0
R1BSKSk7CiAgICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBqc1ZhbHVlUmVzdWx0KGxlZnRU
ZW1wR1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKLSNlbHNlCi0gICAgYm9vbGVhblJl
c3VsdChsZWZ0VGVtcEdQUiwgbm9kZSk7Ci0jZW5kaWYKKyAgICBibGVzc2VkQm9vbGVhblJlc3Vs
dChsZWZ0VGVtcEdQUiwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVT
dHJpbmdJZGVudEVxdWFsaXR5KE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlU3RyaW5nRXF1YWxpdHkoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBsZWZ0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBy
aWdodCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgR1BSVGVtcG9yYXJ5IGxlbmd0aCh0aGlz
KTsKICAgICBHUFJUZW1wb3JhcnkgbGVmdFRlbXAodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHJp
Z2h0VGVtcCh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgbGVmdFRlbXAyKHRoaXMsIFJldXNlLCBs
ZWZ0KTsKKyAgICBHUFJUZW1wb3JhcnkgcmlnaHRUZW1wMih0aGlzLCBSZXVzZSwgcmlnaHQpOwog
ICAgIAogICAgIEdQUlJlZyBsZWZ0R1BSID0gbGVmdC5ncHIoKTsKICAgICBHUFJSZWcgcmlnaHRH
UFIgPSByaWdodC5ncHIoKTsKKyAgICBHUFJSZWcgbGVuZ3RoR1BSID0gbGVuZ3RoLmdwcigpOwog
ICAgIEdQUlJlZyBsZWZ0VGVtcEdQUiA9IGxlZnRUZW1wLmdwcigpOwogICAgIEdQUlJlZyByaWdo
dFRlbXBHUFIgPSByaWdodFRlbXAuZ3ByKCk7CisgICAgR1BSUmVnIGxlZnRUZW1wMkdQUiA9IGxl
ZnRUZW1wMi5ncHIoKTsKKyAgICBHUFJSZWcgcmlnaHRUZW1wMkdQUiA9IHJpZ2h0VGVtcDIuZ3By
KCk7CisgICAgCisgICAgc3BlY3VsYXRlU3RyaW5nKG5vZGUtPmNoaWxkMSgpLCBsZWZ0R1BSKTsK
KyAgICAKKyAgICAvLyBJdCdzIHNhZmUgdG8gYnJhbmNoIGFyb3VuZCB0aGUgdHlwZSBjaGVjayBi
ZWxvdywgc2luY2UgcHJvdmluZyB0aGF0IHRoZSB2YWx1ZXMgYXJlCisgICAgLy8gZXF1YWwgZG9l
cyBpbmRlZWQgcHJvdmUgdGhhdCB0aGUgcmlnaHQgdmFsdWUgaXMgYSBzdHJpbmcuCisgICAgSklU
Q29tcGlsZXI6Okp1bXAgZmFzdFRydWUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCBsZWZ0R1BSLCByaWdodEdQUik7CisgICAgCisgICAgc3BlY3VsYXRlU3RyaW5nKG5v
ZGUtPmNoaWxkMigpLCByaWdodEdQUik7CisgICAgCisgICAgY29tcGlsZVN0cmluZ0VxdWFsaXR5
KAorICAgICAgICBub2RlLCBsZWZ0R1BSLCByaWdodEdQUiwgbGVuZ3RoR1BSLCBsZWZ0VGVtcEdQ
UiwgcmlnaHRUZW1wR1BSLCBsZWZ0VGVtcDJHUFIsCisgICAgICAgIHJpZ2h0VGVtcDJHUFIsIGZh
c3RUcnVlLCBKSVRDb21waWxlcjo6SnVtcCgpKTsKK30KIAotICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCB0cnVlQ2FzZTsKLSAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZmFsc2VDYXNlOwordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1RvVW50eXBlZEVxdWFsaXR5KE5vZGUqIG5v
ZGUsIEVkZ2Ugc3RyaW5nRWRnZSwgRWRnZSB1bnR5cGVkRWRnZSkKK3sKKyAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBsZWZ0KHRoaXMsIHN0cmluZ0VkZ2UpOworICAgIEpTVmFsdWVPcGVyYW5kIHJp
Z2h0KHRoaXMsIHVudHlwZWRFZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEdQ
UlRlbXBvcmFyeSBsZW5ndGgodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IGxlZnRUZW1wKHRoaXMp
OworICAgIEdQUlRlbXBvcmFyeSByaWdodFRlbXAodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IGxl
ZnRUZW1wMih0aGlzLCBSZXVzZSwgbGVmdCk7CisgICAgR1BSVGVtcG9yYXJ5IHJpZ2h0VGVtcDIo
dGhpcywgUmV1c2UsIHJpZ2h0KTsKICAgICAKKyAgICBHUFJSZWcgbGVmdEdQUiA9IGxlZnQuZ3By
KCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gcmlnaHQuanNWYWx1ZVJlZ3MoKTsKKyAg
ICBHUFJSZWcgbGVuZ3RoR1BSID0gbGVuZ3RoLmdwcigpOworICAgIEdQUlJlZyBsZWZ0VGVtcEdQ
UiA9IGxlZnRUZW1wLmdwcigpOworICAgIEdQUlJlZyByaWdodFRlbXBHUFIgPSByaWdodFRlbXAu
Z3ByKCk7CisgICAgR1BSUmVnIGxlZnRUZW1wMkdQUiA9IGxlZnRUZW1wMi5ncHIoKTsKKyAgICBH
UFJSZWcgcmlnaHRUZW1wMkdQUiA9IHJpZ2h0VGVtcDIuZ3ByKCk7CisgICAgCisgICAgc3BlY3Vs
YXRlU3RyaW5nKHN0cmluZ0VkZ2UsIGxlZnRHUFIpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBmYXN0VHJ1ZTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZmFzdFNsb3c7Cisg
ICAgCisgICAgZmFzdFNsb3cuYXBwZW5kKGJyYW5jaE5vdENlbGwocmlnaHRSZWdzKSk7CisgICAg
CisgICAgLy8gSXQncyBzYWZlIHRvIGJyYW5jaCBhcm91bmQgdGhlIHR5cGUgY2hlY2sgYmVsb3cs
IHNpbmNlIHByb3ZpbmcgdGhhdCB0aGUgdmFsdWVzIGFyZQorICAgIC8vIGVxdWFsIGRvZXMgaW5k
ZWVkIHByb3ZlIHRoYXQgdGhlIHJpZ2h0IHZhbHVlIGlzIGEgc3RyaW5nLgorICAgIGZhc3RUcnVl
LmFwcGVuZChtX2ppdC5icmFuY2hQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
bGVmdEdQUiwgcmlnaHRSZWdzLnBheWxvYWRHUFIoKSkpOworICAgIAorICAgIGZhc3RTbG93LmFw
cGVuZChtX2ppdC5icmFuY2hTdHJ1Y3R1cmVQdHIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJpZ2h0UmVncy5wYXls
b2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAorICAgICAgICBtX2ppdC52
bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAKKyAgICBjb21waWxlU3RyaW5nRXF1
YWxpdHkoCisgICAgICAgIG5vZGUsIGxlZnRHUFIsIHJpZ2h0R1BSLCBsZW5ndGhHUFIsIGxlZnRU
ZW1wR1BSLCByaWdodFRlbXBHUFIsIGxlZnRUZW1wMkdQUiwKKyAgICAgICAgcmlnaHRUZW1wMkdQ
UiwgZmFzdFRydWUsIGZhc3RTbG93KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVN0cmluZ0lkZW50RXF1YWxpdHkoTm9kZSogbm9kZSkKK3sKKyAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBsZWZ0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCByaWdodCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgR1BSVGVtcG9yYXJ5IGxlZnRUZW1w
KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSByaWdodFRlbXAodGhpcyk7CisgICAgCisgICAgR1BS
UmVnIGxlZnRHUFIgPSBsZWZ0LmdwcigpOworICAgIEdQUlJlZyByaWdodEdQUiA9IHJpZ2h0Lmdw
cigpOworICAgIEdQUlJlZyBsZWZ0VGVtcEdQUiA9IGxlZnRUZW1wLmdwcigpOworICAgIEdQUlJl
ZyByaWdodFRlbXBHUFIgPSByaWdodFRlbXAuZ3ByKCk7CisKICAgICBzcGVjdWxhdGVTdHJpbmco
bm9kZS0+Y2hpbGQxKCksIGxlZnRHUFIpOwogICAgIHNwZWN1bGF0ZVN0cmluZyhub2RlLT5jaGls
ZDIoKSwgcmlnaHRHUFIpOwogICAgIApAQCAtMzg3MiwxMiArMzg5NSwzOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlU3RyaW5nSWRlbnRFCiAgICAgCiAgICAgbV9qaXQuY29tcGFyZVB0
cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGxlZnRUZW1wR1BSLCByaWdodFRlbXBHUFIsIGxlZnRU
ZW1wR1BSKTsKICAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1faml0Lm9yMzIoVHJ1c3Rl
ZEltbTMyKFZhbHVlRmFsc2UpLCBsZWZ0VGVtcEdQUik7Ci0gICAganNWYWx1ZVJlc3VsdChsZWZ0
VGVtcEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Ci0jZWxzZQotICAgIGJvb2xlYW5S
ZXN1bHQobGVmdFRlbXBHUFIsIG5vZGUpOwotI2VuZGlmCisgICAgdW5ibGVzc2VkQm9vbGVhblJl
c3VsdChsZWZ0VGVtcEdQUiwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVTdHJpbmdJZGVudFRvTm90U3RyaW5nVmFyRXF1YWxpdHkoCisgICAgTm9kZSogbm9kZSwgRWRn
ZSBzdHJpbmdFZGdlLCBFZGdlIG5vdFN0cmluZ1ZhckVkZ2UpCit7CisgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgbGVmdCh0aGlzLCBzdHJpbmdFZGdlKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCByaWdo
dCh0aGlzLCBub3RTdHJpbmdWYXJFZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAg
IEdQUlRlbXBvcmFyeSBsZWZ0VGVtcCh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgcmlnaHRUZW1w
KHRoaXMpOworICAgIEdQUlJlZyBsZWZ0VGVtcEdQUiA9IGxlZnRUZW1wLmdwcigpOworICAgIEdQ
UlJlZyByaWdodFRlbXBHUFIgPSByaWdodFRlbXAuZ3ByKCk7CisgICAgR1BSUmVnIGxlZnRHUFIg
PSBsZWZ0LmdwcigpOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IHJpZ2h0LmpzVmFsdWVS
ZWdzKCk7CisgICAgCisgICAgc3BlY3VsYXRlU3RyaW5nKHN0cmluZ0VkZ2UsIGxlZnRHUFIpOwor
ICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50QW5kTG9hZFN0b3JhZ2Uoc3RyaW5nRWRnZSwgbGVmdEdQ
UiwgbGVmdFRlbXBHUFIpOworCisgICAgbW92ZUZhbHNlVG8ocmlnaHRUZW1wR1BSKTsKKyAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgbm90U3RyaW5nOworICAgIG5vdFN0cmluZy5hcHBlbmQoYnJh
bmNoTm90Q2VsbChyaWdodFJlZ3MpKTsKKyAgICBub3RTdHJpbmcuYXBwZW5kKG1faml0LmJyYW5j
aFN0cnVjdHVyZVB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmlnaHRSZWdzLnBheWxvYWRHUFIoKSwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCisgICAgICAgIG1faml0LnZtKCktPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpOworICAgIAorICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50QW5kTG9hZFN0b3Jh
Z2Uobm90U3RyaW5nVmFyRWdlLCByaWdodEdQUiwgcmlnaHRUZW1wR1BSKTsKKyAgICAKKyAgICBt
X2ppdC5jb21wYXJlUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgbGVmdFRlbXBHUFIsIHJpZ2h0
VGVtcEdQUiwgcmlnaHRUZW1wR1BSKTsKKyAgICBub3RTdHJpbmcubGluaygmbV9qaXQpOworICAg
IAorICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmlnaHRUZW1wR1BSLCBub2RlKTsKIH0KIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1plcm9MZW5ndGgoTm9kZSogbm9kZSkK
QEAgLTM4OTQsMTIgKzM5NDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5n
WmVyb0xlCiAgICAgLy8gRmV0Y2ggdGhlIGxlbmd0aCBmaWVsZCBmcm9tIHRoZSBzdHJpbmcgb2Jq
ZWN0LgogICAgIG1faml0LnRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RyR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpLCBlcUdQUik7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCBlcUdQUik7Ci0gICAganNW
YWx1ZVJlc3VsdChlcUdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Ci0jZWxzZQotICAg
IGJvb2xlYW5SZXN1bHQoZXFHUFIsIG5vZGUpOwotI2VuZGlmCisgICAgdW5ibGVzc2VkQm9vbGVh
blJlc3VsdChlcUdQUiwgbm9kZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
b25zdGFudFN0b3JhZ2VQb2ludGVyKE5vZGUqIG5vZGUpCkBAIC00NTU5LDU4ICs0NjAzLDI4IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdE9yT3QKICAgICBKU1ZhbHVlT3Bl
cmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAg
R1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigp
OwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgR1BSUmVnIGdwciA9IG9wZXJhbmQuZ3ByKCk7Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NCgKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gYnJhbmNoTm90Q2VsbChv
cGVyYW5kLmpzVmFsdWVSZWdzKCkpOworICAgIEdQUlJlZyBncHIgPSBvcGVyYW5kLmpzVmFsdWVS
ZWdzKCkucGF5bG9hZEdQUigpOwogICAgIERGR19UWVBFX0NIRUNLKAotICAgICAgICBKU1ZhbHVl
UmVncyhncHIpLCBlZGdlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFN0
cnVjdHVyZVB0cigKKyAgICAgICAgb3BlcmFuZC5qc1ZhbHVlUmVncygpLCBlZGdlLCAoflNwZWND
ZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhncHIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAogICAgICAgICAgICAgbV9q
aXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAgICBp
ZiAobmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKSB7Ci0gICAgICAg
IG1faml0Lm1vdmUoZ3ByLCB0ZW1wR1BSKTsKLSAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgdGVtcEdQUik7Ci0gICAgICAg
IAotICAgICAgICB0eXBlQ2hlY2soCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhncHIpLCBlZGdl
LCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKLSAgICB9
Ci0gICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0jZWxzZQotICAgIEdQUlJlZyB0YWdHUFIgPSBvcGVy
YW5kLnRhZ0dQUigpOwotICAgIEdQUlJlZyBwYXlsb2FkR1BSID0gb3BlcmFuZC5wYXlsb2FkR1BS
KCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9Ci0gICAgICAgIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZykpOwotICAgIERGR19UWVBFX0NIRUNLKAotICAgICAgICBKU1ZhbHVlUmVn
cyh0YWdHUFIsIHBheWxvYWRHUFIpLCBlZGdlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1f
aml0LmJyYW5jaFN0cnVjdHVyZVB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwYXlsb2FkR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIG1faml0LnZtKCktPnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2pp
dC5qdW1wKCk7Ci0gICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7Ci0gICAgaWYgKG5lZWRzVHlwZUNo
ZWNrKGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgewotICAgICAgICBtX2ppdC5tb3ZlKHRh
Z0dQUiwgdGVtcEdQUik7Ci0gICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCB0ZW1w
R1BSKTsKLSAgICAgICAgCiAgICAgICAgIHR5cGVDaGVjaygKLSAgICAgICAgICAgIEpTVmFsdWVS
ZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyLAotICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCB0ZW1wR1BSLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpKTsKKyAgICAgICAgICAgIG9wZXJhbmQuanNWYWx1
ZVJlZ3MoKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsCisgICAgICAgICAgICBicmFuY2hO
b3RPdGhlcihvcGVyYW5kLmpzVmFsdWVSZWdzKCksIHRlbXBHUFIpKTsKICAgICB9CiAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlU3RyaW5nKEVkZ2UgZWRnZSwgR1BSUmVnIGNlbGwpCiB7CiAgICAgREZHX1RZUEVfQ0hFQ0so
Ci0gICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGNlbGwpLCBlZGdlLCBTcGVjU3Ry
aW5nLCBtX2ppdC5icmFuY2hTdHJ1Y3R1cmVQdHIoCisgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKGNlbGwpLCBlZGdlLCBTcGVjU3RyaW5nIHwgflNwZWNDZWxsLAorICAgICAgICBt
X2ppdC5icmFuY2hTdHJ1Y3R1cmVQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbCwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCiAgICAgICAgICAgICBtX2ppdC52bSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKTsKQEAgLTQ2MzIsNyArNDY0Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnNwZWN1bGF0ZVN0cmluZ0lkZW4KICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2UsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLAogICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihTdHJpbmdJbXBsOjpmbGFnSXNJZGVudGlmaWVyKCkp
KSk7CiAgICAgCi0gICAgbV9pbnRlcnByZXRlci5maWx0ZXIoZWRnZSwgU3BlY1N0cmluZ0lkZW50
KTsKKyAgICBtX2ludGVycHJldGVyLmZpbHRlcihlZGdlLCBTcGVjU3RyaW5nSWRlbnQgfCB+U3Bl
Y1N0cmluZyk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmluZ0lkZW50
KEVkZ2UgZWRnZSwgR1BSUmVnIHN0cmluZykKQEAgLTQ3MDksMjMgKzQ3MjMsMzMgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nT3JTdAogICAgIG1faW50ZXJwcmV0ZXIuZmls
dGVyKGVkZ2UsIFNwZWNTdHJpbmcgfCBTcGVjU3RyaW5nT2JqZWN0KTsKIH0KIAordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRlTm90U3RyaW5nVmFyKEVkZ2UgZWRnZSkKK3sKKyAgICBKU1Zh
bHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7
CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1w
LmdwcigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBicmFuY2hOb3RD
ZWxsKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSk7CisgICAgR1BSUmVnIGNlbGwgPSBvcGVyYW5kLmpz
VmFsdWVSZWdzKCkucGF5bG9hZEdQUigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
dFN0cmluZyA9IG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICBtX2ppdC52bSgpLT5zdHJpbmdTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgIAorICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50QW5kTG9hZFN0b3Jh
Z2UoZWRnZSwgY2VsbCwgdGVtcEdQUik7CisgICAgCisgICAgbm90U3RyaW5nLmxpbmsoJm1faml0
KTsKKyAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRlTm90Q2VsbChFZGdlIGVkZ2UpCiB7CiAgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhl
ZGdlLCB+U3BlY0NlbGwpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgSlNWYWx1ZU9wZXJh
bmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgdHlwZUNoZWNrKAotICAgICAgICBKU1ZhbHVlUmVncyhvcGVyYW5k
LmdwcigpKSwgZWRnZSwgflNwZWNDZWxsLAotICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoCi0g
ICAgICAgICAgICBKSVRDb21waWxlcjo6WmVybywgb3BlcmFuZC5ncHIoKSwgR1BSSW5mbzo6dGFn
TWFza1JlZ2lzdGVyKSk7Ci0jZWxzZQotICAgIHR5cGVDaGVjaygKLSAgICAgICAgSlNWYWx1ZVJl
Z3Mob3BlcmFuZC50YWdHUFIoKSwgb3BlcmFuZC5wYXlsb2FkR1BSKCkpLCBlZGdlLCB+U3BlY0Nl
bGwsCi0gICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgSklUQ29tcGlsZXI6OkVx
dWFsLCBvcGVyYW5kLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsK
LSNlbmRpZgorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKTsgCisgICAgdHlwZUNoZWNrKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSwg
ZWRnZSwgflNwZWNDZWxsLCBicmFuY2hJc0NlbGwob3BlcmFuZC5qc1ZhbHVlUmVncygpKSk7CiB9
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU90aGVyKEVkZ2UgZWRnZSkKQEAgLTQ3
MzYsMjEgKzQ3NjAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPdGhlcihFZGdl
CiAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3Bl
Y3VsYXRpb24pOwogICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgIEdQUlJlZyB0ZW1w
R1BSID0gdGVtcC5ncHIoKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1faml0Lm1vdmUob3Bl
cmFuZC5ncHIoKSwgdGVtcEdQUik7Ci0gICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgdGVtcEdQUik7CiAgICAgdHlwZUNoZWNrKAog
ICAgICAgICBKU1ZhbHVlUmVncyhvcGVyYW5kLmdwcigpKSwgZWRnZSwgU3BlY090aGVyLAotICAg
ICAgICBtX2ppdC5icmFuY2g2NCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgdGVtcEdQUiwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFs
dWVOdWxsKSkpOwotI2Vsc2UKLSAgICBtX2ppdC5tb3ZlKG9wZXJhbmQudGFnR1BSKCksIHRlbXBH
UFIpOwotICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCB0ZW1wR1BSKTsKLSAgICB0eXBl
Q2hlY2soCi0gICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQudGFnR1BSKCksIG9wZXJhbmQucGF5
bG9hZEdQUigpKSwgZWRnZSwgU3BlY090aGVyLAotICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxs
VGFnKSkpOwotI2VuZGlmICAgIAorICAgICAgICBicmFuY2hOb3RPdGhlcihvcGVyYW5kLmpzVmFs
dWVSZWdzKCksIHRlbXBHUFIpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRl
TWlzYyhFZGdlIGVkZ2UsIEpTVmFsdWVSZWdzIHJlZ3MpCkBAIC00ODM0LDYgKzQ4NDYsOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2FzZSBTdHJpbmdP
clN0cmluZ09iamVjdFVzZToKICAgICAgICAgc3BlY3VsYXRlU3RyaW5nT3JTdHJpbmdPYmplY3Qo
ZWRnZSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm90U3RyaW5nVmFyVXNlOgorICAgICAg
ICBzcGVjdWxhdGVOb3RTdHJpbmdWYXIoZWRnZSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Tm90Q2VsbFVzZToKICAgICAgICAgc3BlY3VsYXRlTm90Q2VsbChlZGdlKTsKICAgICAgICAgYnJl
YWs7CkBAIC00OTgyLDE3ICs0OTk3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRj
aENoYXIoTm9kZQogICAgICAgICAKICAgICAgICAgb3AxLnVzZSgpOwogICAgICAgICAKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICBhZGRCcmFuY2goCi0gICAgICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0NjQoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMVJl
Z3MuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlciksCi0gICAgICAgICAgICBkYXRhLT5m
YWxsVGhyb3VnaC5ibG9jayk7Ci0jZWxzZQotICAgICAgICBhZGRCcmFuY2goCi0gICAgICAgICAg
ICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIG9wMVJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSksCi0g
ICAgICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7Ci0jZW5kaWYKKyAgICAgICAgYWRk
QnJhbmNoKGJyYW5jaE5vdENlbGwob3AxUmVncykpOwogICAgICAgICAKICAgICAgICAgYWRkQnJh
bmNoKAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoU3RydWN0dXJlUHRyKApAQCAtNTI4MiwxNyAr
NTI4Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmcoTm8KICAgICAg
ICAgCiAgICAgICAgIG9wMS51c2UoKTsKICAgICAgICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgYWRkQnJhbmNoKAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KAotICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDFSZWdzLmdwcigpLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpLAotICAgICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2guYmxvY2sp
OwotI2Vsc2UKLSAgICAgICAgYWRkQnJhbmNoKAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFSZWdzLnRhZ0dQ
UigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpLAotICAgICAgICAgICAgZGF0YS0+
ZmFsbFRocm91Z2guYmxvY2spOwotI2VuZGlmCisgICAgICAgIGFkZEJyYW5jaChicmFuY2hOb3RD
ZWxsKG9wMVJlZ3MpKTsKICAgICAgICAgCiAgICAgICAgIGFkZEJyYW5jaCgKICAgICAgICAgICAg
IG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE2NTY4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAt
ODYxLDggKzg2MSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0g
Z2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CiAgICAg
ICAgIGluZm8uaW5pdENlbGwobm9kZSwgbm9kZS0+cmVmQ291bnQoKSwgcmVnKTsKICAgICB9Ci0g
ICAgdm9pZCBib29sZWFuUmVzdWx0KEdQUlJlZyByZWcsIE5vZGUqIG5vZGUsIFVzZUNoaWxkcmVu
TW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQorICAgIHZvaWQgYmxlc3NlZEJvb2xlYW5SZXN1
bHQoR1BSUmVnIHJlZywgTm9kZSogbm9kZSwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNl
Q2hpbGRyZW4pCiAgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVnLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBtb2RlKTsKKyNlbHNlCiAgICAgICAg
IGlmIChtb2RlID09IENhbGxVc2VDaGlsZHJlbikKICAgICAgICAgICAgIHVzZUNoaWxkcmVuKG5v
ZGUpOwogCkBAIC04NzAsNiArODczLDE0IEBAIHB1YmxpYzoKICAgICAgICAgbV9ncHJzLnJldGFp
bihyZWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckJvb2xlYW4pOwogICAgICAgICBHZW5l
cmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0
dWFsUmVnaXN0ZXIpOwogICAgICAgICBpbmZvLmluaXRCb29sZWFuKG5vZGUsIG5vZGUtPnJlZkNv
dW50KCksIHJlZyk7CisjZW5kaWYKKyAgICB9CisgICAgdm9pZCB1bmJsZXNzZWRCb29sZWFuUmVz
dWx0KEdQUlJlZyByZWcsIE5vZGUqIG5vZGUsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVz
ZUNoaWxkcmVuKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBibGVzc0Jvb2xl
YW4ocmVnKTsKKyNlbmRpZgorICAgICAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZWcsIG5vZGUs
IG1vZGUpOwogICAgIH0KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHZvaWQganNWYWx1ZVJlc3Vs
dChHUFJSZWcgcmVnLCBOb2RlKiBub2RlLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRK
UywgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCkBAIC04OTAsNiArOTAx
LDE2IEBAIHB1YmxpYzoKICAgICAgICAganNWYWx1ZVJlc3VsdChyZWcsIG5vZGUsIERhdGFGb3Jt
YXRKUywgbW9kZSk7CiAgICAgfQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICB2b2lkIGJv
b2xlYW5SZXN1bHQoR1BSUmVnIHJlZywgTm9kZSogbm9kZSwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUg
PSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgeworICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hp
bGRyZW4pCisgICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKKworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAg
ICAgIG1fZ3Bycy5yZXRhaW4ocmVnLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJCb29sZWFu
KTsKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0
dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgaW5mby5pbml0Qm9vbGVhbihu
b2RlLCBub2RlLT5yZWZDb3VudCgpLCByZWcpOworICAgIH0KICAgICB2b2lkIGpzVmFsdWVSZXN1
bHQoR1BSUmVnIHRhZywgR1BSUmVnIHBheWxvYWQsIE5vZGUqIG5vZGUsIERhdGFGb3JtYXQgZm9y
bWF0ID0gRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJl
bikKICAgICB7CiAgICAgICAgIGlmIChtb2RlID09IENhbGxVc2VDaGlsZHJlbikKQEAgLTE5ODAs
OCArMjAwMSwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlT2JqZWN0VG9PYmplY3RPck90
aGVyRXF1YWxpdHkoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCk7CiAgICAgdm9pZCBj
b21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoRWRnZSB2YWx1ZSk7CiAgICAgdm9pZCBjb21w
aWxlTG9naWNhbE5vdChOb2RlKik7CisgICAgdm9pZCBjb21waWxlU3RyaW5nRXF1YWxpdHkoCisg
ICAgICAgIE5vZGUqLCBHUFJSZWcgbGVmdEdQUiwgR1BSUmVnIHJpZ2h0R1BSLCBHUFJSZWcgbGVu
Z3RoR1BSLAorICAgICAgICBHUFJSZWcgbGVmdFRlbXBHUFIsIEdQUlJlZyByaWdodFRlbXBHUFIs
IEdQUlJlZyBsZWZ0VGVtcDJHUFIsCisgICAgICAgIEdQUlJlZyByaWdodFRlbXAyR1BSLCBKSVRD
b21waWxlcjo6SnVtcExpc3QgZmFzdFRydWUsCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlz
dCBmYXN0U2xvdyk7CiAgICAgdm9pZCBjb21waWxlU3RyaW5nRXF1YWxpdHkoTm9kZSopOwogICAg
IHZvaWQgY29tcGlsZVN0cmluZ0lkZW50RXF1YWxpdHkoTm9kZSopOworICAgIHZvaWQgY29tcGls
ZVN0cmluZ1RvVW50eXBlZEVxdWFsaXR5KE5vZGUqLCBFZGdlIHN0cmluZ0VkZ2UsIEVkZ2UgdW50
eXBlZEVkZ2UpOworICAgIHZvaWQgY29tcGlsZVN0cmluZ0lkZW50VG9Ob3RTdHJpbmdWYXJFcXVh
bGl0eShOb2RlKiwgRWRnZSBzdHJpbmdFZGdlLCBFZGdlIG5vdFN0cmluZ1ZhckVkZ2UpOwogICAg
IHZvaWQgY29tcGlsZVN0cmluZ1plcm9MZW5ndGgoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZU1p
c2NTdHJpY3RFcShOb2RlKik7CiAKQEAgLTIwNzgsNiArMjEwNiwxNSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjb21waWxlTmV3RnVuY3Rpb25FeHByZXNzaW9uKE5vZGUqKTsKICAgICBib29sIGNvbXBp
bGVSZWdFeHBFeGVjKE5vZGUqKTsKICAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBicmFuY2hJ
c0NlbGwoSlNWYWx1ZVJlZ3MpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGJyYW5jaE5vdENlbGwo
SlNWYWx1ZVJlZ3MpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGJyYW5jaElzT3RoZXIoSlNWYWx1
ZVJlZ3MsIEdQUlJlZyB0ZW1wR1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBicmFuY2hOb3RP
dGhlcihKU1ZhbHVlUmVncywgR1BSUmVnIHRlbXBHUFIpOworICAgIAorICAgIHZvaWQgbW92ZVRy
dWVUbyhHUFJSZWcpOworICAgIHZvaWQgbW92ZUZhbHNlVG8oR1BSUmVnKTsKKyAgICB2b2lkIGJs
ZXNzQm9vbGVhbihHUFJSZWcpOworICAgIAogICAgIC8vIHNpemUgY2FuIGJlIGFuIGltbWVkaWF0
ZSBvciBhIHJlZ2lzdGVyLCBhbmQgbXVzdCBiZSBpbiBieXRlcy4gSWYgc2l6ZSBpcyBhIHJlZ2lz
dGVyLAogICAgIC8vIGl0IG11c3QgYmUgYSBkaWZmZXJlbnQgcmVnaXN0ZXIgdGhhbiByZXN1bHRH
UFIuIEVtaXRzIGNvZGUgdGhhdCBwbGFjZSBhIHBvaW50ZXIgdG8KICAgICAvLyB0aGUgZW5kIG9m
IHRoZSBhbGxvY2F0aW9uLiBUaGUgcmV0dXJuZWQganVtcCBpcyB0aGUganVtcCB0byB0aGUgc2xv
dyBwYXRoLgpAQCAtMjE5Myw2ICsyMjMwLDcgQEAgcHVibGljOgogICAgIHZvaWQgc3BlY3VsYXRl
U3RyaW5nSWRlbnQoRWRnZSBlZGdlLCBHUFJSZWcgc3RyaW5nKTsKICAgICB2b2lkIHNwZWN1bGF0
ZVN0cmluZ0lkZW50KEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKEVkZ2UpOworICAg
IHZvaWQgc3BlY3VsYXRlTm90U3RyaW5nVmFyKEVkZ2UpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFN0cnVjdHVyZUxvY2F0aW9uVHlwZT4KICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZ09iamVjdEZv
clN0cnVjdHVyZShFZGdlLCBTdHJ1Y3R1cmVMb2NhdGlvblR5cGUpOwogICAgIHZvaWQgc3BlY3Vs
YXRlU3RyaW5nT2JqZWN0KEVkZ2UsIEdQUlJlZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1VzZUtpbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVXNlS2luZC5jcHAJKHJldmlzaW9uIDE2NTY4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDYgKzkxLDkg
QEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFVzZQogICAgIGNhc2UgU3Ry
aW5nT3JTdHJpbmdPYmplY3RVc2U6CiAgICAgICAgIG91dC5wcmludCgiU3RyaW5nT3JTdHJpbmdP
YmplY3QiKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb3RTdHJpbmdWYXJVc2U6CisgICAg
ICAgIG91dC5wcmludCgiTm90U3RyaW5nVmFyIik7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Tm90Q2VsbFVzZToKICAgICAgICAgb3V0LnByaW50KCJOb3RDZWxsIik7CiAgICAgICAgIGJyZWFr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHJldmlzaW9uIDE2
NTY4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIGVudW0gVXNlS2luZCB7CiAgICAgS25vd25TdHJpbmdV
c2UsCiAgICAgU3RyaW5nT2JqZWN0VXNlLAogICAgIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlLAor
ICAgIE5vdFN0cmluZ1ZhclVzZSwKICAgICBOb3RDZWxsVXNlLAogICAgIE90aGVyVXNlLAogICAg
IE1pc2NVc2UsCkBAIC05Myw2ICs5NCw4IEBAIEFMV0FZU19JTkxJTkUgU3BlY3VsYXRlZFR5cGUg
dHlwZUZpbHRlckYKICAgICAgICAgcmV0dXJuIFNwZWNTdHJpbmdPYmplY3Q7CiAgICAgY2FzZSBT
dHJpbmdPclN0cmluZ09iamVjdFVzZToKICAgICAgICAgcmV0dXJuIFNwZWNTdHJpbmcgfCBTcGVj
U3RyaW5nT2JqZWN0OworICAgIGNhc2UgTm90U3RyaW5nVmFyVXNlOgorICAgICAgICByZXR1cm4g
flN0cmluZ1ZhcjsKICAgICBjYXNlIE5vdENlbGxVc2U6CiAgICAgICAgIHJldHVybiB+U3BlY0Nl
bGw7CiAgICAgY2FzZSBPdGhlclVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NKU1ZhbHVlLmgJKHJldmlzaW9uIDE2NTY4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwx
MiBAQCB1bmlvbiBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yIHsKICNkZWZpbmUgVGFnT2Zmc2V0IChP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpCiAjZGVm
aW5lIFBheWxvYWRPZmZzZXQgKE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMucGF5bG9hZCkpCiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorI2RlZmluZSBDZWxsUGF5
bG9hZE9mZnNldCAwCisjZWxzZQorI2RlZmluZSBDZWxsUGF5bG9hZE9mZnNldCBQYXlsb2FkT2Zm
c2V0CisjZW5kaWYKKwogZW51bSBXaGljaFZhbHVlV29yZCB7CiAgICAgVGFnV29yZCwKICAgICBQ
YXlsb2FkV29yZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227011</attachid>
            <date>2014-03-17 21:53:55 -0700</date>
            <delta_ts>2014-03-18 12:35:14 -0700</delta_ts>
            <desc>basically done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>74014</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY1Nzk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBA
QAorMjAxNC0wMy0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBDb21wYXJlU3RyaWN0RXEoU3RyaW5nSWRlbnQ6LCBOb3RTdHJpbmdWYXI6KSBhbmQgQ29t
cGFyZVN0cmljdEVxKFN0cmluZzosIFVudHlwZWQ6KQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMzAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXZSBjYW4gcXVpY2tseSBzdHJpY3RseSBj
b21wYXJlIFN0cmluZ0lkZW50J3MgdG8gTm90U3RyaW5nVmFyJ3MgYW5kIFN0cmluZydzIHRvIFVu
dHlwZWQncy4KKyAgICAgICAgVGhpcyBtYWtlcyB0aGUgREZHIGF3YXJlIG9mIHRoaXMuCisgICAg
ICAgIAorICAgICAgICBBbHNvIGFkZHMgU3RyaW5nSWRlbnQtdG8tU3RyaW5nSWRlbnQgYW5kIFN0
cmluZ0lkZW50LXRvLU5vdFN0cmluZ1ZhciBzdHJpY3QgY29tcGFyaXNvbnMgdG8KKyAgICAgICAg
dGhlIEZUTC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxzbyBnaXZlcyB0aGUgREZHIHNvbWUg
YWJzdHJhY3Rpb25zIGZvciBjaGVja2luZyBzb21ldGhpbmcgaXMgYSBjZWxsIG9yIGlzIG90aGVy
LgorICAgICAgICBUaGlzIG1hZGUgdGhpcyBwYXRjaCBlYXNpZXIgdG8gd3JpdGUgYW5kIGFsc28g
c2ltcGxpZmllZCBhIGJ1bmNoIG9mIG90aGVyIHN0dWZmLgorCisgICAgICAgICogYXNzZW1ibGVy
L0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3Q6Okp1bXBMaXN0KToKKyAgICAgICAgKiBieXRlY29kZS9TcGVjdWxh
dGVkVHlwZS5oOgorICAgICAgICAoSlNDOjppc05vdFN0cmluZ1ZhclNwZWN1bGF0aW9uKToKKyAg
ICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQ
aGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6OmNoaWxkRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzaG91bGRT
cGVjdWxhdGVOb3RTdHJpbmdWYXIpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6
CisgICAgICAgIChKU0M6OkRGRzo6U2FmZVRvRXhlY3V0ZUVkZ2U6Om9wZXJhdG9yKCkpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVJbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlSW5zdGFuY2VPZkZvck9iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUJvb2xlYW5Db21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ0VxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1RvVW50eXBlZEVxdWFsaXR5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ0lkZW50RXF1YWxpdHkpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5nSWRlbnRUb05v
dFN0cmluZ1ZhckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVN0cmluZ1plcm9MZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpzcGVjdWxhdGVPYmplY3RPck90aGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRlU3RyaW5nSWRlbnRBbmRMb2FkU3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU5vdFN0cmluZ1Zhcik6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU5vdENlbGwpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPdGhlcik6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmVtaXRTd2l0Y2hDaGFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZW1pdFN3aXRjaFN0cmluZyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmJsZXNzZWRCb29sZWFuUmVz
dWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dW5ibGVzc2VkQm9vbGVh
blJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmJvb2xlYW5SZXN1
bHQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBh
cmVOdWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9i
amVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxv
Z2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0
T3JPdGhlckJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUpOgorICAgICAgICAoSlNDOjpERkc6OmJyYW5jaElzQ2VsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6YnJhbmNoTm90Q2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmJy
YW5jaElzT3RoZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hO
b3RPdGhlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om1vdmVUcnVlVG8p
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjptb3ZlRmFsc2VUbyk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmJsZXNzQm9vbGVhbik6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVs
bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxs
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2Jq
ZWN0T3JPdGhlckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJy
YW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hJc0NlbGwpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hOb3RDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6YnJhbmNoSXNPdGhlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmJyYW5jaE5vdE90aGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6bW92ZVRydWVUbyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om1v
dmVGYWxzZVRvKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Ymxlc3NCb29s
ZWFuKToKKyAgICAgICAgKiBkZmcvREZHVXNlS2luZC5jcHA6CisgICAgICAgIChXVEY6OnByaW50
SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdVc2VLaW5kLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6dHlwZUZpbHRlckZvcik6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNv
bXBhcmVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd1N0
cmluZyk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd1N0cmluZ0lkZW50
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlU3RyaW5nKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlU3RyaW5nSWRlbnQpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVOb3RTdHJpbmdWYXIpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5oOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9zdHJp
bmctaWRlbnQtdG8tbm90LXN0cmluZy12YXItZXF1YWxpdHkuanM6IEFkZGVkLgorICAgICAgICAo
Zm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgICh0ZXN0KToKKwogMjAxNC0wMy0xNyAgTWlj
aGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBWOCByZWdleHAgc3Bl
bmRzIG1vc3Qgb2YgaXRzIHRpbWUgaW4gb3BlcmF0aW9uR2V0QnlJZApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDE2NTc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OTMsNyArNjkz
LDggQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgSnVtcExpc3QoSnVtcCBqdW1wKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBhcHBlbmQoanVtcCk7CisgICAgICAgICAgICBpZiAoanVtcC5p
c1NldCgpKQorICAgICAgICAgICAgICAgIGFwcGVuZChqdW1wKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHZvaWQgbGluayhBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGU+KiBtYXNt
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRU
eXBlLmgJKHJldmlzaW9uIDE2NTc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDExIEBAIGlu
bGluZSBib29sIGlzU3RyaW5nSWRlbnRTcGVjdWxhdGlvbihTcGUKICAgICByZXR1cm4gdmFsdWUg
PT0gU3BlY1N0cmluZ0lkZW50OwogfQogCitpbmxpbmUgYm9vbCBpc05vdFN0cmluZ1ZhclNwZWN1
bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiAhKHZhbHVlICYgU3Bl
Y1N0cmluZ1Zhcik7Cit9CisKIGlubGluZSBib29sIGlzU3RyaW5nU3BlY3VsYXRpb24oU3BlY3Vs
YXRlZFR5cGUgdmFsdWUpCiB7CiAgICAgcmV0dXJuICEhdmFsdWUgJiYgKHZhbHVlICYgU3BlY1N0
cmluZykgPT0gdmFsdWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE2NTc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNiw2ICs0MzYsMjYgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBmaXhFZGdlPE1pc2NVc2U+KG5vZGUtPmNoaWxkMigp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nSWRlbnQoKQorICAgICAgICAg
ICAgICAgICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVOb3RTdHJpbmdWYXIoKSkg
eworICAgICAgICAgICAgICAgIGZpeEVkZ2U8U3RyaW5nSWRlbnRVc2U+KG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgICAgICBmaXhFZGdlPE5vdFN0cmluZ1ZhclVzZT4obm9kZS0+Y2hpbGQy
KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmdJZGVudCgpCisgICAgICAg
ICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU5vdFN0cmluZ1Zhcigp
KSB7CisgICAgICAgICAgICAgICAgZml4RWRnZTxTdHJpbmdJZGVudFVzZT4obm9kZS0+Y2hpbGQy
KCkpOworICAgICAgICAgICAgICAgIGZpeEVkZ2U8Tm90U3RyaW5nVmFyVXNlPihub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAg
ICAgICAgICAgZml4RWRnZTxTdHJpbmdVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIo
KS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBmaXhFZGdlPFN0
cmluZ1VzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE2NTc5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQwLDYgKzEzNDAsMTcg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gaXNCaW5hcnlVc2VLaW5kKHVzZUtpbmQs
IHVzZUtpbmQpOwogICAgIH0KICAgICAKKyAgICBFZGdlIGNoaWxkRm9yKFVzZUtpbmQgdXNlS2lu
ZCkKKyAgICB7CisgICAgICAgIGlmIChjaGlsZDEoKS51c2VLaW5kKCkgPT0gdXNlS2luZCkKKyAg
ICAgICAgICAgIHJldHVybiBjaGlsZDEoKTsKKyAgICAgICAgaWYgKGNoaWxkMigpLnVzZUtpbmQo
KSA9PSB1c2VLaW5kKQorICAgICAgICAgICAgcmV0dXJuIGNoaWxkMigpOworICAgICAgICBpZiAo
Y2hpbGQzKCkudXNlS2luZCgpID09IHVzZUtpbmQpCisgICAgICAgICAgICByZXR1cm4gY2hpbGQz
KCk7CisgICAgICAgIHJldHVybiBFZGdlKCk7CisgICAgfQorICAgIAogICAgIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb24oKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbjsKQEAg
LTE0MTksNiArMTQzMCwxMSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICByZXR1cm4g
aXNTdHJpbmdJZGVudFNwZWN1bGF0aW9uKHByZWRpY3Rpb24oKSk7CiAgICAgfQorICAgIAorICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlTm90U3RyaW5nVmFyKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBpc05vdFN0cmluZ1ZhclNwZWN1bGF0aW9uKHByZWRpY3Rpb24oKSk7CisgICAgfQogIAogICAg
IGJvb2wgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTY1Nzk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFN0cmluZ1VzZToKICAg
ICAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAgICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdP
YmplY3RVc2U6CisgICAgICAgIGNhc2UgTm90U3RyaW5nVmFyVXNlOgogICAgICAgICBjYXNlIE5v
dENlbGxVc2U6CiAgICAgICAgIGNhc2UgT3RoZXJVc2U6CiAgICAgICAgIGNhc2UgTWlzY1VzZToK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTY1Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDgg
KzIzNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAgICBK
SVRDb21waWxlcjo6SnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkOyAgIAogICAgIGlmICht
YXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAg
IGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQotICAgICAgICAgICAgbm90Q2VsbCA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnVGFnR1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotCisgICAgICAgICAgICBub3RDZWxsID0gYnJh
bmNoTm90Q2VsbChhcmcuanNWYWx1ZVJlZ3MoKSk7CisgICAgICAgIAogICAgICAgICBtX2ppdC5t
b3ZlKGludmVydCA/IFRydXN0ZWRJbW0zMigxKSA6IFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UGF5
bG9hZEdQUik7CiAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBtX2ppdC5qdW1w
KCk7CiAgICAgfSBlbHNlIHsKQEAgLTI0NSw4ICsyNDUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgICAgIEdQUlRlbXBvcmFyeSByZW1vdGVHbG9iYWxP
YmplY3QodGhpcyk7CiAKICAgICAgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkp
Ci0gICAgICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBhcmdUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7Ci0KKyAg
ICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKGFyZy5qc1ZhbHVlUmVncygpKTsKKyAg
ICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8s
IAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYXJnUGF5bG9hZEdQUiwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCAKQEAgLTMwNSwxNiArMzA1LDE2IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKIAogICAgIGlmIChtYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIGlmICghaXNLbm93
bkNlbGwob3BlcmFuZC5ub2RlKCkpKQotICAgICAgICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZykpOwotCisgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoTm90Q2VsbChh
cmcuanNWYWx1ZVJlZ3MoKSk7CisgICAgICAgIAogICAgICAgICBqdW1wKGludmVydCA/IHRha2Vu
IDogbm90VGFrZW4sIEZvcmNlSnVtcCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IGxvY2FsR2xvYmFsT2JqZWN0KHRoaXMpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVtb3Rl
R2xvYmFsT2JqZWN0KHRoaXMpOwogCiAgICAgICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5u
b2RlKCkpKQotICAgICAgICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgYXJnVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykp
OwotCisgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoTm90Q2VsbChhcmcuanNWYWx1ZVJlZ3Mo
KSk7CisgICAgICAgIAogICAgICAgICBicmFuY2hUZXN0OChKSVRDb21waWxlcjo6WmVybywgCiAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhhcmdQYXlsb2FkR1BSLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSwgCkBAIC02ODIsNyArNjgyLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAgbV9qaXQuZW1pdFN0b3Jl
Q29kZU9yaWdpbihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIAotICAgIHNsb3dQYXRoLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZVRhZ0dQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgc2xvd1BhdGguYXBwZW5k
KGJyYW5jaE5vdENlbGwoY2FsbGVlLmpzVmFsdWVSZWdzKCkpKTsKICAgICBzbG93UGF0aC5hcHBl
bmQobV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2Fs
bGVlUGF5bG9hZEdQUiwgdGFyZ2V0VG9DaGVjaykpOwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlUGF5bG9hZEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVu
Y3Rpb24sIG1fc2NvcGUpKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgbV9qaXQuc3RvcmVQdHIo
cmVzdWx0UGF5bG9hZEdQUiwgY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChKU1N0YWNrOjpTY29wZUNo
YWluKSk7CkBAIC05ODAsOCArOTgwLDE2IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUNlbGwKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVCgoaW5mby5zcGlsbEZvcm1h
dCgpICYgRGF0YUZvcm1hdEpTKSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdENl
bGwpOwotICAgICAgICBpZiAodHlwZSAmIH5TcGVjQ2VsbCkKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpKSwgZWRnZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICBpZiAodHlwZSAmIH5TcGVjQ2VsbCkgewor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgICAgICBCYWRUeXBlLAor
ICAgICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVyKSksCisgICAgICAgICAgICAgICAgZWRnZSwKKyAgICAgICAgICAgICAgICBt
X2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdp
c3RlciksCisgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSkpOworICAgICAgICB9CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAg
ICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwg
Z3ByKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlclNwaWxsZWQpOwpAQCAtMTAwMSw4ICsxMDA5LDExIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBpbmZvLnBh
eWxvYWRHUFIoKTsKICAgICAgICAgbV9ncHJzLmxvY2sodGFnR1BSKTsKICAgICAgICAgbV9ncHJz
LmxvY2socGF5bG9hZEdQUik7Ci0gICAgICAgIGlmICh0eXBlICYgflNwZWNDZWxsKQotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxv
YWRHUFIpLCBlZGdlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRh
Z0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAgIGlmICh0eXBl
ICYgflNwZWNDZWxsKSB7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAg
ICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIGVkZ2UsCisg
ICAgICAgICAgICAgICAgYnJhbmNoTm90Q2VsbChpbmZvLmpzVmFsdWVSZWdzKCkpKTsKKyAgICAg
ICAgfQogICAgICAgICBtX2dwcnMudW5sb2NrKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxl
YXNlKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxvYWRHUFIpOwpAQCAtMTI0
MCw4ICsxMjUxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQog
ICAgIAogICAgIC8vIEl0IHNlZW1zIHRoYXQgbW9zdCBvZiB0aGUgdGltZSB3aGVuIHByb2dyYW1z
IGRvIGEgPT0gYiB3aGVyZSBiIG1heSBiZSBlaXRoZXIgbnVsbC91bmRlZmluZWQKICAgICAvLyBv
ciBhbiBvYmplY3QsIGIgaXMgdXN1YWxseSBhbiBvYmplY3QuIEJhbGFuY2UgdGhlIGJyYW5jaGVz
IHRvIG1ha2UgdGhhdCBjYXNlIGZhc3QuCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmlnaHRO
b3RDZWxsID0KLSAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBvcDJUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgcmlnaHROb3RDZWxsID0gYnJhbmNoTm90Q2VsbChvcDIuanNWYWx1ZVJl
Z3MoKSk7CiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmln
aHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4KICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnRWYWxpZCkgewpAQCAtMTMzNCw4ICsxMzQ0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIAogICAgIC8vIEl0IHNlZW1zIHRoYXQgbW9zdCBv
ZiB0aGUgdGltZSB3aGVuIHByb2dyYW1zIGRvIGEgPT0gYiB3aGVyZSBiIG1heSBiZSBlaXRoZXIg
bnVsbC91bmRlZmluZWQKICAgICAvLyBvciBhbiBvYmplY3QsIGIgaXMgdXN1YWxseSBhbiBvYmpl
Y3QuIEJhbGFuY2UgdGhlIGJyYW5jaGVzIHRvIG1ha2UgdGhhdCBjYXNlIGZhc3QuCi0gICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgcmlnaHROb3RDZWxsID0KLSAgICAgICAgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDJUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmlnaHROb3RDZWxsID0gYnJh
bmNoTm90Q2VsbChvcDIuanNWYWx1ZVJlZ3MoKSk7CiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0
IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4KICAgICBpZiAo
bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCkgewpAQCAtMTQzMiw3ICsxNDQx
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgICAgICBz
dHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IGJyYW5jaE5vdENlbGwodmFsdWUuanNWYWx1ZVJl
Z3MoKSk7CiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50VmFsaWQpIHsK
ICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlUmVncyh2YWx1ZVRh
Z0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0
LApAQCAtMTU2Miw3ICsxNTcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9y
T3RoZXJCcgogICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7
CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgIAotICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKHZhbHVlLmpz
VmFsdWVSZWdzKCkpOwogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElz
U3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAgICAgSlNW
YWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIG5vZGVVc2UsICh+U3BlY0Nl
bGwpIHwgU3BlY09iamVjdCwKQEAgLTMwNjksNyArMzA3OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxVGFnR1BS
LCByZXN1bHRUYWdHUFIpOwogICAgICAgICAgICAgbV9qaXQubW92ZShvcDFQYXlsb2FkR1BSLCBy
ZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGFscmVhZHlQcmltaXRpdmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFscmVhZHlQcmltaXRpdmUgPSBi
cmFuY2hOb3RDZWxsKG9wMS5qc1ZhbHVlUmVncygpKTsKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG5vdFByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMVBheWxvYWRHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBhbHJlYWR5UHJpbWl0aXZlLmxpbmsoJm1faml0KTsKQEAgLTMwOTksOCArMzEwOCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZTsKICAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY1N0cmluZykgewotICAgICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoMSA9IG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpKTsKKyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93
UGF0aDEgPSBicmFuY2hOb3RDZWxsKG9wMS5qc1ZhbHVlUmVncygpKTsKICAgICAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aDIgPSBtX2ppdC5icmFuY2hQdHIoCiAgICAgICAg
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKICAgICAgICAgICAgICAgICAgICAg
SklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwKQEAgLTM0NjcsOCArMzQ3NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVnIHRlbXBUYWdHUFIgPSB0ZW1wVGFnLmdwcigp
OwogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsK
LSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGhpc1ZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hOb3RDZWxs
KHRoaXNWYWx1ZS5qc1ZhbHVlUmVncygpKSk7CiAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoOCgKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRoaXNWYWx1ZVBheWxvYWRHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLApAQCAtMzY3OSw3ICszNjg2LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAKICAgICAgICAgICAgIGJh
c2UudXNlKCk7CiAgICAgICAgIAotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2Vs
bCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYmFzZVRhZ0dQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKGJhc2UuanNWYWx1ZVJlZ3MoKSk7CiAgICAgICAg
IAogICAgICAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGJhc2VU
YWdHUFIsIGJhc2VQYXlsb2FkR1BSLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5v
ZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgbm90Q2VsbCk7CiAgICAgICAgIApAQCAtMzczNSw3ICsz
NzQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAKICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIAotICAgICAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpO
b3RFcXVhbCwgYmFzZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKGJhc2Uu
anNWYWx1ZVJlZ3MoKSk7CiAgICAgICAgIAogICAgICAgICAgICAgY2FjaGVkR2V0QnlJZChub2Rl
LT5vcmlnaW4uc2VtYW50aWMsIGJhc2VUYWdHUFIsIGJhc2VQYXlsb2FkR1BSLCByZXN1bHRUYWdH
UFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgbm90Q2VsbCwg
RG9udFNwaWxsKTsKICAgICAgICAgCkBAIC00MDc5LDcgKzQwODYsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUlRlbXBvcmFyeSBsb2NhbEds
b2JhbE9iamVjdCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlbW90ZUdsb2JhbE9iamVj
dCh0aGlzKTsKIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0NlbGwgPSBtX2ppdC5icmFu
Y2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHZhbHVlLnRhZ0dQUigpLCBKSVRDb21waWxlcjo6VHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
aXNDZWxsID0gYnJhbmNoSXNDZWxsKHZhbHVlLmpzVmFsdWVSZWdzKCkpOwogICAgICAgICAKICAg
ICAgICAgbV9qaXQuY29tcGFyZTMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdmFsdWUudGFnR1BSKCks
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHQuZ3ByKCkpOwogICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwpAQCAtNDEzNSw3ICs0
MTQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVlLCBUYWdXb3JkKTsKICAgICAgICAg
Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCwgdmFsdWUudGFnR1BSKCksIEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05v
dENlbGwgPSBicmFuY2hOb3RDZWxsKHZhbHVlLmpzVmFsdWVSZWdzKCkpOwogICAgICAgICAKICAg
ICAgICAgbV9qaXQuY29tcGFyZTgoSklUQ29tcGlsZXI6OkVxdWFsLCAKICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHZhbHVlLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIApAQCAtNDE4OCw3ICs0MTk1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gVW50eXBlZFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVz
ZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKTsKIAotICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6
Tm90RXF1YWwsIHRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaE5vdENl
bGwodmFsdWUuanNWYWx1ZVJlZ3MoKSk7CiAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgIT0gVW50eXBlZFVzZSkKICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKEpTVmFsdWVS
ZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCwgaXNOb3RD
ZWxsKTsKIApAQCAtNDc0Nyw2ICs0NzU0LDQ4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcihKU0NlbGwKIH0KICNlbmRpZiAvLyBFTkFCTEUoR0dDKQogCitKSVRDb21waWxlcjo6
SnVtcCBTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoSXNDZWxsKEpTVmFsdWVSZWdzIHJlZ3MpCit7Cisg
ICAgcmV0dXJuIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVncy50YWdH
UFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKK30KKworSklUQ29tcGlsZXI6
Okp1bXAgU3BlY3VsYXRpdmVKSVQ6OmJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3MgcmVncykKK3sK
KyAgICByZXR1cm4gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZWdz
LnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworfQorCitKSVRDb21w
aWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoSXNPdGhlcihKU1ZhbHVlUmVncyByZWdz
LCBHUFJSZWcgdGVtcEdQUikKK3sKKyAgICBtX2ppdC5tb3ZlKHJlZ3MudGFnR1BSKCksIHRlbXBH
UFIpOworICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCB0ZW1wR1BSKTsKKyAgICByZXR1
cm4gbV9qaXQuYnJhbmNoMzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdGVtcEdQ
UiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdWxsVGFn
KSk7Cit9CisKK0pJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpicmFuY2hOb3RPdGhl
cihKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUikKK3sKKyAgICBtX2ppdC5tb3ZlKHJl
Z3MudGFnR1BSKCksIHRlbXBHUFIpOworICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCB0
ZW1wR1BSKTsKKyAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIoCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjpOdWxsVGFnKSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om1vdmVU
cnVlVG8oR1BSUmVnIGdwcikKK3sKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgZ3By
KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bW92ZUZhbHNlVG8oR1BSUmVnIGdwcikKK3sK
KyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgZ3ByKTsKK30KKwordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Ymxlc3NCb29sZWFuKEdQUlJlZyBncHIpCit7Cit9CisKICNlbmRpZgogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE2NTc5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0Miw3ICsyNDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2
ZU5vblBlCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZDsK
ICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKSkg
ewogICAgICAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQubm9kZSgpKSkKLSAgICAgICAgICAg
IG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGFy
Z0dQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgICAgIG5vdENlbGwgPSBi
cmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKGFyZ0dQUikpOwogCiAgICAgICAgIG1faml0Lm1vdmUo
aW52ZXJ0ID8gVHJ1c3RlZEltbTMyKDEpIDogVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOwog
ICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gbV9qaXQuanVtcCgpOwpAQCAtMjUy
LDggKzI1Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKICAgICAgICAgaWYgKCFpc0tub3du
Q2VsbChvcGVyYW5kLm5vZGUoKSkpCi0gICAgICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNo
VGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBhcmdHUFIsIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3Rlcik7Ci0KKyAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKEpTVmFsdWVS
ZWdzKGFyZ0dQUikpOworICAgICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICBKSVRD
b21waWxlcjo6Tm9uWmVybywgCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhhcmdH
UFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgCkBAIC0zMTEsOCArMzExLDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIAogICAgIGlmICht
YXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAg
IGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQotICAgICAgICAgICAgbm90Q2VsbCA9
IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgYXJnR1BSLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotCisgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoTm90
Q2VsbChKU1ZhbHVlUmVncyhhcmdHUFIpKTsKKyAgICAgICAgCiAgICAgICAgIGp1bXAoaW52ZXJ0
ID8gdGFrZW4gOiBub3RUYWtlbiwgRm9yY2VKdW1wKTsKICAgICB9IGVsc2UgewogICAgICAgICBH
UFJUZW1wb3JhcnkgbG9jYWxHbG9iYWxPYmplY3QodGhpcyk7CkBAIC0zMjAsOCArMzIwLDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQu
bm9kZSgpKSkKLSAgICAgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLQor
ICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3MoYXJnR1BSKSk7
CisgICAgICAgIAogICAgICAgICBicmFuY2hUZXN0OChKSVRDb21waWxlcjo6WmVybywgCiAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhhcmdHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpLCAKQEAgLTEzNjcsNyArMTM2Nyw3IEBAIEdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKIAogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCpt
X3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICBpZiAodHlwZSAmIH5TcGVjQ2Vs
bCkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3By
KSwgZWRnZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIs
IEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBicmFuY2hOb3RDZWxsKEpTVmFsdWVS
ZWdzKGdwcikpKTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0
YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQpAQCAtMTM3Nyw3ICsx
Mzc3LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAg
ICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAg
ICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGNoZWNrQ2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgY2hlY2tDZWxsID0gYnJhbmNoSXNDZWxsKEpTVmFsdWVSZWdzKGdwcikpOwog
ICAgICAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogICAgICAgICAgICAgY2hlY2tDZWxsLmxp
bmsoJm1faml0KTsKICAgICAgICAgfQpAQCAtMTM4OCw3ICsxMzg4LDcgQEAgR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5n
cHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgaWYgKHR5cGUgJiB+U3Bl
Y0NlbGwpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KGdwciksIGVkZ2UsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
Z3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgYnJhbmNoTm90Q2VsbChKU1Zh
bHVlUmVncyhncHIpKSk7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIs
IERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTE2MjIs
OCArMTYyMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUKICAg
ICAKICAgICAvLyBJdCBzZWVtcyB0aGF0IG1vc3Qgb2YgdGhlIHRpbWUgd2hlbiBwcm9ncmFtcyBk
byBhID09IGIgd2hlcmUgYiBtYXkgYmUgZWl0aGVyIG51bGwvdW5kZWZpbmVkCiAgICAgLy8gb3Ig
YW4gb2JqZWN0LCBiIGlzIHVzdWFsbHkgYW4gb2JqZWN0LiBCYWxhbmNlIHRoZSBicmFuY2hlcyB0
byBtYWtlIHRoYXQgY2FzZSBmYXN0LgotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJpZ2h0Tm90
Q2VsbCA9Ci0gICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgb3AyR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHJpZ2h0Tm90Q2VsbCA9IGJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3Mob3AyR1BSKSk7
CiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGls
ZCBtdXN0IGJlIGEgY2VsbC4gCiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50VmFsaWQpIHsKQEAgLTE3MTMsOCArMTcxMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQZWVwSG9sZU9iamUKIAogICAgIC8vIEl0IHNlZW1zIHRoYXQgbW9zdCBvZiB0aGUgdGlt
ZSB3aGVuIHByb2dyYW1zIGRvIGEgPT0gYiB3aGVyZSBiIG1heSBiZSBlaXRoZXIgbnVsbC91bmRl
ZmluZWQKICAgICAvLyBvciBhbiBvYmplY3QsIGIgaXMgdXN1YWxseSBhbiBvYmplY3QuIEJhbGFu
Y2UgdGhlIGJyYW5jaGVzIHRvIG1ha2UgdGhhdCBjYXNlIGZhc3QuCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgcmlnaHROb3RDZWxsID0KLSAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBvcDJHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmlnaHROb3RDZWxsID0gYnJhbmNoTm90Q2VsbChKU1Zh
bHVlUmVncyhvcDJHUFIpKTsKICAgICAKICAgICAvLyBXZSBrbm93IHRoYXQgd2l0aGluIHRoaXMg
YnJhbmNoLCByaWdodENoaWxkIG11c3QgYmUgYSBjZWxsLiAKICAgICBpZiAobWFzcXVlcmFkZXNB
c1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCkgewpAQCAtMTg0Nyw3ICsxODQ1LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgICAgICBzY3JhdGNoR1BSID0g
c2NyYXRjaC5ncHIoKTsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxs
ID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RD
ZWxsID0gYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyh2YWx1ZUdQUikpOwogICAgIGlmIChtYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZhbGlkKSB7CiAgICAgICAgIERGR19UWVBFX0NI
RUNLKAogICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlVXNlLCAoflNwZWND
ZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKQEAgLTE5OTcsNyAr
MTk5NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICAg
ICAgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogICAgIH0KIAotICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSk7CiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZh
bGlkKCkpIHsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1ZhbHVlUmVn
cyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgbV9qaXQuYnJh
bmNoU3RydWN0dXJlUHRyKApAQCAtMzQyMiw3ICszNDIwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAKICAgICAgICAgb3AxLnVzZSgpOwogICAg
ICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYWxyZWFkeVByaW1pdGl2ZSA9IG1f
aml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhbHJlYWR5
UHJpbWl0aXZlID0gYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyhvcDFHUFIpKTsKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90UHJpbWl0aXZlID0gbV9qaXQuYnJhbmNoU3RydWN0dXJl
UHRyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgCkBAIC0zNDUwLDggKzM0NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGRvbmU7CiAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNw
ZWNTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aDEg
PSBtX2ppdC5icmFuY2hUZXN0NjQoCi0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpO
b25aZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGgxID0gYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVn
cyhvcDFHUFIpKTsKICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aDIg
PSBtX2ppdC5icmFuY2hTdHJ1Y3R1cmVQdHIoCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpOb3RFcXVhbCwKICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
b3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLApAQCAtMzgxMCw4ICszODA3LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJS
ZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaFRlc3Q2NCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0aGlzVmFs
dWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3ModGhpc1ZhbHVlR1BSKSkpOwogICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDgoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0aGlzVmFs
dWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLApAQCAtNDAwOCw3ICs0MDA0LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAKICAg
ICAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgIAotICAgICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywg
YmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKGJhc2VHUFIpKTsK
ICAgICAgICAgCiAgICAgICAgICAgICBjYWNoZWRHZXRCeUlkKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywgYmFzZUdQUiwgcmVzdWx0R1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIG5vdENlbGwp
OwogICAgICAgICAKQEAgLTQwNTgsNyArNDA1NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOwogICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIGJhc2VH
UFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBub3RDZWxsID0gYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyhiYXNlR1BSKSk7CiAgICAg
ICAgIAogICAgICAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGJh
c2VHUFIsIHJlc3VsdEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBub3RDZWxsLCBEb250
U3BpbGwpOwogICAgICAgICAKQEAgLTQzODksNyArNDM4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlbW90ZUdsb2Jh
bE9iamVjdCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKLSAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENv
bXBpbGVyOjpaZXJvLCB2YWx1ZS5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNDZWxsID0gYnJhbmNoSXNDZWxsKHZhbHVlLmpzVmFs
dWVSZWdzKCkpOwogCiAgICAgICAgIG1faml0LmNvbXBhcmU2NChKSVRDb21waWxlcjo6RXF1YWws
IHZhbHVlLmdwcigpLCBUcnVzdGVkSW1tMzIoVmFsdWVVbmRlZmluZWQpLCByZXN1bHQuZ3ByKCkp
OwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwpAQCAtNDQ0
OSw3ICs0NDQ1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVlKTsKICAgICAgICAgCi0g
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChK
SVRDb21waWxlcjo6Tm9uWmVybywgdmFsdWUuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rl
cik7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaE5vdENlbGwo
dmFsdWUuanNWYWx1ZVJlZ3MoKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5jb21wYXJlOChK
SVRDb21waWxlcjo6RXF1YWwsIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3ModmFs
dWUuZ3ByKCksIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCAKQEAgLTQ1MDEsNyArNDQ5
Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
CiAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSB8
fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCBub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gU3RyaW5nVXNlKTsKIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05v
dENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZhbHVlR1BS
LCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBp
c05vdENlbGwgPSBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7CiAgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0gVW50eXBlZFVzZSkKICAgICAgICAgICAg
IERGR19UWVBFX0NIRUNLKEpTVmFsdWVTb3VyY2UodmFsdWVHUFIpLCBub2RlLT5jaGlsZDEoKSwg
U3BlY0NlbGwsIGlzTm90Q2VsbCk7CiAKQEAgLTUwNTYsOCArNTA1Miw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcKIHsKICAgICBKSVRDb21waWxlcjo6SnVtcCBp
c05vdENlbGw7CiAgICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQotICAgICAg
ICBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZh
bHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotCisgICAgICAgIGlzTm90Q2VsbCA9
IGJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3ModmFsdWVHUFIpKTsKKyAgICAKICAgICBKSVRDb21w
aWxlcjo6SnVtcCBvd25lck5vdE1hcmtlZE9yQWxyZWFkeVJlbWVtYmVyZWQgPSBtX2ppdC5jaGVj
a01hcmtCeXRlKG93bmVyR1BSKTsKICAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKG93bmVy
R1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOwogICAgIG93bmVyTm90TWFya2VkT3JBbHJlYWR5UmVt
ZW1iZXJlZC5saW5rKCZtX2ppdCk7CkBAIC01MDcwLDggKzUwNjYsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjp3cml0ZUJhcnJpZXIoSlNDZWxsCiB7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNO
b3RDZWxsOwogICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAg
aXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1
ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLQorICAgICAgICBpc05vdENlbGwgPSBi
cmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7CisgICAgCiAgICAgSklUQ29tcGls
ZXI6Okp1bXAgb3duZXJOb3RNYXJrZWRPckFscmVhZHlSZW1lbWJlcmVkID0gbV9qaXQuY2hlY2tN
YXJrQnl0ZShvd25lcik7CiAgICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lciwgc2Ny
YXRjaDEsIHNjcmF0Y2gyKTsKICAgICBvd25lck5vdE1hcmtlZE9yQWxyZWFkeVJlbWVtYmVyZWQu
bGluaygmbV9qaXQpOwpAQCAtNTA4MSw2ICs1MDc3LDQ5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OndyaXRlQmFycmllcihKU0NlbGwKIH0KICNlbmRpZiAvLyBFTkFCTEUoR0dDKQogCitKSVRDb21w
aWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoSXNDZWxsKEpTVmFsdWVSZWdzIHJlZ3Mp
Cit7CisgICAgcmV0dXJuIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywg
cmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKK30KKworSklUQ29tcGlsZXI6
Okp1bXAgU3BlY3VsYXRpdmVKSVQ6OmJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3MgcmVncykKK3sK
KyAgICByZXR1cm4gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBy
ZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworfQorCitKSVRDb21waWxlcjo6
SnVtcCBTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoSXNPdGhlcihKU1ZhbHVlUmVncyByZWdzLCBHUFJS
ZWcgdGVtcEdQUikKK3sKKyAgICBtX2ppdC5tb3ZlKHJlZ3MuZ3ByKCksIHRlbXBHUFIpOworICAg
IG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5l
ZCksIHRlbXBHUFIpOworICAgIHJldHVybiBtX2ppdC5icmFuY2g2NCgKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCB0ZW1wR1BSLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KFZhbHVlTnVsbCkpOworfQorCitKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJ
VDo6YnJhbmNoTm90T3RoZXIoSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVnIHRlbXBHUFIpCit7Cisg
ICAgbV9qaXQubW92ZShyZWdzLmdwcigpLCB0ZW1wR1BSKTsKKyAgICBtX2ppdC5hbmQ2NChNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCB0ZW1wR1BSKTsKKyAg
ICByZXR1cm4gbV9qaXQuYnJhbmNoNjQoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgdGVtcEdQUiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChWYWx1ZU51
bGwpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bW92ZVRydWVUbyhHUFJSZWcgZ3ByKQor
eworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKFZhbHVlVHJ1ZSksIGdwcik7Cit9CisKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6Om1vdmVGYWxzZVRvKEdQUlJlZyBncHIpCit7CisgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIGdwcik7Cit9CisKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmJsZXNzQm9vbGVhbihHUFJSZWcgZ3ByKQoreworICAgIG1faml0Lm9yMzIoVHJ1c3Rl
ZEltbTMyKFZhbHVlRmFsc2UpLCBncHIpOworfQorCiAjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE2NTc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODYsMTMgKzg4
Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbihOb2RlKiBub2QKICAgICAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoLnJlbGVhc2UoKSk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBiYXNlLnVzZSgpOwotICAgICAgICAgICAgICAgIAotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KAotICAgICAgICAgICAgICAg
IHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRF
eHBsaWNpdGx5KTsKLSNlbHNlCi0gICAgICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLSNlbmRpZgorICAgICAgICAgICAg
CisgICAgICAgICAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICB9CkBAIC05MTAsMTEgKzkwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJ
bihOb2RlKiBub2QKICAgICBjYWxsT3BlcmF0aW9uKAogICAgICAgICBvcGVyYXRpb25HZW5lcmlj
SW4sIGV4dHJhY3RSZXN1bHQoSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlc3VsdEdQUikpLAog
ICAgICAgICBiYXNlR1BSLCByZWdzKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNh
bGxlZEV4cGxpY2l0bHkpOwotI2Vsc2UKLSAgICBib29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLSNlbmRpZgorICAgIGJsZXNzZWRCb29s
ZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsK
IH0KIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlKE5vZGUqIG5v
ZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfSklUT3BlcmF0
aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKQEAgLTE5MzksOSArMTkzMCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKICAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBpc051bWJlciA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAotICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyhncHIpLCBub2RlLT5jaGlsZDEoKSwgflNwZWNDZWxsLAotICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoCi0gICAgICAgICAgICAgICAgICAgICAgICBK
SVRDb21waWxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAg
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS0+Y2hpbGQxKCksIH5TcGVjQ2Vs
bCwgYnJhbmNoSXNDZWxsKEpTVmFsdWVSZWdzKGdwcikpKTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhIGNlbGw6IHNvIHRydWUgdHVybnMgaW50byAxIGFu
ZCBhbGwgZWxzZSB0dXJucyBpbnRvIDAuCiAgICAgICAgICAgICAgICAgbV9qaXQuY29tcGFyZTY0
KEpJVENvbXBpbGVyOjpFcXVhbCwgZ3ByLCBUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0
R3ByKTsKQEAgLTE5ODgsNyArMTk3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVW
YWx1ZVRvSW50MzIKIAogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gTnVtYmVyVXNlKSB7CiAgICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAot
ICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwg
bm9kZS0+Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
cDEuanNWYWx1ZVJlZ3MoKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdGFnR1BSLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CkBAIC0x
OTk2LDkgKzE5ODUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMy
CiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTnVtYmVyID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpMb3dlc3RUYWcpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIERGR19UWVBFX0NIRUNLKAotICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mo
dGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIH5TcGVjQ2VsbCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZykpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wMS5qc1ZhbHVlUmVncygpLCBub2Rl
LT5jaGlsZDEoKSwgflNwZWNDZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoSXND
ZWxsKG9wMS5qc1ZhbHVlUmVncygpKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAvLyBJdCdzIG5vdCBhIGNlbGw6IHNvIHRydWUgdHVybnMgaW50byAxIGFuZCBh
bGwgZWxzZSB0dXJucyBpbnRvIDAuCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIGlzQm9vbGVhbiA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdGFnR1BS
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOwpAQCAtMjU0MiwxNCArMjUzMCwx
MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvCiAgICAgLy8gV2Fs
ayB1cCB0aGUgcHJvdG90eXBlIGNoYWluIG9mIHRoZSB2YWx1ZSAoaW4gc2NyYXRjaFJlZyksIGNv
bXBhcmluZyB0byBwcm90b3R5cGVSZWcuCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3Ao
Jm1faml0KTsKICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZShzY3JhdGNoUmVnLCBzY3JhdGNo
UmVnLCBzY3JhdGNoMlJlZyk7CisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzY3JhdGNoUmVnLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpICsgQ2VsbFBheWxv
YWRPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0luc3Rh
bmNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaFJlZywg
cHJvdG90eXBlUmVnKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1faml0LmxvYWQ2NChNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNl
dCgpKSwgc2NyYXRjaFJlZyk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNJbnN0YW5jZSA9
IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaFJlZywgcHJvdG90
eXBlUmVnKTsKLSAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNj
cmF0Y2hSZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikubGlua1RvKGxvb3AsICZtX2ppdCk7
CisgICAgYnJhbmNoSXNDZWxsKEpTVmFsdWVSZWdzKHNjcmF0Y2hSZWcpKS5saW5rVG8obG9vcCwg
Jm1faml0KTsKICNlbHNlCi0gICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2hSZWcsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCBzY3JhdGNoUmVnKTsKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBpc0luc3RhbmNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgc2NyYXRjaFJlZywgcHJvdG90eXBlUmVnKTsKLSAgICBtX2ppdC5icmFuY2hUZXN0
MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hSZWcpLmxpbmtUbyhsb29wLCAmbV9q
aXQpOworICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNj
cmF0Y2hSZWcpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwogI2VuZGlmCiAgICAgCiAgICAgLy8gTm8g
bWF0Y2ggLSByZXN1bHQgaXMgZmFsc2UuCkBAIC0yNTg2LDE2ICsyNTcyLDkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2YoTgogICAgICAgICBHUFJSZWcgc2NyYXRjaFJl
ZyA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHNjcmF0Y2gy
LmdwcigpOwogICAgICAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBHUFJSZWcgdmFs
dWVSZWcgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNDZWxs
ID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZVJlZywgR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSksIHNjcmF0
Y2hSZWcpOwotI2Vsc2UKLSAgICAgICAgR1BSUmVnIHZhbHVlVGFnUmVnID0gdmFsdWUudGFnR1BS
KCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLnBheWxvYWRHUFIoKTsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCB2YWx1ZVRhZ1JlZywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
KTsKLSAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCBz
Y3JhdGNoUmVnKTsKLSNlbmRpZgorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0NlbGwg
PSBicmFuY2hJc0NlbGwodmFsdWUuanNWYWx1ZVJlZ3MoKSk7CisgICAgICAgIEdQUlJlZyB2YWx1
ZVJlZyA9IHZhbHVlLmpzVmFsdWVSZWdzKCkucGF5bG9hZEdQUigpOworICAgICAgICBtb3ZlRmFs
c2VUbyhzY3JhdGNoUmVnKTsKIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOwogICAgICAgICAKQEAgLTI2MDUsMTEgKzI1ODQsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZihOCiAgICAgICAgIAogICAgICAgICBkb25lLmxp
bmsoJm1faml0KTsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGpzVmFsdWVSZXN1bHQo
c2NyYXRjaFJlZywgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Ci0jZWxzZQotICAgICAgICBi
b29sZWFuUmVzdWx0KHNjcmF0Y2hSZWcsIG5vZGUpOwotI2VuZGlmCisgICAgICAgIGJsZXNzZWRC
b29sZWFuUmVzdWx0KHNjcmF0Y2hSZWcsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIApAQCAtMjYyNiwxMSArMjYwMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJ
bnN0YW5jZU9mKE4KICAgICAKICAgICBjb21waWxlSW5zdGFuY2VPZkZvck9iamVjdChub2RlLCB2
YWx1ZVJlZywgcHJvdG90eXBlUmVnLCBzY3JhdGNoUmVnLCBzY3JhdGNoMlJlZyk7CiAKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIGpzVmFsdWVSZXN1bHQoc2NyYXRjaFJlZywgbm9kZSwgRGF0YUZv
cm1hdEpTQm9vbGVhbik7Ci0jZWxzZQotICAgIGJvb2xlYW5SZXN1bHQoc2NyYXRjaFJlZywgbm9k
ZSk7Ci0jZW5kaWYKKyAgICBibGVzc2VkQm9vbGVhblJlc3VsdChzY3JhdGNoUmVnLCBub2RlKTsK
IH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBub2RlKQpAQCAtMzcz
MSw2ICszNzAyLDI2IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKKyAgICBpZiAobm9kZS0+aXNCaW5h
cnlVc2VLaW5kKFN0cmluZ0lkZW50VXNlLCBOb3RTdHJpbmdWYXJVc2UpKSB7CisgICAgICAgIGNv
bXBpbGVTdHJpbmdJZGVudFRvTm90U3RyaW5nVmFyRXF1YWxpdHkobm9kZSwgbm9kZS0+Y2hpbGQx
KCksIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAK
KyAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKE5vdFN0cmluZ1ZhclVzZSwgU3RyaW5nSWRl
bnRVc2UpKSB7CisgICAgICAgIGNvbXBpbGVTdHJpbmdJZGVudFRvTm90U3RyaW5nVmFyRXF1YWxp
dHkobm9kZSwgbm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKFN0cmlu
Z1VzZSwgVW50eXBlZFVzZSkpIHsKKyAgICAgICAgY29tcGlsZVN0cmluZ1RvVW50eXBlZEVxdWFs
aXR5KG5vZGUsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5
cGVkVXNlLCBTdHJpbmdVc2UpKSB7CisgICAgICAgIGNvbXBpbGVTdHJpbmdUb1VudHlwZWRFcXVh
bGl0eShub2RlLCBub2RlLT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPmlzQmluYXJ5
VXNlS2luZChVbnR5cGVkVXNlKSk7CiAgICAgcmV0dXJuIG5vblNwZWN1bGF0aXZlU3RyaWN0RXEo
bm9kZSk7CiB9CkBAIC0zNzQzLDQ0ICszNzM0LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVCb29sZWFuQ29tcGEKICAgICAKICAgICBtX2ppdC5jb21wYXJlMzIoY29uZGl0aW9uLCBv
cDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAKLSAgICAvLyBJZiB3ZSBh
ZGQgYSBEYXRhRm9ybWF0Qm9vbCwgd2Ugc2hvdWxkIHVzZSBpdCBoZXJlLgotI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCi0gICAgYm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwotI2Vsc2UK
LSAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsK
LSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jdXJyZW50Tm9kZSwgRGF0YUZvcm1h
dEpTQm9vbGVhbik7Ci0jZW5kaWYKKyAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdFcXVh
bGl0eShOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ0VxdWFs
aXR5KAorICAgIE5vZGUqIG5vZGUsIEdQUlJlZyBsZWZ0R1BSLCBHUFJSZWcgcmlnaHRHUFIsIEdQ
UlJlZyBsZW5ndGhHUFIsIEdQUlJlZyBsZWZ0VGVtcEdQUiwKKyAgICBHUFJSZWcgcmlnaHRUZW1w
R1BSLCBHUFJSZWcgbGVmdFRlbXAyR1BSLCBHUFJSZWcgcmlnaHRUZW1wMkdQUiwKKyAgICBKSVRD
b21waWxlcjo6SnVtcExpc3QgZmFzdFRydWUsIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBmYXN0RmFs
c2UpCiB7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgbGVmdCh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcmlnaHQodGhpcywgbm9kZS0+Y2hpbGQyKCkp
OwotICAgIEdQUlRlbXBvcmFyeSBsZW5ndGgodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IGxlZnRU
ZW1wKHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSByaWdodFRlbXAodGhpcyk7Ci0gICAgR1BSVGVt
cG9yYXJ5IGxlZnRUZW1wMih0aGlzLCBSZXVzZSwgbGVmdCk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJp
Z2h0VGVtcDIodGhpcywgUmV1c2UsIHJpZ2h0KTsKLSAgICAKLSAgICBHUFJSZWcgbGVmdEdQUiA9
IGxlZnQuZ3ByKCk7Ci0gICAgR1BSUmVnIHJpZ2h0R1BSID0gcmlnaHQuZ3ByKCk7Ci0gICAgR1BS
UmVnIGxlbmd0aEdQUiA9IGxlbmd0aC5ncHIoKTsKLSAgICBHUFJSZWcgbGVmdFRlbXBHUFIgPSBs
ZWZ0VGVtcC5ncHIoKTsKLSAgICBHUFJSZWcgcmlnaHRUZW1wR1BSID0gcmlnaHRUZW1wLmdwcigp
OwotICAgIEdQUlJlZyBsZWZ0VGVtcDJHUFIgPSBsZWZ0VGVtcDIuZ3ByKCk7Ci0gICAgR1BSUmVn
IHJpZ2h0VGVtcDJHUFIgPSByaWdodFRlbXAyLmdwcigpOwotICAgIAogICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCB0cnVlQ2FzZTsKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZmFsc2VDYXNl
OwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZTsKICAgICAKLSAgICBzcGVjdWxh
dGVTdHJpbmcobm9kZS0+Y2hpbGQxKCksIGxlZnRHUFIpOwotICAgIAotICAgIC8vIEl0J3Mgc2Fm
ZSB0byBicmFuY2ggYXJvdW5kIHRoZSB0eXBlIGNoZWNrIGJlbG93LCBzaW5jZSBwcm92aW5nIHRo
YXQgdGhlIHZhbHVlcyBhcmUKLSAgICAvLyBlcXVhbCBkb2VzIGluZGVlZCBwcm92ZSB0aGF0IHRo
ZSByaWdodCB2YWx1ZSBpcyBhIHN0cmluZy4KLSAgICB0cnVlQ2FzZS5hcHBlbmQobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgbGVmdEdQUiwgcmlnaHRHUFIpKTsKLSAgICAK
LSAgICBzcGVjdWxhdGVTdHJpbmcobm9kZS0+Y2hpbGQyKCksIHJpZ2h0R1BSKTsKKyAgICB0cnVl
Q2FzZS5hcHBlbmQoZmFzdFRydWUpOworICAgIGZhbHNlQ2FzZS5hcHBlbmQoZmFzdEZhbHNlKTsK
IAogICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhsZWZ0R1BSLCBKU1N0
cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIGxlbmd0aEdQUik7CiAgICAgCkBAIC0zODIyLDQ4ICsz
Nzg5LDEwNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5nRXF1YWxpCiAgICAg
bV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBsZW5ndGhHUFIpLmxp
bmtUbyhsb29wLCAmbV9qaXQpOwogICAgIAogICAgIHRydWVDYXNlLmxpbmsoJm1faml0KTsKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KFZhbHVlVHJ1ZSks
IGxlZnRUZW1wR1BSKTsKLSNlbHNlCi0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIodHJ1ZSks
IGxlZnRUZW1wR1BSKTsKLSNlbmRpZgorICAgIG1vdmVUcnVlVG8obGVmdFRlbXBHUFIpOwogICAg
IAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAKICAgICBmYWxz
ZUNhc2UubGluaygmbV9qaXQpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tNjQoVmFsdWVGYWxzZSksIGxlZnRUZW1wR1BSKTsKLSNlbHNlCi0gICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoZmFsc2UpLCBsZWZ0VGVtcEdQUik7Ci0jZW5kaWYKKyAgICBtb3Zl
RmFsc2VUbyhsZWZ0VGVtcEdQUik7CiAgICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAg
IHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIGxlZnRUZW1wR1BSLCBs
ZWZ0R1BSLCByaWdodEdQUikpOwogICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAganNWYWx1
ZVJlc3VsdChsZWZ0VGVtcEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Ci0jZWxzZQot
ICAgIGJvb2xlYW5SZXN1bHQobGVmdFRlbXBHUFIsIG5vZGUpOwotI2VuZGlmCisgICAgYmxlc3Nl
ZEJvb2xlYW5SZXN1bHQobGVmdFRlbXBHUFIsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlU3RyaW5nSWRlbnRFcXVhbGl0eShOb2RlKiBub2RlKQordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVN0cmluZ0VxdWFsaXR5KE5vZGUqIG5vZGUpCiB7CiAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgbGVmdCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgcmlnaHQodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgIEdQUlRlbXBvcmFy
eSBsZW5ndGgodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IGxlZnRUZW1wKHRoaXMpOwogICAgIEdQ
UlRlbXBvcmFyeSByaWdodFRlbXAodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IGxlZnRUZW1wMih0
aGlzLCBSZXVzZSwgbGVmdCk7CisgICAgR1BSVGVtcG9yYXJ5IHJpZ2h0VGVtcDIodGhpcywgUmV1
c2UsIHJpZ2h0KTsKICAgICAKICAgICBHUFJSZWcgbGVmdEdQUiA9IGxlZnQuZ3ByKCk7CiAgICAg
R1BSUmVnIHJpZ2h0R1BSID0gcmlnaHQuZ3ByKCk7CisgICAgR1BSUmVnIGxlbmd0aEdQUiA9IGxl
bmd0aC5ncHIoKTsKICAgICBHUFJSZWcgbGVmdFRlbXBHUFIgPSBsZWZ0VGVtcC5ncHIoKTsKICAg
ICBHUFJSZWcgcmlnaHRUZW1wR1BSID0gcmlnaHRUZW1wLmdwcigpOworICAgIEdQUlJlZyBsZWZ0
VGVtcDJHUFIgPSBsZWZ0VGVtcDIuZ3ByKCk7CisgICAgR1BSUmVnIHJpZ2h0VGVtcDJHUFIgPSBy
aWdodFRlbXAyLmdwcigpOworICAgIAorICAgIHNwZWN1bGF0ZVN0cmluZyhub2RlLT5jaGlsZDEo
KSwgbGVmdEdQUik7CisgICAgCisgICAgLy8gSXQncyBzYWZlIHRvIGJyYW5jaCBhcm91bmQgdGhl
IHR5cGUgY2hlY2sgYmVsb3csIHNpbmNlIHByb3ZpbmcgdGhhdCB0aGUgdmFsdWVzIGFyZQorICAg
IC8vIGVxdWFsIGRvZXMgaW5kZWVkIHByb3ZlIHRoYXQgdGhlIHJpZ2h0IHZhbHVlIGlzIGEgc3Ry
aW5nLgorICAgIEpJVENvbXBpbGVyOjpKdW1wIGZhc3RUcnVlID0gbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgbGVmdEdQUiwgcmlnaHRHUFIpOworICAgIAorICAgIHNwZWN1
bGF0ZVN0cmluZyhub2RlLT5jaGlsZDIoKSwgcmlnaHRHUFIpOworICAgIAorICAgIGNvbXBpbGVT
dHJpbmdFcXVhbGl0eSgKKyAgICAgICAgbm9kZSwgbGVmdEdQUiwgcmlnaHRHUFIsIGxlbmd0aEdQ
UiwgbGVmdFRlbXBHUFIsIHJpZ2h0VGVtcEdQUiwgbGVmdFRlbXAyR1BSLAorICAgICAgICByaWdo
dFRlbXAyR1BSLCBmYXN0VHJ1ZSwgSklUQ29tcGlsZXI6Okp1bXAoKSk7Cit9CiAKLSAgICBKSVRD
b21waWxlcjo6SnVtcExpc3QgdHJ1ZUNhc2U7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGZh
bHNlQ2FzZTsKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdUb1VudHlwZWRFcXVh
bGl0eShOb2RlKiBub2RlLCBFZGdlIHN0cmluZ0VkZ2UsIEVkZ2UgdW50eXBlZEVkZ2UpCit7Cisg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgbGVmdCh0aGlzLCBzdHJpbmdFZGdlKTsKKyAgICBKU1Zh
bHVlT3BlcmFuZCByaWdodCh0aGlzLCB1bnR5cGVkRWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uKTsKKyAgICBHUFJUZW1wb3JhcnkgbGVuZ3RoKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBs
ZWZ0VGVtcCh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgcmlnaHRUZW1wKHRoaXMpOworICAgIEdQ
UlRlbXBvcmFyeSBsZWZ0VGVtcDIodGhpcywgUmV1c2UsIGxlZnQpOworICAgIEdQUlRlbXBvcmFy
eSByaWdodFRlbXAyKHRoaXMsIFJldXNlLCByaWdodCk7CisgICAgCisgICAgR1BSUmVnIGxlZnRH
UFIgPSBsZWZ0LmdwcigpOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IHJpZ2h0LmpzVmFs
dWVSZWdzKCk7CisgICAgR1BSUmVnIGxlbmd0aEdQUiA9IGxlbmd0aC5ncHIoKTsKKyAgICBHUFJS
ZWcgbGVmdFRlbXBHUFIgPSBsZWZ0VGVtcC5ncHIoKTsKKyAgICBHUFJSZWcgcmlnaHRUZW1wR1BS
ID0gcmlnaHRUZW1wLmdwcigpOworICAgIEdQUlJlZyBsZWZ0VGVtcDJHUFIgPSBsZWZ0VGVtcDIu
Z3ByKCk7CisgICAgR1BSUmVnIHJpZ2h0VGVtcDJHUFIgPSByaWdodFRlbXAyLmdwcigpOworICAg
IAorICAgIHNwZWN1bGF0ZVN0cmluZyhzdHJpbmdFZGdlLCBsZWZ0R1BSKTsKKyAgICAKKyAgICBK
SVRDb21waWxlcjo6SnVtcExpc3QgZmFzdFRydWU7CisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0
IGZhc3RTbG93OworICAgIAorICAgIGZhc3RTbG93LmFwcGVuZChicmFuY2hOb3RDZWxsKHJpZ2h0
UmVncykpOworICAgIAorICAgIC8vIEl0J3Mgc2FmZSB0byBicmFuY2ggYXJvdW5kIHRoZSB0eXBl
IGNoZWNrIGJlbG93LCBzaW5jZSBwcm92aW5nIHRoYXQgdGhlIHZhbHVlcyBhcmUKKyAgICAvLyBl
cXVhbCBkb2VzIGluZGVlZCBwcm92ZSB0aGF0IHRoZSByaWdodCB2YWx1ZSBpcyBhIHN0cmluZy4K
KyAgICBmYXN0VHJ1ZS5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKAorICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIGxlZnRHUFIsIHJpZ2h0UmVncy5wYXlsb2FkR1BSKCkpKTsKICAgICAKKyAg
ICBmYXN0U2xvdy5hcHBlbmQobV9qaXQuYnJhbmNoU3RydWN0dXJlUHRyKAorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhy
aWdodFJlZ3MucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKKyAg
ICAgICAgbV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CisgICAgCisgICAgY29t
cGlsZVN0cmluZ0VxdWFsaXR5KAorICAgICAgICBub2RlLCBsZWZ0R1BSLCByaWdodFJlZ3MucGF5
bG9hZEdQUigpLCBsZW5ndGhHUFIsIGxlZnRUZW1wR1BSLCByaWdodFRlbXBHUFIsIGxlZnRUZW1w
MkdQUiwKKyAgICAgICAgcmlnaHRUZW1wMkdQUiwgZmFzdFRydWUsIGZhc3RTbG93KTsKK30KKwor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ0lkZW50RXF1YWxpdHkoTm9kZSogbm9k
ZSkKK3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBsZWZ0KHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCByaWdodCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CisgICAgR1BSVGVtcG9yYXJ5IGxlZnRUZW1wKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSByaWdo
dFRlbXAodGhpcyk7CisgICAgCisgICAgR1BSUmVnIGxlZnRHUFIgPSBsZWZ0LmdwcigpOworICAg
IEdQUlJlZyByaWdodEdQUiA9IHJpZ2h0LmdwcigpOworICAgIEdQUlJlZyBsZWZ0VGVtcEdQUiA9
IGxlZnRUZW1wLmdwcigpOworICAgIEdQUlJlZyByaWdodFRlbXBHUFIgPSByaWdodFRlbXAuZ3By
KCk7CisKICAgICBzcGVjdWxhdGVTdHJpbmcobm9kZS0+Y2hpbGQxKCksIGxlZnRHUFIpOwogICAg
IHNwZWN1bGF0ZVN0cmluZyhub2RlLT5jaGlsZDIoKSwgcmlnaHRHUFIpOwogICAgIApAQCAtMzg3
MiwxMiArMzg5NSwzOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5nSWRlbnRF
CiAgICAgCiAgICAgbV9qaXQuY29tcGFyZVB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGxlZnRU
ZW1wR1BSLCByaWdodFRlbXBHUFIsIGxlZnRUZW1wR1BSKTsKICAgICAKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCBsZWZ0VGVtcEdQ
Uik7Ci0gICAganNWYWx1ZVJlc3VsdChsZWZ0VGVtcEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9v
bGVhbik7Ci0jZWxzZQotICAgIGJvb2xlYW5SZXN1bHQobGVmdFRlbXBHUFIsIG5vZGUpOwotI2Vu
ZGlmCisgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChsZWZ0VGVtcEdQUiwgbm9kZSk7Cit9CisK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdJZGVudFRvTm90U3RyaW5nVmFyRXF1
YWxpdHkoCisgICAgTm9kZSogbm9kZSwgRWRnZSBzdHJpbmdFZGdlLCBFZGdlIG5vdFN0cmluZ1Zh
ckVkZ2UpCit7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgbGVmdCh0aGlzLCBzdHJpbmdFZGdl
KTsKKyAgICBKU1ZhbHVlT3BlcmFuZCByaWdodCh0aGlzLCBub3RTdHJpbmdWYXJFZGdlLCBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFyeSBsZWZ0VGVtcCh0aGlzKTsK
KyAgICBHUFJUZW1wb3JhcnkgcmlnaHRUZW1wKHRoaXMpOworICAgIEdQUlJlZyBsZWZ0VGVtcEdQ
UiA9IGxlZnRUZW1wLmdwcigpOworICAgIEdQUlJlZyByaWdodFRlbXBHUFIgPSByaWdodFRlbXAu
Z3ByKCk7CisgICAgR1BSUmVnIGxlZnRHUFIgPSBsZWZ0LmdwcigpOworICAgIEpTVmFsdWVSZWdz
IHJpZ2h0UmVncyA9IHJpZ2h0LmpzVmFsdWVSZWdzKCk7CisgICAgCisgICAgc3BlY3VsYXRlU3Ry
aW5nKHN0cmluZ0VkZ2UsIGxlZnRHUFIpOworICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50QW5kTG9h
ZFN0b3JhZ2Uoc3RyaW5nRWRnZSwgbGVmdEdQUiwgbGVmdFRlbXBHUFIpOworCisgICAgbW92ZUZh
bHNlVG8ocmlnaHRUZW1wR1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgbm90U3RyaW5n
OworICAgIG5vdFN0cmluZy5hcHBlbmQoYnJhbmNoTm90Q2VsbChyaWdodFJlZ3MpKTsKKyAgICBu
b3RTdHJpbmcuYXBwZW5kKG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mocmln
aHRSZWdzLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCisgICAg
ICAgIG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOworICAgIAorICAgIHNwZWN1
bGF0ZVN0cmluZ0lkZW50QW5kTG9hZFN0b3JhZ2Uobm90U3RyaW5nVmFyRWRnZSwgcmlnaHRSZWdz
LnBheWxvYWRHUFIoKSwgcmlnaHRUZW1wR1BSKTsKKyAgICAKKyAgICBtX2ppdC5jb21wYXJlUHRy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgbGVmdFRlbXBHUFIsIHJpZ2h0VGVtcEdQUiwgcmlnaHRU
ZW1wR1BSKTsKKyAgICBub3RTdHJpbmcubGluaygmbV9qaXQpOworICAgIAorICAgIHVuYmxlc3Nl
ZEJvb2xlYW5SZXN1bHQocmlnaHRUZW1wR1BSLCBub2RlKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVN0cmluZ1plcm9MZW5ndGgoTm9kZSogbm9kZSkKQEAgLTM4OTQsMTIgKzM5
NDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5nWmVyb0xlCiAgICAgLy8g
RmV0Y2ggdGhlIGxlbmd0aCBmaWVsZCBmcm9tIHRoZSBzdHJpbmcgb2JqZWN0LgogICAgIG1faml0
LnRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Ry
R1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoLTEpLCBlcUdQUik7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1faml0Lm9yMzIo
VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCBlcUdQUik7Ci0gICAganNWYWx1ZVJlc3VsdChlcUdQ
Uiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Ci0jZWxzZQotICAgIGJvb2xlYW5SZXN1bHQo
ZXFHUFIsIG5vZGUpOwotI2VuZGlmCisgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChlcUdQUiwg
bm9kZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb25zdGFudFN0b3JhZ2VQ
b2ludGVyKE5vZGUqIG5vZGUpCkBAIC00NTU5LDU4ICs0NjAzLDI4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0ZU9iamVjdE9yT3QKICAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRo
aXMsIGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgR1BSVGVtcG9yYXJ5IHRl
bXAodGhpcyk7CiAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwotI2lmIFVTRShKU1ZB
TFVFNjQpCi0gICAgR1BSUmVnIGdwciA9IG9wZXJhbmQuZ3ByKCk7Ci0gICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NCgKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gYnJhbmNoTm90Q2VsbChvcGVyYW5kLmpzVmFsdWVS
ZWdzKCkpOworICAgIEdQUlJlZyBncHIgPSBvcGVyYW5kLmpzVmFsdWVSZWdzKCkucGF5bG9hZEdQ
UigpOwogICAgIERGR19UWVBFX0NIRUNLKAotICAgICAgICBKU1ZhbHVlUmVncyhncHIpLCBlZGdl
LCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKKyAg
ICAgICAgb3BlcmFuZC5qc1ZhbHVlUmVncygpLCBlZGdlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmpl
Y3QsIG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhncHIsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAogICAgICAgICAgICAgbV9qaXQudm0oKS0+c3RyaW5n
U3RydWN0dXJlLmdldCgpKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0
Lmp1bXAoKTsKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAgICBpZiAobmVlZHNUeXBlQ2hl
Y2soZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKSB7Ci0gICAgICAgIG1faml0Lm1vdmUoZ3By
LCB0ZW1wR1BSKTsKLSAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMih+VGFnQml0VW5kZWZpbmVkKSwgdGVtcEdQUik7Ci0gICAgICAgIAogICAgICAgICB0eXBl
Q2hlY2soCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBTcGVjQ2VsbCB8IFNw
ZWNPdGhlciwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAotICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKKyAgICAgICAgICAgIG9wZXJhbmQu
anNWYWx1ZVJlZ3MoKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsCisgICAgICAgICAgICBi
cmFuY2hOb3RPdGhlcihvcGVyYW5kLmpzVmFsdWVSZWdzKCksIHRlbXBHUFIpKTsKICAgICB9CiAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0jZWxzZQotICAgIEdQUlJlZyB0YWdHUFIgPSBvcGVyYW5k
LnRhZ0dQUigpOwotICAgIEdQUlJlZyBwYXlsb2FkR1BSID0gb3BlcmFuZC5wYXlsb2FkR1BSKCk7
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9Ci0gICAgICAgIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZykpOwotICAgIERGR19UWVBFX0NIRUNLKAotICAgICAgICBKU1ZhbHVlUmVncyh0
YWdHUFIsIHBheWxvYWRHUFIpLCBlZGdlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0
LmJyYW5jaFN0cnVjdHVyZVB0cigKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwYXlsb2FkR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIG1faml0LnZtKCktPnN0cmluZ1N0
cnVjdHVyZS5nZXQoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5q
dW1wKCk7Ci0gICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7Ci0gICAgaWYgKG5lZWRzVHlwZUNoZWNr
KGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgewotICAgICAgICBtX2ppdC5tb3ZlKHRhZ0dQ
UiwgdGVtcEdQUik7Ci0gICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCB0ZW1wR1BS
KTsKLSAgICAgICAgCi0gICAgICAgIHR5cGVDaGVjaygKLSAgICAgICAgICAgIEpTVmFsdWVSZWdz
KHRhZ0dQUiwgcGF5bG9hZEdQUiksIGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyLAotICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCB0ZW1wR1BSLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpKTsKLSAgICB9Ci0gICAgZG9uZS5saW5rKCZtX2ppdCk7
Ci0jZW5kaWYKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nKEVkZ2Ug
ZWRnZSwgR1BSUmVnIGNlbGwpCiB7CiAgICAgREZHX1RZUEVfQ0hFQ0soCi0gICAgICAgIEpTVmFs
dWVTb3VyY2U6OnVuYm94ZWRDZWxsKGNlbGwpLCBlZGdlLCBTcGVjU3RyaW5nLCBtX2ppdC5icmFu
Y2hTdHJ1Y3R1cmVQdHIoCisgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGNlbGwp
LCBlZGdlLCBTcGVjU3RyaW5nIHwgflNwZWNDZWxsLAorICAgICAgICBtX2ppdC5icmFuY2hTdHJ1
Y3R1cmVQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAogICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgCiAgICAgICAgICAgICBtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
KTsKQEAgLTQ2MjAsNyArNDYzNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVN0
cmluZ0lkZW4KIHsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
cmluZywgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHN0b3JhZ2UpOwogICAgIAotICAgIGlm
ICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY1N0cmluZ0lkZW50KSkKKyAgICBpZiAoIW5lZWRz
VHlwZUNoZWNrKGVkZ2UsIFNwZWNTdHJpbmdJZGVudCB8IH5TcGVjU3RyaW5nKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgc3BlY3VsYXRpb25DaGVjaygKQEAgLTQ2MzIsNyArNDY0Niw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmluZ0lkZW4KICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2UsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLAog
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihTdHJpbmdJbXBsOjpmbGFn
SXNJZGVudGlmaWVyKCkpKSk7CiAgICAgCi0gICAgbV9pbnRlcnByZXRlci5maWx0ZXIoZWRnZSwg
U3BlY1N0cmluZ0lkZW50KTsKKyAgICBtX2ludGVycHJldGVyLmZpbHRlcihlZGdlLCBTcGVjU3Ry
aW5nSWRlbnQgfCB+U3BlY1N0cmluZyk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0ZVN0cmluZ0lkZW50KEVkZ2UgZWRnZSwgR1BSUmVnIHN0cmluZykKQEAgLTQ3MDksMjMgKzQ3
MjMsMzMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nT3JTdAogICAgIG1f
aW50ZXJwcmV0ZXIuZmlsdGVyKGVkZ2UsIFNwZWNTdHJpbmcgfCBTcGVjU3RyaW5nT2JqZWN0KTsK
IH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTm90U3RyaW5nVmFyKEVkZ2UgZWRn
ZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UsIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgR1BSUmVn
IHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENl
bGwgPSBicmFuY2hOb3RDZWxsKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSk7CisgICAgR1BSUmVnIGNl
bGwgPSBvcGVyYW5kLmpzVmFsdWVSZWdzKCkucGF5bG9hZEdQUigpOworICAgIAorICAgIEpJVENv
bXBpbGVyOjpKdW1wIG5vdFN0cmluZyA9IG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhjZWxsLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAorICAgICAgICBtX2ppdC52
bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgIAorICAgIHNwZWN1bGF0ZVN0cmluZ0lk
ZW50QW5kTG9hZFN0b3JhZ2UoZWRnZSwgY2VsbCwgdGVtcEdQUik7CisgICAgCisgICAgbm90U3Ry
aW5nLmxpbmsoJm1faml0KTsKKyAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKK30KKwogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTm90Q2VsbChFZGdlIGVkZ2UpCiB7CiAgICAgaWYgKCFu
ZWVkc1R5cGVDaGVjayhlZGdlLCB+U3BlY0NlbGwpKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdHlwZUNoZWNrKAotICAgICAgICBKU1Zh
bHVlUmVncyhvcGVyYW5kLmdwcigpKSwgZWRnZSwgflNwZWNDZWxsLAotICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0NjQoCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6WmVybywgb3BlcmFuZC5ncHIo
KSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0jZWxzZQotICAgIHR5cGVDaGVjaygKLSAg
ICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC50YWdHUFIoKSwgb3BlcmFuZC5wYXlsb2FkR1BSKCkp
LCBlZGdlLCB+U3BlY0NlbGwsCi0gICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAg
SklUQ29tcGlsZXI6OkVxdWFsLCBvcGVyYW5kLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZykpKTsKLSNlbmRpZgorICAgIEpTVmFsdWVPcGVyYW5kIG9wZXJhbmQodGhpcywg
ZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsgCisgICAgdHlwZUNoZWNrKG9wZXJhbmQu
anNWYWx1ZVJlZ3MoKSwgZWRnZSwgflNwZWNDZWxsLCBicmFuY2hJc0NlbGwob3BlcmFuZC5qc1Zh
bHVlUmVncygpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU90aGVyKEVk
Z2UgZWRnZSkKQEAgLTQ3MzYsMjEgKzQ3NjAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGVPdGhlcihFZGdlCiAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwog
ICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IG1faml0Lm1vdmUob3BlcmFuZC5ncHIoKSwgdGVtcEdQUik7Ci0gICAgbV9qaXQuYW5kNjQoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgdGVtcEdQUik7CiAg
ICAgdHlwZUNoZWNrKAogICAgICAgICBKU1ZhbHVlUmVncyhvcGVyYW5kLmdwcigpKSwgZWRnZSwg
U3BlY090aGVyLAotICAgICAgICBtX2ppdC5icmFuY2g2NCgKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOwotI2Vsc2UKLSAgICBtX2ppdC5tb3ZlKG9wZXJhbmQu
dGFnR1BSKCksIHRlbXBHUFIpOwotICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCB0ZW1w
R1BSKTsKLSAgICB0eXBlQ2hlY2soCi0gICAgICAgIEpTVmFsdWVSZWdzKG9wZXJhbmQudGFnR1BS
KCksIG9wZXJhbmQucGF5bG9hZEdQUigpKSwgZWRnZSwgU3BlY090aGVyLAotICAgICAgICBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpOdWxsVGFnKSkpOwotI2VuZGlmICAgIAorICAgICAgICBicmFuY2hOb3RPdGhl
cihvcGVyYW5kLmpzVmFsdWVSZWdzKCksIHRlbXBHUFIpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRlTWlzYyhFZGdlIGVkZ2UsIEpTVmFsdWVSZWdzIHJlZ3MpCkBAIC00ODM0
LDYgKzQ4NDYsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAg
ICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVjdFVzZToKICAgICAgICAgc3BlY3VsYXRlU3RyaW5n
T3JTdHJpbmdPYmplY3QoZWRnZSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm90U3RyaW5n
VmFyVXNlOgorICAgICAgICBzcGVjdWxhdGVOb3RTdHJpbmdWYXIoZWRnZSk7CisgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgTm90Q2VsbFVzZToKICAgICAgICAgc3BlY3VsYXRlTm90Q2VsbChlZGdl
KTsKICAgICAgICAgYnJlYWs7CkBAIC00OTgyLDE3ICs0OTk3LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdFN3aXRjaENoYXIoTm9kZQogICAgICAgICAKICAgICAgICAgb3AxLnVzZSgpOwog
ICAgICAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBhZGRCcmFuY2goCi0gICAgICAg
ICAgICBtX2ppdC5icmFuY2hUZXN0NjQoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIG9wMVJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlciksCi0gICAg
ICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7Ci0jZWxzZQotICAgICAgICBhZGRCcmFu
Y2goCi0gICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIG9wMVJlZ3MudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSksCi0gICAgICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7Ci0jZW5k
aWYKKyAgICAgICAgYWRkQnJhbmNoKGJyYW5jaE5vdENlbGwob3AxUmVncyksIGRhdGEtPmZhbGxU
aHJvdWdoLmJsb2NrKTsKICAgICAgICAgCiAgICAgICAgIGFkZEJyYW5jaCgKICAgICAgICAgICAg
IG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKQEAgLTUyODIsMTcgKzUyODcsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nKE5vCiAgICAgICAgIAogICAgICAgICBvcDEu
dXNlKCk7CiAgICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGFkZEJyYW5jaCgK
LSAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NCgKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgb3AxUmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVy
KSwKLSAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKLSNlbHNlCi0gICAgICAg
IGFkZEJyYW5jaCgKLSAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgb3AxUmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpKSwKLSAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2Nr
KTsKLSNlbmRpZgorICAgICAgICBhZGRCcmFuY2goYnJhbmNoTm90Q2VsbChvcDFSZWdzKSwgZGF0
YS0+ZmFsbFRocm91Z2guYmxvY2spOwogICAgICAgICAKICAgICAgICAgYWRkQnJhbmNoKAogICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoU3RydWN0dXJlUHRyKApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTY1Nzk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04NjEsOCArODYxLDExIEBAIHB1YmxpYzoKICAgICAgICAgR2VuZXJhdGlvbkluZm8m
IGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVy
KTsKICAgICAgICAgaW5mby5pbml0Q2VsbChub2RlLCBub2RlLT5yZWZDb3VudCgpLCByZWcpOwog
ICAgIH0KLSAgICB2b2lkIGJvb2xlYW5SZXN1bHQoR1BSUmVnIHJlZywgTm9kZSogbm9kZSwgVXNl
Q2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgdm9pZCBibGVzc2VkQm9v
bGVhblJlc3VsdChHUFJSZWcgcmVnLCBOb2RlKiBub2RlLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9
IENhbGxVc2VDaGlsZHJlbikKICAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAganNW
YWx1ZVJlc3VsdChyZWcsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIG1vZGUpOworI2Vsc2UK
ICAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQogICAgICAgICAgICAgdXNlQ2hp
bGRyZW4obm9kZSk7CiAKQEAgLTg3MCw2ICs4NzMsMTQgQEAgcHVibGljOgogICAgICAgICBtX2dw
cnMucmV0YWluKHJlZywgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQm9vbGVhbik7CiAgICAg
ICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lz
dGVyKHZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGluZm8uaW5pdEJvb2xlYW4obm9kZSwgbm9k
ZS0+cmVmQ291bnQoKSwgcmVnKTsKKyNlbmRpZgorICAgIH0KKyAgICB2b2lkIHVuYmxlc3NlZEJv
b2xlYW5SZXN1bHQoR1BSUmVnIHJlZywgTm9kZSogbm9kZSwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUg
PSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGJs
ZXNzQm9vbGVhbihyZWcpOworI2VuZGlmCisgICAgICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0KHJl
Zywgbm9kZSwgbW9kZSk7CiAgICAgfQogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgdm9pZCBqc1Zh
bHVlUmVzdWx0KEdQUlJlZyByZWcsIE5vZGUqIG5vZGUsIERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0
YUZvcm1hdEpTLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKQEAgLTg5
MCw2ICs5MDEsMTYgQEAgcHVibGljOgogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlZywgbm9kZSwg
RGF0YUZvcm1hdEpTLCBtb2RlKTsKICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
IHZvaWQgYm9vbGVhblJlc3VsdChHUFJSZWcgcmVnLCBOb2RlKiBub2RlLCBVc2VDaGlsZHJlbk1v
ZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKKyAgICB7CisgICAgICAgIGlmIChtb2RlID09IENh
bGxVc2VDaGlsZHJlbikKKyAgICAgICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOworCisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIo
KTsKKyAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRl
ckJvb2xlYW4pOworICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZv
RnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBpbmZvLmluaXRC
b29sZWFuKG5vZGUsIG5vZGUtPnJlZkNvdW50KCksIHJlZyk7CisgICAgfQogICAgIHZvaWQganNW
YWx1ZVJlc3VsdChHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCwgTm9kZSogbm9kZSwgRGF0YUZv
cm1hdCBmb3JtYXQgPSBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVz
ZUNoaWxkcmVuKQogICAgIHsKICAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQpA
QCAtMTk4MCw4ICsyMDAxLDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVPYmplY3RUb09i
amVjdE9yT3RoZXJFcXVhbGl0eShFZGdlIGxlZnRDaGlsZCwgRWRnZSByaWdodENoaWxkKTsKICAg
ICB2b2lkIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIHZhbHVlKTsKICAgICB2
b2lkIGNvbXBpbGVMb2dpY2FsTm90KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVTdHJpbmdFcXVh
bGl0eSgKKyAgICAgICAgTm9kZSosIEdQUlJlZyBsZWZ0R1BSLCBHUFJSZWcgcmlnaHRHUFIsIEdQ
UlJlZyBsZW5ndGhHUFIsCisgICAgICAgIEdQUlJlZyBsZWZ0VGVtcEdQUiwgR1BSUmVnIHJpZ2h0
VGVtcEdQUiwgR1BSUmVnIGxlZnRUZW1wMkdQUiwKKyAgICAgICAgR1BSUmVnIHJpZ2h0VGVtcDJH
UFIsIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBmYXN0VHJ1ZSwKKyAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IGZhc3RTbG93KTsKICAgICB2b2lkIGNvbXBpbGVTdHJpbmdFcXVhbGl0eShOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlU3RyaW5nSWRlbnRFcXVhbGl0eShOb2RlKik7CisgICAgdm9p
ZCBjb21waWxlU3RyaW5nVG9VbnR5cGVkRXF1YWxpdHkoTm9kZSosIEVkZ2Ugc3RyaW5nRWRnZSwg
RWRnZSB1bnR5cGVkRWRnZSk7CisgICAgdm9pZCBjb21waWxlU3RyaW5nSWRlbnRUb05vdFN0cmlu
Z1ZhckVxdWFsaXR5KE5vZGUqLCBFZGdlIHN0cmluZ0VkZ2UsIEVkZ2Ugbm90U3RyaW5nVmFyRWRn
ZSk7CiAgICAgdm9pZCBjb21waWxlU3RyaW5nWmVyb0xlbmd0aChOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlTWlzY1N0cmljdEVxKE5vZGUqKTsKIApAQCAtMjA3OCw2ICsyMTA2LDE1IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbkV4cHJlc3Npb24oTm9kZSopOwogICAgIGJv
b2wgY29tcGlsZVJlZ0V4cEV4ZWMoTm9kZSopOwogICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1w
IGJyYW5jaElzQ2VsbChKU1ZhbHVlUmVncyk7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgYnJhbmNo
Tm90Q2VsbChKU1ZhbHVlUmVncyk7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgYnJhbmNoSXNPdGhl
cihKU1ZhbHVlUmVncywgR1BSUmVnIHRlbXBHUFIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGJy
YW5jaE5vdE90aGVyKEpTVmFsdWVSZWdzLCBHUFJSZWcgdGVtcEdQUik7CisgICAgCisgICAgdm9p
ZCBtb3ZlVHJ1ZVRvKEdQUlJlZyk7CisgICAgdm9pZCBtb3ZlRmFsc2VUbyhHUFJSZWcpOworICAg
IHZvaWQgYmxlc3NCb29sZWFuKEdQUlJlZyk7CisgICAgCiAgICAgLy8gc2l6ZSBjYW4gYmUgYW4g
aW1tZWRpYXRlIG9yIGEgcmVnaXN0ZXIsIGFuZCBtdXN0IGJlIGluIGJ5dGVzLiBJZiBzaXplIGlz
IGEgcmVnaXN0ZXIsCiAgICAgLy8gaXQgbXVzdCBiZSBhIGRpZmZlcmVudCByZWdpc3RlciB0aGFu
IHJlc3VsdEdQUi4gRW1pdHMgY29kZSB0aGF0IHBsYWNlIGEgcG9pbnRlciB0bwogICAgIC8vIHRo
ZSBlbmQgb2YgdGhlIGFsbG9jYXRpb24uIFRoZSByZXR1cm5lZCBqdW1wIGlzIHRoZSBqdW1wIHRv
IHRoZSBzbG93IHBhdGguCkBAIC0yMTkzLDYgKzIyMzAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
cGVjdWxhdGVTdHJpbmdJZGVudChFZGdlIGVkZ2UsIEdQUlJlZyBzdHJpbmcpOwogICAgIHZvaWQg
c3BlY3VsYXRlU3RyaW5nSWRlbnQoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoRWRn
ZSk7CisgICAgdm9pZCBzcGVjdWxhdGVOb3RTdHJpbmdWYXIoRWRnZSk7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgU3RydWN0dXJlTG9jYXRpb25UeXBlPgogICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5n
T2JqZWN0Rm9yU3RydWN0dXJlKEVkZ2UsIFN0cnVjdHVyZUxvY2F0aW9uVHlwZSk7CiAgICAgdm9p
ZCBzcGVjdWxhdGVTdHJpbmdPYmplY3QoRWRnZSwgR1BSUmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkocmV2aXNpb24gMTY1Nzk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEs
NiArOTEsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVXNlCiAgICAg
Y2FzZSBTdHJpbmdPclN0cmluZ09iamVjdFVzZToKICAgICAgICAgb3V0LnByaW50KCJTdHJpbmdP
clN0cmluZ09iamVjdCIpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vdFN0cmluZ1ZhclVz
ZToKKyAgICAgICAgb3V0LnByaW50KCJOb3RTdHJpbmdWYXIiKTsKKyAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBOb3RDZWxsVXNlOgogICAgICAgICBvdXQucHJpbnQoIk5vdENlbGwiKTsKICAgICAg
ICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2
aXNpb24gMTY1Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAgZW51bSBVc2VLaW5kIHsKICAgICBLbm93
blN0cmluZ1VzZSwKICAgICBTdHJpbmdPYmplY3RVc2UsCiAgICAgU3RyaW5nT3JTdHJpbmdPYmpl
Y3RVc2UsCisgICAgTm90U3RyaW5nVmFyVXNlLAogICAgIE5vdENlbGxVc2UsCiAgICAgT3RoZXJV
c2UsCiAgICAgTWlzY1VzZSwKQEAgLTkzLDYgKzk0LDggQEAgQUxXQVlTX0lOTElORSBTcGVjdWxh
dGVkVHlwZSB0eXBlRmlsdGVyRgogICAgICAgICByZXR1cm4gU3BlY1N0cmluZ09iamVjdDsKICAg
ICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgogICAgICAgICByZXR1cm4gU3BlY1N0cmlu
ZyB8IFNwZWNTdHJpbmdPYmplY3Q7CisgICAgY2FzZSBOb3RTdHJpbmdWYXJVc2U6CisgICAgICAg
IHJldHVybiB+U3BlY1N0cmluZ1ZhcjsKICAgICBjYXNlIE5vdENlbGxVc2U6CiAgICAgICAgIHJl
dHVybiB+U3BlY0NlbGw7CiAgICAgY2FzZSBPdGhlclVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE2NTc5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjM4LDYgKzIzOCw4IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGls
ZShOb2RlKiAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlV
c2VLaW5kKE51bWJlclVzZSkpCiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKG5vZGUt
PmlzQmluYXJ5VXNlS2luZChTdHJpbmdJZGVudFVzZSkpCisgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpCkBA
IC0yNTYsNiArMjU4LDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUq
IAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQo
TnVtYmVyVXNlKSkKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobm9kZS0+aXNCaW5h
cnlVc2VLaW5kKFN0cmluZ0lkZW50VXNlKSkKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBp
ZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkpCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChCb29sZWFuVXNlKSkKQEAgLTI2NCw2
ICsyNjgsMTAgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBl
ZFVzZSwgTWlzY1VzZSkpCiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKG5vZGUtPmlz
QmluYXJ5VXNlS2luZChTdHJpbmdJZGVudFVzZSwgTm90U3RyaW5nVmFyVXNlKSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKE5vdFN0cmluZ1Zh
clVzZSwgU3RyaW5nSWRlbnRVc2UpKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIHJldHVy
biBDYW5ub3RDb21waWxlOwogICAgIGNhc2UgQ29tcGFyZUxlc3M6CiAgICAgY2FzZSBDb21wYXJl
TGVzc0VxOgpAQCAtMzU4LDYgKzM2Niw4IEBAIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKEdy
YXBoJiBncmFwaCkKICAgICAgICAgICAgICAgICBjYXNlIE5vdENlbGxVc2U6CiAgICAgICAgICAg
ICAgICAgY2FzZSBPdGhlclVzZToKICAgICAgICAgICAgICAgICBjYXNlIE1pc2NVc2U6CisgICAg
ICAgICAgICAgICAgY2FzZSBTdHJpbmdJZGVudFVzZToKKyAgICAgICAgICAgICAgICBjYXNlIE5v
dFN0cmluZ1ZhclVzZToKICAgICAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJl
dmlzaW9uIDE2NTc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzY0LDcgKzMzNjQsOCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTWFjaGluZUludFVzZSkKICAg
ICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVzZSkKICAgICAgICAg
ICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkKLSAgICAgICAgICAgIHx8
IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEJvb2xlYW5Vc2UpKSB7CisgICAgICAgICAgICB8fCBt
X25vZGUtPmlzQmluYXJ5VXNlS2luZChCb29sZWFuVXNlKQorICAgICAgICAgICAgfHwgbV9ub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nSWRlbnRVc2UpKSB7CiAgICAgICAgICAgICBjb21waWxl
Q29tcGFyZVN0cmljdEVxKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTM0
MTcsNiArMzQxOCwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nSWRl
bnRVc2UpKSB7CisgICAgICAgICAgICBzZXRCb29sZWFuKAorICAgICAgICAgICAgICAgIG1fb3V0
LmVxdWFsKGxvd1N0cmluZ0lkZW50KG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dTdHJpbmdJZGVudCht
X25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIAogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKSkgewog
ICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBtX291dC5lcXVhbCgKQEAg
LTM0NDEsNiArMzQ0OCwzNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5n
SWRlbnRVc2UsIE5vdFN0cmluZ1ZhclVzZSkKKyAgICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5h
cnlVc2VLaW5kKE5vdFN0cmluZ1ZhclVzZSwgU3RyaW5nSWRlbnRVc2UpKSB7CisgICAgICAgICAg
ICBFZGdlIGxlZnRFZGdlID0gbV9ub2RlLT5jaGlsZEZvcihTdHJpbmdJZGVudFVzZSk7CisgICAg
ICAgICAgICBFZGdlIHJpZ2h0RWRnZSA9IG1fbm9kZS0+Y2hpbGRGb3IoTm90U3RyaW5nVmFyVXNl
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dTdHJpbmdJZGVu
dChsZWZ0RWRnZSk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHRWYWx1ZSA9IGxvd0pTVmFsdWUo
cmlnaHRFZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJD
b21wYXJlU3RyaWN0RXEgU3RyaW5nSWRlbnQgdG8gTm90U3RyaW5nVmFyIGlzIGNlbGwgY2FzZSIp
KTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzU3RyaW5nQ2FzZSA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiQ29tcGFyZVN0cmljdEVxIFN0cmluZ0lkZW50IHRvIE5vdFN0cmluZ1ZhciBpcyBz
dHJpbmcgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQ29tcGFyZVN0cmljdEVxIFN0cmluZ0lkZW50IHRvIE5vdFN0
cmluZ1ZhciBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIG5vdENlbGxSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNl
KTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwocmlnaHRWYWx1ZSksIHVuc3VyZShp
c0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGlz
U3RyaW5nQ2FzZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RTdHJpbmdSZXN1bHQg
PSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKKyAgICAgICAgICAgIG1fb3V0LmJy
YW5jaChpc1N0cmluZyhyaWdodFZhbHVlKSwgdW5zdXJlKGlzU3RyaW5nQ2FzZSksIHVuc3VyZShj
b250aW51YXRpb24pKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
aXNTdHJpbmdDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0g
bV9vdXQubG9hZFB0cihyaWdodFZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50KHJpZ2h0RWRnZSwgcmlnaHRWYWx1ZSwgcmlnaHQp
OworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaXNTdHJpbmdSZXN1bHQgPSBtX291dC5hbmNo
b3IobV9vdXQuZXF1YWwobGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaSht
X291dC5ib29sZWFuLCBub3RDZWxsUmVzdWx0LCBub3RTdHJpbmdSZXN1bHQsIGlzU3RyaW5nUmVz
dWx0KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIApAQCAtNDgyMSwxMyAr
NDg1OCwyMyBAQCBwcml2YXRlOgogICAgIAogICAgIExWYWx1ZSBsb3dTdHJpbmcoRWRnZSBlZGdl
LCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRp
b24pCiAgICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IFN0cmluZ1VzZSB8fCBlZGdlLnVz
ZUtpbmQoKSA9PSBLbm93blN0cmluZ1VzZSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwg
bW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gU3Ry
aW5nVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duU3RyaW5nVXNlIHx8IGVkZ2UudXNlS2lu
ZCgpID09IFN0cmluZ0lkZW50VXNlKTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSByZXN1bHQg
PSBsb3dDZWxsKGVkZ2UsIG1vZGUpOwogICAgICAgICBzcGVjdWxhdGVTdHJpbmcoZWRnZSwgcmVz
dWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgTFZhbHVlIGxv
d1N0cmluZ0lkZW50KEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0
b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRCht
b2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9
PSBTdHJpbmdJZGVudFVzZSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgc3RyaW5nID0gbG93
U3RyaW5nKGVkZ2UsIG1vZGUpOworICAgICAgICBMVmFsdWUgc3RyaW5nSW1wbCA9IG1fb3V0Lmxv
YWRQdHIoc3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgc3BlY3VsYXRl
U3RyaW5nSWRlbnQoZWRnZSwgc3RyaW5nLCBzdHJpbmdJbXBsKTsKKyAgICAgICAgcmV0dXJuIHN0
cmluZ0ltcGw7CisgICAgfQorICAgIAogICAgIExWYWx1ZSBsb3dOb25OdWxsT2JqZWN0KEVkZ2Ug
ZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1
bGF0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpOwpAQCAt
NTE4OSw2ICs1MjM2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBTdHJpbmdVc2U6CiAgICAg
ICAgICAgICBzcGVjdWxhdGVTdHJpbmcoZWRnZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTdHJpbmdJZGVudFVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50
KGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNl
OgogICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nT2JqZWN0KGVkZ2UpOwogICAgICAgICAgICAg
YnJlYWs7CkBAIC01MjA3LDYgKzUyNTcsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEJvb2xl
YW5Vc2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGVkZ2UpOwogICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgTm90U3RyaW5nVmFyVXNlOgorICAgICAgICAgICAgc3BlY3Vs
YXRlTm90U3RyaW5nVmFyKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
Tm90Q2VsbFVzZToKICAgICAgICAgICAgIHNwZWN1bGF0ZU5vdENlbGwoZWRnZSk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTUzNjYsNyArNTQxOSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCBzcGVjdWxhdGVTdHJpbmcoRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkKICAgICB7Ci0gICAgICAg
IEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwgU3BlY1N0cmluZywgaXNO
b3RTdHJpbmcoY2VsbCkpOworICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUoY2Vs
bCksIGVkZ2UsIFNwZWNTdHJpbmcgfCB+U3BlY0NlbGwsIGlzTm90U3RyaW5nKGNlbGwpKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoRWRnZSBlZGdlKQpAQCAtNTM3NCw2
ICs1NDI3LDI1IEBAIHByaXZhdGU6CiAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhlZGdlLCBsb3dD
ZWxsKGVkZ2UpKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdJZGVudChF
ZGdlIGVkZ2UsIExWYWx1ZSBzdHJpbmcsIExWYWx1ZSBzdHJpbmdJbXBsKQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNTdHJpbmdJZGVu
dCB8IH5TcGVjU3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoc3RyaW5nKSwgZWRnZS5ub2RlKCksIG1f
b3V0LmlzTnVsbChzdHJpbmdJbXBsKSk7CisgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAg
IEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShzdHJpbmcpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAg
IG1fb3V0LnRlc3RJc1plcm8zMigKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIoc3RyaW5n
SW1wbCwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCisgICAgICAgICAgICAgICAg
bV9vdXQuY29uc3RJbnQzMihTdHJpbmdJbXBsOjpmbGFnSXNJZGVudGlmaWVyKCkpKSk7CisgICAg
ICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKGVkZ2UsIFNwZWNTdHJpbmdJZGVudCB8IH5TcGVjU3Ry
aW5nKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdJZGVudChFZGdlIGVk
Z2UpCisgICAgeworICAgICAgICBsb3dTdHJpbmdJZGVudChlZGdlKTsKKyAgICB9CisgICAgCiAg
ICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdPYmplY3QoRWRnZSBlZGdlKQogICAgIHsKICAgICAgICAg
aWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNTdHJpbmdPYmplY3Qp
KQpAQCAtNTQ3NSw2ICs1NTQ3LDI5IEBAIHByaXZhdGU6CiAgICAgICAgIGxvd0Jvb2xlYW4oZWRn
ZSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc3BlY3VsYXRlTm90U3RyaW5nVmFyKEVkZ2UgZWRn
ZSkKKyAgICB7CisgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdl
LCB+U3BlY1N0cmluZ1ZhcikpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAg
ICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJTcGVjdWxhdGUgTm90U3RyaW5nVmFyIGlzIGNlbGwgY2FzZSIpKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJT
cGVjdWxhdGUgTm90U3RyaW5nVmFyIGlzIHN0cmluZyBjYXNlIikpOworICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBOb3RT
dHJpbmdWYXIgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNo
KGlzQ2VsbCh2YWx1ZSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikp
OworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhpc0NlbGxDYXNlLCBpc1N0cmluZ0Nhc2UpOworICAgICAgICBtX291dC5icmFuY2goaXNTdHJp
bmcodmFsdWUpLCB1bnN1cmUoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwor
ICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdDYXNlLCBjb250aW51YXRp
b24pOworICAgICAgICBzcGVjdWxhdGVTdHJpbmdJZGVudChlZGdlLCB2YWx1ZSwgbV9vdXQubG9h
ZFB0cih2YWx1ZSwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSkpOworICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVOb3RDZWxs
KEVkZ2UgZWRnZSkKICAgICB7CiAgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVD
aGVjayhlZGdlKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1Zh
bHVlLmgJKHJldmlzaW9uIDE2NTc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwxMiBAQCB1bmlvbiBF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yIHsKICNkZWZpbmUgVGFnT2Zmc2V0IChPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpCiAjZGVmaW5lIFBheWxvYWRP
ZmZzZXQgKE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5
bG9hZCkpCiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorI2RlZmluZSBDZWxsUGF5bG9hZE9mZnNldCAw
CisjZWxzZQorI2RlZmluZSBDZWxsUGF5bG9hZE9mZnNldCBQYXlsb2FkT2Zmc2V0CisjZW5kaWYK
KwogZW51bSBXaGljaFZhbHVlV29yZCB7CiAgICAgVGFnV29yZCwKICAgICBQYXlsb2FkV29yZApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zdHJpbmctaWRlbnQtdG8t
bm90LXN0cmluZy12YXItZXF1YWxpdHkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9zdHJpbmctaWRlbnQtdG8tbm90LXN0cmluZy12YXItZXF1YWxp
dHkuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L3N0cmluZy1pZGVudC10by1ub3Qtc3RyaW5nLXZhci1lcXVhbGl0eS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDMyIEBACitmdW5jdGlvbiBmb28oYSwgYikgeworICAgIHJldHVybiBhID09
PSBiOworfQorCitmdW5jdGlvbiBiYXIoYSwgYikgeworICAgIHJldHVybiBiID09PSBhOworfQor
CitmdW5jdGlvbiB0ZXN0KGEsIGIsIGV4cGVjdGVkKSB7CisgICAgdmFyIGZvb0FjdHVhbCA9IGZv
byhhLCBiKTsKKyAgICB2YXIgYmFyQWN0dWFsID0gYmFyKGEsIGIpOworICAgIAorICAgIGlmIChm
b29BY3R1YWwgIT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3Vs
dDogIiArIGZvb0FjdHVhbCk7CisgICAgaWYgKGJhckFjdHVhbCAhPSBleHBlY3RlZCkKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmVzdWx0OiAiICsgYmFyQWN0dWFsKTsKK30KKworZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdGVzdCgiZm9vIiwgImZvbyIsIHRy
dWUpOworICAgIHRlc3QoImZvbyIsICJiYXIiLCBmYWxzZSk7CisgICAgdGVzdCgiZnV6IiwgNDIs
IGZhbHNlKTsKKyAgICB0ZXN0KCJidXoiLCB7fSwgZmFsc2UpOworICAgIHRlc3QoImJsYSIsIG51
bGwsIGZhbHNlKTsKK30KKwordmFyIGZvb1N0cmluZyA9ICIiOworZm9vU3RyaW5nICs9ICJmIjsK
K2ZvciAodmFyIGkgPSAwOyBpIDwgMjsgKytpKQorICAgIGZvb1N0cmluZyArPSAibyI7CisKK3Rl
c3QoZm9vU3RyaW5nLCAiZm9vIiwgdHJ1ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227089</attachid>
            <date>2014-03-18 12:35:14 -0700</date>
            <delta_ts>2014-03-18 13:37:34 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>74086</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY1Nzk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBA
QAorMjAxNC0wMy0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBDb21wYXJlU3RyaWN0RXEoU3RyaW5nSWRlbnQ6LCBOb3RTdHJpbmdWYXI6KSBhbmQgQ29t
cGFyZVN0cmljdEVxKFN0cmluZzosIFVudHlwZWQ6KQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMzAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXZSBjYW4gcXVpY2tseSBzdHJpY3RseSBj
b21wYXJlIFN0cmluZ0lkZW50J3MgdG8gTm90U3RyaW5nVmFyJ3MgYW5kIFN0cmluZydzIHRvIFVu
dHlwZWQncy4KKyAgICAgICAgVGhpcyBtYWtlcyB0aGUgREZHIGF3YXJlIG9mIHRoaXMuCisgICAg
ICAgIAorICAgICAgICBBbHNvIGFkZHMgU3RyaW5nSWRlbnQtdG8tU3RyaW5nSWRlbnQgYW5kIFN0
cmluZ0lkZW50LXRvLU5vdFN0cmluZ1ZhciBzdHJpY3QgY29tcGFyaXNvbnMgdG8KKyAgICAgICAg
dGhlIEZUTC4gQWxzbyBhZGRzIFN0cmluZ0lkZW50LXRvLVN0cmluZ0lkZW50IG5vbi1zdHJpY3Qg
Y29tcGFyaXNvbnMgdG8gdGhlIEZUTC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxzbyBnaXZl
cyB0aGUgREZHIHNvbWUgYWJzdHJhY3Rpb25zIGZvciBjaGVja2luZyBzb21ldGhpbmcgaXMgYSBj
ZWxsIG9yIGlzIG90aGVyLgorICAgICAgICBUaGlzIG1hZGUgdGhpcyBwYXRjaCBlYXNpZXIgdG8g
d3JpdGUgYW5kIGFsc28gc2ltcGxpZmllZCBhIGJ1bmNoIG9mIG90aGVyIHN0dWZmLgorCisgICAg
ICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Q6Okp1bXBMaXN0KToKKyAgICAgICAgKiBi
eXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oOgorICAgICAgICAoSlNDOjppc05vdFN0cmluZ1ZhclNw
ZWN1bGF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5o
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNoaWxkRm9yKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjpzaG91bGRTcGVjdWxhdGVOb3RTdHJpbmdWYXIpOgorICAgICAgICAqIGRmZy9ERkdT
YWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZVRvRXhlY3V0ZUVkZ2U6Om9w
ZXJhdG9yKCkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbik6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvck9iamVjdCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJvb2xlYW5Db21wYXJlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ0VxdWFsaXR5KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1RvVW50eXBlZEVxdWFs
aXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ0lk
ZW50RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
U3RyaW5nSWRlbnRUb05vdFN0cmluZ1ZhckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1plcm9MZW5ndGgpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmplY3RPck90aGVyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nSWRlbnRBbmRMb2FkU3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU5vdFN0cmluZ1Zh
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU5vdENlbGwp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPdGhlcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hDaGFyKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaFN0cmluZyk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmJs
ZXNzZWRCb29sZWFuUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
dW5ibGVzc2VkQm9vbGVhblJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmJvb2xlYW5SZXN1bHQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVO
b25QZWVwaG9sZUNvbXBhcmVOdWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90
aGVyRXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OmJyYW5jaElzQ2VsbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6YnJhbmNoTm90Q2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmJyYW5jaElzT3RoZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpicmFuY2hOb3RPdGhlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6Om1vdmVUcnVlVG8pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjptb3Zl
RmFsc2VUbyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmJsZXNzQm9vbGVh
bik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51
bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBl
ZXBob2xlQnJhbmNoTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxp
dHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JP
dGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0
T2JqZWN0T3JPdGhlckJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJp
ZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hJc0NlbGwpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2hOb3RDZWxsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoSXNPdGhlcik6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmJyYW5jaE5vdE90aGVyKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6bW92ZVRydWVUbyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6Om1vdmVGYWxzZVRvKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Ymxlc3NCb29sZWFuKToKKyAgICAgICAgKiBkZmcvREZHVXNlS2luZC5jcHA6CisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdVc2VLaW5kLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6dHlwZUZpbHRlckZvcik6CisgICAgICAgICogZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICog
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06Omxvd1N0cmluZyk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
Omxvd1N0cmluZ0lkZW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3Bl
Y3VsYXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlU3RyaW5n
SWRlbnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVOb3RT
dHJpbmdWYXIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5oOgorICAgICAgICAqIHRl
c3RzL3N0cmVzcy9zdHJpbmctaWRlbnQtdG8tbm90LXN0cmluZy12YXItZXF1YWxpdHkuanM6IEFk
ZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgICh0ZXN0KToKKwog
MjAxNC0wMy0xNyAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAg
ICBWOCByZWdleHAgc3BlbmRzIG1vc3Qgb2YgaXRzIHRpbWUgaW4gb3BlcmF0aW9uR2V0QnlJZApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE2NTc5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC02OTMsNyArNjkzLDggQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgSnVtcExpc3Qo
SnVtcCBqdW1wKQogICAgICAgICB7Ci0gICAgICAgICAgICBhcHBlbmQoanVtcCk7CisgICAgICAg
ICAgICBpZiAoanVtcC5pc1NldCgpKQorICAgICAgICAgICAgICAgIGFwcGVuZChqdW1wKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHZvaWQgbGluayhBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2Vt
YmxlclR5cGU+KiBtYXNtKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDE2NTc5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAs
NiArMTIwLDExIEBAIGlubGluZSBib29sIGlzU3RyaW5nSWRlbnRTcGVjdWxhdGlvbihTcGUKICAg
ICByZXR1cm4gdmFsdWUgPT0gU3BlY1N0cmluZ0lkZW50OwogfQogCitpbmxpbmUgYm9vbCBpc05v
dFN0cmluZ1ZhclNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVy
biAhKHZhbHVlICYgU3BlY1N0cmluZ1Zhcik7Cit9CisKIGlubGluZSBib29sIGlzU3RyaW5nU3Bl
Y3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiB7CiAgICAgcmV0dXJuICEhdmFsdWUgJiYg
KHZhbHVlICYgU3BlY1N0cmluZykgPT0gdmFsdWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE2NTc5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
Niw2ICs0MzYsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBmaXhFZGdlPE1pc2NVc2U+
KG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nSWRl
bnQoKQorICAgICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVO
b3RTdHJpbmdWYXIoKSkgeworICAgICAgICAgICAgICAgIGZpeEVkZ2U8U3RyaW5nSWRlbnRVc2U+
KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBmaXhFZGdlPE5vdFN0cmluZ1ZhclVz
ZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmdJ
ZGVudCgpCisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0
ZU5vdFN0cmluZ1ZhcigpKSB7CisgICAgICAgICAgICAgICAgZml4RWRnZTxTdHJpbmdJZGVudFVz
ZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIGZpeEVkZ2U8Tm90U3RyaW5nVmFy
VXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmlu
ZygpKSB7CisgICAgICAgICAgICAgICAgZml4RWRnZTxTdHJpbmdVc2U+KG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKKyAgICAgICAgICAg
ICAgICBmaXhFZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE2NTc5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzQwLDYgKzEzNDAsMTcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gaXNCaW5hcnlV
c2VLaW5kKHVzZUtpbmQsIHVzZUtpbmQpOwogICAgIH0KICAgICAKKyAgICBFZGdlIGNoaWxkRm9y
KFVzZUtpbmQgdXNlS2luZCkKKyAgICB7CisgICAgICAgIGlmIChjaGlsZDEoKS51c2VLaW5kKCkg
PT0gdXNlS2luZCkKKyAgICAgICAgICAgIHJldHVybiBjaGlsZDEoKTsKKyAgICAgICAgaWYgKGNo
aWxkMigpLnVzZUtpbmQoKSA9PSB1c2VLaW5kKQorICAgICAgICAgICAgcmV0dXJuIGNoaWxkMigp
OworICAgICAgICBpZiAoY2hpbGQzKCkudXNlS2luZCgpID09IHVzZUtpbmQpCisgICAgICAgICAg
ICByZXR1cm4gY2hpbGQzKCk7CisgICAgICAgIHJldHVybiBFZGdlKCk7CisgICAgfQorICAgIAog
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24oKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
cHJlZGljdGlvbjsKQEAgLTE0MTksNiArMTQzMCwxMSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewog
ICAgICAgICByZXR1cm4gaXNTdHJpbmdJZGVudFNwZWN1bGF0aW9uKHByZWRpY3Rpb24oKSk7CiAg
ICAgfQorICAgIAorICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTm90U3RyaW5nVmFyKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBpc05vdFN0cmluZ1ZhclNwZWN1bGF0aW9uKHByZWRpY3Rpb24oKSk7
CisgICAgfQogIAogICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkKICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNp
b24gMTY1Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAgICAgICBjYXNl
IFN0cmluZ1VzZToKICAgICAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAgICAgIGNhc2Ug
U3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CisgICAgICAgIGNhc2UgTm90U3RyaW5nVmFyVXNlOgog
ICAgICAgICBjYXNlIE5vdENlbGxVc2U6CiAgICAgICAgIGNhc2UgT3RoZXJVc2U6CiAgICAgICAg
IGNhc2UgTWlzY1VzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTY1Nzk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjM2LDggKzIzNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlTm9uUGUKICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
OyAgIAogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxp
ZCgpKSB7CiAgICAgICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQotICAgICAg
ICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
YXJnVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotCisgICAgICAgICAg
ICBub3RDZWxsID0gYnJhbmNoTm90Q2VsbChhcmcuanNWYWx1ZVJlZ3MoKSk7CisgICAgICAgIAog
ICAgICAgICBtX2ppdC5tb3ZlKGludmVydCA/IFRydXN0ZWRJbW0zMigxKSA6IFRydXN0ZWRJbW0z
MigwKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBtX2ppdC5qdW1wKCk7CiAgICAgfSBlbHNlIHsKQEAgLTI0NSw4ICsyNDUsOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgICAgIEdQUlRlbXBvcmFy
eSByZW1vdGVHbG9iYWxPYmplY3QodGhpcyk7CiAKICAgICAgICAgaWYgKCFpc0tub3duQ2VsbChv
cGVyYW5kLm5vZGUoKSkpCi0gICAgICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBhcmdUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSk7Ci0KKyAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKGFyZy5qc1Zh
bHVlUmVncygpKTsKKyAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IG1faml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgSklUQ29t
cGlsZXI6Ok5vblplcm8sIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYXJnUGF5
bG9hZEdQUiwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCAKQEAgLTMwNSwxNiArMzA1
LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKIAogICAgIGlm
IChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7CiAgICAg
ICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQotICAgICAgICAgICAgbm90Q2Vs
bCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnVGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotCisgICAgICAgICAgICBub3RDZWxsID0g
YnJhbmNoTm90Q2VsbChhcmcuanNWYWx1ZVJlZ3MoKSk7CisgICAgICAgIAogICAgICAgICBqdW1w
KGludmVydCA/IHRha2VuIDogbm90VGFrZW4sIEZvcmNlSnVtcCk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IGxvY2FsR2xvYmFsT2JqZWN0KHRoaXMpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVtb3RlR2xvYmFsT2JqZWN0KHRoaXMpOwogCiAgICAgICAgIGlmICghaXNLbm93
bkNlbGwob3BlcmFuZC5ub2RlKCkpKQotICAgICAgICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZykpOwotCisgICAgICAgICAgICBub3RDZWxsID0gYnJhbmNoTm90Q2VsbChh
cmcuanNWYWx1ZVJlZ3MoKSk7CisgICAgICAgIAogICAgICAgICBicmFuY2hUZXN0OChKSVRDb21w
aWxlcjo6WmVybywgCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhhcmdQYXlsb2Fk
R1BSLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIAogICAgICAgICAgICAgSklUQ29t
cGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSwgCkBAIC02ODIsNyAr
NjgyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogCiAgICAg
bV9qaXQuZW1pdFN0b3JlQ29kZU9yaWdpbihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgIAot
ICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIGNhbGxlZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAg
c2xvd1BhdGguYXBwZW5kKGJyYW5jaE5vdENlbGwoY2FsbGVlLmpzVmFsdWVSZWdzKCkpKTsKICAg
ICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgY2FsbGVlUGF5bG9hZEdQUiwgdGFyZ2V0VG9DaGVjaykpOwogICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlUGF5bG9hZEdQUiwgT0JKRUNU
X09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGUpKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAg
bV9qaXQuc3RvcmVQdHIocmVzdWx0UGF5bG9hZEdQUiwgY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChK
U1N0YWNrOjpTY29wZUNoYWluKSk7CkBAIC05ODAsOCArOTgwLDE2IEBAIEdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVCgo
aW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkg
PT0gRGF0YUZvcm1hdENlbGwpOwotICAgICAgICBpZiAodHlwZSAmIH5TcGVjQ2VsbCkKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZShKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgZWRnZSwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICBpZiAodHlwZSAm
IH5TcGVjQ2VsbCkgeworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAg
ICAgICBCYWRUeXBlLAorICAgICAgICAgICAgICAgIEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSksCisgICAgICAgICAgICAgICAgZWRnZSwKKyAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6dGFn
Rm9yKHZpcnR1YWxSZWdpc3RlciksCisgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICB9CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxv
Y2F0ZSgpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwpAQCAtMTAwMSw4ICsxMDA5LDExIEBAIEdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgR1BSUmVnIHBheWxv
YWRHUFIgPSBpbmZvLnBheWxvYWRHUFIoKTsKICAgICAgICAgbV9ncHJzLmxvY2sodGFnR1BSKTsK
ICAgICAgICAgbV9ncHJzLmxvY2socGF5bG9hZEdQUik7Ci0gICAgICAgIGlmICh0eXBlICYgflNw
ZWNDZWxsKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyh0YWdHUFIsIHBheWxvYWRHUFIpLCBlZGdlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7Cisg
ICAgICAgIGlmICh0eXBlICYgflNwZWNDZWxsKSB7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAorICAgICAgICAgICAgICAgIEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9h
ZEdQUiksIGVkZ2UsCisgICAgICAgICAgICAgICAgYnJhbmNoTm90Q2VsbChpbmZvLmpzVmFsdWVS
ZWdzKCkpKTsKKyAgICAgICAgfQogICAgICAgICBtX2dwcnMudW5sb2NrKHRhZ0dQUik7CiAgICAg
ICAgIG1fZ3Bycy5yZWxlYXNlKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxv
YWRHUFIpOwpAQCAtMTI0MCw4ICsxMjUxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU9iamVjdFRvT2JqZQogICAgIAogICAgIC8vIEl0IHNlZW1zIHRoYXQgbW9zdCBvZiB0aGUgdGlt
ZSB3aGVuIHByb2dyYW1zIGRvIGEgPT0gYiB3aGVyZSBiIG1heSBiZSBlaXRoZXIgbnVsbC91bmRl
ZmluZWQKICAgICAvLyBvciBhbiBvYmplY3QsIGIgaXMgdXN1YWxseSBhbiBvYmplY3QuIEJhbGFu
Y2UgdGhlIGJyYW5jaGVzIHRvIG1ha2UgdGhhdCBjYXNlIGZhc3QuCi0gICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgcmlnaHROb3RDZWxsID0KLSAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBvcDJUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmlnaHROb3RDZWxsID0gYnJhbmNoTm90Q2Vs
bChvcDIuanNWYWx1ZVJlZ3MoKSk7CiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0
aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4KICAgICBpZiAobWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCkgewpAQCAtMTMzNCw4ICsxMzQ0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIAogICAgIC8vIEl0IHNl
ZW1zIHRoYXQgbW9zdCBvZiB0aGUgdGltZSB3aGVuIHByb2dyYW1zIGRvIGEgPT0gYiB3aGVyZSBi
IG1heSBiZSBlaXRoZXIgbnVsbC91bmRlZmluZWQKICAgICAvLyBvciBhbiBvYmplY3QsIGIgaXMg
dXN1YWxseSBhbiBvYmplY3QuIEJhbGFuY2UgdGhlIGJyYW5jaGVzIHRvIG1ha2UgdGhhdCBjYXNl
IGZhc3QuCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmlnaHROb3RDZWxsID0KLSAgICAgICAg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDJUYWdHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmln
aHROb3RDZWxsID0gYnJhbmNoTm90Q2VsbChvcDIuanNWYWx1ZVJlZ3MoKSk7CiAgICAgCiAgICAg
Ly8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJyYW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEg
Y2VsbC4KICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCkgewpA
QCAtMTQzMiw3ICsxNDQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9y
T3RoZQogICAgICAgICBzdHJ1Y3R1cmVHUFIgPSBzdHJ1Y3R1cmUuZ3ByKCk7CiAgICAgfQogCi0g
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IGJyYW5jaE5vdENlbGwo
dmFsdWUuanNWYWx1ZVJlZ3MoKSk7CiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRj
aHBvaW50VmFsaWQpIHsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBKU1Zh
bHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZVVzZSwgKH5TcGVjQ2Vs
bCkgfCBTcGVjT2JqZWN0LApAQCAtMTU2Miw3ICsxNTcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1
ZS5wYXlsb2FkR1BSKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwog
ICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZykpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBicmFuY2hO
b3RDZWxsKHZhbHVlLmpzVmFsdWVSZWdzKCkpOwogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZp
bmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgIERGR19UWVBFX0NIRUNLKAog
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIG5v
ZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwKQEAgLTMwNjksNyArMzA3OCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0
Lm1vdmUob3AxVGFnR1BSLCByZXN1bHRUYWdHUFIpOwogICAgICAgICAgICAgbV9qaXQubW92ZShv
cDFQYXlsb2FkR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFscmVhZHlQcmltaXRpdmUgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGFscmVh
ZHlQcmltaXRpdmUgPSBicmFuY2hOb3RDZWxsKG9wMS5qc1ZhbHVlUmVncygpKTsKICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdFByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMVBheWxv
YWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBhbHJlYWR5UHJpbWl0aXZlLmxpbmsoJm1faml0KTsKQEAgLTMwOTks
OCArMzEwOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZTsKICAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY1N0cmluZykgewotICAg
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoMSA9IG1faml0LmJyYW5jaDMy
KAotICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsIG9wMVRhZ0dQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICAgICAgICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBzbG93UGF0aDEgPSBicmFuY2hOb3RDZWxsKG9wMS5qc1ZhbHVlUmVncygpKTsK
ICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aDIgPSBtX2ppdC5icmFu
Y2hQdHIoCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKICAgICAg
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxUGF5bG9hZEdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwKQEAgLTM0NjcsOCArMzQ3NSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVnIHRlbXBUYWdHUFIg
PSB0ZW1wVGFnLmdwcigpOwogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlczsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMigK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGhpc1ZhbHVlVGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hOb3RDZWxsKHRoaXNWYWx1ZS5qc1ZhbHVlUmVncygpKSk7CiAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoOCgKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRoaXNWYWx1ZVBh
eWxvYWRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLApAQCAtMzY3OSw3ICszNjg2
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAK
ICAgICAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgIAotICAgICAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwg
YmFzZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKGJhc2UuanNWYWx1ZVJl
Z3MoKSk7CiAgICAgICAgIAogICAgICAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLT5vcmlnaW4u
c2VtYW50aWMsIGJhc2VUYWdHUFIsIGJhc2VQYXlsb2FkR1BSLCByZXN1bHRUYWdHUFIsIHJlc3Vs
dFBheWxvYWRHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgbm90Q2VsbCk7CiAgICAgICAg
IApAQCAtMzczNSw3ICszNzQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICAKICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAg
IAotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMy
KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYmFzZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBicmFu
Y2hOb3RDZWxsKGJhc2UuanNWYWx1ZVJlZ3MoKSk7CiAgICAgICAgIAogICAgICAgICAgICAgY2Fj
aGVkR2V0QnlJZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGJhc2VUYWdHUFIsIGJhc2VQYXlsb2Fk
R1BSLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1i
ZXIoKSwgbm90Q2VsbCwgRG9udFNwaWxsKTsKICAgICAgICAgCkBAIC00MDc5LDcgKzQwODYsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUlRl
bXBvcmFyeSBsb2NhbEdsb2JhbE9iamVjdCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
bW90ZUdsb2JhbE9iamVjdCh0aGlzKTsKIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0Nl
bGwgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHZhbHVlLnRhZ0dQUigpLCBK
SVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgaXNDZWxsID0gYnJhbmNoSXNDZWxsKHZhbHVlLmpzVmFsdWVSZWdzKCkp
OwogICAgICAgICAKICAgICAgICAgbV9qaXQuY29tcGFyZTMyKEpJVENvbXBpbGVyOjpFcXVhbCwg
dmFsdWUudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1
bHQuZ3ByKCkpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgp
OwpAQCAtNDEzNSw3ICs0MTQyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVlLCBUYWdX
b3JkKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1f
aml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgdmFsdWUudGFnR1BSKCksIEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBpc05vdENlbGwgPSBicmFuY2hOb3RDZWxsKHZhbHVlLmpzVmFsdWVSZWdzKCkp
OwogICAgICAgICAKICAgICAgICAgbV9qaXQuY29tcGFyZTgoSklUQ29tcGlsZXI6OkVxdWFsLCAK
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHZhbHVlLnBheWxvYWRHUFIoKSwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIApAQCAtNDE4OCw3ICs0MTk1LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgICAgIEFTU0VSVChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gQ2VsbFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNl
KTsKIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2gz
MihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2Vs
bCA9IGJyYW5jaE5vdENlbGwodmFsdWUuanNWYWx1ZVJlZ3MoKSk7CiAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgIT0gVW50eXBlZFVzZSkKICAgICAgICAgICAgIERGR19UWVBF
X0NIRUNLKEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBT
cGVjQ2VsbCwgaXNOb3RDZWxsKTsKIApAQCAtNDc0Nyw2ICs0NzU0LDQ4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OndyaXRlQmFycmllcihKU0NlbGwKIH0KICNlbmRpZiAvLyBFTkFCTEUoR0dDKQog
CitKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoSXNDZWxsKEpTVmFsdWVS
ZWdzIHJlZ3MpCit7CisgICAgcmV0dXJuIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKK30K
KworSklUQ29tcGlsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6OmJyYW5jaE5vdENlbGwoSlNWYWx1
ZVJlZ3MgcmVncykKK3sKKyAgICByZXR1cm4gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykp
OworfQorCitKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoSXNPdGhlcihK
U1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUikKK3sKKyAgICBtX2ppdC5tb3ZlKHJlZ3Mu
dGFnR1BSKCksIHRlbXBHUFIpOworICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCB0ZW1w
R1BSKTsKKyAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgdGVtcEdQUiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChK
U1ZhbHVlOjpOdWxsVGFnKSk7Cit9CisKK0pJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklU
OjpicmFuY2hOb3RPdGhlcihKU1ZhbHVlUmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUikKK3sKKyAg
ICBtX2ppdC5tb3ZlKHJlZ3MudGFnR1BSKCksIHRlbXBHUFIpOworICAgIG1faml0Lm9yMzIoVHJ1
c3RlZEltbTMyKDEpLCB0ZW1wR1BSKTsKKyAgICByZXR1cm4gbV9qaXQuYnJhbmNoMzIoCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdWxsVGFnKSk7Cit9CisKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6Om1vdmVUcnVlVG8oR1BSUmVnIGdwcikKK3sKKyAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW0zMigxKSwgZ3ByKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bW92ZUZhbHNlVG8o
R1BSUmVnIGdwcikKK3sKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgZ3ByKTsKK30K
Kwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Ymxlc3NCb29sZWFuKEdQUlJlZyBncHIpCit7Cit9CisK
ICNlbmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE2
NTc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Miw3ICsyNDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZU5vblBlCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZDsKICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJ
c1N0aWxsVmFsaWQoKSkgewogICAgICAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQubm9kZSgp
KSkKLSAgICAgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAgICAg
ICAgIG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKGFyZ0dQUikpOwogCiAgICAg
ICAgIG1faml0Lm1vdmUoaW52ZXJ0ID8gVHJ1c3RlZEltbTMyKDEpIDogVHJ1c3RlZEltbTMyKDAp
LCByZXN1bHRHUFIpOwogICAgICAgICBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gbV9qaXQu
anVtcCgpOwpAQCAtMjUyLDggKzI1Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlTm9uUGUKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKICAgICAg
ICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kLm5vZGUoKSkpCi0gICAgICAgICAgICBub3RDZWxs
ID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBhcmdHUFIsIEdQ
UkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0KKyAgICAgICAgICAgIG5vdENlbGwgPSBicmFuY2hO
b3RDZWxsKEpTVmFsdWVSZWdzKGFyZ0dQUikpOworICAgICAgICAKICAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gbV9qaXQuYnJhbmNoVGVzdDgoCiAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywgCiAgICAgICAgICAgICBKSVRDb21waWxl
cjo6QWRkcmVzcyhhcmdHUFIsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgCkBAIC0z
MTEsOCArMzExLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAog
ICAgIAogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxp
ZCgpKSB7CiAgICAgICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZC5ub2RlKCkpKQotICAgICAg
ICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgYXJnR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotCisgICAgICAgICAgICBub3RD
ZWxsID0gYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyhhcmdHUFIpKTsKKyAgICAgICAgCiAgICAg
ICAgIGp1bXAoaW52ZXJ0ID8gdGFrZW4gOiBub3RUYWtlbiwgRm9yY2VKdW1wKTsKICAgICB9IGVs
c2UgewogICAgICAgICBHUFJUZW1wb3JhcnkgbG9jYWxHbG9iYWxPYmplY3QodGhpcyk7CkBAIC0z
MjAsOCArMzIwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAog
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBpZiAoIWlzS25v
d25DZWxsKG9wZXJhbmQubm9kZSgpKSkKLSAgICAgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKTsKLQorICAgICAgICAgICAgbm90Q2VsbCA9IGJyYW5jaE5vdENlbGwoSlNWYWx1
ZVJlZ3MoYXJnR1BSKSk7CisgICAgICAgIAogICAgICAgICBicmFuY2hUZXN0OChKSVRDb21waWxl
cjo6WmVybywgCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhhcmdHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6VHJ1
c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpLCAKQEAgLTEzNjcsNyArMTM2Nyw3IEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKIAogICAgICAgICBpbmZv
LmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICBpZiAo
dHlwZSAmIH5TcGVjQ2VsbCkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBlZGdlLCBicmFuY2hO
b3RDZWxsKEpTVmFsdWVSZWdzKGdwcikpKTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9z
dHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAg
fQpAQCAtMTM3Nyw3ICsxMzc3LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlQ2VsbAogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJz
LmxvY2soZ3ByKTsKICAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrQ2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2tDZWxsID0gYnJhbmNoSXNDZWxsKEpTVmFs
dWVSZWdzKGdwcikpOwogICAgICAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogICAgICAgICAg
ICAgY2hlY2tDZWxsLmxpbmsoJm1faml0KTsKICAgICAgICAgfQpAQCAtMTM4OCw3ICsxMzg4LDcg
QEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBHUFJS
ZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAg
aWYgKHR5cGUgJiB+U3BlY0NlbGwpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVSZWdzKGdwciksIGVkZ2UsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgZWRnZSwgYnJh
bmNoTm90Q2VsbChKU1ZhbHVlUmVncyhncHIpKSk7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUo
Km1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICByZXR1cm4gZ3ByOwog
ICAgIH0KQEAgLTE2MjIsOCArMTYyMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVP
YmplY3RUb09iamUKICAgICAKICAgICAvLyBJdCBzZWVtcyB0aGF0IG1vc3Qgb2YgdGhlIHRpbWUg
d2hlbiBwcm9ncmFtcyBkbyBhID09IGIgd2hlcmUgYiBtYXkgYmUgZWl0aGVyIG51bGwvdW5kZWZp
bmVkCiAgICAgLy8gb3IgYW4gb2JqZWN0LCBiIGlzIHVzdWFsbHkgYW4gb2JqZWN0LiBCYWxhbmNl
IHRoZSBicmFuY2hlcyB0byBtYWtlIHRoYXQgY2FzZSBmYXN0LgotICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHJpZ2h0Tm90Q2VsbCA9Ci0gICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgb3AyR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJpZ2h0Tm90Q2VsbCA9IGJyYW5jaE5vdENlbGwoSlNWYWx1
ZVJlZ3Mob3AyR1BSKSk7CiAgICAgCiAgICAgLy8gV2Uga25vdyB0aGF0IHdpdGhpbiB0aGlzIGJy
YW5jaCwgcmlnaHRDaGlsZCBtdXN0IGJlIGEgY2VsbC4gCiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50VmFsaWQpIHsKQEAgLTE3MTMsOCArMTcxMiw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKIAogICAgIC8vIEl0IHNlZW1zIHRoYXQg
bW9zdCBvZiB0aGUgdGltZSB3aGVuIHByb2dyYW1zIGRvIGEgPT0gYiB3aGVyZSBiIG1heSBiZSBl
aXRoZXIgbnVsbC91bmRlZmluZWQKICAgICAvLyBvciBhbiBvYmplY3QsIGIgaXMgdXN1YWxseSBh
biBvYmplY3QuIEJhbGFuY2UgdGhlIGJyYW5jaGVzIHRvIG1ha2UgdGhhdCBjYXNlIGZhc3QuCi0g
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmlnaHROb3RDZWxsID0KLSAgICAgICAgbV9qaXQuYnJh
bmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDJHUFIsIEdQUkluZm86OnRhZ01h
c2tSZWdpc3Rlcik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmlnaHROb3RDZWxsID0gYnJh
bmNoTm90Q2VsbChKU1ZhbHVlUmVncyhvcDJHUFIpKTsKICAgICAKICAgICAvLyBXZSBrbm93IHRo
YXQgd2l0aGluIHRoaXMgYnJhbmNoLCByaWdodENoaWxkIG11c3QgYmUgYSBjZWxsLiAKICAgICBp
ZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRWYWxpZCkgewpAQCAtMTg0Nyw3ICsx
ODQ1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgICAg
ICBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBub3RDZWxsID0gYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyh2YWx1ZUdQUikp
OwogICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludFZhbGlkKSB7CiAgICAg
ICAgIERGR19UWVBFX0NIRUNLKAogICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBu
b2RlVXNlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFN0cnVjdHVyZVB0
cigKQEAgLTE5OTcsNyArMTk5NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RP
ck90aGVyQnIKICAgICAgICAgc3RydWN0dXJlR1BSID0gc3RydWN0dXJlLmdwcigpOwogICAgIH0K
IAotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKEpT
VmFsdWVSZWdzKHZhbHVlR1BSKSk7CiAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRj
aHBvaW50SXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgREZHX1RZUEVfQ0hFQ0soCiAgICAgICAg
ICAgICBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVVc2UsICh+U3BlY0NlbGwpIHwgU3BlY09i
amVjdCwgbV9qaXQuYnJhbmNoU3RydWN0dXJlUHRyKApAQCAtMzQyMiw3ICszNDIwLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAKICAgICAgICAg
b3AxLnVzZSgpOwogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYWxyZWFk
eVByaW1pdGl2ZSA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
b3AxR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBhbHJlYWR5UHJpbWl0aXZlID0gYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyhvcDFH
UFIpKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90UHJpbWl0aXZlID0gbV9qaXQu
YnJhbmNoU3RydWN0dXJlUHRyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgCkBAIC0zNDUwLDggKzM0NDgsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGRvbmU7CiAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKSAmIFNwZWNTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBzbG93UGF0aDEgPSBtX2ppdC5icmFuY2hUZXN0NjQoCi0gICAgICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpOb25aZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7
CisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGgxID0gYnJhbmNoTm90
Q2VsbChKU1ZhbHVlUmVncyhvcDFHUFIpKTsKICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBzbG93UGF0aDIgPSBtX2ppdC5icmFuY2hTdHJ1Y3R1cmVQdHIoCiAgICAgICAgICAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKICAgICAgICAgICAgICAgICAgICAgSklUQ29t
cGlsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLApAQCAt
MzgxMCw4ICszODA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CiAgICAgICAgIAogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaFRlc3Q2NCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCB0aGlzVmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3ModGhpc1ZhbHVlR1BS
KSkpOwogICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDgoCiAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyh0aGlzVmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLApAQCAt
NDAwOCw3ICs0MDA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICAKICAgICAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgIAotICAgICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21w
aWxlcjo6Tm9uWmVybywgYmFzZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKEpTVmFsdWVS
ZWdzKGJhc2VHUFIpKTsKICAgICAgICAgCiAgICAgICAgICAgICBjYWNoZWRHZXRCeUlkKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYywgYmFzZUdQUiwgcmVzdWx0R1BSLCBub2RlLT5pZGVudGlmaWVyTnVt
YmVyKCksIG5vdENlbGwpOwogICAgICAgICAKQEAgLTQwNTgsNyArNDA1NCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJhc2UudXNlKCk7
CiAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAgICAKLSAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6
Ok5vblplcm8sIGJhc2VHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsID0gYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyhi
YXNlR1BSKSk7CiAgICAgICAgIAogICAgICAgICAgICAgY2FjaGVkR2V0QnlJZChub2RlLT5vcmln
aW4uc2VtYW50aWMsIGJhc2VHUFIsIHJlc3VsdEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigp
LCBub3RDZWxsLCBEb250U3BpbGwpOwogICAgICAgICAKQEAgLTQzODksNyArNDM4NSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlbW90ZUdsb2JhbE9iamVjdCh0aGlzKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7CiAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNDZWxsID0gbV9qaXQuYnJh
bmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCB2YWx1ZS5ncHIoKSwgR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNDZWxsID0gYnJhbmNoSXND
ZWxsKHZhbHVlLmpzVmFsdWVSZWdzKCkpOwogCiAgICAgICAgIG1faml0LmNvbXBhcmU2NChKSVRD
b21waWxlcjo6RXF1YWwsIHZhbHVlLmdwcigpLCBUcnVzdGVkSW1tMzIoVmFsdWVVbmRlZmluZWQp
LCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQu
anVtcCgpOwpAQCAtNDQ0OSw3ICs0NDQ1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVl
KTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1faml0
LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgdmFsdWUuZ3ByKCksIEdQUkluZm86
OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9
IGJyYW5jaE5vdENlbGwodmFsdWUuanNWYWx1ZVJlZ3MoKSk7CiAgICAgICAgIAogICAgICAgICBt
X2ppdC5jb21wYXJlOChKSVRDb21waWxlcjo6RXF1YWwsIAogICAgICAgICAgICAgSklUQ29tcGls
ZXI6OkFkZHJlc3ModmFsdWUuZ3ByKCksIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCAK
QEAgLTQ1MDEsNyArNDQ5Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkg
PT0gVW50eXBlZFVzZSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSB8fCBu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKTsKIAotICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5v
blplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSk7CiAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0gVW50eXBlZFVz
ZSkKICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKEpTVmFsdWVTb3VyY2UodmFsdWVHUFIpLCBu
b2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwsIGlzTm90Q2VsbCk7CiAKQEAgLTUwNTYsOCArNTA1Miw4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcKIHsKICAgICBKSVRD
b21waWxlcjo6SnVtcCBpc05vdENlbGw7CiAgICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5u
b2RlKCkpKQotICAgICAgICBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGls
ZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotCisgICAg
ICAgIGlzTm90Q2VsbCA9IGJyYW5jaE5vdENlbGwoSlNWYWx1ZVJlZ3ModmFsdWVHUFIpKTsKKyAg
ICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBvd25lck5vdE1hcmtlZE9yQWxyZWFkeVJlbWVtYmVy
ZWQgPSBtX2ppdC5jaGVja01hcmtCeXRlKG93bmVyR1BSKTsKICAgICBzdG9yZVRvV3JpdGVCYXJy
aWVyQnVmZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOwogICAgIG93bmVyTm90TWFy
a2VkT3JBbHJlYWR5UmVtZW1iZXJlZC5saW5rKCZtX2ppdCk7CkBAIC01MDcwLDggKzUwNjYsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoSlNDZWxsCiB7CiAgICAgSklUQ29t
cGlsZXI6Okp1bXAgaXNOb3RDZWxsOwogICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9k
ZSgpKSkKLSAgICAgICAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVy
OjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLQorICAgICAg
ICBpc05vdENlbGwgPSBicmFuY2hOb3RDZWxsKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSk7CisgICAg
CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgb3duZXJOb3RNYXJrZWRPckFscmVhZHlSZW1lbWJlcmVk
ID0gbV9qaXQuY2hlY2tNYXJrQnl0ZShvd25lcik7CiAgICAgc3RvcmVUb1dyaXRlQmFycmllckJ1
ZmZlcihvd25lciwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKICAgICBvd25lck5vdE1hcmtlZE9yQWxy
ZWFkeVJlbWVtYmVyZWQubGluaygmbV9qaXQpOwpAQCAtNTA4MSw2ICs1MDc3LDQ5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihKU0NlbGwKIH0KICNlbmRpZiAvLyBFTkFCTEUo
R0dDKQogCitKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoSXNDZWxsKEpT
VmFsdWVSZWdzIHJlZ3MpCit7CisgICAgcmV0dXJuIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fz
c2VtYmxlcjo6WmVybywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKK30K
KworSklUQ29tcGlsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6OmJyYW5jaE5vdENlbGwoSlNWYWx1
ZVJlZ3MgcmVncykKK3sKKyAgICByZXR1cm4gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCByZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworfQor
CitKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoSXNPdGhlcihKU1ZhbHVl
UmVncyByZWdzLCBHUFJSZWcgdGVtcEdQUikKK3sKKyAgICBtX2ppdC5tb3ZlKHJlZ3MuZ3ByKCks
IHRlbXBHUFIpOworICAgIG1faml0LmFuZDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
flRhZ0JpdFVuZGVmaW5lZCksIHRlbXBHUFIpOworICAgIHJldHVybiBtX2ppdC5icmFuY2g2NCgK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB0ZW1wR1BSLAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpOworfQorCitKSVRDb21waWxlcjo6SnVt
cCBTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoTm90T3RoZXIoSlNWYWx1ZVJlZ3MgcmVncywgR1BSUmVn
IHRlbXBHUFIpCit7CisgICAgbV9qaXQubW92ZShyZWdzLmdwcigpLCB0ZW1wR1BSKTsKKyAgICBt
X2ppdC5hbmQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQp
LCB0ZW1wR1BSKTsKKyAgICByZXR1cm4gbV9qaXQuYnJhbmNoNjQoCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW02NChWYWx1ZU51bGwpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bW92ZVRydWVU
byhHUFJSZWcgZ3ByKQoreworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKFZhbHVlVHJ1ZSks
IGdwcik7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om1vdmVGYWxzZVRvKEdQUlJlZyBncHIp
Cit7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIGdwcik7Cit9CisK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJsZXNzQm9vbGVhbihHUFJSZWcgZ3ByKQoreworICAgIG1f
aml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCBncHIpOworfQorCiAjZW5kaWYKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE2NTc5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04ODYsMTMgKzg4Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbihOb2Rl
KiBub2QKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoLnJlbGVhc2Uo
KSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBiYXNlLnVzZSgpOwotICAgICAgICAg
ICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KAot
ICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNl
Q2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLSNlbHNlCi0gICAgICAgICAgICBib29sZWFuUmVz
dWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLSNlbmRp
ZgorICAgICAgICAgICAgCisgICAgICAgICAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRH
UFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICB9CkBAIC05MTAsMTEgKzkwNSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVJbihOb2RlKiBub2QKICAgICBjYWxsT3BlcmF0aW9uKAogICAgICAgICBv
cGVyYXRpb25HZW5lcmljSW4sIGV4dHJhY3RSZXN1bHQoSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5
KHJlc3VsdEdQUikpLAogICAgICAgICBiYXNlR1BSLCByZWdzKTsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFu
LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotI2Vsc2UKLSAgICBib29sZWFuUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLSNlbmRpZgor
ICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxs
ZWRFeHBsaWNpdGx5KTsKIH0KIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVD
b21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmQsIFNfSklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKQEAgLTE5MzksOSArMTkzMCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKICAgICAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBpc051bWJlciA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAotICAg
ICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhncHIpLCBub2RlLT5jaGlsZDEoKSwgflNwZWND
ZWxsLAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVn
aXN0ZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZS0+Y2hp
bGQxKCksIH5TcGVjQ2VsbCwgYnJhbmNoSXNDZWxsKEpTVmFsdWVSZWdzKGdwcikpKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhIGNlbGw6IHNvIHRydWUg
dHVybnMgaW50byAxIGFuZCBhbGwgZWxzZSB0dXJucyBpbnRvIDAuCiAgICAgICAgICAgICAgICAg
bV9qaXQuY29tcGFyZTY0KEpJVENvbXBpbGVyOjpFcXVhbCwgZ3ByLCBUcnVzdGVkSW1tMzIoVmFs
dWVUcnVlKSwgcmVzdWx0R3ByKTsKQEAgLTE5ODgsNyArMTk3Nyw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKIAogICAgICAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkgPT0gTnVtYmVyVXNlKSB7CiAgICAgICAgICAgICAgICAgICAgIERG
R19UWVBFX0NIRUNLKAotICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3ModGFnR1BS
LCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNGdWxsTnVtYmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgcDEuanNWYWx1ZVJlZ3MoKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNGdWxs
TnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdGFnR1BS
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dl
c3RUYWcpKSk7CkBAIC0xOTk2LDkgKzE5ODUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlVmFsdWVUb0ludDMyCiAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
TnVtYmVyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCB0YWdHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKTsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKAotICAgICAgICAgICAgICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIH5TcGVj
Q2VsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wMS5qc1Zh
bHVlUmVncygpLCBub2RlLT5jaGlsZDEoKSwgflNwZWNDZWxsLAorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJhbmNoSXNDZWxsKG9wMS5qc1ZhbHVlUmVncygpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhIGNlbGw6IHNvIHRydWUgdHVy
bnMgaW50byAxIGFuZCBhbGwgZWxzZSB0dXJucyBpbnRvIDAuCiAgICAgICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGlzQm9vbGVhbiA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVy
OjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpOwpAQCAt
MjU0MiwxNCArMjUzMCwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VP
ZkZvCiAgICAgLy8gV2FsayB1cCB0aGUgcHJvdG90eXBlIGNoYWluIG9mIHRoZSB2YWx1ZSAoaW4g
c2NyYXRjaFJlZyksIGNvbXBhcmluZyB0byBwcm90b3R5cGVSZWcuCiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIGxvb3AoJm1faml0KTsKICAgICBtX2ppdC5lbWl0TG9hZFN0cnVjdHVyZShzY3Jh
dGNoUmVnLCBzY3JhdGNoUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNl
dCgpICsgQ2VsbFBheWxvYWRPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBpc0luc3RhbmNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgc2NyYXRjaFJlZywgcHJvdG90eXBlUmVnKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1f
aml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBTdHJ1Y3R1cmU6
OnByb3RvdHlwZU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgaXNJbnN0YW5jZSA9IG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2Ny
YXRjaFJlZywgcHJvdG90eXBlUmVnKTsKLSAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIHNjcmF0Y2hSZWcsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikubGlua1Rv
KGxvb3AsICZtX2ppdCk7CisgICAgYnJhbmNoSXNDZWxsKEpTVmFsdWVSZWdzKHNjcmF0Y2hSZWcp
KS5saW5rVG8obG9vcCwgJm1faml0KTsKICNlbHNlCi0gICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkg
KyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCBzY3JhdGNoUmVn
KTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0luc3RhbmNlID0gbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaFJlZywgcHJvdG90eXBlUmVnKTsKLSAgICBt
X2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2hSZWcpLmxp
bmtUbyhsb29wLCAmbV9qaXQpOworICAgIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIHNjcmF0Y2hSZWcpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwogI2VuZGlmCiAg
ICAgCiAgICAgLy8gTm8gbWF0Y2ggLSByZXN1bHQgaXMgZmFsc2UuCkBAIC0yNTg2LDE2ICsyNTcy
LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2YoTgogICAgICAgICBH
UFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNo
MlJlZyA9IHNjcmF0Y2gyLmdwcigpOwogICAgICAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
ICAgICBHUFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgaXNDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCB2YWx1ZVJlZywgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAgICAgICAgbV9qaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
ZmFsc2UpKSksIHNjcmF0Y2hSZWcpOwotI2Vsc2UKLSAgICAgICAgR1BSUmVnIHZhbHVlVGFnUmVn
ID0gdmFsdWUudGFnR1BSKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLnBheWxv
YWRHUFIoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNDZWxsID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZVRhZ1JlZywgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpKTsKLSAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDApLCBzY3JhdGNoUmVnKTsKLSNlbmRpZgorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBpc0NlbGwgPSBicmFuY2hJc0NlbGwodmFsdWUuanNWYWx1ZVJlZ3MoKSk7CisgICAg
ICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmpzVmFsdWVSZWdzKCkucGF5bG9hZEdQUigpOwor
ICAgICAgICBtb3ZlRmFsc2VUbyhzY3JhdGNoUmVnKTsKIAogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKQEAgLTI2MDUsMTEgKzI1ODQs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZihOCiAgICAgICAgIAog
ICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
IGpzVmFsdWVSZXN1bHQoc2NyYXRjaFJlZywgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Ci0j
ZWxzZQotICAgICAgICBib29sZWFuUmVzdWx0KHNjcmF0Y2hSZWcsIG5vZGUpOwotI2VuZGlmCisg
ICAgICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0KHNjcmF0Y2hSZWcsIG5vZGUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIApAQCAtMjYyNiwxMSArMjYwMSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mKE4KICAgICAKICAgICBjb21waWxlSW5zdGFuY2VPZkZv
ck9iamVjdChub2RlLCB2YWx1ZVJlZywgcHJvdG90eXBlUmVnLCBzY3JhdGNoUmVnLCBzY3JhdGNo
MlJlZyk7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGpzVmFsdWVSZXN1bHQoc2NyYXRjaFJl
Zywgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Ci0jZWxzZQotICAgIGJvb2xlYW5SZXN1bHQo
c2NyYXRjaFJlZywgbm9kZSk7Ci0jZW5kaWYKKyAgICBibGVzc2VkQm9vbGVhblJlc3VsdChzY3Jh
dGNoUmVnLCBub2RlKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2Rl
KiBub2RlKQpAQCAtMzczMSw2ICszNzAyLDI2IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVTdHJpY3RFcShOb2QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKKyAgICBp
ZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKFN0cmluZ0lkZW50VXNlLCBOb3RTdHJpbmdWYXJVc2Up
KSB7CisgICAgICAgIGNvbXBpbGVTdHJpbmdJZGVudFRvTm90U3RyaW5nVmFyRXF1YWxpdHkobm9k
ZSwgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKE5vdFN0cmluZ1Zh
clVzZSwgU3RyaW5nSWRlbnRVc2UpKSB7CisgICAgICAgIGNvbXBpbGVTdHJpbmdJZGVudFRvTm90
U3RyaW5nVmFyRXF1YWxpdHkobm9kZSwgbm9kZS0+Y2hpbGQyKCksIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAobm9kZS0+aXNCaW5h
cnlVc2VLaW5kKFN0cmluZ1VzZSwgVW50eXBlZFVzZSkpIHsKKyAgICAgICAgY29tcGlsZVN0cmlu
Z1RvVW50eXBlZEVxdWFsaXR5KG5vZGUsIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKG5vZGUtPmlzQmlu
YXJ5VXNlS2luZChVbnR5cGVkVXNlLCBTdHJpbmdVc2UpKSB7CisgICAgICAgIGNvbXBpbGVTdHJp
bmdUb1VudHlwZWRFcXVhbGl0eShub2RlLCBub2RlLT5jaGlsZDIoKSwgbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAogICAgIFJFTEVBU0VfQVNTRVJU
KG5vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSk7CiAgICAgcmV0dXJuIG5vblNwZWN1
bGF0aXZlU3RyaWN0RXEobm9kZSk7CiB9CkBAIC0zNzQzLDQ0ICszNzM0LDIwIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVCb29sZWFuQ29tcGEKICAgICAKICAgICBtX2ppdC5jb21wYXJl
MzIoY29uZGl0aW9uLCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAK
LSAgICAvLyBJZiB3ZSBhZGQgYSBEYXRhRm9ybWF0Qm9vbCwgd2Ugc2hvdWxkIHVzZSBpdCBoZXJl
LgotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgYm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCks
IG5vZGUpOwotI2Vsc2UKLSAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwg
cmVzdWx0LmdwcigpKTsKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jdXJyZW50
Tm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Ci0jZW5kaWYKKyAgICB1bmJsZXNzZWRCb29sZWFu
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVTdHJpbmdFcXVhbGl0eShOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVN0cmluZ0VxdWFsaXR5KAorICAgIE5vZGUqIG5vZGUsIEdQUlJlZyBsZWZ0R1BSLCBHUFJS
ZWcgcmlnaHRHUFIsIEdQUlJlZyBsZW5ndGhHUFIsIEdQUlJlZyBsZWZ0VGVtcEdQUiwKKyAgICBH
UFJSZWcgcmlnaHRUZW1wR1BSLCBHUFJSZWcgbGVmdFRlbXAyR1BSLCBHUFJSZWcgcmlnaHRUZW1w
MkdQUiwKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZmFzdFRydWUsIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBmYXN0RmFsc2UpCiB7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgbGVmdCh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcmlnaHQodGhpcywg
bm9kZS0+Y2hpbGQyKCkpOwotICAgIEdQUlRlbXBvcmFyeSBsZW5ndGgodGhpcyk7Ci0gICAgR1BS
VGVtcG9yYXJ5IGxlZnRUZW1wKHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSByaWdodFRlbXAodGhp
cyk7Ci0gICAgR1BSVGVtcG9yYXJ5IGxlZnRUZW1wMih0aGlzLCBSZXVzZSwgbGVmdCk7Ci0gICAg
R1BSVGVtcG9yYXJ5IHJpZ2h0VGVtcDIodGhpcywgUmV1c2UsIHJpZ2h0KTsKLSAgICAKLSAgICBH
UFJSZWcgbGVmdEdQUiA9IGxlZnQuZ3ByKCk7Ci0gICAgR1BSUmVnIHJpZ2h0R1BSID0gcmlnaHQu
Z3ByKCk7Ci0gICAgR1BSUmVnIGxlbmd0aEdQUiA9IGxlbmd0aC5ncHIoKTsKLSAgICBHUFJSZWcg
bGVmdFRlbXBHUFIgPSBsZWZ0VGVtcC5ncHIoKTsKLSAgICBHUFJSZWcgcmlnaHRUZW1wR1BSID0g
cmlnaHRUZW1wLmdwcigpOwotICAgIEdQUlJlZyBsZWZ0VGVtcDJHUFIgPSBsZWZ0VGVtcDIuZ3By
KCk7Ci0gICAgR1BSUmVnIHJpZ2h0VGVtcDJHUFIgPSByaWdodFRlbXAyLmdwcigpOwotICAgIAog
ICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCB0cnVlQ2FzZTsKICAgICBKSVRDb21waWxlcjo6SnVt
cExpc3QgZmFsc2VDYXNlOwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZTsKICAg
ICAKLSAgICBzcGVjdWxhdGVTdHJpbmcobm9kZS0+Y2hpbGQxKCksIGxlZnRHUFIpOwotICAgIAot
ICAgIC8vIEl0J3Mgc2FmZSB0byBicmFuY2ggYXJvdW5kIHRoZSB0eXBlIGNoZWNrIGJlbG93LCBz
aW5jZSBwcm92aW5nIHRoYXQgdGhlIHZhbHVlcyBhcmUKLSAgICAvLyBlcXVhbCBkb2VzIGluZGVl
ZCBwcm92ZSB0aGF0IHRoZSByaWdodCB2YWx1ZSBpcyBhIHN0cmluZy4KLSAgICB0cnVlQ2FzZS5h
cHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgbGVmdEdQUiwgcmln
aHRHUFIpKTsKLSAgICAKLSAgICBzcGVjdWxhdGVTdHJpbmcobm9kZS0+Y2hpbGQyKCksIHJpZ2h0
R1BSKTsKKyAgICB0cnVlQ2FzZS5hcHBlbmQoZmFzdFRydWUpOworICAgIGZhbHNlQ2FzZS5hcHBl
bmQoZmFzdEZhbHNlKTsKIAogICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhsZWZ0R1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIGxlbmd0aEdQUik7CiAgICAg
CkBAIC0zODIyLDQ4ICszNzg5LDEwNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3Ry
aW5nRXF1YWxpCiAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCBsZW5ndGhHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOwogICAgIAogICAgIHRydWVDYXNlLmxp
bmsoJm1faml0KTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTY0KFZhbHVlVHJ1ZSksIGxlZnRUZW1wR1BSKTsKLSNlbHNlCi0gICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tMzIodHJ1ZSksIGxlZnRUZW1wR1BSKTsKLSNlbmRpZgorICAgIG1vdmVUcnVlVG8obGVm
dFRlbXBHUFIpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1w
KCk7CiAKICAgICBmYWxzZUNhc2UubGluaygmbV9qaXQpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoVmFsdWVGYWxzZSksIGxlZnRUZW1wR1BSKTsKLSNl
bHNlCi0gICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoZmFsc2UpLCBsZWZ0VGVtcEdQUik7Ci0j
ZW5kaWYKKyAgICBtb3ZlRmFsc2VUbyhsZWZ0VGVtcEdQUik7CiAgICAgCiAgICAgZG9uZS5saW5r
KCZtX2ppdCk7CiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQYXRoQ2Fs
bCgKICAgICAgICAgICAgIHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEs
IGxlZnRUZW1wR1BSLCBsZWZ0R1BSLCByaWdodEdQUikpOwogICAgIAotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAganNWYWx1ZVJlc3VsdChsZWZ0VGVtcEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9v
bGVhbik7Ci0jZWxzZQotICAgIGJvb2xlYW5SZXN1bHQobGVmdFRlbXBHUFIsIG5vZGUpOwotI2Vu
ZGlmCisgICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQobGVmdFRlbXBHUFIsIG5vZGUpOwogfQogCi12
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5nSWRlbnRFcXVhbGl0eShOb2RlKiBub2Rl
KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ0VxdWFsaXR5KE5vZGUqIG5vZGUp
CiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgbGVmdCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcmlnaHQodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwor
ICAgIEdQUlRlbXBvcmFyeSBsZW5ndGgodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IGxlZnRUZW1w
KHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSByaWdodFRlbXAodGhpcyk7CisgICAgR1BSVGVtcG9y
YXJ5IGxlZnRUZW1wMih0aGlzLCBSZXVzZSwgbGVmdCk7CisgICAgR1BSVGVtcG9yYXJ5IHJpZ2h0
VGVtcDIodGhpcywgUmV1c2UsIHJpZ2h0KTsKICAgICAKICAgICBHUFJSZWcgbGVmdEdQUiA9IGxl
ZnQuZ3ByKCk7CiAgICAgR1BSUmVnIHJpZ2h0R1BSID0gcmlnaHQuZ3ByKCk7CisgICAgR1BSUmVn
IGxlbmd0aEdQUiA9IGxlbmd0aC5ncHIoKTsKICAgICBHUFJSZWcgbGVmdFRlbXBHUFIgPSBsZWZ0
VGVtcC5ncHIoKTsKICAgICBHUFJSZWcgcmlnaHRUZW1wR1BSID0gcmlnaHRUZW1wLmdwcigpOwor
ICAgIEdQUlJlZyBsZWZ0VGVtcDJHUFIgPSBsZWZ0VGVtcDIuZ3ByKCk7CisgICAgR1BSUmVnIHJp
Z2h0VGVtcDJHUFIgPSByaWdodFRlbXAyLmdwcigpOworICAgIAorICAgIHNwZWN1bGF0ZVN0cmlu
Zyhub2RlLT5jaGlsZDEoKSwgbGVmdEdQUik7CisgICAgCisgICAgLy8gSXQncyBzYWZlIHRvIGJy
YW5jaCBhcm91bmQgdGhlIHR5cGUgY2hlY2sgYmVsb3csIHNpbmNlIHByb3ZpbmcgdGhhdCB0aGUg
dmFsdWVzIGFyZQorICAgIC8vIGVxdWFsIGRvZXMgaW5kZWVkIHByb3ZlIHRoYXQgdGhlIHJpZ2h0
IHZhbHVlIGlzIGEgc3RyaW5nLgorICAgIEpJVENvbXBpbGVyOjpKdW1wIGZhc3RUcnVlID0gbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgbGVmdEdQUiwgcmlnaHRHUFIpOwor
ICAgIAorICAgIHNwZWN1bGF0ZVN0cmluZyhub2RlLT5jaGlsZDIoKSwgcmlnaHRHUFIpOworICAg
IAorICAgIGNvbXBpbGVTdHJpbmdFcXVhbGl0eSgKKyAgICAgICAgbm9kZSwgbGVmdEdQUiwgcmln
aHRHUFIsIGxlbmd0aEdQUiwgbGVmdFRlbXBHUFIsIHJpZ2h0VGVtcEdQUiwgbGVmdFRlbXAyR1BS
LAorICAgICAgICByaWdodFRlbXAyR1BSLCBmYXN0VHJ1ZSwgSklUQ29tcGlsZXI6Okp1bXAoKSk7
Cit9CiAKLSAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgdHJ1ZUNhc2U7Ci0gICAgSklUQ29tcGls
ZXI6Okp1bXBMaXN0IGZhbHNlQ2FzZTsKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJp
bmdUb1VudHlwZWRFcXVhbGl0eShOb2RlKiBub2RlLCBFZGdlIHN0cmluZ0VkZ2UsIEVkZ2UgdW50
eXBlZEVkZ2UpCit7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgbGVmdCh0aGlzLCBzdHJpbmdF
ZGdlKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCByaWdodCh0aGlzLCB1bnR5cGVkRWRnZSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICBHUFJUZW1wb3JhcnkgbGVuZ3RoKHRoaXMpOworICAg
IEdQUlRlbXBvcmFyeSBsZWZ0VGVtcCh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgcmlnaHRUZW1w
KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBsZWZ0VGVtcDIodGhpcywgUmV1c2UsIGxlZnQpOwor
ICAgIEdQUlRlbXBvcmFyeSByaWdodFRlbXAyKHRoaXMsIFJldXNlLCByaWdodCk7CisgICAgCisg
ICAgR1BSUmVnIGxlZnRHUFIgPSBsZWZ0LmdwcigpOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
cyA9IHJpZ2h0LmpzVmFsdWVSZWdzKCk7CisgICAgR1BSUmVnIGxlbmd0aEdQUiA9IGxlbmd0aC5n
cHIoKTsKKyAgICBHUFJSZWcgbGVmdFRlbXBHUFIgPSBsZWZ0VGVtcC5ncHIoKTsKKyAgICBHUFJS
ZWcgcmlnaHRUZW1wR1BSID0gcmlnaHRUZW1wLmdwcigpOworICAgIEdQUlJlZyBsZWZ0VGVtcDJH
UFIgPSBsZWZ0VGVtcDIuZ3ByKCk7CisgICAgR1BSUmVnIHJpZ2h0VGVtcDJHUFIgPSByaWdodFRl
bXAyLmdwcigpOworICAgIAorICAgIHNwZWN1bGF0ZVN0cmluZyhzdHJpbmdFZGdlLCBsZWZ0R1BS
KTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZmFzdFRydWU7CisgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IGZhc3RTbG93OworICAgIAorICAgIGZhc3RTbG93LmFwcGVuZChicmFu
Y2hOb3RDZWxsKHJpZ2h0UmVncykpOworICAgIAorICAgIC8vIEl0J3Mgc2FmZSB0byBicmFuY2gg
YXJvdW5kIHRoZSB0eXBlIGNoZWNrIGJlbG93LCBzaW5jZSBwcm92aW5nIHRoYXQgdGhlIHZhbHVl
cyBhcmUKKyAgICAvLyBlcXVhbCBkb2VzIGluZGVlZCBwcm92ZSB0aGF0IHRoZSByaWdodCB2YWx1
ZSBpcyBhIHN0cmluZy4KKyAgICBmYXN0VHJ1ZS5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKAorICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGxlZnRHUFIsIHJpZ2h0UmVncy5wYXlsb2FkR1BS
KCkpKTsKICAgICAKKyAgICBmYXN0U2xvdy5hcHBlbmQobV9qaXQuYnJhbmNoU3RydWN0dXJlUHRy
KAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIAorICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyaWdodFJlZ3MucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCAKKyAgICAgICAgbV9qaXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7
CisgICAgCisgICAgY29tcGlsZVN0cmluZ0VxdWFsaXR5KAorICAgICAgICBub2RlLCBsZWZ0R1BS
LCByaWdodFJlZ3MucGF5bG9hZEdQUigpLCBsZW5ndGhHUFIsIGxlZnRUZW1wR1BSLCByaWdodFRl
bXBHUFIsIGxlZnRUZW1wMkdQUiwKKyAgICAgICAgcmlnaHRUZW1wMkdQUiwgZmFzdFRydWUsIGZh
c3RTbG93KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ0lkZW50RXF1
YWxpdHkoTm9kZSogbm9kZSkKK3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBsZWZ0KHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCByaWdodCh0aGlzLCBu
b2RlLT5jaGlsZDIoKSk7CisgICAgR1BSVGVtcG9yYXJ5IGxlZnRUZW1wKHRoaXMpOworICAgIEdQ
UlRlbXBvcmFyeSByaWdodFRlbXAodGhpcyk7CisgICAgCisgICAgR1BSUmVnIGxlZnRHUFIgPSBs
ZWZ0LmdwcigpOworICAgIEdQUlJlZyByaWdodEdQUiA9IHJpZ2h0LmdwcigpOworICAgIEdQUlJl
ZyBsZWZ0VGVtcEdQUiA9IGxlZnRUZW1wLmdwcigpOworICAgIEdQUlJlZyByaWdodFRlbXBHUFIg
PSByaWdodFRlbXAuZ3ByKCk7CisKICAgICBzcGVjdWxhdGVTdHJpbmcobm9kZS0+Y2hpbGQxKCks
IGxlZnRHUFIpOwogICAgIHNwZWN1bGF0ZVN0cmluZyhub2RlLT5jaGlsZDIoKSwgcmlnaHRHUFIp
OwogICAgIApAQCAtMzg3MiwxMiArMzg5NSwzOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlU3RyaW5nSWRlbnRFCiAgICAgCiAgICAgbV9qaXQuY29tcGFyZVB0cihNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsIGxlZnRUZW1wR1BSLCByaWdodFRlbXBHUFIsIGxlZnRUZW1wR1BSKTsKICAgICAK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFs
c2UpLCBsZWZ0VGVtcEdQUik7Ci0gICAganNWYWx1ZVJlc3VsdChsZWZ0VGVtcEdQUiwgbm9kZSwg
RGF0YUZvcm1hdEpTQm9vbGVhbik7Ci0jZWxzZQotICAgIGJvb2xlYW5SZXN1bHQobGVmdFRlbXBH
UFIsIG5vZGUpOwotI2VuZGlmCisgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChsZWZ0VGVtcEdQ
Uiwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpbmdJZGVudFRv
Tm90U3RyaW5nVmFyRXF1YWxpdHkoCisgICAgTm9kZSogbm9kZSwgRWRnZSBzdHJpbmdFZGdlLCBF
ZGdlIG5vdFN0cmluZ1ZhckVkZ2UpCit7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgbGVmdCh0
aGlzLCBzdHJpbmdFZGdlKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCByaWdodCh0aGlzLCBub3RTdHJp
bmdWYXJFZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEdQUlRlbXBvcmFyeSBs
ZWZ0VGVtcCh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgcmlnaHRUZW1wKHRoaXMpOworICAgIEdQ
UlJlZyBsZWZ0VGVtcEdQUiA9IGxlZnRUZW1wLmdwcigpOworICAgIEdQUlJlZyByaWdodFRlbXBH
UFIgPSByaWdodFRlbXAuZ3ByKCk7CisgICAgR1BSUmVnIGxlZnRHUFIgPSBsZWZ0LmdwcigpOwor
ICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IHJpZ2h0LmpzVmFsdWVSZWdzKCk7CisgICAgCisg
ICAgc3BlY3VsYXRlU3RyaW5nKHN0cmluZ0VkZ2UsIGxlZnRHUFIpOworICAgIHNwZWN1bGF0ZVN0
cmluZ0lkZW50QW5kTG9hZFN0b3JhZ2Uoc3RyaW5nRWRnZSwgbGVmdEdQUiwgbGVmdFRlbXBHUFIp
OworCisgICAgbW92ZUZhbHNlVG8ocmlnaHRUZW1wR1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVt
cExpc3Qgbm90U3RyaW5nOworICAgIG5vdFN0cmluZy5hcHBlbmQoYnJhbmNoTm90Q2VsbChyaWdo
dFJlZ3MpKTsKKyAgICBub3RTdHJpbmcuYXBwZW5kKG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCAKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MocmlnaHRSZWdzLnBheWxvYWRHUFIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgCisgICAgICAgIG1faml0LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwor
ICAgIAorICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50QW5kTG9hZFN0b3JhZ2Uobm90U3RyaW5nVmFy
RWRnZSwgcmlnaHRSZWdzLnBheWxvYWRHUFIoKSwgcmlnaHRUZW1wR1BSKTsKKyAgICAKKyAgICBt
X2ppdC5jb21wYXJlUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgbGVmdFRlbXBHUFIsIHJpZ2h0
VGVtcEdQUiwgcmlnaHRUZW1wR1BSKTsKKyAgICBub3RTdHJpbmcubGluaygmbV9qaXQpOworICAg
IAorICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmlnaHRUZW1wR1BSLCBub2RlKTsKIH0KIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmluZ1plcm9MZW5ndGgoTm9kZSogbm9kZSkK
QEAgLTM4OTQsMTIgKzM5NDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaW5n
WmVyb0xlCiAgICAgLy8gRmV0Y2ggdGhlIGxlbmd0aCBmaWVsZCBmcm9tIHRoZSBzdHJpbmcgb2Jq
ZWN0LgogICAgIG1faml0LnRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RyR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoLTEpLCBlcUdQUik7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCBlcUdQUik7Ci0gICAganNW
YWx1ZVJlc3VsdChlcUdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Ci0jZWxzZQotICAg
IGJvb2xlYW5SZXN1bHQoZXFHUFIsIG5vZGUpOwotI2VuZGlmCisgICAgdW5ibGVzc2VkQm9vbGVh
blJlc3VsdChlcUdQUiwgbm9kZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
b25zdGFudFN0b3JhZ2VQb2ludGVyKE5vZGUqIG5vZGUpCkBAIC00NTU5LDU4ICs0NjAzLDI4IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdE9yT3QKICAgICBKU1ZhbHVlT3Bl
cmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAg
R1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigp
OwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgR1BSUmVnIGdwciA9IG9wZXJhbmQuZ3ByKCk7Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NCgKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gYnJhbmNoTm90Q2VsbChv
cGVyYW5kLmpzVmFsdWVSZWdzKCkpOworICAgIEdQUlJlZyBncHIgPSBvcGVyYW5kLmpzVmFsdWVS
ZWdzKCkucGF5bG9hZEdQUigpOwogICAgIERGR19UWVBFX0NIRUNLKAotICAgICAgICBKU1ZhbHVl
UmVncyhncHIpLCBlZGdlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFN0
cnVjdHVyZVB0cigKKyAgICAgICAgb3BlcmFuZC5qc1ZhbHVlUmVncygpLCBlZGdlLCAoflNwZWND
ZWxsKSB8IFNwZWNPYmplY3QsIG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhncHIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAogICAgICAgICAgICAgbV9q
aXQudm0oKS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAgICBp
ZiAobmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIpKSB7Ci0gICAgICAg
IG1faml0Lm1vdmUoZ3ByLCB0ZW1wR1BSKTsKLSAgICAgICAgbV9qaXQuYW5kNjQoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgdGVtcEdQUik7Ci0gICAgICAg
IAogICAgICAgICB0eXBlQ2hlY2soCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyhncHIpLCBlZGdl
LCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwKLSAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFZhbHVlTnVsbCkpKTsKKyAgICAg
ICAgICAgIG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIs
CisgICAgICAgICAgICBicmFuY2hOb3RPdGhlcihvcGVyYW5kLmpzVmFsdWVSZWdzKCksIHRlbXBH
UFIpKTsKICAgICB9CiAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0jZWxzZQotICAgIEdQUlJlZyB0
YWdHUFIgPSBvcGVyYW5kLnRhZ0dQUigpOwotICAgIEdQUlJlZyBwYXlsb2FkR1BSID0gb3BlcmFu
ZC5wYXlsb2FkR1BSKCk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9Ci0gICAg
ICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotICAgIERGR19UWVBFX0NIRUNLKAotICAgICAg
ICBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBlZGdlLCAoflNwZWNDZWxsKSB8IFNw
ZWNPYmplY3QsIG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwYXls
b2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIG1faml0
LnZtKCktPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7Ci0gICAgaWYg
KG5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyKSkgewotICAgICAgICBt
X2ppdC5tb3ZlKHRhZ0dQUiwgdGVtcEdQUik7Ci0gICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZElt
bTMyKDEpLCB0ZW1wR1BSKTsKLSAgICAgICAgCi0gICAgICAgIHR5cGVDaGVjaygKLSAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIGVkZ2UsIFNwZWNDZWxsIHwgU3Bl
Y090aGVyLAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLAotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpKTsKLSAgICB9Ci0gICAgZG9u
ZS5saW5rKCZtX2ppdCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlU3RyaW5nKEVkZ2UgZWRnZSwgR1BSUmVnIGNlbGwpCiB7CiAgICAgREZHX1RZUEVfQ0hFQ0so
Ci0gICAgICAgIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGNlbGwpLCBlZGdlLCBTcGVjU3Ry
aW5nLCBtX2ppdC5icmFuY2hTdHJ1Y3R1cmVQdHIoCisgICAgICAgIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKGNlbGwpLCBlZGdlLCBTcGVjU3RyaW5nIHwgflNwZWNDZWxsLAorICAgICAgICBt
X2ppdC5icmFuY2hTdHJ1Y3R1cmVQdHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbCwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCiAgICAgICAgICAgICBtX2ppdC52bSgpLT5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKTsKQEAgLTQ2MjAsNyArNDYzNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnNwZWN1bGF0ZVN0cmluZ0lkZW4KIHsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0cmluZywgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHN0b3JhZ2Up
OwogICAgIAotICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY1N0cmluZ0lkZW50KSkK
KyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNTdHJpbmdJZGVudCB8IH5TcGVjU3Ry
aW5nKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3BlY3VsYXRpb25DaGVjaygKQEAgLTQ2MzIs
NyArNDY0Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmluZ0lkZW4KICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2UsIFN0cmluZ0ltcGw6OmZs
YWdzT2Zmc2V0KCkpLAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihT
dHJpbmdJbXBsOjpmbGFnSXNJZGVudGlmaWVyKCkpKSk7CiAgICAgCi0gICAgbV9pbnRlcnByZXRl
ci5maWx0ZXIoZWRnZSwgU3BlY1N0cmluZ0lkZW50KTsKKyAgICBtX2ludGVycHJldGVyLmZpbHRl
cihlZGdlLCBTcGVjU3RyaW5nSWRlbnQgfCB+U3BlY1N0cmluZyk7CiB9CiAKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmluZ0lkZW50KEVkZ2UgZWRnZSwgR1BSUmVnIHN0cmluZykK
QEAgLTQ3MDksMjMgKzQ3MjMsMzMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3Ry
aW5nT3JTdAogICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKGVkZ2UsIFNwZWNTdHJpbmcgfCBTcGVj
U3RyaW5nT2JqZWN0KTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTm90U3Ry
aW5nVmFyKEVkZ2UgZWRnZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVk
Z2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhp
cyk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgIAorICAgIEpJVENvbXBp
bGVyOjpKdW1wIG5vdENlbGwgPSBicmFuY2hOb3RDZWxsKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSk7
CisgICAgR1BSUmVnIGNlbGwgPSBvcGVyYW5kLmpzVmFsdWVSZWdzKCkucGF5bG9hZEdQUigpOwor
ICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFN0cmluZyA9IG1faml0LmJyYW5jaFN0cnVj
dHVyZVB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLAor
ICAgICAgICBtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOworICAgIAorICAgIHNw
ZWN1bGF0ZVN0cmluZ0lkZW50QW5kTG9hZFN0b3JhZ2UoZWRnZSwgY2VsbCwgdGVtcEdQUik7Cisg
ICAgCisgICAgbm90U3RyaW5nLmxpbmsoJm1faml0KTsKKyAgICBub3RDZWxsLmxpbmsoJm1faml0
KTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTm90Q2VsbChFZGdlIGVkZ2Up
CiB7CiAgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCB+U3BlY0NlbGwpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlLCBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdHlwZUNoZWNr
KAotICAgICAgICBKU1ZhbHVlUmVncyhvcGVyYW5kLmdwcigpKSwgZWRnZSwgflNwZWNDZWxsLAot
ICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6WmVy
bywgb3BlcmFuZC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0jZWxzZQotICAg
IHR5cGVDaGVjaygKLSAgICAgICAgSlNWYWx1ZVJlZ3Mob3BlcmFuZC50YWdHUFIoKSwgb3BlcmFu
ZC5wYXlsb2FkR1BSKCkpLCBlZGdlLCB+U3BlY0NlbGwsCi0gICAgICAgIG1faml0LmJyYW5jaDMy
KAotICAgICAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFsLCBvcGVyYW5kLnRhZ0dQUigpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKLSNlbmRpZgorICAgIEpTVmFsdWVPcGVyYW5k
IG9wZXJhbmQodGhpcywgZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsgCisgICAgdHlw
ZUNoZWNrKG9wZXJhbmQuanNWYWx1ZVJlZ3MoKSwgZWRnZSwgflNwZWNDZWxsLCBicmFuY2hJc0Nl
bGwob3BlcmFuZC5qc1ZhbHVlUmVncygpKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0ZU90aGVyKEVkZ2UgZWRnZSkKQEAgLTQ3MzYsMjEgKzQ3NjAsOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGVPdGhlcihFZGdlCiAgICAgSlNWYWx1ZU9wZXJhbmQgb3BlcmFu
ZCh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgIEdQUlRlbXBvcmFy
eSB0ZW1wKHRoaXMpOwogICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIG1faml0Lm1vdmUob3BlcmFuZC5ncHIoKSwgdGVtcEdQUik7Ci0gICAg
bV9qaXQuYW5kNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVk
KSwgdGVtcEdQUik7CiAgICAgdHlwZUNoZWNrKAogICAgICAgICBKU1ZhbHVlUmVncyhvcGVyYW5k
LmdwcigpKSwgZWRnZSwgU3BlY090aGVyLAotICAgICAgICBtX2ppdC5icmFuY2g2NCgKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVmFsdWVOdWxsKSkpOwotI2Vsc2UKLSAgICBtX2pp
dC5tb3ZlKG9wZXJhbmQudGFnR1BSKCksIHRlbXBHUFIpOwotICAgIG1faml0Lm9yMzIoVHJ1c3Rl
ZEltbTMyKDEpLCB0ZW1wR1BSKTsKLSAgICB0eXBlQ2hlY2soCi0gICAgICAgIEpTVmFsdWVSZWdz
KG9wZXJhbmQudGFnR1BSKCksIG9wZXJhbmQucGF5bG9hZEdQUigpKSwgZWRnZSwgU3BlY090aGVy
LAotICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXBH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSkpOwotI2VuZGlmICAgIAorICAgICAg
ICBicmFuY2hOb3RPdGhlcihvcGVyYW5kLmpzVmFsdWVSZWdzKCksIHRlbXBHUFIpKTsKIH0KIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWlzYyhFZGdlIGVkZ2UsIEpTVmFsdWVSZWdz
IHJlZ3MpCkBAIC00ODM0LDYgKzQ4NDYsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGUoTm9kZSosIEVkCiAgICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVjdFVzZToKICAgICAgICAg
c3BlY3VsYXRlU3RyaW5nT3JTdHJpbmdPYmplY3QoZWRnZSk7CiAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgTm90U3RyaW5nVmFyVXNlOgorICAgICAgICBzcGVjdWxhdGVOb3RTdHJpbmdWYXIoZWRn
ZSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTm90Q2VsbFVzZToKICAgICAgICAgc3BlY3Vs
YXRlTm90Q2VsbChlZGdlKTsKICAgICAgICAgYnJlYWs7CkBAIC00OTgyLDE3ICs0OTk3LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaENoYXIoTm9kZQogICAgICAgICAKICAgICAg
ICAgb3AxLnVzZSgpOwogICAgICAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBhZGRC
cmFuY2goCi0gICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoCi0gICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMVJlZ3MuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3RlciksCi0gICAgICAgICAgICBkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7Ci0jZWxzZQot
ICAgICAgICBhZGRCcmFuY2goCi0gICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMVJlZ3MudGFnR1BSKCksIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSksCi0gICAgICAgICAgICBkYXRhLT5mYWxsVGhyb3Vn
aC5ibG9jayk7Ci0jZW5kaWYKKyAgICAgICAgYWRkQnJhbmNoKGJyYW5jaE5vdENlbGwob3AxUmVn
cyksIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKICAgICAgICAgCiAgICAgICAgIGFkZEJyYW5j
aCgKICAgICAgICAgICAgIG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKQEAgLTUyODIsMTcgKzUy
ODcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nKE5vCiAgICAgICAg
IAogICAgICAgICBvcDEudXNlKCk7CiAgICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIGFkZEJyYW5jaCgKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NCgKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxUmVncy5ncHIoKSwgR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKSwKLSAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsK
LSNlbHNlCi0gICAgICAgIGFkZEJyYW5jaCgKLSAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgb3AxUmVncy50YWdHUFIo
KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSwKLSAgICAgICAgICAgIGRhdGEtPmZh
bGxUaHJvdWdoLmJsb2NrKTsKLSNlbmRpZgorICAgICAgICBhZGRCcmFuY2goYnJhbmNoTm90Q2Vs
bChvcDFSZWdzKSwgZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spOwogICAgICAgICAKICAgICAgICAg
YWRkQnJhbmNoKAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoU3RydWN0dXJlUHRyKApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNp
b24gMTY1Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NjEsOCArODYxLDExIEBAIHB1YmxpYzoKICAgICAgICAg
R2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIo
dmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgaW5mby5pbml0Q2VsbChub2RlLCBub2RlLT5yZWZD
b3VudCgpLCByZWcpOwogICAgIH0KLSAgICB2b2lkIGJvb2xlYW5SZXN1bHQoR1BSUmVnIHJlZywg
Tm9kZSogbm9kZSwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCisgICAg
dm9pZCBibGVzc2VkQm9vbGVhblJlc3VsdChHUFJSZWcgcmVnLCBOb2RlKiBub2RlLCBVc2VDaGls
ZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKICAgICB7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZWcsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4s
IG1vZGUpOworI2Vsc2UKICAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQogICAg
ICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CiAKQEAgLTg3MCw2ICs4NzMsMTQgQEAgcHVibGlj
OgogICAgICAgICBtX2dwcnMucmV0YWluKHJlZywgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVy
Qm9vbGVhbik7CiAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm9G
cm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIGluZm8uaW5pdEJv
b2xlYW4obm9kZSwgbm9kZS0+cmVmQ291bnQoKSwgcmVnKTsKKyNlbmRpZgorICAgIH0KKyAgICB2
b2lkIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQoR1BSUmVnIHJlZywgTm9kZSogbm9kZSwgVXNlQ2hp
bGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgeworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgIGJsZXNzQm9vbGVhbihyZWcpOworI2VuZGlmCisgICAgICAgIGJsZXNzZWRC
b29sZWFuUmVzdWx0KHJlZywgbm9kZSwgbW9kZSk7CiAgICAgfQogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgdm9pZCBqc1ZhbHVlUmVzdWx0KEdQUlJlZyByZWcsIE5vZGUqIG5vZGUsIERhdGFGb3Jt
YXQgZm9ybWF0ID0gRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VD
aGlsZHJlbikKQEAgLTg5MCw2ICs5MDEsMTYgQEAgcHVibGljOgogICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlZywgbm9kZSwgRGF0YUZvcm1hdEpTLCBtb2RlKTsKICAgICB9CiAjZWxpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgIHZvaWQgYm9vbGVhblJlc3VsdChHUFJSZWcgcmVnLCBOb2RlKiBub2Rl
LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKKyAgICB7CisgICAgICAg
IGlmIChtb2RlID09IENhbGxVc2VDaGlsZHJlbikKKyAgICAgICAgICAgIHVzZUNoaWxkcmVuKG5v
ZGUpOworCisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLT52
aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckJvb2xlYW4pOworICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOworICAg
ICAgICBpbmZvLmluaXRCb29sZWFuKG5vZGUsIG5vZGUtPnJlZkNvdW50KCksIHJlZyk7CisgICAg
fQogICAgIHZvaWQganNWYWx1ZVJlc3VsdChHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCwgTm9k
ZSogbm9kZSwgRGF0YUZvcm1hdCBmb3JtYXQgPSBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuTW9k
ZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQogICAgIHsKICAgICAgICAgaWYgKG1vZGUgPT0gQ2Fs
bFVzZUNoaWxkcmVuKQpAQCAtMTk4MCw4ICsyMDAxLDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGNv
bXBpbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eShFZGdlIGxlZnRDaGlsZCwgRWRnZSBy
aWdodENoaWxkKTsKICAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdl
IHZhbHVlKTsKICAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KE5vZGUqKTsKKyAgICB2b2lkIGNv
bXBpbGVTdHJpbmdFcXVhbGl0eSgKKyAgICAgICAgTm9kZSosIEdQUlJlZyBsZWZ0R1BSLCBHUFJS
ZWcgcmlnaHRHUFIsIEdQUlJlZyBsZW5ndGhHUFIsCisgICAgICAgIEdQUlJlZyBsZWZ0VGVtcEdQ
UiwgR1BSUmVnIHJpZ2h0VGVtcEdQUiwgR1BSUmVnIGxlZnRUZW1wMkdQUiwKKyAgICAgICAgR1BS
UmVnIHJpZ2h0VGVtcDJHUFIsIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBmYXN0VHJ1ZSwKKyAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGZhc3RTbG93KTsKICAgICB2b2lkIGNvbXBpbGVTdHJp
bmdFcXVhbGl0eShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlU3RyaW5nSWRlbnRFcXVhbGl0eShO
b2RlKik7CisgICAgdm9pZCBjb21waWxlU3RyaW5nVG9VbnR5cGVkRXF1YWxpdHkoTm9kZSosIEVk
Z2Ugc3RyaW5nRWRnZSwgRWRnZSB1bnR5cGVkRWRnZSk7CisgICAgdm9pZCBjb21waWxlU3RyaW5n
SWRlbnRUb05vdFN0cmluZ1ZhckVxdWFsaXR5KE5vZGUqLCBFZGdlIHN0cmluZ0VkZ2UsIEVkZ2Ug
bm90U3RyaW5nVmFyRWRnZSk7CiAgICAgdm9pZCBjb21waWxlU3RyaW5nWmVyb0xlbmd0aChOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlTWlzY1N0cmljdEVxKE5vZGUqKTsKIApAQCAtMjA3OCw2ICsy
MTA2LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbkV4cHJlc3Npb24o
Tm9kZSopOwogICAgIGJvb2wgY29tcGlsZVJlZ0V4cEV4ZWMoTm9kZSopOwogICAgIAorICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGJyYW5jaElzQ2VsbChKU1ZhbHVlUmVncyk7CisgICAgSklUQ29tcGls
ZXI6Okp1bXAgYnJhbmNoTm90Q2VsbChKU1ZhbHVlUmVncyk7CisgICAgSklUQ29tcGlsZXI6Okp1
bXAgYnJhbmNoSXNPdGhlcihKU1ZhbHVlUmVncywgR1BSUmVnIHRlbXBHUFIpOworICAgIEpJVENv
bXBpbGVyOjpKdW1wIGJyYW5jaE5vdE90aGVyKEpTVmFsdWVSZWdzLCBHUFJSZWcgdGVtcEdQUik7
CisgICAgCisgICAgdm9pZCBtb3ZlVHJ1ZVRvKEdQUlJlZyk7CisgICAgdm9pZCBtb3ZlRmFsc2VU
byhHUFJSZWcpOworICAgIHZvaWQgYmxlc3NCb29sZWFuKEdQUlJlZyk7CisgICAgCiAgICAgLy8g
c2l6ZSBjYW4gYmUgYW4gaW1tZWRpYXRlIG9yIGEgcmVnaXN0ZXIsIGFuZCBtdXN0IGJlIGluIGJ5
dGVzLiBJZiBzaXplIGlzIGEgcmVnaXN0ZXIsCiAgICAgLy8gaXQgbXVzdCBiZSBhIGRpZmZlcmVu
dCByZWdpc3RlciB0aGFuIHJlc3VsdEdQUi4gRW1pdHMgY29kZSB0aGF0IHBsYWNlIGEgcG9pbnRl
ciB0bwogICAgIC8vIHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRpb24uIFRoZSByZXR1cm5lZCBqdW1w
IGlzIHRoZSBqdW1wIHRvIHRoZSBzbG93IHBhdGguCkBAIC0yMTkzLDYgKzIyMzAsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdJZGVudChFZGdlIGVkZ2UsIEdQUlJlZyBzdHJp
bmcpOwogICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nSWRlbnQoRWRnZSk7CiAgICAgdm9pZCBzcGVj
dWxhdGVTdHJpbmcoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVOb3RTdHJpbmdWYXIoRWRnZSk7
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RydWN0dXJlTG9jYXRpb25UeXBlPgogICAgIHZvaWQg
c3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlKEVkZ2UsIFN0cnVjdHVyZUxvY2F0aW9u
VHlwZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdPYmplY3QoRWRnZSwgR1BSUmVnKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkocmV2aXNpb24gMTY1
Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTEsNiArOTEsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgVXNlCiAgICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVjdFVzZToKICAgICAgICAgb3V0
LnByaW50KCJTdHJpbmdPclN0cmluZ09iamVjdCIpOwogICAgICAgICBicmVhazsKKyAgICBjYXNl
IE5vdFN0cmluZ1ZhclVzZToKKyAgICAgICAgb3V0LnByaW50KCJOb3RTdHJpbmdWYXIiKTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb3RDZWxsVXNlOgogICAgICAgICBvdXQucHJpbnQoIk5v
dENlbGwiKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1VzZUtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1VzZUtpbmQuaAkocmV2aXNpb24gMTY1Nzk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAgZW51bSBVc2VL
aW5kIHsKICAgICBLbm93blN0cmluZ1VzZSwKICAgICBTdHJpbmdPYmplY3RVc2UsCiAgICAgU3Ry
aW5nT3JTdHJpbmdPYmplY3RVc2UsCisgICAgTm90U3RyaW5nVmFyVXNlLAogICAgIE5vdENlbGxV
c2UsCiAgICAgT3RoZXJVc2UsCiAgICAgTWlzY1VzZSwKQEAgLTkzLDYgKzk0LDggQEAgQUxXQVlT
X0lOTElORSBTcGVjdWxhdGVkVHlwZSB0eXBlRmlsdGVyRgogICAgICAgICByZXR1cm4gU3BlY1N0
cmluZ09iamVjdDsKICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgogICAgICAgICBy
ZXR1cm4gU3BlY1N0cmluZyB8IFNwZWNTdHJpbmdPYmplY3Q7CisgICAgY2FzZSBOb3RTdHJpbmdW
YXJVc2U6CisgICAgICAgIHJldHVybiB+U3BlY1N0cmluZ1ZhcjsKICAgICBjYXNlIE5vdENlbGxV
c2U6CiAgICAgICAgIHJldHVybiB+U3BlY0NlbGw7CiAgICAgY2FzZSBPdGhlclVzZToKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlz
aW9uIDE2NTc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM4LDYgKzIzOCw4IEBAIGlubGluZSBDYXBhYmlsaXR5
TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAo
bm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJlclVzZSkpCiAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChTdHJpbmdJZGVudFVzZSkpCisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2Up
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQo
VW50eXBlZFVzZSkpCkBAIC0yNTYsNiArMjU4LDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBj
YW5Db21waWxlKE5vZGUqIAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChub2RlLT5p
c0JpbmFyeVVzZUtpbmQoTnVtYmVyVXNlKSkKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBp
ZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKFN0cmluZ0lkZW50VXNlKSkKKyAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChCb29sZWFu
VXNlKSkKQEAgLTI2NCw2ICsyNjgsMTAgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21w
aWxlKE5vZGUqIAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChub2RlLT5pc0JpbmFy
eVVzZUtpbmQoVW50eXBlZFVzZSwgTWlzY1VzZSkpCiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChTdHJpbmdJZGVudFVzZSwgTm90U3RyaW5nVmFy
VXNlKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VL
aW5kKE5vdFN0cmluZ1ZhclVzZSwgU3RyaW5nSWRlbnRVc2UpKQorICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxlOwogICAgIGNhc2UgQ29tcGFyZUxlc3M6CiAg
ICAgY2FzZSBDb21wYXJlTGVzc0VxOgpAQCAtMzU4LDYgKzM2Niw4IEBAIENhcGFiaWxpdHlMZXZl
bCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgICAgICBjYXNlIE5vdENlbGxV
c2U6CiAgICAgICAgICAgICAgICAgY2FzZSBPdGhlclVzZToKICAgICAgICAgICAgICAgICBjYXNl
IE1pc2NVc2U6CisgICAgICAgICAgICAgICAgY2FzZSBTdHJpbmdJZGVudFVzZToKKyAgICAgICAg
ICAgICAgICBjYXNlIE5vdFN0cmluZ1ZhclVzZToKICAgICAgICAgICAgICAgICAgICAgLy8gVGhl
c2UgYXJlIE9LLgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAJKHJldmlzaW9uIDE2NTc5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzY0LDcgKzMzNjQs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTWFj
aGluZUludFVzZSkKICAgICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE51bWJl
clVzZSkKICAgICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkK
LSAgICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEJvb2xlYW5Vc2UpKSB7Cisg
ICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChCb29sZWFuVXNlKQorICAgICAg
ICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nSWRlbnRVc2UpKSB7CiAgICAg
ICAgICAgICBjb21waWxlQ29tcGFyZVN0cmljdEVxKCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KQEAgLTM0MTcsNiArMzQxOCwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVz
ZUtpbmQoU3RyaW5nSWRlbnRVc2UpKSB7CisgICAgICAgICAgICBzZXRCb29sZWFuKAorICAgICAg
ICAgICAgICAgIG1fb3V0LmVxdWFsKGxvd1N0cmluZ0lkZW50KG1fbm9kZS0+Y2hpbGQxKCkpLCBs
b3dTdHJpbmdJZGVudChtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQo
T2JqZWN0VXNlKSkgewogICAgICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBt
X291dC5lcXVhbCgKQEAgLTM0NDEsNiArMzQ0OCwzNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFy
eVVzZUtpbmQoU3RyaW5nSWRlbnRVc2UsIE5vdFN0cmluZ1ZhclVzZSkKKyAgICAgICAgICAgIHx8
IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE5vdFN0cmluZ1ZhclVzZSwgU3RyaW5nSWRlbnRVc2Up
KSB7CisgICAgICAgICAgICBFZGdlIGxlZnRFZGdlID0gbV9ub2RlLT5jaGlsZEZvcihTdHJpbmdJ
ZGVudFVzZSk7CisgICAgICAgICAgICBFZGdlIHJpZ2h0RWRnZSA9IG1fbm9kZS0+Y2hpbGRGb3Io
Tm90U3RyaW5nVmFyVXNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIGxlZnQg
PSBsb3dTdHJpbmdJZGVudChsZWZ0RWRnZSk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHRWYWx1
ZSA9IGxvd0pTVmFsdWUocmlnaHRFZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJDb21wYXJlU3RyaWN0RXEgU3RyaW5nSWRlbnQgdG8gTm90U3RyaW5nVmFy
IGlzIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzU3RyaW5nQ2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29tcGFyZVN0cmljdEVxIFN0cmluZ0lkZW50IHRvIE5v
dFN0cmluZ1ZhciBpcyBzdHJpbmcgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29tcGFyZVN0cmljdEVxIFN0cmlu
Z0lkZW50IHRvIE5vdFN0cmluZ1ZhciBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdENlbGxSZXN1bHQgPSBtX291dC5hbmNob3IobV9v
dXQuYm9vbGVhbkZhbHNlKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwocmlnaHRW
YWx1ZSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KGlzQ2VsbENhc2UsIGlzU3RyaW5nQ2FzZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBu
b3RTdHJpbmdSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKKyAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaChpc1N0cmluZyhyaWdodFZhbHVlKSwgdW5zdXJlKGlzU3RyaW5n
Q2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAg
TFZhbHVlIHJpZ2h0ID0gbV9vdXQubG9hZFB0cihyaWdodFZhbHVlLCBtX2hlYXBzLkpTU3RyaW5n
X3ZhbHVlKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50KHJpZ2h0RWRnZSwgcmln
aHRWYWx1ZSwgcmlnaHQpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaXNTdHJpbmdSZXN1
bHQgPSBtX291dC5hbmNob3IobV9vdXQuZXF1YWwobGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICBzZXRCb29s
ZWFuKG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBub3RDZWxsUmVzdWx0LCBub3RTdHJpbmdSZXN1
bHQsIGlzU3RyaW5nUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAg
IApAQCAtNDgyMSwxMyArNDg1OCwyMyBAQCBwcml2YXRlOgogICAgIAogICAgIExWYWx1ZSBsb3dT
dHJpbmcoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNP
cGVyYW5kU3BlY3VsYXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1v
ZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IFN0cmlu
Z1VzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93blN0cmluZ1VzZSk7CisgICAgICAgIEFTU0VS
VF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51
c2VLaW5kKCkgPT0gU3RyaW5nVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duU3RyaW5nVXNl
IHx8IGVkZ2UudXNlS2luZCgpID09IFN0cmluZ0lkZW50VXNlKTsKICAgICAgICAgCiAgICAgICAg
IExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UsIG1vZGUpOwogICAgICAgICBzcGVjdWxhdGVT
dHJpbmcoZWRnZSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAg
CisgICAgTFZhbHVlIGxvd1N0cmluZ0lkZW50KEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9u
TW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQorICAgIHsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBl
ZGdlLnVzZUtpbmQoKSA9PSBTdHJpbmdJZGVudFVzZSk7CisgICAgICAgIAorICAgICAgICBMVmFs
dWUgc3RyaW5nID0gbG93U3RyaW5nKGVkZ2UsIG1vZGUpOworICAgICAgICBMVmFsdWUgc3RyaW5n
SW1wbCA9IG1fb3V0LmxvYWRQdHIoc3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAg
ICAgICAgc3BlY3VsYXRlU3RyaW5nSWRlbnQoZWRnZSwgc3RyaW5nLCBzdHJpbmdJbXBsKTsKKyAg
ICAgICAgcmV0dXJuIHN0cmluZ0ltcGw7CisgICAgfQorICAgIAogICAgIExWYWx1ZSBsb3dOb25O
dWxsT2JqZWN0KEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21h
dGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2Rl
LCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBP
YmplY3RVc2UpOwpAQCAtNTE4OSw2ICs1MjM2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBT
dHJpbmdVc2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoZWRnZSk7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTdHJpbmdJZGVudFVzZToKKyAgICAgICAgICAgIHNwZWN1
bGF0ZVN0cmluZ0lkZW50KGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
U3RyaW5nT2JqZWN0VXNlOgogICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nT2JqZWN0KGVkZ2Up
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC01MjA3LDYgKzUyNTcsOSBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIEJvb2xlYW5Vc2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGVkZ2Up
OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm90U3RyaW5nVmFyVXNlOgorICAg
ICAgICAgICAgc3BlY3VsYXRlTm90U3RyaW5nVmFyKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgTm90Q2VsbFVzZToKICAgICAgICAgICAgIHNwZWN1bGF0ZU5vdENlbGwo
ZWRnZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTUzNjYsNyArNTQxOSw3IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkK
ICAgICB7Ci0gICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwg
U3BlY1N0cmluZywgaXNOb3RTdHJpbmcoY2VsbCkpOworICAgICAgICBGVExfVFlQRV9DSEVDSyhq
c1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNTdHJpbmcgfCB+U3BlY0NlbGwsIGlzTm90U3Ry
aW5nKGNlbGwpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoRWRnZSBl
ZGdlKQpAQCAtNTM3NCw2ICs1NDI3LDI1IEBAIHByaXZhdGU6CiAgICAgICAgIHNwZWN1bGF0ZVN0
cmluZyhlZGdlLCBsb3dDZWxsKGVkZ2UpKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBzcGVjdWxh
dGVTdHJpbmdJZGVudChFZGdlIGVkZ2UsIExWYWx1ZSBzdHJpbmcsIExWYWx1ZSBzdHJpbmdJbXBs
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2Us
IFNwZWNTdHJpbmdJZGVudCB8IH5TcGVjU3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoc3RyaW5nKSwg
ZWRnZS5ub2RlKCksIG1fb3V0LmlzTnVsbChzdHJpbmdJbXBsKSk7CisgICAgICAgIHNwZWN1bGF0
ZSgKKyAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShzdHJpbmcpLCBlZGdlLm5vZGUo
KSwKKyAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm8zMigKKyAgICAgICAgICAgICAgICBtX291
dC5sb2FkMzIoc3RyaW5nSW1wbCwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCisg
ICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdJbXBsOjpmbGFnSXNJZGVudGlm
aWVyKCkpKSk7CisgICAgICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKGVkZ2UsIFNwZWNTdHJpbmdJ
ZGVudCB8IH5TcGVjU3RyaW5nKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVTdHJp
bmdJZGVudChFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBsb3dTdHJpbmdJZGVudChlZGdlKTsK
KyAgICB9CisgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdPYmplY3QoRWRnZSBlZGdlKQog
ICAgIHsKICAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNw
ZWNTdHJpbmdPYmplY3QpKQpAQCAtNTQ3NSw2ICs1NTQ3LDI5IEBAIHByaXZhdGU6CiAgICAgICAg
IGxvd0Jvb2xlYW4oZWRnZSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgc3BlY3VsYXRlTm90U3Ry
aW5nVmFyKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVk
c1R5cGVDaGVjayhlZGdlLCB+U3BlY1N0cmluZ1ZhcikpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgTm90U3RyaW5nVmFyIGlzIGNl
bGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJTcGVjdWxhdGUgTm90U3RyaW5nVmFyIGlzIHN0cmluZyBjYXNlIikpOwor
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IlNwZWN1bGF0ZSBOb3RTdHJpbmdWYXIgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAg
ICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJl
KGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBpc1N0cmluZ0Nhc2UpOworICAgICAgICBtX291
dC5icmFuY2goaXNTdHJpbmcodmFsdWUpLCB1bnN1cmUoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKGNv
bnRpbnVhdGlvbikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdD
YXNlLCBjb250aW51YXRpb24pOworICAgICAgICBzcGVjdWxhdGVTdHJpbmdJZGVudChlZGdlLCB2
YWx1ZSwgbV9vdXQubG9hZFB0cih2YWx1ZSwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSkpOworICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBz
cGVjdWxhdGVOb3RDZWxsKEVkZ2UgZWRnZSkKICAgICB7CiAgICAgICAgIGlmICghbV9pbnRlcnBy
ZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NKU1ZhbHVlLmgJKHJldmlzaW9uIDE2NTc5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEw
MCwxMiBAQCB1bmlvbiBFbmNvZGVkVmFsdWVEZXNjcmlwdG9yIHsKICNkZWZpbmUgVGFnT2Zmc2V0
IChPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpCiAj
ZGVmaW5lIFBheWxvYWRPZmZzZXQgKE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCkpCiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorI2RlZmluZSBDZWxs
UGF5bG9hZE9mZnNldCAwCisjZWxzZQorI2RlZmluZSBDZWxsUGF5bG9hZE9mZnNldCBQYXlsb2Fk
T2Zmc2V0CisjZW5kaWYKKwogZW51bSBXaGljaFZhbHVlV29yZCB7CiAgICAgVGFnV29yZCwKICAg
ICBQYXlsb2FkV29yZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9z
dHJpbmctaWRlbnQtdG8tbm90LXN0cmluZy12YXItZXF1YWxpdHkuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zdHJpbmctaWRlbnQtdG8tbm90LXN0
cmluZy12YXItZXF1YWxpdHkuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL3N0cmluZy1pZGVudC10by1ub3Qtc3RyaW5nLXZhci1lcXVhbGl0eS5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACitmdW5jdGlvbiBmb28oYSwgYikgewor
ICAgIHJldHVybiBhID09PSBiOworfQorCitmdW5jdGlvbiBiYXIoYSwgYikgeworICAgIHJldHVy
biBiID09PSBhOworfQorCitmdW5jdGlvbiB0ZXN0KGEsIGIsIGV4cGVjdGVkKSB7CisgICAgdmFy
IGZvb0FjdHVhbCA9IGZvbyhhLCBiKTsKKyAgICB2YXIgYmFyQWN0dWFsID0gYmFyKGEsIGIpOwor
ICAgIAorICAgIGlmIChmb29BY3R1YWwgIT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBF
cnJvcigiQmFkIHJlc3VsdDogIiArIGZvb0FjdHVhbCk7CisgICAgaWYgKGJhckFjdHVhbCAhPSBl
eHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmVzdWx0OiAiICsgYmFyQWN0
dWFsKTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdGVzdCgi
Zm9vIiwgImZvbyIsIHRydWUpOworICAgIHRlc3QoImZvbyIsICJiYXIiLCBmYWxzZSk7CisgICAg
dGVzdCgiZnV6IiwgNDIsIGZhbHNlKTsKKyAgICB0ZXN0KCJidXoiLCB7fSwgZmFsc2UpOworICAg
IHRlc3QoImJsYSIsIG51bGwsIGZhbHNlKTsKK30KKwordmFyIGZvb1N0cmluZyA9ICIiOworZm9v
U3RyaW5nICs9ICJmIjsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMjsgKytpKQorICAgIGZvb1N0cmlu
ZyArPSAibyI7CisKK3Rlc3QoZm9vU3RyaW5nLCAiZm9vIiwgdHJ1ZSk7Cg==
</data>
<flag name="review"
          id="251320"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>