<?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>118339</bug_id>
          
          <creation_ts>2013-07-02 21:58:34 -0700</creation_ts>
          <short_desc>fourthTier: DFG should refer to BasicBlocks by BasicBlock* and not BlockIndex</short_desc>
          <delta_ts>2013-07-05 18:02:04 -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>118340</dependson>
          <blocked>118338</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>905687</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-02 21:58:34 -0700</bug_when>
    <thetext>More fun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906022</commentid>
    <comment_count>1</comment_count>
      <attachid>206043</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-03 19:11:15 -0700</bug_when>
    <thetext>Created attachment 206043
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906031</commentid>
    <comment_count>2</comment_count>
      <attachid>206048</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-03 19:58:47 -0700</bug_when>
    <thetext>Created attachment 206048
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906045</commentid>
    <comment_count>3</comment_count>
      <attachid>206050</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-03 22:22:46 -0700</bug_when>
    <thetext>Created attachment 206050
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906205</commentid>
    <comment_count>4</comment_count>
      <attachid>206097</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-04 09:20:34 -0700</bug_when>
    <thetext>Created attachment 206097
moar!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906209</commentid>
    <comment_count>5</comment_count>
      <attachid>206098</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-04 09:36:32 -0700</bug_when>
    <thetext>Created attachment 206098
almost done, I think</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906237</commentid>
    <comment_count>6</comment_count>
      <attachid>206108</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-04 12:01:31 -0700</bug_when>
    <thetext>Created attachment 206108
it compiles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906242</commentid>
    <comment_count>7</comment_count>
      <attachid>206110</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-04 12:15:08 -0700</bug_when>
    <thetext>Created attachment 206110
it runs programs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906252</commentid>
    <comment_count>8</comment_count>
      <attachid>206112</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-04 13:58:08 -0700</bug_when>
    <thetext>Created attachment 206112
the patch

No performance regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906499</commentid>
    <comment_count>9</comment_count>
      <attachid>206112</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-07-05 16:03:03 -0700</bug_when>
    <thetext>Comment on attachment 206112
the patch

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

&gt; Source/JavaScriptCore/dfg/DFGDominators.h:53
&gt; +    }

Add an empty line between methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>906517</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-07-05 18:02:04 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/152431</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206043</attachid>
            <date>2013-07-03 19:11:15 -0700</date>
            <delta_ts>2013-07-03 19:58:47 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>51115</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCB2b2lkIEFic3Ry
YWN0U3RhdGU6OmJlZ2luQmFzaWNCbG9jayhCYXNpCiAKIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5p
dGlhbGl6ZShHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgQmFzaWNCbG9jayogcm9vdCA9IGdyYXBoLm1f
YmxvY2tzWzBdLmdldCgpOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBncmFwaC5ibG9jaygwKTsK
ICAgICByb290LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKICAgICByb290LT5jZmFIYXNWaXNp
dGVkID0gZmFsc2U7CiAgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKQEAgLTEx
OCw4ICsxMTgsOCBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdyCiAg
ICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKICAgICAgICAg
cm9vdC0+dmFsdWVzQXRUYWlsLmxvY2FsKGkpLmNsZWFyKCk7CiAgICAgfQotICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gMSA7IGJsb2NrSW5kZXggPCBncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLm1f
YmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMSA7IGJsb2NrSW5kZXggPCBncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAg
ICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCFibG9j
ay0+aXNSZWFjaGFibGUpCkBAIC0xODAyLDI0ICsxODAyLDI0IEBAIGlubGluZSBib29sIEFic3Ry
YWN0U3RhdGU6Om1lcmdlVG9TdWNjZXMKICAgICBjYXNlIEp1bXA6IHsKICAgICAgICAgQVNTRVJU
KGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9u
KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRh
dGFMb2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwtPnRha2Vu
QmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2Nr
ICIsICp0ZXJtaW5hbC0+dGFrZW5CbG9jaygpLCAiLlxuIik7CiAjZW5kaWYKLSAgICAgICAgcmV0
dXJuIG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2Nr
SW5kZXgoKV0uZ2V0KCkpOworICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgdGVybWlu
YWwtPnRha2VuQmxvY2soKSk7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEJyYW5jaDogewog
ICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uICE9IEludmFsaWRC
cmFuY2hEaXJlY3Rpb24pOwogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwtPnRha2VuQmxvY2tJbmRleCgp
KTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICIsICp0ZXJtaW5h
bC0+dGFrZW5CbG9jaygpLCAiLlxuIik7CiAjZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxvY2st
PmNmYUJyYW5jaERpcmVjdGlvbiAhPSBUYWtlRmFsc2UpCi0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2NrSW5k
ZXgoKV0uZ2V0KCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCB0
ZXJtaW5hbC0+dGFrZW5CbG9jaygpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1
LlxuIiwgdGVybWluYWwtPm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZygi
ICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICIsICp0ZXJtaW5hbC0+bm90VGFrZW5CbG9jaygpLCAi
LlxuIik7CiAjZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlv
biAhPSBUYWtlVHJ1ZSkKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywg
Z3JhcGgubV9ibG9ja3NbdGVybWluYWwtPm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIHRlcm1pbmFsLT5ub3RUYWtl
bkJsb2NrKCkpOwogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CiAgICAgICAgIApAQCAt
MTgyOCw5ICsxODI4LDkgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nl
cwogICAgICAgICAvLyB3ZSdyZSBub3QuIEhvd2V2ZXIgSSBzb21laG93IGRvdWJ0IHRoYXQgdGhp
cyB3aWxsIGV2ZXIgYmUgYSBiaWcgZGVhbC4KICAgICAgICAgQVNTRVJUKGJhc2ljQmxvY2stPmNm
YUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsKICAgICAgICAgU3dp
dGNoRGF0YSogZGF0YSA9IHRlcm1pbmFsLT5zd2l0Y2hEYXRhKCk7Ci0gICAgICAgIGJvb2wgY2hh
bmdlZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW2RhdGEtPmZhbGxUaHJvdWdo
XS5nZXQoKSk7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGRhdGEt
PmZhbGxUaHJvdWdoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6
ZSgpOyBpLS07KQotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBncmFw
aC5tX2Jsb2Nrc1tkYXRhLT5jYXNlc1tpXS50YXJnZXRdLmdldCgpKTsKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKICAgICAg
ICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQyLDggKzE0Miw4IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIC8vIEZpZ3VyZSBvdXQg
d2hpY2ggdmFyaWFibGVzIGFyZSBsaXZlLCB1c2luZyBhIGNvbnNlcnZhdGl2ZSBhcHByb3hpbWF0
aW9uIG9mCiAgICAgICAgIC8vIGxpdmVuZXNzLgotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9j
a0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9j
a3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewor
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwg
YmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKQEAgLTE2NCw4ICsxNjQsOCBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIHVzZWQgb25seSBmb3IgR2V0QnlWYWwgYW5kIEdldEFycmF5TGVuZ3Ro
IGFjY2Vzc2VzLiBBdCB0aGUgc2FtZSB0aW1lLAogICAgICAgICAvLyBpZGVudGlmeSB1c2VzIG9m
IENyZWF0ZUFyZ3VtZW50cyB0aGF0IGFyZSBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBhcmd1bWVu
dHMKICAgICAgICAgLy8gYmVpbmcgYWxpYXNlZCBvbmx5IHRvIHZhcmlhYmxlcyB0aGF0IHNhdGlz
ZnkgdGhlc2UgY29uc3RyYWludHMuCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgp
IHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+
c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTIg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBHcmFwaDsKIAotdHlw
ZWRlZiBWZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRlY2Vzc29yTGlzdDsKK3R5cGVkZWYgVmVj
dG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7CiAKLXN0cnVjdCBCYXNpY0Jsb2Nr
IDogVmVjdG9yPE5vZGUqLCA4PiB7CitzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFz
aWNCbG9jaz4sIFZlY3RvcjxOb2RlKiwgOD4gewogICAgIEJhc2ljQmxvY2sodW5zaWduZWQgYnl0
ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMpCiAg
ICAgICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQorICAgICAgICAsIGluZGV4KE5v
QmxvY2spCiAgICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2UpCiAgICAgICAgICwgY2ZhSGFzVmlz
aXRlZChmYWxzZSkKICAgICAgICAgLCBjZmFTaG91bGRSZXZpc2l0KGZhbHNlKQpAQCAtNzQsNiAr
NzUsMTIgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZSosIDg+IHsKICAgICAgICAg
dmFsdWVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwogICAgIH0KICAgICAKKyAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuc2l6ZSgpOyB9CisgICAgTm9k
ZSogYXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXNbaV07IH0KKyAgICBOb2RlKiBv
cGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQorICAgIAorICAgIHZv
aWQgYXBwZW5kKE5vZGUqIG5vZGUpIHsgbV9ub2Rlcy5hcHBlbmQobm9kZSk7IH0KKyAgICAKICAg
ICBzaXplX3QgbnVtTm9kZXMoKSBjb25zdCB7IHJldHVybiBwaGlzLnNpemUoKSArIHNpemUoKTsg
fQogICAgIE5vZGUqIG5vZGUoc2l6ZV90IGkpIGNvbnN0CiAgICAgewpAQCAtMTA2LDEwICsxMTMs
MTcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZSosIDg+IHsKICAgICBERkdfVkFS
SUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKICN1bmRlZiBE
RkdfREVGSU5FX0FQUEVORF9OT0RFCiAgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQoIiMiLCBpbmRleCk7CisgICAgfQor
ICAgIAogICAgIC8vIFRoaXMgdmFsdWUgaXMgdXNlZCBpbnRlcm5hbGx5IGZvciBibG9jayBsaW5r
aW5nIGFuZCBPU1IgZW50cnkuIEl0IGlzIG1vc3RseSBtZWFuaW5nbGVzcwogICAgIC8vIGZvciBv
dGhlciBwdXJwb3NlcyBkdWUgdG8gaW5saW5pbmcuCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVCZWdp
bjsKICAgICAKKyAgICBCbG9ja0luZGV4IGluZGV4OworICAgIAogICAgIGJvb2wgaXNPU1JUYXJn
ZXQ7CiAgICAgYm9vbCBjZmFIYXNWaXNpdGVkOwogICAgIGJvb2wgY2ZhU2hvdWxkUmV2aXNpdDsK
QEAgLTEyMiwzMCArMTM2LDQzIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5vZGUqLCA4
PiB7CiAgICAgYm9vbCBpc1JlYWNoYWJsZTsKICAgICAKICAgICBWZWN0b3I8Tm9kZSo+IHBoaXM7
Ci0gICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOworICAgIFByZWRlY2Vzc29yTGlz
dCBwcmVkZWNlc3NvcnM7CiAgICAgCiAgICAgT3BlcmFuZHM8Tm9kZSosIE5vZGVQb2ludGVyVHJh
aXRzPiB2YXJpYWJsZXNBdEhlYWQ7CiAgICAgT3BlcmFuZHM8Tm9kZSosIE5vZGVQb2ludGVyVHJh
aXRzPiB2YXJpYWJsZXNBdFRhaWw7CiAgICAgCiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4g
dmFsdWVzQXRIZWFkOwogICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0VGFpbDsK
KworcHJpdmF0ZToKKyAgICBWZWN0b3I8Tm9kZSosIDg+IG1fbm9kZXM7CiB9OwogCiBzdHJ1Y3Qg
VW5saW5rZWRCbG9jayB7Ci0gICAgQmxvY2tJbmRleCBtX2Jsb2NrSW5kZXg7CisgICAgQmFzaWNC
bG9jayogbV9ibG9jazsKICAgICBib29sIG1fbmVlZHNOb3JtYWxMaW5raW5nOwogICAgIGJvb2wg
bV9uZWVkc0Vhcmx5UmV0dXJuTGlua2luZzsKICAgICAKICAgICBVbmxpbmtlZEJsb2NrKCkgeyB9
CiAgICAgCi0gICAgZXhwbGljaXQgVW5saW5rZWRCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgp
Ci0gICAgICAgIDogbV9ibG9ja0luZGV4KGJsb2NrSW5kZXgpCisgICAgZXhwbGljaXQgVW5saW5r
ZWRCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQogICAg
ICAgICAsIG1fbmVlZHNOb3JtYWxMaW5raW5nKHRydWUpCiAgICAgICAgICwgbV9uZWVkc0Vhcmx5
UmV0dXJuTGlua2luZyhmYWxzZSkKICAgICB7CiAgICAgfQogfTsKICAgICAKK3N0YXRpYyBpbmxp
bmUgZ2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKEJhc2ljQmxvY2sqKiBiYXNpY0Jsb2NrKQorewor
ICAgIHJldHVybiAoKmJhc2ljQmxvY2spLT5ieXRlY29kZUJlZ2luOworfQorCitzdGF0aWMgaW5s
aW5lIEJhc2ljQmxvY2sqIGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPEJhc2ljQmxvY2sq
PiYgbGlua2luZ1RhcmdldHMsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pCit7CisgICAgcmV0dXJu
ICpiaW5hcnlTZWFyY2g8QmFzaWNCbG9jayosIHVuc2lnbmVkPihsaW5raW5nVGFyZ2V0cywgbGlu
a2luZ1RhcmdldHMuc2l6ZSgpLCBieXRlY29kZUJlZ2luLCBnZXRCeXRlY29kZUJlZ2luRm9yQmxv
Y2spOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDggKzE4Myw4
IEBAIHByaXZhdGU6CiAgICAgLy8gUGFyc2UgYSBzaW5nbGUgYmFzaWMgYmxvY2sgb2YgYnl0ZWNv
ZGUgaW5zdHJ1Y3Rpb25zLgogICAgIGJvb2wgcGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCk7CiAg
ICAgLy8gTGluayBibG9jayBzdWNjZXNzb3JzLgotICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxv
Y2sqLCBWZWN0b3I8QmxvY2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0cyk7Ci0gICAgdm9pZCBsaW5r
QmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCbG9j
a0luZGV4PiYgcG9zc2libGVUYXJnZXRzKTsKKyAgICB2b2lkIGxpbmtCbG9jayhCYXNpY0Jsb2Nr
KiwgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKKyAgICB2b2lkIGxpbmtC
bG9ja3MoVmVjdG9yPFVubGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJhc2lj
QmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKICAgICAvLyBMaW5rIEdldExvY2FsICYgU2V0TG9j
YWwgbm9kZXMsIHRvIGVuc3VyZSBsaXZlIHZhbHVlcyBhcmUgZ2VuZXJhdGVkLgogICAgIGVudW0g
UGhpU3RhY2tUeXBlIHsKICAgICAgICAgTG9jYWxQaGlTdGFjaywKQEAgLTEwMzksMTMgKzEwMzks
MTMgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gUG90ZW50aWFsIGJsb2NrIGxpbmtpbmcgdGFyZ2V0
cy4gTXVzdCBiZSBzb3J0ZWQgYnkgYnl0ZWNvZGVCZWdpbiwgYW5kCiAgICAgICAgIC8vIGNhbm5v
dCBoYXZlIHR3byBibG9ja3MgdGhhdCBoYXZlIHRoZSBzYW1lIGJ5dGVjb2RlQmVnaW4uIEZvciB0
aGlzIHZlcnkKICAgICAgICAgLy8gcmVhc29uLCB0aGlzIGlzIG5vdCBlcXVpdmFsZW50IHRvIAot
ICAgICAgICBWZWN0b3I8QmxvY2tJbmRleD4gbV9ibG9ja0xpbmtpbmdUYXJnZXRzOworICAgICAg
ICBWZWN0b3I8QmFzaWNCbG9jayo+IG1fYmxvY2tMaW5raW5nVGFyZ2V0czsKICAgICAgICAgCiAg
ICAgICAgIC8vIElmIHRoZSBjYWxsc2l0ZSdzIGJhc2ljIGJsb2NrIHdhcyBzcGxpdCBpbnRvIHR3
bywgdGhlbiB0aGlzIHdpbGwgYmUKICAgICAgICAgLy8gdGhlIGhlYWQgb2YgdGhlIGNhbGxzaXRl
IGJsb2NrLiBJdCBuZWVkcyBpdHMgc3VjY2Vzc29ycyBsaW5rZWQgdG8gdGhlCiAgICAgICAgIC8v
IG1fdW5saW5rZWRCbG9ja3MsIGJ1dCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQ6IHRoZXJlJ3Mg
bm8gd2F5IGZvcgogICAgICAgICAvLyBhbnkgYmxvY2tzIGluIG1fdW5saW5rZWRCbG9ja3MgdG8g
anVtcCBiYWNrIGludG8gdGhpcyBibG9jay4KLSAgICAgICAgQmxvY2tJbmRleCBtX2NhbGxzaXRl
QmxvY2tIZWFkOworICAgICAgICBCYXNpY0Jsb2NrKiBtX2NhbGxzaXRlQmxvY2tIZWFkOwogICAg
ICAgICAKICAgICAgICAgLy8gRG9lcyB0aGUgY2FsbHNpdGUgYmxvY2sgaGVhZCBuZWVkIGxpbmtp
bmc/IFRoaXMgaXMgdHlwaWNhbGx5IHRydWUKICAgICAgICAgLy8gYnV0IHdpbGwgYmUgZmFsc2Ug
Zm9yIHRoZSBtYWNoaW5lIGNvZGUgYmxvY2sncyBpbmxpbmUgc3RhY2sgZW50cnkKQEAgLTEwNzYs
NyArMTA3Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBCeXRlQ29kZVBhcnNlciosCiAgICAg
ICAgICAgICBDb2RlQmxvY2sqLAogICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
LAotICAgICAgICAgICAgQmxvY2tJbmRleCBjYWxsc2l0ZUJsb2NrSGVhZCwKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGNhbGxzaXRlQmxvY2tIZWFkLAogICAgICAgICAgICAgSlNGdW5jdGlvbiog
Y2FsbGVlLCAvLyBOdWxsIGlmIHRoaXMgaXMgYSBjbG9zdXJlIGNhbGwuCiAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmV0dXJuVmFsdWVWUiwKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBpbmxpbmVDYWxsRnJhbWVTdGFydCwKQEAgLTEzNzgsMzIgKzEzNzgsMzUgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIElmIHdlIGdldCB0byB0aGlz
IHBvaW50IHRoZW4gYWxsIGJsb2NrcyBtdXN0IGVuZCBpbiBzb21lIHNvcnQgb2YgdGVybWluYWxz
LgogICAgIEFTU0VSVChsYXN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKICAgICAKKwor
ICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IGJhc2ljIGJsb2NrIGZvciB0aGUgY29udGludWF0
aW9uIGF0IHRoZSBjYWxsZXIuCisgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRS
ZWYobmV3IEJhc2ljQmxvY2sobmV4dE9mZnNldCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxz
KSk7CisKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZGF0YUxvZ0YoIkNyZWF0
aW5nIGlubGluZSBlcGlsb2d1ZSBiYXNpYyBibG9jayAlcCwgIyV6dSBmb3IgJXAgYmMjJXUgYXQg
aW5saW5lIGRlcHRoICV1LlxuIiwgYmxvY2suZ2V0KCksIG1fZ3JhcGgubnVtQmxvY2tzKCksIG1f
aW5saW5lU3RhY2tUb3AtPmV4ZWN1dGFibGUoKSwgbV9jdXJyZW50SW5kZXgsIENvZGVPcmlnaW46
OmlubGluZURlcHRoRm9yQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSgpKSk7CisjZW5kaWYKKwog
ICAgIC8vIExpbmsgdGhlIGVhcmx5IHJldHVybnMgdG8gdGhlIGJhc2ljIGJsb2NrIHdlJ3JlIGFi
b3V0IHRvIGNyZWF0ZS4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlubGluZVN0YWNrRW50
cnkubV91bmxpbmtlZEJsb2Nrcy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAoIWlubGluZVN0
YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzRWFybHlSZXR1cm5MaW5raW5nKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5tX2Jsb2Nrc1tpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9ibG9ja0lu
ZGV4XS5nZXQoKTsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBpbmxpbmVTdGFja0VudHJ5
Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9ibG9jazsKICAgICAgICAgQVNTRVJUKCFibG9jay0+aXNM
aW5rZWQpOwogICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmxhc3QoKTsKICAgICAgICAgQVNT
RVJUKG5vZGUtPm9wKCkgPT0gSnVtcCk7Ci0gICAgICAgIEFTU0VSVChub2RlLT50YWtlbkJsb2Nr
SW5kZXgoKSA9PSBOb0Jsb2NrKTsKLSAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9ja0luZGV4KG1f
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPnRha2VuQmxvY2so
KSA9PSAwKTsKKyAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9jayhibG9jay5nZXQoKSk7CiAgICAg
ICAgIGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzRWFybHlSZXR1
cm5MaW5raW5nID0gZmFsc2U7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICBibG9jay0+
aXNMaW5rZWQgPSB0cnVlOwogI2VuZGlmCiAgICAgfQogICAgIAotICAgIC8vIE5lZWQgdG8gY3Jl
YXRlIGEgbmV3IGJhc2ljIGJsb2NrIGZvciB0aGUgY29udGludWF0aW9uIGF0IHRoZSBjYWxsZXIu
Ci0gICAgT3duUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRQdHIobmV3IEJhc2ljQmxvY2so
bmV4dE9mZnNldCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzKSk7Ci0jaWYgREZHX0VOQUJM
RShERUJVR19WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJDcmVhdGluZyBpbmxpbmUgZXBpbG9ndWUg
YmFzaWMgYmxvY2sgJXAsICMlenUgZm9yICVwIGJjIyV1IGF0IGlubGluZSBkZXB0aCAldS5cbiIs
IGJsb2NrLmdldCgpLCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSwgbV9pbmxpbmVTdGFja1RvcC0+
ZXhlY3V0YWJsZSgpLCBtX2N1cnJlbnRJbmRleCwgQ29kZU9yaWdpbjo6aW5saW5lRGVwdGhGb3JD
YWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKCkpKTsKLSNlbmRpZgogICAgIG1fY3VycmVudEJsb2Nr
ID0gYmxvY2suZ2V0KCk7Ci0gICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5t
X2Jsb2NrTGlua2luZ1RhcmdldHMuaXNFbXB0eSgpIHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxp
bmVTdGFja1RvcC0+bV9jYWxsZXItPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCldLT5ieXRl
Y29kZUJlZ2luIDwgbmV4dE9mZnNldCk7Ci0gICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXIt
Pm1fdW5saW5rZWRCbG9ja3MuYXBwZW5kKFVubGlua2VkQmxvY2sobV9ncmFwaC5tX2Jsb2Nrcy5z
aXplKCkpKTsKLSAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdU
YXJnZXRzLmFwcGVuZChtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSk7Ci0gICAgbV9ncmFwaC5tX2Js
b2Nrcy5hcHBlbmQoYmxvY2sucmVsZWFzZSgpKTsKKyAgICBBU1NFUlQobV9pbmxpbmVTdGFja1Rv
cC0+bV9jYWxsZXItPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5pc0VtcHR5KCkgfHwgbV9pbmxpbmVT
dGFja1RvcC0+bV9jYWxsZXItPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCktPmJ5dGVjb2Rl
QmVnaW4gPCBuZXh0T2Zmc2V0KTsKKyAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91
bmxpbmtlZEJsb2Nrcy5hcHBlbmQoVW5saW5rZWRCbG9jayhibG9jay5nZXQoKSkpOworICAgIG1f
aW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuYXBwZW5kKGJs
b2NrLmdldCgpKTsKKyAgICBtX2dyYXBoLmFwcGVuZEJsb2NrKGJsb2NrKTsKICAgICBwcmVwYXJl
VG9QYXJzZUJsb2NrKCk7CiAgICAgCiAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSByZXR1cm4gYW5k
IGNvbnRpbnVlIHRvIGdlbmVyYXRlIGNvZGUgZm9yIHRoZSBjYWxsZXIsIGJ1dApAQCAtMjc3Myw3
ICsyNzc2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fY3VycmVudEluZGV4ICsgdGFibGUuYnJh
bmNoT2Zmc2V0c1tpXTsKICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRo
cm91Z2gpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGRh
dGEuY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UoanNOdW1iZXIodGFibGUubWluICsgaSksIHRhcmdl
dCkpOworICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKFN3aXRjaENhc2U6OndpdGhC
eXRlY29kZUluZGV4KGpzTnVtYmVyKHRhYmxlLm1pbiArIGkpLCB0YXJnZXQpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIG1fZ3JhcGgubV9zd2l0Y2hEYXRhLmFwcGVuZChkYXRhKTsKICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJm1fZ3JhcGgubV9zd2l0Y2hEYXRh
Lmxhc3QoKSksIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CkBAIC0yNzkz
LDcgKzI3OTYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZCgK
LSAgICAgICAgICAgICAgICAgICAgU3dpdGNoQ2FzZShMYXp5SlNWYWx1ZTo6c2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKHRhYmxlLm1pbiArIGkpLCB0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICAgICAg
U3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgoTGF6eUpTVmFsdWU6OnNpbmdsZUNoYXJhY3Rl
clN0cmluZyh0YWJsZS5taW4gKyBpKSwgdGFyZ2V0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBtX2dyYXBoLm1fc3dpdGNoRGF0YS5hcHBlbmQoZGF0YSk7CiAgICAgICAgICAgICBhZGRU
b0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZtX2dyYXBoLm1fc3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwpAQCAtMjgxMyw3ICsyODE2LDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAg
IGlmICh0YXJnZXQgPT0gZGF0YS5mYWxsVGhyb3VnaCkKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoCi0gICAgICAgICAgICAg
ICAgICAgIFN3aXRjaENhc2UoTGF6eUpTVmFsdWU6Omtub3duU3RyaW5nSW1wbChpdGVyLT5rZXku
Z2V0KCkpLCB0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgU3dpdGNoQ2FzZTo6d2l0aEJ5
dGVjb2RlSW5kZXgoTGF6eUpTVmFsdWU6Omtub3duU3RyaW5nSW1wbChpdGVyLT5rZXkuZ2V0KCkp
LCB0YXJnZXQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fZ3JhcGgubV9zd2l0Y2hE
YXRhLmFwcGVuZChkYXRhKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8o
Jm1fZ3JhcGgubV9zd2l0Y2hEYXRhLmxhc3QoKSksIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKSk7CkBAIC0zMTYyLDcgKzMxNjUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgfQogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5r
QmxvY2soQmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxCbG9ja0luZGV4PiYgcG9zc2libGVUYXJn
ZXRzKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKEJhc2ljQmxvY2sqIGJsb2NrLCBW
ZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpCiB7CiAgICAgQVNTRVJUKCFibG9j
ay0+aXNMaW5rZWQpOwogICAgIEFTU0VSVCghYmxvY2stPmlzRW1wdHkoKSk7CkBAIC0zMTcxLDI0
ICszMTc0LDI0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayhCYXNpY0Jsb2MKICAg
ICAKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICBjYXNlIEp1bXA6Ci0gICAgICAgIG5v
ZGUtPnNldFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNl
dChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5n
KCkpKTsKKyAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9jayhibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0
KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+dGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmco
KSkpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIkxp
bmtlZCBiYXNpYyBibG9jayAlcCB0byAlcCwgIyV1LlxuIiwgYmxvY2ssIG1fZ3JhcGgubV9ibG9j
a3Nbbm9kZS0+dGFrZW5CbG9ja0luZGV4KCldLmdldCgpLCBub2RlLT50YWtlbkJsb2NrSW5kZXgo
KSk7CisgICAgICAgIGRhdGFMb2dGKCJMaW5rZWQgYmFzaWMgYmxvY2sgJXAgdG8gJXAsICMldS5c
biIsIGJsb2NrLCBub2RlLT50YWtlbkJsb2NrKCksIG5vZGUtPnRha2VuQmxvY2soKS0+aW5kZXgp
OwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEJyYW5jaDoKLSAg
ICAgICAgbm9kZS0+c2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVj
b2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+dGFrZW5CeXRlY29kZU9mZnNldER1cmlu
Z1BhcnNpbmcoKSkpOwotICAgICAgICBub2RlLT5zZXROb3RUYWtlbkJsb2NrSW5kZXgobV9ncmFw
aC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT5ub3RU
YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CisgICAgICAgIG5vZGUtPnNldFRh
a2VuQmxvY2soYmxvY2tGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnRh
a2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKKyAgICAgICAgbm9kZS0+c2V0Tm90
VGFrZW5CbG9jayhibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+
bm90VGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOwogI2lmIERGR19FTkFCTEUo
REVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIkxpbmtlZCBiYXNpYyBibG9jayAlcCB0
byAlcCwgIyV1IGFuZCAlcCwgIyV1LlxuIiwgYmxvY2ssIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS0+
dGFrZW5CbG9ja0luZGV4KCldLmdldCgpLCBub2RlLT50YWtlbkJsb2NrSW5kZXgoKSwgbV9ncmFw
aC5tX2Jsb2Nrc1tub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5vZGUtPm5vdFRh
a2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkxpbmtlZCBiYXNpYyBibG9jayAl
cCB0byAlcCwgIyV1IGFuZCAlcCwgIyV1LlxuIiwgYmxvY2ssIG5vZGUtPnRha2VuQmxvY2soKSwg
bm9kZS0+dGFrZW5CbG9jaygpLT5pbmRleCwgbm9kZS0+bm90VGFrZW5CbG9jaygpLCBub2RlLT5u
b3RUYWtlbkJsb2NrKCktPmluZGV4KTsKICNlbmRpZgogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBTd2l0Y2g6CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPnN3aXRj
aERhdGEoKS0+Y2FzZXMuc2l6ZSgpOyBpLS07KQotICAgICAgICAgICAgbm9kZS0+c3dpdGNoRGF0
YSgpLT5jYXNlc1tpXS50YXJnZXQgPSBtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNl
dChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnN3aXRjaERhdGEoKS0+Y2FzZXNbaV0udGFyZ2V0KTsK
LSAgICAgICAgbm9kZS0+c3dpdGNoRGF0YSgpLT5mYWxsVGhyb3VnaCA9IG1fZ3JhcGguYmxvY2tJ
bmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+c3dpdGNoRGF0YSgp
LT5mYWxsVGhyb3VnaCk7CisgICAgICAgICAgICBub2RlLT5zd2l0Y2hEYXRhKCktPmNhc2VzW2ld
LnRhcmdldCA9IGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT5z
d2l0Y2hEYXRhKCktPmNhc2VzW2ldLnRhcmdldEJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgIG5v
ZGUtPnN3aXRjaERhdGEoKS0+ZmFsbFRocm91Z2ggPSBibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KHBv
c3NpYmxlVGFyZ2V0cywgbm9kZS0+c3dpdGNoRGF0YSgpLT5mYWxsVGhyb3VnaEJ5dGVjb2RlSW5k
ZXgoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgpAQCAtMzIwMywx
MSArMzIwNiwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jCiAj
ZW5kaWYKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrcyhWZWN0b3I8VW5saW5r
ZWRCbG9jaz4mIHVubGlua2VkQmxvY2tzLCBWZWN0b3I8QmxvY2tJbmRleD4mIHBvc3NpYmxlVGFy
Z2V0cykKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9ja3MoVmVjdG9yPFVubGlua2VkQmxv
Y2s+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRz
KQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdW5saW5rZWRCbG9ja3Muc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgaWYgKHVubGlua2VkQmxvY2tzW2ldLm1fbmVlZHNOb3JtYWxMaW5raW5n
KSB7Ci0gICAgICAgICAgICBsaW5rQmxvY2sobV9ncmFwaC5tX2Jsb2Nrc1t1bmxpbmtlZEJsb2Nr
c1tpXS5tX2Jsb2NrSW5kZXhdLmdldCgpLCBwb3NzaWJsZVRhcmdldHMpOworICAgICAgICAgICAg
bGlua0Jsb2NrKHVubGlua2VkQmxvY2tzW2ldLm1fYmxvY2ssIHBvc3NpYmxlVGFyZ2V0cyk7CiAg
ICAgICAgICAgICB1bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzTm9ybWFsTGlua2luZyA9IGZhbHNl
OwogICAgICAgICB9CiAgICAgfQpAQCAtMzIzNSw3ICszMjM4LDcgQEAgQnl0ZUNvZGVQYXJzZXI6
OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgIEJ5dGVDb2RlUGFyc2VyKiBieXRlQ29kZVBh
cnNlciwKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywKICAgICBDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2ssCi0gICAgQmxvY2tJbmRleCBjYWxsc2l0ZUJsb2NrSGVhZCwKKyAgICBCYXNpY0Jsb2Nr
KiBjYWxsc2l0ZUJsb2NrSGVhZCwKICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUsIC8vIE51bGwgaWYg
dGhpcyBpcyBhIGNsb3N1cmUgY2FsbC4KICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmV0dXJuVmFsdWVW
UiwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQsCkBAIC0zNDY0LDkg
KzM0NjcsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiAjZW5kaWYK
ICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmJ5dGVjb2RlQmVnaW4gPSBtX2N1
cnJlbnRJbmRleDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBPd25QdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jayhtX2N1
cnJlbnRJbmRleCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzKSk7CisgICAgICAgICAgICAg
ICAgICAgIFJlZlB0cjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKG5ldyBCYXNpY0Jsb2Nr
KG1fY3VycmVudEluZGV4LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMpKTsKICNpZiBERkdf
RU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDcmVh
dGluZyBiYXNpYyBibG9jayAlcCwgIyV6dSBmb3IgJXAgYmMjJXUgYXQgaW5saW5lIGRlcHRoICV1
LlxuIiwgYmxvY2suZ2V0KCksIG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpLCBtX2lubGluZVN0YWNr
VG9wLT5leGVjdXRhYmxlKCksIG1fY3VycmVudEluZGV4LCBDb2RlT3JpZ2luOjppbmxpbmVEZXB0
aEZvckNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUoKSkpOworICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nRigiQ3JlYXRpbmcgYmFzaWMgYmxvY2sgJXAsICMlenUgZm9yICVwIGJjIyV1IGF0IGlu
bGluZSBkZXB0aCAldS5cbiIsIGJsb2NrLmdldCgpLCBtX2dyYXBoLm51bUJsb2NrcygpLCBtX2lu
bGluZVN0YWNrVG9wLT5leGVjdXRhYmxlKCksIG1fY3VycmVudEluZGV4LCBDb2RlT3JpZ2luOjpp
bmxpbmVEZXB0aEZvckNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUoKSkpOwogI2VuZGlmCiAgICAg
ICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2suZ2V0KCk7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgYXNzZXJ0aW9uIGNoZWNrcyB0d28gdGhpbmdzOgpAQCAtMzQ3NSwx
MyArMzQ3OCwxMyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiAgICAg
ICAgICAgICAgICAgICAgIC8vIDIpIElmIHRoZSBieXRlY29kZUJlZ2luIGlzIGVxdWFsIHRvIHRo
ZSBjdXJyZW50SW5kZXgsIHRoZW4gd2UgZmFpbGVkIHRvIGRvCiAgICAgICAgICAgICAgICAgICAg
IC8vICAgIGEgcGVlcGhvbGUgY29hbGVzY2luZyBvZiB0aGlzIGJsb2NrIGluIHRoZSBpZiBzdGF0
ZW1lbnQgYWJvdmUuIFNvLCB3ZSdyZQogICAgICAgICAgICAgICAgICAgICAvLyAgICBnZW5lcmF0
aW5nIHN1Ym9wdGltYWwgY29kZSBhbmQgbGVhdmluZyBtb3JlIHdvcmsgZm9yIHRoZSBDRkcgc2lt
cGxpZmllci4KLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1f
dW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpIHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFj
a1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4XS0+Ynl0ZWNvZGVCZWdp
biA8IG1fY3VycmVudEluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1Rv
cC0+bV91bmxpbmtlZEJsb2Nrcy5hcHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLm1fYmxvY2tz
LnNpemUoKSkpOwotICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2Nr
TGlua2luZ1RhcmdldHMuYXBwZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuaXNF
bXB0eSgpIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLT5ieXRl
Y29kZUJlZ2luIDwgbV9jdXJyZW50SW5kZXgpOworICAgICAgICAgICAgICAgICAgICBtX2lubGlu
ZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmFwcGVuZChVbmxpbmtlZEJsb2NrKGJsb2NrLmdl
dCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5r
aW5nVGFyZ2V0cy5hcHBlbmQoYmxvY2suZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAvLyBU
aGUgZmlyc3QgYmxvY2sgaXMgZGVmaW5pdGVseSBhbiBPU1IgdGFyZ2V0LgotICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAg
ICBpZiAoIW1fZ3JhcGgubnVtQmxvY2tzKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBibG9j
ay0+aXNPU1JUYXJnZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fYmxv
Y2tzLmFwcGVuZChibG9jay5yZWxlYXNlKCkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmFwcGVuZEJsb2NrKGJsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgcHJlcGFyZVRvUGFyc2VC
bG9jaygpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTM1NDEsMTAgKzM1
NDQsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIH0KICAgICAKICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBBU1NFUlQoYmxvY2sp
OwogICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkgewotICAgICAgICAgICAgbV9ncmFw
aC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5jbGVhcigpOworICAgICAgICAgICAgbV9ncmFwaC5raWxs
QmxvY2soYmxvY2spOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDggKzYzLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHN3aXRjaCAoYmxvY2st
Pmxhc3QoKS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgSnVtcDogewogICAgICAgICAg
ICAgICAgICAgICAvLyBTdWNjZXNzb3Igd2l0aCBvbmUgcHJlZGVjZXNzb3IgLT4gbWVyZ2UuCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29y
KGJsb2NrLCAwKV0tPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9j
aywgMCldLT5tX3ByZWRlY2Vzc29yc1swXQorICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCldLT5wcmVkZWNlc3NvcnMuc2l6
ZSgpID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fYmxv
Y2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKV0tPnByZWRlY2Vzc29yc1swXQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID09IGJsb2NrSW5kZXgpOwogI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2dGKCJDRkdTaW1wbGlmeTogSnVtcCBtZXJnZSBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1Llxu
IiwKQEAgLTgwLDEwICs4MCwxMCBAQCBwdWJsaWM6CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIk5vdCBq
dW1wIG1lcmdpbmcgb24gQmxvY2sgIyV1IHRvIEJsb2NrICMldSBiZWNhdXNlIHByZWRlY2Vzc29y
cyA9ICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIG1fZ3Jh
cGguc3VjY2Vzc29yKGJsb2NrLCAwKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9j
aywgMCldLT5tX3ByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5z
dWNjZXNzb3IoYmxvY2ssIDApXS0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dGKCIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCIjJXUiLCBtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKV0tPm1f
cHJlZGVjZXNzb3JzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigi
IyV1IiwgbV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCldLT5wcmVk
ZWNlc3NvcnNbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwogI2VuZGlmCkBAIC0xMDUsNyArMTA1LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb25kaXRpb24gPSBicmFuY2hDb25k
aXRpb24oYmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNv
bmRpdGlvbildLmdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldEJsb2Nr
LT5tX3ByZWRlY2Vzc29ycy5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHRhcmdldEJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKICNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIkNGR1NpbXBsaWZ5OiBLbm93biBjb25kaXRpb24gKCVzKSBicmFuY2ggbWVy
Z2Ugb24gQmxvY2sgIyV1IHRvIEJsb2NrICMldSwgamV0dGlzb25pbmcgQmxvY2sgIyV1LlxuIiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA/ICJ0cnVlIiA6
ICJmYWxzZSIsCkBAIC0yMDgsNyArMjA4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbdGFyZ2V0QmxvY2tJbmRleF0uZ2V0KCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRCbG9jay0+bV9w
cmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
YXJnZXRCbG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CiAjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDRkdTaW1wbGlmeTogS25v
d24gY29uc3RhbnQgKCIsIHZhbHVlLCAiKSBzd2l0Y2ggbWVyZ2Ugb24gIiwKQEAgLTI4MywxNCAr
MjgzLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBtX2dyYXBoLmludmFsaWRhdGVDRkco
KTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAKLSAgICAg
ICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQo
KTsKKyAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNSZWFjaGFibGUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGtpbGxVbnJlYWNoYWJsZShibG9ja0luZGV4KTsKKyAgICAgICAg
ICAgICAgICAgICAga2lsbFVucmVhY2hhYmxlKGJsb2NrKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTMwOCw3ICszMDgsNyBAQCBwcml2YXRlOgog
ICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbdGFyZ2V0
QmxvY2tJbmRleF0uZ2V0KCk7CiAgICAgICAgIEFTU0VSVCh0YXJnZXRCbG9jayk7CiAgICAgICAg
IEFTU0VSVCh0YXJnZXRCbG9jay0+aXNSZWFjaGFibGUpOwotICAgICAgICBpZiAodGFyZ2V0Qmxv
Y2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CisgICAgICAgIGlmICh0YXJnZXRCbG9j
ay0+cHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgZGF0YUxvZ0YoCiAgICAgICAgICAgICAgICAg
IkNGR1NpbXBsaWZ5OiBCcmFuY2gvU3dpdGNoIHRvIHNhbWUgc3VjY2Vzc29yIG1lcmdlIG9uIEJs
b2NrICMldSB0byBCbG9jayAjJXUuXG4iLApAQCAtMzM0LDEwICszMzQsOCBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBraWxsVW5yZWFjaGFibGUoQmxvY2tJbmRleCBi
bG9ja0luZGV4KQorICAgIHZvaWQga2lsbFVucmVhY2hhYmxlKEJhc2ljQmxvY2sqIGJsb2NrKQog
ICAgIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2Nr
SW5kZXhdLmdldCgpOwotICAgICAgICAKICAgICAgICAgQVNTRVJUKGJsb2NrKTsKICAgICAgICAg
QVNTRVJUKCFibG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICAKQEAgLTM0Niw3ICszNDQsNyBA
QCBwcml2YXRlOgogICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXpl
KCk7IG5vZGVJbmRleC0tOykKICAgICAgICAgICAgIG1fZ3JhcGgubV9hbGxvY2F0b3IuZnJlZShi
bG9jay0+YXQobm9kZUluZGV4KSk7CiAgICAgICAgIAotICAgICAgICBtX2dyYXBoLm1fYmxvY2tz
W2Jsb2NrSW5kZXhdLmNsZWFyKCk7CisgICAgICAgIG1fZ3JhcGgua2lsbEJsb2NrKGJsb2NrKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBrZWVwT3BlcmFuZEFsaXZlKEJhc2ljQmxvY2sqIGJsb2Nr
LCBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgaW50
IG9wZXJhbmQpCkBAIC0zODEsMTEgKzM3OSwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGpldHRpc29uZWRCbG9ja0luZGV4LCBibG9ja0luZGV4KTsKICNlbmRpZgogICAgICAgICBCYXNp
Y0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2pldHRpc29uZWRCbG9j
a0luZGV4XS5nZXQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGpldHRpc29u
ZWRCbG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChq
ZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldICE9IGJsb2NrSW5kZXgpCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29ycy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGpldHRpc29uZWRCbG9jay0+cHJlZGVjZXNz
b3JzW2ldICE9IGJsb2NrSW5kZXgpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICBqZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldID0gamV0dGlzb25lZEJsb2Nr
LT5tX3ByZWRlY2Vzc29ycy5sYXN0KCk7Ci0gICAgICAgICAgICBqZXR0aXNvbmVkQmxvY2stPm1f
cHJlZGVjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGpldHRpc29uZWRCbG9jay0+
cHJlZGVjZXNzb3JzW2ldID0gamV0dGlzb25lZEJsb2NrLT5wcmVkZWNlc3NvcnMubGFzdCgpOwor
ICAgICAgICAgICAgamV0dGlzb25lZEJsb2NrLT5wcmVkZWNlc3NvcnMucmVtb3ZlTGFzdCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC00NDksOSArNDQ3LDkgQEAg
cHJpdmF0ZToKICAgICAgICAgLy8gYWZmZWN0ZWQuCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1fZ3JhcGgubnVtU3VjY2Vzc29ycyhmaXJzdEJsb2NrKTsgaS0tOykgewogICAgICAgICAgICAg
QmFzaWNCbG9jayogc3VjY2Vzc29yID0gbV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3Nv
cihmaXJzdEJsb2NrLCBpKV0uZ2V0KCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAw
OyBqIDwgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29ycy5zaXplKCk7ICsraikgewotICAgICAgICAg
ICAgICAgIGlmIChzdWNjZXNzb3ItPm1fcHJlZGVjZXNzb3JzW2pdID09IHNlY29uZEJsb2NrSW5k
ZXgpCi0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnNbal0gPSBm
aXJzdEJsb2NrSW5kZXg7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc3Vj
Y2Vzc29yLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAo
c3VjY2Vzc29yLT5wcmVkZWNlc3NvcnNbal0gPT0gc2Vjb25kQmxvY2tJbmRleCkKKyAgICAgICAg
ICAgICAgICAgICAgc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnNbal0gPSBmaXJzdEJsb2NrSW5kZXg7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJldmlz
aW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRp
bmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwOSw3ICs0MDksNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgcGhpU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGVudHJ5Lm1fYmxvY2s7Ci0gICAgICAgICAgICBQcmVk
ZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5tX3ByZWRlY2Vzc29yczsKKyAgICAg
ICAgICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vzc29y
czsKICAgICAgICAgICAgIE5vZGUqIGN1cnJlbnRQaGkgPSBlbnRyeS5tX3BoaTsKICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBjdXJyZW50UGhpLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKICAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IGVudHJ5Lm1faW5kZXg7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5jcHAJKHJldmlz
aW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkgKzQ0LDkgQEAgdm9pZCBEb21pbmF0b3JzOjpjb21w
dXRlKEdyYXBoJiBncmFwaCkKIHsKICAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBuYWl2ZSBkb21p
bmF0b3Igc29sdmVyLgogICAgIAotICAgIEFTU0VSVChncmFwaC5tX2Jsb2Nrc1swXS0+bV9wcmVk
ZWNlc3NvcnMuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoZ3JhcGguYmxvY2soMCktPnByZWRlY2Vz
c29ycy5pc0VtcHR5KCkpOwogICAgIAotICAgIHVuc2lnbmVkIG51bUJsb2NrcyA9IGdyYXBoLm1f
YmxvY2tzLnNpemUoKTsKKyAgICB1bnNpZ25lZCBudW1CbG9ja3MgPSBncmFwaC5udW1CbG9ja3Mo
KTsKICAgICAKICAgICBpZiAobnVtQmxvY2tzID4gbV9yZXN1bHRzLnNpemUoKSkgewogICAgICAg
ICBtX3Jlc3VsdHMuZ3JvdyhudW1CbG9ja3MpOwpAQCAtNjAsMTMgKzYwLDEzIEBAIHZvaWQgRG9t
aW5hdG9yczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCiAgICAgCiAgICAgbV9zY3JhdGNoLmNsZWFy
QWxsKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS07KSB7Ci0gICAgICAg
IGlmICghZ3JhcGgubV9ibG9ja3NbaV0pCisgICAgICAgIGlmICghZ3JhcGguYmxvY2soaSkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgbV9zY3JhdGNoLnNldChpKTsKICAgICB9CiAg
ICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQmxvY2tzOyBpLS0gPiAxOykgewotICAgICAg
ICBpZiAoIWdyYXBoLm1fYmxvY2tzW2ldIHx8IGdyYXBoLm1fYmxvY2tzW2ldLT5tX3ByZWRlY2Vz
c29ycy5pc0VtcHR5KCkpCisgICAgICAgIGlmICghZ3JhcGguYmxvY2soaSkgfHwgZ3JhcGguYmxv
Y2soaSktPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX3Jlc3VsdHNbaV0u
Y2xlYXJBbGwoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9yZXN1bHRzW2ldLnNldCht
X3NjcmF0Y2gpOwpAQCAtODgsMTQgKzg4LDE0IEBAIHZvaWQgRG9taW5hdG9yczo6Y29tcHV0ZShH
cmFwaCYgZ3JhcGgpCiAKIGJvb2wgRG9taW5hdG9yczo6aXRlcmF0ZUZvckJsb2NrKEdyYXBoJiBn
cmFwaCwgQmxvY2tJbmRleCBpKQogewotICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGgubV9i
bG9ja3NbaV0uZ2V0KCk7CisgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhpKTsK
ICAgICBpZiAoIWJsb2NrKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGJsb2NrLT5t
X3ByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCisgICAgaWYgKGJsb2NrLT5wcmVkZWNlc3NvcnMuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9zY3JhdGNoLnNldChtX3Jlc3Vs
dHNbYmxvY2stPm1fcHJlZGVjZXNzb3JzWzBdXSk7Ci0gICAgZm9yICh1bnNpZ25lZCBqID0gYmxv
Y2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgai0tID4gMTspCi0gICAgICAgIG1fc2NyYXRjaC5m
aWx0ZXIobV9yZXN1bHRzW2Jsb2NrLT5tX3ByZWRlY2Vzc29yc1tqXV0pOworICAgIG1fc2NyYXRj
aC5zZXQobV9yZXN1bHRzW2Jsb2NrLT5wcmVkZWNlc3NvcnNbMF0tPmluZGV4XSk7CisgICAgZm9y
ICh1bnNpZ25lZCBqID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGotLSA+IDE7KQorICAg
ICAgICBtX3NjcmF0Y2guZmlsdGVyKG1fcmVzdWx0c1tibG9jay0+cHJlZGVjZXNzb3JzW2pdLT5p
bmRleF0pOwogICAgIG1fc2NyYXRjaC5zZXQoaSk7CiAgICAgcmV0dXJuIG1fcmVzdWx0c1tpXS5z
ZXRBbmRDaGVjayhtX3NjcmF0Y2gpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb21pbmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb21pbmF0b3JzLmgJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMCArNDUsMTAg
QEAgcHVibGljOgogICAgIAogICAgIHZvaWQgY29tcHV0ZShHcmFwaCYgZ3JhcGgpOwogICAgIAot
ICAgIGJvb2wgZG9taW5hdGVzKEJsb2NrSW5kZXggZnJvbSwgQmxvY2tJbmRleCB0bykgY29uc3QK
KyAgICBib29sIGRvbWluYXRlcyhCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29u
c3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotICAgICAgICByZXR1cm4gbV9y
ZXN1bHRzW3RvXS5nZXQoZnJvbSk7CisgICAgICAgIHJldHVybiBtX3Jlc3VsdHNbdG8tPmluZGV4
XS5nZXQoZnJvbS0+aW5kZXgpOwogICAgIH0KICAgICAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2OSwz
MyArMjY5LDMxIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAg
ICBvdXQucHJpbnQoIlxuIik7CiB9CiAKLXZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwg
UGhpTm9kZUR1bXBNb2RlIHBoaU5vZGVEdW1wTW9kZSkKK3ZvaWQgR3JhcGg6OmR1bXBCbG9ja0hl
YWRlcihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIEJhc2ljQmxvY2sqIGJs
b2NrLCBQaGlOb2RlRHVtcE1vZGUgcGhpTm9kZUR1bXBNb2RlKQogewotICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0KLSAgICBvdXQucHJpbnQocHJl
Zml4LCAiQmxvY2sgIyIsIGJsb2NrSW5kZXgsICIgKCIsIGJsb2NrLT5hdCgwKS0+Y29kZU9yaWdp
biwgIik6ICIsIGJsb2NrLT5pc1JlYWNoYWJsZSA/ICIiIDogIihza2lwcGVkKSIsIGJsb2NrLT5p
c09TUlRhcmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6ICIiLCAiXG4iKTsKKyAgICBvdXQucHJpbnQo
cHJlZml4LCAiQmxvY2sgIyIsIGJsb2NrLT5ibG9ja0luZGV4LCAiICgiLCBibG9jay0+YXQoMCkt
PmNvZGVPcmlnaW4sICIpOiAiLCBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIoc2tpcHBlZCki
LCBibG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIiwgIlxuIik7CiAgICAg
b3V0LnByaW50KHByZWZpeCwgIiAgUHJlZGVjZXNzb3JzOiIpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKQotICAgICAgICBvdXQu
cHJpbnQoIiAjIiwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG91dC5w
cmludCgiICMiLCBibG9jay0+cHJlZGVjZXNzb3JzW2ldKTsKICAgICBvdXQucHJpbnQoIlxuIik7
CiAgICAgaWYgKG1fZG9taW5hdG9ycy5pc1ZhbGlkKCkpIHsKICAgICAgICAgb3V0LnByaW50KHBy
ZWZpeCwgIiAgRG9taW5hdGVkIGJ5OiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5k
b21pbmF0ZXMoaSwgYmxvY2tJbmRleCkpCisgICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5k
b21pbmF0ZXMoaSwgYmxvY2stPmJsb2NrSW5kZXgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgb3V0LnByaW50KCIgIyIsIGkpOwogICAgICAgICB9CiAgICAgICAgIG91
dC5wcmludCgiXG4iKTsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVzOiIp
OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5kb21pbmF0ZXMoYmxvY2tJbmRleCwgaSkp
CisgICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5kb21pbmF0ZXMoYmxvY2stPmJsb2NrSW5k
ZXgsIGkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgb3V0LnByaW50
KCIgIyIsIGkpOwogICAgICAgICB9CiAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICB9CiAg
ICAgaWYgKG1fbmF0dXJhbExvb3BzLmlzVmFsaWQoKSkgewotICAgICAgICBpZiAoY29uc3QgTmF0
dXJhbExvb3AqIGxvb3AgPSBtX25hdHVyYWxMb29wcy5oZWFkZXJPZihibG9ja0luZGV4KSkgewor
ICAgICAgICBpZiAoY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX25hdHVyYWxMb29wcy5oZWFk
ZXJPZihibG9jay0+YmxvY2tJbmRleCkpIHsKICAgICAgICAgICAgIG91dC5wcmludChwcmVmaXgs
ICIgIExvb3AgaGVhZGVyLCBjb250YWluczoiKTsKICAgICAgICAgICAgIFZlY3RvcjxCbG9ja0lu
ZGV4PiBzb3J0ZWRCbG9ja0xpc3Q7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbG9vcC0+c2l6ZSgpOyArK2kpCkBAIC0zOTQsMjkgKzM5MiwyNSBAQCB2b2lkIEdyYXBoOjpk
ZXRocmVhZCgpCiAgICAgbV9mb3JtID0gTG9hZFN0b3JlOwogfQogCi12b2lkIEdyYXBoOjpoYW5k
bGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXgg
YmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCkKK3ZvaWQgR3JhcGg6OmhhbmRs
ZVN1Y2Nlc3NvcihWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEJhc2ljQmxvY2sq
IGJsb2NrLCBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IpCiB7Ci0gICAgQmFzaWNCbG9jayogc3VjY2Vz
c29yID0gbV9ibG9ja3Nbc3VjY2Vzc29ySW5kZXhdLmdldCgpOwogICAgIGlmICghc3VjY2Vzc29y
LT5pc1JlYWNoYWJsZSkgewogICAgICAgICBzdWNjZXNzb3ItPmlzUmVhY2hhYmxlID0gdHJ1ZTsK
LSAgICAgICAgd29ya2xpc3QuYXBwZW5kKHN1Y2Nlc3NvckluZGV4KTsKKyAgICAgICAgd29ya2xp
c3QuYXBwZW5kKHN1Y2Nlc3Nvcik7CiAgICAgfQogICAgIAotICAgIHN1Y2Nlc3Nvci0+bV9wcmVk
ZWNlc3NvcnMuYXBwZW5kKGJsb2NrSW5kZXgpOworICAgIHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3Jz
LmFwcGVuZChibG9jayk7CiB9CiAKIHZvaWQgR3JhcGg6OmRldGVybWluZVJlYWNoYWJpbGl0eSgp
CiB7Ci0gICAgVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiB3b3JrbGlzdDsKLSAgICB3b3JrbGlzdC5h
cHBlbmQoMCk7Ci0gICAgbV9ibG9ja3NbMF0tPmlzUmVhY2hhYmxlID0gdHJ1ZTsKKyAgICBWZWN0
b3I8QmFzaWNCbG9jayosIDE2PiB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5hcHBlbmQoYmxvY2so
MCkpOworICAgIGJsb2NrKDApLT5pc1JlYWNoYWJsZSA9IHRydWU7CiAgICAgd2hpbGUgKCF3b3Jr
bGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgQmxvY2tJbmRleCBpbmRleCA9IHdvcmtsaXN0Lmxh
c3QoKTsKLSAgICAgICAgd29ya2xpc3QucmVtb3ZlTGFzdCgpOwotICAgICAgICAKLSAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7CisgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbnVtU3VjY2Vzc29ycyhibG9jayk7IGktLTspCi0gICAgICAgICAgICBoYW5kbGVTdWNj
ZXNzb3Iod29ya2xpc3QsIGluZGV4LCBzdWNjZXNzb3IoYmxvY2ssIGkpKTsKKyAgICAgICAgICAg
IGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgYmxvY2ssIHN1Y2Nlc3NvcihibG9jaywgaSkpOwog
ICAgIH0KIH0KIApAQCAtNDI3LDcgKzQyMSw3IEBAIHZvaWQgR3JhcGg6OnJlc2V0UmVhY2hhYmls
aXR5KCkKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBibG9jay0+aXNSZWFjaGFibGUgPSBmYWxzZTsKLSAgICAgICAgYmxvY2stPm1fcHJlZGVjZXNz
b3JzLmNsZWFyKCk7CisgICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMuY2xlYXIoKTsKICAgICB9
CiAgICAgCiAgICAgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw3ICsxNjksNyBAQCBw
dWJsaWM6CiAgICAgLy8gQ29kZUJsb2NrIGlzIG9wdGlvbmFsLCBidXQgbWF5IGFsbG93IGFkZGl0
aW9uYWwgaW5mb3JtYXRpb24gdG8gYmUgZHVtcGVkIChlLmcuIElkZW50aWZpZXIgbmFtZXMpLgog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCkpOwogICAgIGVudW0g
UGhpTm9kZUR1bXBNb2RlIHsgRHVtcExpdmVQaGlzT25seSwgRHVtcEFsbFBoaXMgfTsKLSAgICB2
b2lkIGR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmxv
Y2tJbmRleCwgUGhpTm9kZUR1bXBNb2RlKTsKKyAgICB2b2lkIGR1bXBCbG9ja0hlYWRlcihQcmlu
dFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmFzaWNCbG9jayosIFBoaU5vZGVEdW1wTW9k
ZSk7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiwgRWRnZSk7CiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKik7CiAgICAgc3RhdGljIGludCBh
bW91bnRPZk5vZGVXaGl0ZVNwYWNlKE5vZGUqKTsKQEAgLTE3OSw4ICsxNzksNiBAQCBwdWJsaWM6
CiAgICAgLy8gcHJlY2VkaW5nIG5vZGUuIFJldHVybnMgdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcHJp
bnRlZC4KICAgICBib29sIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciog
cHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlKTsKIAotICAgIEJs
b2NrSW5kZXggYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCbG9ja0luZGV4PiYg
YmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKTsKLQogICAgIFNwZWN1bGF0ZWRUeXBlIGdl
dEpTQ29uc3RhbnRTcGVjdWxhdGlvbihOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2Nr
KSk7CkBAIC00NTUsMTUgKzQ1MywzNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2NvZGVC
bG9jay0+dXNlc0FyZ3VtZW50cygpOwogICAgIH0KICAgICAKKyAgICBCbG9ja0luZGV4IG51bUJs
b2NrcygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sq
IGJsb2NrKEJsb2NrSW5kZXggYmxvY2tJbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7IH0KKworICAgIHZvaWQgYXBwZW5kQmxvY2soUGFzc1JlZlB0cjxCYXNp
Y0Jsb2NrPiBiYXNpY0Jsb2NrKQorICAgIHsKKyAgICAgICAgYmFzaWNCbG9jay0+YmxvY2tJbmRl
eCA9IG1fYmxvY2tzLnNpemUoKTsKKyAgICAgICAgbV9ibG9ja3MuYXBwZW5kKGJhc2ljQmxvY2sp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGtpbGxCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgp
CisgICAgeworICAgICAgICBtX2Jsb2Nrc1tibG9ja0luZGV4XS5jbGVhcigpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGtpbGxCbG9jayhCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrKQorICAgIHsKKyAg
ICAgICAga2lsbEJsb2NrKGJhc2ljQmxvY2stPmluZGV4KTsKKyAgICB9CisgICAgCiAgICAgdW5z
aWduZWQgbnVtU3VjY2Vzc29ycyhCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7CiAgICAgICAgIHJl
dHVybiBibG9jay0+bGFzdCgpLT5udW1TdWNjZXNzb3JzKCk7CiAgICAgfQotICAgIEJsb2NrSW5k
ZXggc3VjY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICBCYXNp
Y0Jsb2NrKiBzdWNjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4KQogICAg
IHsKICAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3NvcihpbmRleCk7CiAgICAg
fQotICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yRm9yQ29uZGl0aW9uKEJhc2ljQmxvY2sqIGJsb2Nr
LCBib29sIGNvbmRpdGlvbikKKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JGb3JDb25kaXRpb24o
QmFzaWNCbG9jayogYmxvY2ssIGJvb2wgY29uZGl0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOwogICAgIH0K
QEAgLTY1OSw3ICs2NzYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgTm9kZUFsbG9jYXRvciYgbV9h
bGxvY2F0b3I7CiAKLSAgICBWZWN0b3I8IE93blB0cjxCYXNpY0Jsb2NrPiAsIDg+IG1fYmxvY2tz
OworICAgIFZlY3RvcjwgUmVmUHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVj
dG9yPEVkZ2UsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOwogICAgIFZlY3RvcjxTdG9yYWdlQWNjZXNz
RGF0YT4gbV9zdG9yYWdlQWNjZXNzRGF0YTsKICAgICBWZWN0b3I8Tm9kZSosIDg+IG1fYXJndW1l
bnRzOwpAQCAtNjgzLDcgKzcwMCw3IEBAIHB1YmxpYzoKICAgICBSZWZDb3VudFN0YXRlIG1fcmVm
Q291bnRTdGF0ZTsKIHByaXZhdGU6CiAgICAgCi0gICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVj
dG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxv
Y2tJbmRleCBzdWNjZXNzb3JJbmRleCk7CisgICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9y
PEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBCYXNpY0Jsb2NrKiwgQmFzaWNCbG9jayogc3Vj
Y2Vzc29yKTsKICAgICAKICAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkSW1tZWRpYXRlU2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihOb2RlKiBhZGQsIGJvb2wgdmFyaWFibGVTaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyLCBOb2RlKiBpbW1lZGlhdGUpCiAgICAgewpAQCAtNzMyLDI3ICs3NDksNiBAQCBwcml2
YXRlOgogICAgIH0KIH07CiAKLWNsYXNzIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayB7Ci1wdWJs
aWM6Ci0gICAgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKEdyYXBoJiBncmFwaCkKLSAgICAgICAg
OiBtX2dyYXBoKGdyYXBoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgb3BlcmF0
b3IoKShCbG9ja0luZGV4KiBibG9ja0luZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fZ3JhcGgubV9ibG9ja3NbKmJsb2NrSW5kZXhdLT5ieXRlY29kZUJlZ2luOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBHcmFwaCYgbV9ncmFwaDsKLX07Ci0KLWlubGluZSBCbG9ja0luZGV4IEdy
YXBoOjpibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPEJsb2NrSW5kZXg+JiBsaW5r
aW5nVGFyZ2V0cywgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbikKLXsKLSAgICByZXR1cm4gKmJpbmFy
eVNlYXJjaDxCbG9ja0luZGV4LCB1bnNpZ25lZD4obGlua2luZ1RhcmdldHMsIGxpbmtpbmdUYXJn
ZXRzLnNpemUoKSwgYnl0ZWNvZGVCZWdpbiwgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKCp0aGlz
KSk7Ci19Ci0KICNkZWZpbmUgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIHRo
aW5nVG9EbykgZG8geyAgICAgICAgICAgIFwKICAgICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYg
KF9ub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29w
cy5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TmF0dXJhbExvb3BzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMjYgKzYwLDI2IEBAIHZvaWQg
TmF0dXJhbExvb3BzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKICAgICAKICAgICBtX2xvb3BzLnJl
c2l6ZSgwKTsKICAgICAKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdyYXBoLm1f
YmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IGdyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAg
aWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZ3JhcGgubnVtU3VjY2Vzc29ycyhibG9jayk7IGktLTspIHsKLSAgICAg
ICAgICAgIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXggPSBncmFwaC5zdWNjZXNzb3IoYmxvY2ss
IGkpOwotICAgICAgICAgICAgaWYgKCFncmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKHN1Y2Nl
c3NvckluZGV4LCBibG9ja0luZGV4KSkKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nv
ciA9IGdyYXBoLnN1Y2Nlc3NvcihibG9jaywgaSk7CisgICAgICAgICAgICBpZiAoIWdyYXBoLm1f
ZG9taW5hdG9ycy5kb21pbmF0ZXMoc3VjY2Vzc29yLCBibG9jaykpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSBtX2xvb3BzLnNpemUoKTsgai0tOykgewotICAgICAgICAgICAgICAg
IGlmIChtX2xvb3BzW2ldLmhlYWRlcigpID09IHN1Y2Nlc3NvckluZGV4KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fbG9vcHNbaV0uYWRkQmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICAg
ICAgaWYgKG1fbG9vcHNbaV0uaGVhZGVyKCkgPT0gc3VjY2Vzc29yKSB7CisgICAgICAgICAgICAg
ICAgICAgIG1fbG9vcHNbaV0uYWRkQmxvY2soYmxvY2spOwogICAgICAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKGZvdW5kKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgTmF0
dXJhbExvb3AgbG9vcChzdWNjZXNzb3JJbmRleCk7Ci0gICAgICAgICAgICBsb29wLmFkZEJsb2Nr
KGJsb2NrSW5kZXgpOworICAgICAgICAgICAgTmF0dXJhbExvb3AgbG9vcChzdWNjZXNzb3IpOwor
ICAgICAgICAgICAgbG9vcC5hZGRCbG9jayhibG9jayk7CiAgICAgICAgICAgICBtX2xvb3BzLmFw
cGVuZChsb29wKTsKICAgICAgICAgfQogICAgIH0KQEAgLTg4LDggKzg4LDggQEAgdm9pZCBOYXR1
cmFsTG9vcHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQogICAgICAgICBkYXRhTG9nKCJBZnRlciBi
b290c3RyYXA6ICIsICp0aGlzLCAiXG4iKTsKICAgICAKICAgICBGYXN0Qml0VmVjdG9yIHNlZW5C
bG9ja3M7Ci0gICAgVmVjdG9yPEJsb2NrSW5kZXgsIDQ+IGJsb2NrV29ya2xpc3Q7Ci0gICAgc2Vl
bkJsb2Nrcy5yZXNpemUoZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKKyAgICBWZWN0b3I8QmFzaWNC
bG9jayosIDQ+IGJsb2NrV29ya2xpc3Q7CisgICAgc2VlbkJsb2Nrcy5yZXNpemUoZ3JhcGgubnVt
QmxvY2tzKCkpOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9vcHMuc2l6ZSgpOyBp
LS07KSB7CiAgICAgICAgIE5hdHVyYWxMb29wJiBsb29wID0gbV9sb29wc1tpXTsKQEAgLTEwMSwz
MCArMTAxLDI3IEBAIHZvaWQgTmF0dXJhbExvb3BzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKICAg
ICAgICAgICAgIGRhdGFMb2coIkRlYWxpbmcgd2l0aCBsb29wICIsIGxvb3AsICJcbiIpOwogICAg
ICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbG9vcC5zaXplKCk7IGotLTspIHsKLSAg
ICAgICAgICAgIHNlZW5CbG9ja3Muc2V0KGxvb3Bbal0pOworICAgICAgICAgICAgc2VlbkJsb2Nr
cy5zZXQobG9vcFtqXS0+aW5kZXgpOwogICAgICAgICAgICAgYmxvY2tXb3JrbGlzdC5hcHBlbmQo
bG9vcFtqXSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHdoaWxlICghYmxvY2tXb3Jr
bGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGJs
b2NrV29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
YmxvY2tXb3JrbGlzdC50YWtlTGFzdCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRGVhbGluZyB3aXRoICMiLCBi
bG9ja0luZGV4LCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRGVhbGluZyB3
aXRoICIsICpibG9jaywgIlxuIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChibG9j
a0luZGV4ID09IGxvb3AuaGVhZGVyKCkpCisgICAgICAgICAgICBpZiAoYmxvY2sgPT0gbG9vcC5o
ZWFkZXIoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQo
KTsKLSAgICAgICAgICAgIEFTU0VSVChibG9jayk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5tX3ByZWRlY2Vzc29ycy5zaXplKCk7IGotLTspIHsK
LSAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHByZWRlY2Vzc29ySW5kZXggPSBibG9jay0+bV9w
cmVkZWNlc3NvcnNbal07Ci0gICAgICAgICAgICAgICAgaWYgKHNlZW5CbG9ja3MuZ2V0KHByZWRl
Y2Vzc29ySW5kZXgpKQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPnByZWRl
Y2Vzc29ycy5zaXplKCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVk
ZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNbal07CisgICAgICAgICAgICAgICAgaWYgKHNl
ZW5CbG9ja3MuZ2V0KHByZWRlY2Vzc29yLT5pbmRleCkpCiAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGxvb3AuYWRkQmxvY2so
cHJlZGVjZXNzb3JJbmRleCk7Ci0gICAgICAgICAgICAgICAgYmxvY2tXb3JrbGlzdC5hcHBlbmQo
cHJlZGVjZXNzb3JJbmRleCk7Ci0gICAgICAgICAgICAgICAgc2VlbkJsb2Nrcy5zZXQocHJlZGVj
ZXNzb3JJbmRleCk7CisgICAgICAgICAgICAgICAgbG9vcC5hZGRCbG9jayhwcmVkZWNlc3NvcjsK
KyAgICAgICAgICAgICAgICBibG9ja1dvcmtsaXN0LmFwcGVuZChwcmVkZWNlc3Nvcik7CisgICAg
ICAgICAgICAgICAgc2VlbkJsb2Nrcy5zZXQocHJlZGVjZXNzb3ItPmluZGV4KTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEzMywxMiArMTMwLDEyIEBAIHZvaWQgTmF0dXJh
bExvb3BzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKICAgICAgICAgZGF0YUxvZygiUmVzdWx0czog
IiwgKnRoaXMsICJcbiIpOwogfQogCi1WZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBOYXR1cmFs
TG9vcHM6Omxvb3BzT2YoQmxvY2tJbmRleCBibG9ja0luZGV4KSBjb25zdAorVmVjdG9yPGNvbnN0
IE5hdHVyYWxMb29wKj4gTmF0dXJhbExvb3BzOjpsb29wc09mKEJhc2ljQmxvY2sqIGJsb2NrKSBj
b25zdAogewogICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IHJlc3VsdDsKICAgICAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvb3BzLnNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAo
bV9sb29wc1tpXS5jb250YWlucyhibG9ja0luZGV4KSkKKyAgICAgICAgaWYgKG1fbG9vcHNbaV0u
Y29udGFpbnMoYmxvY2spKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgmbV9sb29wc1tpXSk7
CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFs
TG9vcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVy
YWxMb29wcy5oCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05hdHVyYWxMb29wcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwyMCArNDIsMjAgQEAgcHVi
bGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgTmF0dXJhbExvb3AoQmxvY2tJbmRleCBoZWFk
ZXIpCisgICAgTmF0dXJhbExvb3AoQmFzaWNCbG9jayogaGVhZGVyKQogICAgICAgICA6IG1faGVh
ZGVyKGhlYWRlcikKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgYWRkQmxvY2soQmxvY2tJ
bmRleCBibG9jaykgeyBtX2JvZHkuYXBwZW5kKGJsb2NrKTsgfQorICAgIHZvaWQgYWRkQmxvY2so
QmFzaWNCbG9jayogYmxvY2spIHsgbV9ib2R5LmFwcGVuZChibG9jayk7IH0KICAgICAKLSAgICBC
bG9ja0luZGV4IGhlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGVyOyB9CisgICAgQmFzaWNC
bG9jayogaGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFkZXI7IH0KICAgICAKICAgICB1bnNp
Z25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ib2R5LnNpemUoKTsgfQotICAgIEJsb2NrSW5k
ZXggYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9ib2R5W2ldOyB9Ci0gICAgQmxvY2tJ
bmRleCBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CisgICAg
QmFzaWNCbG9jayogYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9ib2R5W2ldOyB9Cisg
ICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBhdChp
KTsgfQogICAgIAotICAgIGJvb2wgY29udGFpbnMoQmxvY2tJbmRleCBibG9jaykgY29uc3QKKyAg
ICBib29sIGNvbnRhaW5zKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAogICAgIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9ib2R5LnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgaWYg
KG1fYm9keVtpXSA9PSBibG9jaykKQEAgLTY3LDggKzY3LDggQEAgcHVibGljOgogICAgIAogICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogcHJpdmF0ZToKLSAgICBCbG9ja0luZGV4
IG1faGVhZGVyOwotICAgIFZlY3RvcjxCbG9ja0luZGV4LCA0PiBtX2JvZHk7CisgICAgQmFzaWNC
bG9jayogbV9oZWFkZXI7CisgICAgVmVjdG9yPEJsb2NrQmxvY2sqLCA0PiBtX2JvZHk7CiB9Owog
CiBjbGFzcyBOYXR1cmFsTG9vcHMgOiBwdWJsaWMgQW5hbHlzaXM8TmF0dXJhbExvb3BzPiB7CkBA
IC05MSwxNyArOTEsMTcgQEAgcHVibGljOgogICAgIAogICAgIC8vIFJldHVybiBlaXRoZXIgbnVs
bCBpZiB0aGUgYmxvY2sgaXNuJ3QgYSBsb29wIGhlYWRlciwgb3IgdGhlCiAgICAgLy8gbG9vcCBp
dCBiZWxvbmdzIHRvLgotICAgIGNvbnN0IE5hdHVyYWxMb29wKiBoZWFkZXJPZihCbG9ja0luZGV4
IGJsb2NrSW5kZXgpIGNvbnN0CisgICAgY29uc3QgTmF0dXJhbExvb3AqIGhlYWRlck9mKEJhc2lj
QmxvY2sqIGJsb2NrKSBjb25zdAogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9s
b29wcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIGlmIChtX2xvb3BzW2ldLmhlYWRlcigp
ID09IGJsb2NrSW5kZXgpCisgICAgICAgICAgICBpZiAobV9sb29wc1tpXS5oZWFkZXIoKSA9PSBi
bG9jaykKICAgICAgICAgICAgICAgICByZXR1cm4gJm1fbG9vcHNbaV07CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAogICAgIC8vIFJldHVybiB0aGUgaW5kaWNlcyBv
ZiBhbGwgbG9vcHMgdGhpcyBiZWxvbmdzIHRvLgotICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9v
cCo+IGxvb3BzT2YoQmxvY2tJbmRleCBibG9ja0luZGV4KSBjb25zdDsKKyAgICBWZWN0b3I8Y29u
c3QgTmF0dXJhbExvb3AqPiBsb29wc09mKEJhc2ljQmxvY2sqKSBjb25zdDsKIAogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNTIzMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK3N0cnVjdCBCYXNpY0Jsb2NrOworCiBzdHJ1
Y3QgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEgewogICAgIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1
Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmU7CkBAIC04MCwxOCArODIsMjggQEAg
c3RydWN0IE5ld0FycmF5QnVmZmVyRGF0YSB7CiAvLyB2YWx1ZXMuCiBzdHJ1Y3QgU3dpdGNoQ2Fz
ZSB7CiAgICAgU3dpdGNoQ2FzZSgpCi0gICAgICAgIDogdGFyZ2V0KE5vQmxvY2spCisgICAgICAg
IDogdGFyZ2V0KDApCiAgICAgewogICAgIH0KICAgICAKLSAgICBTd2l0Y2hDYXNlKExhenlKU1Zh
bHVlIHZhbHVlLCBCbG9ja0luZGV4IHRhcmdldCkKKyAgICBTd2l0Y2hDYXNlKExhenlKU1ZhbHVl
IHZhbHVlLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCiAgICAgICAgIDogdmFsdWUodmFsdWUpCiAgICAg
ICAgICwgdGFyZ2V0KHRhcmdldCkKICAgICB7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBTd2l0
Y2hDYXNlIHdpdGhCeXRlY29kZUluZGV4KExhenlKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4KQorICAgIHsKKyAgICAgICAgU3dpdGNoQ2FzZSByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC52YWx1ZSA9IHZhbHVlOworICAgICAgICByZXN1bHQudGFyZ2V0ID0gYml0d2lzZV9jYXN0
PEJhc2ljQmxvY2sqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlSW5kZXgpKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgdGFyZ2V0Qnl0
ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHRhcmdl
dCk7IH0KKyAgICAKICAgICBMYXp5SlNWYWx1ZSB2YWx1ZTsKLSAgICBCbG9ja0luZGV4IHRhcmdl
dDsKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQ7CiB9OwogCiBlbnVtIFN3aXRjaEtpbmQgewpAQCAt
MTEzLDcgKzEyNSw3IEBAIHN0cnVjdCBTd2l0Y2hEYXRhIHsKICAgICB9CiAgICAgCiAgICAgVmVj
dG9yPFN3aXRjaENhc2U+IGNhc2VzOwotICAgIEJsb2NrSW5kZXggZmFsbFRocm91Z2g7CisgICAg
QmFzaWNCbG9jayogZmFsbFRocm91Z2g7CiAgICAgU3dpdGNoS2luZCBraW5kOwogICAgIHVuc2ln
bmVkIHN3aXRjaFRhYmxlSW5kZXg7CiAgICAgYm9vbCBkaWRVc2VKdW1wVGFibGU7CkBAIC03NDMs
MjggKzc1NSwyOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzI7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgc2V0VGFrZW5CbG9ja0luZGV4KEJsb2NrSW5kZXggYmxvY2tJ
bmRleCkKKyAgICB2b2lkIHNldFRha2VuQmxvY2soQmFzaWNCbG9jayogYmxvY2spCiAgICAgewog
ICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7Ci0gICAgICAgIG1fb3BJbmZv
ID0gYmxvY2tJbmRleDsKKyAgICAgICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihibG9jayk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0Tm90VGFrZW5CbG9ja0luZGV4KEJs
b2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB2b2lkIHNldE5vdFRha2VuQmxvY2soQmFzaWNCbG9j
ayogYmxvY2spCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSk7Ci0gICAgICAgIG1f
b3BJbmZvMiA9IGJsb2NrSW5kZXg7CisgICAgICAgIG1fb3BJbmZvMiA9IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgQmxvY2tJbmRleCB0YWtlbkJsb2Nr
SW5kZXgoKQorICAgIEJhc2ljQmxvY2sqIHRha2VuQmxvY2tJbmRleCgpCiAgICAgewogICAgICAg
ICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7Ci0gICAgICAgIHJldHVybiBtX29wSW5m
bzsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcEluZm8pOwog
ICAgIH0KICAgICAKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuQmxvY2tJbmRleCgpCisgICAgQmFz
aWNCbG9jayogbm90VGFrZW5CbG9ja0luZGV4KCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0Jy
YW5jaCgpKTsKLSAgICAgICAgcmV0dXJuIG1fb3BJbmZvMjsKKyAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcEluZm8yKTsKICAgICB9CiAgICAgCiAgICAgU3dpdGNo
RGF0YSogc3dpdGNoRGF0YSgpCkBAIC03ODcsNyArNzk5LDcgQEAgc3RydWN0IE5vZGUgewogICAg
ICAgICB9CiAgICAgfQogICAgIAotICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KQorICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKICAgICB7CiAg
ICAgICAgIGlmIChpc1N3aXRjaCgpKSB7CiAgICAgICAgICAgICBpZiAoaW5kZXggPCBzd2l0Y2hE
YXRhKCktPmNhc2VzLnNpemUoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDE0ICsyMjUsMTQgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBtdXN0IGV4aXN0IGEgcHJlZGVj
ZXNzb3IgYmxvY2sgdGhhdCBoYXMgdGhpcyBub2RlIGluZGV4IGluCiAgICAgICAgICAgICAgICAg
ICAgIC8vIGl0cyB0YWlsIHZhcmlhYmxlcy4KICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwg
YmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytrKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBwcmV2QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrLT5tX3By
ZWRlY2Vzc29yc1trXV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
QmxvY2ssIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSksIHByZXZCbG9jayk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgoQmxvY2ssIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSks
IHByZXZCbG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGsgPSAwOyBrIDwgYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7ICsraykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJldkJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
c1tibG9jay0+cHJlZGVjZXNzb3JzW2tdXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChCbG9jaywgYmxvY2stPnByZWRlY2Vzc29yc1trXSksIHByZXZCbG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoQmxvY2ssIGJsb2NrLT5wcmVkZWNlc3Nv
cnNba10pLCBwcmV2QmxvY2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGUqIHByZXZOb2RlID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2Nh
bCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgUGhpIHRoYXQgaXMg
bm90IHJlZmVycmluZyB0byAqdGhpcyogYmxvY2sgdGhlbiBhbGwgcHJlZGVjZXNzb3JzCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBtdXN0IGhhdmUgdGhhdCBsb2NhbCBhdmFpbGFibGUuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrSW5kZXgsIEJsb2Nr
LCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrSW5kZXgsIEJsb2NrLCBibG9jay0+cHJlZGVj
ZXNzb3JzW2tdKSwgcHJldk5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChw
cmV2Tm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CkBAIC0yNDMsMTEgKzI0MywxMSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2Nh
bCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2
Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2Fs
LCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IE1vdkhpbnQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBNb3ZIaW50QW5k
Q2hlY2sKQEAgLTI1OSw3ICsyNTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGl0IGNhbm5vdCByZWZlciBpbnRvIHRoaXMgYmxvY2su
Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRl
Y2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJldkJsb2NrLT5pc0luQmxvY2soZWRnZS5ub2RlKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPnByZWRl
Y2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJldkJsb2NrLT5pc0luQmxvY2soZWRnZS5ub2RlKCkp
KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2UpLCBmb3VuZCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206048</attachid>
            <date>2013-07-03 19:58:47 -0700</date>
            <delta_ts>2013-07-03 22:22:46 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>77587</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCB2b2lkIEFic3Ry
YWN0U3RhdGU6OmJlZ2luQmFzaWNCbG9jayhCYXNpCiAKIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5p
dGlhbGl6ZShHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgQmFzaWNCbG9jayogcm9vdCA9IGdyYXBoLm1f
YmxvY2tzWzBdLmdldCgpOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBncmFwaC5ibG9jaygwKTsK
ICAgICByb290LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKICAgICByb290LT5jZmFIYXNWaXNp
dGVkID0gZmFsc2U7CiAgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKQEAgLTEx
OCw4ICsxMTgsOCBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdyCiAg
ICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKICAgICAgICAg
cm9vdC0+dmFsdWVzQXRUYWlsLmxvY2FsKGkpLmNsZWFyKCk7CiAgICAgfQotICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gMSA7IGJsb2NrSW5kZXggPCBncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLm1f
YmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMSA7IGJsb2NrSW5kZXggPCBncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAg
ICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCFibG9j
ay0+aXNSZWFjaGFibGUpCkBAIC0xODAyLDI0ICsxODAyLDI0IEBAIGlubGluZSBib29sIEFic3Ry
YWN0U3RhdGU6Om1lcmdlVG9TdWNjZXMKICAgICBjYXNlIEp1bXA6IHsKICAgICAgICAgQVNTRVJU
KGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9u
KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRh
dGFMb2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwtPnRha2Vu
QmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2Nr
ICIsICp0ZXJtaW5hbC0+dGFrZW5CbG9jaygpLCAiLlxuIik7CiAjZW5kaWYKLSAgICAgICAgcmV0
dXJuIG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2Nr
SW5kZXgoKV0uZ2V0KCkpOworICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgdGVybWlu
YWwtPnRha2VuQmxvY2soKSk7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEJyYW5jaDogewog
ICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uICE9IEludmFsaWRC
cmFuY2hEaXJlY3Rpb24pOwogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwtPnRha2VuQmxvY2tJbmRleCgp
KTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICIsICp0ZXJtaW5h
bC0+dGFrZW5CbG9jaygpLCAiLlxuIik7CiAjZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxvY2st
PmNmYUJyYW5jaERpcmVjdGlvbiAhPSBUYWtlRmFsc2UpCi0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2NrSW5k
ZXgoKV0uZ2V0KCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCB0
ZXJtaW5hbC0+dGFrZW5CbG9jaygpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1
LlxuIiwgdGVybWluYWwtPm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZygi
ICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICIsICp0ZXJtaW5hbC0+bm90VGFrZW5CbG9jaygpLCAi
LlxuIik7CiAjZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlv
biAhPSBUYWtlVHJ1ZSkKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywg
Z3JhcGgubV9ibG9ja3NbdGVybWluYWwtPm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIHRlcm1pbmFsLT5ub3RUYWtl
bkJsb2NrKCkpOwogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CiAgICAgICAgIApAQCAt
MTgyOCw5ICsxODI4LDkgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nl
cwogICAgICAgICAvLyB3ZSdyZSBub3QuIEhvd2V2ZXIgSSBzb21laG93IGRvdWJ0IHRoYXQgdGhp
cyB3aWxsIGV2ZXIgYmUgYSBiaWcgZGVhbC4KICAgICAgICAgQVNTRVJUKGJhc2ljQmxvY2stPmNm
YUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsKICAgICAgICAgU3dp
dGNoRGF0YSogZGF0YSA9IHRlcm1pbmFsLT5zd2l0Y2hEYXRhKCk7Ci0gICAgICAgIGJvb2wgY2hh
bmdlZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW2RhdGEtPmZhbGxUaHJvdWdo
XS5nZXQoKSk7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGRhdGEt
PmZhbGxUaHJvdWdoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6
ZSgpOyBpLS07KQotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBncmFw
aC5tX2Jsb2Nrc1tkYXRhLT5jYXNlc1tpXS50YXJnZXRdLmdldCgpKTsKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKICAgICAg
ICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQyLDggKzE0Miw4IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIC8vIEZpZ3VyZSBvdXQg
d2hpY2ggdmFyaWFibGVzIGFyZSBsaXZlLCB1c2luZyBhIGNvbnNlcnZhdGl2ZSBhcHByb3hpbWF0
aW9uIG9mCiAgICAgICAgIC8vIGxpdmVuZXNzLgotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9j
a0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9j
a3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewor
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwg
YmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKQEAgLTE2NCw4ICsxNjQsOCBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIHVzZWQgb25seSBmb3IgR2V0QnlWYWwgYW5kIEdldEFycmF5TGVuZ3Ro
IGFjY2Vzc2VzLiBBdCB0aGUgc2FtZSB0aW1lLAogICAgICAgICAvLyBpZGVudGlmeSB1c2VzIG9m
IENyZWF0ZUFyZ3VtZW50cyB0aGF0IGFyZSBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBhcmd1bWVu
dHMKICAgICAgICAgLy8gYmVpbmcgYWxpYXNlZCBvbmx5IHRvIHZhcmlhYmxlcyB0aGF0IHNhdGlz
ZnkgdGhlc2UgY29uc3RyYWludHMuCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgp
IHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+
c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewpAQCAtMzUyLDggKzM1Miw4IEBAIHB1YmxpYzoKICAg
ICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhcyByZXF1aXJpbmcgY3JlYXRpb24uIFRoaXMgaXMgYSBw
cm9wZXJ0eSBvZiBTZXRMb2NhbHMgdG8KICAgICAgICAgLy8gdmFyaWFibGVzIHRoYXQgYXJlIG5l
aXRoZXIgdGhlIGNvcnJlY3QgYXJndW1lbnRzIHJlZ2lzdGVyIG5vciBhcmUgbWFya2VkIGFzCiAg
ICAgICAgIC8vIGJlaW5nIGFyZ3VtZW50cy1hbGlhc2VkLgotICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsg
KytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRl
eCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJs
b2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKQEAgLTQyOCw4ICs0MjgsOCBA
QCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1f
Z3JhcGgpOwogICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewot
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5k
ZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm51bUJsb2NrczsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgp
OyBpbmRleEluQmxvY2srKykgewpAQCAtNjYxLDggKzY2MSw4IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJs
b2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5C
bG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDggKzQ0LDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkK
ICAgICB7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
KyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJs
b2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTUyMzM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDExICs0MCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAK
IGNsYXNzIEdyYXBoOwogCi10eXBlZGVmIFZlY3RvciA8QmxvY2tJbmRleCwgMj4gUHJlZGVjZXNz
b3JMaXN0OwordHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsK
IAotc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZSosIDg+IHsKK3N0cnVjdCBCYXNpY0Js
b2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2NrPiwgVmVjdG9yPE5vZGUqLCA4PiB7CiAgICAgQmFz
aWNCbG9jayh1bnNpZ25lZCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVu
c2lnbmVkIG51bUxvY2FscykKICAgICAgICAgOiBieXRlY29kZUJlZ2luKGJ5dGVjb2RlQmVnaW4p
CisgICAgICAgICwgaW5kZXgoTm9CbG9jaykKICAgICAgICAgLCBpc09TUlRhcmdldChmYWxzZSkK
ICAgICAgICAgLCBjZmFIYXNWaXNpdGVkKGZhbHNlKQogICAgICAgICAsIGNmYVNob3VsZFJldmlz
aXQoZmFsc2UpCkBAIC03NCw2ICs3NSwxMyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxO
b2RlKiwgOD4gewogICAgICAgICB2YWx1ZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fs
cyk7CiAgICAgfQogICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rl
cy5zaXplKCk7IH0KKyAgICBOb2RlKiBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rl
c1tpXTsgfQorICAgIE5vZGUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0
KGkpOyB9CisgICAgTm9kZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIGF0KHNpemUoKSAtIDEpOyB9
CisgICAgCisgICAgdm9pZCBhcHBlbmQoTm9kZSogbm9kZSkgeyBtX25vZGVzLmFwcGVuZChub2Rl
KTsgfQorICAgIAogICAgIHNpemVfdCBudW1Ob2RlcygpIGNvbnN0IHsgcmV0dXJuIHBoaXMuc2l6
ZSgpICsgc2l6ZSgpOyB9CiAgICAgTm9kZSogbm9kZShzaXplX3QgaSkgY29uc3QKICAgICB7CkBA
IC0xMDEsMTUgKzEwOSwzMyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlKiwgOD4g
ewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAorICAgIHVuc2lnbmVkIG51bVN1
Y2Nlc3NvcnMoKSB7IHJldHVybiBsYXN0KCktPm51bVN1Y2Nlc3NvcnMoKTsgfQorICAgIAorICAg
IEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBsYXN0KCktPnN1Y2Nlc3NvcihpbmRleCk7CisgICAgfQorICAgIEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvckZvckNvbmRpdGlvbihib29sIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIHJldHVy
biBsYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOworICAgIH0KKwogI2Rl
ZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5
cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKICAg
ICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhcHBlbmROb2RlKEdy
YXBoJiwgU3BlY3VsYXRlZFR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CiAgICAg
REZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCiAj
dW5kZWYgREZHX0RFRklORV9BUFBFTkRfTk9ERQogICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KCIjIiwgaW5kZXgpOwor
ICAgIH0KKyAgICAKICAgICAvLyBUaGlzIHZhbHVlIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgYmxv
Y2sgbGlua2luZyBhbmQgT1NSIGVudHJ5LiBJdCBpcyBtb3N0bHkgbWVhbmluZ2xlc3MKICAgICAv
LyBmb3Igb3RoZXIgcHVycG9zZXMgZHVlIHRvIGlubGluaW5nLgogICAgIHVuc2lnbmVkIGJ5dGVj
b2RlQmVnaW47CiAgICAgCisgICAgQmxvY2tJbmRleCBpbmRleDsKKyAgICAKICAgICBib29sIGlz
T1NSVGFyZ2V0OwogICAgIGJvb2wgY2ZhSGFzVmlzaXRlZDsKICAgICBib29sIGNmYVNob3VsZFJl
dmlzaXQ7CkBAIC0xMjIsMzAgKzE0OCw0MyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxO
b2RlKiwgOD4gewogICAgIGJvb2wgaXNSZWFjaGFibGU7CiAgICAgCiAgICAgVmVjdG9yPE5vZGUq
PiBwaGlzOwotICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKKyAgICBQcmVkZWNl
c3Nvckxpc3QgcHJlZGVjZXNzb3JzOwogICAgIAogICAgIE9wZXJhbmRzPE5vZGUqLCBOb2RlUG9p
bnRlclRyYWl0cz4gdmFyaWFibGVzQXRIZWFkOwogICAgIE9wZXJhbmRzPE5vZGUqLCBOb2RlUG9p
bnRlclRyYWl0cz4gdmFyaWFibGVzQXRUYWlsOwogICAgIAogICAgIE9wZXJhbmRzPEFic3RyYWN0
VmFsdWU+IHZhbHVlc0F0SGVhZDsKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNB
dFRhaWw7CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPE5vZGUqLCA4PiBtX25vZGVzOwogfTsKIAog
c3RydWN0IFVubGlua2VkQmxvY2sgewotICAgIEJsb2NrSW5kZXggbV9ibG9ja0luZGV4OworICAg
IEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgYm9vbCBtX25lZWRzTm9ybWFsTGlua2luZzsKICAg
ICBib29sIG1fbmVlZHNFYXJseVJldHVybkxpbmtpbmc7CiAgICAgCiAgICAgVW5saW5rZWRCbG9j
aygpIHsgfQogICAgIAotICAgIGV4cGxpY2l0IFVubGlua2VkQmxvY2soQmxvY2tJbmRleCBibG9j
a0luZGV4KQotICAgICAgICA6IG1fYmxvY2tJbmRleChibG9ja0luZGV4KQorICAgIGV4cGxpY2l0
IFVubGlua2VkQmxvY2soQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9j
aykKICAgICAgICAgLCBtX25lZWRzTm9ybWFsTGlua2luZyh0cnVlKQogICAgICAgICAsIG1fbmVl
ZHNFYXJseVJldHVybkxpbmtpbmcoZmFsc2UpCiAgICAgewogICAgIH0KIH07CiAgICAgCitzdGF0
aWMgaW5saW5lIGdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayhCYXNpY0Jsb2NrKiogYmFzaWNCbG9j
aykKK3sKKyAgICByZXR1cm4gKCpiYXNpY0Jsb2NrKS0+Ynl0ZWNvZGVCZWdpbjsKK30KKworc3Rh
dGljIGlubGluZSBCYXNpY0Jsb2NrKiBibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCYXNp
Y0Jsb2NrKj4mIGxpbmtpbmdUYXJnZXRzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKQoreworICAg
IHJldHVybiAqYmluYXJ5U2VhcmNoPEJhc2ljQmxvY2sqLCB1bnNpZ25lZD4obGlua2luZ1Rhcmdl
dHMsIGxpbmtpbmdUYXJnZXRzLnNpemUoKSwgYnl0ZWNvZGVCZWdpbiwgZ2V0Qnl0ZWNvZGVCZWdp
bkZvckJsb2NrKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw4
ICsxODMsOCBAQCBwcml2YXRlOgogICAgIC8vIFBhcnNlIGEgc2luZ2xlIGJhc2ljIGJsb2NrIG9m
IGJ5dGVjb2RlIGluc3RydWN0aW9ucy4KICAgICBib29sIHBhcnNlQmxvY2sodW5zaWduZWQgbGlt
aXQpOwogICAgIC8vIExpbmsgYmxvY2sgc3VjY2Vzc29ycy4KLSAgICB2b2lkIGxpbmtCbG9jayhC
YXNpY0Jsb2NrKiwgVmVjdG9yPEJsb2NrSW5kZXg+JiBwb3NzaWJsZVRhcmdldHMpOwotICAgIHZv
aWQgbGlua0Jsb2NrcyhWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHVubGlua2VkQmxvY2tzLCBWZWN0
b3I8QmxvY2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0cyk7CisgICAgdm9pZCBsaW5rQmxvY2soQmFz
aWNCbG9jayosIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CisgICAgdm9p
ZCBsaW5rQmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3MsIFZlY3Rv
cjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgLy8gTGluayBHZXRMb2NhbCAm
IFNldExvY2FsIG5vZGVzLCB0byBlbnN1cmUgbGl2ZSB2YWx1ZXMgYXJlIGdlbmVyYXRlZC4KICAg
ICBlbnVtIFBoaVN0YWNrVHlwZSB7CiAgICAgICAgIExvY2FsUGhpU3RhY2ssCkBAIC0xMDM5LDEz
ICsxMDM5LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIFBvdGVudGlhbCBibG9jayBsaW5raW5n
IHRhcmdldHMuIE11c3QgYmUgc29ydGVkIGJ5IGJ5dGVjb2RlQmVnaW4sIGFuZAogICAgICAgICAv
LyBjYW5ub3QgaGF2ZSB0d28gYmxvY2tzIHRoYXQgaGF2ZSB0aGUgc2FtZSBieXRlY29kZUJlZ2lu
LiBGb3IgdGhpcyB2ZXJ5CiAgICAgICAgIC8vIHJlYXNvbiwgdGhpcyBpcyBub3QgZXF1aXZhbGVu
dCB0byAKLSAgICAgICAgVmVjdG9yPEJsb2NrSW5kZXg+IG1fYmxvY2tMaW5raW5nVGFyZ2V0czsK
KyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBtX2Jsb2NrTGlua2luZ1RhcmdldHM7CiAgICAg
ICAgIAogICAgICAgICAvLyBJZiB0aGUgY2FsbHNpdGUncyBiYXNpYyBibG9jayB3YXMgc3BsaXQg
aW50byB0d28sIHRoZW4gdGhpcyB3aWxsIGJlCiAgICAgICAgIC8vIHRoZSBoZWFkIG9mIHRoZSBj
YWxsc2l0ZSBibG9jay4gSXQgbmVlZHMgaXRzIHN1Y2Nlc3NvcnMgbGlua2VkIHRvIHRoZQogICAg
ICAgICAvLyBtX3VubGlua2VkQmxvY2tzLCBidXQgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kOiB0
aGVyZSdzIG5vIHdheSBmb3IKICAgICAgICAgLy8gYW55IGJsb2NrcyBpbiBtX3VubGlua2VkQmxv
Y2tzIHRvIGp1bXAgYmFjayBpbnRvIHRoaXMgYmxvY2suCi0gICAgICAgIEJsb2NrSW5kZXggbV9j
YWxsc2l0ZUJsb2NrSGVhZDsKKyAgICAgICAgQmFzaWNCbG9jayogbV9jYWxsc2l0ZUJsb2NrSGVh
ZDsKICAgICAgICAgCiAgICAgICAgIC8vIERvZXMgdGhlIGNhbGxzaXRlIGJsb2NrIGhlYWQgbmVl
ZCBsaW5raW5nPyBUaGlzIGlzIHR5cGljYWxseSB0cnVlCiAgICAgICAgIC8vIGJ1dCB3aWxsIGJl
IGZhbHNlIGZvciB0aGUgbWFjaGluZSBjb2RlIGJsb2NrJ3MgaW5saW5lIHN0YWNrIGVudHJ5CkBA
IC0xMDc2LDcgKzEwNzYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQnl0ZUNvZGVQYXJzZXIq
LAogICAgICAgICAgICAgQ29kZUJsb2NrKiwKICAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywKLSAgICAgICAgICAgIEJsb2NrSW5kZXggY2FsbHNpdGVCbG9ja0hlYWQsCisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBjYWxsc2l0ZUJsb2NrSGVhZCwKICAgICAgICAgICAgIEpTRnVu
Y3Rpb24qIGNhbGxlZSwgLy8gTnVsbCBpZiB0aGlzIGlzIGEgY2xvc3VyZSBjYWxsLgogICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHJldHVyblZhbHVlVlIsCiAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQsCkBAIC0xMjk1LDE0ICsxMjk1LDE0IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICB1bnNpZ25lZCBuZXdO
dW1Mb2NhbHMgPSBpbmxpbmVDYWxsRnJhbWVTdGFydCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
clNpemUgKyBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwogICAgIGlmIChuZXdOdW1M
b2NhbHMgPiBtX251bUxvY2FscykgewogICAgICAgICBtX251bUxvY2FscyA9IG5ld051bUxvY2Fs
czsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tpXS0+ZW5zdXJlTG9jYWxzKG5l
d051bUxvY2Fscyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytpKQorICAgICAgICAgICAgbV9ncmFwaC5ibG9jayhpKS0+ZW5zdXJlTG9jYWxz
KG5ld051bUxvY2Fscyk7CiAgICAgfQogICAgIAogICAgIHNpemVfdCBhcmd1bWVudFBvc2l0aW9u
U3RhcnQgPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnMuc2l6ZSgpOwogCiAgICAgSW5saW5l
U3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KAotICAgICAgICB0aGlzLCBjb2RlQmxvY2ssIGNv
ZGVCbG9jaywgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxLCBjYWxsTGlua1N0YXR1cy5mdW5j
dGlvbigpLAorICAgICAgICB0aGlzLCBjb2RlQmxvY2ssIGNvZGVCbG9jaywgbV9ncmFwaC5sYXN0
QmxvY2soKSwgY2FsbExpbmtTdGF0dXMuZnVuY3Rpb24oKSwKICAgICAgICAgKFZpcnR1YWxSZWdp
c3RlciltX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0T3BlcmFuZCksCiAgICAg
ICAgIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lU3RhcnQsIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBraW5kKTsKICAgICAKQEAgLTEzMjEsMTMgKzEzMjEsMTMgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIG1fY3VycmVudEluZGV4ID0g
b2xkSW5kZXg7CiAgICAgCiAgICAgLy8gSWYgdGhlIGlubGluZWQgY29kZSBjcmVhdGVkIHNvbWUg
bmV3IGJhc2ljIGJsb2NrcywgdGhlbiB3ZSBoYXZlIGxpbmtpbmcgdG8gZG8uCi0gICAgaWYgKGlu
bGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCAhPSBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKSAtIDEpIHsKKyAgICBpZiAoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFk
ICE9IG1fZ3JhcGgubGFzdEJsb2NrKCkpIHsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVCghaW5s
aW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSk7CiAgICAgICAgIGlmIChp
bmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcpCi0gICAgICAg
ICAgICBsaW5rQmxvY2sobV9ncmFwaC5tX2Jsb2Nrc1tpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNp
dGVCbG9ja0hlYWRdLmdldCgpLCBpbmxpbmVTdGFja0VudHJ5Lm1fYmxvY2tMaW5raW5nVGFyZ2V0
cyk7CisgICAgICAgICAgICBsaW5rQmxvY2soaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxv
Y2tIZWFkLCBpbmxpbmVTdGFja0VudHJ5Lm1fYmxvY2tMaW5raW5nVGFyZ2V0cyk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fYmxvY2tzW2lubGluZVN0YWNrRW50
cnkubV9jYWxsc2l0ZUJsb2NrSGVhZF0tPmlzTGlua2VkKTsKKyAgICAgICAgICAgIEFTU0VSVChp
bmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWQtPmlzTGlua2VkKTsKICAgICAgICAg
CiAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgY2FsbHNpdGUgYmxvY2sgaGVhZCBp
cyBub3Qgb3duZWQgYnkgdGhlIGNhbGxlci4KICAgICAgICAgaWYgKCFpbmxpbmVTdGFja0VudHJ5
Lm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSkgewpAQCAtMTM0OCw3ICsxMzQ4
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIH0gZWxz
ZQogICAgICAgICBBU1NFUlQoaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1w
dHkoKSk7CiAgICAgCi0gICAgQmFzaWNCbG9jayogbGFzdEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
cy5sYXN0KCkuZ2V0KCk7CisgICAgQmFzaWNCbG9jayogbGFzdEJsb2NrID0gbV9ncmFwaC5sYXN0
QmxvY2soKTsKICAgICAvLyBJZiB0aGVyZSB3YXMgYSByZXR1cm4sIGJ1dCBubyBlYXJseSByZXR1
cm5zLCB0aGVuIHdlJ3JlIGRvbmUuIFdlIGFsbG93IHBhcnNpbmcgb2YKICAgICAvLyB0aGUgY2Fs
bGVyIHRvIGNvbnRpbnVlIGluIHdoYXRldmVyIGJhc2ljIGJsb2NrIHdlJ3JlIGluIHJpZ2h0IG5v
dy4KICAgICBpZiAoIWlubGluZVN0YWNrRW50cnkubV9kaWRFYXJseVJldHVybiAmJiBpbmxpbmVT
dGFja0VudHJ5Lm1fZGlkUmV0dXJuKSB7CkBAIC0xMzY0LDExICsxMzY0LDExIEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgICAgIC8vIGZvciByZWxl
YXNlIGJ1aWxkcyBiZWNhdXNlIHRoaXMgYmxvY2sgd2lsbCBuZXZlciBzZXJ2ZSBhcyBhIHBvdGVu
dGlhbCB0YXJnZXQKICAgICAgICAgICAgIC8vIGluIHRoZSBsaW5rZXIncyBiaW5hcnkgc2VhcmNo
LgogICAgICAgICAgICAgbGFzdEJsb2NrLT5ieXRlY29kZUJlZ2luID0gbV9jdXJyZW50SW5kZXg7
Ci0gICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nr
cy5hcHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEpKTsKKyAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmFw
cGVuZChVbmxpbmtlZEJsb2NrKG1fZ3JhcGgubGFzdEJsb2NrKCkpKTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS5n
ZXQoKTsKLQorICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgubGFzdEJsb2NrKCk7Cisg
ICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0Yo
IkRvbmUgaW5saW5pbmcgZXhlY3V0YWJsZSAlcCwgY29udGludWluZyBjb2RlIGdlbmVyYXRpb24g
YXQgZXBpbG9ndWUuXG4iLCBleGVjdXRhYmxlKTsKICNlbmRpZgpAQCAtMTM3OCwzMiArMTM3OCwz
NSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gSWYg
d2UgZ2V0IHRvIHRoaXMgcG9pbnQgdGhlbiBhbGwgYmxvY2tzIG11c3QgZW5kIGluIHNvbWUgc29y
dCBvZiB0ZXJtaW5hbHMuCiAgICAgQVNTRVJUKGxhc3RCbG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFs
KCkpOwogICAgIAorCisgICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgYmFzaWMgYmxvY2sgZm9y
IHRoZSBjb250aW51YXRpb24gYXQgdGhlIGNhbGxlci4KKyAgICBSZWZQdHI8QmFzaWNCbG9jaz4g
YmxvY2sgPSBhZG9wdFJlZihuZXcgQmFzaWNCbG9jayhuZXh0T2Zmc2V0LCBtX251bUFyZ3VtZW50
cywgbV9udW1Mb2NhbHMpKTsKKworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICBk
YXRhTG9nRigiQ3JlYXRpbmcgaW5saW5lIGVwaWxvZ3VlIGJhc2ljIGJsb2NrICVwLCAjJXp1IGZv
ciAlcCBiYyMldSBhdCBpbmxpbmUgZGVwdGggJXUuXG4iLCBibG9jay5nZXQoKSwgbV9ncmFwaC5u
dW1CbG9ja3MoKSwgbV9pbmxpbmVTdGFja1RvcC0+ZXhlY3V0YWJsZSgpLCBtX2N1cnJlbnRJbmRl
eCwgQ29kZU9yaWdpbjo6aW5saW5lRGVwdGhGb3JDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKCkp
KTsKKyNlbmRpZgorCiAgICAgLy8gTGluayB0aGUgZWFybHkgcmV0dXJucyB0byB0aGUgYmFzaWMg
YmxvY2sgd2UncmUgYWJvdXQgdG8gY3JlYXRlLgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IGlmICghaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzW2ldLm1fbmVlZHNFYXJseVJl
dHVybkxpbmtpbmcpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2lubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nr
c1tpXS5tX2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGlu
bGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX2Jsb2NrOwogICAgICAgICBBU1NF
UlQoIWJsb2NrLT5pc0xpbmtlZCk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+bGFzdCgp
OwogICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBKdW1wKTsKLSAgICAgICAgQVNTRVJUKG5v
ZGUtPnRha2VuQmxvY2tJbmRleCgpID09IE5vQmxvY2spOwotICAgICAgICBub2RlLT5zZXRUYWtl
bkJsb2NrSW5kZXgobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkpOworICAgICAgICBBU1NFUlQobm9k
ZS0+dGFrZW5CbG9jaygpID09IDApOworICAgICAgICBub2RlLT5zZXRUYWtlbkJsb2NrKGJsb2Nr
LmdldCgpKTsKICAgICAgICAgaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzW2ldLm1f
bmVlZHNFYXJseVJldHVybkxpbmtpbmcgPSBmYWxzZTsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAg
ICAgICAgIGJsb2NrLT5pc0xpbmtlZCA9IHRydWU7CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAg
Ly8gTmVlZCB0byBjcmVhdGUgYSBuZXcgYmFzaWMgYmxvY2sgZm9yIHRoZSBjb250aW51YXRpb24g
YXQgdGhlIGNhbGxlci4KLSAgICBPd25QdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFB0cihu
ZXcgQmFzaWNCbG9jayhuZXh0T2Zmc2V0LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMpKTsK
LSNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0YUxvZ0YoIkNyZWF0aW5nIGlu
bGluZSBlcGlsb2d1ZSBiYXNpYyBibG9jayAlcCwgIyV6dSBmb3IgJXAgYmMjJXUgYXQgaW5saW5l
IGRlcHRoICV1LlxuIiwgYmxvY2suZ2V0KCksIG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpLCBtX2lu
bGluZVN0YWNrVG9wLT5leGVjdXRhYmxlKCksIG1fY3VycmVudEluZGV4LCBDb2RlT3JpZ2luOjpp
bmxpbmVEZXB0aEZvckNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUoKSkpOwotI2VuZGlmCiAgICAg
bV9jdXJyZW50QmxvY2sgPSBibG9jay5nZXQoKTsKLSAgICBBU1NFUlQobV9pbmxpbmVTdGFja1Rv
cC0+bV9jYWxsZXItPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5pc0VtcHR5KCkgfHwgbV9ncmFwaC5t
X2Jsb2Nrc1ttX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRz
Lmxhc3QoKV0tPmJ5dGVjb2RlQmVnaW4gPCBuZXh0T2Zmc2V0KTsKLSAgICBtX2lubGluZVN0YWNr
VG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5hcHBlbmQoVW5saW5rZWRCbG9jayhtX2dy
YXBoLm1fYmxvY2tzLnNpemUoKSkpOwotICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5t
X2Jsb2NrTGlua2luZ1RhcmdldHMuYXBwZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKLSAg
ICBtX2dyYXBoLm1fYmxvY2tzLmFwcGVuZChibG9jay5yZWxlYXNlKCkpOworICAgIEFTU0VSVCht
X2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlzRW1wdHko
KSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmxh
c3QoKS0+Ynl0ZWNvZGVCZWdpbiA8IG5leHRPZmZzZXQpOworICAgIG1faW5saW5lU3RhY2tUb3At
Pm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmFwcGVuZChVbmxpbmtlZEJsb2NrKGJsb2NrLmdl
dCgpKSk7CisgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fYmxvY2tMaW5raW5nVGFy
Z2V0cy5hcHBlbmQoYmxvY2suZ2V0KCkpOworICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soYmxvY2sp
OwogICAgIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICAKICAgICAvLyBBdCB0aGlzIHBvaW50
IHdlIHJldHVybiBhbmQgY29udGludWUgdG8gZ2VuZXJhdGUgY29kZSBmb3IgdGhlIGNhbGxlciwg
YnV0CkBAIC0xNzUzLDcgKzE3NTYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgLy8gSWYgd2UgYXJlIHRoZSBmaXJzdCBiYXNpYyBibG9jaywgaW50cm9k
dWNlIG1hcmtlcnMgZm9yIGFyZ3VtZW50cy4gVGhpcyBhbGxvd3MKICAgICAvLyB1cyB0byB0cmFj
ayBpZiBhIHVzZSBvZiBhbiBhcmd1bWVudCBtYXkgdXNlIHRoZSBhY3R1YWwgYXJndW1lbnQgcGFz
c2VkLCBhcwogICAgIC8vIG9wcG9zZWQgdG8gdXNpbmcgYSB2YWx1ZSB3ZSBzZXQgZXhwbGljaXRs
eS4KLSAgICBpZiAobV9jdXJyZW50QmxvY2sgPT0gbV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKSAm
JiAhaW5saW5lQ2FsbEZyYW1lKCkpIHsKKyAgICBpZiAobV9jdXJyZW50QmxvY2sgPT0gbV9ncmFw
aC5ibG9jaygwKSAmJiAhaW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAgICAgbV9ncmFwaC5tX2Fy
Z3VtZW50cy5yZXNpemUobV9udW1Bcmd1bWVudHMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX251bUFyZ3VtZW50czsgKythcmd1bWVudCkgewogICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNz
RGF0YSgKQEAgLTI3NzMsNyArMjc3Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBtX2N1cnJlbnRJ
bmRleCArIHRhYmxlLmJyYW5jaE9mZnNldHNbaV07CiAgICAgICAgICAgICAgICAgaWYgKHRhcmdl
dCA9PSBkYXRhLmZhbGxUaHJvdWdoKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKGpzTnVtYmVyKHRhYmxl
Lm1pbiArIGkpLCB0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChT
d2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJbmRleChqc051bWJlcih0YWJsZS5taW4gKyBpKSwgdGFy
Z2V0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2dyYXBoLm1fc3dpdGNoRGF0YS5h
cHBlbmQoZGF0YSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZtX2dy
YXBoLm1fc3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCkpOwpAQCAtMjc5Myw3ICsyNzk2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gZGF0YS5mYWxsVGhy
b3VnaCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZGF0
YS5jYXNlcy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIFN3aXRjaENhc2UoTGF6eUpTVmFs
dWU6OnNpbmdsZUNoYXJhY3RlclN0cmluZyh0YWJsZS5taW4gKyBpKSwgdGFyZ2V0KSk7CisgICAg
ICAgICAgICAgICAgICAgIFN3aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KExhenlKU1ZhbHVl
OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodGFibGUubWluICsgaSksIHRhcmdldCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgbV9ncmFwaC5tX3N3aXRjaERhdGEuYXBwZW5kKGRhdGEpOwog
ICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmbV9ncmFwaC5tX3N3aXRjaERh
dGEubGFzdCgpKSwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKQEAgLTI4
MTMsNyArMjgxNiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRocm91Z2gpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5k
KAotICAgICAgICAgICAgICAgICAgICBTd2l0Y2hDYXNlKExhenlKU1ZhbHVlOjprbm93blN0cmlu
Z0ltcGwoaXRlci0+a2V5LmdldCgpKSwgdGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgICAgIFN3
aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KExhenlKU1ZhbHVlOjprbm93blN0cmluZ0ltcGwo
aXRlci0+a2V5LmdldCgpKSwgdGFyZ2V0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBt
X2dyYXBoLm1fc3dpdGNoRGF0YS5hcHBlbmQoZGF0YSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBo
KFN3aXRjaCwgT3BJbmZvKCZtX2dyYXBoLm1fc3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwpAQCAtMjgyOCwxMyArMjgzMSwxMyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9kaWRSZXR1cm4gPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmICht
X2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBJZiB3ZSdyZSByZXR1cm5pbmcgZnJvbSB0aGUgZmlyc3QgYmxvY2ssIHRo
ZW4gd2UncmUgZG9uZSBwYXJzaW5nLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxp
bmVTdGFja1RvcC0+bV9jYWxsc2l0ZUJsb2NrSGVhZCA9PSBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KSAtIDEpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9j
YWxsc2l0ZUJsb2NrSGVhZCA9PSBtX2dyYXBoLmxhc3RCbG9jaygpKTsKICAgICAgICAgICAgICAg
ICAgICAgc2hvdWxkQ29udGludWVQYXJzaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAg
IExBU1RfT1BDT0RFKG9wX3JldCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgaW5saW5pbmcgY3JlYXRlZCBibG9ja3MsIGFuZCB3ZSdyZSBkb2lu
ZyBhIHJldHVybiwgdGhlbiB3ZSBuZWVkIHNvbWUKICAgICAgICAgICAgICAgICAgICAgLy8gc3Bl
Y2lhbCBsaW5raW5nLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1Rv
cC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4ID09IG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNr
VG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrSW5kZXggPT0gbV9ncmFwaC5sYXN0
QmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5r
ZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNOb3JtYWxMaW5raW5nID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5H
VEgob3BfcmV0KSAhPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZGlkRWFybHlSZXR1cm4pIHsKQEAgLTMx
NjIsNyArMzE2NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICB9CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayhCYXNpY0Jsb2NrKiBi
bG9jaywgVmVjdG9yPEJsb2NrSW5kZXg+JiBwb3NzaWJsZVRhcmdldHMpCit2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxCYXNpY0Jsb2NrKj4m
IHBvc3NpYmxlVGFyZ2V0cykKIHsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0xpbmtlZCk7CiAgICAg
QVNTRVJUKCFibG9jay0+aXNFbXB0eSgpKTsKQEAgLTMxNzEsMjQgKzMxNzQsMjQgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKEJhc2ljQmxvYwogICAgIAogICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgIGNhc2UgSnVtcDoKLSAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9ja0lu
ZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywg
bm9kZS0+dGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOworICAgICAgICBub2Rl
LT5zZXRUYWtlbkJsb2NrKGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBu
b2RlLT50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CiAjaWYgREZHX0VOQUJM
RShERUJVR19WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiTGlua2VkIGJhc2ljIGJsb2NrICVw
IHRvICVwLCAjJXUuXG4iLCBibG9jaywgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLT50YWtlbkJsb2Nr
SW5kZXgoKV0uZ2V0KCksIG5vZGUtPnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0YUxv
Z0YoIkxpbmtlZCBiYXNpYyBibG9jayAlcCB0byAlcCwgIyV1LlxuIiwgYmxvY2ssIG5vZGUtPnRh
a2VuQmxvY2soKSwgbm9kZS0+dGFrZW5CbG9jaygpLT5pbmRleCk7CiAjZW5kaWYKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQnJhbmNoOgotICAgICAgICBub2RlLT5zZXRUYWtl
bkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVU
YXJnZXRzLCBub2RlLT50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7Ci0gICAg
ICAgIG5vZGUtPnNldE5vdFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPm5vdFRha2VuQnl0ZWNvZGVPZmZzZXRE
dXJpbmdQYXJzaW5nKCkpKTsKKyAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9jayhibG9ja0ZvckJ5
dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+dGFrZW5CeXRlY29kZU9mZnNldER1
cmluZ1BhcnNpbmcoKSkpOworICAgICAgICBub2RlLT5zZXROb3RUYWtlbkJsb2NrKGJsb2NrRm9y
Qnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT5ub3RUYWtlbkJ5dGVjb2RlT2Zm
c2V0RHVyaW5nUGFyc2luZygpKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAg
ICAgICBkYXRhTG9nRigiTGlua2VkIGJhc2ljIGJsb2NrICVwIHRvICVwLCAjJXUgYW5kICVwLCAj
JXUuXG4iLCBibG9jaywgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLT50YWtlbkJsb2NrSW5kZXgoKV0u
Z2V0KCksIG5vZGUtPnRha2VuQmxvY2tJbmRleCgpLCBtX2dyYXBoLm1fYmxvY2tzW25vZGUtPm5v
dFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSwgbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCkpOwor
ICAgICAgICBkYXRhTG9nRigiTGlua2VkIGJhc2ljIGJsb2NrICVwIHRvICVwLCAjJXUgYW5kICVw
LCAjJXUuXG4iLCBibG9jaywgbm9kZS0+dGFrZW5CbG9jaygpLCBub2RlLT50YWtlbkJsb2NrKCkt
PmluZGV4LCBub2RlLT5ub3RUYWtlbkJsb2NrKCksIG5vZGUtPm5vdFRha2VuQmxvY2soKS0+aW5k
ZXgpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFN3aXRjaDoK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+c3dpdGNoRGF0YSgpLT5jYXNlcy5zaXpl
KCk7IGktLTspCi0gICAgICAgICAgICBub2RlLT5zd2l0Y2hEYXRhKCktPmNhc2VzW2ldLnRhcmdl
dCA9IG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywg
bm9kZS0+c3dpdGNoRGF0YSgpLT5jYXNlc1tpXS50YXJnZXQpOwotICAgICAgICBub2RlLT5zd2l0
Y2hEYXRhKCktPmZhbGxUaHJvdWdoID0gbV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZz
ZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT5zd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoKTsKKyAg
ICAgICAgICAgIG5vZGUtPnN3aXRjaERhdGEoKS0+Y2FzZXNbaV0udGFyZ2V0ID0gYmxvY2tGb3JC
eXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnN3aXRjaERhdGEoKS0+Y2FzZXNb
aV0udGFyZ2V0Qnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgbm9kZS0+c3dpdGNoRGF0YSgpLT5m
YWxsVGhyb3VnaCA9IGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2Rl
LT5zd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoQnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CkBAIC0zMjAzLDExICszMjA2LDExIEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayhCYXNpY0Jsb2MKICNlbmRpZgogfQogCi12b2lkIEJ5
dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRC
bG9ja3MsIFZlY3RvcjxCbG9ja0luZGV4PiYgcG9zc2libGVUYXJnZXRzKQordm9pZCBCeXRlQ29k
ZVBhcnNlcjo6bGlua0Jsb2NrcyhWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHVubGlua2VkQmxvY2tz
LCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpCiB7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB1bmxpbmtlZEJsb2Nrcy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAo
dW5saW5rZWRCbG9ja3NbaV0ubV9uZWVkc05vcm1hbExpbmtpbmcpIHsKLSAgICAgICAgICAgIGxp
bmtCbG9jayhtX2dyYXBoLm1fYmxvY2tzW3VubGlua2VkQmxvY2tzW2ldLm1fYmxvY2tJbmRleF0u
Z2V0KCksIHBvc3NpYmxlVGFyZ2V0cyk7CisgICAgICAgICAgICBsaW5rQmxvY2sodW5saW5rZWRC
bG9ja3NbaV0ubV9ibG9jaywgcG9zc2libGVUYXJnZXRzKTsKICAgICAgICAgICAgIHVubGlua2Vk
QmxvY2tzW2ldLm1fbmVlZHNOb3JtYWxMaW5raW5nID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9
CkBAIC0zMjM1LDcgKzMyMzgsNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6
SW5saW5lCiAgICAgQnl0ZUNvZGVQYXJzZXIqIGJ5dGVDb2RlUGFyc2VyLAogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLAogICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywKLSAgICBCbG9ja0lu
ZGV4IGNhbGxzaXRlQmxvY2tIZWFkLAorICAgIEJhc2ljQmxvY2sqIGNhbGxzaXRlQmxvY2tIZWFk
LAogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSwgLy8gTnVsbCBpZiB0aGlzIGlzIGEgY2xvc3VyZSBj
YWxsLgogICAgIFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLAogICAgIFZpcnR1YWxSZWdp
c3RlciBpbmxpbmVDYWxsRnJhbWVTdGFydCwKQEAgLTM0NDYsMjcgKzM0NDksMjcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgICAgICBkbyB7CiAgICAgICAgICAg
ICBpZiAoIW1fY3VycmVudEJsb2NrKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2Ug
Y2FuIHVzZSB0aGUgbGFzdCBibG9jay4KLSAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgubV9i
bG9ja3MuaXNFbXB0eSgpICYmIG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLT5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5udW1CbG9ja3MoKSAmJiBtX2dyYXBoLmxhc3RC
bG9jaygpLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJl
IGEgYmxvY2sgYmVsb25naW5nIHRvIHVzLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9p
bmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4ID09IG1f
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCht
X2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrSW5kZXggPT0g
bV9ncmFwaC5sYXN0QmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIC8vIEVpdGhlciB0aGUg
YmxvY2sgaXMgbGlua2FibGUgb3IgaXQgaXNuJ3QuIElmIGl0J3MgbGlua2FibGUgdGhlbiBpdCdz
IHRoZSBsYXN0CiAgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrIGluIHRoZSBibG9ja0xpbmtp
bmdUYXJnZXRzIGxpc3QuIElmIGl0J3Mgbm90IHRoZW4gdGhlIGxhc3QgYmxvY2sgd2lsbAogICAg
ICAgICAgICAgICAgICAgICAvLyBoYXZlIGEgbG93ZXIgYnl0ZWNvZGUgaW5kZXggdGhhdCB0aGUg
b25lIHdlJ3JlIGFib3V0IHRvIGdpdmUgdG8gdGhpcyBibG9jay4KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5pc0VtcHR5KCkg
fHwgbV9ncmFwaC5tX2Jsb2Nrc1ttX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1Rhcmdl
dHMubGFzdCgpXS0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2N1cnJlbnRJbmRleCkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlz
RW1wdHkoKSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMubGFzdCgp
LT5ieXRlY29kZUJlZ2luICE9IG1fY3VycmVudEluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBNYWtlIHRoZSBibG9jayBsaW5rYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuaXNFbXB0eSgp
IHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJn
ZXRzLmxhc3QoKV0tPmJ5dGVjb2RlQmVnaW4gPCBtX2N1cnJlbnRJbmRleCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuYXBw
ZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlzRW1wdHko
KSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMubGFzdCgpLT5ieXRl
Y29kZUJlZ2luIDwgbV9jdXJyZW50SW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmFwcGVuZChtX2dyYXBoLmxhc3RC
bG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAvLyBD
aGFuZ2UgaXRzIGJ5dGVjb2RlIGJlZ2luIGFuZCBjb250aW51ZS4KLSAgICAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS5nZXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLmxhc3RCbG9jaygpOwogI2lm
IERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0Yo
IlJlYXNjcmliaW5nIGJ5dGVjb2RlIGluZGV4IG9mIGJsb2NrICVwIGZyb20gYmMjJXUgdG8gYmMj
JXUgKHBlZXBob2xlIGNhc2UpLlxuIiwgbV9jdXJyZW50QmxvY2ssIG1fY3VycmVudEJsb2NrLT5i
eXRlY29kZUJlZ2luLCBtX2N1cnJlbnRJbmRleCk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmJ5dGVjb2RlQmVnaW4gPSBtX2N1cnJlbnRJbmRleDsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBPd25QdHI8QmFzaWNCbG9j
az4gYmxvY2sgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jayhtX2N1cnJlbnRJbmRleCwgbV9udW1B
cmd1bWVudHMsIG1fbnVtTG9jYWxzKSk7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxCYXNp
Y0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKG5ldyBCYXNpY0Jsb2NrKG1fY3VycmVudEluZGV4LCBt
X251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJP
U0UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDcmVhdGluZyBiYXNpYyBibG9jayAl
cCwgIyV6dSBmb3IgJXAgYmMjJXUgYXQgaW5saW5lIGRlcHRoICV1LlxuIiwgYmxvY2suZ2V0KCks
IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpLCBtX2lubGluZVN0YWNrVG9wLT5leGVjdXRhYmxlKCks
IG1fY3VycmVudEluZGV4LCBDb2RlT3JpZ2luOjppbmxpbmVEZXB0aEZvckNhbGxGcmFtZShpbmxp
bmVDYWxsRnJhbWUoKSkpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ3JlYXRpbmcg
YmFzaWMgYmxvY2sgJXAsICMlenUgZm9yICVwIGJjIyV1IGF0IGlubGluZSBkZXB0aCAldS5cbiIs
IGJsb2NrLmdldCgpLCBtX2dyYXBoLm51bUJsb2NrcygpLCBtX2lubGluZVN0YWNrVG9wLT5leGVj
dXRhYmxlKCksIG1fY3VycmVudEluZGV4LCBDb2RlT3JpZ2luOjppbmxpbmVEZXB0aEZvckNhbGxG
cmFtZShpbmxpbmVDYWxsRnJhbWUoKSkpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrID0gYmxvY2suZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
YXNzZXJ0aW9uIGNoZWNrcyB0d28gdGhpbmdzOgpAQCAtMzQ3NSwxMyArMzQ3OCwxMyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiAgICAgICAgICAgICAgICAgICAgIC8v
IDIpIElmIHRoZSBieXRlY29kZUJlZ2luIGlzIGVxdWFsIHRvIHRoZSBjdXJyZW50SW5kZXgsIHRo
ZW4gd2UgZmFpbGVkIHRvIGRvCiAgICAgICAgICAgICAgICAgICAgIC8vICAgIGEgcGVlcGhvbGUg
Y29hbGVzY2luZyBvZiB0aGlzIGJsb2NrIGluIHRoZSBpZiBzdGF0ZW1lbnQgYWJvdmUuIFNvLCB3
ZSdyZQogICAgICAgICAgICAgICAgICAgICAvLyAgICBnZW5lcmF0aW5nIHN1Ym9wdGltYWwgY29k
ZSBhbmQgbGVhdmluZyBtb3JlIHdvcmsgZm9yIHRoZSBDRkcgc2ltcGxpZmllci4KLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuaXNF
bXB0eSgpIHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJs
b2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4XS0+Ynl0ZWNvZGVCZWdpbiA8IG1fY3VycmVudEluZGV4
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nr
cy5hcHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSkpOwotICAgICAg
ICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuYXBw
ZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpIHx8IG1faW5saW5l
U3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLT5ieXRlY29kZUJlZ2luIDwgbV9jdXJy
ZW50SW5kZXgpOworICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlu
a2VkQmxvY2tzLmFwcGVuZChVbmxpbmtlZEJsb2NrKGJsb2NrLmdldCgpKSk7CisgICAgICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5hcHBlbmQo
YmxvY2suZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZmlyc3QgYmxvY2sgaXMg
ZGVmaW5pdGVseSBhbiBPU1IgdGFyZ2V0LgotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgubnVt
QmxvY2tzKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+aXNPU1JUYXJnZXQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzLmFwcGVuZChibG9jay5y
ZWxlYXNlKCkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZEJsb2NrKGJsb2Nr
KTsKICAgICAgICAgICAgICAgICAgICAgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTM1NDAsMTEgKzM1NDMsMTEgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkg
eworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
CiAgICAgICAgIEFTU0VSVChibG9jayk7CiAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxl
KSB7Ci0gICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmNsZWFyKCk7Cisg
ICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9jayhibG9jayk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTUgKzc5LDE0IEBA
IHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgcGVyZm9ybUJsb2NrQ0ZB
KEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB2b2lkIHBlcmZvcm1CbG9ja0NGQShCYXNpY0Js
b2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgaWYgKCFibG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9n
RigiICAgQmxvY2sgIyV1IChiYyMldSk6XG4iLCBibG9ja0luZGV4LCBibG9jay0+Ynl0ZWNvZGVC
ZWdpbik7CisgICAgICAgICAgICBkYXRhTG9nKCIgICBCbG9jayAiLCAqYmxvY2ssICI6XG4iKTsK
ICAgICAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwogICAgICAgICBpZiAodmVy
Ym9zZSkgewogICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIGhlYWQgdmFyczogIik7CkBAIC0x
MjcsOCArMTI2LDggQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICBkYXRhTG9nRigiQ0ZBIFsldV1cbiIsICsrbV9jb3VudCk7CiAgICAgICAgIAotICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
OyArK2Jsb2NrKQotICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ0ZBKGJsb2NrKTsKKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytibG9ja0luZGV4KQorICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ0ZBKG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCkpOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
RkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsOCArNTQsOCBA
QCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBkbyB7CiAgICAgICAgICAgICBpbm5lckNoYW5n
ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAg
ICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJ
bmRleF0uZ2V0KCk7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
CiAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CkBAIC02Mywy
NyArNjMsMjQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHN3aXRjaCAoYmxvY2stPmxhc3Qo
KS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgSnVtcDogewogICAgICAgICAgICAgICAg
ICAgICAvLyBTdWNjZXNzb3Igd2l0aCBvbmUgcHJlZGVjZXNzb3IgLT4gbWVyZ2UuCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2Nr
LCAwKV0tPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCld
LT5tX3ByZWRlY2Vzc29yc1swXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IGJs
b2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnN1Y2Nlc3NvcigwKS0+
cHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoYmxvY2stPnN1Y2Nlc3NvcigwKS0+cHJlZGVjZXNzb3JzWzBdID09IGJsb2NrKTsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nRigiQ0ZHU2ltcGxpZnk6IEp1bXAgbWVyZ2Ugb24gQmxvY2sgIyV1IHRvIEJs
b2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgs
IG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJDRkdTaW1wbGlmeTogSnVtcCBtZXJnZSBvbiBCbG9jayAiLCAqYmxvY2ssICIgdG8g
QmxvY2sgIiwgKmJsb2NrLT5zdWNjZXNzb3IoMCksICIuXG4iKTsKICNlbmRpZgogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5k
ZXRocmVhZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRl
eCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApLCBub0Jsb2NrcygpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1lcmdlQmxvY2tzKGJsb2NrLCBibG9jay0+c3VjY2Vzc29yKDApLCBub0Js
b2NrcygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hh
bmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiTm90IGp1bXAgbWVyZ2luZyBv
biBCbG9jayAjJXUgdG8gQmxvY2sgIyV1IGJlY2F1c2UgcHJlZGVjZXNzb3JzID0gIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3Io
YmxvY2ssIDApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKV0tPm1fcHJl
ZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJDRkdTaW1wbGlmeTogTm90IGp1bXAgbWVyZ2luZyBvbiBCbG9jayAiLCAqYmxvY2ssICIgdG8g
QmxvY2sgIiwgKmJsb2NrLT5zdWNjZXNzb3IoMCksICIgYmVjYXVzZSBwcmVkZWNlc3NvcnMgPSAi
LCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxv
Y2stPnN1Y2Nlc3NvcigwKS0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2dGKCIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIj
JXUiLCBtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKV0tPm1fcHJl
ZGVjZXNzb3JzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCpibG9j
ay0+c3VjY2Vzc29yKDApLT5wcmVkZWNlc3NvcnNbaV0pOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwogI2VuZGlmCkBA
IC0xMDMsNDUgKzEwMCw0MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIEJyYW5j
aCBvbiBjb25zdGFudCAtPiBqZXR0aXNvbiB0aGUgbm90LXRha2VuIGJsb2NrIGFuZCBtZXJnZS4K
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzS25vd25EaXJlY3Rpb24oYmxvY2stPmNmYUJyYW5j
aERpcmVjdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29uZGl0aW9uID0g
YnJhbmNoQ29uZGl0aW9uKGJsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzWwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9u
KGJsb2NrLCBjb25kaXRpb24pXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
YXJnZXRCbG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrID0gYmxvY2stPnN1Y2Nlc3NvckZvckNv
bmRpdGlvbihjb25kaXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
amV0dGlzb25lZEJsb2NrID0gYmxvY2stPnN1Y2Nlc3NvckZvckNvbmRpdGlvbighY29uZGl0aW9u
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRCbG9jay0+cHJlZGVjZXNzb3Jz
LnNpemUoKSA9PSAxKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDRkdTaW1wbGlmeTogS25v
d24gY29uZGl0aW9uICglcykgYnJhbmNoIG1lcmdlIG9uIEJsb2NrICMldSB0byBCbG9jayAjJXUs
IGpldHRpc29uaW5nIEJsb2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25kaXRpb24gPyAidHJ1ZSIgOiAiZmFsc2UiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRp
b24oYmxvY2ssIGNvbmRpdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgIWNvbmRpdGlvbikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJDRkdTaW1wbGlmeTogS25vd24gY29uZGl0aW9uICgiLCBjb25kaXRpb24sICIp
IGJyYW5jaCBtZXJnZSAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24gQmxv
Y2sgIiwgKmJsb2NrLCAiIHRvIEJsb2NrICIsICp0YXJnZXRCbG9jaywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIiwgamV0dGlzb25pbmcgQmxvY2sgIiwgKmpldHRpc29uZWRCbG9j
aywgIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJl
bWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJsb2NrSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24pLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVCbG9jayhtX2dyYXBoLnN1Y2Nlc3NvckZvckNv
bmRpdGlvbihibG9jaywgIWNvbmRpdGlvbikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtZXJnZUJsb2NrcyhibG9jaywgdGFyZ2V0QmxvY2ssIGpldHRpc29uZWRCbG9jayk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ0ZH
U2ltcGxpZnk6IEtub3duIGNvbmRpdGlvbiAoJXMpIGJyYW5jaC0+anVtcCBjb252ZXJzaW9uIG9u
IEJsb2NrICMldSB0byBCbG9jayAjJXUsIGpldHRpc29uaW5nIEJsb2NrICMldS5cbiIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPyAidHJ1ZSIgOiAiZmFs
c2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9n
cmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbiksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihi
bG9jaywgIWNvbmRpdGlvbikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDRkdTaW1wbGlmeTogS25vd24gY29u
ZGl0aW9uICgiLCBjb25kaXRpb24sICIpICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJicmFuY2gtPmp1bXAgY29udmVyc2lvbiBvbiBCbG9jayAiLCAqYmxvY2ssICIgdG8gQmxv
Y2sgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QmxvY2ssICIsIGpl
dHRpc29uaW5nIEJsb2NrICIsIGpldHRpc29uZWRCbG9jaywgIi5cbiIpOwogI2VuZGlmCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
QmxvY2tJbmRleCB0YWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlv
bihibG9jaywgY29uZGl0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0lu
ZGV4IG5vdFRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJs
b2NrLCAhY29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luID0g
YmxvY2stPmxhc3QoKS0+Y29kZU9yaWdpbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
bG9jay0+bGFzdCgpLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGJsb2NrLT5sYXN0KCktPnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2Nr
KGJsb2NrSW5kZXgsIG5vdFRha2VuQmxvY2tJbmRleCwgYm91bmRhcnlDb2RlT3JpZ2luKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2NrKGJsb2NrLCBqZXR0aXNvbmVk
QmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIGJvdW5kYXJ5Q29k
ZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRha2VuQmxv
Y2tJbmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odGFyZ2V0
QmxvY2spKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTE3Nyw3ICsxNjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBjYXNlcyBvdGhlciB0aGFuIGRlZmF1bHQgdGhlbiB0
aGlzIHR1cm5zCiAgICAgICAgICAgICAgICAgICAgIC8vIGludG8gYSBqdW1wLgogICAgICAgICAg
ICAgICAgICAgICBpZiAoZGF0YS0+Y2FzZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb252ZXJ0VG9KdW1wKGJsb2NrSW5kZXgsIGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0p1bXAoYmxvY2ssIGRhdGEtPmZhbGxUaHJv
dWdoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdl
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtMTg2LDQ3ICsxNzgsNDQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICBpZiAoYmxvY2stPmxhc3QoKS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50
KGJsb2NrLT5sYXN0KCktPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBUcmlTdGF0ZSBmb3VuZCA9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBCbG9ja0luZGV4IHRhcmdldEJsb2NrSW5kZXggPSBOb0Jsb2NrOworICAgICAgICAgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2sgPSAwOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6ZSgpOyBmb3VuZCA9PSBGYWxz
ZVRyaVN0YXRlICYmIGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9
IGRhdGEtPmNhc2VzW2ldLnZhbHVlLnN0cmljdEVxdWFsKHZhbHVlKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZm91bmQgPT0gVHJ1ZVRyaVN0YXRlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0YXJnZXRCbG9ja0luZGV4ID0gZGF0YS0+Y2FzZXNbaV0udGFyZ2V0
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCbG9jayA9IGRhdGEtPmNh
c2VzW2ldLnRhcmdldDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kID09IE1peGVkVHJp
U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZm91bmQgPT0gRmFsc2VUcmlTdGF0ZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0YXJnZXRCbG9ja0luZGV4ID0gZGF0YS0+ZmFsbFRocm91Z2g7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQodGFyZ2V0QmxvY2tJbmRleCAhPSBOb0Jsb2NrKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCbG9jayA9IGRhdGEtPmZhbGxUaHJvdWdo
OworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRhcmdldEJsb2NrKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEJsb2NrSW5k
ZXgsIDE+IGpldHRpc29uZWRCbG9ja3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3NvcnMoYmxvY2spOyBpLS07KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCBqZXR0aXNvbmVkQmxvY2tJbmRleCA9IG1f
Z3JhcGguc3VjY2Vzc29yKGJsb2NrLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoamV0dGlzb25lZEJsb2NrSW5kZXggIT0gdGFyZ2V0QmxvY2tJbmRleCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgamV0dGlzb25lZEJsb2Nrcy5hcHBlbmQoamV0dGlzb25lZEJs
b2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAx
PiBqZXR0aXNvbmVkQmxvY2tzOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jayA9IGJsb2NrLT5zdWNjZXNzb3Io
aSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpldHRpc29uZWRCbG9jayAhPSB0
YXJnZXRCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamV0dGlzb25lZEJs
b2Nrcy5hcHBlbmQoamV0dGlzb25lZEJsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNC
bG9jayogdGFyZ2V0QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3RhcmdldEJsb2NrSW5kZXhdLmdl
dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodGFyZ2V0QmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGFyZ2V0QmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCkgPT0gMSkg
ewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiQ0ZHU2ltcGxpZnk6IEtub3duIGNvbnN0YW50ICgiLCB2YWx1ZSwgIikgc3dpdGNoIG1lcmdl
IG9uICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCbG9jayAjIiwgYmxvY2tJ
bmRleCwgIiB0byBCbG9jayAjIiwgdGFyZ2V0QmxvY2tJbmRleCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIi5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
QmxvY2sgIiwgKmJsb2NrLCAiIHRvIEJsb2NrICIsICp0YXJnZXRCbG9jaywgIi5cbiIpOwogI2Vu
ZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRl
dGhyZWFkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgdGFyZ2V0QmxvY2tJbmRleCwgamV0
dGlzb25lZEJsb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3Mo
YmxvY2ssIHRhcmdldEJsb2NrLCBqZXR0aXNvbmVkQmxvY2tzKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJDRkdTaW1wbGlmeTogS25vd24gY29uc3RhbnQgKCIsIHZhbHVlLCAi
KSBzd2l0Y2gtPmp1bXAgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29udmVy
c2lvbiBvbiBCbG9jayAjIiwgYmxvY2tJbmRleCwgIiB0byBCbG9jayAjIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QmxvY2tJbmRleCwgIi5cbiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiY29udmVyc2lvbiBvbiBCbG9jayAiLCAqYmxvY2ssICIg
dG8gQmxvY2sgIyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0YXJnZXRCbG9j
aywgIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJl
bWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAo
KTsKQEAgLTIzNSw5ICsyMjQsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBibG9jay0+bGFzdCgpLT5jb2RlT3Jp
Z2luOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5sYXN0KCktPmNvbnZlcnRU
b1BoYW50b20oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBqZXR0aXNvbmVkQmxvY2tzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgamV0dGlzb25CbG9jayhibG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tzW2ldLCBi
b3VuZGFyeUNvZGVPcmlnaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0
aXNvbkJsb2NrKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2tzW2ldLCBib3VuZGFyeUNvZGVPcmlnaW4p
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYm91bmRh
cnlDb2RlT3JpZ2luLCBPcEluZm8odGFyZ2V0QmxvY2tJbmRleCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYm91bmRhcnlDb2RlT3Jp
Z2luLCBPcEluZm8odGFyZ2V0QmxvY2spKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI4MywxNCArMjcyLDE0IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBtX2dyYXBoLmludmFsaWRhdGVDRkcoKTsKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAKLSAgICAgICAgICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dy
YXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGtpbGxVbnJlYWNoYWJsZShibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
a2lsbFVucmVhY2hhYmxlKGJsb2NrKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTMwMiwyNSArMjkxLDIzIEBAIHB1YmxpYzoKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgdm9pZCBjb252ZXJ0VG9KdW1wKEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxv
Y2tJbmRleCB0YXJnZXRCbG9ja0luZGV4KQorICAgIHZvaWQgY29udmVydFRvSnVtcChCYXNpY0Js
b2NrKiBibG9jaywgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2spCiAgICAgewotICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAg
ICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1t0YXJnZXRCbG9j
a0luZGV4XS5nZXQoKTsKICAgICAgICAgQVNTRVJUKHRhcmdldEJsb2NrKTsKICAgICAgICAgQVNT
RVJUKHRhcmdldEJsb2NrLT5pc1JlYWNoYWJsZSk7Ci0gICAgICAgIGlmICh0YXJnZXRCbG9jay0+
bV9wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgaWYgKHRhcmdldEJsb2NrLT5w
cmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigKLSAgICAgICAgICAgICAgICAiQ0ZH
U2ltcGxpZnk6IEJyYW5jaC9Td2l0Y2ggdG8gc2FtZSBzdWNjZXNzb3IgbWVyZ2Ugb24gQmxvY2sg
IyV1IHRvIEJsb2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgdGFyZ2V0
QmxvY2tJbmRleCk7CisgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICJDRkdT
aW1wbGlmeTogQnJhbmNoL1N3aXRjaCB0byBzYW1lIHN1Y2Nlc3NvciBtZXJnZSBvbiBCbG9jayAi
LCAqYmxvY2ssCisgICAgICAgICAgICAgICAgIiB0byBCbG9jayAiLCAqdGFyZ2V0QmxvY2ssICIu
XG4iKTsKICNlbmRpZgogICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwotICAgICAgICAg
ICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgdGFyZ2V0QmxvY2tJbmRleCwgbm9CbG9ja3MoKSk7
CisgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9jaywgdGFyZ2V0QmxvY2ssIG5vQmxvY2tzKCkp
OwogICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKAotICAgICAgICAgICAgICAgICJDRkdTaW1wbGlm
eTogQnJhbmNoLT5qdW1wIGNvbnZlcnNpb24gdG8gc2FtZSBzdWNjZXNzb3Igb24gQmxvY2sgIyV1
IHRvIEJsb2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgdGFyZ2V0Qmxv
Y2tJbmRleCk7CisgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICJDRkdTaW1w
bGlmeTogQnJhbmNoLT5qdW1wIGNvbnZlcnNpb24gdG8gc2FtZSBzdWNjZXNzb3Igb24gQmxvY2sg
IiwKKyAgICAgICAgICAgICAgICAqYmxvY2ssICIgdG8gQmxvY2sgIiwgKnRhcmdldEJsb2NrLCAi
LlxuIiwKICNlbmRpZgogICAgICAgICAgICAgTm9kZSogYnJhbmNoID0gYmxvY2stPmxhc3QoKTsK
ICAgICAgICAgICAgIEFTU0VSVChicmFuY2gtPmlzVGVybWluYWwoKSk7CkBAIC0zMzAsMTQgKzMx
NywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBibG9jay0+YXBwZW5k
Tm9kZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYnJhbmNoLT5j
b2RlT3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyh0YXJnZXRCbG9ja0luZGV4KSk7Cisg
ICAgICAgICAgICAgICAgT3BJbmZvKHRhcmdldEJsb2NrKSk7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICB2b2lkIGtpbGxVbnJlYWNoYWJsZShCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgdm9p
ZCBraWxsVW5yZWFjaGFibGUoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAg
ICAgIAogICAgICAgICBBU1NFUlQoYmxvY2spOwogICAgICAgICBBU1NFUlQoIWJsb2NrLT5pc1Jl
YWNoYWJsZSk7CiAgICAgICAgIApAQCAtMzQ2LDcgKzMzMSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQog
ICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5hdChub2RlSW5kZXgp
KTsKICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uY2xlYXIo
KTsKKyAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soYmxvY2spOwogICAgIH0KICAgICAKICAgICB2
b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRp
c29uZWRCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFuZCkKQEAgLTM2MSw0
OSArMzQ2LDQ2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBPcEluZm8obGl2ZW5lc3NOb2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGpldHRpc29uQmxv
Y2soQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4
LCBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbikKKyAgICB2b2lkIGpldHRpc29uQmxvY2so
QmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jaywgQ29kZU9yaWdp
biBib3VuZGFyeUNvZGVPcmlnaW4pCiAgICAgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIEJhc2ljQmxvY2sq
IGpldHRpc29uZWRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlzb25lZEJsb2NrSW5kZXhd
LmdldCgpOwotICAgICAgICAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNv
bmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCiAgICAg
ICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2ssIGJvdW5kYXJ5
Q29kZU9yaWdpbiwgYXJndW1lbnRUb09wZXJhbmQoaSkpOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxz
KCk7ICsraSkKICAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoYmxvY2ssIGpldHRpc29uZWRC
bG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBpKTsKICAgICAgICAgCi0gICAgICAgIGZpeEpldHRp
c29uZWRQcmVkZWNlc3NvcnMoYmxvY2tJbmRleCwgamV0dGlzb25lZEJsb2NrSW5kZXgpOworICAg
ICAgICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2spOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoQmxvY2tJbmRl
eCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4KQorICAgIHZvaWQg
Zml4SmV0dGlzb25lZFByZWRlY2Vzc29ycyhCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayog
amV0dGlzb25lZEJsb2NrKQogICAgIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCJGaXhpbmcgcHJlZGVjZXNzb3JzIGFuZCBwaGlz
IGR1ZSB0byBqZXR0aXNvbiBvZiBCbG9jayAjJXUgZnJvbSBCbG9jayAjJXUuXG4iLAotICAgICAg
ICAgICAgICAgIGpldHRpc29uZWRCbG9ja0luZGV4LCBibG9ja0luZGV4KTsKKyAgICAgICAgZGF0
YUxvZygKKyAgICAgICAgICAgICJGaXhpbmcgcHJlZGVjZXNzb3JzIGFuZCBwaGlzIGR1ZSB0byBq
ZXR0aXNvbiBvZiBCbG9jayAiLCAqamV0dGlzb25lZEJsb2NrLAorICAgICAgICAgICAgIiBmcm9t
IEJsb2NrICIsICpibG9jaywgIi5cbiIsCiAjZW5kaWYKLSAgICAgICAgQmFzaWNCbG9jayogamV0
dGlzb25lZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tqZXR0aXNvbmVkQmxvY2tJbmRleF0uZ2V0
KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPm1f
cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoamV0dGlzb25lZEJs
b2NrLT5tX3ByZWRlY2Vzc29yc1tpXSAhPSBibG9ja0luZGV4KQorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGlmIChqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29yc1tpXSAhPSBi
bG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGpldHRpc29uZWRC
bG9jay0+bV9wcmVkZWNlc3NvcnNbaV0gPSBqZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3Jz
Lmxhc3QoKTsKLSAgICAgICAgICAgIGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnMucmVt
b3ZlTGFzdCgpOworICAgICAgICAgICAgamV0dGlzb25lZEJsb2NrLT5wcmVkZWNlc3NvcnNbaV0g
PSBqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29ycy50YWtlTGFzdCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBWZWN0b3I8QmxvY2tJbmRleCwgMT4gbm9C
bG9ja3MoKQorICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMT4gbm9CbG9ja3MoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIFZlY3RvcjxCbG9ja0luZGV4LCAxPigpOworICAgICAgICByZXR1cm4gVmVj
dG9yPEJhc2ljQmxvY2sqLCAxPigpOwogICAgIH0KICAgICAKLSAgICBWZWN0b3I8QmxvY2tJbmRl
eCwgMT4gb25lQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIFZlY3RvcjxCYXNpY0Js
b2NrKiwgMT4gb25lQmxvY2soQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBWZWN0
b3I8QmxvY2tJbmRleCwgMT4gcmVzdWx0OwotICAgICAgICByZXN1bHQuYXBwZW5kKGJsb2NrSW5k
ZXgpOworICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE+IHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChibG9jayk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgbWVyZ2VCbG9ja3MoCi0gICAgICAgIEJsb2NrSW5kZXggZmlyc3RCbG9ja0luZGV4
LCBCbG9ja0luZGV4IHNlY29uZEJsb2NrSW5kZXgsIFZlY3RvcjxCbG9ja0luZGV4LCAxPiBqZXR0
aXNvbmVkQmxvY2tJbmRpY2VzKQorICAgICAgICBCYXNpY0Jsb2NrKiBmaXJzdEJsb2NrLCBCYXNp
Y0Jsb2NrKiBzZWNvbmRCbG9jaywKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxPiBqZXR0
aXNvbmVkQmxvY2tzKQogICAgIHsKICAgICAgICAgLy8gVGhpcyB3aWxsIGFkZCBhbGwgb2YgdGhl
IG5vZGVzIGluIHNlY29uZEJsb2NrIHRvIGZpcnN0QmxvY2ssIGJ1dCBpbiBzbyBkb2luZwogICAg
ICAgICAvLyBpdCB3aWxsIGFsc28gZW5zdXJlIHRoYXQgYW55IEdldExvY2FscyBmcm9tIHRoZSBz
ZWNvbmQgYmxvY2sgdGhhdCByZWZlciB0bwpAQCAtNDExLDkgKzM5Myw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIC8vIHRoZW4gUGhhbnRvbXMgYXJlIGluc2VydGVkIGZvciBhbnl0aGluZyB0aGF0IHRo
ZSBqZXR0aXNvbmVkQmxvY2sgd291bGQgaGF2ZQogICAgICAgICAvLyBrZXB0IGFsaXZlLgogICAg
ICAgICAKLSAgICAgICAgQmFzaWNCbG9jayogZmlyc3RCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
Zmlyc3RCbG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgQmFzaWNCbG9jayogc2Vjb25kQmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW3NlY29uZEJsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICAKICAg
ICAgICAgLy8gUmVtb3ZlIHRoZSB0ZXJtaW5hbCBvZiBmaXJzdEJsb2NrIHNpbmNlIHdlIGRvbid0
IG5lZWQgaXQgYW55bW9yZS4gV2VsbCwgd2UgZG9uJ3QKICAgICAgICAgLy8gcmVhbGx5IHJlbW92
ZSBpdDsgd2UgYWN0dWFsbHkgdHVybiBpdCBpbnRvIGEgUGhhbnRvbS4KICAgICAgICAgQVNTRVJU
KGZpcnN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKQEAgLTQyMSw4ICs0MDAsOCBAQCBw
cml2YXRlOgogICAgICAgICBmaXJzdEJsb2NrLT5sYXN0KCktPmNvbnZlcnRUb1BoYW50b20oKTsK
ICAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPmxhc3QoKS0+cmVmQ291bnQoKSA9PSAxKTsKICAg
ICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGpldHRpc29uZWRCbG9ja0luZGljZXMu
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW2pldHRpc29uZWRCbG9ja0luZGljZXNbaV1dLmdldCgpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBqZXR0aXNvbmVkQmxvY2tzLnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrID0gamV0dGlzb25lZEJsb2Nr
c1tpXTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gVGltZSB0byBpbnNlcnQgZ2hvc3Rp
ZXMgZm9yIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUga2VwdCBhbGl2ZSBpbiBjYXNlIHdlIE9TUgog
ICAgICAgICAgICAgLy8gZXhpdCBwcmlvciB0byBoaXR0aW5nIHRoZSBmaXJzdEJsb2NrJ3MgdGVy
bWluYWwsIGFuZCBlbmQgdXAgZ29pbmcgZG93biBhCkBAIC00NDcsMjMgKzQyNiwyMyBAQCBwcml2
YXRlOgogICAgICAgICAvLyBwcmVkZWNlc3NvcnMgZWFnZXJseSB0byBlbnN1cmUgdGhhdCB3ZSBr
bm93IHdoYXQgdGhleSBhcmUgaW4gY2FzZSB0aGUgbmV4dCBibG9jayB3ZQogICAgICAgICAvLyBj
b25zaWRlciBpbiB0aGlzIHBoYXNlIHdpc2hlcyB0byBxdWVyeSB0aGUgcHJlZGVjZXNzb3JzIG9m
IG9uZSBvZiB0aGUgYmxvY2tzIHdlCiAgICAgICAgIC8vIGFmZmVjdGVkLgotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3NvcnMoZmlyc3RCbG9jayk7IGktLTspIHsK
LSAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fZ3JhcGgubV9ibG9ja3NbbV9n
cmFwaC5zdWNjZXNzb3IoZmlyc3RCbG9jaywgaSldLmdldCgpOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2op
IHsKLSAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29yc1tqXSA9PSBz
ZWNvbmRCbG9ja0luZGV4KQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPm1fcHJlZGVj
ZXNzb3JzW2pdID0gZmlyc3RCbG9ja0luZGV4OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBm
aXJzdEJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHN1Y2Nlc3NvciA9IGZpcnN0QmxvY2stPnN1Y2Nlc3NvcihpKTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IDA7IGogPCBzdWNjZXNzb3ItPnByZWRlY2Vzc29ycy5zaXplKCk7ICsr
aikgeworICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPnByZWRlY2Vzc29yc1tqXSA9PSBz
ZWNvbmRCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnNb
al0gPSBmaXJzdEJsb2NrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICAvLyBGaXggdGhlIHByZWRlY2Vzc29ycyBvZiBteSBmb3JtZXIgc3VjY2Vzc29ycy4gQWdh
aW4sIHdlJ2QgcmF0aGVyIG5vdCBkbyB0aGlzLCBidXQgaXQncwogICAgICAgICAvLyBhbiB1bmZv
cnR1bmF0ZSBuZWNlc3NpdHkuIFNlZSBhYm92ZSBjb21tZW50LgotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBqZXR0aXNvbmVkQmxvY2tJbmRpY2VzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAg
IGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoZmlyc3RCbG9ja0luZGV4LCBqZXR0aXNvbmVkQmxv
Y2tJbmRpY2VzW2ldKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gamV0dGlzb25lZEJsb2Nr
cy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGZp
cnN0QmxvY2ssIGpldHRpc29uZWRCbG9ja3NbaV0pOwogICAgICAgICAKICAgICAgICAgZmlyc3RC
bG9jay0+dmFsdWVzQXRUYWlsID0gc2Vjb25kQmxvY2stPnZhbHVlc0F0VGFpbDsKICAgICAgICAg
Zmlyc3RCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uID0gc2Vjb25kQmxvY2stPmNmYUJyYW5jaERp
cmVjdGlvbjsKICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nbc2Vjb25kQmxvY2tJ
bmRleF0uY2xlYXIoKTsKKyAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soc2Vjb25kQmxvY2spOwog
ICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDA5LDcgKzQwOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBwaGlTdGFjay5yZW1v
dmVMYXN0KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
ZW50cnkubV9ibG9jazsKLSAgICAgICAgICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3Jz
ID0gYmxvY2stPm1fcHJlZGVjZXNzb3JzOworICAgICAgICAgICAgUHJlZGVjZXNzb3JMaXN0JiBw
cmVkZWNlc3NvcnMgPSBibG9jay0+cHJlZGVjZXNzb3JzOwogICAgICAgICAgICAgTm9kZSogY3Vy
cmVudFBoaSA9IGVudHJ5Lm1fcGhpOwogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZSA9IGN1cnJlbnRQaGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAg
c2l6ZV90IGluZGV4ID0gZW50cnkubV9pbmRleDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9taW5hdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
OSArNDQsOSBAQCB2b2lkIERvbWluYXRvcnM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQogewogICAg
IC8vIFRoaXMgaW1wbGVtZW50cyBhIG5haXZlIGRvbWluYXRvciBzb2x2ZXIuCiAgICAgCi0gICAg
QVNTRVJUKGdyYXBoLm1fYmxvY2tzWzBdLT5tX3ByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOworICAg
IEFTU0VSVChncmFwaC5ibG9jaygwKS0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSk7CiAgICAgCi0g
ICAgdW5zaWduZWQgbnVtQmxvY2tzID0gZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOworICAgIHVuc2ln
bmVkIG51bUJsb2NrcyA9IGdyYXBoLm51bUJsb2NrcygpOwogICAgIAogICAgIGlmIChudW1CbG9j
a3MgPiBtX3Jlc3VsdHMuc2l6ZSgpKSB7CiAgICAgICAgIG1fcmVzdWx0cy5ncm93KG51bUJsb2Nr
cyk7CkBAIC02MCwxMyArNjAsMTMgQEAgdm9pZCBEb21pbmF0b3JzOjpjb21wdXRlKEdyYXBoJiBn
cmFwaCkKICAgICAKICAgICBtX3NjcmF0Y2guY2xlYXJBbGwoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1CbG9ja3M7IGktLTspIHsKLSAgICAgICAgaWYgKCFncmFwaC5tX2Jsb2Nrc1tpXSkK
KyAgICAgICAgaWYgKCFncmFwaC5ibG9jayhpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBtX3NjcmF0Y2guc2V0KGkpOwogICAgIH0KICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBudW1CbG9ja3M7IGktLSA+IDE7KSB7Ci0gICAgICAgIGlmICghZ3JhcGgubV9ibG9ja3NbaV0g
fHwgZ3JhcGgubV9ibG9ja3NbaV0tPm1fcHJlZGVjZXNzb3JzLmlzRW1wdHkoKSkKKyAgICAgICAg
aWYgKCFncmFwaC5ibG9jayhpKSB8fCBncmFwaC5ibG9jayhpKS0+cHJlZGVjZXNzb3JzLmlzRW1w
dHkoKSkKICAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5jbGVhckFsbCgpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBtX3Jlc3VsdHNbaV0uc2V0KG1fc2NyYXRjaCk7CkBAIC04OCwxNCArODgs
MTQgQEAgdm9pZCBEb21pbmF0b3JzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKIAogYm9vbCBEb21p
bmF0b3JzOjppdGVyYXRlRm9yQmxvY2soR3JhcGgmIGdyYXBoLCBCbG9ja0luZGV4IGkpCiB7Ci0g
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5tX2Jsb2Nrc1tpXS5nZXQoKTsKKyAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGkpOwogICAgIGlmICghYmxvY2spCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoYmxvY2stPm1fcHJlZGVjZXNzb3JzLmlzRW1wdHkoKSkK
KyAgICBpZiAoYmxvY2stPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBtX3NjcmF0Y2guc2V0KG1fcmVzdWx0c1tibG9jay0+bV9wcmVkZWNlc3NvcnNb
MF1dKTsKLSAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgp
OyBqLS0gPiAxOykKLSAgICAgICAgbV9zY3JhdGNoLmZpbHRlcihtX3Jlc3VsdHNbYmxvY2stPm1f
cHJlZGVjZXNzb3JzW2pdXSk7CisgICAgbV9zY3JhdGNoLnNldChtX3Jlc3VsdHNbYmxvY2stPnBy
ZWRlY2Vzc29yc1swXS0+aW5kZXhdKTsKKyAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJl
ZGVjZXNzb3JzLnNpemUoKTsgai0tID4gMTspCisgICAgICAgIG1fc2NyYXRjaC5maWx0ZXIobV9y
ZXN1bHRzW2Jsb2NrLT5wcmVkZWNlc3NvcnNbal0tPmluZGV4XSk7CiAgICAgbV9zY3JhdGNoLnNl
dChpKTsKICAgICByZXR1cm4gbV9yZXN1bHRzW2ldLnNldEFuZENoZWNrKG1fc2NyYXRjaCk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAkocmV2aXNp
b24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDEwICs0NSwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCBjb21wdXRlKEdyYXBoJiBncmFwaCk7CiAgICAgCi0gICAgYm9vbCBkb21pbmF0ZXMoQmxvY2tJ
bmRleCBmcm9tLCBCbG9ja0luZGV4IHRvKSBjb25zdAorICAgIGJvb2wgZG9taW5hdGVzKEJhc2lj
QmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KGlzVmFsaWQoKSk7Ci0gICAgICAgIHJldHVybiBtX3Jlc3VsdHNbdG9dLmdldChmcm9tKTsKKyAg
ICAgICAgcmV0dXJuIG1fcmVzdWx0c1t0by0+aW5kZXhdLmdldChmcm9tLT5pbmRleCk7CiAgICAg
fQogICAgIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY5LDMzICsyNjksMzEgQEAgdm9pZCBHcmFwaDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIG91dC5wcmludCgiXG4iKTsKIH0KIAot
dm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIq
IHByZWZpeCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBQaGlOb2RlRHVtcE1vZGUgcGhpTm9kZUR1
bXBNb2RlKQordm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJiBvdXQsIGNv
bnN0IGNoYXIqIHByZWZpeCwgQmFzaWNCbG9jayogYmxvY2ssIFBoaU5vZGVEdW1wTW9kZSBwaGlO
b2RlRHVtcE1vZGUpCiB7Ci0gICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0lu
ZGV4XS5nZXQoKTsKLQotICAgIG91dC5wcmludChwcmVmaXgsICJCbG9jayAjIiwgYmxvY2tJbmRl
eCwgIiAoIiwgYmxvY2stPmF0KDApLT5jb2RlT3JpZ2luLCAiKTogIiwgYmxvY2stPmlzUmVhY2hh
YmxlID8gIiIgOiAiKHNraXBwZWQpIiwgYmxvY2stPmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdl
dCkiIDogIiIsICJcbiIpOworICAgIG91dC5wcmludChwcmVmaXgsICJCbG9jayAjIiwgYmxvY2st
PmJsb2NrSW5kZXgsICIgKCIsIGJsb2NrLT5hdCgwKS0+Y29kZU9yaWdpbiwgIik6ICIsIGJsb2Nr
LT5pc1JlYWNoYWJsZSA/ICIiIDogIihza2lwcGVkKSIsIGJsb2NrLT5pc09TUlRhcmdldCA/ICIg
KE9TUiB0YXJnZXQpIiA6ICIiLCAiXG4iKTsKICAgICBvdXQucHJpbnQocHJlZml4LCAiICBQcmVk
ZWNlc3NvcnM6Iik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bV9wcmVkZWNl
c3NvcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG91dC5wcmludCgiICMiLCBibG9jay0+bV9wcmVk
ZWNlc3NvcnNbaV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnByZWRlY2Vz
c29ycy5zaXplKCk7ICsraSkKKyAgICAgICAgb3V0LnByaW50KCIgIyIsIGJsb2NrLT5wcmVkZWNl
c3NvcnNbaV0pOwogICAgIG91dC5wcmludCgiXG4iKTsKICAgICBpZiAobV9kb21pbmF0b3JzLmlz
VmFsaWQoKSkgewogICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBEb21pbmF0ZWQgYnk6Iik7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyhpLCBibG9ja0luZGV4KSkK
KyAgICAgICAgICAgIGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyhpLCBibG9jay0+YmxvY2tJ
bmRleCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBvdXQucHJpbnQo
IiAjIiwgaSk7CiAgICAgICAgIH0KICAgICAgICAgb3V0LnByaW50KCJcbiIpOwogICAgICAgICBv
dXQucHJpbnQocHJlZml4LCAiICBEb21pbmF0ZXM6Iik7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghbV9kb21p
bmF0b3JzLmRvbWluYXRlcyhibG9ja0luZGV4LCBpKSkKKyAgICAgICAgICAgIGlmICghbV9kb21p
bmF0b3JzLmRvbWluYXRlcyhibG9jay0+YmxvY2tJbmRleCwgaSkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICBvdXQucHJpbnQoIiAjIiwgaSk7CiAgICAgICAgIH0KICAg
ICAgICAgb3V0LnByaW50KCJcbiIpOwogICAgIH0KICAgICBpZiAobV9uYXR1cmFsTG9vcHMuaXNW
YWxpZCgpKSB7Ci0gICAgICAgIGlmIChjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9IG1fbmF0dXJh
bExvb3BzLmhlYWRlck9mKGJsb2NrSW5kZXgpKSB7CisgICAgICAgIGlmIChjb25zdCBOYXR1cmFs
TG9vcCogbG9vcCA9IG1fbmF0dXJhbExvb3BzLmhlYWRlck9mKGJsb2NrLT5ibG9ja0luZGV4KSkg
ewogICAgICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgTG9vcCBoZWFkZXIsIGNvbnRhaW5z
OiIpOwogICAgICAgICAgICAgVmVjdG9yPEJsb2NrSW5kZXg+IHNvcnRlZEJsb2NrTGlzdDsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsb29wLT5zaXplKCk7ICsraSkKQEAg
LTM5NCwyOSArMzkyLDI1IEBAIHZvaWQgR3JhcGg6OmRldGhyZWFkKCkKICAgICBtX2Zvcm0gPSBM
b2FkU3RvcmU7CiB9CiAKLXZvaWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJ
bmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1
Y2Nlc3NvckluZGV4KQordm9pZCBHcmFwaDo6aGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCYXNpY0Js
b2NrKiwgMTY+JiB3b3JrbGlzdCwgQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHN1Y2Nl
c3NvcikKIHsKLSAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBtX2Jsb2Nrc1tzdWNjZXNzb3JJ
bmRleF0uZ2V0KCk7CiAgICAgaWYgKCFzdWNjZXNzb3ItPmlzUmVhY2hhYmxlKSB7CiAgICAgICAg
IHN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUgPSB0cnVlOwotICAgICAgICB3b3JrbGlzdC5hcHBlbmQo
c3VjY2Vzc29ySW5kZXgpOworICAgICAgICB3b3JrbGlzdC5hcHBlbmQoc3VjY2Vzc29yKTsKICAg
ICB9CiAgICAgCi0gICAgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoYmxvY2tJbmRl
eCk7CisgICAgc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMuYXBwZW5kKGJsb2NrKTsKIH0KIAogdm9p
ZCBHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCkKIHsKLSAgICBWZWN0b3I8QmxvY2tJbmRl
eCwgMTY+IHdvcmtsaXN0OwotICAgIHdvcmtsaXN0LmFwcGVuZCgwKTsKLSAgICBtX2Jsb2Nrc1sw
XS0+aXNSZWFjaGFibGUgPSB0cnVlOworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IHdvcmts
aXN0OworICAgIHdvcmtsaXN0LmFwcGVuZChibG9jaygwKSk7CisgICAgYmxvY2soMCktPmlzUmVh
Y2hhYmxlID0gdHJ1ZTsKICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAg
ICBCbG9ja0luZGV4IGluZGV4ID0gd29ya2xpc3QubGFzdCgpOwotICAgICAgICB3b3JrbGlzdC5y
ZW1vdmVMYXN0KCk7Ci0gICAgICAgIAotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxv
Y2tzW2luZGV4XS5nZXQoKTsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC50
YWtlTGFzdCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1TdWNjZXNzb3JzKGJsb2Nr
KTsgaS0tOykKLSAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIHN1
Y2Nlc3NvcihibG9jaywgaSkpOworICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0
LCBibG9jaywgc3VjY2Vzc29yKGJsb2NrLCBpKSk7CiAgICAgfQogfQogCkBAIC00MjcsNyArNDIx
LDcgQEAgdm9pZCBHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkoKQogICAgICAgICBpZiAoIWJsb2Nr
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGJsb2NrLT5pc1JlYWNoYWJsZSA9IGZh
bHNlOwotICAgICAgICBibG9jay0+bV9wcmVkZWNlc3NvcnMuY2xlYXIoKTsKKyAgICAgICAgYmxv
Y2stPnByZWRlY2Vzc29ycy5jbGVhcigpOwogICAgIH0KICAgICAKICAgICBkZXRlcm1pbmVSZWFj
aGFiaWxpdHkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlz
aW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29y
a2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIHB1YmxpYzoKICAgICAvLyBDb2RlQmxvY2sg
aXMgb3B0aW9uYWwsIGJ1dCBtYXkgYWxsb3cgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBiZSBk
dW1wZWQgKGUuZy4gSWRlbnRpZmllciBuYW1lcykuCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiA9IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgZW51bSBQaGlOb2RlRHVtcE1vZGUgeyBEdW1wTGl2
ZVBoaXNPbmx5LCBEdW1wQWxsUGhpcyB9OwotICAgIHZvaWQgZHVtcEJsb2NrSGVhZGVyKFByaW50
U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBCbG9ja0luZGV4LCBQaGlOb2RlRHVtcE1vZGUp
OworICAgIHZvaWQgZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJl
Zml4LCBCYXNpY0Jsb2NrKiwgUGhpTm9kZUR1bXBNb2RlKTsKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mLCBFZGdlKTsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBw
cmVmaXgsIE5vZGUqKTsKICAgICBzdGF0aWMgaW50IGFtb3VudE9mTm9kZVdoaXRlU3BhY2UoTm9k
ZSopOwpAQCAtMTc5LDggKzE3OSw2IEBAIHB1YmxpYzoKICAgICAvLyBwcmVjZWRpbmcgbm9kZS4g
UmV0dXJucyB0cnVlIGlmIGFueXRoaW5nIHdhcyBwcmludGVkLgogICAgIGJvb2wgZHVtcENvZGVP
cmlnaW4oUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIHByZXZpb3VzTm9k
ZSwgTm9kZSogY3VycmVudE5vZGUpOwogCi0gICAgQmxvY2tJbmRleCBibG9ja0luZGV4Rm9yQnl0
ZWNvZGVPZmZzZXQoVmVjdG9yPEJsb2NrSW5kZXg+JiBibG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2Rl
QmVnaW4pOwotCiAgICAgU3BlY3VsYXRlZFR5cGUgZ2V0SlNDb25zdGFudFNwZWN1bGF0aW9uKE5v
ZGUqIG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobm9k
ZS0+dmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKTsKQEAgLTQ1NSwxNyArNDUzLDI0IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCk7CiAg
ICAgfQogICAgIAotICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoQmFzaWNCbG9jayogYmxvY2sp
CisgICAgQmxvY2tJbmRleCBudW1CbG9ja3MoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXpl
KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBibG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOyB9CisgICAgQmFzaWNCbG9jayog
bGFzdEJsb2NrKCkgY29uc3QgeyByZXR1cm4gYmxvY2sobnVtQmxvY2tzKCkgLSAxKTsgfQorCisg
ICAgdm9pZCBhcHBlbmRCbG9jayhQYXNzUmVmUHRyPEJhc2ljQmxvY2s+IGJhc2ljQmxvY2spCiAg
ICAgewotICAgICAgICByZXR1cm4gYmxvY2stPmxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOworICAg
ICAgICBiYXNpY0Jsb2NrLT5ibG9ja0luZGV4ID0gbV9ibG9ja3Muc2l6ZSgpOworICAgICAgICBt
X2Jsb2Nrcy5hcHBlbmQoYmFzaWNCbG9jayk7CiAgICAgfQotICAgIEJsb2NrSW5kZXggc3VjY2Vz
c29yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICAKKyAgICB2b2lkIGtp
bGxCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gYmxv
Y2stPmxhc3QoKS0+c3VjY2Vzc29yKGluZGV4KTsKKyAgICAgICAgbV9ibG9ja3NbYmxvY2tJbmRl
eF0uY2xlYXIoKTsKICAgICB9Ci0gICAgQmxvY2tJbmRleCBzdWNjZXNzb3JGb3JDb25kaXRpb24o
QmFzaWNCbG9jayogYmxvY2ssIGJvb2wgY29uZGl0aW9uKQorICAgIAorICAgIHZvaWQga2lsbEJs
b2NrKEJhc2ljQmxvY2sqIGJhc2ljQmxvY2spCiAgICAgewotICAgICAgICByZXR1cm4gYmxvY2st
Pmxhc3QoKS0+c3VjY2Vzc29yRm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7CisgICAgICAgIGtpbGxC
bG9jayhiYXNpY0Jsb2NrLT5pbmRleCk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNQcmVkaWN0
ZWROdW1lcmljYWwoTm9kZSogbm9kZSkKQEAgLTY1OSw3ICs2NjQsNyBAQCBwdWJsaWM6CiAgICAg
CiAgICAgTm9kZUFsbG9jYXRvciYgbV9hbGxvY2F0b3I7CiAKLSAgICBWZWN0b3I8IE93blB0cjxC
YXNpY0Jsb2NrPiAsIDg+IG1fYmxvY2tzOworICAgIFZlY3RvcjwgUmVmUHRyPEJhc2ljQmxvY2s+
ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPEVkZ2UsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOwog
ICAgIFZlY3RvcjxTdG9yYWdlQWNjZXNzRGF0YT4gbV9zdG9yYWdlQWNjZXNzRGF0YTsKICAgICBW
ZWN0b3I8Tm9kZSosIDg+IG1fYXJndW1lbnRzOwpAQCAtNjgzLDcgKzY4OCw3IEBAIHB1YmxpYzoK
ICAgICBSZWZDb3VudFN0YXRlIG1fcmVmQ291bnRTdGF0ZTsKIHByaXZhdGU6CiAgICAgCi0gICAg
dm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJs
b2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCk7CisgICAgdm9p
ZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBCYXNp
Y0Jsb2NrKiwgQmFzaWNCbG9jayogc3VjY2Vzc29yKTsKICAgICAKICAgICBBZGRTcGVjdWxhdGlv
bk1vZGUgYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBhZGQsIGJvb2wg
dmFyaWFibGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBOb2RlKiBpbW1lZGlhdGUpCiAgICAgewpA
QCAtNzMyLDI3ICs3MzcsNiBAQCBwcml2YXRlOgogICAgIH0KIH07CiAKLWNsYXNzIEdldEJ5dGVj
b2RlQmVnaW5Gb3JCbG9jayB7Ci1wdWJsaWM6Ci0gICAgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2Nr
KEdyYXBoJiBncmFwaCkKLSAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQotICAgIHsKLSAgICB9Ci0g
ICAgCi0gICAgdW5zaWduZWQgb3BlcmF0b3IoKShCbG9ja0luZGV4KiBibG9ja0luZGV4KSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGgubV9ibG9ja3NbKmJsb2NrSW5kZXhdLT5i
eXRlY29kZUJlZ2luOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaCYgbV9ncmFwaDsKLX07
Ci0KLWlubGluZSBCbG9ja0luZGV4IEdyYXBoOjpibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQo
VmVjdG9yPEJsb2NrSW5kZXg+JiBsaW5raW5nVGFyZ2V0cywgdW5zaWduZWQgYnl0ZWNvZGVCZWdp
bikKLXsKLSAgICByZXR1cm4gKmJpbmFyeVNlYXJjaDxCbG9ja0luZGV4LCB1bnNpZ25lZD4obGlu
a2luZ1RhcmdldHMsIGxpbmtpbmdUYXJnZXRzLnNpemUoKSwgYnl0ZWNvZGVCZWdpbiwgR2V0Qnl0
ZWNvZGVCZWdpbkZvckJsb2NrKCp0aGlzKSk7Ci19Ci0KICNkZWZpbmUgREZHX05PREVfRE9fVE9f
Q0hJTERSRU4oZ3JhcGgsIG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAgICAgICAgIFwKICAgICAg
ICAgTm9kZSogX25vZGUgPSAobm9kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgaWYgKF9ub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3Mp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjAsMjYgKzYwLDI2IEBAIHZvaWQgTmF0dXJhbExvb3BzOjpjb21wdXRlKEdyYXBoJiBncmFw
aCkKICAgICAKICAgICBtX2xvb3BzLnJlc2l6ZSgwKTsKICAgICAKLSAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IGdyYXBoLm1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleC0tOykgewot
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdl
dCgpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7
IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZ3JhcGgubnVtU3VjY2Vzc29y
cyhibG9jayk7IGktLTspIHsKLSAgICAgICAgICAgIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgg
PSBncmFwaC5zdWNjZXNzb3IoYmxvY2ssIGkpOwotICAgICAgICAgICAgaWYgKCFncmFwaC5tX2Rv
bWluYXRvcnMuZG9taW5hdGVzKHN1Y2Nlc3NvckluZGV4LCBibG9ja0luZGV4KSkKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGdyYXBoLnN1Y2Nlc3NvcihibG9jaywgaSk7Cisg
ICAgICAgICAgICBpZiAoIWdyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMoc3VjY2Vzc29yLCBi
bG9jaykpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBib29sIGZvdW5k
ID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBtX2xvb3BzLnNpemUoKTsg
ai0tOykgewotICAgICAgICAgICAgICAgIGlmIChtX2xvb3BzW2ldLmhlYWRlcigpID09IHN1Y2Nl
c3NvckluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbG9vcHNbaV0uYWRkQmxvY2soYmxv
Y2tJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKG1fbG9vcHNbaV0uaGVhZGVyKCkgPT0gc3Vj
Y2Vzc29yKSB7CisgICAgICAgICAgICAgICAgICAgIG1fbG9vcHNbaV0uYWRkQmxvY2soYmxvY2sp
OwogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGZvdW5kKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgTmF0dXJhbExvb3AgbG9vcChzdWNjZXNzb3JJbmRleCk7Ci0g
ICAgICAgICAgICBsb29wLmFkZEJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgTmF0dXJh
bExvb3AgbG9vcChzdWNjZXNzb3IpOworICAgICAgICAgICAgbG9vcC5hZGRCbG9jayhibG9jayk7
CiAgICAgICAgICAgICBtX2xvb3BzLmFwcGVuZChsb29wKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTg4LDggKzg4LDggQEAgdm9pZCBOYXR1cmFsTG9vcHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQog
ICAgICAgICBkYXRhTG9nKCJBZnRlciBib290c3RyYXA6ICIsICp0aGlzLCAiXG4iKTsKICAgICAK
ICAgICBGYXN0Qml0VmVjdG9yIHNlZW5CbG9ja3M7Ci0gICAgVmVjdG9yPEJsb2NrSW5kZXgsIDQ+
IGJsb2NrV29ya2xpc3Q7Ci0gICAgc2VlbkJsb2Nrcy5yZXNpemUoZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpKTsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayosIDQ+IGJsb2NrV29ya2xpc3Q7CisgICAgc2Vl
bkJsb2Nrcy5yZXNpemUoZ3JhcGgubnVtQmxvY2tzKCkpOwogICAgIAogICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fbG9vcHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIE5hdHVyYWxMb29wJiBsb29w
ID0gbV9sb29wc1tpXTsKQEAgLTEwMSwzMCArMTAxLDI3IEBAIHZvaWQgTmF0dXJhbExvb3BzOjpj
b21wdXRlKEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgIGRhdGFMb2coIkRlYWxpbmcgd2l0aCBs
b29wICIsIGxvb3AsICJcbiIpOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
bG9vcC5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgIHNlZW5CbG9ja3Muc2V0KGxvb3Bbal0p
OworICAgICAgICAgICAgc2VlbkJsb2Nrcy5zZXQobG9vcFtqXS0+aW5kZXgpOwogICAgICAgICAg
ICAgYmxvY2tXb3JrbGlzdC5hcHBlbmQobG9vcFtqXSk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIHdoaWxlICghYmxvY2tXb3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IGJsb2NrV29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gYmxvY2tXb3JrbGlzdC50YWtlTGFzdCgpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgRGVhbGluZyB3aXRoICMiLCBibG9ja0luZGV4LCAiXG4iKTsKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgRGVhbGluZyB3aXRoICIsICpibG9jaywgIlxuIik7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChibG9ja0luZGV4ID09IGxvb3AuaGVhZGVyKCkpCisgICAgICAg
ICAgICBpZiAoYmxvY2sgPT0gbG9vcC5oZWFkZXIoKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIEFTU0VSVChibG9jayk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5tX3ByZWRl
Y2Vzc29ycy5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHByZWRl
Y2Vzc29ySW5kZXggPSBibG9jay0+bV9wcmVkZWNlc3NvcnNbal07Ci0gICAgICAgICAgICAgICAg
aWYgKHNlZW5CbG9ja3MuZ2V0KHByZWRlY2Vzc29ySW5kZXgpKQorICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGotLTspIHsKKyAgICAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNbal07
CisgICAgICAgICAgICAgICAgaWYgKHNlZW5CbG9ja3MuZ2V0KHByZWRlY2Vzc29yLT5pbmRleCkp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGxvb3AuYWRkQmxvY2socHJlZGVjZXNzb3JJbmRleCk7Ci0gICAgICAgICAgICAg
ICAgYmxvY2tXb3JrbGlzdC5hcHBlbmQocHJlZGVjZXNzb3JJbmRleCk7Ci0gICAgICAgICAgICAg
ICAgc2VlbkJsb2Nrcy5zZXQocHJlZGVjZXNzb3JJbmRleCk7CisgICAgICAgICAgICAgICAgbG9v
cC5hZGRCbG9jayhwcmVkZWNlc3NvcjsKKyAgICAgICAgICAgICAgICBibG9ja1dvcmtsaXN0LmFw
cGVuZChwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgc2VlbkJsb2Nrcy5zZXQocHJlZGVj
ZXNzb3ItPmluZGV4KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEzMywx
MiArMTMwLDEyIEBAIHZvaWQgTmF0dXJhbExvb3BzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKICAg
ICAgICAgZGF0YUxvZygiUmVzdWx0czogIiwgKnRoaXMsICJcbiIpOwogfQogCi1WZWN0b3I8Y29u
c3QgTmF0dXJhbExvb3AqPiBOYXR1cmFsTG9vcHM6Omxvb3BzT2YoQmxvY2tJbmRleCBibG9ja0lu
ZGV4KSBjb25zdAorVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gTmF0dXJhbExvb3BzOjpsb29w
c09mKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAogewogICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFs
TG9vcCo+IHJlc3VsdDsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvb3BzLnNpemUo
KTsgaS0tOykgewotICAgICAgICBpZiAobV9sb29wc1tpXS5jb250YWlucyhibG9ja0luZGV4KSkK
KyAgICAgICAgaWYgKG1fbG9vcHNbaV0uY29udGFpbnMoYmxvY2spKQogICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgmbV9sb29wc1tpXSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCShyZXZpc2lvbiAxNTIzMzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MiwyMCArNDIsMjAgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgTmF0
dXJhbExvb3AoQmxvY2tJbmRleCBoZWFkZXIpCisgICAgTmF0dXJhbExvb3AoQmFzaWNCbG9jayog
aGVhZGVyKQogICAgICAgICA6IG1faGVhZGVyKGhlYWRlcikKICAgICB7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgYWRkQmxvY2soQmxvY2tJbmRleCBibG9jaykgeyBtX2JvZHkuYXBwZW5kKGJsb2Nr
KTsgfQorICAgIHZvaWQgYWRkQmxvY2soQmFzaWNCbG9jayogYmxvY2spIHsgbV9ib2R5LmFwcGVu
ZChibG9jayk7IH0KICAgICAKLSAgICBCbG9ja0luZGV4IGhlYWRlcigpIGNvbnN0IHsgcmV0dXJu
IG1faGVhZGVyOyB9CisgICAgQmFzaWNCbG9jayogaGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV9o
ZWFkZXI7IH0KICAgICAKICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ib2R5
LnNpemUoKTsgfQotICAgIEJsb2NrSW5kZXggYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4g
bV9ib2R5W2ldOyB9Ci0gICAgQmxvY2tJbmRleCBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0
IHsgcmV0dXJuIGF0KGkpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaSkgY29uc3Qg
eyByZXR1cm4gbV9ib2R5W2ldOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25l
ZCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQogICAgIAotICAgIGJvb2wgY29udGFpbnMoQmxv
Y2tJbmRleCBibG9jaykgY29uc3QKKyAgICBib29sIGNvbnRhaW5zKEJhc2ljQmxvY2sqIGJsb2Nr
KSBjb25zdAogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ib2R5LnNpemUoKTsg
aS0tOykgewogICAgICAgICAgICAgaWYgKG1fYm9keVtpXSA9PSBibG9jaykKQEAgLTY3LDggKzY3
LDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owog
cHJpdmF0ZToKLSAgICBCbG9ja0luZGV4IG1faGVhZGVyOwotICAgIFZlY3RvcjxCbG9ja0luZGV4
LCA0PiBtX2JvZHk7CisgICAgQmFzaWNCbG9jayogbV9oZWFkZXI7CisgICAgVmVjdG9yPEJsb2Nr
QmxvY2sqLCA0PiBtX2JvZHk7CiB9OwogCiBjbGFzcyBOYXR1cmFsTG9vcHMgOiBwdWJsaWMgQW5h
bHlzaXM8TmF0dXJhbExvb3BzPiB7CkBAIC05MSwxNyArOTEsMTcgQEAgcHVibGljOgogICAgIAog
ICAgIC8vIFJldHVybiBlaXRoZXIgbnVsbCBpZiB0aGUgYmxvY2sgaXNuJ3QgYSBsb29wIGhlYWRl
ciwgb3IgdGhlCiAgICAgLy8gbG9vcCBpdCBiZWxvbmdzIHRvLgotICAgIGNvbnN0IE5hdHVyYWxM
b29wKiBoZWFkZXJPZihCbG9ja0luZGV4IGJsb2NrSW5kZXgpIGNvbnN0CisgICAgY29uc3QgTmF0
dXJhbExvb3AqIGhlYWRlck9mKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb29wcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAg
IGlmIChtX2xvb3BzW2ldLmhlYWRlcigpID09IGJsb2NrSW5kZXgpCisgICAgICAgICAgICBpZiAo
bV9sb29wc1tpXS5oZWFkZXIoKSA9PSBibG9jaykKICAgICAgICAgICAgICAgICByZXR1cm4gJm1f
bG9vcHNbaV07CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAogICAg
IC8vIFJldHVybiB0aGUgaW5kaWNlcyBvZiBhbGwgbG9vcHMgdGhpcyBiZWxvbmdzIHRvLgotICAg
IFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IGxvb3BzT2YoQmxvY2tJbmRleCBibG9ja0luZGV4
KSBjb25zdDsKKyAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBsb29wc09mKEJhc2ljQmxv
Y2sqKSBjb25zdDsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogcHJpdmF0
ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNTIzMzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDgsNiArNDgsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK3N0
cnVjdCBCYXNpY0Jsb2NrOworCiBzdHJ1Y3QgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEgewogICAg
IFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmU7CkBAIC04MCwxOCArODIsMjggQEAgc3RydWN0IE5ld0FycmF5QnVmZmVyRGF0YSB7CiAvLyB2
YWx1ZXMuCiBzdHJ1Y3QgU3dpdGNoQ2FzZSB7CiAgICAgU3dpdGNoQ2FzZSgpCi0gICAgICAgIDog
dGFyZ2V0KE5vQmxvY2spCisgICAgICAgIDogdGFyZ2V0KDApCiAgICAgewogICAgIH0KICAgICAK
LSAgICBTd2l0Y2hDYXNlKExhenlKU1ZhbHVlIHZhbHVlLCBCbG9ja0luZGV4IHRhcmdldCkKKyAg
ICBTd2l0Y2hDYXNlKExhenlKU1ZhbHVlIHZhbHVlLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCiAgICAg
ICAgIDogdmFsdWUodmFsdWUpCiAgICAgICAgICwgdGFyZ2V0KHRhcmdldCkKICAgICB7CiAgICAg
fQogICAgIAorICAgIHN0YXRpYyBTd2l0Y2hDYXNlIHdpdGhCeXRlY29kZUluZGV4KExhenlKU1Zh
bHVlIHZhbHVlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgIHsKKyAgICAgICAgU3dpdGNo
Q2FzZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC52YWx1ZSA9IHZhbHVlOworICAgICAgICByZXN1
bHQudGFyZ2V0ID0gYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqPihzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
CisgICAgdW5zaWduZWQgdGFyZ2V0Qnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KHRhcmdldCk7IH0KKyAgICAKICAgICBMYXp5SlNWYWx1ZSB2YWx1
ZTsKLSAgICBCbG9ja0luZGV4IHRhcmdldDsKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQ7CiB9Owog
CiBlbnVtIFN3aXRjaEtpbmQgewpAQCAtMTEzLDcgKzEyNSw3IEBAIHN0cnVjdCBTd2l0Y2hEYXRh
IHsKICAgICB9CiAgICAgCiAgICAgVmVjdG9yPFN3aXRjaENhc2U+IGNhc2VzOwotICAgIEJsb2Nr
SW5kZXggZmFsbFRocm91Z2g7CisgICAgQmFzaWNCbG9jayogZmFsbFRocm91Z2g7CiAgICAgU3dp
dGNoS2luZCBraW5kOwogICAgIHVuc2lnbmVkIHN3aXRjaFRhYmxlSW5kZXg7CiAgICAgYm9vbCBk
aWRVc2VKdW1wVGFibGU7CkBAIC03NDMsMjggKzc1NSwyOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgIHJldHVybiBtX29wSW5mbzI7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0VGFrZW5CbG9j
a0luZGV4KEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB2b2lkIHNldFRha2VuQmxvY2soQmFz
aWNCbG9jayogYmxvY2spCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1
bXAoKSk7Ci0gICAgICAgIG1fb3BJbmZvID0gYmxvY2tJbmRleDsKKyAgICAgICAgbV9vcEluZm8g
PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihibG9jayk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
c2V0Tm90VGFrZW5CbG9ja0luZGV4KEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB2b2lkIHNl
dE5vdFRha2VuQmxvY2soQmFzaWNCbG9jayogYmxvY2spCiAgICAgewogICAgICAgICBBU1NFUlQo
aXNCcmFuY2goKSk7Ci0gICAgICAgIG1fb3BJbmZvMiA9IGJsb2NrSW5kZXg7CisgICAgICAgIG1f
b3BJbmZvMiA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGJsb2NrKTsKICAgICB9CiAgICAgCi0g
ICAgQmxvY2tJbmRleCB0YWtlbkJsb2NrSW5kZXgoKQorICAgIEJhc2ljQmxvY2sqIHRha2VuQmxv
Y2tJbmRleCgpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7
Ci0gICAgICAgIHJldHVybiBtX29wSW5mbzsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxC
YXNpY0Jsb2NrKj4obV9vcEluZm8pOwogICAgIH0KICAgICAKLSAgICBCbG9ja0luZGV4IG5vdFRh
a2VuQmxvY2tJbmRleCgpCisgICAgQmFzaWNCbG9jayogbm90VGFrZW5CbG9ja0luZGV4KCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsKLSAgICAgICAgcmV0dXJuIG1fb3BJbmZv
MjsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcEluZm8yKTsK
ICAgICB9CiAgICAgCiAgICAgU3dpdGNoRGF0YSogc3dpdGNoRGF0YSgpCkBAIC03ODcsNyArNzk5
LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEJsb2NrSW5k
ZXggc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQorICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1
bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIGlmIChpc1N3aXRjaCgpKSB7CiAgICAgICAg
ICAgICBpZiAoaW5kZXggPCBzd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjI1LDE0ICsyMjUsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBU
aGVyZSBtdXN0IGV4aXN0IGEgcHJlZGVjZXNzb3IgYmxvY2sgdGhhdCBoYXMgdGhpcyBub2RlIGlu
ZGV4IGluCiAgICAgICAgICAgICAgICAgICAgIC8vIGl0cyB0YWlsIHZhcmlhYmxlcy4KICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgYmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytr
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmV2QmxvY2sgPSBtX2dy
YXBoLm1fYmxvY2tzW2Jsb2NrLT5tX3ByZWRlY2Vzc29yc1trXV0uZ2V0KCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgoQmxvY2ssIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSks
IHByZXZCbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoQmxvY2ssIGJs
b2NrLT5tX3ByZWRlY2Vzc29yc1trXSksIHByZXZCbG9jay0+aXNSZWFjaGFibGUpOworICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgYmxvY2stPnByZWRlY2Vzc29y
cy5zaXplKCk7ICsraykgeworICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJl
dkJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9jay0+cHJlZGVjZXNzb3JzW2tdXS5nZXQoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChCbG9jaywgYmxvY2stPnByZWRlY2Vz
c29yc1trXSksIHByZXZCbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
QmxvY2ssIGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2stPmlzUmVhY2hhYmxlKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZOb2RlID0gcHJldkJsb2NrLT52YXJp
YWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIGEgUGhpIHRoYXQgaXMgbm90IHJlZmVycmluZyB0byAqdGhpcyogYmxvY2sgdGhl
biBhbGwgcHJlZGVjZXNzb3JzCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtdXN0IGhhdmUg
dGhhdCBsb2NhbCBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bG9jYWwsIGJsb2NrSW5kZXgsIEJsb2NrLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10pLCBwcmV2
Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrSW5k
ZXgsIEJsb2NrLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGUpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChwcmV2Tm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmx1
c2g6CkBAIC0yNDMsMTEgKzI0MywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2
Tm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9j
ay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJldk5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZO
b2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9jYWwsIGJsb2NrLT5wcmVkZWNl
c3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9k
ZS0+b3AoKSA9PSBTZXRMb2NhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZO
b2RlLT5vcCgpID09IE1vdkhpbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2
Tm9kZS0+b3AoKSA9PSBNb3ZIaW50QW5kQ2hlY2sKQEAgLTI1OSw3ICsyNTksNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGl0IGNhbm5v
dCByZWZlciBpbnRvIHRoaXMgYmxvY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJldkJsb2Nr
LT5pc0luQmxvY2soZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJldkJsb2Nr
LT5pc0luQmxvY2soZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGVkZ2Up
LCBmb3VuZCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206050</attachid>
            <date>2013-07-03 22:22:46 -0700</date>
            <delta_ts>2013-07-04 09:20:34 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>87587</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCB2b2lkIEFic3Ry
YWN0U3RhdGU6OmJlZ2luQmFzaWNCbG9jayhCYXNpCiAKIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5p
dGlhbGl6ZShHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgQmFzaWNCbG9jayogcm9vdCA9IGdyYXBoLm1f
YmxvY2tzWzBdLmdldCgpOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBncmFwaC5ibG9jaygwKTsK
ICAgICByb290LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKICAgICByb290LT5jZmFIYXNWaXNp
dGVkID0gZmFsc2U7CiAgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKQEAgLTEx
OCw4ICsxMTgsOCBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdyCiAg
ICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKICAgICAgICAg
cm9vdC0+dmFsdWVzQXRUYWlsLmxvY2FsKGkpLmNsZWFyKCk7CiAgICAgfQotICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gMSA7IGJsb2NrSW5kZXggPCBncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLm1f
YmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMSA7IGJsb2NrSW5kZXggPCBncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAg
ICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCFibG9j
ay0+aXNSZWFjaGFibGUpCkBAIC0xODAyLDI0ICsxODAyLDI0IEBAIGlubGluZSBib29sIEFic3Ry
YWN0U3RhdGU6Om1lcmdlVG9TdWNjZXMKICAgICBjYXNlIEp1bXA6IHsKICAgICAgICAgQVNTRVJU
KGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9u
KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRh
dGFMb2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwtPnRha2Vu
QmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2Nr
ICIsICp0ZXJtaW5hbC0+dGFrZW5CbG9jaygpLCAiLlxuIik7CiAjZW5kaWYKLSAgICAgICAgcmV0
dXJuIG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2Nr
SW5kZXgoKV0uZ2V0KCkpOworICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgdGVybWlu
YWwtPnRha2VuQmxvY2soKSk7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEJyYW5jaDogewog
ICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uICE9IEludmFsaWRC
cmFuY2hEaXJlY3Rpb24pOwogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwtPnRha2VuQmxvY2tJbmRleCgp
KTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICIsICp0ZXJtaW5h
bC0+dGFrZW5CbG9jaygpLCAiLlxuIik7CiAjZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxvY2st
PmNmYUJyYW5jaERpcmVjdGlvbiAhPSBUYWtlRmFsc2UpCi0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2NrSW5k
ZXgoKV0uZ2V0KCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCB0
ZXJtaW5hbC0+dGFrZW5CbG9jaygpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1
LlxuIiwgdGVybWluYWwtPm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZygi
ICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICIsICp0ZXJtaW5hbC0+bm90VGFrZW5CbG9jaygpLCAi
LlxuIik7CiAjZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlv
biAhPSBUYWtlVHJ1ZSkKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywg
Z3JhcGgubV9ibG9ja3NbdGVybWluYWwtPm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIHRlcm1pbmFsLT5ub3RUYWtl
bkJsb2NrKCkpOwogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CiAgICAgICAgIApAQCAt
MTgyOCw5ICsxODI4LDkgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nl
cwogICAgICAgICAvLyB3ZSdyZSBub3QuIEhvd2V2ZXIgSSBzb21laG93IGRvdWJ0IHRoYXQgdGhp
cyB3aWxsIGV2ZXIgYmUgYSBiaWcgZGVhbC4KICAgICAgICAgQVNTRVJUKGJhc2ljQmxvY2stPmNm
YUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsKICAgICAgICAgU3dp
dGNoRGF0YSogZGF0YSA9IHRlcm1pbmFsLT5zd2l0Y2hEYXRhKCk7Ci0gICAgICAgIGJvb2wgY2hh
bmdlZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW2RhdGEtPmZhbGxUaHJvdWdo
XS5nZXQoKSk7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGRhdGEt
PmZhbGxUaHJvdWdoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6
ZSgpOyBpLS07KQotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBncmFw
aC5tX2Jsb2Nrc1tkYXRhLT5jYXNlc1tpXS50YXJnZXRdLmdldCgpKTsKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKICAgICAg
ICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQyLDggKzE0Miw4IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIC8vIEZpZ3VyZSBvdXQg
d2hpY2ggdmFyaWFibGVzIGFyZSBsaXZlLCB1c2luZyBhIGNvbnNlcnZhdGl2ZSBhcHByb3hpbWF0
aW9uIG9mCiAgICAgICAgIC8vIGxpdmVuZXNzLgotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9j
a0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9j
a3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewor
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwg
YmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKQEAgLTE2NCw4ICsxNjQsOCBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIHVzZWQgb25seSBmb3IgR2V0QnlWYWwgYW5kIEdldEFycmF5TGVuZ3Ro
IGFjY2Vzc2VzLiBBdCB0aGUgc2FtZSB0aW1lLAogICAgICAgICAvLyBpZGVudGlmeSB1c2VzIG9m
IENyZWF0ZUFyZ3VtZW50cyB0aGF0IGFyZSBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBhcmd1bWVu
dHMKICAgICAgICAgLy8gYmVpbmcgYWxpYXNlZCBvbmx5IHRvIHZhcmlhYmxlcyB0aGF0IHNhdGlz
ZnkgdGhlc2UgY29uc3RyYWludHMuCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgp
IHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+
c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewpAQCAtMzUyLDggKzM1Miw4IEBAIHB1YmxpYzoKICAg
ICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhcyByZXF1aXJpbmcgY3JlYXRpb24uIFRoaXMgaXMgYSBw
cm9wZXJ0eSBvZiBTZXRMb2NhbHMgdG8KICAgICAgICAgLy8gdmFyaWFibGVzIHRoYXQgYXJlIG5l
aXRoZXIgdGhlIGNvcnJlY3QgYXJndW1lbnRzIHJlZ2lzdGVyIG5vciBhcmUgbWFya2VkIGFzCiAg
ICAgICAgIC8vIGJlaW5nIGFyZ3VtZW50cy1hbGlhc2VkLgotICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsg
KytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRl
eCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJs
b2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKQEAgLTQyOCw4ICs0MjgsOCBA
QCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1f
Z3JhcGgpOwogICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewot
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5k
ZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm51bUJsb2NrczsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgp
OyBpbmRleEluQmxvY2srKykgewpAQCAtNjYxLDggKzY2MSw4IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJs
b2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5C
bG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDggKzQ0LDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkK
ICAgICB7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
KyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJs
b2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTUyMzM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDExICs0MCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAK
IGNsYXNzIEdyYXBoOwogCi10eXBlZGVmIFZlY3RvciA8QmxvY2tJbmRleCwgMj4gUHJlZGVjZXNz
b3JMaXN0OwordHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsK
IAotc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZSosIDg+IHsKK3N0cnVjdCBCYXNpY0Js
b2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2NrPiwgVmVjdG9yPE5vZGUqLCA4PiB7CiAgICAgQmFz
aWNCbG9jayh1bnNpZ25lZCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVu
c2lnbmVkIG51bUxvY2FscykKICAgICAgICAgOiBieXRlY29kZUJlZ2luKGJ5dGVjb2RlQmVnaW4p
CisgICAgICAgICwgaW5kZXgoTm9CbG9jaykKICAgICAgICAgLCBpc09TUlRhcmdldChmYWxzZSkK
ICAgICAgICAgLCBjZmFIYXNWaXNpdGVkKGZhbHNlKQogICAgICAgICAsIGNmYVNob3VsZFJldmlz
aXQoZmFsc2UpCkBAIC03NCw2ICs3NSwxMyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxO
b2RlKiwgOD4gewogICAgICAgICB2YWx1ZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fs
cyk7CiAgICAgfQogICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rl
cy5zaXplKCk7IH0KKyAgICBOb2RlKiBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rl
c1tpXTsgfQorICAgIE5vZGUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0
KGkpOyB9CisgICAgTm9kZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIGF0KHNpemUoKSAtIDEpOyB9
CisgICAgCisgICAgdm9pZCBhcHBlbmQoTm9kZSogbm9kZSkgeyBtX25vZGVzLmFwcGVuZChub2Rl
KTsgfQorICAgIAogICAgIHNpemVfdCBudW1Ob2RlcygpIGNvbnN0IHsgcmV0dXJuIHBoaXMuc2l6
ZSgpICsgc2l6ZSgpOyB9CiAgICAgTm9kZSogbm9kZShzaXplX3QgaSkgY29uc3QKICAgICB7CkBA
IC0xMDEsMTUgKzEwOSwzMyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlKiwgOD4g
ewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAorICAgIHVuc2lnbmVkIG51bVN1
Y2Nlc3NvcnMoKSB7IHJldHVybiBsYXN0KCktPm51bVN1Y2Nlc3NvcnMoKTsgfQorICAgIAorICAg
IEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBsYXN0KCktPnN1Y2Nlc3NvcihpbmRleCk7CisgICAgfQorICAgIEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvckZvckNvbmRpdGlvbihib29sIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIHJldHVy
biBsYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOworICAgIH0KKwogI2Rl
ZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5
cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKICAg
ICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhcHBlbmROb2RlKEdy
YXBoJiwgU3BlY3VsYXRlZFR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CiAgICAg
REZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCiAj
dW5kZWYgREZHX0RFRklORV9BUFBFTkRfTk9ERQogICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KCIjIiwgaW5kZXgpOwor
ICAgIH0KKyAgICAKICAgICAvLyBUaGlzIHZhbHVlIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgYmxv
Y2sgbGlua2luZyBhbmQgT1NSIGVudHJ5LiBJdCBpcyBtb3N0bHkgbWVhbmluZ2xlc3MKICAgICAv
LyBmb3Igb3RoZXIgcHVycG9zZXMgZHVlIHRvIGlubGluaW5nLgogICAgIHVuc2lnbmVkIGJ5dGVj
b2RlQmVnaW47CiAgICAgCisgICAgQmxvY2tJbmRleCBpbmRleDsKKyAgICAKICAgICBib29sIGlz
T1NSVGFyZ2V0OwogICAgIGJvb2wgY2ZhSGFzVmlzaXRlZDsKICAgICBib29sIGNmYVNob3VsZFJl
dmlzaXQ7CkBAIC0xMjIsMzAgKzE0OCw0MyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxO
b2RlKiwgOD4gewogICAgIGJvb2wgaXNSZWFjaGFibGU7CiAgICAgCiAgICAgVmVjdG9yPE5vZGUq
PiBwaGlzOwotICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKKyAgICBQcmVkZWNl
c3Nvckxpc3QgcHJlZGVjZXNzb3JzOwogICAgIAogICAgIE9wZXJhbmRzPE5vZGUqLCBOb2RlUG9p
bnRlclRyYWl0cz4gdmFyaWFibGVzQXRIZWFkOwogICAgIE9wZXJhbmRzPE5vZGUqLCBOb2RlUG9p
bnRlclRyYWl0cz4gdmFyaWFibGVzQXRUYWlsOwogICAgIAogICAgIE9wZXJhbmRzPEFic3RyYWN0
VmFsdWU+IHZhbHVlc0F0SGVhZDsKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNB
dFRhaWw7CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPE5vZGUqLCA4PiBtX25vZGVzOwogfTsKIAog
c3RydWN0IFVubGlua2VkQmxvY2sgewotICAgIEJsb2NrSW5kZXggbV9ibG9ja0luZGV4OworICAg
IEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgYm9vbCBtX25lZWRzTm9ybWFsTGlua2luZzsKICAg
ICBib29sIG1fbmVlZHNFYXJseVJldHVybkxpbmtpbmc7CiAgICAgCiAgICAgVW5saW5rZWRCbG9j
aygpIHsgfQogICAgIAotICAgIGV4cGxpY2l0IFVubGlua2VkQmxvY2soQmxvY2tJbmRleCBibG9j
a0luZGV4KQotICAgICAgICA6IG1fYmxvY2tJbmRleChibG9ja0luZGV4KQorICAgIGV4cGxpY2l0
IFVubGlua2VkQmxvY2soQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9j
aykKICAgICAgICAgLCBtX25lZWRzTm9ybWFsTGlua2luZyh0cnVlKQogICAgICAgICAsIG1fbmVl
ZHNFYXJseVJldHVybkxpbmtpbmcoZmFsc2UpCiAgICAgewogICAgIH0KIH07CiAgICAgCitzdGF0
aWMgaW5saW5lIGdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayhCYXNpY0Jsb2NrKiogYmFzaWNCbG9j
aykKK3sKKyAgICByZXR1cm4gKCpiYXNpY0Jsb2NrKS0+Ynl0ZWNvZGVCZWdpbjsKK30KKworc3Rh
dGljIGlubGluZSBCYXNpY0Jsb2NrKiBibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCYXNp
Y0Jsb2NrKj4mIGxpbmtpbmdUYXJnZXRzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKQoreworICAg
IHJldHVybiAqYmluYXJ5U2VhcmNoPEJhc2ljQmxvY2sqLCB1bnNpZ25lZD4obGlua2luZ1Rhcmdl
dHMsIGxpbmtpbmdUYXJnZXRzLnNpemUoKSwgYnl0ZWNvZGVCZWdpbiwgZ2V0Qnl0ZWNvZGVCZWdp
bkZvckJsb2NrKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw4
ICsxODMsOCBAQCBwcml2YXRlOgogICAgIC8vIFBhcnNlIGEgc2luZ2xlIGJhc2ljIGJsb2NrIG9m
IGJ5dGVjb2RlIGluc3RydWN0aW9ucy4KICAgICBib29sIHBhcnNlQmxvY2sodW5zaWduZWQgbGlt
aXQpOwogICAgIC8vIExpbmsgYmxvY2sgc3VjY2Vzc29ycy4KLSAgICB2b2lkIGxpbmtCbG9jayhC
YXNpY0Jsb2NrKiwgVmVjdG9yPEJsb2NrSW5kZXg+JiBwb3NzaWJsZVRhcmdldHMpOwotICAgIHZv
aWQgbGlua0Jsb2NrcyhWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHVubGlua2VkQmxvY2tzLCBWZWN0
b3I8QmxvY2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0cyk7CisgICAgdm9pZCBsaW5rQmxvY2soQmFz
aWNCbG9jayosIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CisgICAgdm9p
ZCBsaW5rQmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3MsIFZlY3Rv
cjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgLy8gTGluayBHZXRMb2NhbCAm
IFNldExvY2FsIG5vZGVzLCB0byBlbnN1cmUgbGl2ZSB2YWx1ZXMgYXJlIGdlbmVyYXRlZC4KICAg
ICBlbnVtIFBoaVN0YWNrVHlwZSB7CiAgICAgICAgIExvY2FsUGhpU3RhY2ssCkBAIC0xMDM5LDEz
ICsxMDM5LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIFBvdGVudGlhbCBibG9jayBsaW5raW5n
IHRhcmdldHMuIE11c3QgYmUgc29ydGVkIGJ5IGJ5dGVjb2RlQmVnaW4sIGFuZAogICAgICAgICAv
LyBjYW5ub3QgaGF2ZSB0d28gYmxvY2tzIHRoYXQgaGF2ZSB0aGUgc2FtZSBieXRlY29kZUJlZ2lu
LiBGb3IgdGhpcyB2ZXJ5CiAgICAgICAgIC8vIHJlYXNvbiwgdGhpcyBpcyBub3QgZXF1aXZhbGVu
dCB0byAKLSAgICAgICAgVmVjdG9yPEJsb2NrSW5kZXg+IG1fYmxvY2tMaW5raW5nVGFyZ2V0czsK
KyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBtX2Jsb2NrTGlua2luZ1RhcmdldHM7CiAgICAg
ICAgIAogICAgICAgICAvLyBJZiB0aGUgY2FsbHNpdGUncyBiYXNpYyBibG9jayB3YXMgc3BsaXQg
aW50byB0d28sIHRoZW4gdGhpcyB3aWxsIGJlCiAgICAgICAgIC8vIHRoZSBoZWFkIG9mIHRoZSBj
YWxsc2l0ZSBibG9jay4gSXQgbmVlZHMgaXRzIHN1Y2Nlc3NvcnMgbGlua2VkIHRvIHRoZQogICAg
ICAgICAvLyBtX3VubGlua2VkQmxvY2tzLCBidXQgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kOiB0
aGVyZSdzIG5vIHdheSBmb3IKICAgICAgICAgLy8gYW55IGJsb2NrcyBpbiBtX3VubGlua2VkQmxv
Y2tzIHRvIGp1bXAgYmFjayBpbnRvIHRoaXMgYmxvY2suCi0gICAgICAgIEJsb2NrSW5kZXggbV9j
YWxsc2l0ZUJsb2NrSGVhZDsKKyAgICAgICAgQmFzaWNCbG9jayogbV9jYWxsc2l0ZUJsb2NrSGVh
ZDsKICAgICAgICAgCiAgICAgICAgIC8vIERvZXMgdGhlIGNhbGxzaXRlIGJsb2NrIGhlYWQgbmVl
ZCBsaW5raW5nPyBUaGlzIGlzIHR5cGljYWxseSB0cnVlCiAgICAgICAgIC8vIGJ1dCB3aWxsIGJl
IGZhbHNlIGZvciB0aGUgbWFjaGluZSBjb2RlIGJsb2NrJ3MgaW5saW5lIHN0YWNrIGVudHJ5CkBA
IC0xMDc2LDcgKzEwNzYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQnl0ZUNvZGVQYXJzZXIq
LAogICAgICAgICAgICAgQ29kZUJsb2NrKiwKICAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywKLSAgICAgICAgICAgIEJsb2NrSW5kZXggY2FsbHNpdGVCbG9ja0hlYWQsCisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBjYWxsc2l0ZUJsb2NrSGVhZCwKICAgICAgICAgICAgIEpTRnVu
Y3Rpb24qIGNhbGxlZSwgLy8gTnVsbCBpZiB0aGlzIGlzIGEgY2xvc3VyZSBjYWxsLgogICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHJldHVyblZhbHVlVlIsCiAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQsCkBAIC0xMjk1LDE0ICsxMjk1LDE0IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICB1bnNpZ25lZCBuZXdO
dW1Mb2NhbHMgPSBpbmxpbmVDYWxsRnJhbWVTdGFydCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
clNpemUgKyBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwogICAgIGlmIChuZXdOdW1M
b2NhbHMgPiBtX251bUxvY2FscykgewogICAgICAgICBtX251bUxvY2FscyA9IG5ld051bUxvY2Fs
czsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tpXS0+ZW5zdXJlTG9jYWxzKG5l
d051bUxvY2Fscyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytpKQorICAgICAgICAgICAgbV9ncmFwaC5ibG9jayhpKS0+ZW5zdXJlTG9jYWxz
KG5ld051bUxvY2Fscyk7CiAgICAgfQogICAgIAogICAgIHNpemVfdCBhcmd1bWVudFBvc2l0aW9u
U3RhcnQgPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnMuc2l6ZSgpOwogCiAgICAgSW5saW5l
U3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KAotICAgICAgICB0aGlzLCBjb2RlQmxvY2ssIGNv
ZGVCbG9jaywgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxLCBjYWxsTGlua1N0YXR1cy5mdW5j
dGlvbigpLAorICAgICAgICB0aGlzLCBjb2RlQmxvY2ssIGNvZGVCbG9jaywgbV9ncmFwaC5sYXN0
QmxvY2soKSwgY2FsbExpbmtTdGF0dXMuZnVuY3Rpb24oKSwKICAgICAgICAgKFZpcnR1YWxSZWdp
c3RlciltX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0T3BlcmFuZCksCiAgICAg
ICAgIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lU3RhcnQsIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBraW5kKTsKICAgICAKQEAgLTEzMjEsMTMgKzEzMjEsMTMgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIG1fY3VycmVudEluZGV4ID0g
b2xkSW5kZXg7CiAgICAgCiAgICAgLy8gSWYgdGhlIGlubGluZWQgY29kZSBjcmVhdGVkIHNvbWUg
bmV3IGJhc2ljIGJsb2NrcywgdGhlbiB3ZSBoYXZlIGxpbmtpbmcgdG8gZG8uCi0gICAgaWYgKGlu
bGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCAhPSBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKSAtIDEpIHsKKyAgICBpZiAoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFk
ICE9IG1fZ3JhcGgubGFzdEJsb2NrKCkpIHsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVCghaW5s
aW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSk7CiAgICAgICAgIGlmIChp
bmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcpCi0gICAgICAg
ICAgICBsaW5rQmxvY2sobV9ncmFwaC5tX2Jsb2Nrc1tpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNp
dGVCbG9ja0hlYWRdLmdldCgpLCBpbmxpbmVTdGFja0VudHJ5Lm1fYmxvY2tMaW5raW5nVGFyZ2V0
cyk7CisgICAgICAgICAgICBsaW5rQmxvY2soaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxv
Y2tIZWFkLCBpbmxpbmVTdGFja0VudHJ5Lm1fYmxvY2tMaW5raW5nVGFyZ2V0cyk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fYmxvY2tzW2lubGluZVN0YWNrRW50
cnkubV9jYWxsc2l0ZUJsb2NrSGVhZF0tPmlzTGlua2VkKTsKKyAgICAgICAgICAgIEFTU0VSVChp
bmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWQtPmlzTGlua2VkKTsKICAgICAgICAg
CiAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgY2FsbHNpdGUgYmxvY2sgaGVhZCBp
cyBub3Qgb3duZWQgYnkgdGhlIGNhbGxlci4KICAgICAgICAgaWYgKCFpbmxpbmVTdGFja0VudHJ5
Lm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSkgewpAQCAtMTM0OCw3ICsxMzQ4
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIH0gZWxz
ZQogICAgICAgICBBU1NFUlQoaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1w
dHkoKSk7CiAgICAgCi0gICAgQmFzaWNCbG9jayogbGFzdEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
cy5sYXN0KCkuZ2V0KCk7CisgICAgQmFzaWNCbG9jayogbGFzdEJsb2NrID0gbV9ncmFwaC5sYXN0
QmxvY2soKTsKICAgICAvLyBJZiB0aGVyZSB3YXMgYSByZXR1cm4sIGJ1dCBubyBlYXJseSByZXR1
cm5zLCB0aGVuIHdlJ3JlIGRvbmUuIFdlIGFsbG93IHBhcnNpbmcgb2YKICAgICAvLyB0aGUgY2Fs
bGVyIHRvIGNvbnRpbnVlIGluIHdoYXRldmVyIGJhc2ljIGJsb2NrIHdlJ3JlIGluIHJpZ2h0IG5v
dy4KICAgICBpZiAoIWlubGluZVN0YWNrRW50cnkubV9kaWRFYXJseVJldHVybiAmJiBpbmxpbmVT
dGFja0VudHJ5Lm1fZGlkUmV0dXJuKSB7CkBAIC0xMzY0LDExICsxMzY0LDExIEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgICAgIC8vIGZvciByZWxl
YXNlIGJ1aWxkcyBiZWNhdXNlIHRoaXMgYmxvY2sgd2lsbCBuZXZlciBzZXJ2ZSBhcyBhIHBvdGVu
dGlhbCB0YXJnZXQKICAgICAgICAgICAgIC8vIGluIHRoZSBsaW5rZXIncyBiaW5hcnkgc2VhcmNo
LgogICAgICAgICAgICAgbGFzdEJsb2NrLT5ieXRlY29kZUJlZ2luID0gbV9jdXJyZW50SW5kZXg7
Ci0gICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nr
cy5hcHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEpKTsKKyAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmFw
cGVuZChVbmxpbmtlZEJsb2NrKG1fZ3JhcGgubGFzdEJsb2NrKCkpKTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS5n
ZXQoKTsKLQorICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgubGFzdEJsb2NrKCk7Cisg
ICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0Yo
IkRvbmUgaW5saW5pbmcgZXhlY3V0YWJsZSAlcCwgY29udGludWluZyBjb2RlIGdlbmVyYXRpb24g
YXQgZXBpbG9ndWUuXG4iLCBleGVjdXRhYmxlKTsKICNlbmRpZgpAQCAtMTM3OCwzMiArMTM3OCwz
NSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gSWYg
d2UgZ2V0IHRvIHRoaXMgcG9pbnQgdGhlbiBhbGwgYmxvY2tzIG11c3QgZW5kIGluIHNvbWUgc29y
dCBvZiB0ZXJtaW5hbHMuCiAgICAgQVNTRVJUKGxhc3RCbG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFs
KCkpOwogICAgIAorCisgICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgYmFzaWMgYmxvY2sgZm9y
IHRoZSBjb250aW51YXRpb24gYXQgdGhlIGNhbGxlci4KKyAgICBSZWZQdHI8QmFzaWNCbG9jaz4g
YmxvY2sgPSBhZG9wdFJlZihuZXcgQmFzaWNCbG9jayhuZXh0T2Zmc2V0LCBtX251bUFyZ3VtZW50
cywgbV9udW1Mb2NhbHMpKTsKKworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICBk
YXRhTG9nRigiQ3JlYXRpbmcgaW5saW5lIGVwaWxvZ3VlIGJhc2ljIGJsb2NrICVwLCAjJXp1IGZv
ciAlcCBiYyMldSBhdCBpbmxpbmUgZGVwdGggJXUuXG4iLCBibG9jay5nZXQoKSwgbV9ncmFwaC5u
dW1CbG9ja3MoKSwgbV9pbmxpbmVTdGFja1RvcC0+ZXhlY3V0YWJsZSgpLCBtX2N1cnJlbnRJbmRl
eCwgQ29kZU9yaWdpbjo6aW5saW5lRGVwdGhGb3JDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKCkp
KTsKKyNlbmRpZgorCiAgICAgLy8gTGluayB0aGUgZWFybHkgcmV0dXJucyB0byB0aGUgYmFzaWMg
YmxvY2sgd2UncmUgYWJvdXQgdG8gY3JlYXRlLgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IGlmICghaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzW2ldLm1fbmVlZHNFYXJseVJl
dHVybkxpbmtpbmcpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2lubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nr
c1tpXS5tX2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGlu
bGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX2Jsb2NrOwogICAgICAgICBBU1NF
UlQoIWJsb2NrLT5pc0xpbmtlZCk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+bGFzdCgp
OwogICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBKdW1wKTsKLSAgICAgICAgQVNTRVJUKG5v
ZGUtPnRha2VuQmxvY2tJbmRleCgpID09IE5vQmxvY2spOwotICAgICAgICBub2RlLT5zZXRUYWtl
bkJsb2NrSW5kZXgobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkpOworICAgICAgICBBU1NFUlQobm9k
ZS0+dGFrZW5CbG9jaygpID09IDApOworICAgICAgICBub2RlLT5zZXRUYWtlbkJsb2NrKGJsb2Nr
LmdldCgpKTsKICAgICAgICAgaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzW2ldLm1f
bmVlZHNFYXJseVJldHVybkxpbmtpbmcgPSBmYWxzZTsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAg
ICAgICAgIGJsb2NrLT5pc0xpbmtlZCA9IHRydWU7CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAg
Ly8gTmVlZCB0byBjcmVhdGUgYSBuZXcgYmFzaWMgYmxvY2sgZm9yIHRoZSBjb250aW51YXRpb24g
YXQgdGhlIGNhbGxlci4KLSAgICBPd25QdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFB0cihu
ZXcgQmFzaWNCbG9jayhuZXh0T2Zmc2V0LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMpKTsK
LSNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0YUxvZ0YoIkNyZWF0aW5nIGlu
bGluZSBlcGlsb2d1ZSBiYXNpYyBibG9jayAlcCwgIyV6dSBmb3IgJXAgYmMjJXUgYXQgaW5saW5l
IGRlcHRoICV1LlxuIiwgYmxvY2suZ2V0KCksIG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpLCBtX2lu
bGluZVN0YWNrVG9wLT5leGVjdXRhYmxlKCksIG1fY3VycmVudEluZGV4LCBDb2RlT3JpZ2luOjpp
bmxpbmVEZXB0aEZvckNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUoKSkpOwotI2VuZGlmCiAgICAg
bV9jdXJyZW50QmxvY2sgPSBibG9jay5nZXQoKTsKLSAgICBBU1NFUlQobV9pbmxpbmVTdGFja1Rv
cC0+bV9jYWxsZXItPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5pc0VtcHR5KCkgfHwgbV9ncmFwaC5t
X2Jsb2Nrc1ttX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRz
Lmxhc3QoKV0tPmJ5dGVjb2RlQmVnaW4gPCBuZXh0T2Zmc2V0KTsKLSAgICBtX2lubGluZVN0YWNr
VG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5hcHBlbmQoVW5saW5rZWRCbG9jayhtX2dy
YXBoLm1fYmxvY2tzLnNpemUoKSkpOwotICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5t
X2Jsb2NrTGlua2luZ1RhcmdldHMuYXBwZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKLSAg
ICBtX2dyYXBoLm1fYmxvY2tzLmFwcGVuZChibG9jay5yZWxlYXNlKCkpOworICAgIEFTU0VSVCht
X2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlzRW1wdHko
KSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmxh
c3QoKS0+Ynl0ZWNvZGVCZWdpbiA8IG5leHRPZmZzZXQpOworICAgIG1faW5saW5lU3RhY2tUb3At
Pm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmFwcGVuZChVbmxpbmtlZEJsb2NrKGJsb2NrLmdl
dCgpKSk7CisgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fYmxvY2tMaW5raW5nVGFy
Z2V0cy5hcHBlbmQoYmxvY2suZ2V0KCkpOworICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soYmxvY2sp
OwogICAgIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICAKICAgICAvLyBBdCB0aGlzIHBvaW50
IHdlIHJldHVybiBhbmQgY29udGludWUgdG8gZ2VuZXJhdGUgY29kZSBmb3IgdGhlIGNhbGxlciwg
YnV0CkBAIC0xNzUzLDcgKzE3NTYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgLy8gSWYgd2UgYXJlIHRoZSBmaXJzdCBiYXNpYyBibG9jaywgaW50cm9k
dWNlIG1hcmtlcnMgZm9yIGFyZ3VtZW50cy4gVGhpcyBhbGxvd3MKICAgICAvLyB1cyB0byB0cmFj
ayBpZiBhIHVzZSBvZiBhbiBhcmd1bWVudCBtYXkgdXNlIHRoZSBhY3R1YWwgYXJndW1lbnQgcGFz
c2VkLCBhcwogICAgIC8vIG9wcG9zZWQgdG8gdXNpbmcgYSB2YWx1ZSB3ZSBzZXQgZXhwbGljaXRs
eS4KLSAgICBpZiAobV9jdXJyZW50QmxvY2sgPT0gbV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKSAm
JiAhaW5saW5lQ2FsbEZyYW1lKCkpIHsKKyAgICBpZiAobV9jdXJyZW50QmxvY2sgPT0gbV9ncmFw
aC5ibG9jaygwKSAmJiAhaW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAgICAgbV9ncmFwaC5tX2Fy
Z3VtZW50cy5yZXNpemUobV9udW1Bcmd1bWVudHMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX251bUFyZ3VtZW50czsgKythcmd1bWVudCkgewogICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNz
RGF0YSgKQEAgLTI3NzMsNyArMjc3Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBtX2N1cnJlbnRJ
bmRleCArIHRhYmxlLmJyYW5jaE9mZnNldHNbaV07CiAgICAgICAgICAgICAgICAgaWYgKHRhcmdl
dCA9PSBkYXRhLmZhbGxUaHJvdWdoKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKGpzTnVtYmVyKHRhYmxl
Lm1pbiArIGkpLCB0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChT
d2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJbmRleChqc051bWJlcih0YWJsZS5taW4gKyBpKSwgdGFy
Z2V0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2dyYXBoLm1fc3dpdGNoRGF0YS5h
cHBlbmQoZGF0YSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZtX2dy
YXBoLm1fc3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCkpOwpAQCAtMjc5Myw3ICsyNzk2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gZGF0YS5mYWxsVGhy
b3VnaCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZGF0
YS5jYXNlcy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIFN3aXRjaENhc2UoTGF6eUpTVmFs
dWU6OnNpbmdsZUNoYXJhY3RlclN0cmluZyh0YWJsZS5taW4gKyBpKSwgdGFyZ2V0KSk7CisgICAg
ICAgICAgICAgICAgICAgIFN3aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KExhenlKU1ZhbHVl
OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodGFibGUubWluICsgaSksIHRhcmdldCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgbV9ncmFwaC5tX3N3aXRjaERhdGEuYXBwZW5kKGRhdGEpOwog
ICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmbV9ncmFwaC5tX3N3aXRjaERh
dGEubGFzdCgpKSwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKQEAgLTI4
MTMsNyArMjgxNiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRocm91Z2gpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5k
KAotICAgICAgICAgICAgICAgICAgICBTd2l0Y2hDYXNlKExhenlKU1ZhbHVlOjprbm93blN0cmlu
Z0ltcGwoaXRlci0+a2V5LmdldCgpKSwgdGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgICAgIFN3
aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KExhenlKU1ZhbHVlOjprbm93blN0cmluZ0ltcGwo
aXRlci0+a2V5LmdldCgpKSwgdGFyZ2V0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBt
X2dyYXBoLm1fc3dpdGNoRGF0YS5hcHBlbmQoZGF0YSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBo
KFN3aXRjaCwgT3BJbmZvKCZtX2dyYXBoLm1fc3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwpAQCAtMjgyOCwxMyArMjgzMSwxMyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9kaWRSZXR1cm4gPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmICht
X2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBJZiB3ZSdyZSByZXR1cm5pbmcgZnJvbSB0aGUgZmlyc3QgYmxvY2ssIHRo
ZW4gd2UncmUgZG9uZSBwYXJzaW5nLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxp
bmVTdGFja1RvcC0+bV9jYWxsc2l0ZUJsb2NrSGVhZCA9PSBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KSAtIDEpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9j
YWxsc2l0ZUJsb2NrSGVhZCA9PSBtX2dyYXBoLmxhc3RCbG9jaygpKTsKICAgICAgICAgICAgICAg
ICAgICAgc2hvdWxkQ29udGludWVQYXJzaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAg
IExBU1RfT1BDT0RFKG9wX3JldCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgaW5saW5pbmcgY3JlYXRlZCBibG9ja3MsIGFuZCB3ZSdyZSBkb2lu
ZyBhIHJldHVybiwgdGhlbiB3ZSBuZWVkIHNvbWUKICAgICAgICAgICAgICAgICAgICAgLy8gc3Bl
Y2lhbCBsaW5raW5nLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1Rv
cC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4ID09IG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNr
VG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrSW5kZXggPT0gbV9ncmFwaC5sYXN0
QmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5r
ZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNOb3JtYWxMaW5raW5nID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5H
VEgob3BfcmV0KSAhPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZGlkRWFybHlSZXR1cm4pIHsKQEAgLTMx
NjIsNyArMzE2NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICB9CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayhCYXNpY0Jsb2NrKiBi
bG9jaywgVmVjdG9yPEJsb2NrSW5kZXg+JiBwb3NzaWJsZVRhcmdldHMpCit2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxCYXNpY0Jsb2NrKj4m
IHBvc3NpYmxlVGFyZ2V0cykKIHsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0xpbmtlZCk7CiAgICAg
QVNTRVJUKCFibG9jay0+aXNFbXB0eSgpKTsKQEAgLTMxNzEsMjQgKzMxNzQsMjQgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKEJhc2ljQmxvYwogICAgIAogICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgIGNhc2UgSnVtcDoKLSAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9ja0lu
ZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywg
bm9kZS0+dGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOworICAgICAgICBub2Rl
LT5zZXRUYWtlbkJsb2NrKGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBu
b2RlLT50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CiAjaWYgREZHX0VOQUJM
RShERUJVR19WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiTGlua2VkIGJhc2ljIGJsb2NrICVw
IHRvICVwLCAjJXUuXG4iLCBibG9jaywgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLT50YWtlbkJsb2Nr
SW5kZXgoKV0uZ2V0KCksIG5vZGUtPnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0YUxv
Z0YoIkxpbmtlZCBiYXNpYyBibG9jayAlcCB0byAlcCwgIyV1LlxuIiwgYmxvY2ssIG5vZGUtPnRh
a2VuQmxvY2soKSwgbm9kZS0+dGFrZW5CbG9jaygpLT5pbmRleCk7CiAjZW5kaWYKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQnJhbmNoOgotICAgICAgICBub2RlLT5zZXRUYWtl
bkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVU
YXJnZXRzLCBub2RlLT50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7Ci0gICAg
ICAgIG5vZGUtPnNldE5vdFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPm5vdFRha2VuQnl0ZWNvZGVPZmZzZXRE
dXJpbmdQYXJzaW5nKCkpKTsKKyAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9jayhibG9ja0ZvckJ5
dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+dGFrZW5CeXRlY29kZU9mZnNldER1
cmluZ1BhcnNpbmcoKSkpOworICAgICAgICBub2RlLT5zZXROb3RUYWtlbkJsb2NrKGJsb2NrRm9y
Qnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT5ub3RUYWtlbkJ5dGVjb2RlT2Zm
c2V0RHVyaW5nUGFyc2luZygpKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAg
ICAgICBkYXRhTG9nRigiTGlua2VkIGJhc2ljIGJsb2NrICVwIHRvICVwLCAjJXUgYW5kICVwLCAj
JXUuXG4iLCBibG9jaywgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLT50YWtlbkJsb2NrSW5kZXgoKV0u
Z2V0KCksIG5vZGUtPnRha2VuQmxvY2tJbmRleCgpLCBtX2dyYXBoLm1fYmxvY2tzW25vZGUtPm5v
dFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSwgbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCkpOwor
ICAgICAgICBkYXRhTG9nRigiTGlua2VkIGJhc2ljIGJsb2NrICVwIHRvICVwLCAjJXUgYW5kICVw
LCAjJXUuXG4iLCBibG9jaywgbm9kZS0+dGFrZW5CbG9jaygpLCBub2RlLT50YWtlbkJsb2NrKCkt
PmluZGV4LCBub2RlLT5ub3RUYWtlbkJsb2NrKCksIG5vZGUtPm5vdFRha2VuQmxvY2soKS0+aW5k
ZXgpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFN3aXRjaDoK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+c3dpdGNoRGF0YSgpLT5jYXNlcy5zaXpl
KCk7IGktLTspCi0gICAgICAgICAgICBub2RlLT5zd2l0Y2hEYXRhKCktPmNhc2VzW2ldLnRhcmdl
dCA9IG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywg
bm9kZS0+c3dpdGNoRGF0YSgpLT5jYXNlc1tpXS50YXJnZXQpOwotICAgICAgICBub2RlLT5zd2l0
Y2hEYXRhKCktPmZhbGxUaHJvdWdoID0gbV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZz
ZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT5zd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoKTsKKyAg
ICAgICAgICAgIG5vZGUtPnN3aXRjaERhdGEoKS0+Y2FzZXNbaV0udGFyZ2V0ID0gYmxvY2tGb3JC
eXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnN3aXRjaERhdGEoKS0+Y2FzZXNb
aV0udGFyZ2V0Qnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgbm9kZS0+c3dpdGNoRGF0YSgpLT5m
YWxsVGhyb3VnaCA9IGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2Rl
LT5zd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoQnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CkBAIC0zMjAzLDExICszMjA2LDExIEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayhCYXNpY0Jsb2MKICNlbmRpZgogfQogCi12b2lkIEJ5
dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRC
bG9ja3MsIFZlY3RvcjxCbG9ja0luZGV4PiYgcG9zc2libGVUYXJnZXRzKQordm9pZCBCeXRlQ29k
ZVBhcnNlcjo6bGlua0Jsb2NrcyhWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHVubGlua2VkQmxvY2tz
LCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpCiB7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB1bmxpbmtlZEJsb2Nrcy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAo
dW5saW5rZWRCbG9ja3NbaV0ubV9uZWVkc05vcm1hbExpbmtpbmcpIHsKLSAgICAgICAgICAgIGxp
bmtCbG9jayhtX2dyYXBoLm1fYmxvY2tzW3VubGlua2VkQmxvY2tzW2ldLm1fYmxvY2tJbmRleF0u
Z2V0KCksIHBvc3NpYmxlVGFyZ2V0cyk7CisgICAgICAgICAgICBsaW5rQmxvY2sodW5saW5rZWRC
bG9ja3NbaV0ubV9ibG9jaywgcG9zc2libGVUYXJnZXRzKTsKICAgICAgICAgICAgIHVubGlua2Vk
QmxvY2tzW2ldLm1fbmVlZHNOb3JtYWxMaW5raW5nID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9
CkBAIC0zMjM1LDcgKzMyMzgsNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6
SW5saW5lCiAgICAgQnl0ZUNvZGVQYXJzZXIqIGJ5dGVDb2RlUGFyc2VyLAogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLAogICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywKLSAgICBCbG9ja0lu
ZGV4IGNhbGxzaXRlQmxvY2tIZWFkLAorICAgIEJhc2ljQmxvY2sqIGNhbGxzaXRlQmxvY2tIZWFk
LAogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSwgLy8gTnVsbCBpZiB0aGlzIGlzIGEgY2xvc3VyZSBj
YWxsLgogICAgIFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLAogICAgIFZpcnR1YWxSZWdp
c3RlciBpbmxpbmVDYWxsRnJhbWVTdGFydCwKQEAgLTM0NDYsMjcgKzM0NDksMjcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgICAgICBkbyB7CiAgICAgICAgICAg
ICBpZiAoIW1fY3VycmVudEJsb2NrKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2Ug
Y2FuIHVzZSB0aGUgbGFzdCBibG9jay4KLSAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgubV9i
bG9ja3MuaXNFbXB0eSgpICYmIG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLT5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5udW1CbG9ja3MoKSAmJiBtX2dyYXBoLmxhc3RC
bG9jaygpLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJl
IGEgYmxvY2sgYmVsb25naW5nIHRvIHVzLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9p
bmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4ID09IG1f
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCht
X2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrSW5kZXggPT0g
bV9ncmFwaC5sYXN0QmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIC8vIEVpdGhlciB0aGUg
YmxvY2sgaXMgbGlua2FibGUgb3IgaXQgaXNuJ3QuIElmIGl0J3MgbGlua2FibGUgdGhlbiBpdCdz
IHRoZSBsYXN0CiAgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrIGluIHRoZSBibG9ja0xpbmtp
bmdUYXJnZXRzIGxpc3QuIElmIGl0J3Mgbm90IHRoZW4gdGhlIGxhc3QgYmxvY2sgd2lsbAogICAg
ICAgICAgICAgICAgICAgICAvLyBoYXZlIGEgbG93ZXIgYnl0ZWNvZGUgaW5kZXggdGhhdCB0aGUg
b25lIHdlJ3JlIGFib3V0IHRvIGdpdmUgdG8gdGhpcyBibG9jay4KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5pc0VtcHR5KCkg
fHwgbV9ncmFwaC5tX2Jsb2Nrc1ttX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1Rhcmdl
dHMubGFzdCgpXS0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2N1cnJlbnRJbmRleCkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlz
RW1wdHkoKSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMubGFzdCgp
LT5ieXRlY29kZUJlZ2luICE9IG1fY3VycmVudEluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBNYWtlIHRoZSBibG9jayBsaW5rYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuaXNFbXB0eSgp
IHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJn
ZXRzLmxhc3QoKV0tPmJ5dGVjb2RlQmVnaW4gPCBtX2N1cnJlbnRJbmRleCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuYXBw
ZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlzRW1wdHko
KSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMubGFzdCgpLT5ieXRl
Y29kZUJlZ2luIDwgbV9jdXJyZW50SW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmFwcGVuZChtX2dyYXBoLmxhc3RC
bG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAvLyBD
aGFuZ2UgaXRzIGJ5dGVjb2RlIGJlZ2luIGFuZCBjb250aW51ZS4KLSAgICAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS5nZXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLmxhc3RCbG9jaygpOwogI2lm
IERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0Yo
IlJlYXNjcmliaW5nIGJ5dGVjb2RlIGluZGV4IG9mIGJsb2NrICVwIGZyb20gYmMjJXUgdG8gYmMj
JXUgKHBlZXBob2xlIGNhc2UpLlxuIiwgbV9jdXJyZW50QmxvY2ssIG1fY3VycmVudEJsb2NrLT5i
eXRlY29kZUJlZ2luLCBtX2N1cnJlbnRJbmRleCk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmJ5dGVjb2RlQmVnaW4gPSBtX2N1cnJlbnRJbmRleDsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBPd25QdHI8QmFzaWNCbG9j
az4gYmxvY2sgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jayhtX2N1cnJlbnRJbmRleCwgbV9udW1B
cmd1bWVudHMsIG1fbnVtTG9jYWxzKSk7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxCYXNp
Y0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKG5ldyBCYXNpY0Jsb2NrKG1fY3VycmVudEluZGV4LCBt
X251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJP
U0UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDcmVhdGluZyBiYXNpYyBibG9jayAl
cCwgIyV6dSBmb3IgJXAgYmMjJXUgYXQgaW5saW5lIGRlcHRoICV1LlxuIiwgYmxvY2suZ2V0KCks
IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpLCBtX2lubGluZVN0YWNrVG9wLT5leGVjdXRhYmxlKCks
IG1fY3VycmVudEluZGV4LCBDb2RlT3JpZ2luOjppbmxpbmVEZXB0aEZvckNhbGxGcmFtZShpbmxp
bmVDYWxsRnJhbWUoKSkpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ3JlYXRpbmcg
YmFzaWMgYmxvY2sgJXAsICMlenUgZm9yICVwIGJjIyV1IGF0IGlubGluZSBkZXB0aCAldS5cbiIs
IGJsb2NrLmdldCgpLCBtX2dyYXBoLm51bUJsb2NrcygpLCBtX2lubGluZVN0YWNrVG9wLT5leGVj
dXRhYmxlKCksIG1fY3VycmVudEluZGV4LCBDb2RlT3JpZ2luOjppbmxpbmVEZXB0aEZvckNhbGxG
cmFtZShpbmxpbmVDYWxsRnJhbWUoKSkpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrID0gYmxvY2suZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
YXNzZXJ0aW9uIGNoZWNrcyB0d28gdGhpbmdzOgpAQCAtMzQ3NSwxMyArMzQ3OCwxMyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiAgICAgICAgICAgICAgICAgICAgIC8v
IDIpIElmIHRoZSBieXRlY29kZUJlZ2luIGlzIGVxdWFsIHRvIHRoZSBjdXJyZW50SW5kZXgsIHRo
ZW4gd2UgZmFpbGVkIHRvIGRvCiAgICAgICAgICAgICAgICAgICAgIC8vICAgIGEgcGVlcGhvbGUg
Y29hbGVzY2luZyBvZiB0aGlzIGJsb2NrIGluIHRoZSBpZiBzdGF0ZW1lbnQgYWJvdmUuIFNvLCB3
ZSdyZQogICAgICAgICAgICAgICAgICAgICAvLyAgICBnZW5lcmF0aW5nIHN1Ym9wdGltYWwgY29k
ZSBhbmQgbGVhdmluZyBtb3JlIHdvcmsgZm9yIHRoZSBDRkcgc2ltcGxpZmllci4KLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuaXNF
bXB0eSgpIHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJs
b2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4XS0+Ynl0ZWNvZGVCZWdpbiA8IG1fY3VycmVudEluZGV4
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nr
cy5hcHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSkpOwotICAgICAg
ICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuYXBw
ZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpIHx8IG1faW5saW5l
U3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLT5ieXRlY29kZUJlZ2luIDwgbV9jdXJy
ZW50SW5kZXgpOworICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlu
a2VkQmxvY2tzLmFwcGVuZChVbmxpbmtlZEJsb2NrKGJsb2NrLmdldCgpKSk7CisgICAgICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5hcHBlbmQo
YmxvY2suZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZmlyc3QgYmxvY2sgaXMg
ZGVmaW5pdGVseSBhbiBPU1IgdGFyZ2V0LgotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgubnVt
QmxvY2tzKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+aXNPU1JUYXJnZXQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzLmFwcGVuZChibG9jay5y
ZWxlYXNlKCkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZEJsb2NrKGJsb2Nr
KTsKICAgICAgICAgICAgICAgICAgICAgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTM1NDAsMTEgKzM1NDMsMTEgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkg
eworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
CiAgICAgICAgIEFTU0VSVChibG9jayk7CiAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxl
KSB7Ci0gICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmNsZWFyKCk7Cisg
ICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9jayhibG9jayk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTUgKzc5LDE0IEBA
IHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgcGVyZm9ybUJsb2NrQ0ZB
KEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB2b2lkIHBlcmZvcm1CbG9ja0NGQShCYXNpY0Js
b2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgaWYgKCFibG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9n
RigiICAgQmxvY2sgIyV1IChiYyMldSk6XG4iLCBibG9ja0luZGV4LCBibG9jay0+Ynl0ZWNvZGVC
ZWdpbik7CisgICAgICAgICAgICBkYXRhTG9nKCIgICBCbG9jayAiLCAqYmxvY2ssICI6XG4iKTsK
ICAgICAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwogICAgICAgICBpZiAodmVy
Ym9zZSkgewogICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIGhlYWQgdmFyczogIik7CkBAIC0x
MjcsOCArMTI2LDggQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICBkYXRhTG9nRigiQ0ZBIFsldV1cbiIsICsrbV9jb3VudCk7CiAgICAgICAgIAotICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
OyArK2Jsb2NrKQotICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ0ZBKGJsb2NrKTsKKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytibG9ja0luZGV4KQorICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ0ZBKG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCkpOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
RkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsOCArNTQsOCBA
QCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBkbyB7CiAgICAgICAgICAgICBpbm5lckNoYW5n
ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAg
ICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJ
bmRleF0uZ2V0KCk7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
CiAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CkBAIC02Mywy
NyArNjMsMjQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHN3aXRjaCAoYmxvY2stPmxhc3Qo
KS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgSnVtcDogewogICAgICAgICAgICAgICAg
ICAgICAvLyBTdWNjZXNzb3Igd2l0aCBvbmUgcHJlZGVjZXNzb3IgLT4gbWVyZ2UuCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2Nr
LCAwKV0tPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCld
LT5tX3ByZWRlY2Vzc29yc1swXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IGJs
b2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnN1Y2Nlc3NvcigwKS0+
cHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoYmxvY2stPnN1Y2Nlc3NvcigwKS0+cHJlZGVjZXNzb3JzWzBdID09IGJsb2NrKTsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nRigiQ0ZHU2ltcGxpZnk6IEp1bXAgbWVyZ2Ugb24gQmxvY2sgIyV1IHRvIEJs
b2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgs
IG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJDRkdTaW1wbGlmeTogSnVtcCBtZXJnZSBvbiBCbG9jayAiLCAqYmxvY2ssICIgdG8g
QmxvY2sgIiwgKmJsb2NrLT5zdWNjZXNzb3IoMCksICIuXG4iKTsKICNlbmRpZgogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5k
ZXRocmVhZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRl
eCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApLCBub0Jsb2NrcygpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1lcmdlQmxvY2tzKGJsb2NrLCBibG9jay0+c3VjY2Vzc29yKDApLCBub0Js
b2NrcygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hh
bmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiTm90IGp1bXAgbWVyZ2luZyBv
biBCbG9jayAjJXUgdG8gQmxvY2sgIyV1IGJlY2F1c2UgcHJlZGVjZXNzb3JzID0gIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3Io
YmxvY2ssIDApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKV0tPm1fcHJl
ZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJDRkdTaW1wbGlmeTogTm90IGp1bXAgbWVyZ2luZyBvbiBCbG9jayAiLCAqYmxvY2ssICIgdG8g
QmxvY2sgIiwgKmJsb2NrLT5zdWNjZXNzb3IoMCksICIgYmVjYXVzZSBwcmVkZWNlc3NvcnMgPSAi
LCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxv
Y2stPnN1Y2Nlc3NvcigwKS0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2dGKCIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIj
JXUiLCBtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKV0tPm1fcHJl
ZGVjZXNzb3JzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCpibG9j
ay0+c3VjY2Vzc29yKDApLT5wcmVkZWNlc3NvcnNbaV0pOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwogI2VuZGlmCkBA
IC0xMDMsNDUgKzEwMCw0MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIEJyYW5j
aCBvbiBjb25zdGFudCAtPiBqZXR0aXNvbiB0aGUgbm90LXRha2VuIGJsb2NrIGFuZCBtZXJnZS4K
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzS25vd25EaXJlY3Rpb24oYmxvY2stPmNmYUJyYW5j
aERpcmVjdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29uZGl0aW9uID0g
YnJhbmNoQ29uZGl0aW9uKGJsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzWwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9u
KGJsb2NrLCBjb25kaXRpb24pXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
YXJnZXRCbG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrID0gYmxvY2stPnN1Y2Nlc3NvckZvckNv
bmRpdGlvbihjb25kaXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
amV0dGlzb25lZEJsb2NrID0gYmxvY2stPnN1Y2Nlc3NvckZvckNvbmRpdGlvbighY29uZGl0aW9u
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRCbG9jay0+cHJlZGVjZXNzb3Jz
LnNpemUoKSA9PSAxKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDRkdTaW1wbGlmeTogS25v
d24gY29uZGl0aW9uICglcykgYnJhbmNoIG1lcmdlIG9uIEJsb2NrICMldSB0byBCbG9jayAjJXUs
IGpldHRpc29uaW5nIEJsb2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25kaXRpb24gPyAidHJ1ZSIgOiAiZmFsc2UiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRp
b24oYmxvY2ssIGNvbmRpdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgIWNvbmRpdGlvbikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJDRkdTaW1wbGlmeTogS25vd24gY29uZGl0aW9uICgiLCBjb25kaXRpb24sICIp
IGJyYW5jaCBtZXJnZSAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24gQmxv
Y2sgIiwgKmJsb2NrLCAiIHRvIEJsb2NrICIsICp0YXJnZXRCbG9jaywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIiwgamV0dGlzb25pbmcgQmxvY2sgIiwgKmpldHRpc29uZWRCbG9j
aywgIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJl
bWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJsb2NrSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24pLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVCbG9jayhtX2dyYXBoLnN1Y2Nlc3NvckZvckNv
bmRpdGlvbihibG9jaywgIWNvbmRpdGlvbikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtZXJnZUJsb2NrcyhibG9jaywgdGFyZ2V0QmxvY2ssIGpldHRpc29uZWRCbG9jayk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ0ZH
U2ltcGxpZnk6IEtub3duIGNvbmRpdGlvbiAoJXMpIGJyYW5jaC0+anVtcCBjb252ZXJzaW9uIG9u
IEJsb2NrICMldSB0byBCbG9jayAjJXUsIGpldHRpc29uaW5nIEJsb2NrICMldS5cbiIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPyAidHJ1ZSIgOiAiZmFs
c2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9n
cmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbiksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihi
bG9jaywgIWNvbmRpdGlvbikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDRkdTaW1wbGlmeTogS25vd24gY29u
ZGl0aW9uICgiLCBjb25kaXRpb24sICIpICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJicmFuY2gtPmp1bXAgY29udmVyc2lvbiBvbiBCbG9jayAiLCAqYmxvY2ssICIgdG8gQmxv
Y2sgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QmxvY2ssICIsIGpl
dHRpc29uaW5nIEJsb2NrICIsIGpldHRpc29uZWRCbG9jaywgIi5cbiIpOwogI2VuZGlmCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
QmxvY2tJbmRleCB0YWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlv
bihibG9jaywgY29uZGl0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0lu
ZGV4IG5vdFRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJs
b2NrLCAhY29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luID0g
YmxvY2stPmxhc3QoKS0+Y29kZU9yaWdpbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
bG9jay0+bGFzdCgpLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGJsb2NrLT5sYXN0KCktPnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2Nr
KGJsb2NrSW5kZXgsIG5vdFRha2VuQmxvY2tJbmRleCwgYm91bmRhcnlDb2RlT3JpZ2luKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2NrKGJsb2NrLCBqZXR0aXNvbmVk
QmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIGJvdW5kYXJ5Q29k
ZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRha2VuQmxv
Y2tJbmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odGFyZ2V0
QmxvY2spKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTE3Nyw3ICsxNjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBjYXNlcyBvdGhlciB0aGFuIGRlZmF1bHQgdGhlbiB0
aGlzIHR1cm5zCiAgICAgICAgICAgICAgICAgICAgIC8vIGludG8gYSBqdW1wLgogICAgICAgICAg
ICAgICAgICAgICBpZiAoZGF0YS0+Y2FzZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb252ZXJ0VG9KdW1wKGJsb2NrSW5kZXgsIGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0p1bXAoYmxvY2ssIGRhdGEtPmZhbGxUaHJv
dWdoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdl
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtMTg2LDQ3ICsxNzgsNDQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICBpZiAoYmxvY2stPmxhc3QoKS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50
KGJsb2NrLT5sYXN0KCktPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBUcmlTdGF0ZSBmb3VuZCA9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBCbG9ja0luZGV4IHRhcmdldEJsb2NrSW5kZXggPSBOb0Jsb2NrOworICAgICAgICAgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2sgPSAwOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6ZSgpOyBmb3VuZCA9PSBGYWxz
ZVRyaVN0YXRlICYmIGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9
IGRhdGEtPmNhc2VzW2ldLnZhbHVlLnN0cmljdEVxdWFsKHZhbHVlKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZm91bmQgPT0gVHJ1ZVRyaVN0YXRlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0YXJnZXRCbG9ja0luZGV4ID0gZGF0YS0+Y2FzZXNbaV0udGFyZ2V0
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCbG9jayA9IGRhdGEtPmNh
c2VzW2ldLnRhcmdldDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kID09IE1peGVkVHJp
U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZm91bmQgPT0gRmFsc2VUcmlTdGF0ZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0YXJnZXRCbG9ja0luZGV4ID0gZGF0YS0+ZmFsbFRocm91Z2g7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQodGFyZ2V0QmxvY2tJbmRleCAhPSBOb0Jsb2NrKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCbG9jayA9IGRhdGEtPmZhbGxUaHJvdWdo
OworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRhcmdldEJsb2NrKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEJsb2NrSW5k
ZXgsIDE+IGpldHRpc29uZWRCbG9ja3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3NvcnMoYmxvY2spOyBpLS07KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCBqZXR0aXNvbmVkQmxvY2tJbmRleCA9IG1f
Z3JhcGguc3VjY2Vzc29yKGJsb2NrLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoamV0dGlzb25lZEJsb2NrSW5kZXggIT0gdGFyZ2V0QmxvY2tJbmRleCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgamV0dGlzb25lZEJsb2Nrcy5hcHBlbmQoamV0dGlzb25lZEJs
b2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAx
PiBqZXR0aXNvbmVkQmxvY2tzOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jayA9IGJsb2NrLT5zdWNjZXNzb3Io
aSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpldHRpc29uZWRCbG9jayAhPSB0
YXJnZXRCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamV0dGlzb25lZEJs
b2Nrcy5hcHBlbmQoamV0dGlzb25lZEJsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNC
bG9jayogdGFyZ2V0QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3RhcmdldEJsb2NrSW5kZXhdLmdl
dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodGFyZ2V0QmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGFyZ2V0QmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCkgPT0gMSkg
ewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiQ0ZHU2ltcGxpZnk6IEtub3duIGNvbnN0YW50ICgiLCB2YWx1ZSwgIikgc3dpdGNoIG1lcmdl
IG9uICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCbG9jayAjIiwgYmxvY2tJ
bmRleCwgIiB0byBCbG9jayAjIiwgdGFyZ2V0QmxvY2tJbmRleCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIi5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
QmxvY2sgIiwgKmJsb2NrLCAiIHRvIEJsb2NrICIsICp0YXJnZXRCbG9jaywgIi5cbiIpOwogI2Vu
ZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRl
dGhyZWFkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgdGFyZ2V0QmxvY2tJbmRleCwgamV0
dGlzb25lZEJsb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3Mo
YmxvY2ssIHRhcmdldEJsb2NrLCBqZXR0aXNvbmVkQmxvY2tzKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJDRkdTaW1wbGlmeTogS25vd24gY29uc3RhbnQgKCIsIHZhbHVlLCAi
KSBzd2l0Y2gtPmp1bXAgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29udmVy
c2lvbiBvbiBCbG9jayAjIiwgYmxvY2tJbmRleCwgIiB0byBCbG9jayAjIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QmxvY2tJbmRleCwgIi5cbiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiY29udmVyc2lvbiBvbiBCbG9jayAiLCAqYmxvY2ssICIg
dG8gQmxvY2sgIyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0YXJnZXRCbG9j
aywgIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJl
bWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAo
KTsKQEAgLTIzNSw5ICsyMjQsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBibG9jay0+bGFzdCgpLT5jb2RlT3Jp
Z2luOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5sYXN0KCktPmNvbnZlcnRU
b1BoYW50b20oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBqZXR0aXNvbmVkQmxvY2tzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgamV0dGlzb25CbG9jayhibG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tzW2ldLCBi
b3VuZGFyeUNvZGVPcmlnaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0
aXNvbkJsb2NrKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2tzW2ldLCBib3VuZGFyeUNvZGVPcmlnaW4p
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYm91bmRh
cnlDb2RlT3JpZ2luLCBPcEluZm8odGFyZ2V0QmxvY2tJbmRleCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYm91bmRhcnlDb2RlT3Jp
Z2luLCBPcEluZm8odGFyZ2V0QmxvY2spKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI4MywxNCArMjcyLDE0IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBtX2dyYXBoLmludmFsaWRhdGVDRkcoKTsKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAKLSAgICAgICAgICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dy
YXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGtpbGxVbnJlYWNoYWJsZShibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
a2lsbFVucmVhY2hhYmxlKGJsb2NrKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTMwMiwyNSArMjkxLDIzIEBAIHB1YmxpYzoKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgdm9pZCBjb252ZXJ0VG9KdW1wKEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxv
Y2tJbmRleCB0YXJnZXRCbG9ja0luZGV4KQorICAgIHZvaWQgY29udmVydFRvSnVtcChCYXNpY0Js
b2NrKiBibG9jaywgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2spCiAgICAgewotICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAg
ICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1t0YXJnZXRCbG9j
a0luZGV4XS5nZXQoKTsKICAgICAgICAgQVNTRVJUKHRhcmdldEJsb2NrKTsKICAgICAgICAgQVNT
RVJUKHRhcmdldEJsb2NrLT5pc1JlYWNoYWJsZSk7Ci0gICAgICAgIGlmICh0YXJnZXRCbG9jay0+
bV9wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgaWYgKHRhcmdldEJsb2NrLT5w
cmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigKLSAgICAgICAgICAgICAgICAiQ0ZH
U2ltcGxpZnk6IEJyYW5jaC9Td2l0Y2ggdG8gc2FtZSBzdWNjZXNzb3IgbWVyZ2Ugb24gQmxvY2sg
IyV1IHRvIEJsb2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgdGFyZ2V0
QmxvY2tJbmRleCk7CisgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICJDRkdT
aW1wbGlmeTogQnJhbmNoL1N3aXRjaCB0byBzYW1lIHN1Y2Nlc3NvciBtZXJnZSBvbiBCbG9jayAi
LCAqYmxvY2ssCisgICAgICAgICAgICAgICAgIiB0byBCbG9jayAiLCAqdGFyZ2V0QmxvY2ssICIu
XG4iKTsKICNlbmRpZgogICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwotICAgICAgICAg
ICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgdGFyZ2V0QmxvY2tJbmRleCwgbm9CbG9ja3MoKSk7
CisgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9jaywgdGFyZ2V0QmxvY2ssIG5vQmxvY2tzKCkp
OwogICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKAotICAgICAgICAgICAgICAgICJDRkdTaW1wbGlm
eTogQnJhbmNoLT5qdW1wIGNvbnZlcnNpb24gdG8gc2FtZSBzdWNjZXNzb3Igb24gQmxvY2sgIyV1
IHRvIEJsb2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgdGFyZ2V0Qmxv
Y2tJbmRleCk7CisgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICJDRkdTaW1w
bGlmeTogQnJhbmNoLT5qdW1wIGNvbnZlcnNpb24gdG8gc2FtZSBzdWNjZXNzb3Igb24gQmxvY2sg
IiwKKyAgICAgICAgICAgICAgICAqYmxvY2ssICIgdG8gQmxvY2sgIiwgKnRhcmdldEJsb2NrLCAi
LlxuIiwKICNlbmRpZgogICAgICAgICAgICAgTm9kZSogYnJhbmNoID0gYmxvY2stPmxhc3QoKTsK
ICAgICAgICAgICAgIEFTU0VSVChicmFuY2gtPmlzVGVybWluYWwoKSk7CkBAIC0zMzAsMTQgKzMx
NywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBibG9jay0+YXBwZW5k
Tm9kZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYnJhbmNoLT5j
b2RlT3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyh0YXJnZXRCbG9ja0luZGV4KSk7Cisg
ICAgICAgICAgICAgICAgT3BJbmZvKHRhcmdldEJsb2NrKSk7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICB2b2lkIGtpbGxVbnJlYWNoYWJsZShCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgdm9p
ZCBraWxsVW5yZWFjaGFibGUoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAg
ICAgIAogICAgICAgICBBU1NFUlQoYmxvY2spOwogICAgICAgICBBU1NFUlQoIWJsb2NrLT5pc1Jl
YWNoYWJsZSk7CiAgICAgICAgIApAQCAtMzQ2LDcgKzMzMSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQog
ICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5hdChub2RlSW5kZXgp
KTsKICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uY2xlYXIo
KTsKKyAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soYmxvY2spOwogICAgIH0KICAgICAKICAgICB2
b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRp
c29uZWRCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFuZCkKQEAgLTM2MSw0
OSArMzQ2LDQ2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBPcEluZm8obGl2ZW5lc3NOb2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGpldHRpc29uQmxv
Y2soQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4
LCBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbikKKyAgICB2b2lkIGpldHRpc29uQmxvY2so
QmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jaywgQ29kZU9yaWdp
biBib3VuZGFyeUNvZGVPcmlnaW4pCiAgICAgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIEJhc2ljQmxvY2sq
IGpldHRpc29uZWRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlzb25lZEJsb2NrSW5kZXhd
LmdldCgpOwotICAgICAgICAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNv
bmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCiAgICAg
ICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2ssIGJvdW5kYXJ5
Q29kZU9yaWdpbiwgYXJndW1lbnRUb09wZXJhbmQoaSkpOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxz
KCk7ICsraSkKICAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoYmxvY2ssIGpldHRpc29uZWRC
bG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBpKTsKICAgICAgICAgCi0gICAgICAgIGZpeEpldHRp
c29uZWRQcmVkZWNlc3NvcnMoYmxvY2tJbmRleCwgamV0dGlzb25lZEJsb2NrSW5kZXgpOworICAg
ICAgICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2spOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoQmxvY2tJbmRl
eCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4KQorICAgIHZvaWQg
Zml4SmV0dGlzb25lZFByZWRlY2Vzc29ycyhCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayog
amV0dGlzb25lZEJsb2NrKQogICAgIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCJGaXhpbmcgcHJlZGVjZXNzb3JzIGFuZCBwaGlz
IGR1ZSB0byBqZXR0aXNvbiBvZiBCbG9jayAjJXUgZnJvbSBCbG9jayAjJXUuXG4iLAotICAgICAg
ICAgICAgICAgIGpldHRpc29uZWRCbG9ja0luZGV4LCBibG9ja0luZGV4KTsKKyAgICAgICAgZGF0
YUxvZygKKyAgICAgICAgICAgICJGaXhpbmcgcHJlZGVjZXNzb3JzIGFuZCBwaGlzIGR1ZSB0byBq
ZXR0aXNvbiBvZiBCbG9jayAiLCAqamV0dGlzb25lZEJsb2NrLAorICAgICAgICAgICAgIiBmcm9t
IEJsb2NrICIsICpibG9jaywgIi5cbiIsCiAjZW5kaWYKLSAgICAgICAgQmFzaWNCbG9jayogamV0
dGlzb25lZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tqZXR0aXNvbmVkQmxvY2tJbmRleF0uZ2V0
KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPm1f
cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoamV0dGlzb25lZEJs
b2NrLT5tX3ByZWRlY2Vzc29yc1tpXSAhPSBibG9ja0luZGV4KQorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGlmIChqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29yc1tpXSAhPSBi
bG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGpldHRpc29uZWRC
bG9jay0+bV9wcmVkZWNlc3NvcnNbaV0gPSBqZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3Jz
Lmxhc3QoKTsKLSAgICAgICAgICAgIGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnMucmVt
b3ZlTGFzdCgpOworICAgICAgICAgICAgamV0dGlzb25lZEJsb2NrLT5wcmVkZWNlc3NvcnNbaV0g
PSBqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29ycy50YWtlTGFzdCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBWZWN0b3I8QmxvY2tJbmRleCwgMT4gbm9C
bG9ja3MoKQorICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMT4gbm9CbG9ja3MoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIFZlY3RvcjxCbG9ja0luZGV4LCAxPigpOworICAgICAgICByZXR1cm4gVmVj
dG9yPEJhc2ljQmxvY2sqLCAxPigpOwogICAgIH0KICAgICAKLSAgICBWZWN0b3I8QmxvY2tJbmRl
eCwgMT4gb25lQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIFZlY3RvcjxCYXNpY0Js
b2NrKiwgMT4gb25lQmxvY2soQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBWZWN0
b3I8QmxvY2tJbmRleCwgMT4gcmVzdWx0OwotICAgICAgICByZXN1bHQuYXBwZW5kKGJsb2NrSW5k
ZXgpOworICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE+IHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChibG9jayk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgbWVyZ2VCbG9ja3MoCi0gICAgICAgIEJsb2NrSW5kZXggZmlyc3RCbG9ja0luZGV4
LCBCbG9ja0luZGV4IHNlY29uZEJsb2NrSW5kZXgsIFZlY3RvcjxCbG9ja0luZGV4LCAxPiBqZXR0
aXNvbmVkQmxvY2tJbmRpY2VzKQorICAgICAgICBCYXNpY0Jsb2NrKiBmaXJzdEJsb2NrLCBCYXNp
Y0Jsb2NrKiBzZWNvbmRCbG9jaywKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxPiBqZXR0
aXNvbmVkQmxvY2tzKQogICAgIHsKICAgICAgICAgLy8gVGhpcyB3aWxsIGFkZCBhbGwgb2YgdGhl
IG5vZGVzIGluIHNlY29uZEJsb2NrIHRvIGZpcnN0QmxvY2ssIGJ1dCBpbiBzbyBkb2luZwogICAg
ICAgICAvLyBpdCB3aWxsIGFsc28gZW5zdXJlIHRoYXQgYW55IEdldExvY2FscyBmcm9tIHRoZSBz
ZWNvbmQgYmxvY2sgdGhhdCByZWZlciB0bwpAQCAtNDExLDkgKzM5Myw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIC8vIHRoZW4gUGhhbnRvbXMgYXJlIGluc2VydGVkIGZvciBhbnl0aGluZyB0aGF0IHRo
ZSBqZXR0aXNvbmVkQmxvY2sgd291bGQgaGF2ZQogICAgICAgICAvLyBrZXB0IGFsaXZlLgogICAg
ICAgICAKLSAgICAgICAgQmFzaWNCbG9jayogZmlyc3RCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
Zmlyc3RCbG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgQmFzaWNCbG9jayogc2Vjb25kQmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW3NlY29uZEJsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICAKICAg
ICAgICAgLy8gUmVtb3ZlIHRoZSB0ZXJtaW5hbCBvZiBmaXJzdEJsb2NrIHNpbmNlIHdlIGRvbid0
IG5lZWQgaXQgYW55bW9yZS4gV2VsbCwgd2UgZG9uJ3QKICAgICAgICAgLy8gcmVhbGx5IHJlbW92
ZSBpdDsgd2UgYWN0dWFsbHkgdHVybiBpdCBpbnRvIGEgUGhhbnRvbS4KICAgICAgICAgQVNTRVJU
KGZpcnN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKQEAgLTQyMSw4ICs0MDAsOCBAQCBw
cml2YXRlOgogICAgICAgICBmaXJzdEJsb2NrLT5sYXN0KCktPmNvbnZlcnRUb1BoYW50b20oKTsK
ICAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPmxhc3QoKS0+cmVmQ291bnQoKSA9PSAxKTsKICAg
ICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGpldHRpc29uZWRCbG9ja0luZGljZXMu
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW2pldHRpc29uZWRCbG9ja0luZGljZXNbaV1dLmdldCgpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBqZXR0aXNvbmVkQmxvY2tzLnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrID0gamV0dGlzb25lZEJsb2Nr
c1tpXTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gVGltZSB0byBpbnNlcnQgZ2hvc3Rp
ZXMgZm9yIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUga2VwdCBhbGl2ZSBpbiBjYXNlIHdlIE9TUgog
ICAgICAgICAgICAgLy8gZXhpdCBwcmlvciB0byBoaXR0aW5nIHRoZSBmaXJzdEJsb2NrJ3MgdGVy
bWluYWwsIGFuZCBlbmQgdXAgZ29pbmcgZG93biBhCkBAIC00NDcsMjMgKzQyNiwyMyBAQCBwcml2
YXRlOgogICAgICAgICAvLyBwcmVkZWNlc3NvcnMgZWFnZXJseSB0byBlbnN1cmUgdGhhdCB3ZSBr
bm93IHdoYXQgdGhleSBhcmUgaW4gY2FzZSB0aGUgbmV4dCBibG9jayB3ZQogICAgICAgICAvLyBj
b25zaWRlciBpbiB0aGlzIHBoYXNlIHdpc2hlcyB0byBxdWVyeSB0aGUgcHJlZGVjZXNzb3JzIG9m
IG9uZSBvZiB0aGUgYmxvY2tzIHdlCiAgICAgICAgIC8vIGFmZmVjdGVkLgotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3NvcnMoZmlyc3RCbG9jayk7IGktLTspIHsK
LSAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fZ3JhcGgubV9ibG9ja3NbbV9n
cmFwaC5zdWNjZXNzb3IoZmlyc3RCbG9jaywgaSldLmdldCgpOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2op
IHsKLSAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29yc1tqXSA9PSBz
ZWNvbmRCbG9ja0luZGV4KQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPm1fcHJlZGVj
ZXNzb3JzW2pdID0gZmlyc3RCbG9ja0luZGV4OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBm
aXJzdEJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHN1Y2Nlc3NvciA9IGZpcnN0QmxvY2stPnN1Y2Nlc3NvcihpKTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IDA7IGogPCBzdWNjZXNzb3ItPnByZWRlY2Vzc29ycy5zaXplKCk7ICsr
aikgeworICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPnByZWRlY2Vzc29yc1tqXSA9PSBz
ZWNvbmRCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnNb
al0gPSBmaXJzdEJsb2NrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICAvLyBGaXggdGhlIHByZWRlY2Vzc29ycyBvZiBteSBmb3JtZXIgc3VjY2Vzc29ycy4gQWdh
aW4sIHdlJ2QgcmF0aGVyIG5vdCBkbyB0aGlzLCBidXQgaXQncwogICAgICAgICAvLyBhbiB1bmZv
cnR1bmF0ZSBuZWNlc3NpdHkuIFNlZSBhYm92ZSBjb21tZW50LgotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBqZXR0aXNvbmVkQmxvY2tJbmRpY2VzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAg
IGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoZmlyc3RCbG9ja0luZGV4LCBqZXR0aXNvbmVkQmxv
Y2tJbmRpY2VzW2ldKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gamV0dGlzb25lZEJsb2Nr
cy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGZp
cnN0QmxvY2ssIGpldHRpc29uZWRCbG9ja3NbaV0pOwogICAgICAgICAKICAgICAgICAgZmlyc3RC
bG9jay0+dmFsdWVzQXRUYWlsID0gc2Vjb25kQmxvY2stPnZhbHVlc0F0VGFpbDsKICAgICAgICAg
Zmlyc3RCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uID0gc2Vjb25kQmxvY2stPmNmYUJyYW5jaERp
cmVjdGlvbjsKICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nbc2Vjb25kQmxvY2tJ
bmRleF0uY2xlYXIoKTsKKyAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soc2Vjb25kQmxvY2spOwog
ICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjksOCArNjksOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgU2FtcGxpbmdSZWdp
b24gc2FtcGxpbmdSZWdpb24oIkRGRyBDUFMgUmV0aHJlYWRpbmc6IGZyZWVVbm5lY2Vzc2FyeU5v
ZGVzIik7CiAgICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1f
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwpAQCAt
Mzg3LDggKzM4Nyw4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBTYW1wbGluZ1JlZ2lvbiBz
YW1wbGluZ1JlZ2lvbigiREZHIENQUyBSZXRocmVhZGluZzogY2Fub25pY2FsaXplTG9jYWxzSW5C
bG9ja3MiKTsKICAgICAgICAgCi0gICAgICAgIGZvciAobV9ibG9ja0luZGV4ID0gbV9ncmFwaC5t
X2Jsb2Nrcy5zaXplKCk7IG1fYmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgbV9ibG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbbV9ibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7
CisgICAgICAgICAgICBtX2Jsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAg
ICAgICAgIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2soKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTQwMiwyMCArNDAyLDE5IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUg
dGhhdCBhdHRlbXB0cyB0byB1c2UgdGhpcyBmYWlsIGluc3RhbnRseS4KICAgICAgICAgbV9ibG9j
ayA9IDA7Ci0gICAgICAgIG1fYmxvY2tJbmRleCA9IE5vQmxvY2s7CiAgICAgICAgIAogICAgICAg
ICB3aGlsZSAoIXBoaVN0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgUGhpU3RhY2tFbnRy
eSBlbnRyeSA9IHBoaVN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgIHBoaVN0YWNrLnJlbW92ZUxh
c3QoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBlbnRy
eS5tX2Jsb2NrOwotICAgICAgICAgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMgPSBi
bG9jay0+bV9wcmVkZWNlc3NvcnM7CisgICAgICAgICAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRl
Y2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnM7CiAgICAgICAgICAgICBOb2RlKiBjdXJyZW50
UGhpID0gZW50cnkubV9waGk7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gY3VycmVudFBoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBzaXpl
X3QgaW5kZXggPSBlbnRyeS5tX2luZGV4OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gcHJlZGVjZXNzb3JzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3ByZWRlY2Vz
c29yc1tpXV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JC
bG9jayA9IHByZWRlY2Vzc29yc1tpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBOb2RlKiB2YXJpYWJsZUluUHJldmlvdXMgPSBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGluZGV4KTsKICAgICAgICAgICAgICAgICBpZiAoIXZh
cmlhYmxlSW5QcmV2aW91cykgewpAQCAtNDgxLDcgKzQ4MCw2IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBtX2xvY2FsUGhpU3RhY2s7CiAgICAgfQogICAgIAotICAgIEJsb2NrSW5kZXggbV9i
bG9ja0luZGV4OwogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgVmVjdG9yPFBoaVN0YWNr
RW50cnksIDEyOD4gbV9hcmd1bWVudFBoaVN0YWNrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5
LCAxMjg+IG1fbG9jYWxQaGlTdGFjazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsOCBAQCBw
dWJsaWM6CiAgICAgICAgIAogICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgCi0g
ICAgICAgIGZvciAodW5zaWduZWQgYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpOyArK2Jsb2NrKQotICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ1NFKG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tdLmdldCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkKKyAgICAg
ICAgICAgIHBlcmZvcm1CbG9ja0NTRShtX2dyYXBoLmJsb2NrKGJsb2NrKSk7CiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMjQgKzUyLDIzIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAKLSAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrczsgKyti
bG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKGJsb2NrLT5jZmFGb3VuZENvbnN0YW50cykKLSAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IGZvbGRDb25zdGFudHMoYmxvY2tJbmRleCk7CisgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBmb2xkQ29uc3RhbnRzKGJsb2NrKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQogCiBwcml2YXRlOgotICAg
IGJvb2wgZm9sZENvbnN0YW50cyhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgYm9vbCBmb2xk
Q29uc3RhbnRzKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCJDb25zdGFudCBmb2xkaW5n
IGNvbnNpZGVyaW5nIEJsb2NrICMldS5cbiIsIGJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9n
KCJDb25zdGFudCBmb2xkaW5nIGNvbnNpZGVyaW5nIEJsb2NrICIsICpibG9jaywgIi5cbiIpOwog
I2VuZGlmCi0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIG1f
c3RhdGUuYmVnaW5CYXNpY0Jsb2NrKGJsb2NrKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9j
aykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJl
dmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw4IEBAIHB1YmxpYzoKICAgICBib29sIHJ1
bigpCiAgICAgewogICAgICAgICAvLyBGaXJzdCByZXNldCB0aGUgY291bnRzIHRvIDAgZm9yIGFs
bCBub2Rlcy4KLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgp
OworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICgh
YmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykKQEAgLTYw
LDggKzYwLDggQEAgcHVibGljOgogICAgICAgICAvLyAtIE5vZGVzIHRoYXQgYXJlIG11c3QtZ2Vu
ZXJhdGUuCiAgICAgICAgIC8vIC0gTm9kZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdHlwZSBj
aGVja3MuCiAgICAgICAgIC8vIFNldCB0aGVpciByZWYgY291bnRzIHRvIDEgYW5kIHB1dCB0aGVt
IG9uIHRoZSB3b3JrbGlzdC4KLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewot
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5k
ZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAg
ICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0t
OykgewpAQCAtODEsOCArODEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBERkdfTk9ERV9ET19U
T19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBjb3VudEVkZ2UpOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIERpc2Fzc2Vt
Ymxlcjo6RGlzYXNzZW1ibGVyKEdyYXBoJiBncmFwaCkKICAgICA6IG1fZ3JhcGgoZ3JhcGgpCiB7
Ci0gICAgbV9sYWJlbEZvckJsb2NrSW5kZXgucmVzaXplKGdyYXBoLm1fYmxvY2tzLnNpemUoKSk7
CisgICAgbV9sYWJlbEZvckJsb2NrSW5kZXgucmVzaXplKGdyYXBoLm51bUJsb2NrcygpKTsKIH0K
IAogdm9pZCBEaXNhc3NlbWJsZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikKQEAgLTk3LDEzICs5NywxMyBAQCBWZWN0b3I8RGlzYXNzZW1ibGVyOjpEdW1w
ZWRPcD4gRGlzYXNzZW1iCiAgICAgCiAgICAgTm9kZSogbGFzdE5vZGUgPSAwOwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBwcmV2aW91c0xhYmVsID0gbV9zdGFydE9mQ29kZTsKLSAgICBmb3Ig
KHNpemVfdCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgIGZvciAoc2l6ZV90IGJsb2NrSW5kZXgg
PSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAg
ICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBkdW1wRGlz
YXNzZW1ibHkob3V0LCBkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZlciwgcHJldmlvdXNMYWJl
bCwgbV9sYWJlbEZvckJsb2NrSW5kZXhbYmxvY2tJbmRleF0sIGxhc3ROb2RlKTsKICAgICAgICAg
YXBwZW5kKHJlc3VsdCwgb3V0LCBwcmV2aW91c09yaWdpbik7Ci0gICAgICAgIG1fZ3JhcGguZHVt
cEJsb2NrSGVhZGVyKG91dCwgcHJlZml4LCBibG9ja0luZGV4LCBHcmFwaDo6RHVtcExpdmVQaGlz
T25seSk7CisgICAgICAgIG1fZ3JhcGguZHVtcEJsb2NrSGVhZGVyKG91dCwgcHJlZml4LCBibG9j
aywgR3JhcGg6OkR1bXBMaXZlUGhpc09ubHkpOwogICAgICAgICBhcHBlbmQocmVzdWx0LCBvdXQs
IHByZXZpb3VzT3JpZ2luKTsKICAgICAgICAgTm9kZSogbGFzdE5vZGVGb3JEaXNhc3NlbWJseSA9
IGJsb2NrLT5hdCgwKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+c2l6
ZSgpOyArK2kpIHsKQEAgLTExOCw3ICsxMTgsNyBAQCBWZWN0b3I8RGlzYXNzZW1ibGVyOjpEdW1w
ZWRPcD4gRGlzYXNzZW1iCiAgICAgICAgICAgICAgICAgLy8gYXMgdGhlIGVuZCBwb2ludC4gVGhp
cyBjYXNlIGlzIGhpdCBlaXRoZXIgZHVyaW5nIHBlZXBob2xlIGNvbXBhcmUKICAgICAgICAgICAg
ICAgICAvLyBvcHRpbWl6YXRpb25zICh0aGUgQnJhbmNoIHdvbid0IGhhdmUgaXRzIG93biBsYWJl
bCkgb3IgaWYgd2UgaGF2ZSBhCiAgICAgICAgICAgICAgICAgLy8gZm9yY2VkIE9TUiBleGl0Lgot
ICAgICAgICAgICAgICAgIGlmIChibG9ja0luZGV4ICsgMSA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpKQorICAgICAgICAgICAgICAgIGlmIChibG9ja0luZGV4ICsgMSA8IG1fZ3JhcGgubnVtQmxv
Y2tzKCkpCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMYWJlbCA9IG1fbGFiZWxGb3JCbG9j
a0luZGV4W2Jsb2NrSW5kZXggKyAxXTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRMYWJlbCA9IG1fZW5kT2ZNYWluUGF0aDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAkocmV2aXNpb24gMTUyMzM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsOSArNDQsOSBAQCB2b2lkIERvbWluYXRvcnM6OmNvbXB1dGUoR3JhcGgmIGdy
YXBoKQogewogICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIG5haXZlIGRvbWluYXRvciBzb2x2ZXIu
CiAgICAgCi0gICAgQVNTRVJUKGdyYXBoLm1fYmxvY2tzWzBdLT5tX3ByZWRlY2Vzc29ycy5pc0Vt
cHR5KCkpOworICAgIEFTU0VSVChncmFwaC5ibG9jaygwKS0+cHJlZGVjZXNzb3JzLmlzRW1wdHko
KSk7CiAgICAgCi0gICAgdW5zaWduZWQgbnVtQmxvY2tzID0gZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
OworICAgIHVuc2lnbmVkIG51bUJsb2NrcyA9IGdyYXBoLm51bUJsb2NrcygpOwogICAgIAogICAg
IGlmIChudW1CbG9ja3MgPiBtX3Jlc3VsdHMuc2l6ZSgpKSB7CiAgICAgICAgIG1fcmVzdWx0cy5n
cm93KG51bUJsb2Nrcyk7CkBAIC02MCwxMyArNjAsMTMgQEAgdm9pZCBEb21pbmF0b3JzOjpjb21w
dXRlKEdyYXBoJiBncmFwaCkKICAgICAKICAgICBtX3NjcmF0Y2guY2xlYXJBbGwoKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLTspIHsKLSAgICAgICAgaWYgKCFncmFwaC5t
X2Jsb2Nrc1tpXSkKKyAgICAgICAgaWYgKCFncmFwaC5ibG9jayhpKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBtX3NjcmF0Y2guc2V0KGkpOwogICAgIH0KICAgICAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLSA+IDE7KSB7Ci0gICAgICAgIGlmICghZ3JhcGgu
bV9ibG9ja3NbaV0gfHwgZ3JhcGgubV9ibG9ja3NbaV0tPm1fcHJlZGVjZXNzb3JzLmlzRW1wdHko
KSkKKyAgICAgICAgaWYgKCFncmFwaC5ibG9jayhpKSB8fCBncmFwaC5ibG9jayhpKS0+cHJlZGVj
ZXNzb3JzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5jbGVhckFsbCgpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3Jlc3VsdHNbaV0uc2V0KG1fc2NyYXRjaCk7CkBA
IC04OCwxNCArODgsMTQgQEAgdm9pZCBEb21pbmF0b3JzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkK
IAogYm9vbCBEb21pbmF0b3JzOjppdGVyYXRlRm9yQmxvY2soR3JhcGgmIGdyYXBoLCBCbG9ja0lu
ZGV4IGkpCiB7Ci0gICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5tX2Jsb2Nrc1tpXS5nZXQo
KTsKKyAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGkpOwogICAgIGlmICghYmxv
Y2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYmxvY2stPm1fcHJlZGVjZXNzb3Jz
LmlzRW1wdHkoKSkKKyAgICBpZiAoYmxvY2stPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3NjcmF0Y2guc2V0KG1fcmVzdWx0c1tibG9jay0+bV9w
cmVkZWNlc3NvcnNbMF1dKTsKLSAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+bV9wcmVkZWNl
c3NvcnMuc2l6ZSgpOyBqLS0gPiAxOykKLSAgICAgICAgbV9zY3JhdGNoLmZpbHRlcihtX3Jlc3Vs
dHNbYmxvY2stPm1fcHJlZGVjZXNzb3JzW2pdXSk7CisgICAgbV9zY3JhdGNoLnNldChtX3Jlc3Vs
dHNbYmxvY2stPnByZWRlY2Vzc29yc1swXS0+aW5kZXhdKTsKKyAgICBmb3IgKHVuc2lnbmVkIGog
PSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tID4gMTspCisgICAgICAgIG1fc2NyYXRj
aC5maWx0ZXIobV9yZXN1bHRzW2Jsb2NrLT5wcmVkZWNlc3NvcnNbal0tPmluZGV4XSk7CiAgICAg
bV9zY3JhdGNoLnNldChpKTsKICAgICByZXR1cm4gbV9yZXN1bHRzW2ldLnNldEFuZENoZWNrKG1f
c2NyYXRjaCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRv
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRv
cnMuaAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
b21pbmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEwICs0NSwxMCBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdm9pZCBjb21wdXRlKEdyYXBoJiBncmFwaCk7CiAgICAgCi0gICAgYm9vbCBkb21p
bmF0ZXMoQmxvY2tJbmRleCBmcm9tLCBCbG9ja0luZGV4IHRvKSBjb25zdAorICAgIGJvb2wgZG9t
aW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAogICAgIHsKICAg
ICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0gICAgICAgIHJldHVybiBtX3Jlc3VsdHNbdG9dLmdl
dChmcm9tKTsKKyAgICAgICAgcmV0dXJuIG1fcmVzdWx0c1t0by0+aW5kZXhdLmdldChmcm9tLT5p
bmRleCk7CiAgICAgfQogICAgIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAs
OCArNTAsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJl
YWRlZENQUyk7CiAgICAgICAgIAogICAgICAgICBtX3Byb2ZpdGFiaWxpdHlDaGFuZ2VkID0gZmFs
c2U7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCi0gICAgICAgICAgICBmaXh1
cEJsb2NrKG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCkpOworICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nr
cygpOyArK2Jsb2NrSW5kZXgpCisgICAgICAgICAgICBmaXh1cEJsb2NrKG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCkpOwogICAgICAgICAKICAgICAgICAgd2hpbGUgKG1fcHJvZml0YWJpbGl0eUNo
YW5nZWQpIHsKICAgICAgICAgICAgIG1fcHJvZml0YWJpbGl0eUNoYW5nZWQgPSBmYWxzZTsKQEAg
LTU5LDggKzU5LDggQEAgcHVibGljOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9n
cmFwaC5tX2FyZ3VtZW50UG9zaXRpb25zLnNpemUoKTsgaS0tOykKICAgICAgICAgICAgICAgICBt
X2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnNbaV0ubWVyZ2VBcmd1bWVudFVuYm94aW5nQXdhcmVu
ZXNzKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5k
ZXgpCi0gICAgICAgICAgICAgICAgZml4dXBTZXRMb2NhbHNJbkJsb2NrKG1fZ3JhcGgubV9ibG9j
a3NbYmxvY2tJbmRleF0uZ2V0KCkpOworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4
KQorICAgICAgICAgICAgICAgIGZpeHVwU2V0TG9jYWxzSW5CbG9jayhtX2dyYXBoLmJsb2NrKGJs
b2NrSW5kZXgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC01NzMsMTAgKzU3MywxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAobmV3
Q2hpbGRFZGdlLT5oYXNCb29sZWFuUmVzdWx0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShuZXdDaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRvQmVUYWtlbiA9
IG5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgQmxv
Y2tJbmRleCB0b0JlTm90VGFrZW4gPSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2tJbmRleCh0b0JlVGFrZW4pOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0Tm90VGFrZW5CbG9ja0luZGV4KHRvQmVOb3RU
YWtlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiB0b0JlVGFrZW4gPSBu
b2RlLT5ub3RUYWtlbkJsb2NrKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiB0b0JlTm90VGFrZW4gPSBub2RlLT50YWtlbkJsb2NrKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRUYWtlbkJsb2NrKHRvQmVUYWtlbik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXROb3RUYWtlbkJsb2NrKHRvQmVOb3RUYWtlbik7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2OSwz
MyArMjY5LDMxIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAg
ICBvdXQucHJpbnQoIlxuIik7CiB9CiAKLXZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwg
UGhpTm9kZUR1bXBNb2RlIHBoaU5vZGVEdW1wTW9kZSkKK3ZvaWQgR3JhcGg6OmR1bXBCbG9ja0hl
YWRlcihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIEJhc2ljQmxvY2sqIGJs
b2NrLCBQaGlOb2RlRHVtcE1vZGUgcGhpTm9kZUR1bXBNb2RlKQogewotICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0KLSAgICBvdXQucHJpbnQocHJl
Zml4LCAiQmxvY2sgIyIsIGJsb2NrSW5kZXgsICIgKCIsIGJsb2NrLT5hdCgwKS0+Y29kZU9yaWdp
biwgIik6ICIsIGJsb2NrLT5pc1JlYWNoYWJsZSA/ICIiIDogIihza2lwcGVkKSIsIGJsb2NrLT5p
c09TUlRhcmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6ICIiLCAiXG4iKTsKKyAgICBvdXQucHJpbnQo
cHJlZml4LCAiQmxvY2sgIyIsIGJsb2NrLT5ibG9ja0luZGV4LCAiICgiLCBibG9jay0+YXQoMCkt
PmNvZGVPcmlnaW4sICIpOiAiLCBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIoc2tpcHBlZCki
LCBibG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIiwgIlxuIik7CiAgICAg
b3V0LnByaW50KHByZWZpeCwgIiAgUHJlZGVjZXNzb3JzOiIpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKQotICAgICAgICBvdXQu
cHJpbnQoIiAjIiwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG91dC5w
cmludCgiICMiLCBibG9jay0+cHJlZGVjZXNzb3JzW2ldKTsKICAgICBvdXQucHJpbnQoIlxuIik7
CiAgICAgaWYgKG1fZG9taW5hdG9ycy5pc1ZhbGlkKCkpIHsKICAgICAgICAgb3V0LnByaW50KHBy
ZWZpeCwgIiAgRG9taW5hdGVkIGJ5OiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5k
b21pbmF0ZXMoaSwgYmxvY2tJbmRleCkpCisgICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5k
b21pbmF0ZXMoaSwgYmxvY2stPmJsb2NrSW5kZXgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgb3V0LnByaW50KCIgIyIsIGkpOwogICAgICAgICB9CiAgICAgICAgIG91
dC5wcmludCgiXG4iKTsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVzOiIp
OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5kb21pbmF0ZXMoYmxvY2tJbmRleCwgaSkp
CisgICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5kb21pbmF0ZXMoYmxvY2stPmJsb2NrSW5k
ZXgsIGkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgb3V0LnByaW50
KCIgIyIsIGkpOwogICAgICAgICB9CiAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICB9CiAg
ICAgaWYgKG1fbmF0dXJhbExvb3BzLmlzVmFsaWQoKSkgewotICAgICAgICBpZiAoY29uc3QgTmF0
dXJhbExvb3AqIGxvb3AgPSBtX25hdHVyYWxMb29wcy5oZWFkZXJPZihibG9ja0luZGV4KSkgewor
ICAgICAgICBpZiAoY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX25hdHVyYWxMb29wcy5oZWFk
ZXJPZihibG9jay0+YmxvY2tJbmRleCkpIHsKICAgICAgICAgICAgIG91dC5wcmludChwcmVmaXgs
ICIgIExvb3AgaGVhZGVyLCBjb250YWluczoiKTsKICAgICAgICAgICAgIFZlY3RvcjxCbG9ja0lu
ZGV4PiBzb3J0ZWRCbG9ja0xpc3Q7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbG9vcC0+c2l6ZSgpOyArK2kpCkBAIC0zOTQsMjkgKzM5MiwyNSBAQCB2b2lkIEdyYXBoOjpk
ZXRocmVhZCgpCiAgICAgbV9mb3JtID0gTG9hZFN0b3JlOwogfQogCi12b2lkIEdyYXBoOjpoYW5k
bGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXgg
YmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCkKK3ZvaWQgR3JhcGg6OmhhbmRs
ZVN1Y2Nlc3NvcihWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEJhc2ljQmxvY2sq
IGJsb2NrLCBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IpCiB7Ci0gICAgQmFzaWNCbG9jayogc3VjY2Vz
c29yID0gbV9ibG9ja3Nbc3VjY2Vzc29ySW5kZXhdLmdldCgpOwogICAgIGlmICghc3VjY2Vzc29y
LT5pc1JlYWNoYWJsZSkgewogICAgICAgICBzdWNjZXNzb3ItPmlzUmVhY2hhYmxlID0gdHJ1ZTsK
LSAgICAgICAgd29ya2xpc3QuYXBwZW5kKHN1Y2Nlc3NvckluZGV4KTsKKyAgICAgICAgd29ya2xp
c3QuYXBwZW5kKHN1Y2Nlc3Nvcik7CiAgICAgfQogICAgIAotICAgIHN1Y2Nlc3Nvci0+bV9wcmVk
ZWNlc3NvcnMuYXBwZW5kKGJsb2NrSW5kZXgpOworICAgIHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3Jz
LmFwcGVuZChibG9jayk7CiB9CiAKIHZvaWQgR3JhcGg6OmRldGVybWluZVJlYWNoYWJpbGl0eSgp
CiB7Ci0gICAgVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiB3b3JrbGlzdDsKLSAgICB3b3JrbGlzdC5h
cHBlbmQoMCk7Ci0gICAgbV9ibG9ja3NbMF0tPmlzUmVhY2hhYmxlID0gdHJ1ZTsKKyAgICBWZWN0
b3I8QmFzaWNCbG9jayosIDE2PiB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5hcHBlbmQoYmxvY2so
MCkpOworICAgIGJsb2NrKDApLT5pc1JlYWNoYWJsZSA9IHRydWU7CiAgICAgd2hpbGUgKCF3b3Jr
bGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgQmxvY2tJbmRleCBpbmRleCA9IHdvcmtsaXN0Lmxh
c3QoKTsKLSAgICAgICAgd29ya2xpc3QucmVtb3ZlTGFzdCgpOwotICAgICAgICAKLSAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7CisgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbnVtU3VjY2Vzc29ycyhibG9jayk7IGktLTspCi0gICAgICAgICAgICBoYW5kbGVTdWNj
ZXNzb3Iod29ya2xpc3QsIGluZGV4LCBzdWNjZXNzb3IoYmxvY2ssIGkpKTsKKyAgICAgICAgICAg
IGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgYmxvY2ssIHN1Y2Nlc3NvcihibG9jaywgaSkpOwog
ICAgIH0KIH0KIApAQCAtNDI3LDcgKzQyMSw3IEBAIHZvaWQgR3JhcGg6OnJlc2V0UmVhY2hhYmls
aXR5KCkKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBibG9jay0+aXNSZWFjaGFibGUgPSBmYWxzZTsKLSAgICAgICAgYmxvY2stPm1fcHJlZGVjZXNz
b3JzLmNsZWFyKCk7CisgICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMuY2xlYXIoKTsKICAgICB9
CiAgICAgCiAgICAgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw3ICsxNjksNyBAQCBw
dWJsaWM6CiAgICAgLy8gQ29kZUJsb2NrIGlzIG9wdGlvbmFsLCBidXQgbWF5IGFsbG93IGFkZGl0
aW9uYWwgaW5mb3JtYXRpb24gdG8gYmUgZHVtcGVkIChlLmcuIElkZW50aWZpZXIgbmFtZXMpLgog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCkpOwogICAgIGVudW0g
UGhpTm9kZUR1bXBNb2RlIHsgRHVtcExpdmVQaGlzT25seSwgRHVtcEFsbFBoaXMgfTsKLSAgICB2
b2lkIGR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmxv
Y2tJbmRleCwgUGhpTm9kZUR1bXBNb2RlKTsKKyAgICB2b2lkIGR1bXBCbG9ja0hlYWRlcihQcmlu
dFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmFzaWNCbG9jayosIFBoaU5vZGVEdW1wTW9k
ZSk7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiwgRWRnZSk7CiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKik7CiAgICAgc3RhdGljIGludCBh
bW91bnRPZk5vZGVXaGl0ZVNwYWNlKE5vZGUqKTsKQEAgLTE3OSw4ICsxNzksNiBAQCBwdWJsaWM6
CiAgICAgLy8gcHJlY2VkaW5nIG5vZGUuIFJldHVybnMgdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcHJp
bnRlZC4KICAgICBib29sIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciog
cHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlKTsKIAotICAgIEJs
b2NrSW5kZXggYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCbG9ja0luZGV4PiYg
YmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKTsKLQogICAgIFNwZWN1bGF0ZWRUeXBlIGdl
dEpTQ29uc3RhbnRTcGVjdWxhdGlvbihOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHNwZWN1bGF0aW9uRnJvbVZhbHVlKG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2Nr
KSk7CkBAIC00NTUsMTcgKzQ1MywyNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2NvZGVC
bG9jay0+dXNlc0FyZ3VtZW50cygpOwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBudW1TdWNj
ZXNzb3JzKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIEJsb2NrSW5kZXggbnVtQmxvY2tzKCkgY29u
c3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYmxvY2soQmxv
Y2tJbmRleCBibG9ja0luZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tibG9ja0luZGV4XS5n
ZXQoKTsgfQorICAgIEJhc2ljQmxvY2sqIGxhc3RCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGJsb2Nr
KG51bUJsb2NrcygpIC0gMSk7IH0KKworICAgIHZvaWQgYXBwZW5kQmxvY2soUGFzc1JlZlB0cjxC
YXNpY0Jsb2NrPiBiYXNpY0Jsb2NrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0
KCktPm51bVN1Y2Nlc3NvcnMoKTsKKyAgICAgICAgYmFzaWNCbG9jay0+YmxvY2tJbmRleCA9IG1f
YmxvY2tzLnNpemUoKTsKKyAgICAgICAgbV9ibG9ja3MuYXBwZW5kKGJhc2ljQmxvY2spOwogICAg
IH0KLSAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQg
aW5kZXgpCisgICAgCisgICAgdm9pZCBraWxsQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4KQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3NvcihpbmRleCk7Cisg
ICAgICAgIG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmNsZWFyKCk7CiAgICAgfQotICAgIEJsb2NrSW5k
ZXggc3VjY2Vzc29yRm9yQ29uZGl0aW9uKEJhc2ljQmxvY2sqIGJsb2NrLCBib29sIGNvbmRpdGlv
bikKKyAgICAKKyAgICB2b2lkIGtpbGxCbG9jayhCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihj
b25kaXRpb24pOworICAgICAgICBraWxsQmxvY2soYmFzaWNCbG9jay0+aW5kZXgpOwogICAgIH0K
ICAgICAKICAgICBib29sIGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUqIG5vZGUpCkBAIC02NTks
NyArNjY0LDcgQEAgcHVibGljOgogICAgIAogICAgIE5vZGVBbGxvY2F0b3ImIG1fYWxsb2NhdG9y
OwogCi0gICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBtX2Jsb2NrczsKKyAgICBW
ZWN0b3I8IFJlZlB0cjxCYXNpY0Jsb2NrPiAsIDg+IG1fYmxvY2tzOwogICAgIFZlY3RvcjxFZGdl
LCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKICAgICBWZWN0b3I8U3RvcmFnZUFjY2Vzc0RhdGE+IG1f
c3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAgVmVjdG9yPE5vZGUqLCA4PiBtX2FyZ3VtZW50czsKQEAg
LTY4Myw3ICs2ODgsNyBAQCBwdWJsaWM6CiAgICAgUmVmQ291bnRTdGF0ZSBtX3JlZkNvdW50U3Rh
dGU7CiBwcml2YXRlOgogICAgIAotICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9j
a0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXgg
c3VjY2Vzc29ySW5kZXgpOworICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCYXNpY0Js
b2NrKiwgMTY+JiB3b3JrbGlzdCwgQmFzaWNCbG9jayosIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcik7
CiAgICAgCiAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0
ZUludGVnZXIoTm9kZSogYWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3BlY3VsYXRlSW50ZWdlciwg
Tm9kZSogaW1tZWRpYXRlKQogICAgIHsKQEAgLTczMiwyNyArNzM3LDYgQEAgcHJpdmF0ZToKICAg
ICB9CiB9OwogCi1jbGFzcyBHZXRCeXRlY29kZUJlZ2luRm9yQmxvY2sgewotcHVibGljOgotICAg
IEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayhHcmFwaCYgZ3JhcGgpCi0gICAgICAgIDogbV9ncmFw
aChncmFwaCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIG9wZXJhdG9yKCkoQmxv
Y2tJbmRleCogYmxvY2tJbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2dyYXBo
Lm1fYmxvY2tzWypibG9ja0luZGV4XS0+Ynl0ZWNvZGVCZWdpbjsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgR3JhcGgmIG1fZ3JhcGg7Ci19OwotCi1pbmxpbmUgQmxvY2tJbmRleCBHcmFwaDo6Ymxv
Y2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCbG9ja0luZGV4PiYgbGlua2luZ1Rhcmdl
dHMsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pCi17Ci0gICAgcmV0dXJuICpiaW5hcnlTZWFyY2g8
QmxvY2tJbmRleCwgdW5zaWduZWQ+KGxpbmtpbmdUYXJnZXRzLCBsaW5raW5nVGFyZ2V0cy5zaXpl
KCksIGJ5dGVjb2RlQmVnaW4sIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jaygqdGhpcykpOwotfQot
CiAjZGVmaW5lIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2RlLCB0aGluZ1RvRG8p
IGRvIHsgICAgICAgICAgICBcCiAgICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmIChfbm9kZS0+
ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCShy
ZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxM
b29wcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDI2ICs2MCwyNiBAQCB2b2lkIE5hdHVyYWxM
b29wczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCiAgICAgCiAgICAgbV9sb29wcy5yZXNpemUoMCk7
CiAgICAgCi0gICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBncmFwaC5tX2Jsb2Nrcy5z
aXplKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFw
aC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IGdyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIGlmICghYmxv
Y2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGdyYXBoLm51bVN1Y2Nlc3NvcnMoYmxvY2spOyBpLS07KSB7Ci0gICAgICAgICAgICBC
bG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4ID0gZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCBpKTsKLSAg
ICAgICAgICAgIGlmICghZ3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyhzdWNjZXNzb3JJbmRl
eCwgYmxvY2tJbmRleCkpCisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBncmFw
aC5zdWNjZXNzb3IoYmxvY2ssIGkpOworICAgICAgICAgICAgaWYgKCFncmFwaC5tX2RvbWluYXRv
cnMuZG9taW5hdGVzKHN1Y2Nlc3NvciwgYmxvY2spKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gbV9sb29wcy5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICBpZiAobV9s
b29wc1tpXS5oZWFkZXIoKSA9PSBzdWNjZXNzb3JJbmRleCkgewotICAgICAgICAgICAgICAgICAg
ICBtX2xvb3BzW2ldLmFkZEJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICht
X2xvb3BzW2ldLmhlYWRlcigpID09IHN1Y2Nlc3NvcikgeworICAgICAgICAgICAgICAgICAgICBt
X2xvb3BzW2ldLmFkZEJsb2NrKGJsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChm
b3VuZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIE5hdHVyYWxMb29w
IGxvb3Aoc3VjY2Vzc29ySW5kZXgpOwotICAgICAgICAgICAgbG9vcC5hZGRCbG9jayhibG9ja0lu
ZGV4KTsKKyAgICAgICAgICAgIE5hdHVyYWxMb29wIGxvb3Aoc3VjY2Vzc29yKTsKKyAgICAgICAg
ICAgIGxvb3AuYWRkQmxvY2soYmxvY2spOwogICAgICAgICAgICAgbV9sb29wcy5hcHBlbmQobG9v
cCk7CiAgICAgICAgIH0KICAgICB9CkBAIC04OCw4ICs4OCw4IEBAIHZvaWQgTmF0dXJhbExvb3Bz
Ojpjb21wdXRlKEdyYXBoJiBncmFwaCkKICAgICAgICAgZGF0YUxvZygiQWZ0ZXIgYm9vdHN0cmFw
OiAiLCAqdGhpcywgIlxuIik7CiAgICAgCiAgICAgRmFzdEJpdFZlY3RvciBzZWVuQmxvY2tzOwot
ICAgIFZlY3RvcjxCbG9ja0luZGV4LCA0PiBibG9ja1dvcmtsaXN0OwotICAgIHNlZW5CbG9ja3Mu
cmVzaXplKGdyYXBoLm1fYmxvY2tzLnNpemUoKSk7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCA0
PiBibG9ja1dvcmtsaXN0OworICAgIHNlZW5CbG9ja3MucmVzaXplKGdyYXBoLm51bUJsb2Nrcygp
KTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvb3BzLnNpemUoKTsgaS0tOykgewog
ICAgICAgICBOYXR1cmFsTG9vcCYgbG9vcCA9IG1fbG9vcHNbaV07CkBAIC0xMDEsMzAgKzEwMSwy
NyBAQCB2b2lkIE5hdHVyYWxMb29wczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAg
ICBkYXRhTG9nKCJEZWFsaW5nIHdpdGggbG9vcCAiLCBsb29wLCAiXG4iKTsKICAgICAgICAgCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IGxvb3Auc2l6ZSgpOyBqLS07KSB7Ci0gICAgICAgICAg
ICBzZWVuQmxvY2tzLnNldChsb29wW2pdKTsKKyAgICAgICAgICAgIHNlZW5CbG9ja3Muc2V0KGxv
b3Bbal0tPmluZGV4KTsKICAgICAgICAgICAgIGJsb2NrV29ya2xpc3QuYXBwZW5kKGxvb3Bbal0p
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB3aGlsZSAoIWJsb2NrV29ya2xpc3QuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBibG9ja1dvcmts
aXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGJsb2NrV29y
a2xpc3QudGFrZUxhc3QoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHZlcmJvc2Up
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIERlYWxpbmcgd2l0aCAjIiwgYmxvY2tJbmRl
eCwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIERlYWxpbmcgd2l0aCAiLCAq
YmxvY2ssICJcbiIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYmxvY2tJbmRleCA9
PSBsb29wLmhlYWRlcigpKQorICAgICAgICAgICAgaWYgKGJsb2NrID09IGxvb3AuaGVhZGVyKCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoYmxvY2spOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSBibG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyBqLS07KSB7Ci0gICAgICAg
ICAgICAgICAgQmxvY2tJbmRleCBwcmVkZWNlc3NvckluZGV4ID0gYmxvY2stPm1fcHJlZGVjZXNz
b3JzW2pdOwotICAgICAgICAgICAgICAgIGlmIChzZWVuQmxvY2tzLmdldChwcmVkZWNlc3Nvcklu
ZGV4KSkKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5wcmVkZWNlc3NvcnMu
c2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3Ig
PSBibG9jay0+cHJlZGVjZXNzb3JzW2pdOworICAgICAgICAgICAgICAgIGlmIChzZWVuQmxvY2tz
LmdldChwcmVkZWNlc3Nvci0+aW5kZXgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBsb29wLmFkZEJsb2NrKHByZWRlY2Vz
c29ySW5kZXgpOwotICAgICAgICAgICAgICAgIGJsb2NrV29ya2xpc3QuYXBwZW5kKHByZWRlY2Vz
c29ySW5kZXgpOwotICAgICAgICAgICAgICAgIHNlZW5CbG9ja3Muc2V0KHByZWRlY2Vzc29ySW5k
ZXgpOworICAgICAgICAgICAgICAgIGxvb3AuYWRkQmxvY2socHJlZGVjZXNzb3I7CisgICAgICAg
ICAgICAgICAgYmxvY2tXb3JrbGlzdC5hcHBlbmQocHJlZGVjZXNzb3IpOworICAgICAgICAgICAg
ICAgIHNlZW5CbG9ja3Muc2V0KHByZWRlY2Vzc29yLT5pbmRleCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xMzMsMTIgKzEzMCwxMiBAQCB2b2lkIE5hdHVyYWxMb29wczo6
Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIGRhdGFMb2coIlJlc3VsdHM6ICIsICp0aGlz
LCAiXG4iKTsKIH0KIAotVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gTmF0dXJhbExvb3BzOjps
b29wc09mKEJsb2NrSW5kZXggYmxvY2tJbmRleCkgY29uc3QKK1ZlY3Rvcjxjb25zdCBOYXR1cmFs
TG9vcCo+IE5hdHVyYWxMb29wczo6bG9vcHNPZihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKIHsK
ICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiByZXN1bHQ7CiAgICAgCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9sb29wcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKG1fbG9vcHNb
aV0uY29udGFpbnMoYmxvY2tJbmRleCkpCisgICAgICAgIGlmIChtX2xvb3BzW2ldLmNvbnRhaW5z
KGJsb2NrKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJm1fbG9vcHNbaV0pOwogICAgIH0K
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMu
aAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1
cmFsTG9vcHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMjAgKzQyLDIwIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgfQogICAgIAotICAgIE5hdHVyYWxMb29wKEJsb2NrSW5kZXggaGVhZGVyKQorICAg
IE5hdHVyYWxMb29wKEJhc2ljQmxvY2sqIGhlYWRlcikKICAgICAgICAgOiBtX2hlYWRlcihoZWFk
ZXIpCiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZEJsb2NrKEJsb2NrSW5kZXggYmxv
Y2spIHsgbV9ib2R5LmFwcGVuZChibG9jayk7IH0KKyAgICB2b2lkIGFkZEJsb2NrKEJhc2ljQmxv
Y2sqIGJsb2NrKSB7IG1fYm9keS5hcHBlbmQoYmxvY2spOyB9CiAgICAgCi0gICAgQmxvY2tJbmRl
eCBoZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYWRlcjsgfQorICAgIEJhc2ljQmxvY2sqIGhl
YWRlcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGVyOyB9CiAgICAgCiAgICAgdW5zaWduZWQgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9keS5zaXplKCk7IH0KLSAgICBCbG9ja0luZGV4IGF0KHVu
c2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fYm9keVtpXTsgfQotICAgIEJsb2NrSW5kZXggb3Bl
cmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQorICAgIEJhc2ljQmxv
Y2sqIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fYm9keVtpXTsgfQorICAgIEJhc2lj
QmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KICAg
ICAKLSAgICBib29sIGNvbnRhaW5zKEJsb2NrSW5kZXggYmxvY2spIGNvbnN0CisgICAgYm9vbCBj
b250YWlucyhCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKICAgICB7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1fYm9keS5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIGlmIChtX2JvZHlb
aV0gPT0gYmxvY2spCkBAIC02Nyw4ICs2Nyw4IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIHByaXZhdGU6Ci0gICAgQmxvY2tJbmRleCBtX2hlYWRl
cjsKLSAgICBWZWN0b3I8QmxvY2tJbmRleCwgND4gbV9ib2R5OworICAgIEJhc2ljQmxvY2sqIG1f
aGVhZGVyOworICAgIFZlY3RvcjxCbG9ja0Jsb2NrKiwgND4gbV9ib2R5OwogfTsKIAogY2xhc3Mg
TmF0dXJhbExvb3BzIDogcHVibGljIEFuYWx5c2lzPE5hdHVyYWxMb29wcz4gewpAQCAtOTEsMTcg
KzkxLDE3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBSZXR1cm4gZWl0aGVyIG51bGwgaWYgdGhl
IGJsb2NrIGlzbid0IGEgbG9vcCBoZWFkZXIsIG9yIHRoZQogICAgIC8vIGxvb3AgaXQgYmVsb25n
cyB0by4KLSAgICBjb25zdCBOYXR1cmFsTG9vcCogaGVhZGVyT2YoQmxvY2tJbmRleCBibG9ja0lu
ZGV4KSBjb25zdAorICAgIGNvbnN0IE5hdHVyYWxMb29wKiBoZWFkZXJPZihCYXNpY0Jsb2NrKiBi
bG9jaykgY29uc3QKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9vcHMuc2l6
ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV9sb29wc1tpXS5oZWFkZXIoKSA9PSBibG9j
a0luZGV4KQorICAgICAgICAgICAgaWYgKG1fbG9vcHNbaV0uaGVhZGVyKCkgPT0gYmxvY2spCiAg
ICAgICAgICAgICAgICAgcmV0dXJuICZtX2xvb3BzW2ldOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KICAgICAKICAgICAvLyBSZXR1cm4gdGhlIGluZGljZXMgb2YgYWxsIGxv
b3BzIHRoaXMgYmVsb25ncyB0by4KLSAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBsb29w
c09mKEJsb2NrSW5kZXggYmxvY2tJbmRleCkgY29uc3Q7CisgICAgVmVjdG9yPGNvbnN0IE5hdHVy
YWxMb29wKj4gbG9vcHNPZihCYXNpY0Jsb2NrKikgY29uc3Q7CiAKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMTUyMzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDggQEAKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCitzdHJ1Y3QgQmFzaWNCbG9jazsKKwogc3RydWN0IFN0cnVj
dHVyZVRyYW5zaXRpb25EYXRhIHsKICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlOwog
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlOwpAQCAtODAsMTggKzgyLDI4IEBAIHN0cnVjdCBO
ZXdBcnJheUJ1ZmZlckRhdGEgewogLy8gdmFsdWVzLgogc3RydWN0IFN3aXRjaENhc2UgewogICAg
IFN3aXRjaENhc2UoKQotICAgICAgICA6IHRhcmdldChOb0Jsb2NrKQorICAgICAgICA6IHRhcmdl
dCgwKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgU3dpdGNoQ2FzZShMYXp5SlNWYWx1ZSB2YWx1
ZSwgQmxvY2tJbmRleCB0YXJnZXQpCisgICAgU3dpdGNoQ2FzZShMYXp5SlNWYWx1ZSB2YWx1ZSwg
QmFzaWNCbG9jayogdGFyZ2V0KQogICAgICAgICA6IHZhbHVlKHZhbHVlKQogICAgICAgICAsIHRh
cmdldCh0YXJnZXQpCiAgICAgewogICAgIH0KICAgICAKKyAgICBzdGF0aWMgU3dpdGNoQ2FzZSB3
aXRoQnl0ZWNvZGVJbmRleChMYXp5SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkKKyAgICB7CisgICAgICAgIFN3aXRjaENhc2UgcmVzdWx0OworICAgICAgICByZXN1bHQudmFs
dWUgPSB2YWx1ZTsKKyAgICAgICAgcmVzdWx0LnRhcmdldCA9IGJpdHdpc2VfY2FzdDxCYXNpY0Js
b2NrKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRlY29kZUluZGV4KSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHRhcmdldEJ5dGVjb2RlSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih0YXJnZXQpOyB9Cisg
ICAgCiAgICAgTGF6eUpTVmFsdWUgdmFsdWU7Ci0gICAgQmxvY2tJbmRleCB0YXJnZXQ7CisgICAg
QmFzaWNCbG9jayogdGFyZ2V0OwogfTsKIAogZW51bSBTd2l0Y2hLaW5kIHsKQEAgLTExMyw3ICsx
MjUsNyBAQCBzdHJ1Y3QgU3dpdGNoRGF0YSB7CiAgICAgfQogICAgIAogICAgIFZlY3RvcjxTd2l0
Y2hDYXNlPiBjYXNlczsKLSAgICBCbG9ja0luZGV4IGZhbGxUaHJvdWdoOworICAgIEJhc2ljQmxv
Y2sqIGZhbGxUaHJvdWdoOwogICAgIFN3aXRjaEtpbmQga2luZDsKICAgICB1bnNpZ25lZCBzd2l0
Y2hUYWJsZUluZGV4OwogICAgIGJvb2wgZGlkVXNlSnVtcFRhYmxlOwpAQCAtNzQzLDI4ICs3NTUs
MjggQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9vcEluZm8yOwogICAgIH0KICAg
ICAKLSAgICB2b2lkIHNldFRha2VuQmxvY2tJbmRleChCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisg
ICAgdm9pZCBzZXRUYWtlbkJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKICAgICAgICAg
QVNTRVJUKGlzQnJhbmNoKCkgfHwgaXNKdW1wKCkpOwotICAgICAgICBtX29wSW5mbyA9IGJsb2Nr
SW5kZXg7CisgICAgICAgIG1fb3BJbmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYmxvY2sp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldE5vdFRha2VuQmxvY2tJbmRleChCbG9ja0luZGV4
IGJsb2NrSW5kZXgpCisgICAgdm9pZCBzZXROb3RUYWtlbkJsb2NrKEJhc2ljQmxvY2sqIGJsb2Nr
KQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkpOwotICAgICAgICBtX29wSW5mbzIg
PSBibG9ja0luZGV4OworICAgICAgICBtX29wSW5mbzIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihibG9jayk7CiAgICAgfQogICAgIAotICAgIEJsb2NrSW5kZXggdGFrZW5CbG9ja0luZGV4KCkK
KyAgICBCYXNpY0Jsb2NrKiB0YWtlbkJsb2NrSW5kZXgoKQogICAgIHsKICAgICAgICAgQVNTRVJU
KGlzQnJhbmNoKCkgfHwgaXNKdW1wKCkpOwotICAgICAgICByZXR1cm4gbV9vcEluZm87CisgICAg
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KG1fb3BJbmZvKTsKICAgICB9CiAg
ICAgCi0gICAgQmxvY2tJbmRleCBub3RUYWtlbkJsb2NrSW5kZXgoKQorICAgIEJhc2ljQmxvY2sq
IG5vdFRha2VuQmxvY2tJbmRleCgpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSk7
Ci0gICAgICAgIHJldHVybiBtX29wSW5mbzI7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
QmFzaWNCbG9jayo+KG1fb3BJbmZvMik7CiAgICAgfQogICAgIAogICAgIFN3aXRjaERhdGEqIHN3
aXRjaERhdGEoKQpAQCAtNzg3LDcgKzc5OSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICBCbG9ja0luZGV4IHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKKyAg
ICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCiAgICAgewogICAgICAgICBp
ZiAoaXNTd2l0Y2goKSkgewogICAgICAgICAgICAgaWYgKGluZGV4IDwgc3dpdGNoRGF0YSgpLT5j
YXNlcy5zaXplKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNSwxNCArMjI1LDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBleGlzdCBhIHByZWRlY2Vzc29yIGJs
b2NrIHRoYXQgaGFzIHRoaXMgbm9kZSBpbmRleCBpbgogICAgICAgICAgICAgICAgICAgICAvLyBp
dHMgdGFpbCB2YXJpYWJsZXMuCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGJsb2NrLT5t
X3ByZWRlY2Vzc29ycy5zaXplKCk7ICsraykgewotICAgICAgICAgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogcHJldkJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9jay0+bV9wcmVkZWNlc3Nv
cnNba11dLmdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKEJsb2NrLCBi
bG9jay0+bV9wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2spOwotICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKEJsb2NrLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10pLCBwcmV2Qmxv
Y2stPmlzUmVhY2hhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0g
MDsgayA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2spIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHByZXZCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2st
PnByZWRlY2Vzc29yc1trXV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgoQmxvY2ssIGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2spOworICAgICAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKEJsb2NrLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwg
cHJldkJsb2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBw
cmV2Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGlzIG5vdCByZWZl
cnJpbmcgdG8gKnRoaXMqIGJsb2NrIHRoZW4gYWxsIHByZWRlY2Vzc29ycwogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gbXVzdCBoYXZlIHRoYXQgbG9jYWwgYXZhaWxhYmxlLgotICAgICAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9ja0luZGV4LCBCbG9jaywgYmxvY2st
Pm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKGxvY2FsLCBibG9ja0luZGV4LCBCbG9jaywgYmxvY2stPnByZWRlY2Vzc29yc1tr
XSksIHByZXZOb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocHJldk5vZGUt
Pm9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgpAQCAtMjQzLDExICsyNDMsMTEgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2Nr
LT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5zaG91bGRHZW5l
cmF0ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2NhbCwgYmxvY2st
Pm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBNb3ZIaW50CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gTW92SGludEFuZENoZWNrCkBA
IC0yNTksNyArMjU5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQXQgdGhpcyBwb2ludCBpdCBjYW5ub3QgcmVmZXIgaW50byB0aGlzIGJsb2NrLgotICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNb
a10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+aXNJbkJsb2NrKGVkZ2Uubm9kZSgpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNb
a10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+aXNJbkJsb2NrKGVkZ2Uubm9kZSgpKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwgZm91bmQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206097</attachid>
            <date>2013-07-04 09:20:34 -0700</date>
            <delta_ts>2013-07-04 09:36:32 -0700</delta_ts>
            <desc>moar!!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>124425</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCB2b2lkIEFic3Ry
YWN0U3RhdGU6OmJlZ2luQmFzaWNCbG9jayhCYXNpCiAKIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5p
dGlhbGl6ZShHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgQmFzaWNCbG9jayogcm9vdCA9IGdyYXBoLm1f
YmxvY2tzWzBdLmdldCgpOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBncmFwaC5ibG9jaygwKTsK
ICAgICByb290LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKICAgICByb290LT5jZmFIYXNWaXNp
dGVkID0gZmFsc2U7CiAgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKQEAgLTEx
OCw4ICsxMTgsOCBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdyCiAg
ICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKICAgICAgICAg
cm9vdC0+dmFsdWVzQXRUYWlsLmxvY2FsKGkpLmNsZWFyKCk7CiAgICAgfQotICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gMSA7IGJsb2NrSW5kZXggPCBncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLm1f
YmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMSA7IGJsb2NrSW5kZXggPCBncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAg
ICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCFibG9j
ay0+aXNSZWFjaGFibGUpCkBAIC0xODAyLDI0ICsxODAyLDI0IEBAIGlubGluZSBib29sIEFic3Ry
YWN0U3RhdGU6Om1lcmdlVG9TdWNjZXMKICAgICBjYXNlIEp1bXA6IHsKICAgICAgICAgQVNTRVJU
KGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9u
KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRh
dGFMb2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwtPnRha2Vu
QmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2Nr
ICIsICp0ZXJtaW5hbC0+dGFrZW5CbG9jaygpLCAiLlxuIik7CiAjZW5kaWYKLSAgICAgICAgcmV0
dXJuIG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2Nr
SW5kZXgoKV0uZ2V0KCkpOworICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgdGVybWlu
YWwtPnRha2VuQmxvY2soKSk7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEJyYW5jaDogewog
ICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uICE9IEludmFsaWRC
cmFuY2hEaXJlY3Rpb24pOwogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwtPnRha2VuQmxvY2tJbmRleCgp
KTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICIsICp0ZXJtaW5h
bC0+dGFrZW5CbG9jaygpLCAiLlxuIik7CiAjZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxvY2st
PmNmYUJyYW5jaERpcmVjdGlvbiAhPSBUYWtlRmFsc2UpCi0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2NrSW5k
ZXgoKV0uZ2V0KCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCB0
ZXJtaW5hbC0+dGFrZW5CbG9jaygpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1
LlxuIiwgdGVybWluYWwtPm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZygi
ICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICIsICp0ZXJtaW5hbC0+bm90VGFrZW5CbG9jaygpLCAi
LlxuIik7CiAjZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlv
biAhPSBUYWtlVHJ1ZSkKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywg
Z3JhcGgubV9ibG9ja3NbdGVybWluYWwtPm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIHRlcm1pbmFsLT5ub3RUYWtl
bkJsb2NrKCkpOwogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CiAgICAgICAgIApAQCAt
MTgyOCw5ICsxODI4LDkgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nl
cwogICAgICAgICAvLyB3ZSdyZSBub3QuIEhvd2V2ZXIgSSBzb21laG93IGRvdWJ0IHRoYXQgdGhp
cyB3aWxsIGV2ZXIgYmUgYSBiaWcgZGVhbC4KICAgICAgICAgQVNTRVJUKGJhc2ljQmxvY2stPmNm
YUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsKICAgICAgICAgU3dp
dGNoRGF0YSogZGF0YSA9IHRlcm1pbmFsLT5zd2l0Y2hEYXRhKCk7Ci0gICAgICAgIGJvb2wgY2hh
bmdlZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW2RhdGEtPmZhbGxUaHJvdWdo
XS5nZXQoKSk7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGRhdGEt
PmZhbGxUaHJvdWdoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6
ZSgpOyBpLS07KQotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBncmFw
aC5tX2Jsb2Nrc1tkYXRhLT5jYXNlc1tpXS50YXJnZXRdLmdldCgpKTsKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKICAgICAg
ICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQyLDggKzE0Miw4IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIC8vIEZpZ3VyZSBvdXQg
d2hpY2ggdmFyaWFibGVzIGFyZSBsaXZlLCB1c2luZyBhIGNvbnNlcnZhdGl2ZSBhcHByb3hpbWF0
aW9uIG9mCiAgICAgICAgIC8vIGxpdmVuZXNzLgotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9j
a0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9j
a3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewor
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwg
YmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKQEAgLTE2NCw4ICsxNjQsOCBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIHVzZWQgb25seSBmb3IgR2V0QnlWYWwgYW5kIEdldEFycmF5TGVuZ3Ro
IGFjY2Vzc2VzLiBBdCB0aGUgc2FtZSB0aW1lLAogICAgICAgICAvLyBpZGVudGlmeSB1c2VzIG9m
IENyZWF0ZUFyZ3VtZW50cyB0aGF0IGFyZSBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBhcmd1bWVu
dHMKICAgICAgICAgLy8gYmVpbmcgYWxpYXNlZCBvbmx5IHRvIHZhcmlhYmxlcyB0aGF0IHNhdGlz
ZnkgdGhlc2UgY29uc3RyYWludHMuCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgp
IHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+
c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewpAQCAtMzUyLDggKzM1Miw4IEBAIHB1YmxpYzoKICAg
ICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhcyByZXF1aXJpbmcgY3JlYXRpb24uIFRoaXMgaXMgYSBw
cm9wZXJ0eSBvZiBTZXRMb2NhbHMgdG8KICAgICAgICAgLy8gdmFyaWFibGVzIHRoYXQgYXJlIG5l
aXRoZXIgdGhlIGNvcnJlY3QgYXJndW1lbnRzIHJlZ2lzdGVyIG5vciBhcmUgbWFya2VkIGFzCiAg
ICAgICAgIC8vIGJlaW5nIGFyZ3VtZW50cy1hbGlhc2VkLgotICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsg
KytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRl
eCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJs
b2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKQEAgLTQyOCw4ICs0MjgsOCBA
QCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1f
Z3JhcGgpOwogICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewot
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5k
ZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm51bUJsb2NrczsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgp
OyBpbmRleEluQmxvY2srKykgewpAQCAtNjYxLDggKzY2MSw4IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJs
b2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5C
bG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDggKzQ0LDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkK
ICAgICB7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
KyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJs
b2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTUyMzM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDExICs0MCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAK
IGNsYXNzIEdyYXBoOwogCi10eXBlZGVmIFZlY3RvciA8QmxvY2tJbmRleCwgMj4gUHJlZGVjZXNz
b3JMaXN0OwordHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsK
IAotc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZSosIDg+IHsKK3N0cnVjdCBCYXNpY0Js
b2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2NrPiwgVmVjdG9yPE5vZGUqLCA4PiB7CiAgICAgQmFz
aWNCbG9jayh1bnNpZ25lZCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVu
c2lnbmVkIG51bUxvY2FscykKICAgICAgICAgOiBieXRlY29kZUJlZ2luKGJ5dGVjb2RlQmVnaW4p
CisgICAgICAgICwgaW5kZXgoTm9CbG9jaykKICAgICAgICAgLCBpc09TUlRhcmdldChmYWxzZSkK
ICAgICAgICAgLCBjZmFIYXNWaXNpdGVkKGZhbHNlKQogICAgICAgICAsIGNmYVNob3VsZFJldmlz
aXQoZmFsc2UpCkBAIC03NCw2ICs3NSwxMyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxO
b2RlKiwgOD4gewogICAgICAgICB2YWx1ZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fs
cyk7CiAgICAgfQogICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rl
cy5zaXplKCk7IH0KKyAgICBOb2RlKiBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rl
c1tpXTsgfQorICAgIE5vZGUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0
KGkpOyB9CisgICAgTm9kZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIGF0KHNpemUoKSAtIDEpOyB9
CisgICAgCisgICAgdm9pZCBhcHBlbmQoTm9kZSogbm9kZSkgeyBtX25vZGVzLmFwcGVuZChub2Rl
KTsgfQorICAgIAogICAgIHNpemVfdCBudW1Ob2RlcygpIGNvbnN0IHsgcmV0dXJuIHBoaXMuc2l6
ZSgpICsgc2l6ZSgpOyB9CiAgICAgTm9kZSogbm9kZShzaXplX3QgaSkgY29uc3QKICAgICB7CkBA
IC0xMDEsMTUgKzEwOSwzMyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlKiwgOD4g
ewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAorICAgIHVuc2lnbmVkIG51bVN1
Y2Nlc3NvcnMoKSB7IHJldHVybiBsYXN0KCktPm51bVN1Y2Nlc3NvcnMoKTsgfQorICAgIAorICAg
IEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBsYXN0KCktPnN1Y2Nlc3NvcihpbmRleCk7CisgICAgfQorICAgIEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvckZvckNvbmRpdGlvbihib29sIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIHJldHVy
biBsYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOworICAgIH0KKwogI2Rl
ZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5
cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKICAg
ICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhcHBlbmROb2RlKEdy
YXBoJiwgU3BlY3VsYXRlZFR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CiAgICAg
REZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCiAj
dW5kZWYgREZHX0RFRklORV9BUFBFTkRfTk9ERQogICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KCIjIiwgaW5kZXgpOwor
ICAgIH0KKyAgICAKICAgICAvLyBUaGlzIHZhbHVlIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgYmxv
Y2sgbGlua2luZyBhbmQgT1NSIGVudHJ5LiBJdCBpcyBtb3N0bHkgbWVhbmluZ2xlc3MKICAgICAv
LyBmb3Igb3RoZXIgcHVycG9zZXMgZHVlIHRvIGlubGluaW5nLgogICAgIHVuc2lnbmVkIGJ5dGVj
b2RlQmVnaW47CiAgICAgCisgICAgQmxvY2tJbmRleCBpbmRleDsKKyAgICAKICAgICBib29sIGlz
T1NSVGFyZ2V0OwogICAgIGJvb2wgY2ZhSGFzVmlzaXRlZDsKICAgICBib29sIGNmYVNob3VsZFJl
dmlzaXQ7CkBAIC0xMjIsMzAgKzE0OCw0MyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxO
b2RlKiwgOD4gewogICAgIGJvb2wgaXNSZWFjaGFibGU7CiAgICAgCiAgICAgVmVjdG9yPE5vZGUq
PiBwaGlzOwotICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKKyAgICBQcmVkZWNl
c3Nvckxpc3QgcHJlZGVjZXNzb3JzOwogICAgIAogICAgIE9wZXJhbmRzPE5vZGUqLCBOb2RlUG9p
bnRlclRyYWl0cz4gdmFyaWFibGVzQXRIZWFkOwogICAgIE9wZXJhbmRzPE5vZGUqLCBOb2RlUG9p
bnRlclRyYWl0cz4gdmFyaWFibGVzQXRUYWlsOwogICAgIAogICAgIE9wZXJhbmRzPEFic3RyYWN0
VmFsdWU+IHZhbHVlc0F0SGVhZDsKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNB
dFRhaWw7CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPE5vZGUqLCA4PiBtX25vZGVzOwogfTsKIAog
c3RydWN0IFVubGlua2VkQmxvY2sgewotICAgIEJsb2NrSW5kZXggbV9ibG9ja0luZGV4OworICAg
IEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgYm9vbCBtX25lZWRzTm9ybWFsTGlua2luZzsKICAg
ICBib29sIG1fbmVlZHNFYXJseVJldHVybkxpbmtpbmc7CiAgICAgCiAgICAgVW5saW5rZWRCbG9j
aygpIHsgfQogICAgIAotICAgIGV4cGxpY2l0IFVubGlua2VkQmxvY2soQmxvY2tJbmRleCBibG9j
a0luZGV4KQotICAgICAgICA6IG1fYmxvY2tJbmRleChibG9ja0luZGV4KQorICAgIGV4cGxpY2l0
IFVubGlua2VkQmxvY2soQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9j
aykKICAgICAgICAgLCBtX25lZWRzTm9ybWFsTGlua2luZyh0cnVlKQogICAgICAgICAsIG1fbmVl
ZHNFYXJseVJldHVybkxpbmtpbmcoZmFsc2UpCiAgICAgewogICAgIH0KIH07CiAgICAgCitzdGF0
aWMgaW5saW5lIGdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayhCYXNpY0Jsb2NrKiogYmFzaWNCbG9j
aykKK3sKKyAgICByZXR1cm4gKCpiYXNpY0Jsb2NrKS0+Ynl0ZWNvZGVCZWdpbjsKK30KKworc3Rh
dGljIGlubGluZSBCYXNpY0Jsb2NrKiBibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCYXNp
Y0Jsb2NrKj4mIGxpbmtpbmdUYXJnZXRzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKQoreworICAg
IHJldHVybiAqYmluYXJ5U2VhcmNoPEJhc2ljQmxvY2sqLCB1bnNpZ25lZD4obGlua2luZ1Rhcmdl
dHMsIGxpbmtpbmdUYXJnZXRzLnNpemUoKSwgYnl0ZWNvZGVCZWdpbiwgZ2V0Qnl0ZWNvZGVCZWdp
bkZvckJsb2NrKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw4
ICsxODMsOCBAQCBwcml2YXRlOgogICAgIC8vIFBhcnNlIGEgc2luZ2xlIGJhc2ljIGJsb2NrIG9m
IGJ5dGVjb2RlIGluc3RydWN0aW9ucy4KICAgICBib29sIHBhcnNlQmxvY2sodW5zaWduZWQgbGlt
aXQpOwogICAgIC8vIExpbmsgYmxvY2sgc3VjY2Vzc29ycy4KLSAgICB2b2lkIGxpbmtCbG9jayhC
YXNpY0Jsb2NrKiwgVmVjdG9yPEJsb2NrSW5kZXg+JiBwb3NzaWJsZVRhcmdldHMpOwotICAgIHZv
aWQgbGlua0Jsb2NrcyhWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHVubGlua2VkQmxvY2tzLCBWZWN0
b3I8QmxvY2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0cyk7CisgICAgdm9pZCBsaW5rQmxvY2soQmFz
aWNCbG9jayosIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CisgICAgdm9p
ZCBsaW5rQmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3MsIFZlY3Rv
cjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgLy8gTGluayBHZXRMb2NhbCAm
IFNldExvY2FsIG5vZGVzLCB0byBlbnN1cmUgbGl2ZSB2YWx1ZXMgYXJlIGdlbmVyYXRlZC4KICAg
ICBlbnVtIFBoaVN0YWNrVHlwZSB7CiAgICAgICAgIExvY2FsUGhpU3RhY2ssCkBAIC0xMDM5LDEz
ICsxMDM5LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIFBvdGVudGlhbCBibG9jayBsaW5raW5n
IHRhcmdldHMuIE11c3QgYmUgc29ydGVkIGJ5IGJ5dGVjb2RlQmVnaW4sIGFuZAogICAgICAgICAv
LyBjYW5ub3QgaGF2ZSB0d28gYmxvY2tzIHRoYXQgaGF2ZSB0aGUgc2FtZSBieXRlY29kZUJlZ2lu
LiBGb3IgdGhpcyB2ZXJ5CiAgICAgICAgIC8vIHJlYXNvbiwgdGhpcyBpcyBub3QgZXF1aXZhbGVu
dCB0byAKLSAgICAgICAgVmVjdG9yPEJsb2NrSW5kZXg+IG1fYmxvY2tMaW5raW5nVGFyZ2V0czsK
KyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBtX2Jsb2NrTGlua2luZ1RhcmdldHM7CiAgICAg
ICAgIAogICAgICAgICAvLyBJZiB0aGUgY2FsbHNpdGUncyBiYXNpYyBibG9jayB3YXMgc3BsaXQg
aW50byB0d28sIHRoZW4gdGhpcyB3aWxsIGJlCiAgICAgICAgIC8vIHRoZSBoZWFkIG9mIHRoZSBj
YWxsc2l0ZSBibG9jay4gSXQgbmVlZHMgaXRzIHN1Y2Nlc3NvcnMgbGlua2VkIHRvIHRoZQogICAg
ICAgICAvLyBtX3VubGlua2VkQmxvY2tzLCBidXQgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kOiB0
aGVyZSdzIG5vIHdheSBmb3IKICAgICAgICAgLy8gYW55IGJsb2NrcyBpbiBtX3VubGlua2VkQmxv
Y2tzIHRvIGp1bXAgYmFjayBpbnRvIHRoaXMgYmxvY2suCi0gICAgICAgIEJsb2NrSW5kZXggbV9j
YWxsc2l0ZUJsb2NrSGVhZDsKKyAgICAgICAgQmFzaWNCbG9jayogbV9jYWxsc2l0ZUJsb2NrSGVh
ZDsKICAgICAgICAgCiAgICAgICAgIC8vIERvZXMgdGhlIGNhbGxzaXRlIGJsb2NrIGhlYWQgbmVl
ZCBsaW5raW5nPyBUaGlzIGlzIHR5cGljYWxseSB0cnVlCiAgICAgICAgIC8vIGJ1dCB3aWxsIGJl
IGZhbHNlIGZvciB0aGUgbWFjaGluZSBjb2RlIGJsb2NrJ3MgaW5saW5lIHN0YWNrIGVudHJ5CkBA
IC0xMDc2LDcgKzEwNzYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQnl0ZUNvZGVQYXJzZXIq
LAogICAgICAgICAgICAgQ29kZUJsb2NrKiwKICAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywKLSAgICAgICAgICAgIEJsb2NrSW5kZXggY2FsbHNpdGVCbG9ja0hlYWQsCisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBjYWxsc2l0ZUJsb2NrSGVhZCwKICAgICAgICAgICAgIEpTRnVu
Y3Rpb24qIGNhbGxlZSwgLy8gTnVsbCBpZiB0aGlzIGlzIGEgY2xvc3VyZSBjYWxsLgogICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHJldHVyblZhbHVlVlIsCiAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQsCkBAIC0xMjk1LDE0ICsxMjk1LDE0IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICB1bnNpZ25lZCBuZXdO
dW1Mb2NhbHMgPSBpbmxpbmVDYWxsRnJhbWVTdGFydCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
clNpemUgKyBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwogICAgIGlmIChuZXdOdW1M
b2NhbHMgPiBtX251bUxvY2FscykgewogICAgICAgICBtX251bUxvY2FscyA9IG5ld051bUxvY2Fs
czsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tpXS0+ZW5zdXJlTG9jYWxzKG5l
d051bUxvY2Fscyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytpKQorICAgICAgICAgICAgbV9ncmFwaC5ibG9jayhpKS0+ZW5zdXJlTG9jYWxz
KG5ld051bUxvY2Fscyk7CiAgICAgfQogICAgIAogICAgIHNpemVfdCBhcmd1bWVudFBvc2l0aW9u
U3RhcnQgPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnMuc2l6ZSgpOwogCiAgICAgSW5saW5l
U3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KAotICAgICAgICB0aGlzLCBjb2RlQmxvY2ssIGNv
ZGVCbG9jaywgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxLCBjYWxsTGlua1N0YXR1cy5mdW5j
dGlvbigpLAorICAgICAgICB0aGlzLCBjb2RlQmxvY2ssIGNvZGVCbG9jaywgbV9ncmFwaC5sYXN0
QmxvY2soKSwgY2FsbExpbmtTdGF0dXMuZnVuY3Rpb24oKSwKICAgICAgICAgKFZpcnR1YWxSZWdp
c3RlciltX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0T3BlcmFuZCksCiAgICAg
ICAgIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lU3RhcnQsIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBraW5kKTsKICAgICAKQEAgLTEzMjEsMTMgKzEzMjEsMTMgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIG1fY3VycmVudEluZGV4ID0g
b2xkSW5kZXg7CiAgICAgCiAgICAgLy8gSWYgdGhlIGlubGluZWQgY29kZSBjcmVhdGVkIHNvbWUg
bmV3IGJhc2ljIGJsb2NrcywgdGhlbiB3ZSBoYXZlIGxpbmtpbmcgdG8gZG8uCi0gICAgaWYgKGlu
bGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCAhPSBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKSAtIDEpIHsKKyAgICBpZiAoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFk
ICE9IG1fZ3JhcGgubGFzdEJsb2NrKCkpIHsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVCghaW5s
aW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSk7CiAgICAgICAgIGlmIChp
bmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcpCi0gICAgICAg
ICAgICBsaW5rQmxvY2sobV9ncmFwaC5tX2Jsb2Nrc1tpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNp
dGVCbG9ja0hlYWRdLmdldCgpLCBpbmxpbmVTdGFja0VudHJ5Lm1fYmxvY2tMaW5raW5nVGFyZ2V0
cyk7CisgICAgICAgICAgICBsaW5rQmxvY2soaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxv
Y2tIZWFkLCBpbmxpbmVTdGFja0VudHJ5Lm1fYmxvY2tMaW5raW5nVGFyZ2V0cyk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fYmxvY2tzW2lubGluZVN0YWNrRW50
cnkubV9jYWxsc2l0ZUJsb2NrSGVhZF0tPmlzTGlua2VkKTsKKyAgICAgICAgICAgIEFTU0VSVChp
bmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWQtPmlzTGlua2VkKTsKICAgICAgICAg
CiAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgY2FsbHNpdGUgYmxvY2sgaGVhZCBp
cyBub3Qgb3duZWQgYnkgdGhlIGNhbGxlci4KICAgICAgICAgaWYgKCFpbmxpbmVTdGFja0VudHJ5
Lm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSkgewpAQCAtMTM0OCw3ICsxMzQ4
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIH0gZWxz
ZQogICAgICAgICBBU1NFUlQoaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1w
dHkoKSk7CiAgICAgCi0gICAgQmFzaWNCbG9jayogbGFzdEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
cy5sYXN0KCkuZ2V0KCk7CisgICAgQmFzaWNCbG9jayogbGFzdEJsb2NrID0gbV9ncmFwaC5sYXN0
QmxvY2soKTsKICAgICAvLyBJZiB0aGVyZSB3YXMgYSByZXR1cm4sIGJ1dCBubyBlYXJseSByZXR1
cm5zLCB0aGVuIHdlJ3JlIGRvbmUuIFdlIGFsbG93IHBhcnNpbmcgb2YKICAgICAvLyB0aGUgY2Fs
bGVyIHRvIGNvbnRpbnVlIGluIHdoYXRldmVyIGJhc2ljIGJsb2NrIHdlJ3JlIGluIHJpZ2h0IG5v
dy4KICAgICBpZiAoIWlubGluZVN0YWNrRW50cnkubV9kaWRFYXJseVJldHVybiAmJiBpbmxpbmVT
dGFja0VudHJ5Lm1fZGlkUmV0dXJuKSB7CkBAIC0xMzY0LDExICsxMzY0LDExIEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgICAgIC8vIGZvciByZWxl
YXNlIGJ1aWxkcyBiZWNhdXNlIHRoaXMgYmxvY2sgd2lsbCBuZXZlciBzZXJ2ZSBhcyBhIHBvdGVu
dGlhbCB0YXJnZXQKICAgICAgICAgICAgIC8vIGluIHRoZSBsaW5rZXIncyBiaW5hcnkgc2VhcmNo
LgogICAgICAgICAgICAgbGFzdEJsb2NrLT5ieXRlY29kZUJlZ2luID0gbV9jdXJyZW50SW5kZXg7
Ci0gICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nr
cy5hcHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEpKTsKKyAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmFw
cGVuZChVbmxpbmtlZEJsb2NrKG1fZ3JhcGgubGFzdEJsb2NrKCkpKTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS5n
ZXQoKTsKLQorICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgubGFzdEJsb2NrKCk7Cisg
ICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0Yo
IkRvbmUgaW5saW5pbmcgZXhlY3V0YWJsZSAlcCwgY29udGludWluZyBjb2RlIGdlbmVyYXRpb24g
YXQgZXBpbG9ndWUuXG4iLCBleGVjdXRhYmxlKTsKICNlbmRpZgpAQCAtMTM3OCwzMiArMTM3OCwz
NSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gSWYg
d2UgZ2V0IHRvIHRoaXMgcG9pbnQgdGhlbiBhbGwgYmxvY2tzIG11c3QgZW5kIGluIHNvbWUgc29y
dCBvZiB0ZXJtaW5hbHMuCiAgICAgQVNTRVJUKGxhc3RCbG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFs
KCkpOwogICAgIAorCisgICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgYmFzaWMgYmxvY2sgZm9y
IHRoZSBjb250aW51YXRpb24gYXQgdGhlIGNhbGxlci4KKyAgICBSZWZQdHI8QmFzaWNCbG9jaz4g
YmxvY2sgPSBhZG9wdFJlZihuZXcgQmFzaWNCbG9jayhuZXh0T2Zmc2V0LCBtX251bUFyZ3VtZW50
cywgbV9udW1Mb2NhbHMpKTsKKworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICBk
YXRhTG9nRigiQ3JlYXRpbmcgaW5saW5lIGVwaWxvZ3VlIGJhc2ljIGJsb2NrICVwLCAjJXp1IGZv
ciAlcCBiYyMldSBhdCBpbmxpbmUgZGVwdGggJXUuXG4iLCBibG9jay5nZXQoKSwgbV9ncmFwaC5u
dW1CbG9ja3MoKSwgbV9pbmxpbmVTdGFja1RvcC0+ZXhlY3V0YWJsZSgpLCBtX2N1cnJlbnRJbmRl
eCwgQ29kZU9yaWdpbjo6aW5saW5lRGVwdGhGb3JDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKCkp
KTsKKyNlbmRpZgorCiAgICAgLy8gTGluayB0aGUgZWFybHkgcmV0dXJucyB0byB0aGUgYmFzaWMg
YmxvY2sgd2UncmUgYWJvdXQgdG8gY3JlYXRlLgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IGlmICghaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzW2ldLm1fbmVlZHNFYXJseVJl
dHVybkxpbmtpbmcpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2lubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nr
c1tpXS5tX2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGlu
bGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX2Jsb2NrOwogICAgICAgICBBU1NF
UlQoIWJsb2NrLT5pc0xpbmtlZCk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+bGFzdCgp
OwogICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBKdW1wKTsKLSAgICAgICAgQVNTRVJUKG5v
ZGUtPnRha2VuQmxvY2tJbmRleCgpID09IE5vQmxvY2spOwotICAgICAgICBub2RlLT5zZXRUYWtl
bkJsb2NrSW5kZXgobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkpOworICAgICAgICBBU1NFUlQobm9k
ZS0+dGFrZW5CbG9jaygpID09IDApOworICAgICAgICBub2RlLT5zZXRUYWtlbkJsb2NrKGJsb2Nr
LmdldCgpKTsKICAgICAgICAgaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzW2ldLm1f
bmVlZHNFYXJseVJldHVybkxpbmtpbmcgPSBmYWxzZTsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAg
ICAgICAgIGJsb2NrLT5pc0xpbmtlZCA9IHRydWU7CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAg
Ly8gTmVlZCB0byBjcmVhdGUgYSBuZXcgYmFzaWMgYmxvY2sgZm9yIHRoZSBjb250aW51YXRpb24g
YXQgdGhlIGNhbGxlci4KLSAgICBPd25QdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFB0cihu
ZXcgQmFzaWNCbG9jayhuZXh0T2Zmc2V0LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMpKTsK
LSNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0YUxvZ0YoIkNyZWF0aW5nIGlu
bGluZSBlcGlsb2d1ZSBiYXNpYyBibG9jayAlcCwgIyV6dSBmb3IgJXAgYmMjJXUgYXQgaW5saW5l
IGRlcHRoICV1LlxuIiwgYmxvY2suZ2V0KCksIG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpLCBtX2lu
bGluZVN0YWNrVG9wLT5leGVjdXRhYmxlKCksIG1fY3VycmVudEluZGV4LCBDb2RlT3JpZ2luOjpp
bmxpbmVEZXB0aEZvckNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUoKSkpOwotI2VuZGlmCiAgICAg
bV9jdXJyZW50QmxvY2sgPSBibG9jay5nZXQoKTsKLSAgICBBU1NFUlQobV9pbmxpbmVTdGFja1Rv
cC0+bV9jYWxsZXItPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5pc0VtcHR5KCkgfHwgbV9ncmFwaC5t
X2Jsb2Nrc1ttX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRz
Lmxhc3QoKV0tPmJ5dGVjb2RlQmVnaW4gPCBuZXh0T2Zmc2V0KTsKLSAgICBtX2lubGluZVN0YWNr
VG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5hcHBlbmQoVW5saW5rZWRCbG9jayhtX2dy
YXBoLm1fYmxvY2tzLnNpemUoKSkpOwotICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5t
X2Jsb2NrTGlua2luZ1RhcmdldHMuYXBwZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKLSAg
ICBtX2dyYXBoLm1fYmxvY2tzLmFwcGVuZChibG9jay5yZWxlYXNlKCkpOworICAgIEFTU0VSVCht
X2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlzRW1wdHko
KSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmxh
c3QoKS0+Ynl0ZWNvZGVCZWdpbiA8IG5leHRPZmZzZXQpOworICAgIG1faW5saW5lU3RhY2tUb3At
Pm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmFwcGVuZChVbmxpbmtlZEJsb2NrKGJsb2NrLmdl
dCgpKSk7CisgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fYmxvY2tMaW5raW5nVGFy
Z2V0cy5hcHBlbmQoYmxvY2suZ2V0KCkpOworICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soYmxvY2sp
OwogICAgIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICAKICAgICAvLyBBdCB0aGlzIHBvaW50
IHdlIHJldHVybiBhbmQgY29udGludWUgdG8gZ2VuZXJhdGUgY29kZSBmb3IgdGhlIGNhbGxlciwg
YnV0CkBAIC0xNzUzLDcgKzE3NTYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgLy8gSWYgd2UgYXJlIHRoZSBmaXJzdCBiYXNpYyBibG9jaywgaW50cm9k
dWNlIG1hcmtlcnMgZm9yIGFyZ3VtZW50cy4gVGhpcyBhbGxvd3MKICAgICAvLyB1cyB0byB0cmFj
ayBpZiBhIHVzZSBvZiBhbiBhcmd1bWVudCBtYXkgdXNlIHRoZSBhY3R1YWwgYXJndW1lbnQgcGFz
c2VkLCBhcwogICAgIC8vIG9wcG9zZWQgdG8gdXNpbmcgYSB2YWx1ZSB3ZSBzZXQgZXhwbGljaXRs
eS4KLSAgICBpZiAobV9jdXJyZW50QmxvY2sgPT0gbV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKSAm
JiAhaW5saW5lQ2FsbEZyYW1lKCkpIHsKKyAgICBpZiAobV9jdXJyZW50QmxvY2sgPT0gbV9ncmFw
aC5ibG9jaygwKSAmJiAhaW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAgICAgbV9ncmFwaC5tX2Fy
Z3VtZW50cy5yZXNpemUobV9udW1Bcmd1bWVudHMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX251bUFyZ3VtZW50czsgKythcmd1bWVudCkgewogICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNz
RGF0YSgKQEAgLTI3NzMsNyArMjc3Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBtX2N1cnJlbnRJ
bmRleCArIHRhYmxlLmJyYW5jaE9mZnNldHNbaV07CiAgICAgICAgICAgICAgICAgaWYgKHRhcmdl
dCA9PSBkYXRhLmZhbGxUaHJvdWdoKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKGpzTnVtYmVyKHRhYmxl
Lm1pbiArIGkpLCB0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChT
d2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJbmRleChqc051bWJlcih0YWJsZS5taW4gKyBpKSwgdGFy
Z2V0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2dyYXBoLm1fc3dpdGNoRGF0YS5h
cHBlbmQoZGF0YSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZtX2dy
YXBoLm1fc3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCkpOwpAQCAtMjc5Myw3ICsyNzk2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gZGF0YS5mYWxsVGhy
b3VnaCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZGF0
YS5jYXNlcy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIFN3aXRjaENhc2UoTGF6eUpTVmFs
dWU6OnNpbmdsZUNoYXJhY3RlclN0cmluZyh0YWJsZS5taW4gKyBpKSwgdGFyZ2V0KSk7CisgICAg
ICAgICAgICAgICAgICAgIFN3aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KExhenlKU1ZhbHVl
OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodGFibGUubWluICsgaSksIHRhcmdldCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgbV9ncmFwaC5tX3N3aXRjaERhdGEuYXBwZW5kKGRhdGEpOwog
ICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmbV9ncmFwaC5tX3N3aXRjaERh
dGEubGFzdCgpKSwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKQEAgLTI4
MTMsNyArMjgxNiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRocm91Z2gpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5k
KAotICAgICAgICAgICAgICAgICAgICBTd2l0Y2hDYXNlKExhenlKU1ZhbHVlOjprbm93blN0cmlu
Z0ltcGwoaXRlci0+a2V5LmdldCgpKSwgdGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgICAgIFN3
aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KExhenlKU1ZhbHVlOjprbm93blN0cmluZ0ltcGwo
aXRlci0+a2V5LmdldCgpKSwgdGFyZ2V0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBt
X2dyYXBoLm1fc3dpdGNoRGF0YS5hcHBlbmQoZGF0YSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBo
KFN3aXRjaCwgT3BJbmZvKCZtX2dyYXBoLm1fc3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwpAQCAtMjgyOCwxMyArMjgzMSwxMyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9kaWRSZXR1cm4gPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmICht
X2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBJZiB3ZSdyZSByZXR1cm5pbmcgZnJvbSB0aGUgZmlyc3QgYmxvY2ssIHRo
ZW4gd2UncmUgZG9uZSBwYXJzaW5nLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxp
bmVTdGFja1RvcC0+bV9jYWxsc2l0ZUJsb2NrSGVhZCA9PSBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KSAtIDEpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9j
YWxsc2l0ZUJsb2NrSGVhZCA9PSBtX2dyYXBoLmxhc3RCbG9jaygpKTsKICAgICAgICAgICAgICAg
ICAgICAgc2hvdWxkQ29udGludWVQYXJzaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAg
IExBU1RfT1BDT0RFKG9wX3JldCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgaW5saW5pbmcgY3JlYXRlZCBibG9ja3MsIGFuZCB3ZSdyZSBkb2lu
ZyBhIHJldHVybiwgdGhlbiB3ZSBuZWVkIHNvbWUKICAgICAgICAgICAgICAgICAgICAgLy8gc3Bl
Y2lhbCBsaW5raW5nLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1Rv
cC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4ID09IG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNr
VG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrSW5kZXggPT0gbV9ncmFwaC5sYXN0
QmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5r
ZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNOb3JtYWxMaW5raW5nID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5H
VEgob3BfcmV0KSAhPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZGlkRWFybHlSZXR1cm4pIHsKQEAgLTMx
NjIsNyArMzE2NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICB9CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayhCYXNpY0Jsb2NrKiBi
bG9jaywgVmVjdG9yPEJsb2NrSW5kZXg+JiBwb3NzaWJsZVRhcmdldHMpCit2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxCYXNpY0Jsb2NrKj4m
IHBvc3NpYmxlVGFyZ2V0cykKIHsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0xpbmtlZCk7CiAgICAg
QVNTRVJUKCFibG9jay0+aXNFbXB0eSgpKTsKQEAgLTMxNzEsMjQgKzMxNzQsMjQgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKEJhc2ljQmxvYwogICAgIAogICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgIGNhc2UgSnVtcDoKLSAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9ja0lu
ZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywg
bm9kZS0+dGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOworICAgICAgICBub2Rl
LT5zZXRUYWtlbkJsb2NrKGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBu
b2RlLT50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CiAjaWYgREZHX0VOQUJM
RShERUJVR19WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiTGlua2VkIGJhc2ljIGJsb2NrICVw
IHRvICVwLCAjJXUuXG4iLCBibG9jaywgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLT50YWtlbkJsb2Nr
SW5kZXgoKV0uZ2V0KCksIG5vZGUtPnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0YUxv
Z0YoIkxpbmtlZCBiYXNpYyBibG9jayAlcCB0byAlcCwgIyV1LlxuIiwgYmxvY2ssIG5vZGUtPnRh
a2VuQmxvY2soKSwgbm9kZS0+dGFrZW5CbG9jaygpLT5pbmRleCk7CiAjZW5kaWYKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQnJhbmNoOgotICAgICAgICBub2RlLT5zZXRUYWtl
bkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVU
YXJnZXRzLCBub2RlLT50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7Ci0gICAg
ICAgIG5vZGUtPnNldE5vdFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPm5vdFRha2VuQnl0ZWNvZGVPZmZzZXRE
dXJpbmdQYXJzaW5nKCkpKTsKKyAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9jayhibG9ja0ZvckJ5
dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+dGFrZW5CeXRlY29kZU9mZnNldER1
cmluZ1BhcnNpbmcoKSkpOworICAgICAgICBub2RlLT5zZXROb3RUYWtlbkJsb2NrKGJsb2NrRm9y
Qnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT5ub3RUYWtlbkJ5dGVjb2RlT2Zm
c2V0RHVyaW5nUGFyc2luZygpKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAg
ICAgICBkYXRhTG9nRigiTGlua2VkIGJhc2ljIGJsb2NrICVwIHRvICVwLCAjJXUgYW5kICVwLCAj
JXUuXG4iLCBibG9jaywgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLT50YWtlbkJsb2NrSW5kZXgoKV0u
Z2V0KCksIG5vZGUtPnRha2VuQmxvY2tJbmRleCgpLCBtX2dyYXBoLm1fYmxvY2tzW25vZGUtPm5v
dFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSwgbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCkpOwor
ICAgICAgICBkYXRhTG9nRigiTGlua2VkIGJhc2ljIGJsb2NrICVwIHRvICVwLCAjJXUgYW5kICVw
LCAjJXUuXG4iLCBibG9jaywgbm9kZS0+dGFrZW5CbG9jaygpLCBub2RlLT50YWtlbkJsb2NrKCkt
PmluZGV4LCBub2RlLT5ub3RUYWtlbkJsb2NrKCksIG5vZGUtPm5vdFRha2VuQmxvY2soKS0+aW5k
ZXgpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFN3aXRjaDoK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+c3dpdGNoRGF0YSgpLT5jYXNlcy5zaXpl
KCk7IGktLTspCi0gICAgICAgICAgICBub2RlLT5zd2l0Y2hEYXRhKCktPmNhc2VzW2ldLnRhcmdl
dCA9IG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywg
bm9kZS0+c3dpdGNoRGF0YSgpLT5jYXNlc1tpXS50YXJnZXQpOwotICAgICAgICBub2RlLT5zd2l0
Y2hEYXRhKCktPmZhbGxUaHJvdWdoID0gbV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZz
ZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT5zd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoKTsKKyAg
ICAgICAgICAgIG5vZGUtPnN3aXRjaERhdGEoKS0+Y2FzZXNbaV0udGFyZ2V0ID0gYmxvY2tGb3JC
eXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnN3aXRjaERhdGEoKS0+Y2FzZXNb
aV0udGFyZ2V0Qnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgbm9kZS0+c3dpdGNoRGF0YSgpLT5m
YWxsVGhyb3VnaCA9IGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2Rl
LT5zd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoQnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CkBAIC0zMjAzLDExICszMjA2LDExIEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayhCYXNpY0Jsb2MKICNlbmRpZgogfQogCi12b2lkIEJ5
dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRC
bG9ja3MsIFZlY3RvcjxCbG9ja0luZGV4PiYgcG9zc2libGVUYXJnZXRzKQordm9pZCBCeXRlQ29k
ZVBhcnNlcjo6bGlua0Jsb2NrcyhWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHVubGlua2VkQmxvY2tz
LCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpCiB7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB1bmxpbmtlZEJsb2Nrcy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAo
dW5saW5rZWRCbG9ja3NbaV0ubV9uZWVkc05vcm1hbExpbmtpbmcpIHsKLSAgICAgICAgICAgIGxp
bmtCbG9jayhtX2dyYXBoLm1fYmxvY2tzW3VubGlua2VkQmxvY2tzW2ldLm1fYmxvY2tJbmRleF0u
Z2V0KCksIHBvc3NpYmxlVGFyZ2V0cyk7CisgICAgICAgICAgICBsaW5rQmxvY2sodW5saW5rZWRC
bG9ja3NbaV0ubV9ibG9jaywgcG9zc2libGVUYXJnZXRzKTsKICAgICAgICAgICAgIHVubGlua2Vk
QmxvY2tzW2ldLm1fbmVlZHNOb3JtYWxMaW5raW5nID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9
CkBAIC0zMjM1LDcgKzMyMzgsNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6
SW5saW5lCiAgICAgQnl0ZUNvZGVQYXJzZXIqIGJ5dGVDb2RlUGFyc2VyLAogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLAogICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywKLSAgICBCbG9ja0lu
ZGV4IGNhbGxzaXRlQmxvY2tIZWFkLAorICAgIEJhc2ljQmxvY2sqIGNhbGxzaXRlQmxvY2tIZWFk
LAogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSwgLy8gTnVsbCBpZiB0aGlzIGlzIGEgY2xvc3VyZSBj
YWxsLgogICAgIFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLAogICAgIFZpcnR1YWxSZWdp
c3RlciBpbmxpbmVDYWxsRnJhbWVTdGFydCwKQEAgLTM0NDYsMjcgKzM0NDksMjcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgICAgICBkbyB7CiAgICAgICAgICAg
ICBpZiAoIW1fY3VycmVudEJsb2NrKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2Ug
Y2FuIHVzZSB0aGUgbGFzdCBibG9jay4KLSAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgubV9i
bG9ja3MuaXNFbXB0eSgpICYmIG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLT5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5udW1CbG9ja3MoKSAmJiBtX2dyYXBoLmxhc3RC
bG9jaygpLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJl
IGEgYmxvY2sgYmVsb25naW5nIHRvIHVzLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9p
bmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4ID09IG1f
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCht
X2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrSW5kZXggPT0g
bV9ncmFwaC5sYXN0QmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIC8vIEVpdGhlciB0aGUg
YmxvY2sgaXMgbGlua2FibGUgb3IgaXQgaXNuJ3QuIElmIGl0J3MgbGlua2FibGUgdGhlbiBpdCdz
IHRoZSBsYXN0CiAgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrIGluIHRoZSBibG9ja0xpbmtp
bmdUYXJnZXRzIGxpc3QuIElmIGl0J3Mgbm90IHRoZW4gdGhlIGxhc3QgYmxvY2sgd2lsbAogICAg
ICAgICAgICAgICAgICAgICAvLyBoYXZlIGEgbG93ZXIgYnl0ZWNvZGUgaW5kZXggdGhhdCB0aGUg
b25lIHdlJ3JlIGFib3V0IHRvIGdpdmUgdG8gdGhpcyBibG9jay4KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5pc0VtcHR5KCkg
fHwgbV9ncmFwaC5tX2Jsb2Nrc1ttX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1Rhcmdl
dHMubGFzdCgpXS0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2N1cnJlbnRJbmRleCkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlz
RW1wdHkoKSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMubGFzdCgp
LT5ieXRlY29kZUJlZ2luICE9IG1fY3VycmVudEluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBNYWtlIHRoZSBibG9jayBsaW5rYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuaXNFbXB0eSgp
IHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJn
ZXRzLmxhc3QoKV0tPmJ5dGVjb2RlQmVnaW4gPCBtX2N1cnJlbnRJbmRleCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuYXBw
ZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlzRW1wdHko
KSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMubGFzdCgpLT5ieXRl
Y29kZUJlZ2luIDwgbV9jdXJyZW50SW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmFwcGVuZChtX2dyYXBoLmxhc3RC
bG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAvLyBD
aGFuZ2UgaXRzIGJ5dGVjb2RlIGJlZ2luIGFuZCBjb250aW51ZS4KLSAgICAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS5nZXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLmxhc3RCbG9jaygpOwogI2lm
IERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0Yo
IlJlYXNjcmliaW5nIGJ5dGVjb2RlIGluZGV4IG9mIGJsb2NrICVwIGZyb20gYmMjJXUgdG8gYmMj
JXUgKHBlZXBob2xlIGNhc2UpLlxuIiwgbV9jdXJyZW50QmxvY2ssIG1fY3VycmVudEJsb2NrLT5i
eXRlY29kZUJlZ2luLCBtX2N1cnJlbnRJbmRleCk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmJ5dGVjb2RlQmVnaW4gPSBtX2N1cnJlbnRJbmRleDsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBPd25QdHI8QmFzaWNCbG9j
az4gYmxvY2sgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jayhtX2N1cnJlbnRJbmRleCwgbV9udW1B
cmd1bWVudHMsIG1fbnVtTG9jYWxzKSk7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxCYXNp
Y0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKG5ldyBCYXNpY0Jsb2NrKG1fY3VycmVudEluZGV4LCBt
X251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJP
U0UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDcmVhdGluZyBiYXNpYyBibG9jayAl
cCwgIyV6dSBmb3IgJXAgYmMjJXUgYXQgaW5saW5lIGRlcHRoICV1LlxuIiwgYmxvY2suZ2V0KCks
IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpLCBtX2lubGluZVN0YWNrVG9wLT5leGVjdXRhYmxlKCks
IG1fY3VycmVudEluZGV4LCBDb2RlT3JpZ2luOjppbmxpbmVEZXB0aEZvckNhbGxGcmFtZShpbmxp
bmVDYWxsRnJhbWUoKSkpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ3JlYXRpbmcg
YmFzaWMgYmxvY2sgJXAsICMlenUgZm9yICVwIGJjIyV1IGF0IGlubGluZSBkZXB0aCAldS5cbiIs
IGJsb2NrLmdldCgpLCBtX2dyYXBoLm51bUJsb2NrcygpLCBtX2lubGluZVN0YWNrVG9wLT5leGVj
dXRhYmxlKCksIG1fY3VycmVudEluZGV4LCBDb2RlT3JpZ2luOjppbmxpbmVEZXB0aEZvckNhbGxG
cmFtZShpbmxpbmVDYWxsRnJhbWUoKSkpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrID0gYmxvY2suZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
YXNzZXJ0aW9uIGNoZWNrcyB0d28gdGhpbmdzOgpAQCAtMzQ3NSwxMyArMzQ3OCwxMyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiAgICAgICAgICAgICAgICAgICAgIC8v
IDIpIElmIHRoZSBieXRlY29kZUJlZ2luIGlzIGVxdWFsIHRvIHRoZSBjdXJyZW50SW5kZXgsIHRo
ZW4gd2UgZmFpbGVkIHRvIGRvCiAgICAgICAgICAgICAgICAgICAgIC8vICAgIGEgcGVlcGhvbGUg
Y29hbGVzY2luZyBvZiB0aGlzIGJsb2NrIGluIHRoZSBpZiBzdGF0ZW1lbnQgYWJvdmUuIFNvLCB3
ZSdyZQogICAgICAgICAgICAgICAgICAgICAvLyAgICBnZW5lcmF0aW5nIHN1Ym9wdGltYWwgY29k
ZSBhbmQgbGVhdmluZyBtb3JlIHdvcmsgZm9yIHRoZSBDRkcgc2ltcGxpZmllci4KLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuaXNF
bXB0eSgpIHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJs
b2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4XS0+Ynl0ZWNvZGVCZWdpbiA8IG1fY3VycmVudEluZGV4
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nr
cy5hcHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSkpOwotICAgICAg
ICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuYXBw
ZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpIHx8IG1faW5saW5l
U3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLT5ieXRlY29kZUJlZ2luIDwgbV9jdXJy
ZW50SW5kZXgpOworICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlu
a2VkQmxvY2tzLmFwcGVuZChVbmxpbmtlZEJsb2NrKGJsb2NrLmdldCgpKSk7CisgICAgICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5hcHBlbmQo
YmxvY2suZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZmlyc3QgYmxvY2sgaXMg
ZGVmaW5pdGVseSBhbiBPU1IgdGFyZ2V0LgotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgubnVt
QmxvY2tzKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+aXNPU1JUYXJnZXQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzLmFwcGVuZChibG9jay5y
ZWxlYXNlKCkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZEJsb2NrKGJsb2Nr
KTsKICAgICAgICAgICAgICAgICAgICAgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTM1NDAsMTEgKzM1NDMsMTEgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkg
eworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
CiAgICAgICAgIEFTU0VSVChibG9jayk7CiAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxl
KSB7Ci0gICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmNsZWFyKCk7Cisg
ICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9jayhibG9jayk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTUgKzc5LDE0IEBA
IHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgcGVyZm9ybUJsb2NrQ0ZB
KEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB2b2lkIHBlcmZvcm1CbG9ja0NGQShCYXNpY0Js
b2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgaWYgKCFibG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9n
RigiICAgQmxvY2sgIyV1IChiYyMldSk6XG4iLCBibG9ja0luZGV4LCBibG9jay0+Ynl0ZWNvZGVC
ZWdpbik7CisgICAgICAgICAgICBkYXRhTG9nKCIgICBCbG9jayAiLCAqYmxvY2ssICI6XG4iKTsK
ICAgICAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwogICAgICAgICBpZiAodmVy
Ym9zZSkgewogICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIGhlYWQgdmFyczogIik7CkBAIC0x
MjcsOCArMTI2LDggQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICBkYXRhTG9nRigiQ0ZBIFsldV1cbiIsICsrbV9jb3VudCk7CiAgICAgICAgIAotICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
OyArK2Jsb2NrKQotICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ0ZBKGJsb2NrKTsKKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytibG9ja0luZGV4KQorICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ0ZBKG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCkpOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
RkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsOCArNTQsOCBA
QCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBkbyB7CiAgICAgICAgICAgICBpbm5lckNoYW5n
ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAg
ICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJ
bmRleF0uZ2V0KCk7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
CiAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CkBAIC02Mywy
NyArNjMsMjQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHN3aXRjaCAoYmxvY2stPmxhc3Qo
KS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgSnVtcDogewogICAgICAgICAgICAgICAg
ICAgICAvLyBTdWNjZXNzb3Igd2l0aCBvbmUgcHJlZGVjZXNzb3IgLT4gbWVyZ2UuCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2Nr
LCAwKV0tPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCld
LT5tX3ByZWRlY2Vzc29yc1swXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IGJs
b2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnN1Y2Nlc3NvcigwKS0+
cHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoYmxvY2stPnN1Y2Nlc3NvcigwKS0+cHJlZGVjZXNzb3JzWzBdID09IGJsb2NrKTsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nRigiQ0ZHU2ltcGxpZnk6IEp1bXAgbWVyZ2Ugb24gQmxvY2sgIyV1IHRvIEJs
b2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgs
IG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJDRkdTaW1wbGlmeTogSnVtcCBtZXJnZSBvbiBCbG9jayAiLCAqYmxvY2ssICIgdG8g
QmxvY2sgIiwgKmJsb2NrLT5zdWNjZXNzb3IoMCksICIuXG4iKTsKICNlbmRpZgogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5k
ZXRocmVhZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRl
eCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApLCBub0Jsb2NrcygpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1lcmdlQmxvY2tzKGJsb2NrLCBibG9jay0+c3VjY2Vzc29yKDApLCBub0Js
b2NrcygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hh
bmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiTm90IGp1bXAgbWVyZ2luZyBv
biBCbG9jayAjJXUgdG8gQmxvY2sgIyV1IGJlY2F1c2UgcHJlZGVjZXNzb3JzID0gIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3Io
YmxvY2ssIDApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKV0tPm1fcHJl
ZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJDRkdTaW1wbGlmeTogTm90IGp1bXAgbWVyZ2luZyBvbiBCbG9jayAiLCAqYmxvY2ssICIgdG8g
QmxvY2sgIiwgKmJsb2NrLT5zdWNjZXNzb3IoMCksICIgYmVjYXVzZSBwcmVkZWNlc3NvcnMgPSAi
LCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxv
Y2stPnN1Y2Nlc3NvcigwKS0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2dGKCIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIj
JXUiLCBtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKV0tPm1fcHJl
ZGVjZXNzb3JzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCpibG9j
ay0+c3VjY2Vzc29yKDApLT5wcmVkZWNlc3NvcnNbaV0pOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwogI2VuZGlmCkBA
IC0xMDMsNDUgKzEwMCw0MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIEJyYW5j
aCBvbiBjb25zdGFudCAtPiBqZXR0aXNvbiB0aGUgbm90LXRha2VuIGJsb2NrIGFuZCBtZXJnZS4K
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzS25vd25EaXJlY3Rpb24oYmxvY2stPmNmYUJyYW5j
aERpcmVjdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29uZGl0aW9uID0g
YnJhbmNoQ29uZGl0aW9uKGJsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzWwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9u
KGJsb2NrLCBjb25kaXRpb24pXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
YXJnZXRCbG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrID0gYmxvY2stPnN1Y2Nlc3NvckZvckNv
bmRpdGlvbihjb25kaXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
amV0dGlzb25lZEJsb2NrID0gYmxvY2stPnN1Y2Nlc3NvckZvckNvbmRpdGlvbighY29uZGl0aW9u
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRCbG9jay0+cHJlZGVjZXNzb3Jz
LnNpemUoKSA9PSAxKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDRkdTaW1wbGlmeTogS25v
d24gY29uZGl0aW9uICglcykgYnJhbmNoIG1lcmdlIG9uIEJsb2NrICMldSB0byBCbG9jayAjJXUs
IGpldHRpc29uaW5nIEJsb2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25kaXRpb24gPyAidHJ1ZSIgOiAiZmFsc2UiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRp
b24oYmxvY2ssIGNvbmRpdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgIWNvbmRpdGlvbikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJDRkdTaW1wbGlmeTogS25vd24gY29uZGl0aW9uICgiLCBjb25kaXRpb24sICIp
IGJyYW5jaCBtZXJnZSAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24gQmxv
Y2sgIiwgKmJsb2NrLCAiIHRvIEJsb2NrICIsICp0YXJnZXRCbG9jaywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIiwgamV0dGlzb25pbmcgQmxvY2sgIiwgKmpldHRpc29uZWRCbG9j
aywgIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJl
bWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJsb2NrSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24pLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVCbG9jayhtX2dyYXBoLnN1Y2Nlc3NvckZvckNv
bmRpdGlvbihibG9jaywgIWNvbmRpdGlvbikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtZXJnZUJsb2NrcyhibG9jaywgdGFyZ2V0QmxvY2ssIGpldHRpc29uZWRCbG9jayk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ0ZH
U2ltcGxpZnk6IEtub3duIGNvbmRpdGlvbiAoJXMpIGJyYW5jaC0+anVtcCBjb252ZXJzaW9uIG9u
IEJsb2NrICMldSB0byBCbG9jayAjJXUsIGpldHRpc29uaW5nIEJsb2NrICMldS5cbiIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPyAidHJ1ZSIgOiAiZmFs
c2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9n
cmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbiksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihi
bG9jaywgIWNvbmRpdGlvbikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDRkdTaW1wbGlmeTogS25vd24gY29u
ZGl0aW9uICgiLCBjb25kaXRpb24sICIpICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJicmFuY2gtPmp1bXAgY29udmVyc2lvbiBvbiBCbG9jayAiLCAqYmxvY2ssICIgdG8gQmxv
Y2sgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QmxvY2ssICIsIGpl
dHRpc29uaW5nIEJsb2NrICIsIGpldHRpc29uZWRCbG9jaywgIi5cbiIpOwogI2VuZGlmCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
QmxvY2tJbmRleCB0YWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlv
bihibG9jaywgY29uZGl0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0lu
ZGV4IG5vdFRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJs
b2NrLCAhY29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luID0g
YmxvY2stPmxhc3QoKS0+Y29kZU9yaWdpbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
bG9jay0+bGFzdCgpLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGJsb2NrLT5sYXN0KCktPnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2Nr
KGJsb2NrSW5kZXgsIG5vdFRha2VuQmxvY2tJbmRleCwgYm91bmRhcnlDb2RlT3JpZ2luKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2NrKGJsb2NrLCBqZXR0aXNvbmVk
QmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIGJvdW5kYXJ5Q29k
ZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRha2VuQmxv
Y2tJbmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odGFyZ2V0
QmxvY2spKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTE3Nyw3ICsxNjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBjYXNlcyBvdGhlciB0aGFuIGRlZmF1bHQgdGhlbiB0
aGlzIHR1cm5zCiAgICAgICAgICAgICAgICAgICAgIC8vIGludG8gYSBqdW1wLgogICAgICAgICAg
ICAgICAgICAgICBpZiAoZGF0YS0+Y2FzZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb252ZXJ0VG9KdW1wKGJsb2NrSW5kZXgsIGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0p1bXAoYmxvY2ssIGRhdGEtPmZhbGxUaHJv
dWdoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdl
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtMTg2LDQ3ICsxNzgsNDQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICBpZiAoYmxvY2stPmxhc3QoKS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50
KGJsb2NrLT5sYXN0KCktPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBUcmlTdGF0ZSBmb3VuZCA9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBCbG9ja0luZGV4IHRhcmdldEJsb2NrSW5kZXggPSBOb0Jsb2NrOworICAgICAgICAgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2sgPSAwOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6ZSgpOyBmb3VuZCA9PSBGYWxz
ZVRyaVN0YXRlICYmIGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9
IGRhdGEtPmNhc2VzW2ldLnZhbHVlLnN0cmljdEVxdWFsKHZhbHVlKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZm91bmQgPT0gVHJ1ZVRyaVN0YXRlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0YXJnZXRCbG9ja0luZGV4ID0gZGF0YS0+Y2FzZXNbaV0udGFyZ2V0
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCbG9jayA9IGRhdGEtPmNh
c2VzW2ldLnRhcmdldDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kID09IE1peGVkVHJp
U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZm91bmQgPT0gRmFsc2VUcmlTdGF0ZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0YXJnZXRCbG9ja0luZGV4ID0gZGF0YS0+ZmFsbFRocm91Z2g7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQodGFyZ2V0QmxvY2tJbmRleCAhPSBOb0Jsb2NrKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCbG9jayA9IGRhdGEtPmZhbGxUaHJvdWdo
OworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRhcmdldEJsb2NrKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEJsb2NrSW5k
ZXgsIDE+IGpldHRpc29uZWRCbG9ja3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3NvcnMoYmxvY2spOyBpLS07KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCBqZXR0aXNvbmVkQmxvY2tJbmRleCA9IG1f
Z3JhcGguc3VjY2Vzc29yKGJsb2NrLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoamV0dGlzb25lZEJsb2NrSW5kZXggIT0gdGFyZ2V0QmxvY2tJbmRleCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgamV0dGlzb25lZEJsb2Nrcy5hcHBlbmQoamV0dGlzb25lZEJs
b2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAx
PiBqZXR0aXNvbmVkQmxvY2tzOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jayA9IGJsb2NrLT5zdWNjZXNzb3Io
aSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpldHRpc29uZWRCbG9jayAhPSB0
YXJnZXRCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamV0dGlzb25lZEJs
b2Nrcy5hcHBlbmQoamV0dGlzb25lZEJsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNC
bG9jayogdGFyZ2V0QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3RhcmdldEJsb2NrSW5kZXhdLmdl
dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodGFyZ2V0QmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGFyZ2V0QmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCkgPT0gMSkg
ewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiQ0ZHU2ltcGxpZnk6IEtub3duIGNvbnN0YW50ICgiLCB2YWx1ZSwgIikgc3dpdGNoIG1lcmdl
IG9uICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCbG9jayAjIiwgYmxvY2tJ
bmRleCwgIiB0byBCbG9jayAjIiwgdGFyZ2V0QmxvY2tJbmRleCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIi5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
QmxvY2sgIiwgKmJsb2NrLCAiIHRvIEJsb2NrICIsICp0YXJnZXRCbG9jaywgIi5cbiIpOwogI2Vu
ZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRl
dGhyZWFkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgdGFyZ2V0QmxvY2tJbmRleCwgamV0
dGlzb25lZEJsb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3Mo
YmxvY2ssIHRhcmdldEJsb2NrLCBqZXR0aXNvbmVkQmxvY2tzKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJDRkdTaW1wbGlmeTogS25vd24gY29uc3RhbnQgKCIsIHZhbHVlLCAi
KSBzd2l0Y2gtPmp1bXAgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29udmVy
c2lvbiBvbiBCbG9jayAjIiwgYmxvY2tJbmRleCwgIiB0byBCbG9jayAjIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QmxvY2tJbmRleCwgIi5cbiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiY29udmVyc2lvbiBvbiBCbG9jayAiLCAqYmxvY2ssICIg
dG8gQmxvY2sgIyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0YXJnZXRCbG9j
aywgIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJl
bWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAo
KTsKQEAgLTIzNSw5ICsyMjQsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBibG9jay0+bGFzdCgpLT5jb2RlT3Jp
Z2luOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5sYXN0KCktPmNvbnZlcnRU
b1BoYW50b20oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBqZXR0aXNvbmVkQmxvY2tzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgamV0dGlzb25CbG9jayhibG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tzW2ldLCBi
b3VuZGFyeUNvZGVPcmlnaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0
aXNvbkJsb2NrKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2tzW2ldLCBib3VuZGFyeUNvZGVPcmlnaW4p
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYm91bmRh
cnlDb2RlT3JpZ2luLCBPcEluZm8odGFyZ2V0QmxvY2tJbmRleCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYm91bmRhcnlDb2RlT3Jp
Z2luLCBPcEluZm8odGFyZ2V0QmxvY2spKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI4MywxNCArMjcyLDE0IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBtX2dyYXBoLmludmFsaWRhdGVDRkcoKTsKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAKLSAgICAgICAgICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dy
YXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGtpbGxVbnJlYWNoYWJsZShibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
a2lsbFVucmVhY2hhYmxlKGJsb2NrKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTMwMiwyNSArMjkxLDIzIEBAIHB1YmxpYzoKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgdm9pZCBjb252ZXJ0VG9KdW1wKEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxv
Y2tJbmRleCB0YXJnZXRCbG9ja0luZGV4KQorICAgIHZvaWQgY29udmVydFRvSnVtcChCYXNpY0Js
b2NrKiBibG9jaywgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2spCiAgICAgewotICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAg
ICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1t0YXJnZXRCbG9j
a0luZGV4XS5nZXQoKTsKICAgICAgICAgQVNTRVJUKHRhcmdldEJsb2NrKTsKICAgICAgICAgQVNT
RVJUKHRhcmdldEJsb2NrLT5pc1JlYWNoYWJsZSk7Ci0gICAgICAgIGlmICh0YXJnZXRCbG9jay0+
bV9wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgaWYgKHRhcmdldEJsb2NrLT5w
cmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigKLSAgICAgICAgICAgICAgICAiQ0ZH
U2ltcGxpZnk6IEJyYW5jaC9Td2l0Y2ggdG8gc2FtZSBzdWNjZXNzb3IgbWVyZ2Ugb24gQmxvY2sg
IyV1IHRvIEJsb2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgdGFyZ2V0
QmxvY2tJbmRleCk7CisgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICJDRkdT
aW1wbGlmeTogQnJhbmNoL1N3aXRjaCB0byBzYW1lIHN1Y2Nlc3NvciBtZXJnZSBvbiBCbG9jayAi
LCAqYmxvY2ssCisgICAgICAgICAgICAgICAgIiB0byBCbG9jayAiLCAqdGFyZ2V0QmxvY2ssICIu
XG4iKTsKICNlbmRpZgogICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwotICAgICAgICAg
ICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgdGFyZ2V0QmxvY2tJbmRleCwgbm9CbG9ja3MoKSk7
CisgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9jaywgdGFyZ2V0QmxvY2ssIG5vQmxvY2tzKCkp
OwogICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKAotICAgICAgICAgICAgICAgICJDRkdTaW1wbGlm
eTogQnJhbmNoLT5qdW1wIGNvbnZlcnNpb24gdG8gc2FtZSBzdWNjZXNzb3Igb24gQmxvY2sgIyV1
IHRvIEJsb2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgdGFyZ2V0Qmxv
Y2tJbmRleCk7CisgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICJDRkdTaW1w
bGlmeTogQnJhbmNoLT5qdW1wIGNvbnZlcnNpb24gdG8gc2FtZSBzdWNjZXNzb3Igb24gQmxvY2sg
IiwKKyAgICAgICAgICAgICAgICAqYmxvY2ssICIgdG8gQmxvY2sgIiwgKnRhcmdldEJsb2NrLCAi
LlxuIiwKICNlbmRpZgogICAgICAgICAgICAgTm9kZSogYnJhbmNoID0gYmxvY2stPmxhc3QoKTsK
ICAgICAgICAgICAgIEFTU0VSVChicmFuY2gtPmlzVGVybWluYWwoKSk7CkBAIC0zMzAsMTQgKzMx
NywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBibG9jay0+YXBwZW5k
Tm9kZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYnJhbmNoLT5j
b2RlT3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyh0YXJnZXRCbG9ja0luZGV4KSk7Cisg
ICAgICAgICAgICAgICAgT3BJbmZvKHRhcmdldEJsb2NrKSk7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICB2b2lkIGtpbGxVbnJlYWNoYWJsZShCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgdm9p
ZCBraWxsVW5yZWFjaGFibGUoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAg
ICAgIAogICAgICAgICBBU1NFUlQoYmxvY2spOwogICAgICAgICBBU1NFUlQoIWJsb2NrLT5pc1Jl
YWNoYWJsZSk7CiAgICAgICAgIApAQCAtMzQ2LDcgKzMzMSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQog
ICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5hdChub2RlSW5kZXgp
KTsKICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uY2xlYXIo
KTsKKyAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soYmxvY2spOwogICAgIH0KICAgICAKICAgICB2
b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRp
c29uZWRCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFuZCkKQEAgLTM2MSw0
OSArMzQ2LDQ2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBPcEluZm8obGl2ZW5lc3NOb2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGpldHRpc29uQmxv
Y2soQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4
LCBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbikKKyAgICB2b2lkIGpldHRpc29uQmxvY2so
QmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jaywgQ29kZU9yaWdp
biBib3VuZGFyeUNvZGVPcmlnaW4pCiAgICAgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIEJhc2ljQmxvY2sq
IGpldHRpc29uZWRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlzb25lZEJsb2NrSW5kZXhd
LmdldCgpOwotICAgICAgICAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNv
bmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCiAgICAg
ICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2ssIGJvdW5kYXJ5
Q29kZU9yaWdpbiwgYXJndW1lbnRUb09wZXJhbmQoaSkpOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxz
KCk7ICsraSkKICAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoYmxvY2ssIGpldHRpc29uZWRC
bG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBpKTsKICAgICAgICAgCi0gICAgICAgIGZpeEpldHRp
c29uZWRQcmVkZWNlc3NvcnMoYmxvY2tJbmRleCwgamV0dGlzb25lZEJsb2NrSW5kZXgpOworICAg
ICAgICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2spOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoQmxvY2tJbmRl
eCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4KQorICAgIHZvaWQg
Zml4SmV0dGlzb25lZFByZWRlY2Vzc29ycyhCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayog
amV0dGlzb25lZEJsb2NrKQogICAgIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCJGaXhpbmcgcHJlZGVjZXNzb3JzIGFuZCBwaGlz
IGR1ZSB0byBqZXR0aXNvbiBvZiBCbG9jayAjJXUgZnJvbSBCbG9jayAjJXUuXG4iLAotICAgICAg
ICAgICAgICAgIGpldHRpc29uZWRCbG9ja0luZGV4LCBibG9ja0luZGV4KTsKKyAgICAgICAgZGF0
YUxvZygKKyAgICAgICAgICAgICJGaXhpbmcgcHJlZGVjZXNzb3JzIGFuZCBwaGlzIGR1ZSB0byBq
ZXR0aXNvbiBvZiBCbG9jayAiLCAqamV0dGlzb25lZEJsb2NrLAorICAgICAgICAgICAgIiBmcm9t
IEJsb2NrICIsICpibG9jaywgIi5cbiIsCiAjZW5kaWYKLSAgICAgICAgQmFzaWNCbG9jayogamV0
dGlzb25lZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tqZXR0aXNvbmVkQmxvY2tJbmRleF0uZ2V0
KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPm1f
cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoamV0dGlzb25lZEJs
b2NrLT5tX3ByZWRlY2Vzc29yc1tpXSAhPSBibG9ja0luZGV4KQorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGlmIChqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29yc1tpXSAhPSBi
bG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGpldHRpc29uZWRC
bG9jay0+bV9wcmVkZWNlc3NvcnNbaV0gPSBqZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3Jz
Lmxhc3QoKTsKLSAgICAgICAgICAgIGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnMucmVt
b3ZlTGFzdCgpOworICAgICAgICAgICAgamV0dGlzb25lZEJsb2NrLT5wcmVkZWNlc3NvcnNbaV0g
PSBqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29ycy50YWtlTGFzdCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBWZWN0b3I8QmxvY2tJbmRleCwgMT4gbm9C
bG9ja3MoKQorICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMT4gbm9CbG9ja3MoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIFZlY3RvcjxCbG9ja0luZGV4LCAxPigpOworICAgICAgICByZXR1cm4gVmVj
dG9yPEJhc2ljQmxvY2sqLCAxPigpOwogICAgIH0KICAgICAKLSAgICBWZWN0b3I8QmxvY2tJbmRl
eCwgMT4gb25lQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIFZlY3RvcjxCYXNpY0Js
b2NrKiwgMT4gb25lQmxvY2soQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBWZWN0
b3I8QmxvY2tJbmRleCwgMT4gcmVzdWx0OwotICAgICAgICByZXN1bHQuYXBwZW5kKGJsb2NrSW5k
ZXgpOworICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE+IHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChibG9jayk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgbWVyZ2VCbG9ja3MoCi0gICAgICAgIEJsb2NrSW5kZXggZmlyc3RCbG9ja0luZGV4
LCBCbG9ja0luZGV4IHNlY29uZEJsb2NrSW5kZXgsIFZlY3RvcjxCbG9ja0luZGV4LCAxPiBqZXR0
aXNvbmVkQmxvY2tJbmRpY2VzKQorICAgICAgICBCYXNpY0Jsb2NrKiBmaXJzdEJsb2NrLCBCYXNp
Y0Jsb2NrKiBzZWNvbmRCbG9jaywKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxPiBqZXR0
aXNvbmVkQmxvY2tzKQogICAgIHsKICAgICAgICAgLy8gVGhpcyB3aWxsIGFkZCBhbGwgb2YgdGhl
IG5vZGVzIGluIHNlY29uZEJsb2NrIHRvIGZpcnN0QmxvY2ssIGJ1dCBpbiBzbyBkb2luZwogICAg
ICAgICAvLyBpdCB3aWxsIGFsc28gZW5zdXJlIHRoYXQgYW55IEdldExvY2FscyBmcm9tIHRoZSBz
ZWNvbmQgYmxvY2sgdGhhdCByZWZlciB0bwpAQCAtNDExLDkgKzM5Myw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIC8vIHRoZW4gUGhhbnRvbXMgYXJlIGluc2VydGVkIGZvciBhbnl0aGluZyB0aGF0IHRo
ZSBqZXR0aXNvbmVkQmxvY2sgd291bGQgaGF2ZQogICAgICAgICAvLyBrZXB0IGFsaXZlLgogICAg
ICAgICAKLSAgICAgICAgQmFzaWNCbG9jayogZmlyc3RCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
Zmlyc3RCbG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgQmFzaWNCbG9jayogc2Vjb25kQmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW3NlY29uZEJsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICAKICAg
ICAgICAgLy8gUmVtb3ZlIHRoZSB0ZXJtaW5hbCBvZiBmaXJzdEJsb2NrIHNpbmNlIHdlIGRvbid0
IG5lZWQgaXQgYW55bW9yZS4gV2VsbCwgd2UgZG9uJ3QKICAgICAgICAgLy8gcmVhbGx5IHJlbW92
ZSBpdDsgd2UgYWN0dWFsbHkgdHVybiBpdCBpbnRvIGEgUGhhbnRvbS4KICAgICAgICAgQVNTRVJU
KGZpcnN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKQEAgLTQyMSw4ICs0MDAsOCBAQCBw
cml2YXRlOgogICAgICAgICBmaXJzdEJsb2NrLT5sYXN0KCktPmNvbnZlcnRUb1BoYW50b20oKTsK
ICAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPmxhc3QoKS0+cmVmQ291bnQoKSA9PSAxKTsKICAg
ICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGpldHRpc29uZWRCbG9ja0luZGljZXMu
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW2pldHRpc29uZWRCbG9ja0luZGljZXNbaV1dLmdldCgpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBqZXR0aXNvbmVkQmxvY2tzLnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrID0gamV0dGlzb25lZEJsb2Nr
c1tpXTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gVGltZSB0byBpbnNlcnQgZ2hvc3Rp
ZXMgZm9yIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUga2VwdCBhbGl2ZSBpbiBjYXNlIHdlIE9TUgog
ICAgICAgICAgICAgLy8gZXhpdCBwcmlvciB0byBoaXR0aW5nIHRoZSBmaXJzdEJsb2NrJ3MgdGVy
bWluYWwsIGFuZCBlbmQgdXAgZ29pbmcgZG93biBhCkBAIC00NDcsMjMgKzQyNiwyMyBAQCBwcml2
YXRlOgogICAgICAgICAvLyBwcmVkZWNlc3NvcnMgZWFnZXJseSB0byBlbnN1cmUgdGhhdCB3ZSBr
bm93IHdoYXQgdGhleSBhcmUgaW4gY2FzZSB0aGUgbmV4dCBibG9jayB3ZQogICAgICAgICAvLyBj
b25zaWRlciBpbiB0aGlzIHBoYXNlIHdpc2hlcyB0byBxdWVyeSB0aGUgcHJlZGVjZXNzb3JzIG9m
IG9uZSBvZiB0aGUgYmxvY2tzIHdlCiAgICAgICAgIC8vIGFmZmVjdGVkLgotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3NvcnMoZmlyc3RCbG9jayk7IGktLTspIHsK
LSAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fZ3JhcGgubV9ibG9ja3NbbV9n
cmFwaC5zdWNjZXNzb3IoZmlyc3RCbG9jaywgaSldLmdldCgpOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2op
IHsKLSAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29yc1tqXSA9PSBz
ZWNvbmRCbG9ja0luZGV4KQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPm1fcHJlZGVj
ZXNzb3JzW2pdID0gZmlyc3RCbG9ja0luZGV4OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBm
aXJzdEJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHN1Y2Nlc3NvciA9IGZpcnN0QmxvY2stPnN1Y2Nlc3NvcihpKTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IDA7IGogPCBzdWNjZXNzb3ItPnByZWRlY2Vzc29ycy5zaXplKCk7ICsr
aikgeworICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPnByZWRlY2Vzc29yc1tqXSA9PSBz
ZWNvbmRCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnNb
al0gPSBmaXJzdEJsb2NrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICAvLyBGaXggdGhlIHByZWRlY2Vzc29ycyBvZiBteSBmb3JtZXIgc3VjY2Vzc29ycy4gQWdh
aW4sIHdlJ2QgcmF0aGVyIG5vdCBkbyB0aGlzLCBidXQgaXQncwogICAgICAgICAvLyBhbiB1bmZv
cnR1bmF0ZSBuZWNlc3NpdHkuIFNlZSBhYm92ZSBjb21tZW50LgotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBqZXR0aXNvbmVkQmxvY2tJbmRpY2VzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAg
IGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoZmlyc3RCbG9ja0luZGV4LCBqZXR0aXNvbmVkQmxv
Y2tJbmRpY2VzW2ldKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gamV0dGlzb25lZEJsb2Nr
cy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGZp
cnN0QmxvY2ssIGpldHRpc29uZWRCbG9ja3NbaV0pOwogICAgICAgICAKICAgICAgICAgZmlyc3RC
bG9jay0+dmFsdWVzQXRUYWlsID0gc2Vjb25kQmxvY2stPnZhbHVlc0F0VGFpbDsKICAgICAgICAg
Zmlyc3RCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uID0gc2Vjb25kQmxvY2stPmNmYUJyYW5jaERp
cmVjdGlvbjsKICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nbc2Vjb25kQmxvY2tJ
bmRleF0uY2xlYXIoKTsKKyAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soc2Vjb25kQmxvY2spOwog
ICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjksOCArNjksOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgU2FtcGxpbmdSZWdp
b24gc2FtcGxpbmdSZWdpb24oIkRGRyBDUFMgUmV0aHJlYWRpbmc6IGZyZWVVbm5lY2Vzc2FyeU5v
ZGVzIik7CiAgICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1f
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwpAQCAt
Mzg3LDggKzM4Nyw4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBTYW1wbGluZ1JlZ2lvbiBz
YW1wbGluZ1JlZ2lvbigiREZHIENQUyBSZXRocmVhZGluZzogY2Fub25pY2FsaXplTG9jYWxzSW5C
bG9ja3MiKTsKICAgICAgICAgCi0gICAgICAgIGZvciAobV9ibG9ja0luZGV4ID0gbV9ncmFwaC5t
X2Jsb2Nrcy5zaXplKCk7IG1fYmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgbV9ibG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbbV9ibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7
CisgICAgICAgICAgICBtX2Jsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAg
ICAgICAgIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2soKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTQwMiwyMCArNDAyLDE5IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUg
dGhhdCBhdHRlbXB0cyB0byB1c2UgdGhpcyBmYWlsIGluc3RhbnRseS4KICAgICAgICAgbV9ibG9j
ayA9IDA7Ci0gICAgICAgIG1fYmxvY2tJbmRleCA9IE5vQmxvY2s7CiAgICAgICAgIAogICAgICAg
ICB3aGlsZSAoIXBoaVN0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgUGhpU3RhY2tFbnRy
eSBlbnRyeSA9IHBoaVN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgIHBoaVN0YWNrLnJlbW92ZUxh
c3QoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBlbnRy
eS5tX2Jsb2NrOwotICAgICAgICAgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMgPSBi
bG9jay0+bV9wcmVkZWNlc3NvcnM7CisgICAgICAgICAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRl
Y2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnM7CiAgICAgICAgICAgICBOb2RlKiBjdXJyZW50
UGhpID0gZW50cnkubV9waGk7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gY3VycmVudFBoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBzaXpl
X3QgaW5kZXggPSBlbnRyeS5tX2luZGV4OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gcHJlZGVjZXNzb3JzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3ByZWRlY2Vz
c29yc1tpXV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JC
bG9jayA9IHByZWRlY2Vzc29yc1tpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBOb2RlKiB2YXJpYWJsZUluUHJldmlvdXMgPSBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGluZGV4KTsKICAgICAgICAgICAgICAgICBpZiAoIXZh
cmlhYmxlSW5QcmV2aW91cykgewpAQCAtNDgxLDcgKzQ4MCw2IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBtX2xvY2FsUGhpU3RhY2s7CiAgICAgfQogICAgIAotICAgIEJsb2NrSW5kZXggbV9i
bG9ja0luZGV4OwogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgVmVjdG9yPFBoaVN0YWNr
RW50cnksIDEyOD4gbV9hcmd1bWVudFBoaVN0YWNrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5
LCAxMjg+IG1fbG9jYWxQaGlTdGFjazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsOCBAQCBw
dWJsaWM6CiAgICAgICAgIAogICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgCi0g
ICAgICAgIGZvciAodW5zaWduZWQgYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpOyArK2Jsb2NrKQotICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ1NFKG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tdLmdldCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkKKyAgICAg
ICAgICAgIHBlcmZvcm1CbG9ja0NTRShtX2dyYXBoLmJsb2NrKGJsb2NrKSk7CiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMjQgKzUyLDIzIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAKLSAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrczsgKyti
bG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKGJsb2NrLT5jZmFGb3VuZENvbnN0YW50cykKLSAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IGZvbGRDb25zdGFudHMoYmxvY2tJbmRleCk7CisgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBmb2xkQ29uc3RhbnRzKGJsb2NrKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQogCiBwcml2YXRlOgotICAg
IGJvb2wgZm9sZENvbnN0YW50cyhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgYm9vbCBmb2xk
Q29uc3RhbnRzKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCJDb25zdGFudCBmb2xkaW5n
IGNvbnNpZGVyaW5nIEJsb2NrICMldS5cbiIsIGJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9n
KCJDb25zdGFudCBmb2xkaW5nIGNvbnNpZGVyaW5nIEJsb2NrICIsICpibG9jaywgIi5cbiIpOwog
I2VuZGlmCi0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIG1f
c3RhdGUuYmVnaW5CYXNpY0Jsb2NrKGJsb2NrKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9j
aykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJl
dmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw4IEBAIHB1YmxpYzoKICAgICBib29sIHJ1
bigpCiAgICAgewogICAgICAgICAvLyBGaXJzdCByZXNldCB0aGUgY291bnRzIHRvIDAgZm9yIGFs
bCBub2Rlcy4KLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgp
OworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICgh
YmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykKQEAgLTYw
LDggKzYwLDggQEAgcHVibGljOgogICAgICAgICAvLyAtIE5vZGVzIHRoYXQgYXJlIG11c3QtZ2Vu
ZXJhdGUuCiAgICAgICAgIC8vIC0gTm9kZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdHlwZSBj
aGVja3MuCiAgICAgICAgIC8vIFNldCB0aGVpciByZWYgY291bnRzIHRvIDEgYW5kIHB1dCB0aGVt
IG9uIHRoZSB3b3JrbGlzdC4KLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewot
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5k
ZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAg
ICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0t
OykgewpAQCAtODEsOCArODEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBERkdfTk9ERV9ET19U
T19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBjb3VudEVkZ2UpOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIERpc2Fzc2Vt
Ymxlcjo6RGlzYXNzZW1ibGVyKEdyYXBoJiBncmFwaCkKICAgICA6IG1fZ3JhcGgoZ3JhcGgpCiB7
Ci0gICAgbV9sYWJlbEZvckJsb2NrSW5kZXgucmVzaXplKGdyYXBoLm1fYmxvY2tzLnNpemUoKSk7
CisgICAgbV9sYWJlbEZvckJsb2NrSW5kZXgucmVzaXplKGdyYXBoLm51bUJsb2NrcygpKTsKIH0K
IAogdm9pZCBEaXNhc3NlbWJsZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikKQEAgLTk3LDEzICs5NywxMyBAQCBWZWN0b3I8RGlzYXNzZW1ibGVyOjpEdW1w
ZWRPcD4gRGlzYXNzZW1iCiAgICAgCiAgICAgTm9kZSogbGFzdE5vZGUgPSAwOwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBwcmV2aW91c0xhYmVsID0gbV9zdGFydE9mQ29kZTsKLSAgICBmb3Ig
KHNpemVfdCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgIGZvciAoc2l6ZV90IGJsb2NrSW5kZXgg
PSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAg
ICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBkdW1wRGlz
YXNzZW1ibHkob3V0LCBkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZlciwgcHJldmlvdXNMYWJl
bCwgbV9sYWJlbEZvckJsb2NrSW5kZXhbYmxvY2tJbmRleF0sIGxhc3ROb2RlKTsKICAgICAgICAg
YXBwZW5kKHJlc3VsdCwgb3V0LCBwcmV2aW91c09yaWdpbik7Ci0gICAgICAgIG1fZ3JhcGguZHVt
cEJsb2NrSGVhZGVyKG91dCwgcHJlZml4LCBibG9ja0luZGV4LCBHcmFwaDo6RHVtcExpdmVQaGlz
T25seSk7CisgICAgICAgIG1fZ3JhcGguZHVtcEJsb2NrSGVhZGVyKG91dCwgcHJlZml4LCBibG9j
aywgR3JhcGg6OkR1bXBMaXZlUGhpc09ubHkpOwogICAgICAgICBhcHBlbmQocmVzdWx0LCBvdXQs
IHByZXZpb3VzT3JpZ2luKTsKICAgICAgICAgTm9kZSogbGFzdE5vZGVGb3JEaXNhc3NlbWJseSA9
IGJsb2NrLT5hdCgwKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+c2l6
ZSgpOyArK2kpIHsKQEAgLTExOCw3ICsxMTgsNyBAQCBWZWN0b3I8RGlzYXNzZW1ibGVyOjpEdW1w
ZWRPcD4gRGlzYXNzZW1iCiAgICAgICAgICAgICAgICAgLy8gYXMgdGhlIGVuZCBwb2ludC4gVGhp
cyBjYXNlIGlzIGhpdCBlaXRoZXIgZHVyaW5nIHBlZXBob2xlIGNvbXBhcmUKICAgICAgICAgICAg
ICAgICAvLyBvcHRpbWl6YXRpb25zICh0aGUgQnJhbmNoIHdvbid0IGhhdmUgaXRzIG93biBsYWJl
bCkgb3IgaWYgd2UgaGF2ZSBhCiAgICAgICAgICAgICAgICAgLy8gZm9yY2VkIE9TUiBleGl0Lgot
ICAgICAgICAgICAgICAgIGlmIChibG9ja0luZGV4ICsgMSA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpKQorICAgICAgICAgICAgICAgIGlmIChibG9ja0luZGV4ICsgMSA8IG1fZ3JhcGgubnVtQmxv
Y2tzKCkpCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMYWJlbCA9IG1fbGFiZWxGb3JCbG9j
a0luZGV4W2Jsb2NrSW5kZXggKyAxXTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRMYWJlbCA9IG1fZW5kT2ZNYWluUGF0aDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuaAkocmV2aXNpb24gMTUyMzM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgRGlzYXNzZW1ibGVyKEdyYXBoJik7
CiAgICAgCiAgICAgdm9pZCBzZXRTdGFydE9mQ29kZShNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFi
ZWwpIHsgbV9zdGFydE9mQ29kZSA9IGxhYmVsOyB9Ci0gICAgdm9pZCBzZXRGb3JCbG9jayhCbG9j
a0luZGV4IGJsb2NrSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbCkKKyAgICB2b2lk
IHNldEZvckJsb2NrSW5kZXgoQmxvY2tJbmRleCBibG9ja0luZGV4LCBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbGFiZWwpCiAgICAgewogICAgICAgICBtX2xhYmVsRm9yQmxvY2tJbmRleFtibG9ja0lu
ZGV4XSA9IGxhYmVsOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9taW5hdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb21pbmF0b3JzLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsOSBA
QCB2b2lkIERvbWluYXRvcnM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQogewogICAgIC8vIFRoaXMg
aW1wbGVtZW50cyBhIG5haXZlIGRvbWluYXRvciBzb2x2ZXIuCiAgICAgCi0gICAgQVNTRVJUKGdy
YXBoLm1fYmxvY2tzWzBdLT5tX3ByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChn
cmFwaC5ibG9jaygwKS0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSk7CiAgICAgCi0gICAgdW5zaWdu
ZWQgbnVtQmxvY2tzID0gZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOworICAgIHVuc2lnbmVkIG51bUJs
b2NrcyA9IGdyYXBoLm51bUJsb2NrcygpOwogICAgIAogICAgIGlmIChudW1CbG9ja3MgPiBtX3Jl
c3VsdHMuc2l6ZSgpKSB7CiAgICAgICAgIG1fcmVzdWx0cy5ncm93KG51bUJsb2Nrcyk7CkBAIC02
MCwxMyArNjAsMTMgQEAgdm9pZCBEb21pbmF0b3JzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKICAg
ICAKICAgICBtX3NjcmF0Y2guY2xlYXJBbGwoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1C
bG9ja3M7IGktLTspIHsKLSAgICAgICAgaWYgKCFncmFwaC5tX2Jsb2Nrc1tpXSkKKyAgICAgICAg
aWYgKCFncmFwaC5ibG9jayhpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBtX3Nj
cmF0Y2guc2V0KGkpOwogICAgIH0KICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9j
a3M7IGktLSA+IDE7KSB7Ci0gICAgICAgIGlmICghZ3JhcGgubV9ibG9ja3NbaV0gfHwgZ3JhcGgu
bV9ibG9ja3NbaV0tPm1fcHJlZGVjZXNzb3JzLmlzRW1wdHkoKSkKKyAgICAgICAgaWYgKCFncmFw
aC5ibG9jayhpKSB8fCBncmFwaC5ibG9jayhpKS0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIG1fcmVzdWx0c1tpXS5jbGVhckFsbCgpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBtX3Jlc3VsdHNbaV0uc2V0KG1fc2NyYXRjaCk7CkBAIC04OCwxNCArODgsMTQgQEAgdm9p
ZCBEb21pbmF0b3JzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKIAogYm9vbCBEb21pbmF0b3JzOjpp
dGVyYXRlRm9yQmxvY2soR3JhcGgmIGdyYXBoLCBCbG9ja0luZGV4IGkpCiB7Ci0gICAgQmFzaWNC
bG9jayogYmxvY2sgPSBncmFwaC5tX2Jsb2Nrc1tpXS5nZXQoKTsKKyAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IGdyYXBoLmJsb2NrKGkpOwogICAgIGlmICghYmxvY2spCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoYmxvY2stPm1fcHJlZGVjZXNzb3JzLmlzRW1wdHkoKSkKKyAgICBpZiAo
YmxvY2stPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBtX3NjcmF0Y2guc2V0KG1fcmVzdWx0c1tibG9jay0+bV9wcmVkZWNlc3NvcnNbMF1dKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyBqLS0gPiAx
OykKLSAgICAgICAgbV9zY3JhdGNoLmZpbHRlcihtX3Jlc3VsdHNbYmxvY2stPm1fcHJlZGVjZXNz
b3JzW2pdXSk7CisgICAgbV9zY3JhdGNoLnNldChtX3Jlc3VsdHNbYmxvY2stPnByZWRlY2Vzc29y
c1swXS0+aW5kZXhdKTsKKyAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJlZGVjZXNzb3Jz
LnNpemUoKTsgai0tID4gMTspCisgICAgICAgIG1fc2NyYXRjaC5maWx0ZXIobV9yZXN1bHRzW2Js
b2NrLT5wcmVkZWNlc3NvcnNbal0tPmluZGV4XSk7CiAgICAgbV9zY3JhdGNoLnNldChpKTsKICAg
ICByZXR1cm4gbV9yZXN1bHRzW2ldLnNldEFuZENoZWNrKG1fc2NyYXRjaCk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAkocmV2aXNpb24gMTUyMzM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDcgKzQ4LDExIEBAIHB1YmxpYzoKICAgICBib29sIGRvbWluYXRlcyhCbG9j
a0luZGV4IGZyb20sIEJsb2NrSW5kZXggdG8pIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
aXNWYWxpZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fcmVzdWx0c1t0b10uZ2V0KGZyb20pOworICAg
ICAgICByZXR1cm4gbV9yZXN1bHRzW2Zyb21dLmdldCh0byk7CisgICAgfQorICAgIGJvb2wgZG9t
aW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGRvbWluYXRlcyhmcm9tLT5pbmRleCwgdG8tPmluZGV4KTsKICAgICB9CiAg
ICAgCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKICAgICAg
ICAgCiAgICAgICAgIG1fcHJvZml0YWJpbGl0eUNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCk7ICsrYmxvY2tJbmRleCkKLSAgICAgICAgICAgIGZpeHVwQmxvY2sobV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKSk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRl
eCkKKyAgICAgICAgICAgIGZpeHVwQmxvY2sobV9ncmFwaC5ibG9jayhibG9ja0luZGV4KSk7CiAg
ICAgICAgIAogICAgICAgICB3aGlsZSAobV9wcm9maXRhYmlsaXR5Q2hhbmdlZCkgewogICAgICAg
ICAgICAgbV9wcm9maXRhYmlsaXR5Q2hhbmdlZCA9IGZhbHNlOwpAQCAtNTksOCArNTksOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fYXJndW1lbnRQ
b3NpdGlvbnMuc2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVu
dFBvc2l0aW9uc1tpXS5tZXJnZUFyZ3VtZW50VW5ib3hpbmdBd2FyZW5lc3MoKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkKLSAgICAgICAgICAg
ICAgICBmaXh1cFNldExvY2Fsc0luQmxvY2sobV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5n
ZXQoKSk7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpCisgICAgICAgICAgICAg
ICAgZml4dXBTZXRMb2NhbHNJbkJsb2NrKG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCkpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU3MywxMCArNTczLDEw
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdDaGlsZEVkZ2UtPmhhc0Jv
b2xlYW5SZXN1bHQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4u
c2V0Q2hpbGQxKG5ld0NoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG9CZVRha2VuID0gbm9kZS0+bm90VGFrZW5C
bG9ja0luZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRvQmVOb3RU
YWtlbiA9IG5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+c2V0VGFrZW5CbG9ja0luZGV4KHRvQmVUYWtlbik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXROb3RUYWtlbkJsb2NrSW5kZXgodG9CZU5vdFRha2VuKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRvQmVUYWtlbiA9IG5vZGUtPm5vdFRha2VuQmxv
Y2soKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRvQmVOb3RUYWtlbiA9
IG5vZGUtPnRha2VuQmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFRh
a2VuQmxvY2sodG9CZVRha2VuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE5v
dFRha2VuQmxvY2sodG9CZU5vdFRha2VuKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDE1ICsyNDUsMTUgQEAgdm9p
ZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIGlmIChvcCA9PSBXZWFr
SlNDb25zdGFudCkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPndl
YWtDb25zdGFudCgpKSwgIiAoc3RydWN0dXJlOiAiLCAqbm9kZS0+d2Vha0NvbnN0YW50KCktPnN0
cnVjdHVyZSgpLCAiKSIpOwogICAgIGlmIChub2RlLT5pc0JyYW5jaCgpIHx8IG5vZGUtPmlzSnVt
cCgpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJUOiMiLCBub2RlLT50YWtlbkJsb2NrSW5k
ZXgoKSk7CisgICAgICAgIG91dC5wcmludChjb21tYSwgIlQ6IiwgKm5vZGUtPnRha2VuQmxvY2so
KSk7CiAgICAgaWYgKG5vZGUtPmlzQnJhbmNoKCkpCi0gICAgICAgIG91dC5wcmludChjb21tYSwg
IkY6IyIsIG5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiRjoiLCBub2RlLT5ub3RUYWtlbkJsb2NrKCkpOwogICAgIGlmIChub2RlLT5pc1N3aXRj
aCgpKSB7CiAgICAgICAgIFN3aXRjaERhdGEqIGRhdGEgPSBub2RlLT5zd2l0Y2hEYXRhKCk7CiAg
ICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+a2luZCk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG91dC5w
cmludChjb21tYSwgZGF0YS0+Y2FzZXNbaV0udmFsdWUsICI6IyIsIGRhdGEtPmNhc2VzW2ldLnRh
cmdldCk7Ci0gICAgICAgIG91dC5wcmludChjb21tYSwgImRlZmF1bHQ6IyIsIGRhdGEtPmZhbGxU
aHJvdWdoKTsKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+Y2FzZXNbaV0udmFs
dWUsICI6IiwgKmRhdGEtPmNhc2VzW2ldLnRhcmdldCk7CisgICAgICAgIG91dC5wcmludChjb21t
YSwgImRlZmF1bHQ6IiwgKmRhdGEtPmZhbGxUaHJvdWdoKTsKICAgICB9CiAgICAgb3V0LnByaW50
KGNvbW1hLCAiYmMjIiwgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAKQEAg
LTI2OSwzNyArMjY5LDM1IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QKICAgICBvdXQucHJpbnQoIlxuIik7CiB9CiAKLXZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRl
cihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIEJsb2NrSW5kZXggYmxvY2tJ
bmRleCwgUGhpTm9kZUR1bXBNb2RlIHBoaU5vZGVEdW1wTW9kZSkKK3ZvaWQgR3JhcGg6OmR1bXBC
bG9ja0hlYWRlcihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIEJhc2ljQmxv
Y2sqIGJsb2NrLCBQaGlOb2RlRHVtcE1vZGUgcGhpTm9kZUR1bXBNb2RlKQogewotICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0KLSAgICBvdXQucHJp
bnQocHJlZml4LCAiQmxvY2sgIyIsIGJsb2NrSW5kZXgsICIgKCIsIGJsb2NrLT5hdCgwKS0+Y29k
ZU9yaWdpbiwgIik6ICIsIGJsb2NrLT5pc1JlYWNoYWJsZSA/ICIiIDogIihza2lwcGVkKSIsIGJs
b2NrLT5pc09TUlRhcmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6ICIiLCAiXG4iKTsKKyAgICBvdXQu
cHJpbnQocHJlZml4LCAiQmxvY2sgIiwgKmJsb2NrLCAiICgiLCBibG9jay0+YXQoMCktPmNvZGVP
cmlnaW4sICIpOiAiLCBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIoc2tpcHBlZCkiLCBibG9j
ay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIiwgIlxuIik7CiAgICAgb3V0LnBy
aW50KHByZWZpeCwgIiAgUHJlZGVjZXNzb3JzOiIpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQo
IiAjIiwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG91dC5wcmludCgi
ICMiLCBibG9jay0+cHJlZGVjZXNzb3JzW2ldKTsKICAgICBvdXQucHJpbnQoIlxuIik7CiAgICAg
aWYgKG1fZG9taW5hdG9ycy5pc1ZhbGlkKCkpIHsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwg
IiAgRG9taW5hdGVkIGJ5OiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYmxv
Y2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5kb21pbmF0
ZXMoaSwgYmxvY2tJbmRleCkpCisgICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5kb21pbmF0
ZXMoaSwgYmxvY2stPmJsb2NrSW5kZXgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgb3V0LnByaW50KCIgIyIsIGkpOwogICAgICAgICB9CiAgICAgICAgIG91dC5wcmlu
dCgiXG4iKTsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVzOiIpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5kb21pbmF0ZXMoYmxvY2tJbmRleCwgaSkpCisgICAg
ICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5kb21pbmF0ZXMoYmxvY2stPmJsb2NrSW5kZXgsIGkp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgb3V0LnByaW50KCIgIyIs
IGkpOwogICAgICAgICB9CiAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICB9CiAgICAgaWYg
KG1fbmF0dXJhbExvb3BzLmlzVmFsaWQoKSkgewotICAgICAgICBpZiAoY29uc3QgTmF0dXJhbExv
b3AqIGxvb3AgPSBtX25hdHVyYWxMb29wcy5oZWFkZXJPZihibG9ja0luZGV4KSkgeworICAgICAg
ICBpZiAoY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX25hdHVyYWxMb29wcy5oZWFkZXJPZihi
bG9jaykpIHsKICAgICAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIExvb3AgaGVhZGVyLCBj
b250YWluczoiKTsKICAgICAgICAgICAgIFZlY3RvcjxCbG9ja0luZGV4PiBzb3J0ZWRCbG9ja0xp
c3Q7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9vcC0+c2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICAgICAgc29ydGVkQmxvY2tMaXN0LmFwcGVuZChsb29wLT5hdChpKSk7
CisgICAgICAgICAgICAgICAgc29ydGVkQmxvY2tMaXN0LmFwcGVuZChsb29wLT5hdChpKS0+aW5k
ZXgpOwogICAgICAgICAgICAgc3RkOjpzb3J0KHNvcnRlZEJsb2NrTGlzdC5iZWdpbigpLCBzb3J0
ZWRCbG9ja0xpc3QuZW5kKCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNvcnRlZEJsb2NrTGlzdC5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICBvdXQucHJpbnQo
IiAjIiwgc29ydGVkQmxvY2tMaXN0W2ldKTsKQEAgLTMxMSw3ICszMDksNyBAQCB2b2lkIEdyYXBo
OjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiAgICAgICAgIGlmICghY29udGFpbmluZ0xv
b3BzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgQ29udGFp
bmluZyBsb29wIGhlYWRlcnM6Iik7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgY29udGFpbmluZ0xvb3BzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiICMiLCBjb250YWluaW5nTG9vcHNbaV0tPmhlYWRlcigpKTsKKyAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIiAiLCAqY29udGFpbmluZ0xvb3BzW2ldLT5oZWFkZXIoKSk7CiAgICAgICAgICAg
ICBvdXQucHJpbnQoIlxuIik7CiAgICAgICAgIH0KICAgICB9CkBAIC0zOTQsMjkgKzM5MiwyNSBA
QCB2b2lkIEdyYXBoOjpkZXRocmVhZCgpCiAgICAgbV9mb3JtID0gTG9hZFN0b3JlOwogfQogCi12
b2lkIEdyYXBoOjpoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xp
c3QsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCkKK3Zv
aWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xp
c3QsIEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IpCiB7Ci0gICAgQmFz
aWNCbG9jayogc3VjY2Vzc29yID0gbV9ibG9ja3Nbc3VjY2Vzc29ySW5kZXhdLmdldCgpOwogICAg
IGlmICghc3VjY2Vzc29yLT5pc1JlYWNoYWJsZSkgewogICAgICAgICBzdWNjZXNzb3ItPmlzUmVh
Y2hhYmxlID0gdHJ1ZTsKLSAgICAgICAgd29ya2xpc3QuYXBwZW5kKHN1Y2Nlc3NvckluZGV4KTsK
KyAgICAgICAgd29ya2xpc3QuYXBwZW5kKHN1Y2Nlc3Nvcik7CiAgICAgfQogICAgIAotICAgIHN1
Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGJsb2NrSW5kZXgpOworICAgIHN1Y2Nlc3Nv
ci0+cHJlZGVjZXNzb3JzLmFwcGVuZChibG9jayk7CiB9CiAKIHZvaWQgR3JhcGg6OmRldGVybWlu
ZVJlYWNoYWJpbGl0eSgpCiB7Ci0gICAgVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiB3b3JrbGlzdDsK
LSAgICB3b3JrbGlzdC5hcHBlbmQoMCk7Ci0gICAgbV9ibG9ja3NbMF0tPmlzUmVhY2hhYmxlID0g
dHJ1ZTsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiB3b3JrbGlzdDsKKyAgICB3b3JrbGlz
dC5hcHBlbmQoYmxvY2soMCkpOworICAgIGJsb2NrKDApLT5pc1JlYWNoYWJsZSA9IHRydWU7CiAg
ICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgQmxvY2tJbmRleCBpbmRl
eCA9IHdvcmtsaXN0Lmxhc3QoKTsKLSAgICAgICAgd29ya2xpc3QucmVtb3ZlTGFzdCgpOwotICAg
ICAgICAKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7
CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtU3VjY2Vzc29ycyhibG9jayk7IGktLTspCi0gICAgICAg
ICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBzdWNjZXNzb3IoYmxvY2ssIGkp
KTsKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgYmxvY2ssIHN1Y2Nlc3Nv
cihibG9jaywgaSkpOwogICAgIH0KIH0KIApAQCAtNDI3LDcgKzQyMSw3IEBAIHZvaWQgR3JhcGg6
OnJlc2V0UmVhY2hhYmlsaXR5KCkKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBibG9jay0+aXNSZWFjaGFibGUgPSBmYWxzZTsKLSAgICAgICAgYmxv
Y2stPm1fcHJlZGVjZXNzb3JzLmNsZWFyKCk7CisgICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMu
Y2xlYXIoKTsKICAgICB9CiAgICAgCiAgICAgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTIzMzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
OSw3ICsxNjksNyBAQCBwdWJsaWM6CiAgICAgLy8gQ29kZUJsb2NrIGlzIG9wdGlvbmFsLCBidXQg
bWF5IGFsbG93IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gYmUgZHVtcGVkIChlLmcuIElkZW50
aWZpZXIgbmFtZXMpLgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxl
KCkpOwogICAgIGVudW0gUGhpTm9kZUR1bXBNb2RlIHsgRHVtcExpdmVQaGlzT25seSwgRHVtcEFs
bFBoaXMgfTsKLSAgICB2b2lkIGR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYsIGNvbnN0IGNo
YXIqIHByZWZpeCwgQmxvY2tJbmRleCwgUGhpTm9kZUR1bXBNb2RlKTsKKyAgICB2b2lkIGR1bXBC
bG9ja0hlYWRlcihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmFzaWNCbG9jayos
IFBoaU5vZGVEdW1wTW9kZSk7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiwgRWRnZSk7CiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKik7CiAg
ICAgc3RhdGljIGludCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKE5vZGUqKTsKQEAgLTE3OSw4ICsx
NzksNiBAQCBwdWJsaWM6CiAgICAgLy8gcHJlY2VkaW5nIG5vZGUuIFJldHVybnMgdHJ1ZSBpZiBh
bnl0aGluZyB3YXMgcHJpbnRlZC4KICAgICBib29sIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFt
JiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnRO
b2RlKTsKIAotICAgIEJsb2NrSW5kZXggYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3Rv
cjxCbG9ja0luZGV4PiYgYmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKTsKLQogICAgIFNw
ZWN1bGF0ZWRUeXBlIGdldEpTQ29uc3RhbnRTcGVjdWxhdGlvbihOb2RlKiBub2RlKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG5vZGUtPnZhbHVlT2ZKU0NvbnN0
YW50KG1fY29kZUJsb2NrKSk7CkBAIC00NTUsMTcgKzQ1MywyNCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpOwogICAgIH0KICAgICAKLSAgICB1
bnNpZ25lZCBudW1TdWNjZXNzb3JzKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIEJsb2NrSW5kZXgg
bnVtQmxvY2tzKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNC
bG9jayogYmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nr
c1tibG9ja0luZGV4XS5nZXQoKTsgfQorICAgIEJhc2ljQmxvY2sqIGxhc3RCbG9jaygpIGNvbnN0
IHsgcmV0dXJuIGJsb2NrKG51bUJsb2NrcygpIC0gMSk7IH0KKworICAgIHZvaWQgYXBwZW5kQmxv
Y2soUGFzc1JlZlB0cjxCYXNpY0Jsb2NrPiBiYXNpY0Jsb2NrKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGJsb2NrLT5sYXN0KCktPm51bVN1Y2Nlc3NvcnMoKTsKKyAgICAgICAgYmFzaWNCbG9jay0+
YmxvY2tJbmRleCA9IG1fYmxvY2tzLnNpemUoKTsKKyAgICAgICAgbV9ibG9ja3MuYXBwZW5kKGJh
c2ljQmxvY2spOwogICAgIH0KLSAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvcihCYXNpY0Jsb2NrKiBi
bG9jaywgdW5zaWduZWQgaW5kZXgpCisgICAgCisgICAgdm9pZCBraWxsQmxvY2soQmxvY2tJbmRl
eCBibG9ja0luZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1Y2Nl
c3NvcihpbmRleCk7CisgICAgICAgIG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmNsZWFyKCk7CiAgICAg
fQotICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yRm9yQ29uZGl0aW9uKEJhc2ljQmxvY2sqIGJsb2Nr
LCBib29sIGNvbmRpdGlvbikKKyAgICAKKyAgICB2b2lkIGtpbGxCbG9jayhCYXNpY0Jsb2NrKiBi
YXNpY0Jsb2NrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3Nv
ckZvckNvbmRpdGlvbihjb25kaXRpb24pOworICAgICAgICBraWxsQmxvY2soYmFzaWNCbG9jay0+
aW5kZXgpOwogICAgIH0KICAgICAKICAgICBib29sIGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUq
IG5vZGUpCkBAIC02NTksNyArNjY0LDcgQEAgcHVibGljOgogICAgIAogICAgIE5vZGVBbGxvY2F0
b3ImIG1fYWxsb2NhdG9yOwogCi0gICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBt
X2Jsb2NrczsKKyAgICBWZWN0b3I8IFJlZlB0cjxCYXNpY0Jsb2NrPiAsIDg+IG1fYmxvY2tzOwog
ICAgIFZlY3RvcjxFZGdlLCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKICAgICBWZWN0b3I8U3RvcmFn
ZUFjY2Vzc0RhdGE+IG1fc3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAgVmVjdG9yPE5vZGUqLCA4PiBt
X2FyZ3VtZW50czsKQEAgLTY4Myw3ICs2ODgsNyBAQCBwdWJsaWM6CiAgICAgUmVmQ291bnRTdGF0
ZSBtX3JlZkNvdW50U3RhdGU7CiBwcml2YXRlOgogICAgIAotICAgIHZvaWQgaGFuZGxlU3VjY2Vz
c29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5k
ZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpOworICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29y
KFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgQmFzaWNCbG9jayosIEJhc2ljQmxv
Y2sqIHN1Y2Nlc3Nvcik7CiAgICAgCiAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0
ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogYWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlciwgTm9kZSogaW1tZWRpYXRlKQogICAgIHsKQEAgLTczMiwyNyArNzM3LDYg
QEAgcHJpdmF0ZToKICAgICB9CiB9OwogCi1jbGFzcyBHZXRCeXRlY29kZUJlZ2luRm9yQmxvY2sg
ewotcHVibGljOgotICAgIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayhHcmFwaCYgZ3JhcGgpCi0g
ICAgICAgIDogbV9ncmFwaChncmFwaCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVk
IG9wZXJhdG9yKCkoQmxvY2tJbmRleCogYmxvY2tJbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX2dyYXBoLm1fYmxvY2tzWypibG9ja0luZGV4XS0+Ynl0ZWNvZGVCZWdpbjsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGgmIG1fZ3JhcGg7Ci19OwotCi1pbmxpbmUgQmxvY2tJ
bmRleCBHcmFwaDo6YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCbG9ja0luZGV4
PiYgbGlua2luZ1RhcmdldHMsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pCi17Ci0gICAgcmV0dXJu
ICpiaW5hcnlTZWFyY2g8QmxvY2tJbmRleCwgdW5zaWduZWQ+KGxpbmtpbmdUYXJnZXRzLCBsaW5r
aW5nVGFyZ2V0cy5zaXplKCksIGJ5dGVjb2RlQmVnaW4sIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9j
aygqdGhpcykpOwotfQotCiAjZGVmaW5lIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBu
b2RlLCB0aGluZ1RvRG8pIGRvIHsgICAgICAgICAgICBcCiAgICAgICAgIE5vZGUqIF9ub2RlID0g
KG5vZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
ICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgSklU
Q29tcGlsZXI6OkpJVENvbXBpbGVyKEdyYXBoJiBkZmcpCiAgICAgOiBDQ2FsbEhlbHBlcnMoJmRm
Zy5tX3ZtLCBkZmcubV9jb2RlQmxvY2spCiAgICAgLCBtX2dyYXBoKGRmZykKICAgICAsIG1faml0
Q29kZShhZG9wdFJlZihuZXcgSklUQ29kZSgpKSkKLSAgICAsIG1fYmxvY2tIZWFkcyhkZmcubV9i
bG9ja3Muc2l6ZSgpKQorICAgICwgbV9ibG9ja0hlYWRzKGRmZy5udW1CbG9ja3MoKSkKICAgICAs
IG1fY3VycmVudENvZGVPcmlnaW5JbmRleCgwKQogewogICAgIGlmIChzaG91bGRTaG93RGlzYXNz
ZW1ibHkoKSB8fCBtX2dyYXBoLm1fdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTUyMzM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTYsMTEgKzI5NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGlzYXNzZW1i
bGVyLT5zZXRTdGFydE9mQ29kZShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7CiAgICAgfQog
ICAgIAotICAgIHZvaWQgc2V0Rm9yQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHZv
aWQgc2V0Rm9yQmxvY2soQmFzaWNCbG9jayogYmxvY2spCiAgICAgewogICAgICAgICBpZiAoTElL
RUxZKCFtX2Rpc2Fzc2VtYmxlcikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZGlz
YXNzZW1ibGVyLT5zZXRGb3JCbG9jayhibG9ja0luZGV4LCBsYWJlbElnbm9yaW5nV2F0Y2hwb2lu
dHMoKSk7CisgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCbG9jayhibG9jaywgbGFiZWxJ
Z25vcmluZ1dhdGNocG9pbnRzKCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldEZvck5vZGUo
Tm9kZSogbm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExv
b3BzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVy
YWxMb29wcy5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTmF0dXJhbExvb3BzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMjYgKzYwLDI2IEBA
IHZvaWQgTmF0dXJhbExvb3BzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKICAgICAKICAgICBtX2xv
b3BzLnJlc2l6ZSgwKTsKICAgICAKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdy
YXBoLm1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IGdyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsK
KyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAg
ICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gZ3JhcGgubnVtU3VjY2Vzc29ycyhibG9jayk7IGktLTspIHsK
LSAgICAgICAgICAgIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXggPSBncmFwaC5zdWNjZXNzb3Io
YmxvY2ssIGkpOwotICAgICAgICAgICAgaWYgKCFncmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVz
KHN1Y2Nlc3NvckluZGV4LCBibG9ja0luZGV4KSkKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvciA9IGdyYXBoLnN1Y2Nlc3NvcihibG9jaywgaSk7CisgICAgICAgICAgICBpZiAoIWdy
YXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMoc3VjY2Vzc29yLCBibG9jaykpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSBtX2xvb3BzLnNpemUoKTsgai0tOykgewotICAgICAgICAg
ICAgICAgIGlmIChtX2xvb3BzW2ldLmhlYWRlcigpID09IHN1Y2Nlc3NvckluZGV4KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fbG9vcHNbaV0uYWRkQmxvY2soYmxvY2tJbmRleCk7CisgICAgICAg
ICAgICAgICAgaWYgKG1fbG9vcHNbaV0uaGVhZGVyKCkgPT0gc3VjY2Vzc29yKSB7CisgICAgICAg
ICAgICAgICAgICAgIG1fbG9vcHNbaV0uYWRkQmxvY2soYmxvY2spOwogICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKGZvdW5kKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgTmF0dXJhbExvb3AgbG9vcChzdWNjZXNzb3JJbmRleCk7Ci0gICAgICAgICAgICBsb29wLmFk
ZEJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgTmF0dXJhbExvb3AgbG9vcChzdWNjZXNz
b3IpOworICAgICAgICAgICAgbG9vcC5hZGRCbG9jayhibG9jayk7CiAgICAgICAgICAgICBtX2xv
b3BzLmFwcGVuZChsb29wKTsKICAgICAgICAgfQogICAgIH0KQEAgLTg4LDggKzg4LDggQEAgdm9p
ZCBOYXR1cmFsTG9vcHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQogICAgICAgICBkYXRhTG9nKCJB
ZnRlciBib290c3RyYXA6ICIsICp0aGlzLCAiXG4iKTsKICAgICAKICAgICBGYXN0Qml0VmVjdG9y
IHNlZW5CbG9ja3M7Ci0gICAgVmVjdG9yPEJsb2NrSW5kZXgsIDQ+IGJsb2NrV29ya2xpc3Q7Ci0g
ICAgc2VlbkJsb2Nrcy5yZXNpemUoZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKKyAgICBWZWN0b3I8
QmFzaWNCbG9jayosIDQ+IGJsb2NrV29ya2xpc3Q7CisgICAgc2VlbkJsb2Nrcy5yZXNpemUoZ3Jh
cGgubnVtQmxvY2tzKCkpOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9vcHMuc2l6
ZSgpOyBpLS07KSB7CiAgICAgICAgIE5hdHVyYWxMb29wJiBsb29wID0gbV9sb29wc1tpXTsKQEAg
LTEwMSwzMCArMTAxLDI3IEBAIHZvaWQgTmF0dXJhbExvb3BzOjpjb21wdXRlKEdyYXBoJiBncmFw
aCkKICAgICAgICAgICAgIGRhdGFMb2coIkRlYWxpbmcgd2l0aCBsb29wICIsIGxvb3AsICJcbiIp
OwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbG9vcC5zaXplKCk7IGotLTsp
IHsKLSAgICAgICAgICAgIHNlZW5CbG9ja3Muc2V0KGxvb3Bbal0pOworICAgICAgICAgICAgc2Vl
bkJsb2Nrcy5zZXQobG9vcFtqXS0+aW5kZXgpOwogICAgICAgICAgICAgYmxvY2tXb3JrbGlzdC5h
cHBlbmQobG9vcFtqXSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHdoaWxlICghYmxv
Y2tXb3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IGJsb2NrV29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gYmxvY2tXb3JrbGlzdC50YWtlTGFzdCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRGVhbGluZyB3aXRo
ICMiLCBibG9ja0luZGV4LCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRGVh
bGluZyB3aXRoICIsICpibG9jaywgIlxuIik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChibG9ja0luZGV4ID09IGxvb3AuaGVhZGVyKCkpCisgICAgICAgICAgICBpZiAoYmxvY2sgPT0g
bG9vcC5oZWFkZXIoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4
XS5nZXQoKTsKLSAgICAgICAgICAgIEFTU0VSVChibG9jayk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5tX3ByZWRlY2Vzc29ycy5zaXplKCk7IGot
LTspIHsKLSAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHByZWRlY2Vzc29ySW5kZXggPSBibG9j
ay0+bV9wcmVkZWNlc3NvcnNbal07Ci0gICAgICAgICAgICAgICAgaWYgKHNlZW5CbG9ja3MuZ2V0
KHByZWRlY2Vzc29ySW5kZXgpKQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2st
PnByZWRlY2Vzc29ycy5zaXplKCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBwcmVkZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNbal07CisgICAgICAgICAgICAgICAg
aWYgKHNlZW5CbG9ja3MuZ2V0KHByZWRlY2Vzc29yLT5pbmRleCkpCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGxvb3AuYWRk
QmxvY2socHJlZGVjZXNzb3JJbmRleCk7Ci0gICAgICAgICAgICAgICAgYmxvY2tXb3JrbGlzdC5h
cHBlbmQocHJlZGVjZXNzb3JJbmRleCk7Ci0gICAgICAgICAgICAgICAgc2VlbkJsb2Nrcy5zZXQo
cHJlZGVjZXNzb3JJbmRleCk7CisgICAgICAgICAgICAgICAgbG9vcC5hZGRCbG9jayhwcmVkZWNl
c3NvcjsKKyAgICAgICAgICAgICAgICBibG9ja1dvcmtsaXN0LmFwcGVuZChwcmVkZWNlc3Nvcik7
CisgICAgICAgICAgICAgICAgc2VlbkJsb2Nrcy5zZXQocHJlZGVjZXNzb3ItPmluZGV4KTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEzMywxMiArMTMwLDEyIEBAIHZvaWQg
TmF0dXJhbExvb3BzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKICAgICAgICAgZGF0YUxvZygiUmVz
dWx0czogIiwgKnRoaXMsICJcbiIpOwogfQogCi1WZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBO
YXR1cmFsTG9vcHM6Omxvb3BzT2YoQmxvY2tJbmRleCBibG9ja0luZGV4KSBjb25zdAorVmVjdG9y
PGNvbnN0IE5hdHVyYWxMb29wKj4gTmF0dXJhbExvb3BzOjpsb29wc09mKEJhc2ljQmxvY2sqIGJs
b2NrKSBjb25zdAogewogICAgIFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IHJlc3VsdDsKICAg
ICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvb3BzLnNpemUoKTsgaS0tOykgewotICAgICAg
ICBpZiAobV9sb29wc1tpXS5jb250YWlucyhibG9ja0luZGV4KSkKKyAgICAgICAgaWYgKG1fbG9v
cHNbaV0uY29udGFpbnMoYmxvY2spKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgmbV9sb29w
c1tpXSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
YXR1cmFsTG9vcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05hdHVyYWxMb29wcy5oCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwyMCArNDIsMjAg
QEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgTmF0dXJhbExvb3AoQmxvY2tJbmRl
eCBoZWFkZXIpCisgICAgTmF0dXJhbExvb3AoQmFzaWNCbG9jayogaGVhZGVyKQogICAgICAgICA6
IG1faGVhZGVyKGhlYWRlcikKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgYWRkQmxvY2so
QmxvY2tJbmRleCBibG9jaykgeyBtX2JvZHkuYXBwZW5kKGJsb2NrKTsgfQorICAgIHZvaWQgYWRk
QmxvY2soQmFzaWNCbG9jayogYmxvY2spIHsgbV9ib2R5LmFwcGVuZChibG9jayk7IH0KICAgICAK
LSAgICBCbG9ja0luZGV4IGhlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGVyOyB9CisgICAg
QmFzaWNCbG9jayogaGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFkZXI7IH0KICAgICAKICAg
ICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ib2R5LnNpemUoKTsgfQotICAgIEJs
b2NrSW5kZXggYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9ib2R5W2ldOyB9Ci0gICAg
QmxvY2tJbmRleCBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9
CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9ib2R5W2ld
OyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVy
biBhdChpKTsgfQogICAgIAotICAgIGJvb2wgY29udGFpbnMoQmxvY2tJbmRleCBibG9jaykgY29u
c3QKKyAgICBib29sIGNvbnRhaW5zKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAogICAgIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ib2R5LnNpemUoKTsgaS0tOykgewogICAgICAgICAg
ICAgaWYgKG1fYm9keVtpXSA9PSBibG9jaykKQEAgLTY3LDggKzY3LDggQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogcHJpdmF0ZToKLSAgICBCbG9j
a0luZGV4IG1faGVhZGVyOwotICAgIFZlY3RvcjxCbG9ja0luZGV4LCA0PiBtX2JvZHk7CisgICAg
QmFzaWNCbG9jayogbV9oZWFkZXI7CisgICAgVmVjdG9yPEJsb2NrQmxvY2sqLCA0PiBtX2JvZHk7
CiB9OwogCiBjbGFzcyBOYXR1cmFsTG9vcHMgOiBwdWJsaWMgQW5hbHlzaXM8TmF0dXJhbExvb3Bz
PiB7CkBAIC05MSwxNyArOTEsMTcgQEAgcHVibGljOgogICAgIAogICAgIC8vIFJldHVybiBlaXRo
ZXIgbnVsbCBpZiB0aGUgYmxvY2sgaXNuJ3QgYSBsb29wIGhlYWRlciwgb3IgdGhlCiAgICAgLy8g
bG9vcCBpdCBiZWxvbmdzIHRvLgotICAgIGNvbnN0IE5hdHVyYWxMb29wKiBoZWFkZXJPZihCbG9j
a0luZGV4IGJsb2NrSW5kZXgpIGNvbnN0CisgICAgY29uc3QgTmF0dXJhbExvb3AqIGhlYWRlck9m
KEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9sb29wcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIGlmIChtX2xvb3BzW2ldLmhl
YWRlcigpID09IGJsb2NrSW5kZXgpCisgICAgICAgICAgICBpZiAobV9sb29wc1tpXS5oZWFkZXIo
KSA9PSBibG9jaykKICAgICAgICAgICAgICAgICByZXR1cm4gJm1fbG9vcHNbaV07CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAogICAgIC8vIFJldHVybiB0aGUgaW5k
aWNlcyBvZiBhbGwgbG9vcHMgdGhpcyBiZWxvbmdzIHRvLgotICAgIFZlY3Rvcjxjb25zdCBOYXR1
cmFsTG9vcCo+IGxvb3BzT2YoQmxvY2tJbmRleCBibG9ja0luZGV4KSBjb25zdDsKKyAgICBWZWN0
b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBsb29wc09mKEJhc2ljQmxvY2sqKSBjb25zdDsKIAogICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNTIzMzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQAog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK3N0cnVjdCBCYXNpY0Jsb2NrOwor
CiBzdHJ1Y3QgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEgewogICAgIFN0cnVjdHVyZSogcHJldmlv
dXNTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmU7CkBAIC04MCwxOCArODIs
MjggQEAgc3RydWN0IE5ld0FycmF5QnVmZmVyRGF0YSB7CiAvLyB2YWx1ZXMuCiBzdHJ1Y3QgU3dp
dGNoQ2FzZSB7CiAgICAgU3dpdGNoQ2FzZSgpCi0gICAgICAgIDogdGFyZ2V0KE5vQmxvY2spCisg
ICAgICAgIDogdGFyZ2V0KDApCiAgICAgewogICAgIH0KICAgICAKLSAgICBTd2l0Y2hDYXNlKExh
enlKU1ZhbHVlIHZhbHVlLCBCbG9ja0luZGV4IHRhcmdldCkKKyAgICBTd2l0Y2hDYXNlKExhenlK
U1ZhbHVlIHZhbHVlLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCiAgICAgICAgIDogdmFsdWUodmFsdWUp
CiAgICAgICAgICwgdGFyZ2V0KHRhcmdldCkKICAgICB7CiAgICAgfQogICAgIAorICAgIHN0YXRp
YyBTd2l0Y2hDYXNlIHdpdGhCeXRlY29kZUluZGV4KExhenlKU1ZhbHVlIHZhbHVlLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4KQorICAgIHsKKyAgICAgICAgU3dpdGNoQ2FzZSByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC52YWx1ZSA9IHZhbHVlOworICAgICAgICByZXN1bHQudGFyZ2V0ID0gYml0d2lz
ZV9jYXN0PEJhc2ljQmxvY2sqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlSW5kZXgp
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgdGFy
Z2V0Qnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KHRhcmdldCk7IH0KKyAgICAKICAgICBMYXp5SlNWYWx1ZSB2YWx1ZTsKLSAgICBCbG9ja0luZGV4
IHRhcmdldDsKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQ7CiB9OwogCiBlbnVtIFN3aXRjaEtpbmQg
ewpAQCAtMTEzLDcgKzEyNSw3IEBAIHN0cnVjdCBTd2l0Y2hEYXRhIHsKICAgICB9CiAgICAgCiAg
ICAgVmVjdG9yPFN3aXRjaENhc2U+IGNhc2VzOwotICAgIEJsb2NrSW5kZXggZmFsbFRocm91Z2g7
CisgICAgQmFzaWNCbG9jayogZmFsbFRocm91Z2g7CiAgICAgU3dpdGNoS2luZCBraW5kOwogICAg
IHVuc2lnbmVkIHN3aXRjaFRhYmxlSW5kZXg7CiAgICAgYm9vbCBkaWRVc2VKdW1wVGFibGU7CkBA
IC03NDMsMjggKzc1NSwyOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5m
bzI7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0VGFrZW5CbG9ja0luZGV4KEJsb2NrSW5kZXgg
YmxvY2tJbmRleCkKKyAgICB2b2lkIHNldFRha2VuQmxvY2soQmFzaWNCbG9jayogYmxvY2spCiAg
ICAgewogICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7Ci0gICAgICAgIG1f
b3BJbmZvID0gYmxvY2tJbmRleDsKKyAgICAgICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihibG9jayk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0Tm90VGFrZW5CbG9ja0lu
ZGV4KEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB2b2lkIHNldE5vdFRha2VuQmxvY2soQmFz
aWNCbG9jayogYmxvY2spCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSk7Ci0gICAg
ICAgIG1fb3BJbmZvMiA9IGJsb2NrSW5kZXg7CisgICAgICAgIG1fb3BJbmZvMiA9IGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgQmxvY2tJbmRleCB0YWtl
bkJsb2NrSW5kZXgoKQorICAgIEJhc2ljQmxvY2sqIHRha2VuQmxvY2tJbmRleCgpCiAgICAgewog
ICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7Ci0gICAgICAgIHJldHVybiBt
X29wSW5mbzsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcElu
Zm8pOwogICAgIH0KICAgICAKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuQmxvY2tJbmRleCgpCisg
ICAgQmFzaWNCbG9jayogbm90VGFrZW5CbG9ja0luZGV4KCkKICAgICB7CiAgICAgICAgIEFTU0VS
VChpc0JyYW5jaCgpKTsKLSAgICAgICAgcmV0dXJuIG1fb3BJbmZvMjsKKyAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcEluZm8yKTsKICAgICB9CiAgICAgCiAgICAg
U3dpdGNoRGF0YSogc3dpdGNoRGF0YSgpCkBAIC03ODcsNyArNzk5LDcgQEAgc3RydWN0IE5vZGUg
ewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yKHVuc2ln
bmVkIGluZGV4KQorICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKICAg
ICB7CiAgICAgICAgIGlmIChpc1N3aXRjaCgpKSB7CiAgICAgICAgICAgICBpZiAoaW5kZXggPCBz
d2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbklu
amVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsOCArNjgsOCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
OyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0lu
ZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU2MSw4ICs1NjEsOCBAQCBwcml2YXRlOgogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0YoIlByb3BhZ2F0aW5nIHByZWRpY3Rpb25zIGZv
cndhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKICNlbmRpZgotICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsg
KytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRl
eCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwpAQCAtNTc4LDggKzU3
OCw4IEBAIHByaXZhdGU6CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQogICAgICAgICBkYXRhTG9nRigiUHJvcGFnYXRpbmcgcHJlZGljdGlvbnMgYmFja3dhcmQgWyV1
XVxuIiwgKyttX2NvdW50KTsKICNlbmRpZgotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0
KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9j
a3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFi
bGUpOwpAQCAtNzAzLDggKzcwMyw4IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyAr
K2kpCiAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldLmZpbmQoKS0+
Y2xlYXJWb3RlcygpOwotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0u
Z2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAg
aWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEFTU0VS
VChibG9jay0+aXNSZWFjaGFibGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MzUsMTIgKzQzNSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZU5vblBlCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
UGVlcGhvbGVCcmFuY2hOdWxsKEVkZ2Ugb3BlcmFuZCwgTm9kZSogYnJhbmNoTm9kZSwgYm9vbCBp
bnZlcnQpCiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJ
bmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJs
b2NrSW5kZXgoKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxv
Y2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxv
Y2soKTsKICAgICAKICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgaW52
ZXJ0ID0gIWludmVydDsKLSAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAg
QmFzaWNCbG9jayogdG1wID0gdGFrZW47CiAgICAgICAgIHRha2VuID0gbm90VGFrZW47CiAgICAg
ICAgIG5vdFRha2VuID0gdG1wOwogICAgIH0KQEAgLTQ5NSw3ICs0OTUsNyBAQCBib29sIFNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhCiB7CiAgICAgdW5zaWduZWQgYnJhbmNoSW5k
ZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICBpZiAoYnJhbmNoSW5kZXhJ
bkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5n
cmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxvY2spOworICAgICAg
ICBOb2RlKiBicmFuY2hOb2RlID0gbV9ibG9jay0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKIAog
ICAgICAgICBBU1NFUlQobm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOwogICAgICAgICAK
QEAgLTUxNiw4ICs1MTYsOCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNv
bXBhCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2go
Tm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24gY29uZCwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQogewotICAg
IEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBC
bG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7Cisg
ICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7CisgICAgQmFz
aWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CiAKICAgICBK
SVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21w
aWxlcjo6Tm9uWmVybzsKIApAQCAtNTI2LDcgKzUyNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAg
ICAgICAgY29uZCA9IEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCk7CiAgICAgICAgIGNhbGxSZXN1
bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6WmVybzsKLSAgICAgICAgQmxvY2tJbmRleCB0bXAg
PSB0YWtlbjsKKyAgICAgICAgQmFzaWNCbG9jayogdG1wID0gdGFrZW47CiAgICAgICAgIHRha2Vu
ID0gbm90VGFrZW47CiAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAgIH0KQEAgLTU4MCw3ICs1
ODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAKICAgICBq
dW1wKG5vdFRha2VuKTsKICAgICAKLSAgICBtX2luZGV4SW5CbG9jayA9IG1faml0LmdyYXBoKCku
bV9ibG9ja3NbbV9ibG9ja10tPnNpemUoKSAtIDE7CisgICAgbV9pbmRleEluQmxvY2sgPSBtX2Js
b2NrLT5zaXplKCkgLSAxOwogICAgIG1fY3VycmVudE5vZGUgPSBicmFuY2hOb2RlOwogfQogCkBA
IC02NjksMTQgKzY2OSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5v
blBlCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RF
cShOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCkKIHsKLSAgICBCbG9j
a0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJ
bmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJh
c2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxv
Y2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwogCiAgICAgLy8gVGhl
IGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAg
Ly8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQg
dGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KICAgICBpZiAodGFr
ZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgaW52ZXJ0ID0gIWludmVydDsKLSAgICAgICAg
QmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgQmFzaWNCbG9jayogdG1wID0gdGFrZW47
CiAgICAgICAgIHRha2VuID0gbm90VGFrZW47CiAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAg
IH0KQEAgLTE0NDUsOCArMTQ0NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmpl
Y3RUb09iamUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9P
YmplY3RPck90aGVyRXF1YWxpdHkoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCwgTm9k
ZSogYnJhbmNoTm9kZSkKIHsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS0+dGFr
ZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5v
dFRha2VuQmxvY2tJbmRleCgpOworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+
dGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90
VGFrZW5CbG9jaygpOwogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBs
ZWZ0Q2hpbGQpOwogICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCByaWdodENoaWxkLCBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24pOwpAQCAtMTczNyw3ICsxNzM3LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgIH0KIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSBub2RlVXNlLCBCbG9ja0luZGV4IHRh
a2VuLCBCbG9ja0luZGV4IG5vdFRha2VuKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVj
dE9yT3RoZXJCcmFuY2goRWRnZSBub2RlVXNlLCBCYXNpY0Jsb2NrKiB0YWtlbiwgQmFzaWNCbG9j
ayogbm90VGFrZW4pCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZVVzZSwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlz
KTsKQEAgLTE3OTQsOCArMTc5NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RP
ck90aGVyQnIKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBub2RlKQog
ewotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBC
bG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmFz
aWNCbG9jayogdGFrZW4gPSBub2RlLT50YWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90
VGFrZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrKCk7CiAKICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgewogICAgIGNhc2UgQm9vbGVhblVzZTogewpAQCAtMTgwNCw3ICsxODA0
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogCiAgICAgICAg
IGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICAgICAgY29uZGl0aW9uID0gTWFj
cm9Bc3NlbWJsZXI6Olplcm87Ci0gICAgICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwor
ICAgICAgICAgICAgQmFzaWNCbG9jayogdG1wID0gdGFrZW47CiAgICAgICAgICAgICB0YWtlbiA9
IG5vdFRha2VuOwogICAgICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgICAgIH0KQEAgLTE4
MjgsNyArMTgyOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAg
ICAgICAgICAgICAgICAgaW52ZXJ0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBCbG9ja0luZGV4
IHRtcCA9IHRha2VuOworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRtcCA9IHRha2VuOwog
ICAgICAgICAgICAgICAgIHRha2VuID0gbm90VGFrZW47CiAgICAgICAgICAgICAgICAgbm90VGFr
ZW4gPSB0bXA7CiAgICAgICAgICAgICB9CkBAIC0zMjE2LDggKzMyMTYsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBERkc6Okp1
bXA6IHsKLSAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUtPnRha2VuQmxvY2tJbmRleCgp
OwotICAgICAgICBqdW1wKHRha2VuKTsKKyAgICAgICAganVtcChub2RlLT50YWtlbkJsb2NrKCkp
OwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODQsMTIgKzM4NCwxMiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKEVkZ2Ugb3BlcmFuZCwgTm9kZSog
YnJhbmNoTm9kZSwgYm9vbCBpbnZlcnQpCiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5j
aE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFu
Y2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJy
YW5jaE5vZGUtPnRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5j
aE5vZGUtPm5vdFRha2VuQmxvY2soKTsKICAgICAKICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2Nr
KCkpIHsKICAgICAgICAgaW52ZXJ0ID0gIWludmVydDsKLSAgICAgICAgQmxvY2tJbmRleCB0bXAg
PSB0YWtlbjsKKyAgICAgICAgQmFzaWNCbG9jayogdG1wID0gdGFrZW47CiAgICAgICAgIHRha2Vu
ID0gbm90VGFrZW47CiAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAgIH0KQEAgLTQ0Myw3ICs0
NDMsNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhCiB7CiAgICAg
dW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAg
ICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgIE5vZGUqIGJy
YW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRl
eEluQmxvY2spOworICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9ibG9jay0+YXQoYnJhbmNo
SW5kZXhJbkJsb2NrKTsKIAogICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5hZGp1c3RlZFJl
ZkNvdW50KCkgPT0gMSk7CiAgICAgICAgIApAQCAtNDY0LDggKzQ2NCw4IEBAIGJvb2wgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGEKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBN
YWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9F
SkogaGVscGVyRnVuY3Rpb24pCiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUt
PnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2Rl
LT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5v
ZGUtPnRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUt
Pm5vdFRha2VuQmxvY2soKTsKIAogICAgIEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY2Fs
bFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpOb25aZXJvOwogCkBAIC00NzQsNyArNDc0
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIGlmICh0
YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICBjb25kID0gSklUQ29tcGlsZXI6OmludmVy
dChjb25kKTsKICAgICAgICAgY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpaZXJv
OwotICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAgICAgICBCYXNpY0Jsb2NrKiB0
bXAgPSB0YWtlbjsKICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKICAgICAgICAgbm90VGFrZW4g
PSB0bXA7CiAgICAgfQpAQCAtNTI2LDcgKzUyNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlUGVlcGgKIAogICAgIGp1bXAobm90VGFrZW4pOwogCi0gICAgbV9pbmRleElu
QmxvY2sgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5zaXplKCkgLSAxOworICAg
IG1faW5kZXhJbkJsb2NrID0gbV9ibG9jay0+c2l6ZSgpIC0gMTsKICAgICBtX2N1cnJlbnROb2Rl
ID0gYnJhbmNoTm9kZTsKIH0KIApAQCAtNjA3LDE0ICs2MDcsMTQgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSwgYm9v
bCBpbnZlcnQpCiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxv
Y2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtl
bkJsb2NrSW5kZXgoKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2Vu
QmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2Vu
QmxvY2soKTsKIAogICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8g
dGhlIHRha2VuIGJsb2NrLgogICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3
aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxs
IHRocm91Z2guCiAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGludmVy
dCA9ICFpbnZlcnQ7Ci0gICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CisgICAgICAgIEJh
c2ljQmxvY2sqIHRtcCA9IHRha2VuOwogICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwogICAgICAg
ICBub3RUYWtlbiA9IHRtcDsKICAgICB9CkBAIC0xNDY2LDggKzE0NjYsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2UgbGVmdENoaWxk
LCBFZGdlIHJpZ2h0Q2hpbGQsIE5vZGUqIGJyYW5jaE5vZGUpCiB7Ci0gICAgQmxvY2tJbmRleCB0
YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90
VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCYXNpY0Jsb2Nr
KiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RU
YWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKICAgICAKICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBvcDEodGhpcywgbGVmdENoaWxkKTsKICAgICBKU1ZhbHVlT3BlcmFuZCBvcDIo
dGhpcywgcmlnaHRDaGlsZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKQEAgLTE3NjQsNyAr
MTc2NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICB9
CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2Ug
bm9kZVVzZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbikKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2Ugbm9kZVVzZSwgQmFzaWNC
bG9jayogdGFrZW4sIEJhc2ljQmxvY2sqIG5vdFRha2VuKQogewogICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGVVc2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0xODE3LDggKzE4MTcsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRCcmFuY2goTm9kZSogbm9kZSkKIHsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS0+dGFr
ZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG5vZGUtPm5vdFRha2Vu
QmxvY2tJbmRleCgpOworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gbm9kZS0+dGFrZW5CbG9jaygp
OworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbm9kZS0+bm90VGFrZW5CbG9jaygpOwogICAg
IAogICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAgY2FzZSBPYmpl
Y3RPck90aGVyVXNlOiB7CkBAIC0xODMzLDcgKzE4MzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0QnJhbmNoKE5vZGUqIG5vCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh0YWtl
biA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICAgICAgICAgIGludmVydCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiB0bXAgPSB0YWtlbjsKICAgICAgICAgICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwog
ICAgICAgICAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAgICAgICAgICAgfQpAQCAtMTg2Myw3
ICsxODYzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkg
ewogICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6WmVybzsK
LSAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogdG1wID0gdGFrZW47CiAgICAgICAgICAgICAgICAgICAgIHRh
a2VuID0gbm90VGFrZW47CiAgICAgICAgICAgICAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTMxNjAsOCArMzE2MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIERGRzo6SnVtcDogewotICAg
ICAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgICAg
IGp1bXAodGFrZW4pOworICAgICAgICBqdW1wKG5vZGUtPnRha2VuQmxvY2soKSk7CiAgICAgICAg
IG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTUy
MzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyNCw3ICsyMjQsNyBAQCBKdW1wUmVwbGFjZW1lbnRXYXRjaHBv
aW50KiBTcGVjdWxhdGl2ZUpJCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb252ZXJ0TGFzdE9TUkV4
aXRUb0ZvcndhcmQoY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKIHsKICAgICBt
X2ppdC5qaXRDb2RlKCktPmxhc3RPU1JFeGl0KCkuY29udmVydFRvRm9yd2FyZCgKLSAgICAgICAg
bV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS5nZXQoKSwgbV9jdXJyZW50Tm9kZSwgbV9p
bmRleEluQmxvY2ssIHZhbHVlUmVjb3ZlcnkpOworICAgICAgICBtX2Jsb2NrLCBtX2N1cnJlbnRO
b2RlLCBtX2luZGV4SW5CbG9jaywgdmFsdWVSZWNvdmVyeSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3Vy
Y2UganNWYWx1ZVNvdXJjZSwgTm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRv
RmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKQEAgLTk5Myw3ICs5OTMs
NyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhCiB7CiAgICAgdW5z
aWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICBp
ZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgIE5vZGUqIGJyYW5j
aE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleElu
QmxvY2spOworICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9ibG9jay0+YXQoYnJhbmNoSW5k
ZXhJbkJsb2NrKTsKIAogICAgICAgICBBU1NFUlQobm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpID09
IDEpOwogICAgICAgICAKQEAgLTEwMTQsNyArMTAxNCw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlU3RyaWMKIHsKICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sg
PSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0g
VUlOVF9NQVgpIHsKLSAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9i
bG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CisgICAgICAgIE5vZGUqIGJy
YW5jaE5vZGUgPSBtX2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOwogCiAgICAgICAgIEFT
U0VSVChub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgIApAQCAtMTM3OSw4
ICsxMzc5LDggQEAgRlBSVGVtcG9yYXJ5OjpGUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2goTm9kZSogbm9k
ZSwgTm9kZSogYnJhbmNoTm9kZSwgSklUQ29tcGlsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kaXRp
b24pCiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRl
eCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2Nr
SW5kZXgoKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2so
KTsKICAgICAKICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CiAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQy
KCkpOwpAQCAtMTM5MSwxNCArMTM5MSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UGVlcEhvbGVEb3ViCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVj
dEVxdWFsaXR5KE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUpCiB7Ci0gICAgQmxvY2tJbmRl
eCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXgg
bm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCYXNpY0Js
b2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBu
b3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKIAogICAgIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpFcXVh
bDsKICAgICAKICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgY29uZGl0
aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsOwotICAgICAgICBCbG9ja0luZGV4IHRtcCA9
IHRha2VuOworICAgICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsKICAgICAgICAgdGFrZW4g
PSBub3RUYWtlbjsKICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgfQpAQCAtMTQ2OSwxNCAr
MTQ2OSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2goTm9kZSogbm9k
ZSwgTm9kZSogYnJhbmNoTm9kZSwgSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQogewotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2Nr
SW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5C
bG9ja0luZGV4KCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJs
b2NrKCk7CisgICAgQmxvY2tCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJs
b2NrKCk7CiAKICAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRo
ZSB0YWtlbiBibG9jay4KICAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0
aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0
aHJvdWdoLgogICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICBjb25kaXRp
b24gPSBKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmRpdGlvbik7Ci0gICAgICAgIEJsb2NrSW5kZXgg
dG1wID0gdGFrZW47CisgICAgICAgIEJhc2ljQmxvY2sqIHRtcCA9IHRha2VuOwogICAgICAgICB0
YWtlbiA9IG5vdFRha2VuOwogICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICB9CkBAIC0xNTA0
LDcgKzE1MDQsNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVCcmFuCiAg
ICAgLy8gRnVzZWQgY29tcGFyZSAmIGJyYW5jaC4KICAgICB1bnNpZ25lZCBicmFuY2hJbmRleElu
QmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgIGlmIChicmFuY2hJbmRleEluQmxv
Y2sgIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBo
KCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CisgICAgICAgIE5v
ZGUqIGJyYW5jaE5vZGUgPSBtX2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOwogCiAgICAg
ICAgIC8vIGRldGVjdFBlZXBIb2xlQnJhbmNoIGN1cnJlbnRseSBvbmx5IHBlcm1pdHMgdGhlIGJy
YW5jaCB0byBiZSB0aGUgdmVyeSBuZXh0IG5vZGUsCiAgICAgICAgIC8vIHNvIGNhbiBiZSBubyBp
bnRlcnZlbmluZyBub2RlcyB0byBhbHNvIHJlZmVyZW5jZSB0aGUgY29tcGFyZS4gCkBAIC0xNjI0
LDE0ICsxNjI0LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmJhaWwoKQogICAgIGNsZWFyR2Vu
ZXJhdGlvbkluZm8oKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Js
b2NrJiBibG9jaykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQog
ewogICAgIEFTU0VSVChtX2NvbXBpbGVPa2F5KTsKICAgICAKLSAgICBpZiAoIWJsb2NrLmlzUmVh
Y2hhYmxlKQorICAgIGlmICghbV9ibG9jaykKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlm
ICghYmxvY2suY2ZhSGFzVmlzaXRlZCkgeworICAgIEFTU0VSVChtX2Jsb2NrLT5pc1JlYWNoYWJs
ZSk7CisgICAgCisgICAgaWYgKCFtX2Jsb2NrLT5jZmFIYXNWaXNpdGVkKSB7CiAgICAgICAgIC8v
IERvbid0IGdlbmVyYXRlIGNvZGUgZm9yIGJhc2ljIGJsb2NrcyB0aGF0IGFyZSB1bnJlYWNoYWJs
ZSBhY2NvcmRpbmcgdG8gQ0ZBLgogICAgICAgICAvLyBCdXQgdG8gYmUgc3VyZSB0aGF0IG5vYm9k
eSBoYXMgZ2VuZXJhdGVkIGEganVtcCB0byB0aGlzIGJsb2NrLCBkcm9wIGluIGEKICAgICAgICAg
Ly8gYnJlYWtwb2ludCBoZXJlLgpAQCAtMTYzOSwyMCArMTY0MSwyMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBtX2ppdC5ibG9ja0hlYWRzKClbbV9ibG9ja10gPSBtX2ppdC5sYWJlbCgpOworICAgIG1faml0
LmJsb2NrSGVhZHMoKVttX2Jsb2NrLT5pbmRleF0gPSBtX2ppdC5sYWJlbCgpOwogI2lmIERGR19F
TkFCTEUoSklUX0JSRUFLX09OX0VWRVJZX0JMT0NLKQogICAgIG1faml0LmJyZWFrcG9pbnQoKTsK
ICNlbmRpZgogICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBkYXRhTG9n
RigiU2V0dGluZyB1cCBzdGF0ZSBmb3IgYmxvY2sgIyV1OiAiLCBtX2Jsb2NrKTsKKyAgICBkYXRh
TG9nKCJTZXR0aW5nIHVwIHN0YXRlIGZvciBibG9jayAiLCAqbV9ibG9jaywgIjogIik7CiAjZW5k
aWYKICAgICAKICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnJlc2V0
KCkpOwogICAgIAogICAgIG1faml0LmppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7CiAKLSAg
ICBBU1NFUlQobV9hcmd1bWVudHMuc2l6ZSgpID09IGJsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkFyZ3VtZW50cygpKTsKKyAgICBBU1NFUlQobV9hcmd1bWVudHMuc2l6ZSgpID09IG1fYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFZhbHVlU291
cmNlIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwogICAgICAgICBt
X2FyZ3VtZW50c1tpXSA9IHZhbHVlU291cmNlOwpAQCAtMTY2MCwxMSArMTY2MiwxMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgfQogICAgIAogICAgIG1f
c3RhdGUucmVzZXQoKTsKLSAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jaygmYmxvY2spOworICAg
IG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1fYmxvY2spOwogICAgIAotICAgIEFTU0VSVChtX3Zh
cmlhYmxlcy5zaXplKCkgPT0gYmxvY2sudmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkp
OworICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5zaXplKCkgPT0gbV9ibG9jay0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJp
YWJsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLnZhcmlhYmxl
c0F0SGVhZC5sb2NhbChpKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5sb2NhbChpKTsKICAgICAgICAgVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2U7CiAgICAg
ICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoU291
cmNlSXNEZWFkKTsKQEAgLTE2OTAsOCArMTY5Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoQmFzaWNCbG9jayYKICAgICBkYXRhTG9nRigiXG4iKTsKICNlbmRpZgogCi0gICAgZm9y
IChtX2luZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK21f
aW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9ja1ttX2luZGV4SW5C
bG9ja107CisgICAgZm9yIChtX2luZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgbV9i
bG9jay0+c2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7CisgICAgICAgIG1fY3VycmVudE5vZGUg
PSBtX2Jsb2NrLT5hdChtX2luZGV4SW5CbG9jayk7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBt
YXkgaGF2ZSBoaXMgYSBjb250cmFkaWN0aW9uIHRoYXQgdGhlIENGQSB3YXMgYXdhcmUgb2YgYnV0
IHRoYXQgdGhlIEpJVAogICAgICAgICAvLyBkaWRuJ3QgY2F1c2UgZGlyZWN0bHkuCkBAIC0xODcx
LDExICsxODczLDEwIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogICAgIGNoZWNr
QXJndW1lbnRUeXBlcygpOwogCiAgICAgQVNTRVJUKCFtX2N1cnJlbnROb2RlKTsKLSAgICBmb3Ig
KG1fYmxvY2sgPSAwOyBtX2Jsb2NrIDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7ICsr
bV9ibG9jaykgewotICAgICAgICBtX2ppdC5zZXRGb3JCbG9jayhtX2Jsb2NrKTsKLSAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLmdldCgp
OwotICAgICAgICBpZiAoYmxvY2spCi0gICAgICAgICAgICBjb21waWxlKCpibG9jayk7CisgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgo
KS5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIG1faml0LnNldEZvckJsb2Nr
KGJsb2NrSW5kZXgpOworICAgICAgICBtX2Jsb2NrID0gbV9qaXQuZ3JhcGgoKS5ibG9jayhibG9j
a0luZGV4KTsKKyAgICAgICAgY29tcGlsZUN1cnJlbnRCbG9jaygpOwogICAgIH0KICAgICBsaW5r
QnJhbmNoZXMoKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE4ODMsOCArMTg4NCw4IEBAIGJvb2wg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjcmVhdGVP
U1JFbnRyaWVzKCkKIHsKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0g
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1tibG9ja0lu
ZGV4XS5nZXQoKTsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5k
ZXggPCBtX2ppdC5ncmFwaCgpLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJsb2NrKGJsb2NrSW5kZXgpOwogICAg
ICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmICghYmxv
Y2stPmlzT1NSVGFyZ2V0KQpAQCAtMTg5OSw4ICsxOTAwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y3JlYXRlT1NSRW50cmllcygpCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5rT1NSRW50cmll
cyhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogewogICAgIHVuc2lnbmVkIG9zckVudHJ5SW5kZXgg
PSAwOwotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1f
aml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgp
OworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1faml0
LmdyYXBoKCkubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1faml0LmdyYXBoKCkuYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIGlmICgh
YmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCFibG9jay0+aXNPU1JU
YXJnZXQpCkBAIC0zNjYzLDE2ICszNjY0LDE2IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVTdHJpY3RFcUZvckMKICAgICAKICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBk
ZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlO
VF9NQVgpIHsKLSAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9j
a3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7Ci0gICAgICAgIEJsb2NrSW5kZXgg
dGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICAgICAgQmxvY2tJbmRl
eCBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgICAgICBO
b2RlKiBicmFuY2hOb2RlID0gbV9ibG9jay0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKKyAgICAg
ICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7CisgICAgICAg
IEJsb2NrQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwogICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNy
b0Fzc2VtYmxlcjo6RXF1YWw7CiAgICAgICAgIAogICAgICAgICAvLyBUaGUgYnJhbmNoIGluc3Ry
dWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRoZSB0YWtlbiBibG9jay4KICAgICAgICAgLy8gSWYgdGFr
ZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5j
aCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KICAgICAgICAgaWYgKHRha2VuID09
IG5leHRCbG9jaygpKSB7CiAgICAgICAgICAgICBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWw7Ci0gICAgICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAgICAgICAg
ICAgQmFzaWNCbG9jayogdG1wID0gdGFrZW47CiAgICAgICAgICAgICB0YWtlbiA9IG5vdFRha2Vu
OwogICAgICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgICAgIH0KQEAgLTM3MzUsNyArMzcz
Niw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QKICAgICBjYXNl
IEludDMyVXNlOiB7CiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVj
dFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlO
VF9NQVgpIHsKLSAgICAgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1f
YmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxvY2spOworICAgICAgICAgICAgTm9k
ZSogYnJhbmNoTm9kZSA9IG1fYmxvY2stPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CiAgICAgICAg
ICAgICBjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCk7CiAgICAgICAgICAgICB1c2Uobm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICAgICAgdXNlKG5vZGUtPmNoaWxkMigpKTsKQEAgLTM3NTAsNyArMzc1MSw3IEBAIGJvb2wg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QKICAgICBjYXNlIE51bWJlclVzZTog
ewogICAgICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJy
YW5jaCgpOwogICAgICAgICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0g
ICAgICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Js
b2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIE5vZGUqIGJyYW5jaE5v
ZGUgPSBtX2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOwogICAgICAgICAgICAgY29tcGls
ZVBlZXBIb2xlRG91YmxlQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVFcXVhbCk7CiAgICAgICAgICAgICB1c2Uobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgdXNlKG5vZGUtPmNoaWxkMigpKTsKQEAgLTM3NzUsNyArMzc3Niw3IEBAIGJvb2wgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QKICAgICBjYXNlIE9iamVjdFVzZTogewogICAg
ICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgp
OwogICAgICAgICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAg
ICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+
YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBt
X2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOwogICAgICAgICAgICAgY29tcGlsZVBlZXBI
b2xlT2JqZWN0RXF1YWxpdHkobm9kZSwgYnJhbmNoTm9kZSk7CiAgICAgICAgICAgICB1c2Uobm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgdXNlKG5vZGUtPmNoaWxkMigpKTsKQEAgLTQxMzAs
MTYgKzQxMzEsMTYgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cEV4ZWMoTgog
ICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7
CiAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayA9PSBVSU5UX01BWCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21f
YmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxvY2spOworICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBt
X2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOwogICAgIEFTU0VSVChub2RlLT5hZGp1c3Rl
ZFJlZkNvdW50KCkgPT0gMSk7CiAKLSAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS0+
dGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUt
Pm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrQmxvY2sqIHRha2VuID0gYnJhbmNoTm9k
ZS0+dGFrZW5CbG9jaygpOworICAgIEJsb2NrQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+
bm90VGFrZW5CbG9jaygpOwogICAgIAogICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7CiAgICAgaWYg
KHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGludmVydCA9IHRydWU7Ci0gICAgICAg
IEJsb2NrSW5kZXggdG1wID0gdGFrZW47CisgICAgICAgIEJhc2ljQmxvY2sqIHRtcCA9IHRha2Vu
OwogICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwogICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAg
ICB9CkBAIC01MTc2LDcgKzUxNzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNo
KE5vZGUqIG5vCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6YWRkQnJhbmNoKGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYg
anVtcCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFkZEJy
YW5jaChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXAsIEJhc2ljQmxvY2sqIGRl
c3RpbmF0aW9uKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IGp1bXAuanVtcHMoKS5zaXplKCk7
IGktLTspCiAgICAgICAgIGFkZEJyYW5jaChqdW1wLmp1bXBzKClbaV0sIGRlc3RpbmF0aW9uKTsK
QEAgLTUxODYsNyArNTE4Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtCcmFuY2hlcygp
CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2JyYW5jaGVzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIEJyYW5jaFJlY29yZCYgYnJhbmNoID0gbV9icmFuY2hlc1tpXTsKLSAgICAgICAg
YnJhbmNoLmp1bXAubGlua1RvKG1faml0LmJsb2NrSGVhZHMoKVticmFuY2guZGVzdGluYXRpb25d
LCAmbV9qaXQpOworICAgICAgICBicmFuY2guanVtcC5saW5rVG8obV9qaXQuYmxvY2tIZWFkcygp
W2JyYW5jaC5kZXN0aW5hdGlvbi0+aW5kZXhdLCAmbV9qaXQpOwogICAgIH0KIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNp
b24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksMTIgKzExOSwxMiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBjcmVhdGVPU1JFbnRyaWVzKCk7CiAgICAgdm9pZCBsaW5rT1NSRW50cmllcyhMaW5rQnVmZmVy
Jik7CiAKLSAgICBCbG9ja0luZGV4IG5leHRCbG9jaygpCisgICAgQmFzaWNCbG9jayogbmV4dEJs
b2NrKCkKICAgICB7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCByZXN1bHQgPSBtX2Jsb2NrICsg
MTsgOyByZXN1bHQrKykgewotICAgICAgICAgICAgaWYgKHJlc3VsdCA+PSBtX2ppdC5ncmFwaCgp
Lm1fYmxvY2tzLnNpemUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9CbG9jazsKLSAgICAg
ICAgICAgIGlmIChtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW3Jlc3VsdF0pCisgICAgICAgIGZvciAo
QmxvY2tJbmRleCByZXN1bHRJbmRleCA9IG1fYmxvY2stPmluZGV4ICsgMTsgOyByZXN1bHRJbmRl
eCsrKSB7CisgICAgICAgICAgICBpZiAocmVzdWx0SW5kZXggPj0gbV9qaXQuZ3JhcGgoKS5udW1C
bG9ja3MoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmIChtX2pp
dC5ncmFwaCgpLmJsb2NrKHJlc3VsdEluZGV4KSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICB9CiAgICAgfQpAQCAtMzQ0LDcgKzM0NCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNvbXBpbGUoTm9kZSopOwogICAgIHZvaWQgbm90aWNlT1NSQmlydGgoTm9kZSopOwogICAg
IHZvaWQgYmFpbCgpOwotICAgIHZvaWQgY29tcGlsZShCYXNpY0Jsb2NrJik7CisgICAgdm9pZCBj
b21waWxlQ3VycmVudEJsb2NrKCk7CiAKICAgICB2b2lkIGNoZWNrQXJndW1lbnRUeXBlcygpOwog
CkBAIC0xNzM4LDc0ICsxNzM4LDc0IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKICAgICAKLSAg
ICB2b2lkIGJyYW5jaERvdWJsZShKSVRDb21waWxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmQsIEZQ
UlJlZyBsZWZ0LCBGUFJSZWcgcmlnaHQsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgdm9p
ZCBicmFuY2hEb3VibGUoSklUQ29tcGlsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kLCBGUFJSZWcg
bGVmdCwgRlBSUmVnIHJpZ2h0LCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAg
ICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoRG91YmxlKGNvbmQsIGxlZnQsIHJpZ2h0
KSwgZGVzdGluYXRpb24pOwogICAgIH0KICAgICAKLSAgICB2b2lkIGJyYW5jaERvdWJsZU5vblpl
cm8oRlBSUmVnIHZhbHVlLCBGUFJSZWcgc2NyYXRjaCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikK
KyAgICB2b2lkIGJyYW5jaERvdWJsZU5vblplcm8oRlBSUmVnIHZhbHVlLCBGUFJSZWcgc2NyYXRj
aCwgQmFzaWNCbG9jayogZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICByZXR1cm4gYWRkQnJh
bmNoKG1faml0LmJyYW5jaERvdWJsZU5vblplcm8odmFsdWUsIHNjcmF0Y2gpLCBkZXN0aW5hdGlv
bik7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci0g
ICAgdm9pZCBicmFuY2gzMihKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBU
IGxlZnQsIFUgcmlnaHQsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgdm9pZCBicmFuY2gz
MihKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBUIGxlZnQsIFUgcmlnaHQs
IEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZEJyYW5j
aChtX2ppdC5icmFuY2gzMihjb25kLCBsZWZ0LCByaWdodCksIGRlc3RpbmF0aW9uKTsKICAgICB9
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLSAgICB2b2lkIGJy
YW5jaFRlc3QzMihKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUsIFUg
bWFzaywgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB2b2lkIGJyYW5jaFRlc3QzMihKSVRD
b21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUsIFUgbWFzaywgQmFzaWNCbG9j
ayogZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJy
YW5jaFRlc3QzMihjb25kLCB2YWx1ZSwgbWFzayksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAg
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIGJyYW5jaFRlc3QzMihKSVRDb21w
aWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUsIEJsb2NrSW5kZXggZGVzdGluYXRp
b24pCisgICAgdm9pZCBicmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBj
b25kLCBUIHZhbHVlLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKGNvbmQsIHZhbHVlKSwgZGVzdGluYXRp
b24pOwogICAgIH0KICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+Ci0gICAgdm9pZCBicmFuY2g2NChKSVRDb21waWxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbiBjb25kLCBUIGxlZnQsIFUgcmlnaHQsIEJsb2NrSW5kZXggZGVzdGluYXRp
b24pCisgICAgdm9pZCBicmFuY2g2NChKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBj
b25kLCBUIGxlZnQsIFUgcmlnaHQsIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2g2NChjb25kLCBsZWZ0LCByaWdodCks
IGRlc3RpbmF0aW9uKTsKICAgICB9CiAjZW5kaWYKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPgotICAgIHZvaWQgYnJhbmNoOChKSVRDb21waWxlcjo6UmVsYXRpb25h
bENvbmRpdGlvbiBjb25kLCBUIGxlZnQsIFUgcmlnaHQsIEJsb2NrSW5kZXggZGVzdGluYXRpb24p
CisgICAgdm9pZCBicmFuY2g4KEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQs
IFQgbGVmdCwgVSByaWdodCwgQmFzaWNCbG9jayogZGVzdGluYXRpb24pCiAgICAgewogICAgICAg
ICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaDgoY29uZCwgbGVmdCwgcmlnaHQpLCBkZXN0
aW5hdGlvbik7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+Ci0gICAgdm9pZCBicmFuY2hQdHIoSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZCwgVCBsZWZ0LCBVIHJpZ2h0LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAgIHZvaWQg
YnJhbmNoUHRyKEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFQgbGVmdCwg
VSByaWdodCwgQmFzaWNCbG9jayogZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICByZXR1cm4g
YWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihjb25kLCBsZWZ0LCByaWdodCksIGRlc3RpbmF0aW9u
KTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLSAg
ICB2b2lkIGJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kLCBU
IHZhbHVlLCBVIG1hc2ssIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgdm9pZCBicmFuY2hU
ZXN0UHRyKEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCwgVCB2YWx1ZSwgVSBtYXNr
LCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRCcmFu
Y2gobV9qaXQuYnJhbmNoVGVzdFB0cihjb25kLCB2YWx1ZSwgbWFzayksIGRlc3RpbmF0aW9uKTsK
ICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIGJyYW5jaFRl
c3RQdHIoSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBCbG9ja0lu
ZGV4IGRlc3RpbmF0aW9uKQorICAgIHZvaWQgYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6UmVz
dWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUsIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0UHRyKGNvbmQsIHZh
bHVlKSwgZGVzdGluYXRpb24pOwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPgotICAgIHZvaWQgYnJhbmNoVGVzdDgoSklUQ29tcGlsZXI6OlJlc3VsdENv
bmRpdGlvbiBjb25kLCBUIHZhbHVlLCBVIG1hc2ssIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisg
ICAgdm9pZCBicmFuY2hUZXN0OChKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQg
dmFsdWUsIFUgbWFzaywgQmFzaWNCbG9jayogZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBy
ZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3Q4KGNvbmQsIHZhbHVlLCBtYXNrKSwgZGVz
dGluYXRpb24pOwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZv
aWQgYnJhbmNoVGVzdDgoSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVl
LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAgIHZvaWQgYnJhbmNoVGVzdDgoSklUQ29tcGls
ZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlv
bikKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoY29u
ZCwgdmFsdWUpLCBkZXN0aW5hdGlvbik7CiAgICAgfQpAQCAtMTgxNCw3ICsxODE0LDcgQEAgcHVi
bGljOgogICAgICAgICBBdEZhbGxUaHJvdWdoUG9pbnQsCiAgICAgICAgIEZvcmNlSnVtcAogICAg
IH07Ci0gICAgdm9pZCBqdW1wKEJsb2NrSW5kZXggZGVzdGluYXRpb24sIEZhbGxUaHJvdWdoTW9k
ZSBmYWxsVGhyb3VnaE1vZGUgPSBBdEZhbGxUaHJvdWdoUG9pbnQpCisgICAgdm9pZCBqdW1wKEJh
c2ljQmxvY2sqIGRlc3RpbmF0aW9uLCBGYWxsVGhyb3VnaE1vZGUgZmFsbFRocm91Z2hNb2RlID0g
QXRGYWxsVGhyb3VnaFBvaW50KQogICAgIHsKICAgICAgICAgaWYgKGRlc3RpbmF0aW9uID09IG5l
eHRCbG9jaygpCiAgICAgICAgICAgICAmJiBmYWxsVGhyb3VnaE1vZGUgPT0gQXRGYWxsVGhyb3Vn
aFBvaW50KQpAQCAtMTgyMiwxMSArMTgyMiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGFkZEJyYW5j
aChtX2ppdC5qdW1wKCksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRC
cmFuY2goY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIGp1bXAsIEJsb2NrSW5kZXggZGVzdGlu
YXRpb24pCisgICAgdm9pZCBhZGRCcmFuY2goY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIGp1
bXAsIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgbV9icmFuY2hlcy5h
cHBlbmQoQnJhbmNoUmVjb3JkKGp1bXAsIGRlc3RpbmF0aW9uKSk7CiAgICAgfQotICAgIHZvaWQg
YWRkQnJhbmNoKGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcCwgQmxvY2tJbmRl
eCBkZXN0aW5hdGlvbik7CisgICAgdm9pZCBhZGRCcmFuY2goY29uc3QgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0JiBqdW1wLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbik7CiAKICAgICB2b2lkIGxp
bmtCcmFuY2hlcygpOwogCkBAIC0xODcyLDEzICsxODcyLDEzIEBAIHB1YmxpYzoKICAgICB2b2lk
IGNvbXBpbGVMb2dpY2FsTm90KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTdHJpbmdFcXVhbGl0
eShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlU3RyaW5nSWRlbnRFcXVhbGl0eShOb2RlKik7Ci0g
ICAgdm9pZCBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChFZGdlIHZhbHVlLCBCbG9ja0luZGV4IHRh
a2VuLCBCbG9ja0luZGV4IG5vdFRha2VuKTsKKyAgICB2b2lkIGVtaXRPYmplY3RPck90aGVyQnJh
bmNoKEVkZ2UgdmFsdWUsIEJhc2ljQmxvY2sqIHRha2VuLCBCYXNpY0Jsb2NrKiBub3RUYWtlbik7
CiAgICAgdm9pZCBlbWl0QnJhbmNoKE5vZGUqKTsKICAgICAKICAgICBzdHJ1Y3QgU3RyaW5nU3dp
dGNoQ2FzZSB7CiAgICAgICAgIFN0cmluZ1N3aXRjaENhc2UoKSB7IH0KICAgICAgICAgCi0gICAg
ICAgIFN0cmluZ1N3aXRjaENhc2UoU3RyaW5nSW1wbCogc3RyaW5nLCBCbG9ja0luZGV4IHRhcmdl
dCkKKyAgICAgICAgU3RyaW5nU3dpdGNoQ2FzZShTdHJpbmdJbXBsKiBzdHJpbmcsIEJhc2ljQmxv
Y2sqIHRhcmdldCkKICAgICAgICAgICAgIDogc3RyaW5nKHN0cmluZykKICAgICAgICAgICAgICwg
dGFyZ2V0KHRhcmdldCkKICAgICAgICAgewpAQCAtMTg4Nyw3ICsxODg3LDcgQEAgcHVibGljOgog
ICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBTdHJpbmdTd2l0Y2hDYXNlJiBvdGhlcikgY29u
c3Q7CiAgICAgICAgIAogICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmc7Ci0gICAgICAgIEJsb2Nr
SW5kZXggdGFyZ2V0OworICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXQ7CiAgICAgfTsKICAgICAK
ICAgICB2b2lkIGVtaXRTd2l0Y2hJbnRKdW1wKFN3aXRjaERhdGEqLCBHUFJSZWcgdmFsdWUsIEdQ
UlJlZyBzY3JhdGNoKTsKQEAgLTIxNTIsNyArMjE1Miw3IEBAIHB1YmxpYzoKICAgICBKSVRDb21w
aWxlciYgbV9qaXQ7CiAKICAgICAvLyBUaGUgY3VycmVudCBub2RlIGJlaW5nIGdlbmVyYXRlZC4K
LSAgICBCbG9ja0luZGV4IG1fYmxvY2s7CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICBO
b2RlKiBtX2N1cnJlbnROb2RlOwogICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fc3BlY3VsYXRp
b25EaXJlY3Rpb247CiAgICAgYm9vbCBtX2NhbkV4aXQ7CkBAIC0yMTY1LDE0ICsyMTY1LDE0IEBA
IHB1YmxpYzoKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6OkxhYmVsPiBtX29zckVudHJ5SGVh
ZHM7CiAgICAgCiAgICAgc3RydWN0IEJyYW5jaFJlY29yZCB7Ci0gICAgICAgIEJyYW5jaFJlY29y
ZChNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAg
ICAgICBCcmFuY2hSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcCwgQmFzaWNCbG9jayog
ZGVzdGluYXRpb24pCiAgICAgICAgICAgICA6IGp1bXAoanVtcCkKICAgICAgICAgICAgICwgZGVz
dGluYXRpb24oZGVzdGluYXRpb24pCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGp1bXA7Ci0gICAgICAgIEJsb2NrSW5kZXggZGVzdGluYXRpb247
CisgICAgICAgIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uOwogICAgIH07CiAgICAgVmVjdG9yPEJy
YW5jaFJlY29yZCwgOD4gbV9icmFuY2hlczsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsMTQgKzIy
NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIG11c3QgZXhpc3Qg
YSBwcmVkZWNlc3NvciBibG9jayB0aGF0IGhhcyB0aGlzIG5vZGUgaW5kZXggaW4KICAgICAgICAg
ICAgICAgICAgICAgLy8gaXRzIHRhaWwgdmFyaWFibGVzLgogICAgICAgICAgICAgICAgICAgICBi
b29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9
IDA7IGsgPCBibG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2spIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZXZCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxv
Y2stPm1fcHJlZGVjZXNzb3JzW2tdXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNz
b3JzW2tdKSwgcHJldkJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgayA9IDA7IGsgPCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytrKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmV2QmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2Jsb2NrLT5wcmVkZWNlc3NvcnNba11dLmdldCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKEJsb2NrLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldkJs
b2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChCbG9jaywgYmxvY2stPnBy
ZWRlY2Vzc29yc1trXSksIHByZXZCbG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgTm9kZSogcHJldk5vZGUgPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVy
YW5kKGxvY2FsKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBQaGkg
dGhhdCBpcyBub3QgcmVmZXJyaW5nIHRvICp0aGlzKiBibG9jayB0aGVuIGFsbCBwcmVkZWNlc3Nv
cnMKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG11c3QgaGF2ZSB0aGF0IGxvY2FsIGF2YWls
YWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2tJbmRl
eCwgQmxvY2ssIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2tJbmRleCwgQmxvY2ssIGJsb2Nr
LT5wcmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKHByZXZOb2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdl
dExvY2FsOgogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKQEAgLTI0MywxMSAr
MjQzLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNb
a10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2
Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5v
ZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNldExv
Y2FsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gTW92
SGludAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IE1v
dkhpbnRBbmRDaGVjawpAQCAtMjU5LDcgKzI1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgaXQgY2Fubm90IHJlZmVyIGludG8gdGhp
cyBibG9jay4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2st
Pm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdl
Lm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9j
ay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdl
Lm5vZGUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGZvdW5kKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206098</attachid>
            <date>2013-07-04 09:36:32 -0700</date>
            <delta_ts>2013-07-04 12:01:31 -0700</delta_ts>
            <desc>almost done, I think</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>142494</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCB2b2lkIEFic3Ry
YWN0U3RhdGU6OmJlZ2luQmFzaWNCbG9jayhCYXNpCiAKIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5p
dGlhbGl6ZShHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgQmFzaWNCbG9jayogcm9vdCA9IGdyYXBoLm1f
YmxvY2tzWzBdLmdldCgpOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBncmFwaC5ibG9jaygwKTsK
ICAgICByb290LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKICAgICByb290LT5jZmFIYXNWaXNp
dGVkID0gZmFsc2U7CiAgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKQEAgLTEx
OCw4ICsxMTgsOCBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdyCiAg
ICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKICAgICAgICAg
cm9vdC0+dmFsdWVzQXRUYWlsLmxvY2FsKGkpLmNsZWFyKCk7CiAgICAgfQotICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gMSA7IGJsb2NrSW5kZXggPCBncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLm1f
YmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMSA7IGJsb2NrSW5kZXggPCBncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAg
ICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCFibG9j
ay0+aXNSZWFjaGFibGUpCkBAIC0xODAyLDI0ICsxODAyLDI0IEBAIGlubGluZSBib29sIEFic3Ry
YWN0U3RhdGU6Om1lcmdlVG9TdWNjZXMKICAgICBjYXNlIEp1bXA6IHsKICAgICAgICAgQVNTRVJU
KGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9u
KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRh
dGFMb2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwtPnRha2Vu
QmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2Nr
ICIsICp0ZXJtaW5hbC0+dGFrZW5CbG9jaygpLCAiLlxuIik7CiAjZW5kaWYKLSAgICAgICAgcmV0
dXJuIG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2Nr
SW5kZXgoKV0uZ2V0KCkpOworICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgdGVybWlu
YWwtPnRha2VuQmxvY2soKSk7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEJyYW5jaDogewog
ICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uICE9IEludmFsaWRC
cmFuY2hEaXJlY3Rpb24pOwogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICNpZiBERkdf
RU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAg
ICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwtPnRha2VuQmxvY2tJbmRleCgp
KTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICIsICp0ZXJtaW5h
bC0+dGFrZW5CbG9jaygpLCAiLlxuIik7CiAjZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxvY2st
PmNmYUJyYW5jaERpcmVjdGlvbiAhPSBUYWtlRmFsc2UpCi0gICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2NrSW5k
ZXgoKV0uZ2V0KCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCB0
ZXJtaW5hbC0+dGFrZW5CbG9jaygpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1
LlxuIiwgdGVybWluYWwtPm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZygi
ICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICIsICp0ZXJtaW5hbC0+bm90VGFrZW5CbG9jaygpLCAi
LlxuIik7CiAjZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlv
biAhPSBUYWtlVHJ1ZSkKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywg
Z3JhcGgubV9ibG9ja3NbdGVybWluYWwtPm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIHRlcm1pbmFsLT5ub3RUYWtl
bkJsb2NrKCkpOwogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CiAgICAgICAgIApAQCAt
MTgyOCw5ICsxODI4LDkgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nl
cwogICAgICAgICAvLyB3ZSdyZSBub3QuIEhvd2V2ZXIgSSBzb21laG93IGRvdWJ0IHRoYXQgdGhp
cyB3aWxsIGV2ZXIgYmUgYSBiaWcgZGVhbC4KICAgICAgICAgQVNTRVJUKGJhc2ljQmxvY2stPmNm
YUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsKICAgICAgICAgU3dp
dGNoRGF0YSogZGF0YSA9IHRlcm1pbmFsLT5zd2l0Y2hEYXRhKCk7Ci0gICAgICAgIGJvb2wgY2hh
bmdlZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW2RhdGEtPmZhbGxUaHJvdWdo
XS5nZXQoKSk7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGRhdGEt
PmZhbGxUaHJvdWdoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6
ZSgpOyBpLS07KQotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBncmFw
aC5tX2Jsb2Nrc1tkYXRhLT5jYXNlc1tpXS50YXJnZXRdLmdldCgpKTsKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKICAgICAg
ICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQyLDggKzE0Miw4IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIC8vIEZpZ3VyZSBvdXQg
d2hpY2ggdmFyaWFibGVzIGFyZSBsaXZlLCB1c2luZyBhIGNvbnNlcnZhdGl2ZSBhcHByb3hpbWF0
aW9uIG9mCiAgICAgICAgIC8vIGxpdmVuZXNzLgotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9j
a0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9j
a3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewor
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwg
YmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKQEAgLTE2NCw4ICsxNjQsOCBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIHVzZWQgb25seSBmb3IgR2V0QnlWYWwgYW5kIEdldEFycmF5TGVuZ3Ro
IGFjY2Vzc2VzLiBBdCB0aGUgc2FtZSB0aW1lLAogICAgICAgICAvLyBpZGVudGlmeSB1c2VzIG9m
IENyZWF0ZUFyZ3VtZW50cyB0aGF0IGFyZSBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBhcmd1bWVu
dHMKICAgICAgICAgLy8gYmVpbmcgYWxpYXNlZCBvbmx5IHRvIHZhcmlhYmxlcyB0aGF0IHNhdGlz
ZnkgdGhlc2UgY29uc3RyYWludHMuCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgp
IHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+
c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewpAQCAtMzUyLDggKzM1Miw4IEBAIHB1YmxpYzoKICAg
ICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhcyByZXF1aXJpbmcgY3JlYXRpb24uIFRoaXMgaXMgYSBw
cm9wZXJ0eSBvZiBTZXRMb2NhbHMgdG8KICAgICAgICAgLy8gdmFyaWFibGVzIHRoYXQgYXJlIG5l
aXRoZXIgdGhlIGNvcnJlY3QgYXJndW1lbnRzIHJlZ2lzdGVyIG5vciBhcmUgbWFya2VkIGFzCiAg
ICAgICAgIC8vIGJlaW5nIGFyZ3VtZW50cy1hbGlhc2VkLgotICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsg
KytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRl
eCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJs
b2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKQEAgLTQyOCw4ICs0MjgsOCBA
QCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1f
Z3JhcGgpOwogICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewot
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5k
ZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm51bUJsb2NrczsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgp
OyBpbmRleEluQmxvY2srKykgewpAQCAtNjYxLDggKzY2MSw4IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJs
b2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5C
bG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDggKzQ0LDggQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkK
ICAgICB7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
KyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJs
b2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTUyMzM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDExICs0MCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAK
IGNsYXNzIEdyYXBoOwogCi10eXBlZGVmIFZlY3RvciA8QmxvY2tJbmRleCwgMj4gUHJlZGVjZXNz
b3JMaXN0OwordHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsK
IAotc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZSosIDg+IHsKK3N0cnVjdCBCYXNpY0Js
b2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2NrPiwgVmVjdG9yPE5vZGUqLCA4PiB7CiAgICAgQmFz
aWNCbG9jayh1bnNpZ25lZCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVu
c2lnbmVkIG51bUxvY2FscykKICAgICAgICAgOiBieXRlY29kZUJlZ2luKGJ5dGVjb2RlQmVnaW4p
CisgICAgICAgICwgaW5kZXgoTm9CbG9jaykKICAgICAgICAgLCBpc09TUlRhcmdldChmYWxzZSkK
ICAgICAgICAgLCBjZmFIYXNWaXNpdGVkKGZhbHNlKQogICAgICAgICAsIGNmYVNob3VsZFJldmlz
aXQoZmFsc2UpCkBAIC03NCw2ICs3NSwxMyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxO
b2RlKiwgOD4gewogICAgICAgICB2YWx1ZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fs
cyk7CiAgICAgfQogICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rl
cy5zaXplKCk7IH0KKyAgICBOb2RlKiBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rl
c1tpXTsgfQorICAgIE5vZGUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0
KGkpOyB9CisgICAgTm9kZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIGF0KHNpemUoKSAtIDEpOyB9
CisgICAgCisgICAgdm9pZCBhcHBlbmQoTm9kZSogbm9kZSkgeyBtX25vZGVzLmFwcGVuZChub2Rl
KTsgfQorICAgIAogICAgIHNpemVfdCBudW1Ob2RlcygpIGNvbnN0IHsgcmV0dXJuIHBoaXMuc2l6
ZSgpICsgc2l6ZSgpOyB9CiAgICAgTm9kZSogbm9kZShzaXplX3QgaSkgY29uc3QKICAgICB7CkBA
IC0xMDEsMTUgKzEwOSwzMyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlKiwgOD4g
ewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAorICAgIHVuc2lnbmVkIG51bVN1
Y2Nlc3NvcnMoKSB7IHJldHVybiBsYXN0KCktPm51bVN1Y2Nlc3NvcnMoKTsgfQorICAgIAorICAg
IEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBsYXN0KCktPnN1Y2Nlc3NvcihpbmRleCk7CisgICAgfQorICAgIEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvckZvckNvbmRpdGlvbihib29sIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIHJldHVy
biBsYXN0KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOworICAgIH0KKwogI2Rl
ZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5
cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKICAg
ICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhcHBlbmROb2RlKEdy
YXBoJiwgU3BlY3VsYXRlZFR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CiAgICAg
REZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCiAj
dW5kZWYgREZHX0RFRklORV9BUFBFTkRfTk9ERQogICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KCIjIiwgaW5kZXgpOwor
ICAgIH0KKyAgICAKICAgICAvLyBUaGlzIHZhbHVlIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgYmxv
Y2sgbGlua2luZyBhbmQgT1NSIGVudHJ5LiBJdCBpcyBtb3N0bHkgbWVhbmluZ2xlc3MKICAgICAv
LyBmb3Igb3RoZXIgcHVycG9zZXMgZHVlIHRvIGlubGluaW5nLgogICAgIHVuc2lnbmVkIGJ5dGVj
b2RlQmVnaW47CiAgICAgCisgICAgQmxvY2tJbmRleCBpbmRleDsKKyAgICAKICAgICBib29sIGlz
T1NSVGFyZ2V0OwogICAgIGJvb2wgY2ZhSGFzVmlzaXRlZDsKICAgICBib29sIGNmYVNob3VsZFJl
dmlzaXQ7CkBAIC0xMjIsMzAgKzE0OCw0MyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxO
b2RlKiwgOD4gewogICAgIGJvb2wgaXNSZWFjaGFibGU7CiAgICAgCiAgICAgVmVjdG9yPE5vZGUq
PiBwaGlzOwotICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKKyAgICBQcmVkZWNl
c3Nvckxpc3QgcHJlZGVjZXNzb3JzOwogICAgIAogICAgIE9wZXJhbmRzPE5vZGUqLCBOb2RlUG9p
bnRlclRyYWl0cz4gdmFyaWFibGVzQXRIZWFkOwogICAgIE9wZXJhbmRzPE5vZGUqLCBOb2RlUG9p
bnRlclRyYWl0cz4gdmFyaWFibGVzQXRUYWlsOwogICAgIAogICAgIE9wZXJhbmRzPEFic3RyYWN0
VmFsdWU+IHZhbHVlc0F0SGVhZDsKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNB
dFRhaWw7CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPE5vZGUqLCA4PiBtX25vZGVzOwogfTsKIAog
c3RydWN0IFVubGlua2VkQmxvY2sgewotICAgIEJsb2NrSW5kZXggbV9ibG9ja0luZGV4OworICAg
IEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgYm9vbCBtX25lZWRzTm9ybWFsTGlua2luZzsKICAg
ICBib29sIG1fbmVlZHNFYXJseVJldHVybkxpbmtpbmc7CiAgICAgCiAgICAgVW5saW5rZWRCbG9j
aygpIHsgfQogICAgIAotICAgIGV4cGxpY2l0IFVubGlua2VkQmxvY2soQmxvY2tJbmRleCBibG9j
a0luZGV4KQotICAgICAgICA6IG1fYmxvY2tJbmRleChibG9ja0luZGV4KQorICAgIGV4cGxpY2l0
IFVubGlua2VkQmxvY2soQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9j
aykKICAgICAgICAgLCBtX25lZWRzTm9ybWFsTGlua2luZyh0cnVlKQogICAgICAgICAsIG1fbmVl
ZHNFYXJseVJldHVybkxpbmtpbmcoZmFsc2UpCiAgICAgewogICAgIH0KIH07CiAgICAgCitzdGF0
aWMgaW5saW5lIGdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayhCYXNpY0Jsb2NrKiogYmFzaWNCbG9j
aykKK3sKKyAgICByZXR1cm4gKCpiYXNpY0Jsb2NrKS0+Ynl0ZWNvZGVCZWdpbjsKK30KKworc3Rh
dGljIGlubGluZSBCYXNpY0Jsb2NrKiBibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCYXNp
Y0Jsb2NrKj4mIGxpbmtpbmdUYXJnZXRzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKQoreworICAg
IHJldHVybiAqYmluYXJ5U2VhcmNoPEJhc2ljQmxvY2sqLCB1bnNpZ25lZD4obGlua2luZ1Rhcmdl
dHMsIGxpbmtpbmdUYXJnZXRzLnNpemUoKSwgYnl0ZWNvZGVCZWdpbiwgZ2V0Qnl0ZWNvZGVCZWdp
bkZvckJsb2NrKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw4
ICsxODMsOCBAQCBwcml2YXRlOgogICAgIC8vIFBhcnNlIGEgc2luZ2xlIGJhc2ljIGJsb2NrIG9m
IGJ5dGVjb2RlIGluc3RydWN0aW9ucy4KICAgICBib29sIHBhcnNlQmxvY2sodW5zaWduZWQgbGlt
aXQpOwogICAgIC8vIExpbmsgYmxvY2sgc3VjY2Vzc29ycy4KLSAgICB2b2lkIGxpbmtCbG9jayhC
YXNpY0Jsb2NrKiwgVmVjdG9yPEJsb2NrSW5kZXg+JiBwb3NzaWJsZVRhcmdldHMpOwotICAgIHZv
aWQgbGlua0Jsb2NrcyhWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHVubGlua2VkQmxvY2tzLCBWZWN0
b3I8QmxvY2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0cyk7CisgICAgdm9pZCBsaW5rQmxvY2soQmFz
aWNCbG9jayosIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CisgICAgdm9p
ZCBsaW5rQmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3MsIFZlY3Rv
cjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgLy8gTGluayBHZXRMb2NhbCAm
IFNldExvY2FsIG5vZGVzLCB0byBlbnN1cmUgbGl2ZSB2YWx1ZXMgYXJlIGdlbmVyYXRlZC4KICAg
ICBlbnVtIFBoaVN0YWNrVHlwZSB7CiAgICAgICAgIExvY2FsUGhpU3RhY2ssCkBAIC0xMDM5LDEz
ICsxMDM5LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIFBvdGVudGlhbCBibG9jayBsaW5raW5n
IHRhcmdldHMuIE11c3QgYmUgc29ydGVkIGJ5IGJ5dGVjb2RlQmVnaW4sIGFuZAogICAgICAgICAv
LyBjYW5ub3QgaGF2ZSB0d28gYmxvY2tzIHRoYXQgaGF2ZSB0aGUgc2FtZSBieXRlY29kZUJlZ2lu
LiBGb3IgdGhpcyB2ZXJ5CiAgICAgICAgIC8vIHJlYXNvbiwgdGhpcyBpcyBub3QgZXF1aXZhbGVu
dCB0byAKLSAgICAgICAgVmVjdG9yPEJsb2NrSW5kZXg+IG1fYmxvY2tMaW5raW5nVGFyZ2V0czsK
KyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBtX2Jsb2NrTGlua2luZ1RhcmdldHM7CiAgICAg
ICAgIAogICAgICAgICAvLyBJZiB0aGUgY2FsbHNpdGUncyBiYXNpYyBibG9jayB3YXMgc3BsaXQg
aW50byB0d28sIHRoZW4gdGhpcyB3aWxsIGJlCiAgICAgICAgIC8vIHRoZSBoZWFkIG9mIHRoZSBj
YWxsc2l0ZSBibG9jay4gSXQgbmVlZHMgaXRzIHN1Y2Nlc3NvcnMgbGlua2VkIHRvIHRoZQogICAg
ICAgICAvLyBtX3VubGlua2VkQmxvY2tzLCBidXQgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kOiB0
aGVyZSdzIG5vIHdheSBmb3IKICAgICAgICAgLy8gYW55IGJsb2NrcyBpbiBtX3VubGlua2VkQmxv
Y2tzIHRvIGp1bXAgYmFjayBpbnRvIHRoaXMgYmxvY2suCi0gICAgICAgIEJsb2NrSW5kZXggbV9j
YWxsc2l0ZUJsb2NrSGVhZDsKKyAgICAgICAgQmFzaWNCbG9jayogbV9jYWxsc2l0ZUJsb2NrSGVh
ZDsKICAgICAgICAgCiAgICAgICAgIC8vIERvZXMgdGhlIGNhbGxzaXRlIGJsb2NrIGhlYWQgbmVl
ZCBsaW5raW5nPyBUaGlzIGlzIHR5cGljYWxseSB0cnVlCiAgICAgICAgIC8vIGJ1dCB3aWxsIGJl
IGZhbHNlIGZvciB0aGUgbWFjaGluZSBjb2RlIGJsb2NrJ3MgaW5saW5lIHN0YWNrIGVudHJ5CkBA
IC0xMDc2LDcgKzEwNzYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQnl0ZUNvZGVQYXJzZXIq
LAogICAgICAgICAgICAgQ29kZUJsb2NrKiwKICAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywKLSAgICAgICAgICAgIEJsb2NrSW5kZXggY2FsbHNpdGVCbG9ja0hlYWQsCisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBjYWxsc2l0ZUJsb2NrSGVhZCwKICAgICAgICAgICAgIEpTRnVu
Y3Rpb24qIGNhbGxlZSwgLy8gTnVsbCBpZiB0aGlzIGlzIGEgY2xvc3VyZSBjYWxsLgogICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHJldHVyblZhbHVlVlIsCiAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQsCkBAIC0xMjk1LDE0ICsxMjk1LDE0IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICB1bnNpZ25lZCBuZXdO
dW1Mb2NhbHMgPSBpbmxpbmVDYWxsRnJhbWVTdGFydCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
clNpemUgKyBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwogICAgIGlmIChuZXdOdW1M
b2NhbHMgPiBtX251bUxvY2FscykgewogICAgICAgICBtX251bUxvY2FscyA9IG5ld051bUxvY2Fs
czsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KTsgKytpKQotICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tpXS0+ZW5zdXJlTG9jYWxzKG5l
d051bUxvY2Fscyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytpKQorICAgICAgICAgICAgbV9ncmFwaC5ibG9jayhpKS0+ZW5zdXJlTG9jYWxz
KG5ld051bUxvY2Fscyk7CiAgICAgfQogICAgIAogICAgIHNpemVfdCBhcmd1bWVudFBvc2l0aW9u
U3RhcnQgPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnMuc2l6ZSgpOwogCiAgICAgSW5saW5l
U3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KAotICAgICAgICB0aGlzLCBjb2RlQmxvY2ssIGNv
ZGVCbG9jaywgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxLCBjYWxsTGlua1N0YXR1cy5mdW5j
dGlvbigpLAorICAgICAgICB0aGlzLCBjb2RlQmxvY2ssIGNvZGVCbG9jaywgbV9ncmFwaC5sYXN0
QmxvY2soKSwgY2FsbExpbmtTdGF0dXMuZnVuY3Rpb24oKSwKICAgICAgICAgKFZpcnR1YWxSZWdp
c3RlciltX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0T3BlcmFuZCksCiAgICAg
ICAgIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lU3RhcnQsIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBraW5kKTsKICAgICAKQEAgLTEzMjEsMTMgKzEzMjEsMTMgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIG1fY3VycmVudEluZGV4ID0g
b2xkSW5kZXg7CiAgICAgCiAgICAgLy8gSWYgdGhlIGlubGluZWQgY29kZSBjcmVhdGVkIHNvbWUg
bmV3IGJhc2ljIGJsb2NrcywgdGhlbiB3ZSBoYXZlIGxpbmtpbmcgdG8gZG8uCi0gICAgaWYgKGlu
bGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCAhPSBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKSAtIDEpIHsKKyAgICBpZiAoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFk
ICE9IG1fZ3JhcGgubGFzdEJsb2NrKCkpIHsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVCghaW5s
aW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSk7CiAgICAgICAgIGlmIChp
bmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcpCi0gICAgICAg
ICAgICBsaW5rQmxvY2sobV9ncmFwaC5tX2Jsb2Nrc1tpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNp
dGVCbG9ja0hlYWRdLmdldCgpLCBpbmxpbmVTdGFja0VudHJ5Lm1fYmxvY2tMaW5raW5nVGFyZ2V0
cyk7CisgICAgICAgICAgICBsaW5rQmxvY2soaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxv
Y2tIZWFkLCBpbmxpbmVTdGFja0VudHJ5Lm1fYmxvY2tMaW5raW5nVGFyZ2V0cyk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fYmxvY2tzW2lubGluZVN0YWNrRW50
cnkubV9jYWxsc2l0ZUJsb2NrSGVhZF0tPmlzTGlua2VkKTsKKyAgICAgICAgICAgIEFTU0VSVChp
bmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWQtPmlzTGlua2VkKTsKICAgICAgICAg
CiAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgY2FsbHNpdGUgYmxvY2sgaGVhZCBp
cyBub3Qgb3duZWQgYnkgdGhlIGNhbGxlci4KICAgICAgICAgaWYgKCFpbmxpbmVTdGFja0VudHJ5
Lm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSkgewpAQCAtMTM0OCw3ICsxMzQ4
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIH0gZWxz
ZQogICAgICAgICBBU1NFUlQoaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1w
dHkoKSk7CiAgICAgCi0gICAgQmFzaWNCbG9jayogbGFzdEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
cy5sYXN0KCkuZ2V0KCk7CisgICAgQmFzaWNCbG9jayogbGFzdEJsb2NrID0gbV9ncmFwaC5sYXN0
QmxvY2soKTsKICAgICAvLyBJZiB0aGVyZSB3YXMgYSByZXR1cm4sIGJ1dCBubyBlYXJseSByZXR1
cm5zLCB0aGVuIHdlJ3JlIGRvbmUuIFdlIGFsbG93IHBhcnNpbmcgb2YKICAgICAvLyB0aGUgY2Fs
bGVyIHRvIGNvbnRpbnVlIGluIHdoYXRldmVyIGJhc2ljIGJsb2NrIHdlJ3JlIGluIHJpZ2h0IG5v
dy4KICAgICBpZiAoIWlubGluZVN0YWNrRW50cnkubV9kaWRFYXJseVJldHVybiAmJiBpbmxpbmVT
dGFja0VudHJ5Lm1fZGlkUmV0dXJuKSB7CkBAIC0xMzY0LDExICsxMzY0LDExIEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgICAgIC8vIGZvciByZWxl
YXNlIGJ1aWxkcyBiZWNhdXNlIHRoaXMgYmxvY2sgd2lsbCBuZXZlciBzZXJ2ZSBhcyBhIHBvdGVu
dGlhbCB0YXJnZXQKICAgICAgICAgICAgIC8vIGluIHRoZSBsaW5rZXIncyBiaW5hcnkgc2VhcmNo
LgogICAgICAgICAgICAgbGFzdEJsb2NrLT5ieXRlY29kZUJlZ2luID0gbV9jdXJyZW50SW5kZXg7
Ci0gICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nr
cy5hcHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEpKTsKKyAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmFw
cGVuZChVbmxpbmtlZEJsb2NrKG1fZ3JhcGgubGFzdEJsb2NrKCkpKTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS5n
ZXQoKTsKLQorICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgubGFzdEJsb2NrKCk7Cisg
ICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0Yo
IkRvbmUgaW5saW5pbmcgZXhlY3V0YWJsZSAlcCwgY29udGludWluZyBjb2RlIGdlbmVyYXRpb24g
YXQgZXBpbG9ndWUuXG4iLCBleGVjdXRhYmxlKTsKICNlbmRpZgpAQCAtMTM3OCwzMiArMTM3OCwz
NSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gSWYg
d2UgZ2V0IHRvIHRoaXMgcG9pbnQgdGhlbiBhbGwgYmxvY2tzIG11c3QgZW5kIGluIHNvbWUgc29y
dCBvZiB0ZXJtaW5hbHMuCiAgICAgQVNTRVJUKGxhc3RCbG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFs
KCkpOwogICAgIAorCisgICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgYmFzaWMgYmxvY2sgZm9y
IHRoZSBjb250aW51YXRpb24gYXQgdGhlIGNhbGxlci4KKyAgICBSZWZQdHI8QmFzaWNCbG9jaz4g
YmxvY2sgPSBhZG9wdFJlZihuZXcgQmFzaWNCbG9jayhuZXh0T2Zmc2V0LCBtX251bUFyZ3VtZW50
cywgbV9udW1Mb2NhbHMpKTsKKworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICBk
YXRhTG9nRigiQ3JlYXRpbmcgaW5saW5lIGVwaWxvZ3VlIGJhc2ljIGJsb2NrICVwLCAjJXp1IGZv
ciAlcCBiYyMldSBhdCBpbmxpbmUgZGVwdGggJXUuXG4iLCBibG9jay5nZXQoKSwgbV9ncmFwaC5u
dW1CbG9ja3MoKSwgbV9pbmxpbmVTdGFja1RvcC0+ZXhlY3V0YWJsZSgpLCBtX2N1cnJlbnRJbmRl
eCwgQ29kZU9yaWdpbjo6aW5saW5lRGVwdGhGb3JDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKCkp
KTsKKyNlbmRpZgorCiAgICAgLy8gTGluayB0aGUgZWFybHkgcmV0dXJucyB0byB0aGUgYmFzaWMg
YmxvY2sgd2UncmUgYWJvdXQgdG8gY3JlYXRlLgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLnNpemUoKTsgKytpKSB7CiAgICAgICAg
IGlmICghaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzW2ldLm1fbmVlZHNFYXJseVJl
dHVybkxpbmtpbmcpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2lubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nr
c1tpXS5tX2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGlu
bGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX2Jsb2NrOwogICAgICAgICBBU1NF
UlQoIWJsb2NrLT5pc0xpbmtlZCk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+bGFzdCgp
OwogICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBKdW1wKTsKLSAgICAgICAgQVNTRVJUKG5v
ZGUtPnRha2VuQmxvY2tJbmRleCgpID09IE5vQmxvY2spOwotICAgICAgICBub2RlLT5zZXRUYWtl
bkJsb2NrSW5kZXgobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkpOworICAgICAgICBBU1NFUlQobm9k
ZS0+dGFrZW5CbG9jaygpID09IDApOworICAgICAgICBub2RlLT5zZXRUYWtlbkJsb2NrKGJsb2Nr
LmdldCgpKTsKICAgICAgICAgaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzW2ldLm1f
bmVlZHNFYXJseVJldHVybkxpbmtpbmcgPSBmYWxzZTsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAg
ICAgICAgIGJsb2NrLT5pc0xpbmtlZCA9IHRydWU7CiAjZW5kaWYKICAgICB9CiAgICAgCi0gICAg
Ly8gTmVlZCB0byBjcmVhdGUgYSBuZXcgYmFzaWMgYmxvY2sgZm9yIHRoZSBjb250aW51YXRpb24g
YXQgdGhlIGNhbGxlci4KLSAgICBPd25QdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFB0cihu
ZXcgQmFzaWNCbG9jayhuZXh0T2Zmc2V0LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMpKTsK
LSNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0YUxvZ0YoIkNyZWF0aW5nIGlu
bGluZSBlcGlsb2d1ZSBiYXNpYyBibG9jayAlcCwgIyV6dSBmb3IgJXAgYmMjJXUgYXQgaW5saW5l
IGRlcHRoICV1LlxuIiwgYmxvY2suZ2V0KCksIG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpLCBtX2lu
bGluZVN0YWNrVG9wLT5leGVjdXRhYmxlKCksIG1fY3VycmVudEluZGV4LCBDb2RlT3JpZ2luOjpp
bmxpbmVEZXB0aEZvckNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUoKSkpOwotI2VuZGlmCiAgICAg
bV9jdXJyZW50QmxvY2sgPSBibG9jay5nZXQoKTsKLSAgICBBU1NFUlQobV9pbmxpbmVTdGFja1Rv
cC0+bV9jYWxsZXItPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5pc0VtcHR5KCkgfHwgbV9ncmFwaC5t
X2Jsb2Nrc1ttX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRz
Lmxhc3QoKV0tPmJ5dGVjb2RlQmVnaW4gPCBuZXh0T2Zmc2V0KTsKLSAgICBtX2lubGluZVN0YWNr
VG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5hcHBlbmQoVW5saW5rZWRCbG9jayhtX2dy
YXBoLm1fYmxvY2tzLnNpemUoKSkpOwotICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5t
X2Jsb2NrTGlua2luZ1RhcmdldHMuYXBwZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKLSAg
ICBtX2dyYXBoLm1fYmxvY2tzLmFwcGVuZChibG9jay5yZWxlYXNlKCkpOworICAgIEFTU0VSVCht
X2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlzRW1wdHko
KSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmxh
c3QoKS0+Ynl0ZWNvZGVCZWdpbiA8IG5leHRPZmZzZXQpOworICAgIG1faW5saW5lU3RhY2tUb3At
Pm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmFwcGVuZChVbmxpbmtlZEJsb2NrKGJsb2NrLmdl
dCgpKSk7CisgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fYmxvY2tMaW5raW5nVGFy
Z2V0cy5hcHBlbmQoYmxvY2suZ2V0KCkpOworICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soYmxvY2sp
OwogICAgIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICAKICAgICAvLyBBdCB0aGlzIHBvaW50
IHdlIHJldHVybiBhbmQgY29udGludWUgdG8gZ2VuZXJhdGUgY29kZSBmb3IgdGhlIGNhbGxlciwg
YnV0CkBAIC0xNzUzLDcgKzE3NTYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgLy8gSWYgd2UgYXJlIHRoZSBmaXJzdCBiYXNpYyBibG9jaywgaW50cm9k
dWNlIG1hcmtlcnMgZm9yIGFyZ3VtZW50cy4gVGhpcyBhbGxvd3MKICAgICAvLyB1cyB0byB0cmFj
ayBpZiBhIHVzZSBvZiBhbiBhcmd1bWVudCBtYXkgdXNlIHRoZSBhY3R1YWwgYXJndW1lbnQgcGFz
c2VkLCBhcwogICAgIC8vIG9wcG9zZWQgdG8gdXNpbmcgYSB2YWx1ZSB3ZSBzZXQgZXhwbGljaXRs
eS4KLSAgICBpZiAobV9jdXJyZW50QmxvY2sgPT0gbV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKSAm
JiAhaW5saW5lQ2FsbEZyYW1lKCkpIHsKKyAgICBpZiAobV9jdXJyZW50QmxvY2sgPT0gbV9ncmFw
aC5ibG9jaygwKSAmJiAhaW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAgICAgbV9ncmFwaC5tX2Fy
Z3VtZW50cy5yZXNpemUobV9udW1Bcmd1bWVudHMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX251bUFyZ3VtZW50czsgKythcmd1bWVudCkgewogICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNz
RGF0YSgKQEAgLTI3NzMsNyArMjc3Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBtX2N1cnJlbnRJ
bmRleCArIHRhYmxlLmJyYW5jaE9mZnNldHNbaV07CiAgICAgICAgICAgICAgICAgaWYgKHRhcmdl
dCA9PSBkYXRhLmZhbGxUaHJvdWdoKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKGpzTnVtYmVyKHRhYmxl
Lm1pbiArIGkpLCB0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChT
d2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJbmRleChqc051bWJlcih0YWJsZS5taW4gKyBpKSwgdGFy
Z2V0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2dyYXBoLm1fc3dpdGNoRGF0YS5h
cHBlbmQoZGF0YSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZtX2dy
YXBoLm1fc3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCkpOwpAQCAtMjc5Myw3ICsyNzk2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gZGF0YS5mYWxsVGhy
b3VnaCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZGF0
YS5jYXNlcy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIFN3aXRjaENhc2UoTGF6eUpTVmFs
dWU6OnNpbmdsZUNoYXJhY3RlclN0cmluZyh0YWJsZS5taW4gKyBpKSwgdGFyZ2V0KSk7CisgICAg
ICAgICAgICAgICAgICAgIFN3aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KExhenlKU1ZhbHVl
OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodGFibGUubWluICsgaSksIHRhcmdldCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgbV9ncmFwaC5tX3N3aXRjaERhdGEuYXBwZW5kKGRhdGEpOwog
ICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmbV9ncmFwaC5tX3N3aXRjaERh
dGEubGFzdCgpKSwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKQEAgLTI4
MTMsNyArMjgxNiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRocm91Z2gpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5k
KAotICAgICAgICAgICAgICAgICAgICBTd2l0Y2hDYXNlKExhenlKU1ZhbHVlOjprbm93blN0cmlu
Z0ltcGwoaXRlci0+a2V5LmdldCgpKSwgdGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgICAgIFN3
aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KExhenlKU1ZhbHVlOjprbm93blN0cmluZ0ltcGwo
aXRlci0+a2V5LmdldCgpKSwgdGFyZ2V0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBt
X2dyYXBoLm1fc3dpdGNoRGF0YS5hcHBlbmQoZGF0YSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBo
KFN3aXRjaCwgT3BJbmZvKCZtX2dyYXBoLm1fc3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwpAQCAtMjgyOCwxMyArMjgzMSwxMyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9kaWRSZXR1cm4gPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmICht
X2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBJZiB3ZSdyZSByZXR1cm5pbmcgZnJvbSB0aGUgZmlyc3QgYmxvY2ssIHRo
ZW4gd2UncmUgZG9uZSBwYXJzaW5nLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxp
bmVTdGFja1RvcC0+bV9jYWxsc2l0ZUJsb2NrSGVhZCA9PSBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KSAtIDEpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9j
YWxsc2l0ZUJsb2NrSGVhZCA9PSBtX2dyYXBoLmxhc3RCbG9jaygpKTsKICAgICAgICAgICAgICAg
ICAgICAgc2hvdWxkQ29udGludWVQYXJzaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAg
IExBU1RfT1BDT0RFKG9wX3JldCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgaW5saW5pbmcgY3JlYXRlZCBibG9ja3MsIGFuZCB3ZSdyZSBkb2lu
ZyBhIHJldHVybiwgdGhlbiB3ZSBuZWVkIHNvbWUKICAgICAgICAgICAgICAgICAgICAgLy8gc3Bl
Y2lhbCBsaW5raW5nLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1Rv
cC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4ID09IG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNr
VG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrSW5kZXggPT0gbV9ncmFwaC5sYXN0
QmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5r
ZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNOb3JtYWxMaW5raW5nID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5H
VEgob3BfcmV0KSAhPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZGlkRWFybHlSZXR1cm4pIHsKQEAgLTMx
NjIsNyArMzE2NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICB9CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayhCYXNpY0Jsb2NrKiBi
bG9jaywgVmVjdG9yPEJsb2NrSW5kZXg+JiBwb3NzaWJsZVRhcmdldHMpCit2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxCYXNpY0Jsb2NrKj4m
IHBvc3NpYmxlVGFyZ2V0cykKIHsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0xpbmtlZCk7CiAgICAg
QVNTRVJUKCFibG9jay0+aXNFbXB0eSgpKTsKQEAgLTMxNzEsMjQgKzMxNzQsMjQgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKEJhc2ljQmxvYwogICAgIAogICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgIGNhc2UgSnVtcDoKLSAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9ja0lu
ZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywg
bm9kZS0+dGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOworICAgICAgICBub2Rl
LT5zZXRUYWtlbkJsb2NrKGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBu
b2RlLT50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CiAjaWYgREZHX0VOQUJM
RShERUJVR19WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiTGlua2VkIGJhc2ljIGJsb2NrICVw
IHRvICVwLCAjJXUuXG4iLCBibG9jaywgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLT50YWtlbkJsb2Nr
SW5kZXgoKV0uZ2V0KCksIG5vZGUtPnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0YUxv
Z0YoIkxpbmtlZCBiYXNpYyBibG9jayAlcCB0byAlcCwgIyV1LlxuIiwgYmxvY2ssIG5vZGUtPnRh
a2VuQmxvY2soKSwgbm9kZS0+dGFrZW5CbG9jaygpLT5pbmRleCk7CiAjZW5kaWYKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQnJhbmNoOgotICAgICAgICBub2RlLT5zZXRUYWtl
bkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVU
YXJnZXRzLCBub2RlLT50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7Ci0gICAg
ICAgIG5vZGUtPnNldE5vdFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPm5vdFRha2VuQnl0ZWNvZGVPZmZzZXRE
dXJpbmdQYXJzaW5nKCkpKTsKKyAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9jayhibG9ja0ZvckJ5
dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+dGFrZW5CeXRlY29kZU9mZnNldER1
cmluZ1BhcnNpbmcoKSkpOworICAgICAgICBub2RlLT5zZXROb3RUYWtlbkJsb2NrKGJsb2NrRm9y
Qnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT5ub3RUYWtlbkJ5dGVjb2RlT2Zm
c2V0RHVyaW5nUGFyc2luZygpKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAg
ICAgICBkYXRhTG9nRigiTGlua2VkIGJhc2ljIGJsb2NrICVwIHRvICVwLCAjJXUgYW5kICVwLCAj
JXUuXG4iLCBibG9jaywgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLT50YWtlbkJsb2NrSW5kZXgoKV0u
Z2V0KCksIG5vZGUtPnRha2VuQmxvY2tJbmRleCgpLCBtX2dyYXBoLm1fYmxvY2tzW25vZGUtPm5v
dFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSwgbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCkpOwor
ICAgICAgICBkYXRhTG9nRigiTGlua2VkIGJhc2ljIGJsb2NrICVwIHRvICVwLCAjJXUgYW5kICVw
LCAjJXUuXG4iLCBibG9jaywgbm9kZS0+dGFrZW5CbG9jaygpLCBub2RlLT50YWtlbkJsb2NrKCkt
PmluZGV4LCBub2RlLT5ub3RUYWtlbkJsb2NrKCksIG5vZGUtPm5vdFRha2VuQmxvY2soKS0+aW5k
ZXgpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFN3aXRjaDoK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+c3dpdGNoRGF0YSgpLT5jYXNlcy5zaXpl
KCk7IGktLTspCi0gICAgICAgICAgICBub2RlLT5zd2l0Y2hEYXRhKCktPmNhc2VzW2ldLnRhcmdl
dCA9IG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywg
bm9kZS0+c3dpdGNoRGF0YSgpLT5jYXNlc1tpXS50YXJnZXQpOwotICAgICAgICBub2RlLT5zd2l0
Y2hEYXRhKCktPmZhbGxUaHJvdWdoID0gbV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZz
ZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT5zd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoKTsKKyAg
ICAgICAgICAgIG5vZGUtPnN3aXRjaERhdGEoKS0+Y2FzZXNbaV0udGFyZ2V0ID0gYmxvY2tGb3JC
eXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnN3aXRjaERhdGEoKS0+Y2FzZXNb
aV0udGFyZ2V0Qnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgbm9kZS0+c3dpdGNoRGF0YSgpLT5m
YWxsVGhyb3VnaCA9IGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2Rl
LT5zd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoQnl0ZWNvZGVJbmRleCgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CkBAIC0zMjAzLDExICszMjA2LDExIEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayhCYXNpY0Jsb2MKICNlbmRpZgogfQogCi12b2lkIEJ5
dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRC
bG9ja3MsIFZlY3RvcjxCbG9ja0luZGV4PiYgcG9zc2libGVUYXJnZXRzKQordm9pZCBCeXRlQ29k
ZVBhcnNlcjo6bGlua0Jsb2NrcyhWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHVubGlua2VkQmxvY2tz
LCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpCiB7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB1bmxpbmtlZEJsb2Nrcy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAo
dW5saW5rZWRCbG9ja3NbaV0ubV9uZWVkc05vcm1hbExpbmtpbmcpIHsKLSAgICAgICAgICAgIGxp
bmtCbG9jayhtX2dyYXBoLm1fYmxvY2tzW3VubGlua2VkQmxvY2tzW2ldLm1fYmxvY2tJbmRleF0u
Z2V0KCksIHBvc3NpYmxlVGFyZ2V0cyk7CisgICAgICAgICAgICBsaW5rQmxvY2sodW5saW5rZWRC
bG9ja3NbaV0ubV9ibG9jaywgcG9zc2libGVUYXJnZXRzKTsKICAgICAgICAgICAgIHVubGlua2Vk
QmxvY2tzW2ldLm1fbmVlZHNOb3JtYWxMaW5raW5nID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9
CkBAIC0zMjM1LDcgKzMyMzgsNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6
SW5saW5lCiAgICAgQnl0ZUNvZGVQYXJzZXIqIGJ5dGVDb2RlUGFyc2VyLAogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrLAogICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywKLSAgICBCbG9ja0lu
ZGV4IGNhbGxzaXRlQmxvY2tIZWFkLAorICAgIEJhc2ljQmxvY2sqIGNhbGxzaXRlQmxvY2tIZWFk
LAogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSwgLy8gTnVsbCBpZiB0aGlzIGlzIGEgY2xvc3VyZSBj
YWxsLgogICAgIFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLAogICAgIFZpcnR1YWxSZWdp
c3RlciBpbmxpbmVDYWxsRnJhbWVTdGFydCwKQEAgLTM0NDYsMjcgKzM0NDksMjcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgICAgICBkbyB7CiAgICAgICAgICAg
ICBpZiAoIW1fY3VycmVudEJsb2NrKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2Ug
Y2FuIHVzZSB0aGUgbGFzdCBibG9jay4KLSAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgubV9i
bG9ja3MuaXNFbXB0eSgpICYmIG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLT5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5udW1CbG9ja3MoKSAmJiBtX2dyYXBoLmxhc3RC
bG9jaygpLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJl
IGEgYmxvY2sgYmVsb25naW5nIHRvIHVzLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9p
bmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4ID09IG1f
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCht
X2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrSW5kZXggPT0g
bV9ncmFwaC5sYXN0QmxvY2soKSk7CiAgICAgICAgICAgICAgICAgICAgIC8vIEVpdGhlciB0aGUg
YmxvY2sgaXMgbGlua2FibGUgb3IgaXQgaXNuJ3QuIElmIGl0J3MgbGlua2FibGUgdGhlbiBpdCdz
IHRoZSBsYXN0CiAgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrIGluIHRoZSBibG9ja0xpbmtp
bmdUYXJnZXRzIGxpc3QuIElmIGl0J3Mgbm90IHRoZW4gdGhlIGxhc3QgYmxvY2sgd2lsbAogICAg
ICAgICAgICAgICAgICAgICAvLyBoYXZlIGEgbG93ZXIgYnl0ZWNvZGUgaW5kZXggdGhhdCB0aGUg
b25lIHdlJ3JlIGFib3V0IHRvIGdpdmUgdG8gdGhpcyBibG9jay4KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5pc0VtcHR5KCkg
fHwgbV9ncmFwaC5tX2Jsb2Nrc1ttX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1Rhcmdl
dHMubGFzdCgpXS0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2N1cnJlbnRJbmRleCkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlz
RW1wdHkoKSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMubGFzdCgp
LT5ieXRlY29kZUJlZ2luICE9IG1fY3VycmVudEluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBNYWtlIHRoZSBibG9jayBsaW5rYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuaXNFbXB0eSgp
IHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJn
ZXRzLmxhc3QoKV0tPmJ5dGVjb2RlQmVnaW4gPCBtX2N1cnJlbnRJbmRleCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuYXBw
ZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlzRW1wdHko
KSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMubGFzdCgpLT5ieXRl
Y29kZUJlZ2luIDwgbV9jdXJyZW50SW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmFwcGVuZChtX2dyYXBoLmxhc3RC
bG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAvLyBD
aGFuZ2UgaXRzIGJ5dGVjb2RlIGJlZ2luIGFuZCBjb250aW51ZS4KLSAgICAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS5nZXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLmxhc3RCbG9jaygpOwogI2lm
IERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0Yo
IlJlYXNjcmliaW5nIGJ5dGVjb2RlIGluZGV4IG9mIGJsb2NrICVwIGZyb20gYmMjJXUgdG8gYmMj
JXUgKHBlZXBob2xlIGNhc2UpLlxuIiwgbV9jdXJyZW50QmxvY2ssIG1fY3VycmVudEJsb2NrLT5i
eXRlY29kZUJlZ2luLCBtX2N1cnJlbnRJbmRleCk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmJ5dGVjb2RlQmVnaW4gPSBtX2N1cnJlbnRJbmRleDsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBPd25QdHI8QmFzaWNCbG9j
az4gYmxvY2sgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jayhtX2N1cnJlbnRJbmRleCwgbV9udW1B
cmd1bWVudHMsIG1fbnVtTG9jYWxzKSk7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxCYXNp
Y0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKG5ldyBCYXNpY0Jsb2NrKG1fY3VycmVudEluZGV4LCBt
X251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJP
U0UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDcmVhdGluZyBiYXNpYyBibG9jayAl
cCwgIyV6dSBmb3IgJXAgYmMjJXUgYXQgaW5saW5lIGRlcHRoICV1LlxuIiwgYmxvY2suZ2V0KCks
IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpLCBtX2lubGluZVN0YWNrVG9wLT5leGVjdXRhYmxlKCks
IG1fY3VycmVudEluZGV4LCBDb2RlT3JpZ2luOjppbmxpbmVEZXB0aEZvckNhbGxGcmFtZShpbmxp
bmVDYWxsRnJhbWUoKSkpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ3JlYXRpbmcg
YmFzaWMgYmxvY2sgJXAsICMlenUgZm9yICVwIGJjIyV1IGF0IGlubGluZSBkZXB0aCAldS5cbiIs
IGJsb2NrLmdldCgpLCBtX2dyYXBoLm51bUJsb2NrcygpLCBtX2lubGluZVN0YWNrVG9wLT5leGVj
dXRhYmxlKCksIG1fY3VycmVudEluZGV4LCBDb2RlT3JpZ2luOjppbmxpbmVEZXB0aEZvckNhbGxG
cmFtZShpbmxpbmVDYWxsRnJhbWUoKSkpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrID0gYmxvY2suZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
YXNzZXJ0aW9uIGNoZWNrcyB0d28gdGhpbmdzOgpAQCAtMzQ3NSwxMyArMzQ3OCwxMyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiAgICAgICAgICAgICAgICAgICAgIC8v
IDIpIElmIHRoZSBieXRlY29kZUJlZ2luIGlzIGVxdWFsIHRvIHRoZSBjdXJyZW50SW5kZXgsIHRo
ZW4gd2UgZmFpbGVkIHRvIGRvCiAgICAgICAgICAgICAgICAgICAgIC8vICAgIGEgcGVlcGhvbGUg
Y29hbGVzY2luZyBvZiB0aGlzIGJsb2NrIGluIHRoZSBpZiBzdGF0ZW1lbnQgYWJvdmUuIFNvLCB3
ZSdyZQogICAgICAgICAgICAgICAgICAgICAvLyAgICBnZW5lcmF0aW5nIHN1Ym9wdGltYWwgY29k
ZSBhbmQgbGVhdmluZyBtb3JlIHdvcmsgZm9yIHRoZSBDRkcgc2ltcGxpZmllci4KLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuaXNF
bXB0eSgpIHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJs
b2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4XS0+Ynl0ZWNvZGVCZWdpbiA8IG1fY3VycmVudEluZGV4
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nr
cy5hcHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSkpOwotICAgICAg
ICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuYXBw
ZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpIHx8IG1faW5saW5l
U3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLT5ieXRlY29kZUJlZ2luIDwgbV9jdXJy
ZW50SW5kZXgpOworICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlu
a2VkQmxvY2tzLmFwcGVuZChVbmxpbmtlZEJsb2NrKGJsb2NrLmdldCgpKSk7CisgICAgICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5hcHBlbmQo
YmxvY2suZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZmlyc3QgYmxvY2sgaXMg
ZGVmaW5pdGVseSBhbiBPU1IgdGFyZ2V0LgotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgubnVt
QmxvY2tzKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+aXNPU1JUYXJnZXQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzLmFwcGVuZChibG9jay5y
ZWxlYXNlKCkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZEJsb2NrKGJsb2Nr
KTsKICAgICAgICAgICAgICAgICAgICAgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTM1NDAsMTEgKzM1NDMsMTEgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkg
eworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
CiAgICAgICAgIEFTU0VSVChibG9jayk7CiAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxl
KSB7Ci0gICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmNsZWFyKCk7Cisg
ICAgICAgICAgICBtX2dyYXBoLmtpbGxCbG9jayhibG9jayk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTUgKzc5LDE0IEBA
IHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgcGVyZm9ybUJsb2NrQ0ZB
KEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB2b2lkIHBlcmZvcm1CbG9ja0NGQShCYXNpY0Js
b2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgaWYgKCFibG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9n
RigiICAgQmxvY2sgIyV1IChiYyMldSk6XG4iLCBibG9ja0luZGV4LCBibG9jay0+Ynl0ZWNvZGVC
ZWdpbik7CisgICAgICAgICAgICBkYXRhTG9nKCIgICBCbG9jayAiLCAqYmxvY2ssICI6XG4iKTsK
ICAgICAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwogICAgICAgICBpZiAodmVy
Ym9zZSkgewogICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICAgIGhlYWQgdmFyczogIik7CkBAIC0x
MjcsOCArMTI2LDggQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAg
ICBkYXRhTG9nRigiQ0ZBIFsldV1cbiIsICsrbV9jb3VudCk7CiAgICAgICAgIAotICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
OyArK2Jsb2NrKQotICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ0ZBKGJsb2NrKTsKKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytibG9ja0luZGV4KQorICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ0ZBKG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCkpOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
RkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsOCArNTQsOCBA
QCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBkbyB7CiAgICAgICAgICAgICBpbm5lckNoYW5n
ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAg
ICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJ
bmRleF0uZ2V0KCk7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
CiAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CkBAIC02Mywy
NyArNjMsMjQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHN3aXRjaCAoYmxvY2stPmxhc3Qo
KS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgSnVtcDogewogICAgICAgICAgICAgICAg
ICAgICAvLyBTdWNjZXNzb3Igd2l0aCBvbmUgcHJlZGVjZXNzb3IgLT4gbWVyZ2UuCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2Nr
LCAwKV0tPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCld
LT5tX3ByZWRlY2Vzc29yc1swXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IGJs
b2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnN1Y2Nlc3NvcigwKS0+
cHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoYmxvY2stPnN1Y2Nlc3NvcigwKS0+cHJlZGVjZXNzb3JzWzBdID09IGJsb2NrKTsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nRigiQ0ZHU2ltcGxpZnk6IEp1bXAgbWVyZ2Ugb24gQmxvY2sgIyV1IHRvIEJs
b2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgs
IG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJDRkdTaW1wbGlmeTogSnVtcCBtZXJnZSBvbiBCbG9jayAiLCAqYmxvY2ssICIgdG8g
QmxvY2sgIiwgKmJsb2NrLT5zdWNjZXNzb3IoMCksICIuXG4iKTsKICNlbmRpZgogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5k
ZXRocmVhZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRl
eCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApLCBub0Jsb2NrcygpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1lcmdlQmxvY2tzKGJsb2NrLCBibG9jay0+c3VjY2Vzc29yKDApLCBub0Js
b2NrcygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hh
bmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiTm90IGp1bXAgbWVyZ2luZyBv
biBCbG9jayAjJXUgdG8gQmxvY2sgIyV1IGJlY2F1c2UgcHJlZGVjZXNzb3JzID0gIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3Io
YmxvY2ssIDApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKV0tPm1fcHJl
ZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJDRkdTaW1wbGlmeTogTm90IGp1bXAgbWVyZ2luZyBvbiBCbG9jayAiLCAqYmxvY2ssICIgdG8g
QmxvY2sgIiwgKmJsb2NrLT5zdWNjZXNzb3IoMCksICIgYmVjYXVzZSBwcmVkZWNlc3NvcnMgPSAi
LCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxv
Y2stPnN1Y2Nlc3NvcigwKS0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2dGKCIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIj
JXUiLCBtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKV0tPm1fcHJl
ZGVjZXNzb3JzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCpibG9j
ay0+c3VjY2Vzc29yKDApLT5wcmVkZWNlc3NvcnNbaV0pOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIi5cbiIpOwogI2VuZGlmCkBA
IC0xMDMsNDUgKzEwMCw0MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIEJyYW5j
aCBvbiBjb25zdGFudCAtPiBqZXR0aXNvbiB0aGUgbm90LXRha2VuIGJsb2NrIGFuZCBtZXJnZS4K
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzS25vd25EaXJlY3Rpb24oYmxvY2stPmNmYUJyYW5j
aERpcmVjdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29uZGl0aW9uID0g
YnJhbmNoQ29uZGl0aW9uKGJsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzWwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9u
KGJsb2NrLCBjb25kaXRpb24pXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
YXJnZXRCbG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrID0gYmxvY2stPnN1Y2Nlc3NvckZvckNv
bmRpdGlvbihjb25kaXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
amV0dGlzb25lZEJsb2NrID0gYmxvY2stPnN1Y2Nlc3NvckZvckNvbmRpdGlvbighY29uZGl0aW9u
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRCbG9jay0+cHJlZGVjZXNzb3Jz
LnNpemUoKSA9PSAxKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDRkdTaW1wbGlmeTogS25v
d24gY29uZGl0aW9uICglcykgYnJhbmNoIG1lcmdlIG9uIEJsb2NrICMldSB0byBCbG9jayAjJXUs
IGpldHRpc29uaW5nIEJsb2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25kaXRpb24gPyAidHJ1ZSIgOiAiZmFsc2UiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRp
b24oYmxvY2ssIGNvbmRpdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgIWNvbmRpdGlvbikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJDRkdTaW1wbGlmeTogS25vd24gY29uZGl0aW9uICgiLCBjb25kaXRpb24sICIp
IGJyYW5jaCBtZXJnZSAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24gQmxv
Y2sgIiwgKmJsb2NrLCAiIHRvIEJsb2NrICIsICp0YXJnZXRCbG9jaywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIiwgamV0dGlzb25pbmcgQmxvY2sgIiwgKmpldHRpc29uZWRCbG9j
aywgIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJl
bWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJsb2NrSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24pLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVCbG9jayhtX2dyYXBoLnN1Y2Nlc3NvckZvckNv
bmRpdGlvbihibG9jaywgIWNvbmRpdGlvbikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtZXJnZUJsb2NrcyhibG9jaywgdGFyZ2V0QmxvY2ssIGpldHRpc29uZWRCbG9jayk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ0ZH
U2ltcGxpZnk6IEtub3duIGNvbmRpdGlvbiAoJXMpIGJyYW5jaC0+anVtcCBjb252ZXJzaW9uIG9u
IEJsb2NrICMldSB0byBCbG9jayAjJXUsIGpldHRpc29uaW5nIEJsb2NrICMldS5cbiIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPyAidHJ1ZSIgOiAiZmFs
c2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9n
cmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbiksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihi
bG9jaywgIWNvbmRpdGlvbikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDRkdTaW1wbGlmeTogS25vd24gY29u
ZGl0aW9uICgiLCBjb25kaXRpb24sICIpICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJicmFuY2gtPmp1bXAgY29udmVyc2lvbiBvbiBCbG9jayAiLCAqYmxvY2ssICIgdG8gQmxv
Y2sgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QmxvY2ssICIsIGpl
dHRpc29uaW5nIEJsb2NrICIsIGpldHRpc29uZWRCbG9jaywgIi5cbiIpOwogI2VuZGlmCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
QmxvY2tJbmRleCB0YWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlv
bihibG9jaywgY29uZGl0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0lu
ZGV4IG5vdFRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJs
b2NrLCAhY29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luID0g
YmxvY2stPmxhc3QoKS0+Y29kZU9yaWdpbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
bG9jay0+bGFzdCgpLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGJsb2NrLT5sYXN0KCktPnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2Nr
KGJsb2NrSW5kZXgsIG5vdFRha2VuQmxvY2tJbmRleCwgYm91bmRhcnlDb2RlT3JpZ2luKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2NrKGJsb2NrLCBqZXR0aXNvbmVk
QmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIGJvdW5kYXJ5Q29k
ZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRha2VuQmxv
Y2tJbmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odGFyZ2V0
QmxvY2spKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTE3Nyw3ICsxNjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBjYXNlcyBvdGhlciB0aGFuIGRlZmF1bHQgdGhlbiB0
aGlzIHR1cm5zCiAgICAgICAgICAgICAgICAgICAgIC8vIGludG8gYSBqdW1wLgogICAgICAgICAg
ICAgICAgICAgICBpZiAoZGF0YS0+Y2FzZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb252ZXJ0VG9KdW1wKGJsb2NrSW5kZXgsIGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0p1bXAoYmxvY2ssIGRhdGEtPmZhbGxUaHJv
dWdoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdl
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtMTg2LDQ3ICsxNzgsNDQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICBpZiAoYmxvY2stPmxhc3QoKS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50
KGJsb2NrLT5sYXN0KCktPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBUcmlTdGF0ZSBmb3VuZCA9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBCbG9ja0luZGV4IHRhcmdldEJsb2NrSW5kZXggPSBOb0Jsb2NrOworICAgICAgICAgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2sgPSAwOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6ZSgpOyBmb3VuZCA9PSBGYWxz
ZVRyaVN0YXRlICYmIGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9
IGRhdGEtPmNhc2VzW2ldLnZhbHVlLnN0cmljdEVxdWFsKHZhbHVlKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZm91bmQgPT0gVHJ1ZVRyaVN0YXRlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0YXJnZXRCbG9ja0luZGV4ID0gZGF0YS0+Y2FzZXNbaV0udGFyZ2V0
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCbG9jayA9IGRhdGEtPmNh
c2VzW2ldLnRhcmdldDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kID09IE1peGVkVHJp
U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZm91bmQgPT0gRmFsc2VUcmlTdGF0ZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0YXJnZXRCbG9ja0luZGV4ID0gZGF0YS0+ZmFsbFRocm91Z2g7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQodGFyZ2V0QmxvY2tJbmRleCAhPSBOb0Jsb2NrKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCbG9jayA9IGRhdGEtPmZhbGxUaHJvdWdo
OworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRhcmdldEJsb2NrKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEJsb2NrSW5k
ZXgsIDE+IGpldHRpc29uZWRCbG9ja3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3NvcnMoYmxvY2spOyBpLS07KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCBqZXR0aXNvbmVkQmxvY2tJbmRleCA9IG1f
Z3JhcGguc3VjY2Vzc29yKGJsb2NrLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoamV0dGlzb25lZEJsb2NrSW5kZXggIT0gdGFyZ2V0QmxvY2tJbmRleCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgamV0dGlzb25lZEJsb2Nrcy5hcHBlbmQoamV0dGlzb25lZEJs
b2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAx
PiBqZXR0aXNvbmVkQmxvY2tzOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jayA9IGJsb2NrLT5zdWNjZXNzb3Io
aSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpldHRpc29uZWRCbG9jayAhPSB0
YXJnZXRCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamV0dGlzb25lZEJs
b2Nrcy5hcHBlbmQoamV0dGlzb25lZEJsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNC
bG9jayogdGFyZ2V0QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3RhcmdldEJsb2NrSW5kZXhdLmdl
dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodGFyZ2V0QmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGFyZ2V0QmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCkgPT0gMSkg
ewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiQ0ZHU2ltcGxpZnk6IEtub3duIGNvbnN0YW50ICgiLCB2YWx1ZSwgIikgc3dpdGNoIG1lcmdl
IG9uICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCbG9jayAjIiwgYmxvY2tJ
bmRleCwgIiB0byBCbG9jayAjIiwgdGFyZ2V0QmxvY2tJbmRleCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIi5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
QmxvY2sgIiwgKmJsb2NrLCAiIHRvIEJsb2NrICIsICp0YXJnZXRCbG9jaywgIi5cbiIpOwogI2Vu
ZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRl
dGhyZWFkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgdGFyZ2V0QmxvY2tJbmRleCwgamV0
dGlzb25lZEJsb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3Mo
YmxvY2ssIHRhcmdldEJsb2NrLCBqZXR0aXNvbmVkQmxvY2tzKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJDRkdTaW1wbGlmeTogS25vd24gY29uc3RhbnQgKCIsIHZhbHVlLCAi
KSBzd2l0Y2gtPmp1bXAgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29udmVy
c2lvbiBvbiBCbG9jayAjIiwgYmxvY2tJbmRleCwgIiB0byBCbG9jayAjIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QmxvY2tJbmRleCwgIi5cbiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiY29udmVyc2lvbiBvbiBCbG9jayAiLCAqYmxvY2ssICIg
dG8gQmxvY2sgIyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0YXJnZXRCbG9j
aywgIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJl
bWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAo
KTsKQEAgLTIzNSw5ICsyMjQsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBibG9jay0+bGFzdCgpLT5jb2RlT3Jp
Z2luOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5sYXN0KCktPmNvbnZlcnRU
b1BoYW50b20oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBqZXR0aXNvbmVkQmxvY2tzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgamV0dGlzb25CbG9jayhibG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tzW2ldLCBi
b3VuZGFyeUNvZGVPcmlnaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0
aXNvbkJsb2NrKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2tzW2ldLCBib3VuZGFyeUNvZGVPcmlnaW4p
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYm91bmRh
cnlDb2RlT3JpZ2luLCBPcEluZm8odGFyZ2V0QmxvY2tJbmRleCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYm91bmRhcnlDb2RlT3Jp
Z2luLCBPcEluZm8odGFyZ2V0QmxvY2spKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI4MywxNCArMjcyLDE0IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBtX2dyYXBoLmludmFsaWRhdGVDRkcoKTsKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAKLSAgICAgICAgICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dy
YXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGtpbGxVbnJlYWNoYWJsZShibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
a2lsbFVucmVhY2hhYmxlKGJsb2NrKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTMwMiwyNSArMjkxLDIzIEBAIHB1YmxpYzoKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgdm9pZCBjb252ZXJ0VG9KdW1wKEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxv
Y2tJbmRleCB0YXJnZXRCbG9ja0luZGV4KQorICAgIHZvaWQgY29udmVydFRvSnVtcChCYXNpY0Js
b2NrKiBibG9jaywgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2spCiAgICAgewotICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAg
ICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1t0YXJnZXRCbG9j
a0luZGV4XS5nZXQoKTsKICAgICAgICAgQVNTRVJUKHRhcmdldEJsb2NrKTsKICAgICAgICAgQVNT
RVJUKHRhcmdldEJsb2NrLT5pc1JlYWNoYWJsZSk7Ci0gICAgICAgIGlmICh0YXJnZXRCbG9jay0+
bV9wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgaWYgKHRhcmdldEJsb2NrLT5w
cmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigKLSAgICAgICAgICAgICAgICAiQ0ZH
U2ltcGxpZnk6IEJyYW5jaC9Td2l0Y2ggdG8gc2FtZSBzdWNjZXNzb3IgbWVyZ2Ugb24gQmxvY2sg
IyV1IHRvIEJsb2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgdGFyZ2V0
QmxvY2tJbmRleCk7CisgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICJDRkdT
aW1wbGlmeTogQnJhbmNoL1N3aXRjaCB0byBzYW1lIHN1Y2Nlc3NvciBtZXJnZSBvbiBCbG9jayAi
LCAqYmxvY2ssCisgICAgICAgICAgICAgICAgIiB0byBCbG9jayAiLCAqdGFyZ2V0QmxvY2ssICIu
XG4iKTsKICNlbmRpZgogICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwotICAgICAgICAg
ICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgdGFyZ2V0QmxvY2tJbmRleCwgbm9CbG9ja3MoKSk7
CisgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9jaywgdGFyZ2V0QmxvY2ssIG5vQmxvY2tzKCkp
OwogICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKAotICAgICAgICAgICAgICAgICJDRkdTaW1wbGlm
eTogQnJhbmNoLT5qdW1wIGNvbnZlcnNpb24gdG8gc2FtZSBzdWNjZXNzb3Igb24gQmxvY2sgIyV1
IHRvIEJsb2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgdGFyZ2V0Qmxv
Y2tJbmRleCk7CisgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICJDRkdTaW1w
bGlmeTogQnJhbmNoLT5qdW1wIGNvbnZlcnNpb24gdG8gc2FtZSBzdWNjZXNzb3Igb24gQmxvY2sg
IiwKKyAgICAgICAgICAgICAgICAqYmxvY2ssICIgdG8gQmxvY2sgIiwgKnRhcmdldEJsb2NrLCAi
LlxuIiwKICNlbmRpZgogICAgICAgICAgICAgTm9kZSogYnJhbmNoID0gYmxvY2stPmxhc3QoKTsK
ICAgICAgICAgICAgIEFTU0VSVChicmFuY2gtPmlzVGVybWluYWwoKSk7CkBAIC0zMzAsMTQgKzMx
NywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBibG9jay0+YXBwZW5k
Tm9kZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYnJhbmNoLT5j
b2RlT3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyh0YXJnZXRCbG9ja0luZGV4KSk7Cisg
ICAgICAgICAgICAgICAgT3BJbmZvKHRhcmdldEJsb2NrKSk7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICB2b2lkIGtpbGxVbnJlYWNoYWJsZShCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgdm9p
ZCBraWxsVW5yZWFjaGFibGUoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAg
ICAgIAogICAgICAgICBBU1NFUlQoYmxvY2spOwogICAgICAgICBBU1NFUlQoIWJsb2NrLT5pc1Jl
YWNoYWJsZSk7CiAgICAgICAgIApAQCAtMzQ2LDcgKzMzMSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQog
ICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5hdChub2RlSW5kZXgp
KTsKICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uY2xlYXIo
KTsKKyAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soYmxvY2spOwogICAgIH0KICAgICAKICAgICB2
b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRp
c29uZWRCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFuZCkKQEAgLTM2MSw0
OSArMzQ2LDQ2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBPcEluZm8obGl2ZW5lc3NOb2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGpldHRpc29uQmxv
Y2soQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4
LCBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbikKKyAgICB2b2lkIGpldHRpc29uQmxvY2so
QmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jaywgQ29kZU9yaWdp
biBib3VuZGFyeUNvZGVPcmlnaW4pCiAgICAgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIEJhc2ljQmxvY2sq
IGpldHRpc29uZWRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlzb25lZEJsb2NrSW5kZXhd
LmdldCgpOwotICAgICAgICAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNv
bmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCiAgICAg
ICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2ssIGJvdW5kYXJ5
Q29kZU9yaWdpbiwgYXJndW1lbnRUb09wZXJhbmQoaSkpOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxz
KCk7ICsraSkKICAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoYmxvY2ssIGpldHRpc29uZWRC
bG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBpKTsKICAgICAgICAgCi0gICAgICAgIGZpeEpldHRp
c29uZWRQcmVkZWNlc3NvcnMoYmxvY2tJbmRleCwgamV0dGlzb25lZEJsb2NrSW5kZXgpOworICAg
ICAgICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2spOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoQmxvY2tJbmRl
eCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4KQorICAgIHZvaWQg
Zml4SmV0dGlzb25lZFByZWRlY2Vzc29ycyhCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayog
amV0dGlzb25lZEJsb2NrKQogICAgIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCJGaXhpbmcgcHJlZGVjZXNzb3JzIGFuZCBwaGlz
IGR1ZSB0byBqZXR0aXNvbiBvZiBCbG9jayAjJXUgZnJvbSBCbG9jayAjJXUuXG4iLAotICAgICAg
ICAgICAgICAgIGpldHRpc29uZWRCbG9ja0luZGV4LCBibG9ja0luZGV4KTsKKyAgICAgICAgZGF0
YUxvZygKKyAgICAgICAgICAgICJGaXhpbmcgcHJlZGVjZXNzb3JzIGFuZCBwaGlzIGR1ZSB0byBq
ZXR0aXNvbiBvZiBCbG9jayAiLCAqamV0dGlzb25lZEJsb2NrLAorICAgICAgICAgICAgIiBmcm9t
IEJsb2NrICIsICpibG9jaywgIi5cbiIsCiAjZW5kaWYKLSAgICAgICAgQmFzaWNCbG9jayogamV0
dGlzb25lZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tqZXR0aXNvbmVkQmxvY2tJbmRleF0uZ2V0
KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPm1f
cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoamV0dGlzb25lZEJs
b2NrLT5tX3ByZWRlY2Vzc29yc1tpXSAhPSBibG9ja0luZGV4KQorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGlmIChqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29yc1tpXSAhPSBi
bG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGpldHRpc29uZWRC
bG9jay0+bV9wcmVkZWNlc3NvcnNbaV0gPSBqZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3Jz
Lmxhc3QoKTsKLSAgICAgICAgICAgIGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnMucmVt
b3ZlTGFzdCgpOworICAgICAgICAgICAgamV0dGlzb25lZEJsb2NrLT5wcmVkZWNlc3NvcnNbaV0g
PSBqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29ycy50YWtlTGFzdCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBWZWN0b3I8QmxvY2tJbmRleCwgMT4gbm9C
bG9ja3MoKQorICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMT4gbm9CbG9ja3MoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIFZlY3RvcjxCbG9ja0luZGV4LCAxPigpOworICAgICAgICByZXR1cm4gVmVj
dG9yPEJhc2ljQmxvY2sqLCAxPigpOwogICAgIH0KICAgICAKLSAgICBWZWN0b3I8QmxvY2tJbmRl
eCwgMT4gb25lQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIFZlY3RvcjxCYXNpY0Js
b2NrKiwgMT4gb25lQmxvY2soQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBWZWN0
b3I8QmxvY2tJbmRleCwgMT4gcmVzdWx0OwotICAgICAgICByZXN1bHQuYXBwZW5kKGJsb2NrSW5k
ZXgpOworICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE+IHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChibG9jayk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgbWVyZ2VCbG9ja3MoCi0gICAgICAgIEJsb2NrSW5kZXggZmlyc3RCbG9ja0luZGV4
LCBCbG9ja0luZGV4IHNlY29uZEJsb2NrSW5kZXgsIFZlY3RvcjxCbG9ja0luZGV4LCAxPiBqZXR0
aXNvbmVkQmxvY2tJbmRpY2VzKQorICAgICAgICBCYXNpY0Jsb2NrKiBmaXJzdEJsb2NrLCBCYXNp
Y0Jsb2NrKiBzZWNvbmRCbG9jaywKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxPiBqZXR0
aXNvbmVkQmxvY2tzKQogICAgIHsKICAgICAgICAgLy8gVGhpcyB3aWxsIGFkZCBhbGwgb2YgdGhl
IG5vZGVzIGluIHNlY29uZEJsb2NrIHRvIGZpcnN0QmxvY2ssIGJ1dCBpbiBzbyBkb2luZwogICAg
ICAgICAvLyBpdCB3aWxsIGFsc28gZW5zdXJlIHRoYXQgYW55IEdldExvY2FscyBmcm9tIHRoZSBz
ZWNvbmQgYmxvY2sgdGhhdCByZWZlciB0bwpAQCAtNDExLDkgKzM5Myw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIC8vIHRoZW4gUGhhbnRvbXMgYXJlIGluc2VydGVkIGZvciBhbnl0aGluZyB0aGF0IHRo
ZSBqZXR0aXNvbmVkQmxvY2sgd291bGQgaGF2ZQogICAgICAgICAvLyBrZXB0IGFsaXZlLgogICAg
ICAgICAKLSAgICAgICAgQmFzaWNCbG9jayogZmlyc3RCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
Zmlyc3RCbG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgQmFzaWNCbG9jayogc2Vjb25kQmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW3NlY29uZEJsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICAKICAg
ICAgICAgLy8gUmVtb3ZlIHRoZSB0ZXJtaW5hbCBvZiBmaXJzdEJsb2NrIHNpbmNlIHdlIGRvbid0
IG5lZWQgaXQgYW55bW9yZS4gV2VsbCwgd2UgZG9uJ3QKICAgICAgICAgLy8gcmVhbGx5IHJlbW92
ZSBpdDsgd2UgYWN0dWFsbHkgdHVybiBpdCBpbnRvIGEgUGhhbnRvbS4KICAgICAgICAgQVNTRVJU
KGZpcnN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKQEAgLTQyMSw4ICs0MDAsOCBAQCBw
cml2YXRlOgogICAgICAgICBmaXJzdEJsb2NrLT5sYXN0KCktPmNvbnZlcnRUb1BoYW50b20oKTsK
ICAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPmxhc3QoKS0+cmVmQ291bnQoKSA9PSAxKTsKICAg
ICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGpldHRpc29uZWRCbG9ja0luZGljZXMu
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW2pldHRpc29uZWRCbG9ja0luZGljZXNbaV1dLmdldCgpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBqZXR0aXNvbmVkQmxvY2tzLnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrID0gamV0dGlzb25lZEJsb2Nr
c1tpXTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gVGltZSB0byBpbnNlcnQgZ2hvc3Rp
ZXMgZm9yIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUga2VwdCBhbGl2ZSBpbiBjYXNlIHdlIE9TUgog
ICAgICAgICAgICAgLy8gZXhpdCBwcmlvciB0byBoaXR0aW5nIHRoZSBmaXJzdEJsb2NrJ3MgdGVy
bWluYWwsIGFuZCBlbmQgdXAgZ29pbmcgZG93biBhCkBAIC00NDcsMjMgKzQyNiwyMyBAQCBwcml2
YXRlOgogICAgICAgICAvLyBwcmVkZWNlc3NvcnMgZWFnZXJseSB0byBlbnN1cmUgdGhhdCB3ZSBr
bm93IHdoYXQgdGhleSBhcmUgaW4gY2FzZSB0aGUgbmV4dCBibG9jayB3ZQogICAgICAgICAvLyBj
b25zaWRlciBpbiB0aGlzIHBoYXNlIHdpc2hlcyB0byBxdWVyeSB0aGUgcHJlZGVjZXNzb3JzIG9m
IG9uZSBvZiB0aGUgYmxvY2tzIHdlCiAgICAgICAgIC8vIGFmZmVjdGVkLgotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3NvcnMoZmlyc3RCbG9jayk7IGktLTspIHsK
LSAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fZ3JhcGgubV9ibG9ja3NbbV9n
cmFwaC5zdWNjZXNzb3IoZmlyc3RCbG9jaywgaSldLmdldCgpOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2op
IHsKLSAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29yc1tqXSA9PSBz
ZWNvbmRCbG9ja0luZGV4KQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPm1fcHJlZGVj
ZXNzb3JzW2pdID0gZmlyc3RCbG9ja0luZGV4OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBm
aXJzdEJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHN1Y2Nlc3NvciA9IGZpcnN0QmxvY2stPnN1Y2Nlc3NvcihpKTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IDA7IGogPCBzdWNjZXNzb3ItPnByZWRlY2Vzc29ycy5zaXplKCk7ICsr
aikgeworICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPnByZWRlY2Vzc29yc1tqXSA9PSBz
ZWNvbmRCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnNb
al0gPSBmaXJzdEJsb2NrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICAvLyBGaXggdGhlIHByZWRlY2Vzc29ycyBvZiBteSBmb3JtZXIgc3VjY2Vzc29ycy4gQWdh
aW4sIHdlJ2QgcmF0aGVyIG5vdCBkbyB0aGlzLCBidXQgaXQncwogICAgICAgICAvLyBhbiB1bmZv
cnR1bmF0ZSBuZWNlc3NpdHkuIFNlZSBhYm92ZSBjb21tZW50LgotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBqZXR0aXNvbmVkQmxvY2tJbmRpY2VzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAg
IGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoZmlyc3RCbG9ja0luZGV4LCBqZXR0aXNvbmVkQmxv
Y2tJbmRpY2VzW2ldKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gamV0dGlzb25lZEJsb2Nr
cy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGZp
cnN0QmxvY2ssIGpldHRpc29uZWRCbG9ja3NbaV0pOwogICAgICAgICAKICAgICAgICAgZmlyc3RC
bG9jay0+dmFsdWVzQXRUYWlsID0gc2Vjb25kQmxvY2stPnZhbHVlc0F0VGFpbDsKICAgICAgICAg
Zmlyc3RCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uID0gc2Vjb25kQmxvY2stPmNmYUJyYW5jaERp
cmVjdGlvbjsKICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nbc2Vjb25kQmxvY2tJ
bmRleF0uY2xlYXIoKTsKKyAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soc2Vjb25kQmxvY2spOwog
ICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjksOCArNjksOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgU2FtcGxpbmdSZWdp
b24gc2FtcGxpbmdSZWdpb24oIkRGRyBDUFMgUmV0aHJlYWRpbmc6IGZyZWVVbm5lY2Vzc2FyeU5v
ZGVzIik7CiAgICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1f
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwpAQCAt
Mzg3LDggKzM4Nyw4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBTYW1wbGluZ1JlZ2lvbiBz
YW1wbGluZ1JlZ2lvbigiREZHIENQUyBSZXRocmVhZGluZzogY2Fub25pY2FsaXplTG9jYWxzSW5C
bG9ja3MiKTsKICAgICAgICAgCi0gICAgICAgIGZvciAobV9ibG9ja0luZGV4ID0gbV9ncmFwaC5t
X2Jsb2Nrcy5zaXplKCk7IG1fYmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgbV9ibG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbbV9ibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7
CisgICAgICAgICAgICBtX2Jsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAg
ICAgICAgIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2soKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTQwMiwyMCArNDAyLDE5IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUg
dGhhdCBhdHRlbXB0cyB0byB1c2UgdGhpcyBmYWlsIGluc3RhbnRseS4KICAgICAgICAgbV9ibG9j
ayA9IDA7Ci0gICAgICAgIG1fYmxvY2tJbmRleCA9IE5vQmxvY2s7CiAgICAgICAgIAogICAgICAg
ICB3aGlsZSAoIXBoaVN0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgUGhpU3RhY2tFbnRy
eSBlbnRyeSA9IHBoaVN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgIHBoaVN0YWNrLnJlbW92ZUxh
c3QoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBlbnRy
eS5tX2Jsb2NrOwotICAgICAgICAgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMgPSBi
bG9jay0+bV9wcmVkZWNlc3NvcnM7CisgICAgICAgICAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRl
Y2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnM7CiAgICAgICAgICAgICBOb2RlKiBjdXJyZW50
UGhpID0gZW50cnkubV9waGk7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gY3VycmVudFBoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBzaXpl
X3QgaW5kZXggPSBlbnRyeS5tX2luZGV4OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gcHJlZGVjZXNzb3JzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3ByZWRlY2Vz
c29yc1tpXV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JC
bG9jayA9IHByZWRlY2Vzc29yc1tpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBOb2RlKiB2YXJpYWJsZUluUHJldmlvdXMgPSBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGluZGV4KTsKICAgICAgICAgICAgICAgICBpZiAoIXZh
cmlhYmxlSW5QcmV2aW91cykgewpAQCAtNDgxLDcgKzQ4MCw2IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBtX2xvY2FsUGhpU3RhY2s7CiAgICAgfQogICAgIAotICAgIEJsb2NrSW5kZXggbV9i
bG9ja0luZGV4OwogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgVmVjdG9yPFBoaVN0YWNr
RW50cnksIDEyOD4gbV9hcmd1bWVudFBoaVN0YWNrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5
LCAxMjg+IG1fbG9jYWxQaGlTdGFjazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsOCBAQCBw
dWJsaWM6CiAgICAgICAgIAogICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgCi0g
ICAgICAgIGZvciAodW5zaWduZWQgYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpOyArK2Jsb2NrKQotICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ1NFKG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tdLmdldCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkKKyAgICAg
ICAgICAgIHBlcmZvcm1CbG9ja0NTRShtX2dyYXBoLmJsb2NrKGJsb2NrKSk7CiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMjQgKzUyLDIzIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAKLSAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrczsgKyti
bG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKGJsb2NrLT5jZmFGb3VuZENvbnN0YW50cykKLSAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IGZvbGRDb25zdGFudHMoYmxvY2tJbmRleCk7CisgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBmb2xkQ29uc3RhbnRzKGJsb2NrKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQogCiBwcml2YXRlOgotICAg
IGJvb2wgZm9sZENvbnN0YW50cyhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgYm9vbCBmb2xk
Q29uc3RhbnRzKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCJDb25zdGFudCBmb2xkaW5n
IGNvbnNpZGVyaW5nIEJsb2NrICMldS5cbiIsIGJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9n
KCJDb25zdGFudCBmb2xkaW5nIGNvbnNpZGVyaW5nIEJsb2NrICIsICpibG9jaywgIi5cbiIpOwog
I2VuZGlmCi0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIG1f
c3RhdGUuYmVnaW5CYXNpY0Jsb2NrKGJsb2NrKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9j
aykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJl
dmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw4IEBAIHB1YmxpYzoKICAgICBib29sIHJ1
bigpCiAgICAgewogICAgICAgICAvLyBGaXJzdCByZXNldCB0aGUgY291bnRzIHRvIDAgZm9yIGFs
bCBub2Rlcy4KLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgp
OworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICgh
YmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykKQEAgLTYw
LDggKzYwLDggQEAgcHVibGljOgogICAgICAgICAvLyAtIE5vZGVzIHRoYXQgYXJlIG11c3QtZ2Vu
ZXJhdGUuCiAgICAgICAgIC8vIC0gTm9kZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdHlwZSBj
aGVja3MuCiAgICAgICAgIC8vIFNldCB0aGVpciByZWYgY291bnRzIHRvIDEgYW5kIHB1dCB0aGVt
IG9uIHRoZSB3b3JrbGlzdC4KLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewot
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5k
ZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAg
ICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0t
OykgewpAQCAtODEsOCArODEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBERkdfTk9ERV9ET19U
T19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBjb3VudEVkZ2UpOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIERpc2Fzc2Vt
Ymxlcjo6RGlzYXNzZW1ibGVyKEdyYXBoJiBncmFwaCkKICAgICA6IG1fZ3JhcGgoZ3JhcGgpCiB7
Ci0gICAgbV9sYWJlbEZvckJsb2NrSW5kZXgucmVzaXplKGdyYXBoLm1fYmxvY2tzLnNpemUoKSk7
CisgICAgbV9sYWJlbEZvckJsb2NrSW5kZXgucmVzaXplKGdyYXBoLm51bUJsb2NrcygpKTsKIH0K
IAogdm9pZCBEaXNhc3NlbWJsZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikKQEAgLTk3LDEzICs5NywxMyBAQCBWZWN0b3I8RGlzYXNzZW1ibGVyOjpEdW1w
ZWRPcD4gRGlzYXNzZW1iCiAgICAgCiAgICAgTm9kZSogbGFzdE5vZGUgPSAwOwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBwcmV2aW91c0xhYmVsID0gbV9zdGFydE9mQ29kZTsKLSAgICBmb3Ig
KHNpemVfdCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgIGZvciAoc2l6ZV90IGJsb2NrSW5kZXgg
PSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAg
ICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBkdW1wRGlz
YXNzZW1ibHkob3V0LCBkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZlciwgcHJldmlvdXNMYWJl
bCwgbV9sYWJlbEZvckJsb2NrSW5kZXhbYmxvY2tJbmRleF0sIGxhc3ROb2RlKTsKICAgICAgICAg
YXBwZW5kKHJlc3VsdCwgb3V0LCBwcmV2aW91c09yaWdpbik7Ci0gICAgICAgIG1fZ3JhcGguZHVt
cEJsb2NrSGVhZGVyKG91dCwgcHJlZml4LCBibG9ja0luZGV4LCBHcmFwaDo6RHVtcExpdmVQaGlz
T25seSk7CisgICAgICAgIG1fZ3JhcGguZHVtcEJsb2NrSGVhZGVyKG91dCwgcHJlZml4LCBibG9j
aywgR3JhcGg6OkR1bXBMaXZlUGhpc09ubHkpOwogICAgICAgICBhcHBlbmQocmVzdWx0LCBvdXQs
IHByZXZpb3VzT3JpZ2luKTsKICAgICAgICAgTm9kZSogbGFzdE5vZGVGb3JEaXNhc3NlbWJseSA9
IGJsb2NrLT5hdCgwKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+c2l6
ZSgpOyArK2kpIHsKQEAgLTExOCw3ICsxMTgsNyBAQCBWZWN0b3I8RGlzYXNzZW1ibGVyOjpEdW1w
ZWRPcD4gRGlzYXNzZW1iCiAgICAgICAgICAgICAgICAgLy8gYXMgdGhlIGVuZCBwb2ludC4gVGhp
cyBjYXNlIGlzIGhpdCBlaXRoZXIgZHVyaW5nIHBlZXBob2xlIGNvbXBhcmUKICAgICAgICAgICAg
ICAgICAvLyBvcHRpbWl6YXRpb25zICh0aGUgQnJhbmNoIHdvbid0IGhhdmUgaXRzIG93biBsYWJl
bCkgb3IgaWYgd2UgaGF2ZSBhCiAgICAgICAgICAgICAgICAgLy8gZm9yY2VkIE9TUiBleGl0Lgot
ICAgICAgICAgICAgICAgIGlmIChibG9ja0luZGV4ICsgMSA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpKQorICAgICAgICAgICAgICAgIGlmIChibG9ja0luZGV4ICsgMSA8IG1fZ3JhcGgubnVtQmxv
Y2tzKCkpCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMYWJlbCA9IG1fbGFiZWxGb3JCbG9j
a0luZGV4W2Jsb2NrSW5kZXggKyAxXTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRMYWJlbCA9IG1fZW5kT2ZNYWluUGF0aDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuaAkocmV2aXNpb24gMTUyMzM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgRGlzYXNzZW1ibGVyKEdyYXBoJik7
CiAgICAgCiAgICAgdm9pZCBzZXRTdGFydE9mQ29kZShNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFi
ZWwpIHsgbV9zdGFydE9mQ29kZSA9IGxhYmVsOyB9Ci0gICAgdm9pZCBzZXRGb3JCbG9jayhCbG9j
a0luZGV4IGJsb2NrSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbCkKKyAgICB2b2lk
IHNldEZvckJsb2NrSW5kZXgoQmxvY2tJbmRleCBibG9ja0luZGV4LCBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbGFiZWwpCiAgICAgewogICAgICAgICBtX2xhYmVsRm9yQmxvY2tJbmRleFtibG9ja0lu
ZGV4XSA9IGxhYmVsOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9taW5hdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb21pbmF0b3JzLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsOSBA
QCB2b2lkIERvbWluYXRvcnM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQogewogICAgIC8vIFRoaXMg
aW1wbGVtZW50cyBhIG5haXZlIGRvbWluYXRvciBzb2x2ZXIuCiAgICAgCi0gICAgQVNTRVJUKGdy
YXBoLm1fYmxvY2tzWzBdLT5tX3ByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChn
cmFwaC5ibG9jaygwKS0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSk7CiAgICAgCi0gICAgdW5zaWdu
ZWQgbnVtQmxvY2tzID0gZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOworICAgIHVuc2lnbmVkIG51bUJs
b2NrcyA9IGdyYXBoLm51bUJsb2NrcygpOwogICAgIAogICAgIGlmIChudW1CbG9ja3MgPiBtX3Jl
c3VsdHMuc2l6ZSgpKSB7CiAgICAgICAgIG1fcmVzdWx0cy5ncm93KG51bUJsb2Nrcyk7CkBAIC02
MCwxMyArNjAsMTMgQEAgdm9pZCBEb21pbmF0b3JzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKICAg
ICAKICAgICBtX3NjcmF0Y2guY2xlYXJBbGwoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1C
bG9ja3M7IGktLTspIHsKLSAgICAgICAgaWYgKCFncmFwaC5tX2Jsb2Nrc1tpXSkKKyAgICAgICAg
aWYgKCFncmFwaC5ibG9jayhpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBtX3Nj
cmF0Y2guc2V0KGkpOwogICAgIH0KICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1CbG9j
a3M7IGktLSA+IDE7KSB7Ci0gICAgICAgIGlmICghZ3JhcGgubV9ibG9ja3NbaV0gfHwgZ3JhcGgu
bV9ibG9ja3NbaV0tPm1fcHJlZGVjZXNzb3JzLmlzRW1wdHkoKSkKKyAgICAgICAgaWYgKCFncmFw
aC5ibG9jayhpKSB8fCBncmFwaC5ibG9jayhpKS0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIG1fcmVzdWx0c1tpXS5jbGVhckFsbCgpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBtX3Jlc3VsdHNbaV0uc2V0KG1fc2NyYXRjaCk7CkBAIC04OCwxNCArODgsMTQgQEAgdm9p
ZCBEb21pbmF0b3JzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKIAogYm9vbCBEb21pbmF0b3JzOjpp
dGVyYXRlRm9yQmxvY2soR3JhcGgmIGdyYXBoLCBCbG9ja0luZGV4IGkpCiB7Ci0gICAgQmFzaWNC
bG9jayogYmxvY2sgPSBncmFwaC5tX2Jsb2Nrc1tpXS5nZXQoKTsKKyAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IGdyYXBoLmJsb2NrKGkpOwogICAgIGlmICghYmxvY2spCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAoYmxvY2stPm1fcHJlZGVjZXNzb3JzLmlzRW1wdHkoKSkKKyAgICBpZiAo
YmxvY2stPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBtX3NjcmF0Y2guc2V0KG1fcmVzdWx0c1tibG9jay0+bV9wcmVkZWNlc3NvcnNbMF1dKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyBqLS0gPiAx
OykKLSAgICAgICAgbV9zY3JhdGNoLmZpbHRlcihtX3Jlc3VsdHNbYmxvY2stPm1fcHJlZGVjZXNz
b3JzW2pdXSk7CisgICAgbV9zY3JhdGNoLnNldChtX3Jlc3VsdHNbYmxvY2stPnByZWRlY2Vzc29y
c1swXS0+aW5kZXhdKTsKKyAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJlZGVjZXNzb3Jz
LnNpemUoKTsgai0tID4gMTspCisgICAgICAgIG1fc2NyYXRjaC5maWx0ZXIobV9yZXN1bHRzW2Js
b2NrLT5wcmVkZWNlc3NvcnNbal0tPmluZGV4XSk7CiAgICAgbV9zY3JhdGNoLnNldChpKTsKICAg
ICByZXR1cm4gbV9yZXN1bHRzW2ldLnNldEFuZENoZWNrKG1fc2NyYXRjaCk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAkocmV2aXNpb24gMTUyMzM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDcgKzQ4LDExIEBAIHB1YmxpYzoKICAgICBib29sIGRvbWluYXRlcyhCbG9j
a0luZGV4IGZyb20sIEJsb2NrSW5kZXggdG8pIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
aXNWYWxpZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fcmVzdWx0c1t0b10uZ2V0KGZyb20pOworICAg
ICAgICByZXR1cm4gbV9yZXN1bHRzW2Zyb21dLmdldCh0byk7CisgICAgfQorICAgIGJvb2wgZG9t
aW5hdGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGRvbWluYXRlcyhmcm9tLT5pbmRleCwgdG8tPmluZGV4KTsKICAgICB9CiAg
ICAgCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw4IEBAIHB1Ymxp
YzoKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKICAgICAg
ICAgCiAgICAgICAgIG1fcHJvZml0YWJpbGl0eUNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCk7ICsrYmxvY2tJbmRleCkKLSAgICAgICAgICAgIGZpeHVwQmxvY2sobV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKSk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRl
eCkKKyAgICAgICAgICAgIGZpeHVwQmxvY2sobV9ncmFwaC5ibG9jayhibG9ja0luZGV4KSk7CiAg
ICAgICAgIAogICAgICAgICB3aGlsZSAobV9wcm9maXRhYmlsaXR5Q2hhbmdlZCkgewogICAgICAg
ICAgICAgbV9wcm9maXRhYmlsaXR5Q2hhbmdlZCA9IGZhbHNlOwpAQCAtNTksOCArNTksOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fYXJndW1lbnRQ
b3NpdGlvbnMuc2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVu
dFBvc2l0aW9uc1tpXS5tZXJnZUFyZ3VtZW50VW5ib3hpbmdBd2FyZW5lc3MoKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkKLSAgICAgICAgICAg
ICAgICBmaXh1cFNldExvY2Fsc0luQmxvY2sobV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5n
ZXQoKSk7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpCisgICAgICAgICAgICAg
ICAgZml4dXBTZXRMb2NhbHNJbkJsb2NrKG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCkpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU3MywxMCArNTczLDEw
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdDaGlsZEVkZ2UtPmhhc0Jv
b2xlYW5SZXN1bHQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4u
c2V0Q2hpbGQxKG5ld0NoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG9CZVRha2VuID0gbm9kZS0+bm90VGFrZW5C
bG9ja0luZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRvQmVOb3RU
YWtlbiA9IG5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+c2V0VGFrZW5CbG9ja0luZGV4KHRvQmVUYWtlbik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXROb3RUYWtlbkJsb2NrSW5kZXgodG9CZU5vdFRha2VuKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRvQmVUYWtlbiA9IG5vZGUtPm5vdFRha2VuQmxv
Y2soKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRvQmVOb3RUYWtlbiA9
IG5vZGUtPnRha2VuQmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFRh
a2VuQmxvY2sodG9CZVRha2VuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE5v
dFRha2VuQmxvY2sodG9CZU5vdFRha2VuKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDE1ICsyNDUsMTUgQEAgdm9p
ZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIGlmIChvcCA9PSBXZWFr
SlNDb25zdGFudCkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPndl
YWtDb25zdGFudCgpKSwgIiAoc3RydWN0dXJlOiAiLCAqbm9kZS0+d2Vha0NvbnN0YW50KCktPnN0
cnVjdHVyZSgpLCAiKSIpOwogICAgIGlmIChub2RlLT5pc0JyYW5jaCgpIHx8IG5vZGUtPmlzSnVt
cCgpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJUOiMiLCBub2RlLT50YWtlbkJsb2NrSW5k
ZXgoKSk7CisgICAgICAgIG91dC5wcmludChjb21tYSwgIlQ6IiwgKm5vZGUtPnRha2VuQmxvY2so
KSk7CiAgICAgaWYgKG5vZGUtPmlzQnJhbmNoKCkpCi0gICAgICAgIG91dC5wcmludChjb21tYSwg
IkY6IyIsIG5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiRjoiLCBub2RlLT5ub3RUYWtlbkJsb2NrKCkpOwogICAgIGlmIChub2RlLT5pc1N3aXRj
aCgpKSB7CiAgICAgICAgIFN3aXRjaERhdGEqIGRhdGEgPSBub2RlLT5zd2l0Y2hEYXRhKCk7CiAg
ICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+a2luZCk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG91dC5w
cmludChjb21tYSwgZGF0YS0+Y2FzZXNbaV0udmFsdWUsICI6IyIsIGRhdGEtPmNhc2VzW2ldLnRh
cmdldCk7Ci0gICAgICAgIG91dC5wcmludChjb21tYSwgImRlZmF1bHQ6IyIsIGRhdGEtPmZhbGxU
aHJvdWdoKTsKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+Y2FzZXNbaV0udmFs
dWUsICI6IiwgKmRhdGEtPmNhc2VzW2ldLnRhcmdldCk7CisgICAgICAgIG91dC5wcmludChjb21t
YSwgImRlZmF1bHQ6IiwgKmRhdGEtPmZhbGxUaHJvdWdoKTsKICAgICB9CiAgICAgb3V0LnByaW50
KGNvbW1hLCAiYmMjIiwgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAKQEAg
LTI2OSwzNyArMjY5LDM1IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QKICAgICBvdXQucHJpbnQoIlxuIik7CiB9CiAKLXZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRl
cihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIEJsb2NrSW5kZXggYmxvY2tJ
bmRleCwgUGhpTm9kZUR1bXBNb2RlIHBoaU5vZGVEdW1wTW9kZSkKK3ZvaWQgR3JhcGg6OmR1bXBC
bG9ja0hlYWRlcihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIEJhc2ljQmxv
Y2sqIGJsb2NrLCBQaGlOb2RlRHVtcE1vZGUgcGhpTm9kZUR1bXBNb2RlKQogewotICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0KLSAgICBvdXQucHJp
bnQocHJlZml4LCAiQmxvY2sgIyIsIGJsb2NrSW5kZXgsICIgKCIsIGJsb2NrLT5hdCgwKS0+Y29k
ZU9yaWdpbiwgIik6ICIsIGJsb2NrLT5pc1JlYWNoYWJsZSA/ICIiIDogIihza2lwcGVkKSIsIGJs
b2NrLT5pc09TUlRhcmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6ICIiLCAiXG4iKTsKKyAgICBvdXQu
cHJpbnQocHJlZml4LCAiQmxvY2sgIiwgKmJsb2NrLCAiICgiLCBibG9jay0+YXQoMCktPmNvZGVP
cmlnaW4sICIpOiAiLCBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIoc2tpcHBlZCkiLCBibG9j
ay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIiwgIlxuIik7CiAgICAgb3V0LnBy
aW50KHByZWZpeCwgIiAgUHJlZGVjZXNzb3JzOiIpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQo
IiAjIiwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG91dC5wcmludCgi
ICMiLCBibG9jay0+cHJlZGVjZXNzb3JzW2ldKTsKICAgICBvdXQucHJpbnQoIlxuIik7CiAgICAg
aWYgKG1fZG9taW5hdG9ycy5pc1ZhbGlkKCkpIHsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwg
IiAgRG9taW5hdGVkIGJ5OiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYmxv
Y2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5kb21pbmF0
ZXMoaSwgYmxvY2tJbmRleCkpCisgICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5kb21pbmF0
ZXMoaSwgYmxvY2stPmJsb2NrSW5kZXgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgb3V0LnByaW50KCIgIyIsIGkpOwogICAgICAgICB9CiAgICAgICAgIG91dC5wcmlu
dCgiXG4iKTsKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVzOiIpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5kb21pbmF0ZXMoYmxvY2tJbmRleCwgaSkpCisgICAg
ICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5kb21pbmF0ZXMoYmxvY2stPmJsb2NrSW5kZXgsIGkp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgb3V0LnByaW50KCIgIyIs
IGkpOwogICAgICAgICB9CiAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICB9CiAgICAgaWYg
KG1fbmF0dXJhbExvb3BzLmlzVmFsaWQoKSkgewotICAgICAgICBpZiAoY29uc3QgTmF0dXJhbExv
b3AqIGxvb3AgPSBtX25hdHVyYWxMb29wcy5oZWFkZXJPZihibG9ja0luZGV4KSkgeworICAgICAg
ICBpZiAoY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBtX25hdHVyYWxMb29wcy5oZWFkZXJPZihi
bG9jaykpIHsKICAgICAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIExvb3AgaGVhZGVyLCBj
b250YWluczoiKTsKICAgICAgICAgICAgIFZlY3RvcjxCbG9ja0luZGV4PiBzb3J0ZWRCbG9ja0xp
c3Q7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9vcC0+c2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICAgICAgc29ydGVkQmxvY2tMaXN0LmFwcGVuZChsb29wLT5hdChpKSk7
CisgICAgICAgICAgICAgICAgc29ydGVkQmxvY2tMaXN0LmFwcGVuZChsb29wLT5hdChpKS0+aW5k
ZXgpOwogICAgICAgICAgICAgc3RkOjpzb3J0KHNvcnRlZEJsb2NrTGlzdC5iZWdpbigpLCBzb3J0
ZWRCbG9ja0xpc3QuZW5kKCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNvcnRlZEJsb2NrTGlzdC5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICBvdXQucHJpbnQo
IiAjIiwgc29ydGVkQmxvY2tMaXN0W2ldKTsKQEAgLTMxMSw3ICszMDksNyBAQCB2b2lkIEdyYXBo
OjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiAgICAgICAgIGlmICghY29udGFpbmluZ0xv
b3BzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgQ29udGFp
bmluZyBsb29wIGhlYWRlcnM6Iik7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgY29udGFpbmluZ0xvb3BzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiICMiLCBjb250YWluaW5nTG9vcHNbaV0tPmhlYWRlcigpKTsKKyAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIiAiLCAqY29udGFpbmluZ0xvb3BzW2ldLT5oZWFkZXIoKSk7CiAgICAgICAgICAg
ICBvdXQucHJpbnQoIlxuIik7CiAgICAgICAgIH0KICAgICB9CkBAIC0zOTQsMjkgKzM5MiwyNSBA
QCB2b2lkIEdyYXBoOjpkZXRocmVhZCgpCiAgICAgbV9mb3JtID0gTG9hZFN0b3JlOwogfQogCi12
b2lkIEdyYXBoOjpoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xp
c3QsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCkKK3Zv
aWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xp
c3QsIEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IpCiB7Ci0gICAgQmFz
aWNCbG9jayogc3VjY2Vzc29yID0gbV9ibG9ja3Nbc3VjY2Vzc29ySW5kZXhdLmdldCgpOwogICAg
IGlmICghc3VjY2Vzc29yLT5pc1JlYWNoYWJsZSkgewogICAgICAgICBzdWNjZXNzb3ItPmlzUmVh
Y2hhYmxlID0gdHJ1ZTsKLSAgICAgICAgd29ya2xpc3QuYXBwZW5kKHN1Y2Nlc3NvckluZGV4KTsK
KyAgICAgICAgd29ya2xpc3QuYXBwZW5kKHN1Y2Nlc3Nvcik7CiAgICAgfQogICAgIAotICAgIHN1
Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGJsb2NrSW5kZXgpOworICAgIHN1Y2Nlc3Nv
ci0+cHJlZGVjZXNzb3JzLmFwcGVuZChibG9jayk7CiB9CiAKIHZvaWQgR3JhcGg6OmRldGVybWlu
ZVJlYWNoYWJpbGl0eSgpCiB7Ci0gICAgVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiB3b3JrbGlzdDsK
LSAgICB3b3JrbGlzdC5hcHBlbmQoMCk7Ci0gICAgbV9ibG9ja3NbMF0tPmlzUmVhY2hhYmxlID0g
dHJ1ZTsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE2PiB3b3JrbGlzdDsKKyAgICB3b3JrbGlz
dC5hcHBlbmQoYmxvY2soMCkpOworICAgIGJsb2NrKDApLT5pc1JlYWNoYWJsZSA9IHRydWU7CiAg
ICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgQmxvY2tJbmRleCBpbmRl
eCA9IHdvcmtsaXN0Lmxhc3QoKTsKLSAgICAgICAgd29ya2xpc3QucmVtb3ZlTGFzdCgpOwotICAg
ICAgICAKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7
CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtU3VjY2Vzc29ycyhibG9jayk7IGktLTspCi0gICAgICAg
ICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBzdWNjZXNzb3IoYmxvY2ssIGkp
KTsKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgYmxvY2ssIHN1Y2Nlc3Nv
cihibG9jaywgaSkpOwogICAgIH0KIH0KIApAQCAtNDI3LDcgKzQyMSw3IEBAIHZvaWQgR3JhcGg6
OnJlc2V0UmVhY2hhYmlsaXR5KCkKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBibG9jay0+aXNSZWFjaGFibGUgPSBmYWxzZTsKLSAgICAgICAgYmxv
Y2stPm1fcHJlZGVjZXNzb3JzLmNsZWFyKCk7CisgICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMu
Y2xlYXIoKTsKICAgICB9CiAgICAgCiAgICAgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTIzMzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
OSw3ICsxNjksNyBAQCBwdWJsaWM6CiAgICAgLy8gQ29kZUJsb2NrIGlzIG9wdGlvbmFsLCBidXQg
bWF5IGFsbG93IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gYmUgZHVtcGVkIChlLmcuIElkZW50
aWZpZXIgbmFtZXMpLgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxl
KCkpOwogICAgIGVudW0gUGhpTm9kZUR1bXBNb2RlIHsgRHVtcExpdmVQaGlzT25seSwgRHVtcEFs
bFBoaXMgfTsKLSAgICB2b2lkIGR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYsIGNvbnN0IGNo
YXIqIHByZWZpeCwgQmxvY2tJbmRleCwgUGhpTm9kZUR1bXBNb2RlKTsKKyAgICB2b2lkIGR1bXBC
bG9ja0hlYWRlcihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmFzaWNCbG9jayos
IFBoaU5vZGVEdW1wTW9kZSk7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiwgRWRnZSk7CiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKik7CiAg
ICAgc3RhdGljIGludCBhbW91bnRPZk5vZGVXaGl0ZVNwYWNlKE5vZGUqKTsKQEAgLTE3OSw4ICsx
NzksNiBAQCBwdWJsaWM6CiAgICAgLy8gcHJlY2VkaW5nIG5vZGUuIFJldHVybnMgdHJ1ZSBpZiBh
bnl0aGluZyB3YXMgcHJpbnRlZC4KICAgICBib29sIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFt
JiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnRO
b2RlKTsKIAotICAgIEJsb2NrSW5kZXggYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3Rv
cjxCbG9ja0luZGV4PiYgYmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKTsKLQogICAgIFNw
ZWN1bGF0ZWRUeXBlIGdldEpTQ29uc3RhbnRTcGVjdWxhdGlvbihOb2RlKiBub2RlKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVZhbHVlKG5vZGUtPnZhbHVlT2ZKU0NvbnN0
YW50KG1fY29kZUJsb2NrKSk7CkBAIC00NTUsMTcgKzQ1MywyNCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpOwogICAgIH0KICAgICAKLSAgICB1
bnNpZ25lZCBudW1TdWNjZXNzb3JzKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIEJsb2NrSW5kZXgg
bnVtQmxvY2tzKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNC
bG9jayogYmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nr
c1tibG9ja0luZGV4XS5nZXQoKTsgfQorICAgIEJhc2ljQmxvY2sqIGxhc3RCbG9jaygpIGNvbnN0
IHsgcmV0dXJuIGJsb2NrKG51bUJsb2NrcygpIC0gMSk7IH0KKworICAgIHZvaWQgYXBwZW5kQmxv
Y2soUGFzc1JlZlB0cjxCYXNpY0Jsb2NrPiBiYXNpY0Jsb2NrKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGJsb2NrLT5sYXN0KCktPm51bVN1Y2Nlc3NvcnMoKTsKKyAgICAgICAgYmFzaWNCbG9jay0+
YmxvY2tJbmRleCA9IG1fYmxvY2tzLnNpemUoKTsKKyAgICAgICAgbV9ibG9ja3MuYXBwZW5kKGJh
c2ljQmxvY2spOwogICAgIH0KLSAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvcihCYXNpY0Jsb2NrKiBi
bG9jaywgdW5zaWduZWQgaW5kZXgpCisgICAgCisgICAgdm9pZCBraWxsQmxvY2soQmxvY2tJbmRl
eCBibG9ja0luZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1Y2Nl
c3NvcihpbmRleCk7CisgICAgICAgIG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmNsZWFyKCk7CiAgICAg
fQotICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yRm9yQ29uZGl0aW9uKEJhc2ljQmxvY2sqIGJsb2Nr
LCBib29sIGNvbmRpdGlvbikKKyAgICAKKyAgICB2b2lkIGtpbGxCbG9jayhCYXNpY0Jsb2NrKiBi
YXNpY0Jsb2NrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPnN1Y2Nlc3Nv
ckZvckNvbmRpdGlvbihjb25kaXRpb24pOworICAgICAgICBraWxsQmxvY2soYmFzaWNCbG9jay0+
aW5kZXgpOwogICAgIH0KICAgICAKICAgICBib29sIGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUq
IG5vZGUpCkBAIC02NTksNyArNjY0LDcgQEAgcHVibGljOgogICAgIAogICAgIE5vZGVBbGxvY2F0
b3ImIG1fYWxsb2NhdG9yOwogCi0gICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBt
X2Jsb2NrczsKKyAgICBWZWN0b3I8IFJlZlB0cjxCYXNpY0Jsb2NrPiAsIDg+IG1fYmxvY2tzOwog
ICAgIFZlY3RvcjxFZGdlLCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKICAgICBWZWN0b3I8U3RvcmFn
ZUFjY2Vzc0RhdGE+IG1fc3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAgVmVjdG9yPE5vZGUqLCA4PiBt
X2FyZ3VtZW50czsKQEAgLTY4Myw3ICs2ODgsNyBAQCBwdWJsaWM6CiAgICAgUmVmQ291bnRTdGF0
ZSBtX3JlZkNvdW50U3RhdGU7CiBwcml2YXRlOgogICAgIAotICAgIHZvaWQgaGFuZGxlU3VjY2Vz
c29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5k
ZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpOworICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29y
KFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgQmFzaWNCbG9jayosIEJhc2ljQmxv
Y2sqIHN1Y2Nlc3Nvcik7CiAgICAgCiAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZEltbWVkaWF0
ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogYWRkLCBib29sIHZhcmlhYmxlU2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlciwgTm9kZSogaW1tZWRpYXRlKQogICAgIHsKQEAgLTczMiwyNyArNzM3LDYg
QEAgcHJpdmF0ZToKICAgICB9CiB9OwogCi1jbGFzcyBHZXRCeXRlY29kZUJlZ2luRm9yQmxvY2sg
ewotcHVibGljOgotICAgIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayhHcmFwaCYgZ3JhcGgpCi0g
ICAgICAgIDogbV9ncmFwaChncmFwaCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVk
IG9wZXJhdG9yKCkoQmxvY2tJbmRleCogYmxvY2tJbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX2dyYXBoLm1fYmxvY2tzWypibG9ja0luZGV4XS0+Ynl0ZWNvZGVCZWdpbjsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGgmIG1fZ3JhcGg7Ci19OwotCi1pbmxpbmUgQmxvY2tJ
bmRleCBHcmFwaDo6YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCbG9ja0luZGV4
PiYgbGlua2luZ1RhcmdldHMsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pCi17Ci0gICAgcmV0dXJu
ICpiaW5hcnlTZWFyY2g8QmxvY2tJbmRleCwgdW5zaWduZWQ+KGxpbmtpbmdUYXJnZXRzLCBsaW5r
aW5nVGFyZ2V0cy5zaXplKCksIGJ5dGVjb2RlQmVnaW4sIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9j
aygqdGhpcykpOwotfQotCiAjZGVmaW5lIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBu
b2RlLCB0aGluZ1RvRG8pIGRvIHsgICAgICAgICAgICBcCiAgICAgICAgIE5vZGUqIF9ub2RlID0g
KG5vZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
ICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgSklU
Q29tcGlsZXI6OkpJVENvbXBpbGVyKEdyYXBoJiBkZmcpCiAgICAgOiBDQ2FsbEhlbHBlcnMoJmRm
Zy5tX3ZtLCBkZmcubV9jb2RlQmxvY2spCiAgICAgLCBtX2dyYXBoKGRmZykKICAgICAsIG1faml0
Q29kZShhZG9wdFJlZihuZXcgSklUQ29kZSgpKSkKLSAgICAsIG1fYmxvY2tIZWFkcyhkZmcubV9i
bG9ja3Muc2l6ZSgpKQorICAgICwgbV9ibG9ja0hlYWRzKGRmZy5udW1CbG9ja3MoKSkKICAgICAs
IG1fY3VycmVudENvZGVPcmlnaW5JbmRleCgwKQogewogICAgIGlmIChzaG91bGRTaG93RGlzYXNz
ZW1ibHkoKSB8fCBtX2dyYXBoLm1fdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTUyMzM4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTYsMTEgKzI5NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGlzYXNzZW1i
bGVyLT5zZXRTdGFydE9mQ29kZShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7CiAgICAgfQog
ICAgIAotICAgIHZvaWQgc2V0Rm9yQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHZv
aWQgc2V0Rm9yQmxvY2soQmFzaWNCbG9jayogYmxvY2spCiAgICAgewogICAgICAgICBpZiAoTElL
RUxZKCFtX2Rpc2Fzc2VtYmxlcikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZGlz
YXNzZW1ibGVyLT5zZXRGb3JCbG9jayhibG9ja0luZGV4LCBsYWJlbElnbm9yaW5nV2F0Y2hwb2lu
dHMoKSk7CisgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCbG9jayhibG9jaywgbGFiZWxJ
Z25vcmluZ1dhdGNocG9pbnRzKCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldEZvck5vZGUo
Tm9kZSogbm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExv
b3BzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVy
YWxMb29wcy5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTmF0dXJhbExvb3BzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMjYgKzYwLDI2IEBA
IHZvaWQgTmF0dXJhbExvb3BzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKICAgICAKICAgICBtX2xv
b3BzLnJlc2l6ZSgwKTsKICAgICAKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdy
YXBoLm1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IGdyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsK
KyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAg
ICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gZ3JhcGgubnVtU3VjY2Vzc29ycyhibG9jayk7IGktLTspIHsK
LSAgICAgICAgICAgIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXggPSBncmFwaC5zdWNjZXNzb3Io
YmxvY2ssIGkpOwotICAgICAgICAgICAgaWYgKCFncmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVz
KHN1Y2Nlc3NvckluZGV4LCBibG9ja0luZGV4KSkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
YmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayog
c3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihpKTsKKyAgICAgICAgICAgIGlmICghZ3JhcGgu
bV9kb21pbmF0b3JzLmRvbWluYXRlcyhzdWNjZXNzb3IsIGJsb2NrKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IG1fbG9vcHMuc2l6ZSgpOyBqLS07KSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fbG9vcHNbaV0uaGVhZGVyKCkgPT0gc3VjY2Vzc29ySW5kZXgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbV9sb29wc1tpXS5hZGRCbG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAg
ICAgICBpZiAobV9sb29wc1tpXS5oZWFkZXIoKSA9PSBzdWNjZXNzb3IpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbV9sb29wc1tpXS5hZGRCbG9jayhibG9jayk7CiAgICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAoZm91bmQpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBO
YXR1cmFsTG9vcCBsb29wKHN1Y2Nlc3NvckluZGV4KTsKLSAgICAgICAgICAgIGxvb3AuYWRkQmxv
Y2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBOYXR1cmFsTG9vcCBsb29wKHN1Y2Nlc3Nvcik7
CisgICAgICAgICAgICBsb29wLmFkZEJsb2NrKGJsb2NrKTsKICAgICAgICAgICAgIG1fbG9vcHMu
YXBwZW5kKGxvb3ApOwogICAgICAgICB9CiAgICAgfQpAQCAtODgsOCArODgsOCBAQCB2b2lkIE5h
dHVyYWxMb29wczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIGRhdGFMb2coIkFmdGVy
IGJvb3RzdHJhcDogIiwgKnRoaXMsICJcbiIpOwogICAgIAogICAgIEZhc3RCaXRWZWN0b3Igc2Vl
bkJsb2NrczsKLSAgICBWZWN0b3I8QmxvY2tJbmRleCwgND4gYmxvY2tXb3JrbGlzdDsKLSAgICBz
ZWVuQmxvY2tzLnJlc2l6ZShncmFwaC5tX2Jsb2Nrcy5zaXplKCkpOworICAgIFZlY3RvcjxCYXNp
Y0Jsb2NrKiwgND4gYmxvY2tXb3JrbGlzdDsKKyAgICBzZWVuQmxvY2tzLnJlc2l6ZShncmFwaC5u
dW1CbG9ja3MoKSk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb29wcy5zaXplKCk7
IGktLTspIHsKICAgICAgICAgTmF0dXJhbExvb3AmIGxvb3AgPSBtX2xvb3BzW2ldOwpAQCAtMTAx
LDMwICsxMDEsMjcgQEAgdm9pZCBOYXR1cmFsTG9vcHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQog
ICAgICAgICAgICAgZGF0YUxvZygiRGVhbGluZyB3aXRoIGxvb3AgIiwgbG9vcCwgIlxuIik7CiAg
ICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBsb29wLnNpemUoKTsgai0tOykgewot
ICAgICAgICAgICAgc2VlbkJsb2Nrcy5zZXQobG9vcFtqXSk7CisgICAgICAgICAgICBzZWVuQmxv
Y2tzLnNldChsb29wW2pdLT5pbmRleCk7CiAgICAgICAgICAgICBibG9ja1dvcmtsaXN0LmFwcGVu
ZChsb29wW2pdKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgd2hpbGUgKCFibG9ja1dv
cmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
YmxvY2tXb3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBibG9ja1dvcmtsaXN0LnRha2VMYXN0KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBEZWFsaW5nIHdpdGggIyIs
IGJsb2NrSW5kZXgsICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBEZWFsaW5n
IHdpdGggIiwgKmJsb2NrLCAiXG4iKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGJs
b2NrSW5kZXggPT0gbG9vcC5oZWFkZXIoKSkKKyAgICAgICAgICAgIGlmIChibG9jayA9PSBsb29w
LmhlYWRlcigpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdl
dCgpOwotICAgICAgICAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgai0tOykg
ewotICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggcHJlZGVjZXNzb3JJbmRleCA9IGJsb2NrLT5t
X3ByZWRlY2Vzc29yc1tqXTsKLSAgICAgICAgICAgICAgICBpZiAoc2VlbkJsb2Nrcy5nZXQocHJl
ZGVjZXNzb3JJbmRleCkpCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJl
ZGVjZXNzb3JzLnNpemUoKTsgai0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHBy
ZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1tqXTsKKyAgICAgICAgICAgICAgICBpZiAo
c2VlbkJsb2Nrcy5nZXQocHJlZGVjZXNzb3ItPmluZGV4KSkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbG9vcC5hZGRCbG9j
ayhwcmVkZWNlc3NvckluZGV4KTsKLSAgICAgICAgICAgICAgICBibG9ja1dvcmtsaXN0LmFwcGVu
ZChwcmVkZWNlc3NvckluZGV4KTsKLSAgICAgICAgICAgICAgICBzZWVuQmxvY2tzLnNldChwcmVk
ZWNlc3NvckluZGV4KTsKKyAgICAgICAgICAgICAgICBsb29wLmFkZEJsb2NrKHByZWRlY2Vzc29y
OworICAgICAgICAgICAgICAgIGJsb2NrV29ya2xpc3QuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAg
ICAgICAgICAgICAgICBzZWVuQmxvY2tzLnNldChwcmVkZWNlc3Nvci0+aW5kZXgpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTMzLDEyICsxMzAsMTIgQEAgdm9pZCBOYXR1
cmFsTG9vcHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQogICAgICAgICBkYXRhTG9nKCJSZXN1bHRz
OiAiLCAqdGhpcywgIlxuIik7CiB9CiAKLVZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IE5hdHVy
YWxMb29wczo6bG9vcHNPZihCbG9ja0luZGV4IGJsb2NrSW5kZXgpIGNvbnN0CitWZWN0b3I8Y29u
c3QgTmF0dXJhbExvb3AqPiBOYXR1cmFsTG9vcHM6Omxvb3BzT2YoQmFzaWNCbG9jayogYmxvY2sp
IGNvbnN0CiB7CiAgICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gcmVzdWx0OwogICAgIAog
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9vcHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlm
IChtX2xvb3BzW2ldLmNvbnRhaW5zKGJsb2NrSW5kZXgpKQorICAgICAgICBpZiAobV9sb29wc1tp
XS5jb250YWlucyhibG9jaykpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCZtX2xvb3BzW2ld
KTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVy
YWxMb29wcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0
dXJhbExvb3BzLmgJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTmF0dXJhbExvb3BzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDIwICs0MiwyMCBAQCBw
dWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBOYXR1cmFsTG9vcChCbG9ja0luZGV4IGhl
YWRlcikKKyAgICBOYXR1cmFsTG9vcChCYXNpY0Jsb2NrKiBoZWFkZXIpCiAgICAgICAgIDogbV9o
ZWFkZXIoaGVhZGVyKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRCbG9jayhCbG9j
a0luZGV4IGJsb2NrKSB7IG1fYm9keS5hcHBlbmQoYmxvY2spOyB9CisgICAgdm9pZCBhZGRCbG9j
ayhCYXNpY0Jsb2NrKiBibG9jaykgeyBtX2JvZHkuYXBwZW5kKGJsb2NrKTsgfQogICAgIAotICAg
IEJsb2NrSW5kZXggaGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFkZXI7IH0KKyAgICBCYXNp
Y0Jsb2NrKiBoZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYWRlcjsgfQogICAgIAogICAgIHVu
c2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2JvZHkuc2l6ZSgpOyB9Ci0gICAgQmxvY2tJ
bmRleCBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2JvZHlbaV07IH0KLSAgICBCbG9j
a0luZGV4IG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KKyAg
ICBCYXNpY0Jsb2NrKiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2JvZHlbaV07IH0K
KyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGF0
KGkpOyB9CiAgICAgCi0gICAgYm9vbCBjb250YWlucyhCbG9ja0luZGV4IGJsb2NrKSBjb25zdAor
ICAgIGJvb2wgY29udGFpbnMoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CiAgICAgewogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2JvZHkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBp
ZiAobV9ib2R5W2ldID09IGJsb2NrKQpAQCAtNjcsOCArNjcsOCBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiBwcml2YXRlOgotICAgIEJsb2NrSW5k
ZXggbV9oZWFkZXI7Ci0gICAgVmVjdG9yPEJsb2NrSW5kZXgsIDQ+IG1fYm9keTsKKyAgICBCYXNp
Y0Jsb2NrKiBtX2hlYWRlcjsKKyAgICBWZWN0b3I8QmxvY2tCbG9jayosIDQ+IG1fYm9keTsKIH07
CiAKIGNsYXNzIE5hdHVyYWxMb29wcyA6IHB1YmxpYyBBbmFseXNpczxOYXR1cmFsTG9vcHM+IHsK
QEAgLTkxLDE3ICs5MSwxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gUmV0dXJuIGVpdGhlciBu
dWxsIGlmIHRoZSBibG9jayBpc24ndCBhIGxvb3AgaGVhZGVyLCBvciB0aGUKICAgICAvLyBsb29w
IGl0IGJlbG9uZ3MgdG8uCi0gICAgY29uc3QgTmF0dXJhbExvb3AqIGhlYWRlck9mKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCkgY29uc3QKKyAgICBjb25zdCBOYXR1cmFsTG9vcCogaGVhZGVyT2YoQmFz
aWNCbG9jayogYmxvY2spIGNvbnN0CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2xvb3BzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fbG9vcHNbaV0uaGVhZGVy
KCkgPT0gYmxvY2tJbmRleCkKKyAgICAgICAgICAgIGlmIChtX2xvb3BzW2ldLmhlYWRlcigpID09
IGJsb2NrKQogICAgICAgICAgICAgICAgIHJldHVybiAmbV9sb29wc1tpXTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCiAgICAgLy8gUmV0dXJuIHRoZSBpbmRpY2Vz
IG9mIGFsbCBsb29wcyB0aGlzIGJlbG9uZ3MgdG8uCi0gICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxM
b29wKj4gbG9vcHNPZihCbG9ja0luZGV4IGJsb2NrSW5kZXgpIGNvbnN0OworICAgIFZlY3Rvcjxj
b25zdCBOYXR1cmFsTG9vcCo+IGxvb3BzT2YoQmFzaWNCbG9jayopIGNvbnN0OwogCiAgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE1MjMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw4IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorc3RydWN0IEJhc2ljQmxvY2s7CisKIHN0
cnVjdCBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSB7CiAgICAgU3RydWN0dXJlKiBwcmV2aW91c1N0
cnVjdHVyZTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZTsKQEAgLTgwLDE4ICs4MiwyOCBA
QCBzdHJ1Y3QgTmV3QXJyYXlCdWZmZXJEYXRhIHsKIC8vIHZhbHVlcy4KIHN0cnVjdCBTd2l0Y2hD
YXNlIHsKICAgICBTd2l0Y2hDYXNlKCkKLSAgICAgICAgOiB0YXJnZXQoTm9CbG9jaykKKyAgICAg
ICAgOiB0YXJnZXQoMCkKICAgICB7CiAgICAgfQogICAgIAotICAgIFN3aXRjaENhc2UoTGF6eUpT
VmFsdWUgdmFsdWUsIEJsb2NrSW5kZXggdGFyZ2V0KQorICAgIFN3aXRjaENhc2UoTGF6eUpTVmFs
dWUgdmFsdWUsIEJhc2ljQmxvY2sqIHRhcmdldCkKICAgICAgICAgOiB2YWx1ZSh2YWx1ZSkKICAg
ICAgICAgLCB0YXJnZXQodGFyZ2V0KQogICAgIHsKICAgICB9CiAgICAgCisgICAgc3RhdGljIFN3
aXRjaENhc2Ugd2l0aEJ5dGVjb2RlSW5kZXgoTGF6eUpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpCisgICAgeworICAgICAgICBTd2l0Y2hDYXNlIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0LnZhbHVlID0gdmFsdWU7CisgICAgICAgIHJlc3VsdC50YXJnZXQgPSBiaXR3aXNlX2Nh
c3Q8QmFzaWNCbG9jayo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGVJbmRleCkpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCB0YXJnZXRC
eXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odGFy
Z2V0KTsgfQorICAgIAogICAgIExhenlKU1ZhbHVlIHZhbHVlOwotICAgIEJsb2NrSW5kZXggdGFy
Z2V0OworICAgIEJhc2ljQmxvY2sqIHRhcmdldDsKIH07CiAKIGVudW0gU3dpdGNoS2luZCB7CkBA
IC0xMTMsNyArMTI1LDcgQEAgc3RydWN0IFN3aXRjaERhdGEgewogICAgIH0KICAgICAKICAgICBW
ZWN0b3I8U3dpdGNoQ2FzZT4gY2FzZXM7Ci0gICAgQmxvY2tJbmRleCBmYWxsVGhyb3VnaDsKKyAg
ICBCYXNpY0Jsb2NrKiBmYWxsVGhyb3VnaDsKICAgICBTd2l0Y2hLaW5kIGtpbmQ7CiAgICAgdW5z
aWduZWQgc3dpdGNoVGFibGVJbmRleDsKICAgICBib29sIGRpZFVzZUp1bXBUYWJsZTsKQEAgLTc0
MywyOCArNzU1LDI4IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvMjsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRUYWtlbkJsb2NrSW5kZXgoQmxvY2tJbmRleCBibG9j
a0luZGV4KQorICAgIHZvaWQgc2V0VGFrZW5CbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7
CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpIHx8IGlzSnVtcCgpKTsKLSAgICAgICAgbV9vcElu
Zm8gPSBibG9ja0luZGV4OworICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXROb3RUYWtlbkJsb2NrSW5kZXgo
QmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHZvaWQgc2V0Tm90VGFrZW5CbG9jayhCYXNpY0Js
b2NrKiBibG9jaykKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsKLSAgICAgICAg
bV9vcEluZm8yID0gYmxvY2tJbmRleDsKKyAgICAgICAgbV9vcEluZm8yID0gYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4oYmxvY2spOwogICAgIH0KICAgICAKLSAgICBCbG9ja0luZGV4IHRha2VuQmxv
Y2tJbmRleCgpCisgICAgQmFzaWNCbG9jayogdGFrZW5CbG9ja0luZGV4KCkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChpc0JyYW5jaCgpIHx8IGlzSnVtcCgpKTsKLSAgICAgICAgcmV0dXJuIG1fb3BJ
bmZvOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqPihtX29wSW5mbyk7
CiAgICAgfQogICAgIAotICAgIEJsb2NrSW5kZXggbm90VGFrZW5CbG9ja0luZGV4KCkKKyAgICBC
YXNpY0Jsb2NrKiBub3RUYWtlbkJsb2NrSW5kZXgoKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlz
QnJhbmNoKCkpOwotICAgICAgICByZXR1cm4gbV9vcEluZm8yOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PEJhc2ljQmxvY2sqPihtX29wSW5mbzIpOwogICAgIH0KICAgICAKICAgICBTd2l0
Y2hEYXRhKiBzd2l0Y2hEYXRhKCkKQEAgLTc4Nyw3ICs3OTksNyBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQmxvY2tJbmRleCBzdWNjZXNzb3IodW5zaWduZWQg
aW5kZXgpCisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQogICAgIHsK
ICAgICAgICAgaWYgKGlzU3dpdGNoKCkpIHsKICAgICAgICAgICAgIGlmIChpbmRleCA8IHN3aXRj
aERhdGEoKS0+Y2FzZXMuc2l6ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw4ICs2OCw4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsr
YmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1f
YmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYx
LDggKzU2MSw4IEBAIHByaXZhdGU6CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiUHJvcGFnYXRpbmcgcHJlZGljdGlvbnMgZm9yd2Fy
ZCBbJXVdXG4iLCArK21fY291bnQpOwogI2VuZGlmCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Js
b2NrSW5kZXgpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Js
b2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7
CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CkBAIC01NzgsOCArNTc4LDgg
QEAgcHJpdmF0ZToKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAg
ICAgICAgIGRhdGFMb2dGKCJQcm9wYWdhdGluZyBwcmVkaWN0aW9ucyBiYWNrd2FyZCBbJXVdXG4i
LCArK21fY291bnQpOwogI2VuZGlmCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
KyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nrcygp
OyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7
CkBAIC03MDMsOCArNzAzLDggQEAgcHJpdmF0ZToKICNlbmRpZgogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkK
ICAgICAgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV0uZmluZCgpLT5jbGVh
clZvdGVzKCk7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJ
bmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQo
KTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwg
bV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAo
IWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQVNTRVJUKGJs
b2NrLT5pc1JlYWNoYWJsZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzNSwxMiArNDM1LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNw
ZWN1bGF0aXZlTm9uUGUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVw
aG9sZUJyYW5jaE51bGwoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hOb2RlLCBib29sIGludmVy
dCkKIHsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4
KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJ
bmRleCgpOworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygp
OworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygp
OwogICAgIAogICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICBpbnZlcnQg
PSAhaW52ZXJ0OwotICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAgICAgICBCYXNp
Y0Jsb2NrKiB0bXAgPSB0YWtlbjsKICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKICAgICAgICAg
bm90VGFrZW4gPSB0bXA7CiAgICAgfQpAQCAtNDk1LDcgKzQ5NSw3IEBAIGJvb2wgU3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGEKIHsKICAgICB1bnNpZ25lZCBicmFuY2hJbmRleElu
QmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgIGlmIChicmFuY2hJbmRleEluQmxv
Y2sgIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBo
KCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CisgICAgICAgIE5v
ZGUqIGJyYW5jaE5vZGUgPSBtX2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOwogCiAgICAg
ICAgIEFTU0VSVChub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgIApAQCAt
NTE2LDggKzUxNiw4IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGEK
IAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2Rl
KiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCiB7Ci0gICAgQmxv
Y2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2Nr
SW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBC
YXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Js
b2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKIAogICAgIEpJVENv
bXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVy
OjpOb25aZXJvOwogCkBAIC01MjYsNyArNTI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVQZWVwaAogICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAg
ICBjb25kID0gSklUQ29tcGlsZXI6OmludmVydChjb25kKTsKICAgICAgICAgY2FsbFJlc3VsdENv
bmRpdGlvbiA9IEpJVENvbXBpbGVyOjpaZXJvOwotICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRh
a2VuOworICAgICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsKICAgICAgICAgdGFrZW4gPSBu
b3RUYWtlbjsKICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgfQpAQCAtNTgwLDcgKzU4MCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgKIAogICAgIGp1bXAo
bm90VGFrZW4pOwogICAgIAotICAgIG1faW5kZXhJbkJsb2NrID0gbV9qaXQuZ3JhcGgoKS5tX2Js
b2Nrc1ttX2Jsb2NrXS0+c2l6ZSgpIC0gMTsKKyAgICBtX2luZGV4SW5CbG9jayA9IG1fYmxvY2st
PnNpemUoKSAtIDE7CiAgICAgbV9jdXJyZW50Tm9kZSA9IGJyYW5jaE5vZGU7CiB9CiAKQEAgLTY2
OSwxNCArNjY5LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUK
IAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKE5v
ZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0KQogewotICAgIEJsb2NrSW5k
ZXggdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4
IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmFzaWNC
bG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayog
bm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CiAKICAgICAvLyBUaGUgYnJh
bmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRoZSB0YWtlbiBibG9jay4KICAgICAvLyBJ
ZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0aCBub3RUYWtlbiAmIGludmVydCB0aGUg
YnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLgogICAgIGlmICh0YWtlbiA9
PSBuZXh0QmxvY2soKSkgewogICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OwotICAgICAgICBCbG9j
a0luZGV4IHRtcCA9IHRha2VuOworICAgICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsKICAg
ICAgICAgdGFrZW4gPSBub3RUYWtlbjsKICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgfQpA
QCAtMTQ0NSw4ICsxNDQ1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRv
T2JqZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVj
dE9yT3RoZXJFcXVhbGl0eShFZGdlIGxlZnRDaGlsZCwgRWRnZSByaWdodENoaWxkLCBOb2RlKiBi
cmFuY2hOb2RlKQogewotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJs
b2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFr
ZW5CbG9ja0luZGV4KCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtl
bkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtl
bkJsb2NrKCk7CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIGxlZnRD
aGlsZCk7CiAgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIHJpZ2h0Q2hpbGQsIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbik7CkBAIC0xNzM3LDcgKzE3MzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaChFZGdlIG5vZGVVc2UsIEJsb2NrSW5kZXggdGFrZW4s
IEJsb2NrSW5kZXggbm90VGFrZW4pCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JP
dGhlckJyYW5jaChFZGdlIG5vZGVVc2UsIEJhc2ljQmxvY2sqIHRha2VuLCBCYXNpY0Jsb2NrKiBu
b3RUYWtlbikKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlVXNlLCBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwpA
QCAtMTc5NCw4ICsxNzk0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3Ro
ZXJCcgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vZGUpCiB7Ci0g
ICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2Nr
SW5kZXggbm90VGFrZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCYXNpY0Js
b2NrKiB0YWtlbiA9IG5vZGUtPnRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtl
biA9IG5vZGUtPm5vdFRha2VuQmxvY2soKTsKIAogICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpKSB7CiAgICAgY2FzZSBCb29sZWFuVXNlOiB7CkBAIC0xODA0LDcgKzE4MDQsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vCiAKICAgICAgICAgaWYg
KHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgICAgICBjb25kaXRpb24gPSBNYWNyb0Fz
c2VtYmxlcjo6WmVybzsKLSAgICAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsKICAgICAgICAgICAgIHRha2VuID0gbm90
VGFrZW47CiAgICAgICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICAgICAgfQpAQCAtMTgyOCw3
ICsxODI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAg
ICAgICAgICAgICBpbnZlcnQgPSB0cnVlOwotICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG1w
ID0gdGFrZW47CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogdG1wID0gdGFrZW47CiAgICAg
ICAgICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKICAgICAgICAgICAgICAgICBub3RUYWtlbiA9
IHRtcDsKICAgICAgICAgICAgIH0KQEAgLTMyMTYsOCArMzIxNiw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIERGRzo6SnVtcDog
ewotICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0g
ICAgICAgIGp1bXAodGFrZW4pOworICAgICAgICBqdW1wKG5vZGUtPnRha2VuQmxvY2soKSk7CiAg
ICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NCwxMiArMzg0LDEyIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFu
Y2hOb2RlLCBib29sIGludmVydCkKIHsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9k
ZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5v
ZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNo
Tm9kZS0+dGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9k
ZS0+bm90VGFrZW5CbG9jaygpOwogICAgIAogICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkg
ewogICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OwotICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRh
a2VuOworICAgICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsKICAgICAgICAgdGFrZW4gPSBu
b3RUYWtlbjsKICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgfQpAQCAtNDQzLDcgKzQ0Myw3
IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGEKIHsKICAgICB1bnNp
Z25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgIGlm
IChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgTm9kZSogYnJhbmNo
Tm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5C
bG9jayk7CisgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2Jsb2NrLT5hdChicmFuY2hJbmRl
eEluQmxvY2spOwogCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPmFkanVzdGVkUmVmQ291
bnQoKSA9PSAxKTsKICAgICAgICAgCkBAIC00NjQsOCArNDY0LDggQEAgYm9vbCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBo
ZWxwZXJGdW5jdGlvbikKIHsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS0+dGFr
ZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5v
dFRha2VuQmxvY2tJbmRleCgpOworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+
dGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90
VGFrZW5CbG9jaygpOwogCiAgICAgSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjYWxsUmVz
dWx0Q29uZGl0aW9uID0gSklUQ29tcGlsZXI6Ok5vblplcm87CiAKQEAgLTQ3NCw3ICs0NzQsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAgaWYgKHRha2Vu
ID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGNvbmQgPSBKSVRDb21waWxlcjo6aW52ZXJ0KGNv
bmQpOwogICAgICAgICBjYWxsUmVzdWx0Q29uZGl0aW9uID0gSklUQ29tcGlsZXI6Olplcm87Ci0g
ICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CisgICAgICAgIEJhc2ljQmxvY2sqIHRtcCA9
IHRha2VuOwogICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwogICAgICAgICBub3RUYWtlbiA9IHRt
cDsKICAgICB9CkBAIC01MjYsNyArNTI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVQZWVwaAogCiAgICAganVtcChub3RUYWtlbik7CiAKLSAgICBtX2luZGV4SW5CbG9j
ayA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPnNpemUoKSAtIDE7CisgICAgbV9p
bmRleEluQmxvY2sgPSBtX2Jsb2NrLT5zaXplKCkgLSAxOwogICAgIG1fY3VycmVudE5vZGUgPSBi
cmFuY2hOb2RlOwogfQogCkBAIC02MDcsMTQgKzYwNywxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZU5vblBlCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlUGVlcGhvbGVTdHJpY3RFcShOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBib29sIGlu
dmVydCkKIHsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9ja0lu
ZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxv
Y2tJbmRleCgpOworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9j
aygpOwogCiAgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUg
dGFrZW4gYmxvY2suCiAgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGgg
bm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhy
b3VnaC4KICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgaW52ZXJ0ID0g
IWludmVydDsKLSAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgQmFzaWNC
bG9jayogdG1wID0gdGFrZW47CiAgICAgICAgIHRha2VuID0gbm90VGFrZW47CiAgICAgICAgIG5v
dFRha2VuID0gdG1wOwogICAgIH0KQEAgLTE0NjYsOCArMTQ2Niw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxpdHkoRWRnZSBsZWZ0Q2hpbGQsIEVk
Z2UgcmlnaHRDaGlsZCwgTm9kZSogYnJhbmNoTm9kZSkKIHsKLSAgICBCbG9ja0luZGV4IHRha2Vu
ID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtl
biA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJhc2ljQmxvY2sqIHRh
a2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2Vu
ID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIG9wMSh0aGlzLCBsZWZ0Q2hpbGQpOwogICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlz
LCByaWdodENoaWxkLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwpAQCAtMTc2NCw3ICsxNzY0
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgIH0KIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSBub2Rl
VXNlLCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuKQordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSBub2RlVXNlLCBCYXNpY0Jsb2Nr
KiB0YWtlbiwgQmFzaWNCbG9jayogbm90VGFrZW4pCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZVVzZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAgLTE4MTcsOCArMTgxNyw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJy
YW5jaChOb2RlKiBub2RlKQogewotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLT50YWtlbkJs
b2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS0+bm90VGFrZW5CbG9j
a0luZGV4KCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBub2RlLT50YWtlbkJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrKCk7CiAgICAgCiAg
ICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICBjYXNlIE9iamVjdE9y
T3RoZXJVc2U6IHsKQEAgLTE4MzMsNyArMTgzMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRCcmFuY2goTm9kZSogbm8KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHRha2VuID09
IG5leHRCbG9jaygpKSB7CiAgICAgICAgICAgICAgICAgaW52ZXJ0ID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHRtcCA9IHRha2VuOwogICAgICAgICAgICAgICAgIHRha2VuID0gbm90VGFrZW47CiAgICAg
ICAgICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgICAgICAgICB9CkBAIC0xODYzLDcgKzE4
NjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vCiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpaZXJvOwotICAg
ICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAgICAgICAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsKICAgICAgICAgICAgICAgICAgICAgdGFrZW4g
PSBub3RUYWtlbjsKICAgICAgICAgICAgICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtMzE2MCw4ICszMTYwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgREZHOjpKdW1wOiB7Ci0gICAgICAg
IEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICAgICAganVt
cCh0YWtlbik7CisgICAgICAgIGp1bXAobm9kZS0+dGFrZW5CbG9jaygpKTsKICAgICAgICAgbm9S
ZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNTIzMzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCw3IEBAIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQq
IFNwZWN1bGF0aXZlSkkKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbnZlcnRMYXN0T1NSRXhpdFRv
Rm9yd2FyZChjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQogewogICAgIG1faml0
LmppdENvZGUoKS0+bGFzdE9TUkV4aXQoKS5jb252ZXJ0VG9Gb3J3YXJkKAotICAgICAgICBtX2pp
dC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLmdldCgpLCBtX2N1cnJlbnROb2RlLCBtX2luZGV4
SW5CbG9jaywgdmFsdWVSZWNvdmVyeSk7CisgICAgICAgIG1fYmxvY2ssIG1fY3VycmVudE5vZGUs
IG1faW5kZXhJbkJsb2NrLCB2YWx1ZVJlY292ZXJ5KTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Zm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBq
c1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWls
LCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQpAQCAtOTkzLDcgKzk5Myw3IEBA
IGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGEKIHsKICAgICB1bnNpZ25l
ZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgIGlmIChi
cmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgTm9kZSogYnJhbmNoTm9k
ZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9j
ayk7CisgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2Jsb2NrLT5hdChicmFuY2hJbmRleElu
QmxvY2spOwogCiAgICAgICAgIEFTU0VSVChub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7
CiAgICAgICAgIApAQCAtMTAxNCw3ICsxMDE0LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVTdHJpYwogewogICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRl
dGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5U
X01BWCkgewotICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nr
c1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKKyAgICAgICAgTm9kZSogYnJhbmNo
Tm9kZSA9IG1fYmxvY2stPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CiAKICAgICAgICAgQVNTRVJU
KG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgCkBAIC0xMzc5LDggKzEz
NzksOCBAQCBGUFJUZW1wb3Jhcnk6OkZQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJCiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChOb2RlKiBub2RlLCBO
b2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbikK
IHsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7
Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRl
eCgpOworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOwor
ICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwog
ICAgIAogICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CkBAIC0xMzkxLDE0ICsxMzkxLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVw
SG9sZURvdWIKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1
YWxpdHkoTm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSkKIHsKLSAgICBCbG9ja0luZGV4IHRh
a2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RU
YWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJhc2ljQmxvY2sq
IHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRh
a2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6
OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OkVxdWFsOwog
ICAgIAogICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICBjb25kaXRpb24g
PSBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWw7Ci0gICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFr
ZW47CisgICAgICAgIEJhc2ljQmxvY2sqIHRtcCA9IHRha2VuOwogICAgICAgICB0YWtlbiA9IG5v
dFRha2VuOwogICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICB9CkBAIC0xNDY5LDE0ICsxNDY5
LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKIAogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChOb2RlKiBub2RlLCBO
b2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRp
b24pCiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRl
eCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2Nr
SW5kZXgoKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2so
KTsKKyAgICBCbG9ja0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2so
KTsKIAogICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRh
a2VuIGJsb2NrLgogICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5v
dFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91
Z2guCiAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGNvbmRpdGlvbiA9
IEpJVENvbXBpbGVyOjppbnZlcnQoY29uZGl0aW9uKTsKLSAgICAgICAgQmxvY2tJbmRleCB0bXAg
PSB0YWtlbjsKKyAgICAgICAgQmFzaWNCbG9jayogdG1wID0gdGFrZW47CiAgICAgICAgIHRha2Vu
ID0gbm90VGFrZW47CiAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAgIH0KQEAgLTE1MDQsNyAr
MTUwNCw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW4KICAgICAv
LyBGdXNlZCBjb21wYXJlICYgYnJhbmNoLgogICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9j
ayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAh
PSBVSU5UX01BWCkgewotICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5t
X2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKKyAgICAgICAgTm9kZSog
YnJhbmNoTm9kZSA9IG1fYmxvY2stPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CiAKICAgICAgICAg
Ly8gZGV0ZWN0UGVlcEhvbGVCcmFuY2ggY3VycmVudGx5IG9ubHkgcGVybWl0cyB0aGUgYnJhbmNo
IHRvIGJlIHRoZSB2ZXJ5IG5leHQgbm9kZSwKICAgICAgICAgLy8gc28gY2FuIGJlIG5vIGludGVy
dmVuaW5nIG5vZGVzIHRvIGFsc28gcmVmZXJlbmNlIHRoZSBjb21wYXJlLiAKQEAgLTE2MjQsMTQg
KzE2MjQsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YmFpbCgpCiAgICAgY2xlYXJHZW5lcmF0
aW9uSW5mbygpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2sm
IGJsb2NrKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jaygpCiB7CiAg
ICAgQVNTRVJUKG1fY29tcGlsZU9rYXkpOwogICAgIAotICAgIGlmICghYmxvY2suaXNSZWFjaGFi
bGUpCisgICAgaWYgKCFtX2Jsb2NrKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKCFi
bG9jay5jZmFIYXNWaXNpdGVkKSB7CisgICAgQVNTRVJUKG1fYmxvY2stPmlzUmVhY2hhYmxlKTsK
KyAgICAKKyAgICBpZiAoIW1fYmxvY2stPmNmYUhhc1Zpc2l0ZWQpIHsKICAgICAgICAgLy8gRG9u
J3QgZ2VuZXJhdGUgY29kZSBmb3IgYmFzaWMgYmxvY2tzIHRoYXQgYXJlIHVucmVhY2hhYmxlIGFj
Y29yZGluZyB0byBDRkEuCiAgICAgICAgIC8vIEJ1dCB0byBiZSBzdXJlIHRoYXQgbm9ib2R5IGhh
cyBnZW5lcmF0ZWQgYSBqdW1wIHRvIHRoaXMgYmxvY2ssIGRyb3AgaW4gYQogICAgICAgICAvLyBi
cmVha3BvaW50IGhlcmUuCkBAIC0xNjM5LDIwICsxNjQxLDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1f
aml0LmJsb2NrSGVhZHMoKVttX2Jsb2NrXSA9IG1faml0LmxhYmVsKCk7CisgICAgbV9qaXQuYmxv
Y2tIZWFkcygpW21fYmxvY2stPmluZGV4XSA9IG1faml0LmxhYmVsKCk7CiAjaWYgREZHX0VOQUJM
RShKSVRfQlJFQUtfT05fRVZFUllfQkxPQ0spCiAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogI2Vu
ZGlmCiAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJT
ZXR0aW5nIHVwIHN0YXRlIGZvciBibG9jayAjJXU6ICIsIG1fYmxvY2spOworICAgIGRhdGFMb2co
IlNldHRpbmcgdXAgc3RhdGUgZm9yIGJsb2NrICIsICptX2Jsb2NrLCAiOiAiKTsKICNlbmRpZgog
ICAgIAogICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6cmVzZXQoKSk7
CiAgICAgCiAgICAgbV9qaXQuaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUoKTsKIAotICAgIEFT
U0VSVChtX2FyZ3VtZW50cy5zaXplKCkgPT0gYmxvY2sudmFyaWFibGVzQXRIZWFkLm51bWJlck9m
QXJndW1lbnRzKCkpOworICAgIEFTU0VSVChtX2FyZ3VtZW50cy5zaXplKCkgPT0gbV9ibG9jay0+
dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgVmFsdWVTb3VyY2Ug
dmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CiAgICAgICAgIG1fYXJn
dW1lbnRzW2ldID0gdmFsdWVTb3VyY2U7CkBAIC0xNjYwLDExICsxNjYyLDExIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICB9CiAgICAgCiAgICAgbV9zdGF0
ZS5yZXNldCgpOwotICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKCZibG9jayk7CisgICAgbV9z
dGF0ZS5iZWdpbkJhc2ljQmxvY2sobV9ibG9jayk7CiAgICAgCi0gICAgQVNTRVJUKG1fdmFyaWFi
bGVzLnNpemUoKSA9PSBibG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7Cisg
ICAgQVNTRVJUKG1fdmFyaWFibGVzLnNpemUoKSA9PSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxl
cy5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlKiBub2RlID0gYmxvY2sudmFyaWFibGVzQXRI
ZWFkLmxvY2FsKGkpOworICAgICAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+dmFyaWFibGVzQXRI
ZWFkLmxvY2FsKGkpOwogICAgICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZTsKICAgICAgICAg
aWYgKCFub2RlKQogICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShTb3VyY2VJ
c0RlYWQpOwpAQCAtMTY5MCw4ICsxNjkyLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShCYXNpY0Jsb2NrJgogICAgIGRhdGFMb2dGKCJcbiIpOwogI2VuZGlmCiAKLSAgICBmb3IgKG1f
aW5kZXhJbkJsb2NrID0gMDsgbV9pbmRleEluQmxvY2sgPCBibG9jay5zaXplKCk7ICsrbV9pbmRl
eEluQmxvY2spIHsKLSAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGJsb2NrW21faW5kZXhJbkJsb2Nr
XTsKKyAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRleEluQmxvY2sgPCBtX2Jsb2Nr
LT5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKKyAgICAgICAgbV9jdXJyZW50Tm9kZSA9IG1f
YmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKICAgICAgICAgCiAgICAgICAgIC8vIFdlIG1heSBo
YXZlIGhpcyBhIGNvbnRyYWRpY3Rpb24gdGhhdCB0aGUgQ0ZBIHdhcyBhd2FyZSBvZiBidXQgdGhh
dCB0aGUgSklUCiAgICAgICAgIC8vIGRpZG4ndCBjYXVzZSBkaXJlY3RseS4KQEAgLTE4NzEsMTEg
KzE4NzMsMTAgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiAgICAgY2hlY2tBcmd1
bWVudFR5cGVzKCk7CiAKICAgICBBU1NFUlQoIW1fY3VycmVudE5vZGUpOwotICAgIGZvciAobV9i
bG9jayA9IDA7IG1fYmxvY2sgPCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKTsgKyttX2Js
b2NrKSB7Ci0gICAgICAgIG1faml0LnNldEZvckJsb2NrKG1fYmxvY2spOwotICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10uZ2V0KCk7Ci0g
ICAgICAgIGlmIChibG9jaykKLSAgICAgICAgICAgIGNvbXBpbGUoKmJsb2NrKTsKKyAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2ppdC5ncmFwaCgpLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgbV9qaXQuc2V0Rm9yQmxvY2soYmxv
Y2tJbmRleCk7CisgICAgICAgIG1fYmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJsb2NrKGJsb2NrSW5k
ZXgpOworICAgICAgICBjb21waWxlQ3VycmVudEJsb2NrKCk7CiAgICAgfQogICAgIGxpbmtCcmFu
Y2hlcygpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTg4Myw4ICsxODg0LDggQEAgYm9vbCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNyZWF0ZU9TUkVu
dHJpZXMoKQogewotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW2Jsb2NrSW5kZXhd
LmdldCgpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG1faml0LmdyYXBoKCkubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1faml0LmdyYXBoKCkuYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAg
IGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCFibG9jay0+
aXNPU1JUYXJnZXQpCkBAIC0xODk5LDggKzE5MDAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
cmVhdGVPU1JFbnRyaWVzKCkKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtPU1JFbnRyaWVzKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpCiB7CiAgICAgdW5zaWduZWQgb3NyRW50cnlJbmRleCA9IDA7
Ci0gICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQu
Z3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Cisg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQuZ3Jh
cGgoKS5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9qaXQuZ3JhcGgoKS5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9j
aykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdl
dCkKQEAgLTM2NjMsMTYgKzM2NjQsMTYgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0
cmljdEVxRm9yQwogICAgIAogICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVj
dFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01B
WCkgewotICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1tt
X2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKLSAgICAgICAgQmxvY2tJbmRleCB0YWtl
biA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgICAgICBCbG9ja0luZGV4IG5v
dFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgIE5vZGUq
IGJyYW5jaE5vZGUgPSBtX2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOworICAgICAgICBC
YXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKKyAgICAgICAgQmxv
Y2tCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbDsKICAgICAgICAgCiAgICAgICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rp
b24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgogICAgICAgICAvLyBJZiB0YWtlbiBp
cyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNv
bmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLgogICAgICAgICBpZiAodGFrZW4gPT0gbmV4
dEJsb2NrKCkpIHsKICAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbDsKLSAgICAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsKICAgICAgICAgICAgIHRha2VuID0gbm90VGFrZW47CiAg
ICAgICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICAgICAgfQpAQCAtMzczNSw3ICszNzM2LDcg
QEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgIGNhc2UgSW50
MzJVc2U6IHsKICAgICAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVl
cEhvbGVCcmFuY2goKTsKICAgICAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01B
WCkgewotICAgICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9j
a3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBOb2RlKiBi
cmFuY2hOb2RlID0gbV9ibG9jay0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAg
IGNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsKTsKICAgICAgICAgICAgIHVzZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICB1c2Uobm9kZS0+Y2hpbGQyKCkpOwpAQCAtMzc1MCw3ICszNzUxLDcgQEAgYm9vbCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgIGNhc2UgTnVtYmVyVXNlOiB7CiAg
ICAgICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNo
KCk7CiAgICAgICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKLSAgICAg
ICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2td
LT5hdChicmFuY2hJbmRleEluQmxvY2spOworICAgICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9
IG1fYmxvY2stPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBjb21waWxlUGVl
cEhvbGVEb3VibGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUVxdWFsKTsKICAgICAgICAgICAgIHVzZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICB1
c2Uobm9kZS0+Y2hpbGQyKCkpOwpAQCAtMzc3NSw3ICszNzc2LDcgQEAgYm9vbCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgIGNhc2UgT2JqZWN0VXNlOiB7CiAgICAgICAg
IHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAg
ICAgICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAg
IE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChi
cmFuY2hJbmRleEluQmxvY2spOworICAgICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1fYmxv
Y2stPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVP
YmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlKTsKICAgICAgICAgICAgIHVzZShub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgICAgICB1c2Uobm9kZS0+Y2hpbGQyKCkpOwpAQCAtNDEzMCwxNiAr
NDEzMSwxNiBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyhOCiAgICAg
dW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAg
ICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrID09IFVJTlRfTUFYKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9j
a10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CisgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1fYmxv
Y2stPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CiAgICAgQVNTRVJUKG5vZGUtPmFkanVzdGVkUmVm
Q291bnQoKSA9PSAxKTsKIAotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLT50YWtl
bkJsb2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90
VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50
YWtlbkJsb2NrKCk7CisgICAgQmxvY2tCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RU
YWtlbkJsb2NrKCk7CiAgICAgCiAgICAgYm9vbCBpbnZlcnQgPSBmYWxzZTsKICAgICBpZiAodGFr
ZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgaW52ZXJ0ID0gdHJ1ZTsKLSAgICAgICAgQmxv
Y2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgQmFzaWNCbG9jayogdG1wID0gdGFrZW47CiAg
ICAgICAgIHRha2VuID0gbm90VGFrZW47CiAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAgIH0K
QEAgLTUxNzYsNyArNTE3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2goTm9k
ZSogbm8KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIFNwZWN1
bGF0aXZlSklUOjphZGRCcmFuY2goY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1w
LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6YWRkQnJhbmNo
KGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcCwgQmFzaWNCbG9jayogZGVzdGlu
YXRpb24pCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0ganVtcC5qdW1wcygpLnNpemUoKTsgaS0t
OykKICAgICAgICAgYWRkQnJhbmNoKGp1bXAuanVtcHMoKVtpXSwgZGVzdGluYXRpb24pOwpAQCAt
NTE4Niw3ICs1MTg3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua0JyYW5jaGVzKCkKIHsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYnJhbmNoZXMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgQnJhbmNoUmVjb3JkJiBicmFuY2ggPSBtX2JyYW5jaGVzW2ldOwotICAgICAgICBicmFu
Y2guanVtcC5saW5rVG8obV9qaXQuYmxvY2tIZWFkcygpW2JyYW5jaC5kZXN0aW5hdGlvbl0sICZt
X2ppdCk7CisgICAgICAgIGJyYW5jaC5qdW1wLmxpbmtUbyhtX2ppdC5ibG9ja0hlYWRzKClbYnJh
bmNoLmRlc3RpbmF0aW9uLT5pbmRleF0sICZtX2ppdCk7CiAgICAgfQogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAx
NTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExOSwxMiArMTE5LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGNy
ZWF0ZU9TUkVudHJpZXMoKTsKICAgICB2b2lkIGxpbmtPU1JFbnRyaWVzKExpbmtCdWZmZXImKTsK
IAotICAgIEJsb2NrSW5kZXggbmV4dEJsb2NrKCkKKyAgICBCYXNpY0Jsb2NrKiBuZXh0QmxvY2so
KQogICAgIHsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IHJlc3VsdCA9IG1fYmxvY2sgKyAxOyA7
IHJlc3VsdCsrKSB7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID49IG1faml0LmdyYXBoKCkubV9i
bG9ja3Muc2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBOb0Jsb2NrOwotICAgICAgICAg
ICAgaWYgKG1faml0LmdyYXBoKCkubV9ibG9ja3NbcmVzdWx0XSkKKyAgICAgICAgZm9yIChCbG9j
a0luZGV4IHJlc3VsdEluZGV4ID0gbV9ibG9jay0+aW5kZXggKyAxOyA7IHJlc3VsdEluZGV4Kysp
IHsKKyAgICAgICAgICAgIGlmIChyZXN1bHRJbmRleCA+PSBtX2ppdC5ncmFwaCgpLm51bUJsb2Nr
cygpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgaWYgKG1faml0Lmdy
YXBoKCkuYmxvY2socmVzdWx0SW5kZXgpKQogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDQsNyArMzQ0LDcgQEAgcHVibGljOgogICAgIHZvaWQg
Y29tcGlsZShOb2RlKik7CiAgICAgdm9pZCBub3RpY2VPU1JCaXJ0aChOb2RlKik7CiAgICAgdm9p
ZCBiYWlsKCk7Ci0gICAgdm9pZCBjb21waWxlKEJhc2ljQmxvY2smKTsKKyAgICB2b2lkIGNvbXBp
bGVDdXJyZW50QmxvY2soKTsKIAogICAgIHZvaWQgY2hlY2tBcmd1bWVudFR5cGVzKCk7CiAKQEAg
LTE3MzgsNzQgKzE3MzgsNzQgQEAgcHVibGljOgogICAgIH0KICNlbmRpZgogICAgIAotICAgIHZv
aWQgYnJhbmNoRG91YmxlKEpJVENvbXBpbGVyOjpEb3VibGVDb25kaXRpb24gY29uZCwgRlBSUmVn
IGxlZnQsIEZQUlJlZyByaWdodCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB2b2lkIGJy
YW5jaERvdWJsZShKSVRDb21waWxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmQsIEZQUlJlZyBsZWZ0
LCBGUFJSZWcgcmlnaHQsIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hEb3VibGUoY29uZCwgbGVmdCwgcmlnaHQpLCBk
ZXN0aW5hdGlvbik7CiAgICAgfQogICAgIAotICAgIHZvaWQgYnJhbmNoRG91YmxlTm9uWmVybyhG
UFJSZWcgdmFsdWUsIEZQUlJlZyBzY3JhdGNoLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAg
IHZvaWQgYnJhbmNoRG91YmxlTm9uWmVybyhGUFJSZWcgdmFsdWUsIEZQUlJlZyBzY3JhdGNoLCBC
YXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRCcmFuY2go
bV9qaXQuYnJhbmNoRG91YmxlTm9uWmVybyh2YWx1ZSwgc2NyYXRjaCksIGRlc3RpbmF0aW9uKTsK
ICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLSAgICB2
b2lkIGJyYW5jaDMyKEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFQgbGVm
dCwgVSByaWdodCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB2b2lkIGJyYW5jaDMyKEpJ
VENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFQgbGVmdCwgVSByaWdodCwgQmFz
aWNCbG9jayogZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1f
aml0LmJyYW5jaDMyKGNvbmQsIGxlZnQsIHJpZ2h0KSwgZGVzdGluYXRpb24pOwogICAgIH0KICAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotICAgIHZvaWQgYnJhbmNo
VGVzdDMyKEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCwgVCB2YWx1ZSwgVSBtYXNr
LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAgIHZvaWQgYnJhbmNoVGVzdDMyKEpJVENvbXBp
bGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCwgVCB2YWx1ZSwgVSBtYXNrLCBCYXNpY0Jsb2NrKiBk
ZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNo
VGVzdDMyKGNvbmQsIHZhbHVlLCBtYXNrKSwgZGVzdGluYXRpb24pOwogICAgIH0KICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVy
OjpSZXN1bHRDb25kaXRpb24gY29uZCwgVCB2YWx1ZSwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikK
KyAgICB2b2lkIGJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQs
IFQgdmFsdWUsIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoY29uZCwgdmFsdWUpLCBkZXN0aW5hdGlvbik7
CiAgICAgfQogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4KLSAgICB2b2lkIGJyYW5jaDY0KEpJVENvbXBpbGVyOjpSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmQsIFQgbGVmdCwgVSByaWdodCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikK
KyAgICB2b2lkIGJyYW5jaDY0KEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQs
IFQgbGVmdCwgVSByaWdodCwgQmFzaWNCbG9jayogZGVzdGluYXRpb24pCiAgICAgewogICAgICAg
ICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaDY0KGNvbmQsIGxlZnQsIHJpZ2h0KSwgZGVz
dGluYXRpb24pOwogICAgIH0KICNlbmRpZgogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+Ci0gICAgdm9pZCBicmFuY2g4KEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmQsIFQgbGVmdCwgVSByaWdodCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAg
ICB2b2lkIGJyYW5jaDgoSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgVCBs
ZWZ0LCBVIHJpZ2h0LCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoOChjb25kLCBsZWZ0LCByaWdodCksIGRlc3RpbmF0
aW9uKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4K
LSAgICB2b2lkIGJyYW5jaFB0cihKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25k
LCBUIGxlZnQsIFUgcmlnaHQsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgdm9pZCBicmFu
Y2hQdHIoSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgVCBsZWZ0LCBVIHJp
Z2h0LCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRC
cmFuY2gobV9qaXQuYnJhbmNoUHRyKGNvbmQsIGxlZnQsIHJpZ2h0KSwgZGVzdGluYXRpb24pOwog
ICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotICAgIHZv
aWQgYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFs
dWUsIFUgbWFzaywgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB2b2lkIGJyYW5jaFRlc3RQ
dHIoSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBVIG1hc2ssIEJh
c2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaCht
X2ppdC5icmFuY2hUZXN0UHRyKGNvbmQsIHZhbHVlLCBtYXNrKSwgZGVzdGluYXRpb24pOwogICAg
IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgYnJhbmNoVGVzdFB0
cihKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUsIEJsb2NrSW5kZXgg
ZGVzdGluYXRpb24pCisgICAgdm9pZCBicmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpSZXN1bHRD
b25kaXRpb24gY29uZCwgVCB2YWx1ZSwgQmFzaWNCbG9jayogZGVzdGluYXRpb24pCiAgICAgewog
ICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3RQdHIoY29uZCwgdmFsdWUp
LCBkZXN0aW5hdGlvbik7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+Ci0gICAgdm9pZCBicmFuY2hUZXN0OChKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0
aW9uIGNvbmQsIFQgdmFsdWUsIFUgbWFzaywgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB2
b2lkIGJyYW5jaFRlc3Q4KEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCwgVCB2YWx1
ZSwgVSBtYXNrLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIHJldHVy
biBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoY29uZCwgdmFsdWUsIG1hc2spLCBkZXN0aW5h
dGlvbik7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBi
cmFuY2hUZXN0OChKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUsIEJs
b2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgdm9pZCBicmFuY2hUZXN0OChKSVRDb21waWxlcjo6
UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUsIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0OChjb25kLCB2
YWx1ZSksIGRlc3RpbmF0aW9uKTsKICAgICB9CkBAIC0xODE0LDcgKzE4MTQsNyBAQCBwdWJsaWM6
CiAgICAgICAgIEF0RmFsbFRocm91Z2hQb2ludCwKICAgICAgICAgRm9yY2VKdW1wCiAgICAgfTsK
LSAgICB2b2lkIGp1bXAoQmxvY2tJbmRleCBkZXN0aW5hdGlvbiwgRmFsbFRocm91Z2hNb2RlIGZh
bGxUaHJvdWdoTW9kZSA9IEF0RmFsbFRocm91Z2hQb2ludCkKKyAgICB2b2lkIGp1bXAoQmFzaWNC
bG9jayogZGVzdGluYXRpb24sIEZhbGxUaHJvdWdoTW9kZSBmYWxsVGhyb3VnaE1vZGUgPSBBdEZh
bGxUaHJvdWdoUG9pbnQpCiAgICAgewogICAgICAgICBpZiAoZGVzdGluYXRpb24gPT0gbmV4dEJs
b2NrKCkKICAgICAgICAgICAgICYmIGZhbGxUaHJvdWdoTW9kZSA9PSBBdEZhbGxUaHJvdWdoUG9p
bnQpCkBAIC0xODIyLDExICsxODIyLDExIEBAIHB1YmxpYzoKICAgICAgICAgYWRkQnJhbmNoKG1f
aml0Lmp1bXAoKSwgZGVzdGluYXRpb24pOwogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZEJyYW5j
aChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYganVtcCwgQmxvY2tJbmRleCBkZXN0aW5hdGlv
bikKKyAgICB2b2lkIGFkZEJyYW5jaChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYganVtcCwg
QmFzaWNCbG9jayogZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBtX2JyYW5jaGVzLmFwcGVu
ZChCcmFuY2hSZWNvcmQoanVtcCwgZGVzdGluYXRpb24pKTsKICAgICB9Ci0gICAgdm9pZCBhZGRC
cmFuY2goY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wLCBCbG9ja0luZGV4IGRl
c3RpbmF0aW9uKTsKKyAgICB2b2lkIGFkZEJyYW5jaChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QmIGp1bXAsIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKTsKIAogICAgIHZvaWQgbGlua0Jy
YW5jaGVzKCk7CiAKQEAgLTE4NzIsMTMgKzE4NzIsMTMgQEAgcHVibGljOgogICAgIHZvaWQgY29t
cGlsZUxvZ2ljYWxOb3QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVN0cmluZ0VxdWFsaXR5KE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTdHJpbmdJZGVudEVxdWFsaXR5KE5vZGUqKTsKLSAgICB2
b2lkIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2UgdmFsdWUsIEJsb2NrSW5kZXggdGFrZW4s
IEJsb2NrSW5kZXggbm90VGFrZW4pOworICAgIHZvaWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2go
RWRnZSB2YWx1ZSwgQmFzaWNCbG9jayogdGFrZW4sIEJhc2ljQmxvY2sqIG5vdFRha2VuKTsKICAg
ICB2b2lkIGVtaXRCcmFuY2goTm9kZSopOwogICAgIAogICAgIHN0cnVjdCBTdHJpbmdTd2l0Y2hD
YXNlIHsKICAgICAgICAgU3RyaW5nU3dpdGNoQ2FzZSgpIHsgfQogICAgICAgICAKLSAgICAgICAg
U3RyaW5nU3dpdGNoQ2FzZShTdHJpbmdJbXBsKiBzdHJpbmcsIEJsb2NrSW5kZXggdGFyZ2V0KQor
ICAgICAgICBTdHJpbmdTd2l0Y2hDYXNlKFN0cmluZ0ltcGwqIHN0cmluZywgQmFzaWNCbG9jayog
dGFyZ2V0KQogICAgICAgICAgICAgOiBzdHJpbmcoc3RyaW5nKQogICAgICAgICAgICAgLCB0YXJn
ZXQodGFyZ2V0KQogICAgICAgICB7CkBAIC0xODg3LDcgKzE4ODcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFN0cmluZ1N3aXRjaENhc2UmIG90aGVyKSBjb25zdDsK
ICAgICAgICAgCiAgICAgICAgIFN0cmluZ0ltcGwqIHN0cmluZzsKLSAgICAgICAgQmxvY2tJbmRl
eCB0YXJnZXQ7CisgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldDsKICAgICB9OwogICAgIAogICAg
IHZvaWQgZW1pdFN3aXRjaEludEp1bXAoU3dpdGNoRGF0YSosIEdQUlJlZyB2YWx1ZSwgR1BSUmVn
IHNjcmF0Y2gpOwpAQCAtMjE1Miw3ICsyMTUyLDcgQEAgcHVibGljOgogICAgIEpJVENvbXBpbGVy
JiBtX2ppdDsKIAogICAgIC8vIFRoZSBjdXJyZW50IG5vZGUgYmVpbmcgZ2VuZXJhdGVkLgotICAg
IEJsb2NrSW5kZXggbV9ibG9jazsKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIE5vZGUq
IG1fY3VycmVudE5vZGU7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9zcGVjdWxhdGlvbkRp
cmVjdGlvbjsKICAgICBib29sIG1fY2FuRXhpdDsKQEAgLTIxNjUsMTQgKzIxNjUsMTQgQEAgcHVi
bGljOgogICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6TGFiZWw+IG1fb3NyRW50cnlIZWFkczsK
ICAgICAKICAgICBzdHJ1Y3QgQnJhbmNoUmVjb3JkIHsKLSAgICAgICAgQnJhbmNoUmVjb3JkKE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGp1bXAsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgICAg
IEJyYW5jaFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wLCBCYXNpY0Jsb2NrKiBkZXN0
aW5hdGlvbikKICAgICAgICAgICAgIDoganVtcChqdW1wKQogICAgICAgICAgICAgLCBkZXN0aW5h
dGlvbihkZXN0aW5hdGlvbikKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAganVtcDsKLSAgICAgICAgQmxvY2tJbmRleCBkZXN0aW5hdGlvbjsKKyAg
ICAgICAgQmFzaWNCbG9jayogZGVzdGluYXRpb247CiAgICAgfTsKICAgICBWZWN0b3I8QnJhbmNo
UmVjb3JkLCA4PiBtX2JyYW5jaGVzOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE1
MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwNCw4ICsxMDQsOCBAQCBwdWJsaWM6CiAKICAgICAg
ICAgLy8gUGxhY2UgQ2hlY2tTdHJ1Y3R1cmUncyBhdCBTZXRMb2NhbCBzaXRlcy4KICAgICAgICAg
SW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2dyYXBoKTsKLSAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7
ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5k
ZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5C
bG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CkBAIC0yMTcsOCArMjE3LDgg
QEAgcHJpdmF0ZToKICAgICAvLyBjaGVja3MuIEZvciBub3csIG9ubHkgY29uc2lkZXIgbW9ub21v
cnBoaWMgc3RydWN0dXJlIGNoZWNrcyAob25lIHN0cnVjdHVyZSkuCiAgICAgdm9pZCBpZGVudGlm
eVJlZHVuZGFudFN0cnVjdHVyZUNoZWNrcygpCiAgICAgeyAgICAKLSAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2Nr
SW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4
SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CkBAIC0zMjEsOCArMzIx
LDggQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgdm9pZCBpZGVudGlmeVJlZHVuZGFudEFycmF5
Q2hlY2tzKCkKICAgICB7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4
XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgp
OyArK2luZGV4SW5CbG9jaykgewpAQCAtNDUxLDggKzQ1MSw4IEBAIHByaXZhdGU6CiAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFR5cGVDaGVjaz4KICAgICB2b2lkIGRpc2FibGVIb2lzdGluZ0Fjcm9z
c09TUkVudHJpZXMoKQogICAgIHsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkg
ewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2Nr
SW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAg
ICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTUyMzM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgsOCArNDgsOCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dy
YXBoLm1fdW5pZmljYXRpb25TdGF0ZSA9PSBMb2NhbGx5VW5pZmllZCk7CiAgICAgICAgIAogICAg
ICAgICAvLyBFbnN1cmUgdGhhdCBhbGwgUGhpIGZ1bmN0aW9ucyBhcmUgdW5pZmllZC4KLSAgICAg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsg
YmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAg
ICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsMjIgKzc2
LDIyIEBAIHB1YmxpYzoKICAgICAgICAgLy8gaW4gcmVsZWFzZSBidWlsZHMuCiAgICAgICAgIAog
ICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0IGFsbCBsb2NhbCB2YXJpYWJsZXMgYXQgdGhlIGhlYWQg
b2YgdGhlIHJvb3QgYmxvY2sgYXJlIGRlYWQuCi0gICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBt
X2dyYXBoLm1fYmxvY2tzWzBdLmdldCgpOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9n
cmFwaC5ibG9jaygwKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJvb3QtPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpCiAgICAgICAgICAgICBWX0VRVUFM
KChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCAwKSwgc3RhdGljX2Nhc3Q8Tm9kZSo+
KDApLCByb290LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkpOwogICAgICAgICAKICAgICAgICAg
Ly8gVmFsaWRhdGUgcmVmIGNvdW50cyBhbmQgdXNlcy4KICAgICAgICAgSGFzaE1hcDxOb2RlKiwg
dW5zaWduZWQ+IG15UmVmQ291bnRzOwotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4
KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAg
ICAgICAgICAgaWYgKCFibG9jayB8fCAhYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+
bnVtTm9kZXMoKTsgKytpKQogICAgICAgICAgICAgICAgIG15UmVmQ291bnRzLmFkZChibG9jay0+
bm9kZShpKSwgMCk7CiAgICAgICAgIH0KICAgICAgICAgSGFzaFNldDxOb2RlKj4gYWNjZXB0YWJs
ZU5vZGVzOwotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5k
ZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7
CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1f
Z3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFi
bG9jayB8fCAhYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytp
KSB7CkBAIC0xNTcsOCArMTU3LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7
Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJ
bmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAg
ICAgICAgaWYgKCFibG9jayB8fCAhYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgCkBAIC0yMjUsMTQgKzIyNSwxNCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIG11c3QgZXhpc3QgYSBwcmVkZWNlc3NvciBibG9j
ayB0aGF0IGhhcyB0aGlzIG5vZGUgaW5kZXggaW4KICAgICAgICAgICAgICAgICAgICAgLy8gaXRz
IHRhaWwgdmFyaWFibGVzLgogICAgICAgICAgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBibG9jay0+bV9w
cmVkZWNlc3NvcnMuc2l6ZSgpOyArK2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEJhc2lj
QmxvY2sqIHByZXZCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2stPm1fcHJlZGVjZXNzb3Jz
W2tdXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChCbG9jaywgYmxv
Y2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldkJsb2Nr
LT5pc1JlYWNoYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7
IGsgPCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytrKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBwcmV2QmxvY2sgPSBibG9jay0+cHJlZGVjZXNzb3JzW2tdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKEJsb2NrLCBibG9jay0+cHJlZGVjZXNz
b3JzW2tdKSwgcHJldkJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChC
bG9jaywgYmxvY2stPnByZWRlY2Vzc29yc1trXSksIHByZXZCbG9jay0+aXNSZWFjaGFibGUpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldk5vZGUgPSBwcmV2QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElm
IHdlIGhhdmUgYSBQaGkgdGhhdCBpcyBub3QgcmVmZXJyaW5nIHRvICp0aGlzKiBibG9jayB0aGVu
IGFsbCBwcmVkZWNlc3NvcnMKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG11c3QgaGF2ZSB0
aGF0IGxvY2FsIGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChs
b2NhbCwgYmxvY2tJbmRleCwgQmxvY2ssIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSksIHByZXZO
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2ssIGJs
b2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHByZXZOb2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IEdldExvY2FsOgogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKQEAgLTI0Mywx
MSArMjQzLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3Nv
cnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmV2Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJl
dk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNl
dExvY2FsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0g
TW92SGludAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09
IE1vdkhpbnRBbmRDaGVjawpAQCAtMjU5LDcgKzI1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgaXQgY2Fubm90IHJlZmVyIGludG8g
dGhpcyBibG9jay4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxv
Y2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5CbG9jayhl
ZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBi
bG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2stPmlzSW5CbG9jayhl
ZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSksIGZvdW5kKTsKQEAg
LTI3NCwxNyArMjc0LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1
bWVudHMoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZp
cnR1YWxSZWdpc3Rlcj4oYXJndW1lbnRUb09wZXJhbmQoaSkpLCBibG9ja0luZGV4KSwgIWJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5h
cmd1bWVudChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgIFZB
TElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGFyZ3VtZW50VG9PcGVyYW5kKGkp
KSwgYmxvY2spLCAhYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKSB8fCBibG9jay0+
dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CiAg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKQotICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihhcmd1
bWVudFRvT3BlcmFuZChpKSksIGJsb2NrSW5kZXgpLCAhYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5h
cmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGkpLT5oYXNWYXJp
YWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGFyZ3VtZW50VG9PcGVyYW5kKGkpKSwgYmxvY2spLCAhYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRUYWls
LmFyZ3VtZW50KGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMuYXJndW1lbnQoaSkgPSBub3RTZXQ7
CiAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMuYXJndW1lbnQoaSkgPSBub3RTZXQ7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaSksIGJsb2NrSW5kZXgp
LCAhYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRI
ZWFkLmxvY2FsKGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAg
VkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaSksIGJsb2NrKSwgIWJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5sb2Nh
bChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaSksIGJsb2NrSW5kZXgpLCAhYmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5sb2NhbChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGkp
LT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCBibG9jayksICFibG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaSktPmhh
c1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKIAogICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRp
b25zLmxvY2FsKGkpID0gbm90U2V0OwogICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25z
LmxvY2FsKGkpID0gbm90U2V0OwpAQCAtMzI0LDcgKzMyNCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFteVJlZkNvdW50cy5nZXQobm9kZSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09
IFRocmVhZGVkQ1BTKQotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJs
b2NrSW5kZXgpLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5v
dFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBn
ZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CiAgICAg
ICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkg
PSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFNl
dExvY2FsOgpAQCAtMzQ2LDExICszNDYsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVt
YmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgY2hlY2tPcGVyYW5kKAot
ICAgICAgICAgICAgICAgICAgICBibG9ja0luZGV4LCBnZXRMb2NhbFBvc2l0aW9ucywgc2V0TG9j
YWxQb3NpdGlvbnMsIGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsKKyAgICAgICAgICAgICAgICAgICAg
YmxvY2ssIGdldExvY2FsUG9zaXRpb25zLCBzZXRMb2NhbFBvc2l0aW9ucywgYXJndW1lbnRUb09w
ZXJhbmQoaSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsraSkgewogICAg
ICAgICAgICAgICAgIGNoZWNrT3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRl
eCwgZ2V0TG9jYWxQb3NpdGlvbnMsIHNldExvY2FsUG9zaXRpb25zLCBpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYmxvY2ssIGdldExvY2FsUG9zaXRpb25zLCBzZXRMb2NhbFBvc2l0aW9ucywgaSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zNjAsNyArMzYwLDcgQEAgcHJp
dmF0ZToKICAgICBHcmFwaER1bXBNb2RlIG1fZ3JhcGhEdW1wTW9kZTsKICAgICAKICAgICB2b2lk
IGNoZWNrT3BlcmFuZCgKLSAgICAgICAgQmxvY2tJbmRleCBibG9ja0luZGV4LCBPcGVyYW5kczxz
aXplX3Q+JiBnZXRMb2NhbFBvc2l0aW9ucywKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2ssIE9w
ZXJhbmRzPHNpemVfdD4mIGdldExvY2FsUG9zaXRpb25zLAogICAgICAgICBPcGVyYW5kczxzaXpl
X3Q+JiBzZXRMb2NhbFBvc2l0aW9ucywgaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICBpZiAo
Z2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSA9PSBub3RTZXQpCkBAIC0zNjgsMTIg
KzM2OCwxMCBAQCBwcml2YXRlOgogICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFu
ZChvcGVyYW5kKSA9PSBub3RTZXQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0
KCk7Ci0gICAgICAgIAogICAgICAgICBWQUxJREFURSgKICAgICAgICAgICAgIChibG9jay0+YXQo
Z2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSksCiAgICAgICAgICAgICAgYmxvY2st
PmF0KHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkpLAotICAgICAgICAgICAgIGJs
b2NrSW5kZXgpLAorICAgICAgICAgICAgIGJsb2NrKSwKICAgICAgICAgICAgIGdldExvY2FsUG9z
aXRpb25zLm9wZXJhbmQob3BlcmFuZCkgPCBzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG9wZXJh
bmQpKTsKICAgICB9CiAgICAgCkBAIC0zODIsMTAgKzM4MCw5IEBAIHByaXZhdGU6CiAgICAgICAg
IGRhdGFMb2dGKCJAJXUiLCBub2RlLT5pbmRleCgpKTsKICAgICB9CiAgICAgCi0gICAgZW51bSBC
bG9ja1RhZyB7IEJsb2NrIH07Ci0gICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChCbG9j
a1RhZywgQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNv
bnRleHQoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQmxvY2sg
IyV1IiwgYmxvY2tJbmRleCk7CisgICAgICAgIGRhdGFMb2coIkJsb2NrICIsICpibG9jayk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZSogbm9kZSwg
RWRnZSBlZGdlKQpAQCAtMzkzLDM5ICszOTAsMzcgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxv
Zyhub2RlLCAiIC0+ICIsIGVkZ2UpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlcG9ydFZhbGlk
YXRpb25Db250ZXh0KFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmxvY2tJbmRleCBibG9ja0luZGV4
KQorICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoVmlydHVhbFJlZ2lzdGVyIGxvY2Fs
LCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJyJWQgaW4gQmxv
Y2sgIyV1IiwgbG9jYWwsIGJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9nKCJyIiwgc3RhdGlj
X2Nhc3Q8aW50Pihsb2NhbCksICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGxvY2FsLCBCbG9ja0luZGV4IHNvdXJjZUJsb2NrSW5kZXgsIEJsb2NrVGFnLCBCbG9ja0luZGV4
IGRlc3RpbmF0aW9uQmxvY2tJbmRleCkKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBC
YXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgQmFzaWNCbG9jayogZGVzdGluYXRpb25CbG9jaykKICAg
ICB7Ci0gICAgICAgIGRhdGFMb2dGKCJyJWQgaW4gQmxvY2sgIyV1IC0+ICMldSIsIGxvY2FsLCBz
b3VyY2VCbG9ja0luZGV4LCBkZXN0aW5hdGlvbkJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9n
KCJyIiwgc3RhdGljX2Nhc3Q8aW50Pihsb2NhbCksICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2Nr
LCAiIC0+ICIsICpkZXN0aW5hdGlvbkJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBv
cnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCbG9j
a0luZGV4IHNvdXJjZUJsb2NrSW5kZXgsIE5vZGUqIHByZXZOb2RlKQorICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBOb2RlKiBwcmV2Tm9kZSkK
ICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgZm9yIHIlZCBpbiBCbG9jayAjJXUiLCBwcmV2
Tm9kZS0+aW5kZXgoKSwgbG9jYWwsIHNvdXJjZUJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9n
KHByZXZOb2RlLCAiIGZvciByIiwgc3RhdGljX2Nhc3Q8aW50Pihsb2NhbCksICIgaW4gQmxvY2sg
IiwgKnNvdXJjZUJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCByZXBvcnRWYWxpZGF0aW9u
Q29udGV4dCgKLSAgICAgICAgTm9kZSogbm9kZSwgQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAg
IHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZSogbm9kZSwgQmFzaWNCbG9jayogYmxv
Y2spCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IGluIEJsb2NrICMldSIsIG5vZGUtPmlu
ZGV4KCksIGJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9nKG5vZGUsICIgaW4gQmxvY2sgIiwg
KmJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgK
LSAgICAgICAgTm9kZSogbm9kZSwgTm9kZSogbm9kZTIsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkK
KyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGUqIG5vZGUsIE5vZGUqIG5vZGUy
LCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgYW5kIEAl
dSBpbiBCbG9jayAjJXUiLCBub2RlLT5pbmRleCgpLCBub2RlMi0+aW5kZXgoKSwgYmxvY2tJbmRl
eCk7CisgICAgICAgIGRhdGFMb2cobm9kZSwgIiBhbmQgIiwgbm9kZTIsICIgaW4gQmxvY2sgIiwg
KmJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgK
LSAgICAgICAgTm9kZSogbm9kZSwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBOb2RlKiBleHBlY3Rl
ZE5vZGUsIEVkZ2UgaW5jb21pbmdFZGdlKQorICAgICAgICBOb2RlKiBub2RlLCBCYXNpY0Jsb2Nr
KiBibG9jaywgTm9kZSogZXhwZWN0ZWROb2RlLCBFZGdlIGluY29taW5nRWRnZSkKICAgICB7Ci0g
ICAgICAgIGRhdGFMb2cobm9kZSwgIiBpbiBCbG9jayAjIiwgYmxvY2tJbmRleCwgIiwgc2VhcmNo
aW5nIGZvciAiLCBleHBlY3RlZE5vZGUsICIgZnJvbSAiLCBpbmNvbWluZ0VkZ2UpOworICAgICAg
ICBkYXRhTG9nKG5vZGUsICIgaW4gQmxvY2sgIiwgYmxvY2ssICIsIHNlYXJjaGluZyBmb3IgIiwg
ZXhwZWN0ZWROb2RlLCAiIGZyb20gIiwgaW5jb21pbmdFZGdlKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBkdW1wR3JhcGhJZkFwcHJvcHJpYXRlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTMsOCArNTMsOCBAQCBwdWJsaWM6CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQogICAgICAgICBib29sIG5lZWRzTmV3TGluZSA9IGZhbHNlOwogI2VuZGlmCi0gICAg
ICAgIGZvciAoc2l6ZV90IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Js
b2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKHNp
emVfdCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsr
YmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNp
b24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsOCArMTc0LDggQEAgaW5saW5lIGJvb2wgY2FuQ29t
cGlsZShOb2RlKiBub2RlKQogCiBib29sIGNhbkNvbXBpbGUoR3JhcGgmIGdyYXBoKQogewotICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBibG9j
a0luZGV4LS07KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGgubV9ibG9ja3Nb
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBncmFw
aC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MSwxMSArNjEsMTEgQEAgcHVibGljOgogICAgICAgICAsIG1fZnRsU3RhdGUoc3RhdGUp
CiAgICAgICAgICwgbV9oZWFwcyhzdGF0ZS5jb250ZXh0KQogICAgICAgICAsIG1fb3V0KHN0YXRl
LmNvbnRleHQpCi0gICAgICAgICwgbV9sb2NhbHNCb29sZWFuKE9wZXJhbmRzTGlrZSwgc3RhdGUu
Z3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAgICAgLCBtX2xvY2FsczMy
KE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkK
LSAgICAgICAgLCBtX2xvY2FsczY0KE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3Nb
MF0tPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAgICAgLCBtX2xvY2Fsc0RvdWJsZShPcGVyYW5kc0xp
a2UsIHN0YXRlLmdyYXBoLm1fYmxvY2tzWzBdLT52YXJpYWJsZXNBdEhlYWQpCi0gICAgICAgICwg
bV92YWx1ZVNvdXJjZXMoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5tX2Jsb2Nrc1swXS0+dmFy
aWFibGVzQXRIZWFkKQorICAgICAgICAsIG1fbG9jYWxzQm9vbGVhbihPcGVyYW5kc0xpa2UsIHN0
YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCisgICAgICAgICwgbV9sb2NhbHMz
MihPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCisg
ICAgICAgICwgbV9sb2NhbHM2NChPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdEhlYWQpCisgICAgICAgICwgbV9sb2NhbHNEb3VibGUoT3BlcmFuZHNMaWtlLCBz
dGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1fdmFsdWVT
b3VyY2VzKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVh
ZCkKICAgICAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCkpCiAgICAgICAgICwgbV9leGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUpCiAgICAgICAgICwg
bV9zdGF0ZShzdGF0ZS5ncmFwaCkKQEAgLTk5LDExICs5OSwxMSBAQCBwdWJsaWM6CiAgICAgICAg
IG1fdGFnVHlwZU51bWJlciA9IG1fb3V0LmNvbnN0SW50NjQoVGFnVHlwZU51bWJlcik7CiAgICAg
ICAgIG1fdGFnTWFzayA9IG1fb3V0LmNvbnN0SW50NjQoVGFnTWFzayk7CiAgICAgICAgIAotICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBtX2hpZ2hCbG9j
ayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7
ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgbV9oaWdoQmxvY2sgPSBtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFtX2hpZ2hCbG9jaykKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG1fYmxvY2tzLmFkZChtX2hpZ2hCbG9jaywgRlRM
X05FV19CTE9DSyhtX291dCwgKCJCbG9jayAjIiwgYmxvY2tJbmRleCkpKTsKKyAgICAgICAgICAg
IG1fYmxvY2tzLmFkZChtX2hpZ2hCbG9jaywgRlRMX05FV19CTE9DSyhtX291dCwgKCJCbG9jayAi
LCAqbV9oaWdoQmxvY2spKSk7CiAgICAgICAgICAgICBhZGRGbHVzaGVkTG9jYWxPcFJvb3RzKCk7
CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMTUsNyArMTE1LDcgQEAgcHVibGljOgogICAgICAg
ICAKICAgICAgICAgbV9vdXQuanVtcChsb3dCbG9jaygwKSk7CiAgICAgICAgIAotICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KQorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgp
CiAgICAgICAgICAgICBjb21waWxlQmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIAogICAgICAg
ICAvLyBBbmQgbm93IGNvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBibG9jay4KQEAgLTIxNCwx
NSArMjE0LDE1IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlQmxvY2soQmxvY2tJ
bmRleCBibG9ja0luZGV4KQogICAgIHsKLSAgICAgICAgbV9oaWdoQmxvY2sgPSBtX2dyYXBoLm1f
YmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBtX2hpZ2hCbG9jayA9IG1fZ3JhcGgu
YmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIGlmICghbV9oaWdoQmxvY2spCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBsb3dCbG9jayA9IG1fYmxv
Y2tzLmdldChtX2hpZ2hCbG9jayk7CiAgICAgICAgIAogICAgICAgICBtX25leHRIaWdoQmxvY2sg
PSAwOwotICAgICAgICBmb3IgKEJsb2NrSW5kZXggbmV4dEJsb2NrSW5kZXggPSBibG9ja0luZGV4
ICsgMTsgbmV4dEJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytuZXh0Qmxv
Y2tJbmRleCkgewotICAgICAgICAgICAgbV9uZXh0SGlnaEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
c1tuZXh0QmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBuZXh0Qmxv
Y2tJbmRleCA9IGJsb2NrSW5kZXggKyAxOyBuZXh0QmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7ICsrbmV4dEJsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIG1fbmV4dEhpZ2hCbG9jayA9
IG1fZ3JhcGguYmxvY2sobmV4dEJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKG1fbmV4dEhp
Z2hCbG9jaykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTU4MiwxNSAr
MTU4MiwxNSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUp1bXAoKQogICAgIHsK
LSAgICAgICAgbV9vdXQuanVtcChsb3dCbG9jayhtX25vZGUtPnRha2VuQmxvY2tJbmRleCgpKSk7
CisgICAgICAgIG1fb3V0Lmp1bXAobG93QmxvY2sobV9ub2RlLT50YWtlbkJsb2NrKCkpKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQnJhbmNoKCkKICAgICB7CiAgICAgICAgIG1fb3V0
LmJyYW5jaCgKICAgICAgICAgICAgIGJvb2xpZnkobV9ub2RlLT5jaGlsZDEoKSksCi0gICAgICAg
ICAgICBsb3dCbG9jayhtX25vZGUtPnRha2VuQmxvY2tJbmRleCgpKSwKLSAgICAgICAgICAgIGxv
d0Jsb2NrKG1fbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCkpKTsKKyAgICAgICAgICAgIGxvd0Js
b2NrKG1fbm9kZS0+dGFrZW5CbG9jaygpKSwKKyAgICAgICAgICAgIGxvd0Jsb2NrKG1fbm9kZS0+
bm90VGFrZW5CbG9jaygpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVN3aXRjaCgp
CkBAIC0yNDU0LDkgKzI0NTQsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgdXNlKGVkZ2UpOwogICAg
IH0KICAgICAKKyAgICBMQmFzaWNCbG9jayBsb3dCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2Jsb2Nrcy5nZXQoYmxvY2spOworICAgIH0KICAgICBMQmFz
aWNCbG9jayBsb3dCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9ibG9ja3MuZ2V0KG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCkpOwor
ICAgICAgICByZXR1cm4gbG93QmxvY2sobV9ncmFwaC5ibG9jayhibG9ja0luZGV4KSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206108</attachid>
            <date>2013-07-04 12:01:31 -0700</date>
            <delta_ts>2013-07-04 12:15:08 -0700</delta_ts>
            <desc>it compiles</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>165245</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNDA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNiBA
QAorMjAxMy0wNy0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgcmVmZXIgdG8gQmFzaWNCbG9ja3MgYnkgQmFzaWNCbG9j
ayogYW5kIG5vdCBCbG9ja0luZGV4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTgzMzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWNjb21wbGlzaGVzIHR3byBnb2FsczoKKworICAg
ICAgICAxKSBTaW1wbGlmaWVzIGEgYnVuY2ggb2YgY29kZS4gWW91IGNhbiBub3cgbXVjaCBtb3Jl
IGRpcmVjdGx5IGdldCB0byBhIHN1Y2Nlc3NvcgorICAgICAgICAgICBvciBwcmVkZWNlc3Nvciwg
c2luY2UgeW91IGp1c3QgZ2V0IHRoZSBwb2ludGVyIGRpcmVjdGx5LiBUaGUgYmFja2VuZChzKSBh
bHdheXMKKyAgICAgICAgICAgaG9sZCBvbnRvIGEgcG9pbnRlciB0byB0aGUgYmxvY2sgdGhleSdy
ZSBvbiwgc28geW91IGRvbid0IGhhdmUgdG8gZG8gd29yayB0bworICAgICAgICAgICBnZXQgdGhl
IGJsb2NrIGZyb20gdGhlIGluZGV4LgorICAgICAgICAKKyAgICAgICAgMikgSXQgYWxsb3dzIGZv
ciB0aGUgcG9zc2liaWxpdHkgb2YgaW5zZXJ0aW5nIGJsb2NrcyBpbnRvIHRoZSBwcm9ncmFtLgor
ICAgICAgICAgICBQcmV2aW91c2x5LCBpZiB5b3UgZGlkIHRoYXQsIHlvdSdkIGhhdmUgdG8gZWRp
dCBhbGwgcmVmZXJlbmNlcyB0byBibG9ja3Mgc2luY2UKKyAgICAgICAgICAgdGhvc2UgcmVmZXJl
bmNlcyB3b3VsZCBoYXZlIG91dGRhdGVkIGluZGV4aW5nIGFmdGVyIGFuIGluc2VydGlvbi4gTm93
LCBpZiB5b3UKKyAgICAgICAgICAgY2hhbmdlIHRoZSBpbmRleGluZywgeW91IGp1c3QgaGF2ZSB0
byBpbnZhbGlkYXRlIHNvbWUgYW5hbHlzZXMgYW5kIG1ha2Ugc3VyZQorICAgICAgICAgICB0aGF0
IHlvdSBjaGFuZ2UgZWFjaCBibG9jaydzIEJhc2ljQmxvY2s6OmluZGV4IGFjY29yZGluZ2x5Lgor
CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
U3RhdGU6OmVuZEJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6
Om1lcmdlVG9TdWNjZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5oOgor
ICAgICAgICAoQWJzdHJhY3RTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZp
Y2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2U6
OnJ1bik6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKERGRyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6
OkRGRzo6QmFzaWNCbG9jazo6c2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6
aXNFbXB0eSk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6YXQpOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpERkc6OkJh
c2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OnJlc2l6ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6Z3Jvdyk6CisgICAgICAgIChCYXNpY0Js
b2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6Om51bVN1Y2Nlc3NvcnMpOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcik6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6
c3VjY2Vzc29yRm9yQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpk
dW1wKToKKyAgICAgICAgKFVubGlua2VkQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OlVubGlu
a2VkQmxvY2s6OlVubGlua2VkQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OmdldEJ5dGVjb2Rl
QmVnaW5Gb3JCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6YmxvY2tGb3JCeXRlY29kZU9mZnNl
dCk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEJ5dGVD
b2RlUGFyc2VyKToKKyAgICAgICAgKElubGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpsaW5rQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjps
aW5rQmxvY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3Rh
Y2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2UpOgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Q0ZBUGhhc2U6OnBlcmZvcm1CbG9ja0NGQSk6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZB
UGhhc2U6OnBlcmZvcm1Gb3J3YXJkQ0ZBKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFz
ZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpjb252
ZXJ0VG9KdW1wKToKKyAgICAgICAgKiBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6ZnJlZVVubmVjZXNzYXJ5Tm9k
ZXMpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6
ZUxvY2Fsc0luQmxvY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGluZ1BoYXNl
Ojpwcm9wYWdhdGVQaGlzKToKKyAgICAgICAgKENQU1JldGhyZWFkaW5nUGhhc2UpOgorICAgICAg
ICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnJ1
bik6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZnL0RG
R0RDRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6cnVuKToKKyAgICAg
ICAgKiBkZmcvREZHRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEaXNhc3Nl
bWJsZXI6OkRpc2Fzc2VtYmxlcik6CisgICAgICAgIChKU0M6OkRGRzo6RGlzYXNzZW1ibGVyOjpj
cmVhdGVEdW1wTGlzdCk6CisgICAgICAgICogZGZnL0RGR0Rpc2Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkRpc2Fzc2VtYmxlcjo6c2V0Rm9yQmxvY2tJbmRleCk6CisgICAgICAgICog
ZGZnL0RGR0RvbWluYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmNv
bXB1dGUpOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6Oml0ZXJhdGVGb3JCbG9jayk6
CisgICAgICAgICogZGZnL0RGR0RvbWluYXRvcnMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpEb21p
bmF0b3JzOjpkb21pbmF0ZXMpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkZp
eHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1
bXBCbG9ja0hlYWRlcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmhhbmRsZVN1Y2Nlc3Nv
cik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmRldGVybWluZVJlYWNoYWJpbGl0eSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnJlc2V0UmVhY2hhYmlsaXR5KToKKyAgICAgICAgKiBk
ZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bnVtQmxvY2tzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpsYXN0QmxvY2spOgorICAgICAgICAoR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjphcHBlbmRCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmtpbGxCbG9jayk6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpJVENvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OnNldEZvckJsb2NrSW5kZXgpOgorICAgICAg
ICAqIGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxM
b29wOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9vcHM6OmNvbXB1dGUpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wczo6bG9vcHNPZik6CisgICAgICAgICogZGZn
L0RGR05hdHVyYWxMb29wcy5oOgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wOjpOYXR1
cmFsTG9vcCk6CisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJhbExvb3A6OmFkZEJsb2NrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9vcDo6aGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZH
OjpOYXR1cmFsTG9vcDo6YXQpOgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wOjpvcGVy
YXRvcltdKToKKyAgICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9vcDo6Y29udGFpbnMpOgorICAg
ICAgICAoTmF0dXJhbExvb3ApOgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wczo6aGVh
ZGVyT2YpOgorICAgICAgICAoTmF0dXJhbExvb3BzKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5o
OgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hDYXNlOjpTd2l0Y2hD
YXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChTd2l0Y2hDYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hDYXNlOjp0
YXJnZXRCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hEYXRhOjpTd2l0
Y2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hEYXRhOjpzZXRGYWxsVGhyb3VnaEJ5
dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlN3aXRjaERhdGE6OmZhbGxUaHJvdWdo
Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChTd2l0Y2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjpzZXRUYWtlbkJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzZXROb3RU
YWtlbkJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp0YWtlbkJsb2NrKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpub3RUYWtlbkJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpzdWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN1Y2Nlc3NvckZvckNv
bmRpdGlvbik6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvbkluamVjdGlvblBoYXNlOjpydW4pOgorICAg
ICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZUZvcndhcmQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGVC
YWNrd2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6
OmRvUm91bmRPZkRvdWJsZVZvdGluZyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29udmVydExhc3RPU1JF
eGl0VG9Gb3J3YXJkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW5jaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2spOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y3JlYXRlT1NSRW50cmllcyk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmxpbmtPU1JFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXEpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFkZEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmxpbmtCcmFuY2hlcyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5leHRCbG9jayk6Cisg
ICAgICAgIChTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmRldGVjdFBlZXBIb2xlQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6YnJhbmNoRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
YnJhbmNoRG91YmxlTm9uWmVybyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmJyYW5jaDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoVGVz
dDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoNjQpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2g4KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoUHRyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6YnJhbmNoVGVzdFB0cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmJyYW5jaFRlc3Q4KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
anVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFkZEJyYW5jaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OlN0cmluZ1N3aXRjaENhc2U6OlN0cmlu
Z1N3aXRjaENhc2UpOgorICAgICAgICAoU3RyaW5nU3dpdGNoQ2FzZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OkJyYW5jaFJlY29yZDo6QnJhbmNoUmVjb3JkKToKKyAgICAg
ICAgKEJyYW5jaFJlY29yZCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBl
ZXBob2xlQnJhbmNoTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlQ29tcGFyZU51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RP
ck90aGVyRXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0
T2JqZWN0T3JPdGhlckJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJl
TnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
UGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNo
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0
aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50U3RydWN0dXJlQ2hlY2tzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFudEFycmF5Q2hl
Y2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjpkaXNhYmxl
SG9pc3RpbmdBY3Jvc3NPU1JFbnRyaWVzKToKKyAgICAgICAgKiBkZmcvREZHVW5pZmljYXRpb25Q
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VW5pZmljYXRpb25QaGFzZTo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRl
Ojp2YWxpZGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OmNoZWNrT3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OnJlcG9ydFZhbGlkYXRpb25Db250ZXh0KToK
KyAgICAgICAgKiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2U6OnJ1bik6Cisg
ICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2Fu
Q29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6TG93ZXJERkdUb0xMVk0pOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dlcik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVCbG9jayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmNvbXBpbGVKdW1wKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0Jsb2Nr
KToKKwogMjAxMy0wNy0wMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIGZvdXJ0aFRpZXI6IERGRzo6Tm9kZTo6bV9vcEluZm8yIHNob3VsZCBhbHNvIGJlIGEgdWlu
dHB0cl90CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgdm9p
ZCBBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaQogCiB2b2lkIEFic3RyYWN0U3Rh
dGU6OmluaXRpYWxpemUoR3JhcGgmIGdyYXBoKQogewotICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBn
cmFwaC5tX2Jsb2Nrc1swXS5nZXQoKTsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gZ3JhcGguYmxv
Y2soMCk7CiAgICAgcm9vdC0+Y2ZhU2hvdWxkUmV2aXNpdCA9IHRydWU7CiAgICAgcm9vdC0+Y2Zh
SGFzVmlzaXRlZCA9IGZhbHNlOwogICAgIHJvb3QtPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7
CkBAIC0xMTgsOCArMTE4LDggQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBo
JiBncgogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLmNsZWFyKCk7CiAg
ICAgICAgIHJvb3QtPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOwogICAgIH0KLSAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDEgOyBibG9ja0luZGV4IDwgZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBn
cmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDEgOyBibG9ja0luZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRl
eCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlm
ICghYmxvY2stPmlzUmVhY2hhYmxlKQpAQCAtMjAwLDcgKzIwMCw3IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZW5kQmFzaWNCbG9jayhNZXJnZU0KICAgICBpZiAobWVyZ2VNb2RlICE9IE1lcmdlVG9T
dWNjZXNzb3JzKQogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICAKLSAgICByZXR1cm4gbWVy
Z2VUb1N1Y2Nlc3NvcnMobV9ncmFwaCwgYmxvY2spOworICAgIHJldHVybiBtZXJnZVRvU3VjY2Vz
c29ycyhibG9jayk7CiB9CiAKIHZvaWQgQWJzdHJhY3RTdGF0ZTo6cmVzZXQoKQpAQCAtMTc5Miw3
ICsxNzkyLDcgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbAogICAg
IHJldHVybiBjaGFuZ2VkOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVRv
U3VjY2Vzc29ycyhHcmFwaCYgZ3JhcGgsIEJhc2ljQmxvY2sqIGJhc2ljQmxvY2spCitpbmxpbmUg
Ym9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVRvU3VjY2Vzc29ycyhCYXNpY0Jsb2NrKiBiYXNpY0Js
b2NrKQogewogICAgIE5vZGUqIHRlcm1pbmFsID0gYmFzaWNCbG9jay0+bGFzdCgpOwogICAgIApA
QCAtMTgwMiwyNCArMTgwMiwyNCBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVRv
U3VjY2VzCiAgICAgY2FzZSBKdW1wOiB7CiAgICAgICAgIEFTU0VSVChiYXNpY0Jsb2NrLT5jZmFC
cmFuY2hEaXJlY3Rpb24gPT0gSW52YWxpZEJyYW5jaERpcmVjdGlvbik7CiAjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgICAgICBN
ZXJnaW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgoKSk7Cisg
ICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAiLCAqdGVybWluYWwtPnRh
a2VuQmxvY2soKSwgIi5cbiIpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Js
b2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC0+dGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsK
KyAgICAgICAgcmV0dXJuIG1lcmdlKGJhc2ljQmxvY2ssIHRlcm1pbmFsLT50YWtlbkJsb2NrKCkp
OwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBCcmFuY2g6IHsKICAgICAgICAgQVNTRVJUKGJh
c2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiAhPSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsK
ICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHRvIGJs
b2NrICMldS5cbiIsIHRlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgIGRhdGFM
b2coIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAiLCAqdGVybWluYWwtPnRha2VuQmxvY2soKSwg
Ii5cbiIpOwogI2VuZGlmCiAgICAgICAgIGlmIChiYXNpY0Jsb2NrLT5jZmFCcmFuY2hEaXJlY3Rp
b24gIT0gVGFrZUZhbHNlKQotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2Nr
LCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC0+dGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgdGVybWluYWwtPnRha2VuQmxv
Y2soKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAg
ICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1pbmFsLT5u
b3RUYWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVyZ2luZyB0
byBibG9jayAiLCAqdGVybWluYWwtPm5vdFRha2VuQmxvY2soKSwgIi5cbiIpOwogI2VuZGlmCiAg
ICAgICAgIGlmIChiYXNpY0Jsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gIT0gVGFrZVRydWUpCi0g
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rl
cm1pbmFsLT5ub3RUYWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCB0ZXJtaW5hbC0+bm90VGFrZW5CbG9jaygpKTsKICAgICAg
ICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQogICAgICAgICAKQEAgLTE4MjgsOSArMTgyOCw5IEBA
IGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXMKICAgICAgICAgLy8gd2Un
cmUgbm90LiBIb3dldmVyIEkgc29tZWhvdyBkb3VidCB0aGF0IHRoaXMgd2lsbCBldmVyIGJlIGEg
YmlnIGRlYWwuCiAgICAgICAgIEFTU0VSVChiYXNpY0Jsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24g
PT0gSW52YWxpZEJyYW5jaERpcmVjdGlvbik7CiAgICAgICAgIFN3aXRjaERhdGEqIGRhdGEgPSB0
ZXJtaW5hbC0+c3dpdGNoRGF0YSgpOwotICAgICAgICBib29sIGNoYW5nZWQgPSBtZXJnZShiYXNp
Y0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1tkYXRhLT5mYWxsVGhyb3VnaF0uZ2V0KCkpOworICAgICAg
ICBib29sIGNoYW5nZWQgPSBtZXJnZShiYXNpY0Jsb2NrLCBkYXRhLT5mYWxsVGhyb3VnaCk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmNhc2VzLnNpemUoKTsgaS0tOykKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbZGF0YS0+
Y2FzZXNbaV0udGFyZ2V0XS5nZXQoKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJh
c2ljQmxvY2ssIGRhdGEtPmNhc2VzW2ldLnRhcmdldCk7CiAgICAgICAgIHJldHVybiBjaGFuZ2Vk
OwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw3ICsyMjcs
NyBAQCBwdWJsaWM6CiAgICAgLy8gc3VjY2Vzc29ycy4gUmV0dXJucyB0cnVlIGlmIGFueSBvZiB0
aGUgc3VjY2Vzc29ycycgc3RhdGVzIGNoYW5nZWQuIE5vdGUKICAgICAvLyB0aGF0IHRoaXMgaXMg
YXV0b21hdGljYWxseSBjYWxsZWQgaW4gZW5kQmFzaWNCbG9jaygpIGlmIE1lcmdlTW9kZSBpcwog
ICAgIC8vIE1lcmdlVG9TdWNjZXNzb3JzLgotICAgIGJvb2wgbWVyZ2VUb1N1Y2Nlc3NvcnMoR3Jh
cGgmLCBCYXNpY0Jsb2NrKik7CisgICAgYm9vbCBtZXJnZVRvU3VjY2Vzc29ycyhCYXNpY0Jsb2Nr
Kik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDIsOCArMTQyLDggQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAg
Ly8gRmlndXJlIG91dCB3aGljaCB2YXJpYWJsZXMgYXJlIGxpdmUsIHVzaW5nIGEgY29uc2VydmF0
aXZlIGFwcHJveGltYXRpb24gb2YKICAgICAgICAgLy8gbGl2ZW5lc3MuCi0gICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKyti
bG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBp
bmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewpAQCAtMTY0LDgg
KzE2NCw4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gdXNlZCBvbmx5IGZvciBHZXRCeVZhbCBhbmQg
R2V0QXJyYXlMZW5ndGggYWNjZXNzZXMuIEF0IHRoZSBzYW1lIHRpbWUsCiAgICAgICAgIC8vIGlk
ZW50aWZ5IHVzZXMgb2YgQ3JlYXRlQXJndW1lbnRzIHRoYXQgYXJlIG5vdCBjb25zaXN0ZW50IHdp
dGggdGhlIGFyZ3VtZW50cwogICAgICAgICAvLyBiZWluZyBhbGlhc2VkIG9ubHkgdG8gdmFyaWFi
bGVzIHRoYXQgc2F0aXNmeSB0aGVzZSBjb25zdHJhaW50cy4KLSAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7
ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5k
ZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5C
bG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CkBAIC0zNTIsOCArMzUyLDgg
QEAgcHVibGljOgogICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGFzIHJlcXVpcmluZyBjcmVhdGlv
bi4gVGhpcyBpcyBhIHByb3BlcnR5IG9mIFNldExvY2FscyB0bwogICAgICAgICAvLyB2YXJpYWJs
ZXMgdGhhdCBhcmUgbmVpdGhlciB0aGUgY29ycmVjdCBhcmd1bWVudHMgcmVnaXN0ZXIgbm9yIGFy
ZSBtYXJrZWQgYXMKICAgICAgICAgLy8gYmVpbmcgYXJndW1lbnRzLWFsaWFzZWQuCi0gICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9i
bG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3Mo
KTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sg
PSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewpAQCAt
NDI4LDggKzQyOCw4IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIEluc2VydGlvblNldCBp
bnNlcnRpb25TZXQobV9ncmFwaCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKyti
bG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkg
eworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2Nr
IDwgYmxvY2stPnNpemUoKTsgaW5kZXhJbkJsb2NrKyspIHsKQEAgLTY2MSw4ICs2NjEsOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5n
ZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4
IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBp
ZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyAr
K2luZGV4SW5CbG9jaykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTIz
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw4IEBAIHB1YmxpYzoKICAgICAK
ICAgICBib29sIHJ1bigpCiAgICAgewotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4
KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAg
ICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJl
dmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTQgQEAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAogY2xhc3MgR3JhcGg7CitjbGFzcyBJbnNlcnRpb25TZXQ7CiAKLXR5
cGVkZWYgVmVjdG9yIDxCbG9ja0luZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7Cit0eXBlZGVmIFZl
Y3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OwogCi1zdHJ1Y3QgQmFzaWNCbG9j
ayA6IFZlY3RvcjxOb2RlKiwgOD4geworc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJh
c2ljQmxvY2s+IHsKICAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIHVuc2ln
bmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQogICAgICAgICA6IGJ5dGVjb2Rl
QmVnaW4oYnl0ZWNvZGVCZWdpbikKKyAgICAgICAgLCBpbmRleChOb0Jsb2NrKQogICAgICAgICAs
IGlzT1NSVGFyZ2V0KGZhbHNlKQogICAgICAgICAsIGNmYUhhc1Zpc2l0ZWQoZmFsc2UpCiAgICAg
ICAgICwgY2ZhU2hvdWxkUmV2aXNpdChmYWxzZSkKQEAgLTc0LDYgKzc2LDE3IEBAIHN0cnVjdCBC
YXNpY0Jsb2NrIDogVmVjdG9yPE5vZGUqLCA4PiB7CiAgICAgICAgIHZhbHVlc0F0VGFpbC5lbnN1
cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKICAgICB9CiAgICAgCisgICAgc2l6ZV90IHNpemUoKSBj
b25zdCB7IHJldHVybiBtX25vZGVzLnNpemUoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuICFzaXplKCk7IH0KKyAgICBOb2RlKiYgYXQoc2l6ZV90IGkpIHsgcmV0dXJuIG1f
bm9kZXNbaV07IH0KKyAgICBOb2RlKiBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rl
c1tpXTsgfQorICAgIE5vZGUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0
KGkpOyB9CisgICAgTm9kZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIGF0KHNpemUoKSAtIDEpOyB9
CisgICAgdm9pZCByZXNpemUoc2l6ZV90IHNpemUpIHsgbV9ub2Rlcy5yZXNpemUoc2l6ZSk7IH0K
KyAgICB2b2lkIGdyb3coc2l6ZV90IHNpemUpIHsgbV9ub2Rlcy5ncm93KHNpemUpOyB9CisgICAg
CisgICAgdm9pZCBhcHBlbmQoTm9kZSogbm9kZSkgeyBtX25vZGVzLmFwcGVuZChub2RlKTsgfQor
ICAgIAogICAgIHNpemVfdCBudW1Ob2RlcygpIGNvbnN0IHsgcmV0dXJuIHBoaXMuc2l6ZSgpICsg
c2l6ZSgpOyB9CiAgICAgTm9kZSogbm9kZShzaXplX3QgaSkgY29uc3QKICAgICB7CkBAIC0xMDEs
MTUgKzExNCwzMyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlKiwgOD4gewogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAorICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3Nv
cnMoKSB7IHJldHVybiBsYXN0KCktPm51bVN1Y2Nlc3NvcnMoKTsgfQorICAgIAorICAgIEJhc2lj
QmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBs
YXN0KCktPnN1Y2Nlc3NvcihpbmRleCk7CisgICAgfQorICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nv
ckZvckNvbmRpdGlvbihib29sIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBsYXN0
KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOworICAgIH0KKwogI2RlZmluZSBE
RkdfREVGSU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJh
bXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKICAgICB0ZW1w
bGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhcHBlbmROb2RlKEdyYXBoJiwg
U3BlY3VsYXRlZFR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CiAgICAgREZHX1ZB
UklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCiAjdW5kZWYg
REZHX0RFRklORV9BUFBFTkRfTk9ERQogICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KCIjIiwgaW5kZXgpOworICAgIH0K
KyAgICAKICAgICAvLyBUaGlzIHZhbHVlIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgYmxvY2sgbGlu
a2luZyBhbmQgT1NSIGVudHJ5LiBJdCBpcyBtb3N0bHkgbWVhbmluZ2xlc3MKICAgICAvLyBmb3Ig
b3RoZXIgcHVycG9zZXMgZHVlIHRvIGlubGluaW5nLgogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQmVn
aW47CiAgICAgCisgICAgQmxvY2tJbmRleCBpbmRleDsKKyAgICAKICAgICBib29sIGlzT1NSVGFy
Z2V0OwogICAgIGJvb2wgY2ZhSGFzVmlzaXRlZDsKICAgICBib29sIGNmYVNob3VsZFJldmlzaXQ7
CkBAIC0xMjIsMzAgKzE1Myw0NCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlKiwg
OD4gewogICAgIGJvb2wgaXNSZWFjaGFibGU7CiAgICAgCiAgICAgVmVjdG9yPE5vZGUqPiBwaGlz
OwotICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKKyAgICBQcmVkZWNlc3Nvckxp
c3QgcHJlZGVjZXNzb3JzOwogICAgIAogICAgIE9wZXJhbmRzPE5vZGUqLCBOb2RlUG9pbnRlclRy
YWl0cz4gdmFyaWFibGVzQXRIZWFkOwogICAgIE9wZXJhbmRzPE5vZGUqLCBOb2RlUG9pbnRlclRy
YWl0cz4gdmFyaWFibGVzQXRUYWlsOwogICAgIAogICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+
IHZhbHVlc0F0SGVhZDsKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdFRhaWw7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKKyAgICBWZWN0b3I8
Tm9kZSosIDg+IG1fbm9kZXM7CiB9OwogCiBzdHJ1Y3QgVW5saW5rZWRCbG9jayB7Ci0gICAgQmxv
Y2tJbmRleCBtX2Jsb2NrSW5kZXg7CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICBib29s
IG1fbmVlZHNOb3JtYWxMaW5raW5nOwogICAgIGJvb2wgbV9uZWVkc0Vhcmx5UmV0dXJuTGlua2lu
ZzsKICAgICAKICAgICBVbmxpbmtlZEJsb2NrKCkgeyB9CiAgICAgCi0gICAgZXhwbGljaXQgVW5s
aW5rZWRCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCi0gICAgICAgIDogbV9ibG9ja0luZGV4
KGJsb2NrSW5kZXgpCisgICAgZXhwbGljaXQgVW5saW5rZWRCbG9jayhCYXNpY0Jsb2NrKiBibG9j
aykKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQogICAgICAgICAsIG1fbmVlZHNOb3JtYWxMaW5r
aW5nKHRydWUpCiAgICAgICAgICwgbV9uZWVkc0Vhcmx5UmV0dXJuTGlua2luZyhmYWxzZSkKICAg
ICB7CiAgICAgfQogfTsKICAgICAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0Qnl0ZWNvZGVC
ZWdpbkZvckJsb2NrKEJhc2ljQmxvY2sqKiBiYXNpY0Jsb2NrKQoreworICAgIHJldHVybiAoKmJh
c2ljQmxvY2spLT5ieXRlY29kZUJlZ2luOworfQorCitzdGF0aWMgaW5saW5lIEJhc2ljQmxvY2sq
IGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPEJhc2ljQmxvY2sqPiYgbGlua2luZ1Rhcmdl
dHMsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pCit7CisgICAgcmV0dXJuICpiaW5hcnlTZWFyY2g8
QmFzaWNCbG9jayosIHVuc2lnbmVkPihsaW5raW5nVGFyZ2V0cywgbGlua2luZ1RhcmdldHMuc2l6
ZSgpLCBieXRlY29kZUJlZ2luLCBnZXRCeXRlY29kZUJlZ2luRm9yQmxvY2spOworfQorCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDggKzE4Myw4IEBAIHByaXZhdGU6CiAg
ICAgLy8gUGFyc2UgYSBzaW5nbGUgYmFzaWMgYmxvY2sgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25z
LgogICAgIGJvb2wgcGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCk7CiAgICAgLy8gTGluayBibG9j
ayBzdWNjZXNzb3JzLgotICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8Qmxv
Y2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0cyk7Ci0gICAgdm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxV
bmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCbG9ja0luZGV4PiYgcG9zc2li
bGVUYXJnZXRzKTsKKyAgICB2b2lkIGxpbmtCbG9jayhCYXNpY0Jsb2NrKiwgVmVjdG9yPEJhc2lj
QmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKKyAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9yPFVu
bGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2li
bGVUYXJnZXRzKTsKICAgICAvLyBMaW5rIEdldExvY2FsICYgU2V0TG9jYWwgbm9kZXMsIHRvIGVu
c3VyZSBsaXZlIHZhbHVlcyBhcmUgZ2VuZXJhdGVkLgogICAgIGVudW0gUGhpU3RhY2tUeXBlIHsK
ICAgICAgICAgTG9jYWxQaGlTdGFjaywKQEAgLTEwMzksMTMgKzEwMzksMTMgQEAgcHJpdmF0ZToK
ICAgICAgICAgLy8gUG90ZW50aWFsIGJsb2NrIGxpbmtpbmcgdGFyZ2V0cy4gTXVzdCBiZSBzb3J0
ZWQgYnkgYnl0ZWNvZGVCZWdpbiwgYW5kCiAgICAgICAgIC8vIGNhbm5vdCBoYXZlIHR3byBibG9j
a3MgdGhhdCBoYXZlIHRoZSBzYW1lIGJ5dGVjb2RlQmVnaW4uIEZvciB0aGlzIHZlcnkKICAgICAg
ICAgLy8gcmVhc29uLCB0aGlzIGlzIG5vdCBlcXVpdmFsZW50IHRvIAotICAgICAgICBWZWN0b3I8
QmxvY2tJbmRleD4gbV9ibG9ja0xpbmtpbmdUYXJnZXRzOworICAgICAgICBWZWN0b3I8QmFzaWNC
bG9jayo+IG1fYmxvY2tMaW5raW5nVGFyZ2V0czsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHRo
ZSBjYWxsc2l0ZSdzIGJhc2ljIGJsb2NrIHdhcyBzcGxpdCBpbnRvIHR3bywgdGhlbiB0aGlzIHdp
bGwgYmUKICAgICAgICAgLy8gdGhlIGhlYWQgb2YgdGhlIGNhbGxzaXRlIGJsb2NrLiBJdCBuZWVk
cyBpdHMgc3VjY2Vzc29ycyBsaW5rZWQgdG8gdGhlCiAgICAgICAgIC8vIG1fdW5saW5rZWRCbG9j
a3MsIGJ1dCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQ6IHRoZXJlJ3Mgbm8gd2F5IGZvcgogICAg
ICAgICAvLyBhbnkgYmxvY2tzIGluIG1fdW5saW5rZWRCbG9ja3MgdG8ganVtcCBiYWNrIGludG8g
dGhpcyBibG9jay4KLSAgICAgICAgQmxvY2tJbmRleCBtX2NhbGxzaXRlQmxvY2tIZWFkOworICAg
ICAgICBCYXNpY0Jsb2NrKiBtX2NhbGxzaXRlQmxvY2tIZWFkOwogICAgICAgICAKICAgICAgICAg
Ly8gRG9lcyB0aGUgY2FsbHNpdGUgYmxvY2sgaGVhZCBuZWVkIGxpbmtpbmc/IFRoaXMgaXMgdHlw
aWNhbGx5IHRydWUKICAgICAgICAgLy8gYnV0IHdpbGwgYmUgZmFsc2UgZm9yIHRoZSBtYWNoaW5l
IGNvZGUgYmxvY2sncyBpbmxpbmUgc3RhY2sgZW50cnkKQEAgLTEwNzYsNyArMTA3Niw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBCeXRlQ29kZVBhcnNlciosCiAgICAgICAgICAgICBDb2RlQmxv
Y2sqLAogICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLAotICAgICAgICAgICAg
QmxvY2tJbmRleCBjYWxsc2l0ZUJsb2NrSGVhZCwKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGNh
bGxzaXRlQmxvY2tIZWFkLAogICAgICAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlLCAvLyBOdWxs
IGlmIHRoaXMgaXMgYSBjbG9zdXJlIGNhbGwuCiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmV0dXJuVmFsdWVWUiwKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBpbmxpbmVDYWxsRnJh
bWVTdGFydCwKQEAgLTEyOTUsMTQgKzEyOTUsMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW5saW5pbmcoTm9kZQogICAgIHVuc2lnbmVkIG5ld051bUxvY2FscyA9IGlubGluZUNhbGxG
cmFtZVN0YXJ0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGNvZGVCbG9jay0+bV9u
dW1DYWxsZWVSZWdpc3RlcnM7CiAgICAgaWYgKG5ld051bUxvY2FscyA+IG1fbnVtTG9jYWxzKSB7
CiAgICAgICAgIG1fbnVtTG9jYWxzID0gbmV3TnVtTG9jYWxzOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBt
X2dyYXBoLm1fYmxvY2tzW2ldLT5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2kpCisgICAgICAg
ICAgICBtX2dyYXBoLmJsb2NrKGkpLT5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKICAgICB9
CiAgICAgCiAgICAgc2l6ZV90IGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG1fZ3JhcGgubV9hcmd1
bWVudFBvc2l0aW9ucy5zaXplKCk7CiAKICAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNr
RW50cnkoCi0gICAgICAgIHRoaXMsIGNvZGVCbG9jaywgY29kZUJsb2NrLCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKSAtIDEsIGNhbGxMaW5rU3RhdHVzLmZ1bmN0aW9uKCksCisgICAgICAgIHRoaXMs
IGNvZGVCbG9jaywgY29kZUJsb2NrLCBtX2dyYXBoLmxhc3RCbG9jaygpLCBjYWxsTGlua1N0YXR1
cy5mdW5jdGlvbigpLAogICAgICAgICAoVmlydHVhbFJlZ2lzdGVyKW1faW5saW5lU3RhY2tUb3At
PnJlbWFwT3BlcmFuZChyZXN1bHRPcGVyYW5kKSwKICAgICAgICAgKFZpcnR1YWxSZWdpc3Rlcilp
bmxpbmVDYWxsRnJhbWVTdGFydCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQpOwog
ICAgIApAQCAtMTMyMSwxOSArMTMyMSwxOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bmxpbmluZyhOb2RlCiAgICAgbV9jdXJyZW50SW5kZXggPSBvbGRJbmRleDsKICAgICAKICAgICAv
LyBJZiB0aGUgaW5saW5lZCBjb2RlIGNyZWF0ZWQgc29tZSBuZXcgYmFzaWMgYmxvY2tzLCB0aGVu
IHdlIGhhdmUgbGlua2luZyB0byBkby4KLSAgICBpZiAoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxz
aXRlQmxvY2tIZWFkICE9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSkgeworICAgIGlmIChp
bmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWQgIT0gbV9ncmFwaC5sYXN0QmxvY2so
KSkgewogICAgICAgICAKICAgICAgICAgQVNTRVJUKCFpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5r
ZWRCbG9ja3MuaXNFbXB0eSgpKTsKICAgICAgICAgaWYgKGlubGluZVN0YWNrRW50cnkubV9jYWxs
c2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZykKLSAgICAgICAgICAgIGxpbmtCbG9jayhtX2dyYXBo
Lm1fYmxvY2tzW2lubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZF0uZ2V0KCksIGlu
bGluZVN0YWNrRW50cnkubV9ibG9ja0xpbmtpbmdUYXJnZXRzKTsKKyAgICAgICAgICAgIGxpbmtC
bG9jayhpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWQsIGlubGluZVN0YWNrRW50
cnkubV9ibG9ja0xpbmtpbmdUYXJnZXRzKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV9ibG9ja3NbaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFk
XS0+aXNMaW5rZWQpOworICAgICAgICAgICAgQVNTRVJUKGlubGluZVN0YWNrRW50cnkubV9jYWxs
c2l0ZUJsb2NrSGVhZC0+aXNMaW5rZWQpOwogICAgICAgICAKICAgICAgICAgLy8gSXQncyBwb3Nz
aWJsZSB0aGF0IHRoZSBjYWxsc2l0ZSBibG9jayBoZWFkIGlzIG5vdCBvd25lZCBieSB0aGUgY2Fs
bGVyLgogICAgICAgICBpZiAoIWlubGluZVN0YWNrRW50cnkubV9jYWxsZXItPm1fdW5saW5rZWRC
bG9ja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBJdCdzIGRlZmluaXRlbHkgb3duZWQg
YnkgdGhlIGNhbGxlciwgYmVjYXVzZSB0aGUgY2FsbGVyIGNyZWF0ZWQgbmV3IGJsb2Nrcy4KICAg
ICAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoaXMgYWxsIGFkZHMgdXAuCi0gICAgICAgICAgICBB
U1NFUlQoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCku
bV9ibG9ja0luZGV4ID09IGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCk7Cisg
ICAgICAgICAgICBBU1NFUlQoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxlci0+bV91bmxpbmtlZEJs
b2Nrcy5sYXN0KCkubV9ibG9jayA9PSBpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hl
YWQpOwogICAgICAgICAgICAgQVNTRVJUKGlubGluZVN0YWNrRW50cnkubV9jYWxsZXItPm1fdW5s
aW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNOb3JtYWxMaW5raW5nKTsKICAgICAgICAgICAgIGlu
bGluZVN0YWNrRW50cnkubV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNO
b3JtYWxMaW5raW5nID0gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMzQ4LDcgKzEzNDgs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgfSBlbHNl
CiAgICAgICAgIEFTU0VSVChpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0
eSgpKTsKICAgICAKLSAgICBCYXNpY0Jsb2NrKiBsYXN0QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tz
Lmxhc3QoKS5nZXQoKTsKKyAgICBCYXNpY0Jsb2NrKiBsYXN0QmxvY2sgPSBtX2dyYXBoLmxhc3RC
bG9jaygpOwogICAgIC8vIElmIHRoZXJlIHdhcyBhIHJldHVybiwgYnV0IG5vIGVhcmx5IHJldHVy
bnMsIHRoZW4gd2UncmUgZG9uZS4gV2UgYWxsb3cgcGFyc2luZyBvZgogICAgIC8vIHRoZSBjYWxs
ZXIgdG8gY29udGludWUgaW4gd2hhdGV2ZXIgYmFzaWMgYmxvY2sgd2UncmUgaW4gcmlnaHQgbm93
LgogICAgIGlmICghaW5saW5lU3RhY2tFbnRyeS5tX2RpZEVhcmx5UmV0dXJuICYmIGlubGluZVN0
YWNrRW50cnkubV9kaWRSZXR1cm4pIHsKQEAgLTEzNjQsMTEgKzEzNjQsMTEgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICAgICAgLy8gZm9yIHJlbGVh
c2UgYnVpbGRzIGJlY2F1c2UgdGhpcyBibG9jayB3aWxsIG5ldmVyIHNlcnZlIGFzIGEgcG90ZW50
aWFsIHRhcmdldAogICAgICAgICAgICAgLy8gaW4gdGhlIGxpbmtlcidzIGJpbmFyeSBzZWFyY2gu
CiAgICAgICAgICAgICBsYXN0QmxvY2stPmJ5dGVjb2RlQmVnaW4gPSBtX2N1cnJlbnRJbmRleDsK
LSAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tz
LmFwcGVuZChVbmxpbmtlZEJsb2NrKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSkpOworICAg
ICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3MuYXBw
ZW5kKFVubGlua2VkQmxvY2sobV9ncmFwaC5sYXN0QmxvY2soKSkpOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLmdl
dCgpOwotCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC5sYXN0QmxvY2soKTsKKyAg
ICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigi
RG9uZSBpbmxpbmluZyBleGVjdXRhYmxlICVwLCBjb250aW51aW5nIGNvZGUgZ2VuZXJhdGlvbiBh
dCBlcGlsb2d1ZS5cbiIsIGV4ZWN1dGFibGUpOwogI2VuZGlmCkBAIC0xMzc4LDMyICsxMzc4LDM1
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyBJZiB3
ZSBnZXQgdG8gdGhpcyBwb2ludCB0aGVuIGFsbCBibG9ja3MgbXVzdCBlbmQgaW4gc29tZSBzb3J0
IG9mIHRlcm1pbmFscy4KICAgICBBU1NFUlQobGFzdEJsb2NrLT5sYXN0KCktPmlzVGVybWluYWwo
KSk7CiAgICAgCisKKyAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBiYXNpYyBibG9jayBmb3Ig
dGhlIGNvbnRpbnVhdGlvbiBhdCB0aGUgY2FsbGVyLgorICAgIFJlZlB0cjxCYXNpY0Jsb2NrPiBi
bG9jayA9IGFkb3B0UmVmKG5ldyBCYXNpY0Jsb2NrKG5leHRPZmZzZXQsIG1fbnVtQXJndW1lbnRz
LCBtX251bUxvY2FscykpOworCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgIGRh
dGFMb2dGKCJDcmVhdGluZyBpbmxpbmUgZXBpbG9ndWUgYmFzaWMgYmxvY2sgJXAsICMlenUgZm9y
ICVwIGJjIyV1IGF0IGlubGluZSBkZXB0aCAldS5cbiIsIGJsb2NrLmdldCgpLCBtX2dyYXBoLm51
bUJsb2NrcygpLCBtX2lubGluZVN0YWNrVG9wLT5leGVjdXRhYmxlKCksIG1fY3VycmVudEluZGV4
LCBDb2RlT3JpZ2luOjppbmxpbmVEZXB0aEZvckNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUoKSkp
OworI2VuZGlmCisKICAgICAvLyBMaW5rIHRoZSBlYXJseSByZXR1cm5zIHRvIHRoZSBiYXNpYyBi
bG9jayB3ZSdyZSBhYm91dCB0byBjcmVhdGUuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
aWYgKCFpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9uZWVkc0Vhcmx5UmV0
dXJuTGlua2luZykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tz
W2ldLm1fYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVCghYmxvY2stPmlzTGlua2Vk
KTsKLSAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5sYXN0KCk7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrVG9MaW5rID0gaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzW2ldLm1f
YmxvY2s7CisgICAgICAgIEFTU0VSVCghYmxvY2tUb0xpbmstPmlzTGlua2VkKTsKKyAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrVG9MaW5rLT5sYXN0KCk7CiAgICAgICAgIEFTU0VSVChub2RlLT5v
cCgpID09IEp1bXApOwotICAgICAgICBBU1NFUlQobm9kZS0+dGFrZW5CbG9ja0luZGV4KCkgPT0g
Tm9CbG9jayk7Ci0gICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2tJbmRleChtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKSk7CisgICAgICAgIEFTU0VSVChub2RlLT50YWtlbkJsb2NrKCkgPT0gMCk7Cisg
ICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2soYmxvY2suZ2V0KCkpOwogICAgICAgICBpbmxpbmVT
dGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9uZWVkc0Vhcmx5UmV0dXJuTGlua2luZyA9
IGZhbHNlOwogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgYmxvY2stPmlzTGlua2VkID0g
dHJ1ZTsKKyAgICAgICAgYmxvY2tUb0xpbmstPmlzTGlua2VkID0gdHJ1ZTsKICNlbmRpZgogICAg
IH0KICAgICAKLSAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBiYXNpYyBibG9jayBmb3IgdGhl
IGNvbnRpbnVhdGlvbiBhdCB0aGUgY2FsbGVyLgotICAgIE93blB0cjxCYXNpY0Jsb2NrPiBibG9j
ayA9IGFkb3B0UHRyKG5ldyBCYXNpY0Jsb2NrKG5leHRPZmZzZXQsIG1fbnVtQXJndW1lbnRzLCBt
X251bUxvY2FscykpOwotI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBkYXRhTG9n
RigiQ3JlYXRpbmcgaW5saW5lIGVwaWxvZ3VlIGJhc2ljIGJsb2NrICVwLCAjJXp1IGZvciAlcCBi
YyMldSBhdCBpbmxpbmUgZGVwdGggJXUuXG4iLCBibG9jay5nZXQoKSwgbV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCksIG1faW5saW5lU3RhY2tUb3AtPmV4ZWN1dGFibGUoKSwgbV9jdXJyZW50SW5kZXgs
IENvZGVPcmlnaW46OmlubGluZURlcHRoRm9yQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSgpKSk7
Ci0jZW5kaWYKICAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrLmdldCgpOwotICAgIEFTU0VSVCht
X2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlzRW1wdHko
KSB8fCBtX2dyYXBoLm1fYmxvY2tzW21faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX2Jsb2Nr
TGlua2luZ1RhcmdldHMubGFzdCgpXS0+Ynl0ZWNvZGVCZWdpbiA8IG5leHRPZmZzZXQpOwotICAg
IG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmFwcGVuZChVbmxp
bmtlZEJsb2NrKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKSk7Ci0gICAgbV9pbmxpbmVTdGFja1Rv
cC0+bV9jYWxsZXItPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5hcHBlbmQobV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCkpOwotICAgIG1fZ3JhcGgubV9ibG9ja3MuYXBwZW5kKGJsb2NrLnJlbGVhc2UoKSk7
CisgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX2Jsb2NrTGlua2luZ1Rh
cmdldHMuaXNFbXB0eSgpIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX2Jsb2NrTGlu
a2luZ1RhcmdldHMubGFzdCgpLT5ieXRlY29kZUJlZ2luIDwgbmV4dE9mZnNldCk7CisgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3MuYXBwZW5kKFVubGlua2Vk
QmxvY2soYmxvY2suZ2V0KCkpKTsKKyAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9i
bG9ja0xpbmtpbmdUYXJnZXRzLmFwcGVuZChibG9jay5nZXQoKSk7CisgICAgbV9ncmFwaC5hcHBl
bmRCbG9jayhibG9jayk7CiAgICAgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgIAogICAgIC8v
IEF0IHRoaXMgcG9pbnQgd2UgcmV0dXJuIGFuZCBjb250aW51ZSB0byBnZW5lcmF0ZSBjb2RlIGZv
ciB0aGUgY2FsbGVyLCBidXQKQEAgLTE3NTMsNyArMTc1Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAvLyBJZiB3ZSBhcmUgdGhlIGZpcnN0IGJhc2lj
IGJsb2NrLCBpbnRyb2R1Y2UgbWFya2VycyBmb3IgYXJndW1lbnRzLiBUaGlzIGFsbG93cwogICAg
IC8vIHVzIHRvIHRyYWNrIGlmIGEgdXNlIG9mIGFuIGFyZ3VtZW50IG1heSB1c2UgdGhlIGFjdHVh
bCBhcmd1bWVudCBwYXNzZWQsIGFzCiAgICAgLy8gb3Bwb3NlZCB0byB1c2luZyBhIHZhbHVlIHdl
IHNldCBleHBsaWNpdGx5LgotICAgIGlmIChtX2N1cnJlbnRCbG9jayA9PSBtX2dyYXBoLm1fYmxv
Y2tzWzBdLmdldCgpICYmICFpbmxpbmVDYWxsRnJhbWUoKSkgeworICAgIGlmIChtX2N1cnJlbnRC
bG9jayA9PSBtX2dyYXBoLmJsb2NrKDApICYmICFpbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAg
ICBtX2dyYXBoLm1fYXJndW1lbnRzLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyArK2Fy
Z3VtZW50KSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbmV3
VmFyaWFibGVBY2Nlc3NEYXRhKApAQCAtMjc2NSwxNSArMjc2OCwxNSBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBTd2l0Y2hEYXRhIGRhdGE7
CiAgICAgICAgICAgICBkYXRhLmtpbmQgPSBTd2l0Y2hJbW07CiAgICAgICAgICAgICBkYXRhLnN3
aXRjaFRhYmxlSW5kZXggPSBtX2lubGluZVN0YWNrVG9wLT5tX3N3aXRjaFJlbWFwW2N1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmRdOwotICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaCA9
IG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIGRhdGEuc2V0RmFsbFRocm91Z2hCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4ICsg
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBTaW1wbGVKdW1w
VGFibGUmIHRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRh
YmxlSW5kZXgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlLmJy
YW5jaE9mZnNldHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoIXRhYmxlLmJy
YW5jaE9mZnNldHNbaV0pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fY3VycmVudEluZGV4ICsgdGFibGUuYnJhbmNoT2Zm
c2V0c1tpXTsKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRocm91Z2gp
CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoQnl0ZWNvZGVJ
bmRleCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBk
YXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKGpzTnVtYmVyKHRhYmxlLm1pbiArIGkpLCB0YXJn
ZXQpKTsKKyAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlOjp3aXRo
Qnl0ZWNvZGVJbmRleChqc051bWJlcih0YWJsZS5taW4gKyBpKSwgdGFyZ2V0KSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBtX2dyYXBoLm1fc3dpdGNoRGF0YS5hcHBlbmQoZGF0YSk7CiAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZtX2dyYXBoLm1fc3dpdGNoRGF0
YS5sYXN0KCkpLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwpAQCAtMjc4
NCwxNiArMjc4NywxNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICBTd2l0Y2hEYXRhIGRhdGE7CiAgICAgICAgICAgICBkYXRhLmtpbmQgPSBT
d2l0Y2hDaGFyOwogICAgICAgICAgICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0gbV9pbmxpbmVT
dGFja1RvcC0+bV9zd2l0Y2hSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kXTsK
LSAgICAgICAgICAgIGRhdGEuZmFsbFRocm91Z2ggPSBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBkYXRhLnNldEZhbGxUaHJvdWdo
Qnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOwogICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9IG1fY29kZUJsb2Nr
LT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS5icmFuY2hPZmZzZXRzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKCF0YWJsZS5icmFuY2hPZmZzZXRzW2ldKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBt
X2N1cnJlbnRJbmRleCArIHRhYmxlLmJyYW5jaE9mZnNldHNbaV07Ci0gICAgICAgICAgICAgICAg
aWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoKQorICAgICAgICAgICAgICAgIGlmICh0YXJn
ZXQgPT0gZGF0YS5mYWxsVGhyb3VnaEJ5dGVjb2RlSW5kZXgoKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoCi0gICAgICAg
ICAgICAgICAgICAgIFN3aXRjaENhc2UoTGF6eUpTVmFsdWU6OnNpbmdsZUNoYXJhY3RlclN0cmlu
Zyh0YWJsZS5taW4gKyBpKSwgdGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgICAgIFN3aXRjaENh
c2U6OndpdGhCeXRlY29kZUluZGV4KExhenlKU1ZhbHVlOjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmco
dGFibGUubWluICsgaSksIHRhcmdldCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9n
cmFwaC5tX3N3aXRjaERhdGEuYXBwZW5kKGRhdGEpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChT
d2l0Y2gsIE9wSW5mbygmbV9ncmFwaC5tX3N3aXRjaERhdGEubGFzdCgpKSwgZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKQEAgLTI4MDQsMTYgKzI4MDcsMTYgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgU3dpdGNoRGF0
YSBkYXRhOwogICAgICAgICAgICAgZGF0YS5raW5kID0gU3dpdGNoU3RyaW5nOwogICAgICAgICAg
ICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGRhdGEuZmFsbFRocm91Z2ggPSBtX2N1cnJlbnRJbmRleCArIGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBkYXRhLnNldEZhbGxUaHJv
dWdoQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOwogICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiB0YWJsZSA9IG1fY29kZUJs
b2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKICAgICAg
ICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGl0ZXI7
CiAgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRv
ciBlbmQgPSB0YWJsZS5vZmZzZXRUYWJsZS5lbmQoKTsKICAgICAgICAgICAgIGZvciAoaXRlciA9
IHRhYmxlLm9mZnNldFRhYmxlLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBtX2N1cnJlbnRJbmRleCArIGl0ZXItPnZhbHVl
LmJyYW5jaE9mZnNldDsKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRo
cm91Z2gpCisgICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoQnl0
ZWNvZGVJbmRleCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICBkYXRhLmNhc2VzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgU3dpdGNoQ2FzZShM
YXp5SlNWYWx1ZTo6a25vd25TdHJpbmdJbXBsKGl0ZXItPmtleS5nZXQoKSksIHRhcmdldCkpOwor
ICAgICAgICAgICAgICAgICAgICBTd2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJbmRleChMYXp5SlNW
YWx1ZTo6a25vd25TdHJpbmdJbXBsKGl0ZXItPmtleS5nZXQoKSksIHRhcmdldCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgbV9ncmFwaC5tX3N3aXRjaERhdGEuYXBwZW5kKGRhdGEpOwog
ICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmbV9ncmFwaC5tX3N3aXRjaERh
dGEubGFzdCgpKSwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKQEAgLTI4
MjgsMTMgKzI4MzEsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZGlkUmV0dXJuID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgcmV0dXJuaW5nIGZy
b20gdGhlIGZpcnN0IGJsb2NrLCB0aGVuIHdlJ3JlIGRvbmUgcGFyc2luZy4KLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbHNpdGVCbG9ja0hlYWQgPT0g
bV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbHNpdGVCbG9ja0hlYWQgPT0gbV9ncmFwaC5sYXN0Qmxv
Y2soKSk7CiAgICAgICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlUGFyc2luZyA9IGZhbHNl
OwogICAgICAgICAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIGlubGluaW5nIGNyZWF0ZWQg
YmxvY2tzLCBhbmQgd2UncmUgZG9pbmcgYSByZXR1cm4sIHRoZW4gd2UgbmVlZCBzb21lCiAgICAg
ICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgbGlua2luZy4KLSAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2tJ
bmRleCA9PSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEpOworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9j
ayA9PSBtX2dyYXBoLmxhc3RCbG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9uZWVkc05vcm1hbExpbmtpbmcgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudElu
ZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9yZXQpICE9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9kaWRFYXJs
eVJldHVybikgewpAQCAtMzE2Miw3ICszMTY1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgIH0KIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Js
b2NrKEJhc2ljQmxvY2sqIGJsb2NrLCBWZWN0b3I8QmxvY2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0
cykKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayhCYXNpY0Jsb2NrKiBibG9jaywgVmVj
dG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKQogewogICAgIEFTU0VSVCghYmxvY2st
PmlzTGlua2VkKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0VtcHR5KCkpOwpAQCAtMzE3MSwyNCAr
MzE3NCwyNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jCiAgICAg
CiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKdW1wOgotICAgICAgICBub2Rl
LT5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQo
cG9zc2libGVUYXJnZXRzLCBub2RlLT50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygp
KSk7CisgICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2soYmxvY2tGb3JCeXRlY29kZU9mZnNldChw
b3NzaWJsZVRhcmdldHMsIG5vZGUtPnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkp
KTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCJMaW5r
ZWQgYmFzaWMgYmxvY2sgJXAgdG8gJXAsICMldS5cbiIsIGJsb2NrLCBtX2dyYXBoLm1fYmxvY2tz
W25vZGUtPnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSwgbm9kZS0+dGFrZW5CbG9ja0luZGV4KCkp
OworICAgICAgICBkYXRhTG9nRigiTGlua2VkIGJhc2ljIGJsb2NrICVwIHRvICVwLCAjJXUuXG4i
LCBibG9jaywgbm9kZS0+dGFrZW5CbG9jaygpLCBub2RlLT50YWtlbkJsb2NrKCktPmluZGV4KTsK
ICNlbmRpZgogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBCcmFuY2g6Ci0gICAg
ICAgIG5vZGUtPnNldFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRlY29k
ZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQ
YXJzaW5nKCkpKTsKLSAgICAgICAgbm9kZS0+c2V0Tm90VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGgu
YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+bm90VGFr
ZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOworICAgICAgICBub2RlLT5zZXRUYWtl
bkJsb2NrKGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT50YWtl
bkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CisgICAgICAgIG5vZGUtPnNldE5vdFRh
a2VuQmxvY2soYmxvY2tGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPm5v
dFRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKICNpZiBERkdfRU5BQkxFKERF
QlVHX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCJMaW5rZWQgYmFzaWMgYmxvY2sgJXAgdG8g
JXAsICMldSBhbmQgJXAsICMldS5cbiIsIGJsb2NrLCBtX2dyYXBoLm1fYmxvY2tzW25vZGUtPnRh
a2VuQmxvY2tJbmRleCgpXS5nZXQoKSwgbm9kZS0+dGFrZW5CbG9ja0luZGV4KCksIG1fZ3JhcGgu
bV9ibG9ja3Nbbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCldLmdldCgpLCBub2RlLT5ub3RUYWtl
bkJsb2NrSW5kZXgoKSk7CisgICAgICAgIGRhdGFMb2dGKCJMaW5rZWQgYmFzaWMgYmxvY2sgJXAg
dG8gJXAsICMldSBhbmQgJXAsICMldS5cbiIsIGJsb2NrLCBub2RlLT50YWtlbkJsb2NrKCksIG5v
ZGUtPnRha2VuQmxvY2soKS0+aW5kZXgsIG5vZGUtPm5vdFRha2VuQmxvY2soKSwgbm9kZS0+bm90
VGFrZW5CbG9jaygpLT5pbmRleCk7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAog
ICAgIGNhc2UgU3dpdGNoOgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5zd2l0Y2hE
YXRhKCktPmNhc2VzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgIG5vZGUtPnN3aXRjaERhdGEo
KS0+Y2FzZXNbaV0udGFyZ2V0ID0gbV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQo
cG9zc2libGVUYXJnZXRzLCBub2RlLT5zd2l0Y2hEYXRhKCktPmNhc2VzW2ldLnRhcmdldCk7Ci0g
ICAgICAgIG5vZGUtPnN3aXRjaERhdGEoKS0+ZmFsbFRocm91Z2ggPSBtX2dyYXBoLmJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnN3aXRjaERhdGEoKS0+
ZmFsbFRocm91Z2gpOworICAgICAgICAgICAgbm9kZS0+c3dpdGNoRGF0YSgpLT5jYXNlc1tpXS50
YXJnZXQgPSBibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+c3dp
dGNoRGF0YSgpLT5jYXNlc1tpXS50YXJnZXRCeXRlY29kZUluZGV4KCkpOworICAgICAgICBub2Rl
LT5zd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoID0gYmxvY2tGb3JCeXRlY29kZU9mZnNldChwb3Nz
aWJsZVRhcmdldHMsIG5vZGUtPnN3aXRjaERhdGEoKS0+ZmFsbFRocm91Z2hCeXRlY29kZUluZGV4
KCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKQEAgLTMyMDMsMTEg
KzMyMDYsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKEJhc2ljQmxvYwogI2Vu
ZGlmCiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9ja3MoVmVjdG9yPFVubGlua2Vk
QmxvY2s+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJsb2NrSW5kZXg+JiBwb3NzaWJsZVRhcmdl
dHMpCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJsb2Nr
PiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cykK
IHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVubGlua2VkQmxvY2tzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIGlmICh1bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzTm9ybWFsTGlua2luZykg
ewotICAgICAgICAgICAgbGlua0Jsb2NrKG1fZ3JhcGgubV9ibG9ja3NbdW5saW5rZWRCbG9ja3Nb
aV0ubV9ibG9ja0luZGV4XS5nZXQoKSwgcG9zc2libGVUYXJnZXRzKTsKKyAgICAgICAgICAgIGxp
bmtCbG9jayh1bmxpbmtlZEJsb2Nrc1tpXS5tX2Jsb2NrLCBwb3NzaWJsZVRhcmdldHMpOwogICAg
ICAgICAgICAgdW5saW5rZWRCbG9ja3NbaV0ubV9uZWVkc05vcm1hbExpbmtpbmcgPSBmYWxzZTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTMyMzUsNyArMzIzOCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJ
bmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICBCeXRlQ29kZVBhcnNlciogYnl0ZUNvZGVQYXJz
ZXIsCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssCiAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLAotICAgIEJsb2NrSW5kZXggY2FsbHNpdGVCbG9ja0hlYWQsCisgICAgQmFzaWNCbG9jayog
Y2FsbHNpdGVCbG9ja0hlYWQsCiAgICAgSlNGdW5jdGlvbiogY2FsbGVlLCAvLyBOdWxsIGlmIHRo
aXMgaXMgYSBjbG9zdXJlIGNhbGwuCiAgICAgVmlydHVhbFJlZ2lzdGVyIHJldHVyblZhbHVlVlIs
CiAgICAgVmlydHVhbFJlZ2lzdGVyIGlubGluZUNhbGxGcmFtZVN0YXJ0LApAQCAtMzI3Myw3ICsz
Mjc2LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAg
ICAvLyBJbmxpbmUgY2FzZS4KICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayAhPSBieXRlQ29kZVBh
cnNlci0+bV9jb2RlQmxvY2spOwogICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lU3RhcnQg
IT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIEFTU0VSVChjYWxsc2l0ZUJsb2Nr
SGVhZCAhPSBOb0Jsb2NrKTsKKyAgICAgICAgQVNTRVJUKGNhbGxzaXRlQmxvY2tIZWFkKTsKICAg
ICAgICAgCiAgICAgICAgIElubGluZUNhbGxGcmFtZSBpbmxpbmVDYWxsRnJhbWU7CiAgICAgICAg
IGlubGluZUNhbGxGcmFtZS5leGVjdXRhYmxlLnNldCgqYnl0ZUNvZGVQYXJzZXItPm1fdm0sIGJ5
dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCkpOwpAQCAtMzM2OCw3ICszMzcxLDcgQEAgQnl0ZUNvZGVQYXJzZXI6
OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICBBU1NFUlQoIWNhbGxlZSk7CiAgICAg
ICAgIEFTU0VSVChyZXR1cm5WYWx1ZVZSID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOwogICAg
ICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lU3RhcnQgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rl
cik7Ci0gICAgICAgIEFTU0VSVChjYWxsc2l0ZUJsb2NrSGVhZCA9PSBOb0Jsb2NrKTsKKyAgICAg
ICAgQVNTRVJUKCFjYWxsc2l0ZUJsb2NrSGVhZCk7CiAKICAgICAgICAgbV9pbmxpbmVDYWxsRnJh
bWUgPSAwOwogCkBAIC0zNDQ2LDI3ICszNDQ5LDI3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQ29kZUJsb2NrKCkKICAgICAgICAgZG8gewogICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRC
bG9jaykgewogICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiB1c2UgdGhlIGxhc3Qg
YmxvY2suCi0gICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLm1fYmxvY2tzLmlzRW1wdHkoKSAm
JiBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS0+aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubnVtQmxvY2tzKCkgJiYgbV9ncmFwaC5sYXN0QmxvY2soKS0+aXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBiZSBhIGJsb2NrIGJlbG9uZ2lu
ZyB0byB1cy4KLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1f
dW5saW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2tJbmRleCA9PSBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKSAtIDEpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+
bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9jayA9PSBtX2dyYXBoLmxhc3RCbG9jaygpKTsK
ICAgICAgICAgICAgICAgICAgICAgLy8gRWl0aGVyIHRoZSBibG9jayBpcyBsaW5rYWJsZSBvciBp
dCBpc24ndC4gSWYgaXQncyBsaW5rYWJsZSB0aGVuIGl0J3MgdGhlIGxhc3QKICAgICAgICAgICAg
ICAgICAgICAgLy8gYmxvY2sgaW4gdGhlIGJsb2NrTGlua2luZ1RhcmdldHMgbGlzdC4gSWYgaXQn
cyBub3QgdGhlbiB0aGUgbGFzdCBibG9jayB3aWxsCiAgICAgICAgICAgICAgICAgICAgIC8vIGhh
dmUgYSBsb3dlciBieXRlY29kZSBpbmRleCB0aGF0IHRoZSBvbmUgd2UncmUgYWJvdXQgdG8gZ2l2
ZSB0byB0aGlzIGJsb2NrLgotICAgICAgICAgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1Rv
cC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlzRW1wdHkoKSB8fCBtX2dyYXBoLm1fYmxvY2tzW21f
aW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCldLT5ieXRlY29kZUJl
Z2luICE9IG1fY3VycmVudEluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2lubGlu
ZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuaXNFbXB0eSgpIHx8IG1faW5saW5lU3Rh
Y2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCktPmJ5dGVjb2RlQmVnaW4gIT0gbV9j
dXJyZW50SW5kZXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2UgdGhlIGJsb2Nr
IGxpbmthYmxlLgotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tU
b3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5pc0VtcHR5KCkgfHwgbV9ncmFwaC5tX2Jsb2Nrc1tt
X2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMubGFzdCgpXS0+Ynl0ZWNvZGVC
ZWdpbiA8IG1fY3VycmVudEluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5hcHBlbmQobV9ncmFwaC5tX2Jsb2Nrcy5z
aXplKCkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNr
VG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuaXNFbXB0eSgpIHx8IG1faW5saW5lU3RhY2tUb3At
Pm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCktPmJ5dGVjb2RlQmVnaW4gPCBtX2N1cnJlbnRJ
bmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2Nr
TGlua2luZ1RhcmdldHMuYXBwZW5kKG1fZ3JhcGgubGFzdEJsb2NrKCkpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIC8vIENoYW5nZSBpdHMgYnl0ZWNvZGUgYmVn
aW4gYW5kIGNvbnRpbnVlLgotICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1f
Z3JhcGgubV9ibG9ja3MubGFzdCgpLmdldCgpOworICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jayA9IG1fZ3JhcGgubGFzdEJsb2NrKCk7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJC
T1NFKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiUmVhc2NyaWJpbmcgYnl0ZWNvZGUg
aW5kZXggb2YgYmxvY2sgJXAgZnJvbSBiYyMldSB0byBiYyMldSAocGVlcGhvbGUgY2FzZSkuXG4i
LCBtX2N1cnJlbnRCbG9jaywgbV9jdXJyZW50QmxvY2stPmJ5dGVjb2RlQmVnaW4sIG1fY3VycmVu
dEluZGV4KTsKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+Ynl0
ZWNvZGVCZWdpbiA9IG1fY3VycmVudEluZGV4OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIE93blB0cjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UHRyKG5l
dyBCYXNpY0Jsb2NrKG1fY3VycmVudEluZGV4LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMp
KTsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRS
ZWYobmV3IEJhc2ljQmxvY2sobV9jdXJyZW50SW5kZXgsIG1fbnVtQXJndW1lbnRzLCBtX251bUxv
Y2FscykpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIkNyZWF0aW5nIGJhc2ljIGJsb2NrICVwLCAjJXp1IGZvciAlcCBiYyMldSBh
dCBpbmxpbmUgZGVwdGggJXUuXG4iLCBibG9jay5nZXQoKSwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCksIG1faW5saW5lU3RhY2tUb3AtPmV4ZWN1dGFibGUoKSwgbV9jdXJyZW50SW5kZXgsIENvZGVP
cmlnaW46OmlubGluZURlcHRoRm9yQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSgpKSk7CisgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDcmVhdGluZyBiYXNpYyBibG9jayAlcCwgIyV6dSBm
b3IgJXAgYmMjJXUgYXQgaW5saW5lIGRlcHRoICV1LlxuIiwgYmxvY2suZ2V0KCksIG1fZ3JhcGgu
bnVtQmxvY2tzKCksIG1faW5saW5lU3RhY2tUb3AtPmV4ZWN1dGFibGUoKSwgbV9jdXJyZW50SW5k
ZXgsIENvZGVPcmlnaW46OmlubGluZURlcHRoRm9yQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSgp
KSk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jay5n
ZXQoKTsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhc3NlcnRpb24gY2hlY2tzIHR3byB0
aGluZ3M6CkBAIC0zNDc1LDEzICszNDc4LDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
Q29kZUJsb2NrKCkKICAgICAgICAgICAgICAgICAgICAgLy8gMikgSWYgdGhlIGJ5dGVjb2RlQmVn
aW4gaXMgZXF1YWwgdG8gdGhlIGN1cnJlbnRJbmRleCwgdGhlbiB3ZSBmYWlsZWQgdG8gZG8KICAg
ICAgICAgICAgICAgICAgICAgLy8gICAgYSBwZWVwaG9sZSBjb2FsZXNjaW5nIG9mIHRoaXMgYmxv
Y2sgaW4gdGhlIGlmIHN0YXRlbWVudCBhYm92ZS4gU28sIHdlJ3JlCiAgICAgICAgICAgICAgICAg
ICAgIC8vICAgIGdlbmVyYXRpbmcgc3Vib3B0aW1hbCBjb2RlIGFuZCBsZWF2aW5nIG1vcmUgd29y
ayBmb3IgdGhlIENGRyBzaW1wbGlmaWVyLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9p
bmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkgfHwgbV9ncmFwaC5tX2Js
b2Nrc1ttX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrSW5k
ZXhdLT5ieXRlY29kZUJlZ2luIDwgbV9jdXJyZW50SW5kZXgpOwotICAgICAgICAgICAgICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmFwcGVuZChVbmxpbmtlZEJsb2Nr
KG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5hcHBlbmQobV9ncmFwaC5tX2Jsb2Nrcy5z
aXplKCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV91
bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJs
b2Nrcy5sYXN0KCkubV9ibG9jay0+Ynl0ZWNvZGVCZWdpbiA8IG1fY3VycmVudEluZGV4KTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5hcHBl
bmQoVW5saW5rZWRCbG9jayhibG9jay5nZXQoKSkpOworICAgICAgICAgICAgICAgICAgICBtX2lu
bGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuYXBwZW5kKGJsb2NrLmdldCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGZpcnN0IGJsb2NrIGlzIGRlZmluaXRlbHkgYW4g
T1NSIHRhcmdldC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLm51bUJsb2NrcygpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmlzT1NSVGFyZ2V0ID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrcy5hcHBlbmQoYmxvY2sucmVsZWFzZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmRCbG9jayhibG9jayk7CiAgICAgICAgICAg
ICAgICAgICAgIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC0zNTIwLDcgKzM1MjMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZSgpCiAjZW5kaWYKICAgICAKICAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNrRW50cnko
Ci0gICAgICAgIHRoaXMsIG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVkQmxvY2ssIE5vQmxvY2ssIDAs
IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIsIEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAg
IHRoaXMsIG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVkQmxvY2ssIDAsIDAsIEludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIsIEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG1fY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCksIENvZGVGb3JDYWxsKTsKICAgICAKICAgICBwYXJzZUNvZGVCbG9jaygp
OwpAQCAtMzU0MCwxMSArMzU0MywxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewot
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0u
Z2V0KCk7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwg
bV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgQVNTRVJUKGJsb2Nr
KTsKICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpIHsKLSAgICAgICAgICAgIG1fZ3Jh
cGgubV9ibG9ja3NbYmxvY2tJbmRleF0uY2xlYXIoKTsKKyAgICAgICAgICAgIG1fZ3JhcGgua2ls
bEJsb2NrKGJsb2NrKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHJldmlz
aW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03OSwxNSArNzksMTQgQEAgcHVibGljOgogICAgIH0KICAgICAK
IHByaXZhdGU6Ci0gICAgdm9pZCBwZXJmb3JtQmxvY2tDRkEoQmxvY2tJbmRleCBibG9ja0luZGV4
KQorICAgIHZvaWQgcGVyZm9ybUJsb2NrQ0ZBKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdl
dCgpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBp
ZiAoIWJsb2NrLT5jZmFTaG91bGRSZXZpc2l0KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICBCbG9jayAjJXUgKGJjIyV1
KTpcbiIsIGJsb2NrSW5kZXgsIGJsb2NrLT5ieXRlY29kZUJlZ2luKTsKKyAgICAgICAgICAgIGRh
dGFMb2coIiAgIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICBtX3N0YXRlLmJlZ2lu
QmFzaWNCbG9jayhibG9jayk7CiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBk
YXRhTG9nRigiICAgICAgaGVhZCB2YXJzOiAiKTsKQEAgLTEyNyw4ICsxMjYsOCBAQCBwcml2YXRl
OgogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2dGKCJDRkEgWyV1XVxu
IiwgKyttX2NvdW50KTsKICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9jayA9
IDA7IGJsb2NrIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2spCi0gICAgICAgICAg
ICBwZXJmb3JtQmxvY2tDRkEoYmxvY2spOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgp
CisgICAgICAgICAgICBwZXJmb3JtQmxvY2tDRkEobV9ncmFwaC5ibG9jayhibG9ja0luZGV4KSk7
CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
RkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTIzMzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw4ICs1NCw4IEBAIHB1YmxpYzoKICAgICAgICAgCiAg
ICAgICAgIGRvIHsKICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5t
X2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgICAgICBpZiAo
IWJsb2NrKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBB
U1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKQEAgLTYzLDI3ICs2MywyNCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgc3dpdGNoIChibG9jay0+bGFzdCgpLT5vcCgpKSB7CiAgICAgICAgICAg
ICAgICAgY2FzZSBKdW1wOiB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3NvciB3aXRo
IG9uZSBwcmVkZWNlc3NvciAtPiBtZXJnZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApXS0+bV9wcmVkZWNlc3NvcnMu
c2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1f
YmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKV0tPm1fcHJlZGVjZXNzb3JzWzBdCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gYmxvY2tJbmRleCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChibG9jay0+c3VjY2Vzc29yKDApLT5wcmVkZWNlc3NvcnMuc2l6ZSgpID09
IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+c3VjY2Vzc29yKDAp
LT5wcmVkZWNlc3NvcnNbMF0gPT0gYmxvY2spOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDRkdTaW1w
bGlmeTogSnVtcCBtZXJnZSBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1LlxuIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxv
Y2ssIDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNGR1NpbXBsaWZ5OiBK
dW1wIG1lcmdlIG9uIEJsb2NrICIsICpibG9jaywgIiB0byBCbG9jayAiLCAqYmxvY2stPnN1Y2Nl
c3NvcigwKSwgIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0
cmVtZUxvZ2dpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3Nvcihi
bG9jaywgMCksIG5vQmxvY2tzKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9j
a3MoYmxvY2ssIGJsb2NrLT5zdWNjZXNzb3IoMCksIG5vQmxvY2tzKCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5uZXJDaGFuZ2VkID0gb3V0ZXJDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogI2lm
IERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2dGKCJOb3QganVtcCBtZXJnaW5nIG9uIEJsb2NrICMldSB0byBCbG9jayAj
JXUgYmVjYXVzZSBwcmVkZWNlc3NvcnMgPSAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV9ibG9ja3Nb
bV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApXS0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNGR1NpbXBsaWZ5OiBOb3QganVt
cCBtZXJnaW5nIG9uIEJsb2NrICIsICpibG9jaywgIiB0byBCbG9jayAiLCAqYmxvY2stPnN1Y2Nl
c3NvcigwKSwgIiBiZWNhdXNlIHByZWRlY2Vzc29ycyA9ICIsKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c3VjY2Vzc29yKDApLT5wcmVk
ZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiwgIik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiMldSIsIG1fZ3JhcGgubV9ibG9ja3Nb
bV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApXS0+bV9wcmVkZWNlc3NvcnNbaV0pOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coKmJsb2NrLT5zdWNjZXNzb3IoMCktPnByZWRl
Y2Vzc29yc1tpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nRigiLlxuIik7CiAjZW5kaWYKQEAgLTEwMyw1MiArMTAwLDQ3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gQnJhbmNoIG9uIGNvbnN0YW50IC0+IGpldHRp
c29uIHRoZSBub3QtdGFrZW4gYmxvY2sgYW5kIG1lcmdlLgogICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNLbm93bkRpcmVjdGlvbihibG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjb25kaXRpb24gPSBicmFuY2hDb25kaXRpb24oYmxvY2st
PmNmYUJyYW5jaERpcmVjdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiB0YXJnZXRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbildLmdl
dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldEJsb2NrLT5tX3ByZWRlY2Vz
c29ycy5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
dGFyZ2V0QmxvY2sgPSBibG9jay0+c3VjY2Vzc29yRm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2sgPSBibG9j
ay0+c3VjY2Vzc29yRm9yQ29uZGl0aW9uKCFjb25kaXRpb24pOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRhcmdldEJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIkNGR1NpbXBsaWZ5OiBLbm93biBjb25kaXRpb24gKCVzKSBicmFu
Y2ggbWVyZ2Ugb24gQmxvY2sgIyV1IHRvIEJsb2NrICMldSwgamV0dGlzb25pbmcgQmxvY2sgIyV1
LlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA/ICJ0
cnVlIiA6ICJmYWxzZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9j
a0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgY29uZGl0aW9uKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9y
Q29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNGR1NpbXBsaWZ5
OiBLbm93biBjb25kaXRpb24gKCIsIGNvbmRpdGlvbiwgIikgYnJhbmNoIG1lcmdlICIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbiBCbG9jayAiLCAqYmxvY2ssICIgdG8gQmxv
Y2sgIiwgKnRhcmdldEJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBq
ZXR0aXNvbmluZyBCbG9jayAiLCAqamV0dGlzb25lZEJsb2NrLCAiLlxuIik7CiAjZW5kaWYKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmVtZUxvZ2dpbmcpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtZXJnZUJsb2NrcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRl
eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWNjZXNzb3JGb3JD
b25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9uZUJsb2NrKG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0
aW9uKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlQmxvY2tzKGJsb2NrLCB0
YXJnZXRCbG9jaywgb25lQmxvY2soamV0dGlzb25lZEJsb2NrKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ0ZHU2ltcGxpZnk6IEtu
b3duIGNvbmRpdGlvbiAoJXMpIGJyYW5jaC0+anVtcCBjb252ZXJzaW9uIG9uIEJsb2NrICMldSB0
byBCbG9jayAjJXUsIGpldHRpc29uaW5nIEJsb2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPyAidHJ1ZSIgOiAiZmFsc2UiLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNz
b3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgIWNvbmRp
dGlvbikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJDRkdTaW1wbGlmeTogS25vd24gY29uZGl0aW9uICgiLCBj
b25kaXRpb24sICIpICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJicmFuY2gt
Pmp1bXAgY29udmVyc2lvbiBvbiBCbG9jayAiLCAqYmxvY2ssICIgdG8gQmxvY2sgIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QmxvY2ssICIsIGpldHRpc29uaW5nIEJs
b2NrICIsIGpldHRpc29uZWRCbG9jaywgIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLmRldGhyZWFkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0
YWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgY29u
ZGl0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IG5vdFRha2Vu
QmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0
aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChibG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luID0gYmxvY2stPmxhc3Qo
KS0+Y29kZU9yaWdpbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+bGFzdCgp
LT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGJsb2NrLT5sYXN0KCktPnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2NrKGJsb2NrSW5kZXgs
IG5vdFRha2VuQmxvY2tJbmRleCwgYm91bmRhcnlDb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqZXR0aXNvbkJsb2NrKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2ssIGJvdW5k
YXJ5Q29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIGJvdW5kYXJ5Q29kZU9yaWdpbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRha2VuQmxvY2tJbmRleCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odGFyZ2V0QmxvY2spKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hh
bmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKSA9PSBtX2dyYXBoLnN1
Y2Nlc3NvcihibG9jaywgMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0p1
bXAoYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGJsb2NrLT5zdWNjZXNzb3IoMCkgPT0gYmxvY2stPnN1Y2Nlc3NvcigxKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvSnVtcChibG9jaywgYmxvY2stPnN1
Y2Nlc3NvcigwKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckNoYW5nZWQgPSBvdXRl
ckNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTE3Nyw3ICsxNjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBjYXNlcyBvdGhlciB0aGFuIGRlZmF1bHQgdGhlbiB0
aGlzIHR1cm5zCiAgICAgICAgICAgICAgICAgICAgIC8vIGludG8gYSBqdW1wLgogICAgICAgICAg
ICAgICAgICAgICBpZiAoZGF0YS0+Y2FzZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb252ZXJ0VG9KdW1wKGJsb2NrSW5kZXgsIGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0p1bXAoYmxvY2ssIGRhdGEtPmZhbGxUaHJv
dWdoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdl
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtMTg2LDQ3ICsxNzgsNDQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICBpZiAoYmxvY2stPmxhc3QoKS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50
KGJsb2NrLT5sYXN0KCktPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBUcmlTdGF0ZSBmb3VuZCA9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBCbG9ja0luZGV4IHRhcmdldEJsb2NrSW5kZXggPSBOb0Jsb2NrOworICAgICAgICAgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2sgPSAwOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6ZSgpOyBmb3VuZCA9PSBGYWxz
ZVRyaVN0YXRlICYmIGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9
IGRhdGEtPmNhc2VzW2ldLnZhbHVlLnN0cmljdEVxdWFsKHZhbHVlKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZm91bmQgPT0gVHJ1ZVRyaVN0YXRlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0YXJnZXRCbG9ja0luZGV4ID0gZGF0YS0+Y2FzZXNbaV0udGFyZ2V0
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCbG9jayA9IGRhdGEtPmNh
c2VzW2ldLnRhcmdldDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kID09IE1peGVkVHJp
U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZm91bmQgPT0gRmFsc2VUcmlTdGF0ZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0YXJnZXRCbG9ja0luZGV4ID0gZGF0YS0+ZmFsbFRocm91Z2g7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQodGFyZ2V0QmxvY2tJbmRleCAhPSBOb0Jsb2NrKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCbG9jayA9IGRhdGEtPmZhbGxUaHJvdWdo
OworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRhcmdldEJsb2NrKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEJsb2NrSW5k
ZXgsIDE+IGpldHRpc29uZWRCbG9ja3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3NvcnMoYmxvY2spOyBpLS07KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCBqZXR0aXNvbmVkQmxvY2tJbmRleCA9IG1f
Z3JhcGguc3VjY2Vzc29yKGJsb2NrLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoamV0dGlzb25lZEJsb2NrSW5kZXggIT0gdGFyZ2V0QmxvY2tJbmRleCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgamV0dGlzb25lZEJsb2Nrcy5hcHBlbmQoamV0dGlzb25lZEJs
b2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAx
PiBqZXR0aXNvbmVkQmxvY2tzOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jayA9IGJsb2NrLT5zdWNjZXNzb3Io
aSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpldHRpc29uZWRCbG9jayAhPSB0
YXJnZXRCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamV0dGlzb25lZEJs
b2Nrcy5hcHBlbmQoamV0dGlzb25lZEJsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNC
bG9jayogdGFyZ2V0QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3RhcmdldEJsb2NrSW5kZXhdLmdl
dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodGFyZ2V0QmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGFyZ2V0QmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCkgPT0gMSkg
ewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiQ0ZHU2ltcGxpZnk6IEtub3duIGNvbnN0YW50ICgiLCB2YWx1ZSwgIikgc3dpdGNoIG1lcmdl
IG9uICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCbG9jayAjIiwgYmxvY2tJ
bmRleCwgIiB0byBCbG9jayAjIiwgdGFyZ2V0QmxvY2tJbmRleCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIi5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
QmxvY2sgIiwgKmJsb2NrLCAiIHRvIEJsb2NrICIsICp0YXJnZXRCbG9jaywgIi5cbiIpOwogI2Vu
ZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRl
dGhyZWFkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgdGFyZ2V0QmxvY2tJbmRleCwgamV0
dGlzb25lZEJsb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3Mo
YmxvY2ssIHRhcmdldEJsb2NrLCBqZXR0aXNvbmVkQmxvY2tzKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJDRkdTaW1wbGlmeTogS25vd24gY29uc3RhbnQgKCIsIHZhbHVlLCAi
KSBzd2l0Y2gtPmp1bXAgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29udmVy
c2lvbiBvbiBCbG9jayAjIiwgYmxvY2tJbmRleCwgIiB0byBCbG9jayAjIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QmxvY2tJbmRleCwgIi5cbiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiY29udmVyc2lvbiBvbiBCbG9jayAiLCAqYmxvY2ssICIg
dG8gQmxvY2sgIyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0YXJnZXRCbG9j
aywgIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJl
bWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAo
KTsKQEAgLTIzNSw5ICsyMjQsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBibG9jay0+bGFzdCgpLT5jb2RlT3Jp
Z2luOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5sYXN0KCktPmNvbnZlcnRU
b1BoYW50b20oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBqZXR0aXNvbmVkQmxvY2tzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgamV0dGlzb25CbG9jayhibG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tzW2ldLCBi
b3VuZGFyeUNvZGVPcmlnaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0
aXNvbkJsb2NrKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2tzW2ldLCBib3VuZGFyeUNvZGVPcmlnaW4p
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYm91bmRh
cnlDb2RlT3JpZ2luLCBPcEluZm8odGFyZ2V0QmxvY2tJbmRleCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYm91bmRhcnlDb2RlT3Jp
Z2luLCBPcEluZm8odGFyZ2V0QmxvY2spKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI4MywxNCArMjcyLDE0IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBtX2dyYXBoLmludmFsaWRhdGVDRkcoKTsKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAKLSAgICAgICAgICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dy
YXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGtpbGxVbnJlYWNoYWJsZShibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
a2lsbFVucmVhY2hhYmxlKGJsb2NrKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTMwMiwyNSArMjkxLDIzIEBAIHB1YmxpYzoKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgdm9pZCBjb252ZXJ0VG9KdW1wKEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxv
Y2tJbmRleCB0YXJnZXRCbG9ja0luZGV4KQorICAgIHZvaWQgY29udmVydFRvSnVtcChCYXNpY0Js
b2NrKiBibG9jaywgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2spCiAgICAgewotICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAg
ICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1t0YXJnZXRCbG9j
a0luZGV4XS5nZXQoKTsKICAgICAgICAgQVNTRVJUKHRhcmdldEJsb2NrKTsKICAgICAgICAgQVNT
RVJUKHRhcmdldEJsb2NrLT5pc1JlYWNoYWJsZSk7Ci0gICAgICAgIGlmICh0YXJnZXRCbG9jay0+
bV9wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgaWYgKHRhcmdldEJsb2NrLT5w
cmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigKLSAgICAgICAgICAgICAgICAiQ0ZH
U2ltcGxpZnk6IEJyYW5jaC9Td2l0Y2ggdG8gc2FtZSBzdWNjZXNzb3IgbWVyZ2Ugb24gQmxvY2sg
IyV1IHRvIEJsb2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgdGFyZ2V0
QmxvY2tJbmRleCk7CisgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICJDRkdT
aW1wbGlmeTogQnJhbmNoL1N3aXRjaCB0byBzYW1lIHN1Y2Nlc3NvciBtZXJnZSBvbiBCbG9jayAi
LCAqYmxvY2ssCisgICAgICAgICAgICAgICAgIiB0byBCbG9jayAiLCAqdGFyZ2V0QmxvY2ssICIu
XG4iKTsKICNlbmRpZgogICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwotICAgICAgICAg
ICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgdGFyZ2V0QmxvY2tJbmRleCwgbm9CbG9ja3MoKSk7
CisgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9jaywgdGFyZ2V0QmxvY2ssIG5vQmxvY2tzKCkp
OwogICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKAotICAgICAgICAgICAgICAgICJDRkdTaW1wbGlm
eTogQnJhbmNoLT5qdW1wIGNvbnZlcnNpb24gdG8gc2FtZSBzdWNjZXNzb3Igb24gQmxvY2sgIyV1
IHRvIEJsb2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgdGFyZ2V0Qmxv
Y2tJbmRleCk7CisgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICJDRkdTaW1w
bGlmeTogQnJhbmNoLT5qdW1wIGNvbnZlcnNpb24gdG8gc2FtZSBzdWNjZXNzb3Igb24gQmxvY2sg
IiwKKyAgICAgICAgICAgICAgICAqYmxvY2ssICIgdG8gQmxvY2sgIiwgKnRhcmdldEJsb2NrLCAi
LlxuIiwKICNlbmRpZgogICAgICAgICAgICAgTm9kZSogYnJhbmNoID0gYmxvY2stPmxhc3QoKTsK
ICAgICAgICAgICAgIEFTU0VSVChicmFuY2gtPmlzVGVybWluYWwoKSk7CkBAIC0zMzAsMTQgKzMx
NywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBibG9jay0+YXBwZW5k
Tm9kZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYnJhbmNoLT5j
b2RlT3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyh0YXJnZXRCbG9ja0luZGV4KSk7Cisg
ICAgICAgICAgICAgICAgT3BJbmZvKHRhcmdldEJsb2NrKSk7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICB2b2lkIGtpbGxVbnJlYWNoYWJsZShCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgdm9p
ZCBraWxsVW5yZWFjaGFibGUoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAg
ICAgIAogICAgICAgICBBU1NFUlQoYmxvY2spOwogICAgICAgICBBU1NFUlQoIWJsb2NrLT5pc1Jl
YWNoYWJsZSk7CiAgICAgICAgIApAQCAtMzQ2LDcgKzMzMSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQog
ICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5hdChub2RlSW5kZXgp
KTsKICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uY2xlYXIo
KTsKKyAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soYmxvY2spOwogICAgIH0KICAgICAKICAgICB2
b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRp
c29uZWRCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFuZCkKQEAgLTM2MSw0
OSArMzQ2LDQ2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBPcEluZm8obGl2ZW5lc3NOb2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGpldHRpc29uQmxv
Y2soQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4
LCBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbikKKyAgICB2b2lkIGpldHRpc29uQmxvY2so
QmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jaywgQ29kZU9yaWdp
biBib3VuZGFyeUNvZGVPcmlnaW4pCiAgICAgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIEJhc2ljQmxvY2sq
IGpldHRpc29uZWRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlzb25lZEJsb2NrSW5kZXhd
LmdldCgpOwotICAgICAgICAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBqZXR0aXNv
bmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCiAgICAg
ICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2ssIGJvdW5kYXJ5
Q29kZU9yaWdpbiwgYXJndW1lbnRUb09wZXJhbmQoaSkpOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxz
KCk7ICsraSkKICAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoYmxvY2ssIGpldHRpc29uZWRC
bG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBpKTsKICAgICAgICAgCi0gICAgICAgIGZpeEpldHRp
c29uZWRQcmVkZWNlc3NvcnMoYmxvY2tJbmRleCwgamV0dGlzb25lZEJsb2NrSW5kZXgpOworICAg
ICAgICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2spOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoQmxvY2tJbmRl
eCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4KQorICAgIHZvaWQg
Zml4SmV0dGlzb25lZFByZWRlY2Vzc29ycyhCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayog
amV0dGlzb25lZEJsb2NrKQogICAgIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCJGaXhpbmcgcHJlZGVjZXNzb3JzIGFuZCBwaGlz
IGR1ZSB0byBqZXR0aXNvbiBvZiBCbG9jayAjJXUgZnJvbSBCbG9jayAjJXUuXG4iLAotICAgICAg
ICAgICAgICAgIGpldHRpc29uZWRCbG9ja0luZGV4LCBibG9ja0luZGV4KTsKKyAgICAgICAgZGF0
YUxvZygKKyAgICAgICAgICAgICJGaXhpbmcgcHJlZGVjZXNzb3JzIGFuZCBwaGlzIGR1ZSB0byBq
ZXR0aXNvbiBvZiBCbG9jayAiLCAqamV0dGlzb25lZEJsb2NrLAorICAgICAgICAgICAgIiBmcm9t
IEJsb2NrICIsICpibG9jaywgIi5cbiIsCiAjZW5kaWYKLSAgICAgICAgQmFzaWNCbG9jayogamV0
dGlzb25lZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tqZXR0aXNvbmVkQmxvY2tJbmRleF0uZ2V0
KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPm1f
cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoamV0dGlzb25lZEJs
b2NrLT5tX3ByZWRlY2Vzc29yc1tpXSAhPSBibG9ja0luZGV4KQorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGlmIChqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29yc1tpXSAhPSBi
bG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGpldHRpc29uZWRC
bG9jay0+bV9wcmVkZWNlc3NvcnNbaV0gPSBqZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3Jz
Lmxhc3QoKTsKLSAgICAgICAgICAgIGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnMucmVt
b3ZlTGFzdCgpOworICAgICAgICAgICAgamV0dGlzb25lZEJsb2NrLT5wcmVkZWNlc3NvcnNbaV0g
PSBqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29ycy50YWtlTGFzdCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBWZWN0b3I8QmxvY2tJbmRleCwgMT4gbm9C
bG9ja3MoKQorICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMT4gbm9CbG9ja3MoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIFZlY3RvcjxCbG9ja0luZGV4LCAxPigpOworICAgICAgICByZXR1cm4gVmVj
dG9yPEJhc2ljQmxvY2sqLCAxPigpOwogICAgIH0KICAgICAKLSAgICBWZWN0b3I8QmxvY2tJbmRl
eCwgMT4gb25lQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIFZlY3RvcjxCYXNpY0Js
b2NrKiwgMT4gb25lQmxvY2soQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBWZWN0
b3I8QmxvY2tJbmRleCwgMT4gcmVzdWx0OwotICAgICAgICByZXN1bHQuYXBwZW5kKGJsb2NrSW5k
ZXgpOworICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE+IHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChibG9jayk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgbWVyZ2VCbG9ja3MoCi0gICAgICAgIEJsb2NrSW5kZXggZmlyc3RCbG9ja0luZGV4
LCBCbG9ja0luZGV4IHNlY29uZEJsb2NrSW5kZXgsIFZlY3RvcjxCbG9ja0luZGV4LCAxPiBqZXR0
aXNvbmVkQmxvY2tJbmRpY2VzKQorICAgICAgICBCYXNpY0Jsb2NrKiBmaXJzdEJsb2NrLCBCYXNp
Y0Jsb2NrKiBzZWNvbmRCbG9jaywKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxPiBqZXR0
aXNvbmVkQmxvY2tzKQogICAgIHsKICAgICAgICAgLy8gVGhpcyB3aWxsIGFkZCBhbGwgb2YgdGhl
IG5vZGVzIGluIHNlY29uZEJsb2NrIHRvIGZpcnN0QmxvY2ssIGJ1dCBpbiBzbyBkb2luZwogICAg
ICAgICAvLyBpdCB3aWxsIGFsc28gZW5zdXJlIHRoYXQgYW55IEdldExvY2FscyBmcm9tIHRoZSBz
ZWNvbmQgYmxvY2sgdGhhdCByZWZlciB0bwpAQCAtNDExLDkgKzM5Myw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIC8vIHRoZW4gUGhhbnRvbXMgYXJlIGluc2VydGVkIGZvciBhbnl0aGluZyB0aGF0IHRo
ZSBqZXR0aXNvbmVkQmxvY2sgd291bGQgaGF2ZQogICAgICAgICAvLyBrZXB0IGFsaXZlLgogICAg
ICAgICAKLSAgICAgICAgQmFzaWNCbG9jayogZmlyc3RCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
Zmlyc3RCbG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgQmFzaWNCbG9jayogc2Vjb25kQmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW3NlY29uZEJsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICAKICAg
ICAgICAgLy8gUmVtb3ZlIHRoZSB0ZXJtaW5hbCBvZiBmaXJzdEJsb2NrIHNpbmNlIHdlIGRvbid0
IG5lZWQgaXQgYW55bW9yZS4gV2VsbCwgd2UgZG9uJ3QKICAgICAgICAgLy8gcmVhbGx5IHJlbW92
ZSBpdDsgd2UgYWN0dWFsbHkgdHVybiBpdCBpbnRvIGEgUGhhbnRvbS4KICAgICAgICAgQVNTRVJU
KGZpcnN0QmxvY2stPmxhc3QoKS0+aXNUZXJtaW5hbCgpKTsKQEAgLTQyMSw4ICs0MDAsOCBAQCBw
cml2YXRlOgogICAgICAgICBmaXJzdEJsb2NrLT5sYXN0KCktPmNvbnZlcnRUb1BoYW50b20oKTsK
ICAgICAgICAgQVNTRVJUKGZpcnN0QmxvY2stPmxhc3QoKS0+cmVmQ291bnQoKSA9PSAxKTsKICAg
ICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGpldHRpc29uZWRCbG9ja0luZGljZXMu
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW2pldHRpc29uZWRCbG9ja0luZGljZXNbaV1dLmdldCgpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBqZXR0aXNvbmVkQmxvY2tzLnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrID0gamV0dGlzb25lZEJsb2Nr
c1tpXTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gVGltZSB0byBpbnNlcnQgZ2hvc3Rp
ZXMgZm9yIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUga2VwdCBhbGl2ZSBpbiBjYXNlIHdlIE9TUgog
ICAgICAgICAgICAgLy8gZXhpdCBwcmlvciB0byBoaXR0aW5nIHRoZSBmaXJzdEJsb2NrJ3MgdGVy
bWluYWwsIGFuZCBlbmQgdXAgZ29pbmcgZG93biBhCkBAIC00NDcsMjMgKzQyNiwyMyBAQCBwcml2
YXRlOgogICAgICAgICAvLyBwcmVkZWNlc3NvcnMgZWFnZXJseSB0byBlbnN1cmUgdGhhdCB3ZSBr
bm93IHdoYXQgdGhleSBhcmUgaW4gY2FzZSB0aGUgbmV4dCBibG9jayB3ZQogICAgICAgICAvLyBj
b25zaWRlciBpbiB0aGlzIHBoYXNlIHdpc2hlcyB0byBxdWVyeSB0aGUgcHJlZGVjZXNzb3JzIG9m
IG9uZSBvZiB0aGUgYmxvY2tzIHdlCiAgICAgICAgIC8vIGFmZmVjdGVkLgotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3NvcnMoZmlyc3RCbG9jayk7IGktLTspIHsK
LSAgICAgICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fZ3JhcGgubV9ibG9ja3NbbV9n
cmFwaC5zdWNjZXNzb3IoZmlyc3RCbG9jaywgaSldLmdldCgpOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2op
IHsKLSAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29yc1tqXSA9PSBz
ZWNvbmRCbG9ja0luZGV4KQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPm1fcHJlZGVj
ZXNzb3JzW2pdID0gZmlyc3RCbG9ja0luZGV4OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBm
aXJzdEJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHN1Y2Nlc3NvciA9IGZpcnN0QmxvY2stPnN1Y2Nlc3NvcihpKTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IDA7IGogPCBzdWNjZXNzb3ItPnByZWRlY2Vzc29ycy5zaXplKCk7ICsr
aikgeworICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPnByZWRlY2Vzc29yc1tqXSA9PSBz
ZWNvbmRCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnNb
al0gPSBmaXJzdEJsb2NrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICAvLyBGaXggdGhlIHByZWRlY2Vzc29ycyBvZiBteSBmb3JtZXIgc3VjY2Vzc29ycy4gQWdh
aW4sIHdlJ2QgcmF0aGVyIG5vdCBkbyB0aGlzLCBidXQgaXQncwogICAgICAgICAvLyBhbiB1bmZv
cnR1bmF0ZSBuZWNlc3NpdHkuIFNlZSBhYm92ZSBjb21tZW50LgotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBqZXR0aXNvbmVkQmxvY2tJbmRpY2VzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAg
IGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoZmlyc3RCbG9ja0luZGV4LCBqZXR0aXNvbmVkQmxv
Y2tJbmRpY2VzW2ldKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gamV0dGlzb25lZEJsb2Nr
cy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGZp
cnN0QmxvY2ssIGpldHRpc29uZWRCbG9ja3NbaV0pOwogICAgICAgICAKICAgICAgICAgZmlyc3RC
bG9jay0+dmFsdWVzQXRUYWlsID0gc2Vjb25kQmxvY2stPnZhbHVlc0F0VGFpbDsKICAgICAgICAg
Zmlyc3RCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uID0gc2Vjb25kQmxvY2stPmNmYUJyYW5jaERp
cmVjdGlvbjsKICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nbc2Vjb25kQmxvY2tJ
bmRleF0uY2xlYXIoKTsKKyAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soc2Vjb25kQmxvY2spOwog
ICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjksOCArNjksOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgU2FtcGxpbmdSZWdp
b24gc2FtcGxpbmdSZWdpb24oIkRGRyBDUFMgUmV0aHJlYWRpbmc6IGZyZWVVbm5lY2Vzc2FyeU5v
ZGVzIik7CiAgICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1f
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwpAQCAt
Mzg3LDggKzM4Nyw4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBTYW1wbGluZ1JlZ2lvbiBz
YW1wbGluZ1JlZ2lvbigiREZHIENQUyBSZXRocmVhZGluZzogY2Fub25pY2FsaXplTG9jYWxzSW5C
bG9ja3MiKTsKICAgICAgICAgCi0gICAgICAgIGZvciAobV9ibG9ja0luZGV4ID0gbV9ncmFwaC5t
X2Jsb2Nrcy5zaXplKCk7IG1fYmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgbV9ibG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbbV9ibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7
CisgICAgICAgICAgICBtX2Jsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAg
ICAgICAgIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2soKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTQwMiwyMCArNDAyLDE5IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUg
dGhhdCBhdHRlbXB0cyB0byB1c2UgdGhpcyBmYWlsIGluc3RhbnRseS4KICAgICAgICAgbV9ibG9j
ayA9IDA7Ci0gICAgICAgIG1fYmxvY2tJbmRleCA9IE5vQmxvY2s7CiAgICAgICAgIAogICAgICAg
ICB3aGlsZSAoIXBoaVN0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgUGhpU3RhY2tFbnRy
eSBlbnRyeSA9IHBoaVN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgIHBoaVN0YWNrLnJlbW92ZUxh
c3QoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBlbnRy
eS5tX2Jsb2NrOwotICAgICAgICAgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMgPSBi
bG9jay0+bV9wcmVkZWNlc3NvcnM7CisgICAgICAgICAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRl
Y2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnM7CiAgICAgICAgICAgICBOb2RlKiBjdXJyZW50
UGhpID0gZW50cnkubV9waGk7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gY3VycmVudFBoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBzaXpl
X3QgaW5kZXggPSBlbnRyeS5tX2luZGV4OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gcHJlZGVjZXNzb3JzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3ByZWRlY2Vz
c29yc1tpXV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JC
bG9jayA9IHByZWRlY2Vzc29yc1tpXTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBOb2RlKiB2YXJpYWJsZUluUHJldmlvdXMgPSBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuYXRGb3I8b3BlcmFuZEtpbmQ+KGluZGV4KTsKICAgICAgICAgICAgICAgICBpZiAoIXZh
cmlhYmxlSW5QcmV2aW91cykgewpAQCAtNDgxLDcgKzQ4MCw2IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBtX2xvY2FsUGhpU3RhY2s7CiAgICAgfQogICAgIAotICAgIEJsb2NrSW5kZXggbV9i
bG9ja0luZGV4OwogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgVmVjdG9yPFBoaVN0YWNr
RW50cnksIDEyOD4gbV9hcmd1bWVudFBoaVN0YWNrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5
LCAxMjg+IG1fbG9jYWxQaGlTdGFjazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsOCBAQCBw
dWJsaWM6CiAgICAgICAgIAogICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgCi0g
ICAgICAgIGZvciAodW5zaWduZWQgYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpOyArK2Jsb2NrKQotICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ1NFKG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tdLmdldCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkKKyAgICAg
ICAgICAgIHBlcmZvcm1CbG9ja0NTRShtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpKTsKICAgICAg
ICAgCiAgICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJl
dmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwyNCArNTIsMjMgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIAotICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1f
YmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tz
KCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmIChibG9jay0+Y2ZhRm91bmRDb25zdGFu
dHMpCi0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBmb2xkQ29uc3RhbnRzKGJsb2NrSW5kZXgp
OworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gZm9sZENvbnN0YW50cyhibG9jayk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBib29sIGZvbGRDb25zdGFudHMoQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIGJv
b2wgZm9sZENvbnN0YW50cyhCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7CiAjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiQ29uc3RhbnQg
Zm9sZGluZyBjb25zaWRlcmluZyBCbG9jayAjJXUuXG4iLCBibG9ja0luZGV4KTsKKyAgICAgICAg
ZGF0YUxvZygiQ29uc3RhbnQgZm9sZGluZyBjb25zaWRlcmluZyBCbG9jayAiLCAqYmxvY2ssICIu
XG4iKTsKICNlbmRpZgotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9j
a3NbYmxvY2tJbmRleF0uZ2V0KCk7CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAg
ICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhibG9jayk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRl
eEluQmxvY2spIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RD
RVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOCBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBydW4oKQogICAgIHsKICAgICAgICAgLy8gRmlyc3QgcmVzZXQgdGhlIGNvdW50cyB0byAw
IGZvciBhbGwgbm9kZXMuCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4
XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTsp
CkBAIC02MCw4ICs2MCw4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gLSBOb2RlcyB0aGF0IGFyZSBt
dXN0LWdlbmVyYXRlLgogICAgICAgICAvLyAtIE5vZGVzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9t
IHR5cGUgY2hlY2tzLgogICAgICAgICAvLyBTZXQgdGhlaXIgcmVmIGNvdW50cyB0byAxIGFuZCBw
dXQgdGhlbSBvbiB0aGUgd29ya2xpc3QuCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5k
ZXgpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1ti
bG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAg
ICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleElu
QmxvY2stLTspIHsKQEAgLTgxLDggKzgxLDggQEAgcHVibGljOgogICAgICAgICAgICAgREZHX05P
REVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgY291bnRFZGdlKTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgp
OworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICgh
YmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBE
aXNhc3NlbWJsZXI6OkRpc2Fzc2VtYmxlcihHcmFwaCYgZ3JhcGgpCiAgICAgOiBtX2dyYXBoKGdy
YXBoKQogewotICAgIG1fbGFiZWxGb3JCbG9ja0luZGV4LnJlc2l6ZShncmFwaC5tX2Jsb2Nrcy5z
aXplKCkpOworICAgIG1fbGFiZWxGb3JCbG9ja0luZGV4LnJlc2l6ZShncmFwaC5udW1CbG9ja3Mo
KSk7CiB9CiAKIHZvaWQgRGlzYXNzZW1ibGVyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpCkBAIC05NywxMyArOTcsMTMgQEAgVmVjdG9yPERpc2Fzc2VtYmxl
cjo6RHVtcGVkT3A+IERpc2Fzc2VtYgogICAgIAogICAgIE5vZGUqIGxhc3ROb2RlID0gMDsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgcHJldmlvdXNMYWJlbCA9IG1fc3RhcnRPZkNvZGU7Ci0g
ICAgZm9yIChzaXplX3QgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICBmb3IgKHNpemVfdCBibG9j
a0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRl
eCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7CiAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ZHVtcERpc2Fzc2VtYmx5KG91dCwgZGlzYXNzZW1ibHlQcmVmaXgsIGxpbmtCdWZmZXIsIHByZXZp
b3VzTGFiZWwsIG1fbGFiZWxGb3JCbG9ja0luZGV4W2Jsb2NrSW5kZXhdLCBsYXN0Tm9kZSk7CiAg
ICAgICAgIGFwcGVuZChyZXN1bHQsIG91dCwgcHJldmlvdXNPcmlnaW4pOwotICAgICAgICBtX2dy
YXBoLmR1bXBCbG9ja0hlYWRlcihvdXQsIHByZWZpeCwgYmxvY2tJbmRleCwgR3JhcGg6OkR1bXBM
aXZlUGhpc09ubHkpOworICAgICAgICBtX2dyYXBoLmR1bXBCbG9ja0hlYWRlcihvdXQsIHByZWZp
eCwgYmxvY2ssIEdyYXBoOjpEdW1wTGl2ZVBoaXNPbmx5KTsKICAgICAgICAgYXBwZW5kKHJlc3Vs
dCwgb3V0LCBwcmV2aW91c09yaWdpbik7CiAgICAgICAgIE5vZGUqIGxhc3ROb2RlRm9yRGlzYXNz
ZW1ibHkgPSBibG9jay0+YXQoMCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxv
Y2stPnNpemUoKTsgKytpKSB7CkBAIC0xMTgsNyArMTE4LDcgQEAgVmVjdG9yPERpc2Fzc2VtYmxl
cjo6RHVtcGVkT3A+IERpc2Fzc2VtYgogICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBlbmQgcG9p
bnQuIFRoaXMgY2FzZSBpcyBoaXQgZWl0aGVyIGR1cmluZyBwZWVwaG9sZSBjb21wYXJlCiAgICAg
ICAgICAgICAgICAgLy8gb3B0aW1pemF0aW9ucyAodGhlIEJyYW5jaCB3b24ndCBoYXZlIGl0cyBv
d24gbGFiZWwpIG9yIGlmIHdlIGhhdmUgYQogICAgICAgICAgICAgICAgIC8vIGZvcmNlZCBPU1Ig
ZXhpdC4KLSAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmRleCArIDEgPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKSkKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmRleCArIDEgPCBtX2dyYXBo
Lm51bUJsb2NrcygpKQogICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGFiZWwgPSBtX2xhYmVs
Rm9yQmxvY2tJbmRleFtibG9ja0luZGV4ICsgMV07CiAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50TGFiZWwgPSBtX2VuZE9mTWFpblBhdGg7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmgJKHJldmlzaW9uIDE1
MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIERpc2Fzc2VtYmxlcihH
cmFwaCYpOwogICAgIAogICAgIHZvaWQgc2V0U3RhcnRPZkNvZGUoTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIGxhYmVsKSB7IG1fc3RhcnRPZkNvZGUgPSBsYWJlbDsgfQotICAgIHZvaWQgc2V0Rm9yQmxv
Y2soQmxvY2tJbmRleCBibG9ja0luZGV4LCBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwpCisg
ICAgdm9pZCBzZXRGb3JCbG9ja0luZGV4KEJsb2NrSW5kZXggYmxvY2tJbmRleCwgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIGxhYmVsKQogICAgIHsKICAgICAgICAgbV9sYWJlbEZvckJsb2NrSW5kZXhb
YmxvY2tJbmRleF0gPSBsYWJlbDsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvbWluYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9taW5hdG9ycy5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDkg
KzQ0LDkgQEAgdm9pZCBEb21pbmF0b3JzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKIHsKICAgICAv
LyBUaGlzIGltcGxlbWVudHMgYSBuYWl2ZSBkb21pbmF0b3Igc29sdmVyLgogICAgIAotICAgIEFT
U0VSVChncmFwaC5tX2Jsb2Nrc1swXS0+bV9wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKTsKKyAgICBB
U1NFUlQoZ3JhcGguYmxvY2soMCktPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpOwogICAgIAotICAg
IHVuc2lnbmVkIG51bUJsb2NrcyA9IGdyYXBoLm1fYmxvY2tzLnNpemUoKTsKKyAgICB1bnNpZ25l
ZCBudW1CbG9ja3MgPSBncmFwaC5udW1CbG9ja3MoKTsKICAgICAKICAgICBpZiAobnVtQmxvY2tz
ID4gbV9yZXN1bHRzLnNpemUoKSkgewogICAgICAgICBtX3Jlc3VsdHMuZ3JvdyhudW1CbG9ja3Mp
OwpAQCAtNjAsMTMgKzYwLDEzIEBAIHZvaWQgRG9taW5hdG9yczo6Y29tcHV0ZShHcmFwaCYgZ3Jh
cGgpCiAgICAgCiAgICAgbV9zY3JhdGNoLmNsZWFyQWxsKCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtQmxvY2tzOyBpLS07KSB7Ci0gICAgICAgIGlmICghZ3JhcGgubV9ibG9ja3NbaV0pCisg
ICAgICAgIGlmICghZ3JhcGguYmxvY2soaSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgbV9zY3JhdGNoLnNldChpKTsKICAgICB9CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
bnVtQmxvY2tzOyBpLS0gPiAxOykgewotICAgICAgICBpZiAoIWdyYXBoLm1fYmxvY2tzW2ldIHx8
IGdyYXBoLm1fYmxvY2tzW2ldLT5tX3ByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCisgICAgICAgIGlm
ICghZ3JhcGguYmxvY2soaSkgfHwgZ3JhcGguYmxvY2soaSktPnByZWRlY2Vzc29ycy5pc0VtcHR5
KCkpCiAgICAgICAgICAgICBtX3Jlc3VsdHNbaV0uY2xlYXJBbGwoKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbV9yZXN1bHRzW2ldLnNldChtX3NjcmF0Y2gpOwpAQCAtODgsMTQgKzg4LDE0
IEBAIHZvaWQgRG9taW5hdG9yczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCiAKIGJvb2wgRG9taW5h
dG9yczo6aXRlcmF0ZUZvckJsb2NrKEdyYXBoJiBncmFwaCwgQmxvY2tJbmRleCBpKQogewotICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGgubV9ibG9ja3NbaV0uZ2V0KCk7CisgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhpKTsKICAgICBpZiAoIWJsb2NrKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGJsb2NrLT5tX3ByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCisg
ICAgaWYgKGJsb2NrLT5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgbV9zY3JhdGNoLnNldChtX3Jlc3VsdHNbYmxvY2stPm1fcHJlZGVjZXNzb3JzWzBd
XSk7Ci0gICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsg
ai0tID4gMTspCi0gICAgICAgIG1fc2NyYXRjaC5maWx0ZXIobV9yZXN1bHRzW2Jsb2NrLT5tX3By
ZWRlY2Vzc29yc1tqXV0pOworICAgIG1fc2NyYXRjaC5zZXQobV9yZXN1bHRzW2Jsb2NrLT5wcmVk
ZWNlc3NvcnNbMF0tPmluZGV4XSk7CisgICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPnByZWRl
Y2Vzc29ycy5zaXplKCk7IGotLSA+IDE7KQorICAgICAgICBtX3NjcmF0Y2guZmlsdGVyKG1fcmVz
dWx0c1tibG9jay0+cHJlZGVjZXNzb3JzW2pdLT5pbmRleF0pOwogICAgIG1fc2NyYXRjaC5zZXQo
aSk7CiAgICAgcmV0dXJuIG1fcmVzdWx0c1tpXS5zZXRBbmRDaGVjayhtX3NjcmF0Y2gpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmgJKHJldmlzaW9u
IDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNp
bmNsdWRlICJERkdBbmFseXNpcy5oIgorI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNs
dWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlIDx3dGYvRmFzdEJpdFZlY3Rvci5oPgogCkBAIC00
OCw3ICs0OSwxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBkb21pbmF0ZXMoQmxvY2tJbmRleCBmcm9t
LCBCbG9ja0luZGV4IHRvKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzVmFsaWQoKSk7
Ci0gICAgICAgIHJldHVybiBtX3Jlc3VsdHNbdG9dLmdldChmcm9tKTsKKyAgICAgICAgcmV0dXJu
IG1fcmVzdWx0c1tmcm9tXS5nZXQodG8pOworICAgIH0KKyAgICBib29sIGRvbWluYXRlcyhCYXNp
Y0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBkb21pbmF0ZXMoZnJvbS0+aW5kZXgsIHRvLT5pbmRleCk7CiAgICAgfQogICAgIAogcHJpdmF0
ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAko
cmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CiAgICAgICAgIAogICAgICAg
ICBtX3Byb2ZpdGFiaWxpdHlDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyAr
K2Jsb2NrSW5kZXgpCi0gICAgICAgICAgICBmaXh1cEJsb2NrKG1fZ3JhcGgubV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCkpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpCisgICAgICAg
ICAgICBmaXh1cEJsb2NrKG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCkpOwogICAgICAgICAKICAg
ICAgICAgd2hpbGUgKG1fcHJvZml0YWJpbGl0eUNoYW5nZWQpIHsKICAgICAgICAgICAgIG1fcHJv
Zml0YWJpbGl0eUNoYW5nZWQgPSBmYWxzZTsKQEAgLTU5LDggKzU5LDggQEAgcHVibGljOgogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRpb25zLnNp
emUoKTsgaS0tOykKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnNb
aV0ubWVyZ2VBcmd1bWVudFVuYm94aW5nQXdhcmVuZXNzKCk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCi0gICAgICAgICAgICAgICAgZml4dXBT
ZXRMb2NhbHNJbkJsb2NrKG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCkpOworICAg
ICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KQorICAgICAgICAgICAgICAgIGZpeHVwU2V0
TG9jYWxzSW5CbG9jayhtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01NzMsMTAgKzU3MywxMCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q2hpbGRFZGdlLT5oYXNCb29sZWFuUmVzdWx0
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShu
ZXdDaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICBCbG9ja0luZGV4IHRvQmVUYWtlbiA9IG5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0JlTm90VGFrZW4gPSBub2Rl
LT50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFRh
a2VuQmxvY2tJbmRleCh0b0JlVGFrZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
c2V0Tm90VGFrZW5CbG9ja0luZGV4KHRvQmVOb3RUYWtlbik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiB0b0JlVGFrZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiB0b0JlTm90VGFrZW4gPSBub2RlLT50YWtl
bkJsb2NrKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRUYWtlbkJsb2NrKHRv
QmVUYWtlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXROb3RUYWtlbkJsb2Nr
KHRvQmVOb3RUYWtlbik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NSwxNSArMjQ1LDE1IEBAIHZvaWQgR3JhcGg6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICBpZiAob3AgPT0gV2Vha0pTQ29uc3RhbnQp
CiAgICAgICAgIG91dC5wcmludChjb21tYSwgUmF3UG9pbnRlcihub2RlLT53ZWFrQ29uc3RhbnQo
KSksICIgKHN0cnVjdHVyZTogIiwgKm5vZGUtPndlYWtDb25zdGFudCgpLT5zdHJ1Y3R1cmUoKSwg
IikiKTsKICAgICBpZiAobm9kZS0+aXNCcmFuY2goKSB8fCBub2RlLT5pc0p1bXAoKSkKLSAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAiVDojIiwgbm9kZS0+dGFrZW5CbG9ja0luZGV4KCkpOworICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJUOiIsICpub2RlLT50YWtlbkJsb2NrKCkpOwogICAgIGlm
IChub2RlLT5pc0JyYW5jaCgpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJGOiMiLCBub2Rl
LT5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgIG91dC5wcmludChjb21tYSwgIkY6Iiwg
Km5vZGUtPm5vdFRha2VuQmxvY2soKSk7CiAgICAgaWYgKG5vZGUtPmlzU3dpdGNoKCkpIHsKICAg
ICAgICAgU3dpdGNoRGF0YSogZGF0YSA9IG5vZGUtPnN3aXRjaERhdGEoKTsKICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBkYXRhLT5raW5kKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRhdGEtPmNhc2VzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBkYXRhLT5jYXNlc1tpXS52YWx1ZSwgIjojIiwgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKLSAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAiZGVmYXVsdDojIiwgZGF0YS0+ZmFsbFRocm91Z2gpOwor
ICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5jYXNlc1tpXS52YWx1ZSwgIjoiLCAq
ZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZGVmYXVs
dDoiLCAqZGF0YS0+ZmFsbFRocm91Z2gpOwogICAgIH0KICAgICBvdXQucHJpbnQoY29tbWEsICJi
YyMiLCBub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgIApAQCAtMjY5LDM3ICsy
NjksMzUgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIG91
dC5wcmludCgiXG4iKTsKIH0KIAotdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBQaGlO
b2RlRHVtcE1vZGUgcGhpTm9kZUR1bXBNb2RlKQordm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVy
KFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmFzaWNCbG9jayogYmxvY2ss
IFBoaU5vZGVEdW1wTW9kZSBwaGlOb2RlRHVtcE1vZGUpCiB7Ci0gICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKLQotICAgIG91dC5wcmludChwcmVmaXgs
ICJCbG9jayAjIiwgYmxvY2tJbmRleCwgIiAoIiwgYmxvY2stPmF0KDApLT5jb2RlT3JpZ2luLCAi
KTogIiwgYmxvY2stPmlzUmVhY2hhYmxlID8gIiIgOiAiKHNraXBwZWQpIiwgYmxvY2stPmlzT1NS
VGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIsICJcbiIpOworICAgIG91dC5wcmludChwcmVm
aXgsICJCbG9jayAiLCAqYmxvY2ssICIgKCIsIGJsb2NrLT5hdCgwKS0+Y29kZU9yaWdpbiwgIik6
ICIsIGJsb2NrLT5pc1JlYWNoYWJsZSA/ICIiIDogIihza2lwcGVkKSIsIGJsb2NrLT5pc09TUlRh
cmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6ICIiLCAiXG4iKTsKICAgICBvdXQucHJpbnQocHJlZml4
LCAiICBQcmVkZWNlc3NvcnM6Iik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+
bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG91dC5wcmludCgiICMiLCBibG9j
ay0+bV9wcmVkZWNlc3NvcnNbaV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2st
PnByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkKKyAgICAgICAgb3V0LnByaW50KCIgIiwgKmJsb2Nr
LT5wcmVkZWNlc3NvcnNbaV0pOwogICAgIG91dC5wcmludCgiXG4iKTsKICAgICBpZiAobV9kb21p
bmF0b3JzLmlzVmFsaWQoKSkgewogICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBEb21pbmF0
ZWQgYnk6Iik7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyhpLCBibG9j
a0luZGV4KSkKKyAgICAgICAgICAgIGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyhpLCBibG9j
ay0+aW5kZXgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgb3V0LnBy
aW50KCIgIyIsIGkpOwogICAgICAgICB9CiAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICAg
ICAgb3V0LnByaW50KHByZWZpeCwgIiAgRG9taW5hdGVzOiIpOwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIW1f
ZG9taW5hdG9ycy5kb21pbmF0ZXMoYmxvY2tJbmRleCwgaSkpCisgICAgICAgICAgICBpZiAoIW1f
ZG9taW5hdG9ycy5kb21pbmF0ZXMoYmxvY2stPmluZGV4LCBpKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIG91dC5wcmludCgiICMiLCBpKTsKICAgICAgICAgfQogICAg
ICAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgfQogICAgIGlmIChtX25hdHVyYWxMb29wcy5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgaWYgKGNvbnN0IE5hdHVyYWxMb29wKiBsb29wID0gbV9uYXR1cmFs
TG9vcHMuaGVhZGVyT2YoYmxvY2tJbmRleCkpIHsKKyAgICAgICAgaWYgKGNvbnN0IE5hdHVyYWxM
b29wKiBsb29wID0gbV9uYXR1cmFsTG9vcHMuaGVhZGVyT2YoYmxvY2spKSB7CiAgICAgICAgICAg
ICBvdXQucHJpbnQocHJlZml4LCAiICBMb29wIGhlYWRlciwgY29udGFpbnM6Iik7CiAgICAgICAg
ICAgICBWZWN0b3I8QmxvY2tJbmRleD4gc29ydGVkQmxvY2tMaXN0OwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvb3AtPnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAg
IHNvcnRlZEJsb2NrTGlzdC5hcHBlbmQobG9vcC0+YXQoaSkpOworICAgICAgICAgICAgICAgIHNv
cnRlZEJsb2NrTGlzdC5hcHBlbmQobG9vcC0+YXQoaSktPmluZGV4KTsKICAgICAgICAgICAgIHN0
ZDo6c29ydChzb3J0ZWRCbG9ja0xpc3QuYmVnaW4oKSwgc29ydGVkQmxvY2tMaXN0LmVuZCgpKTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3J0ZWRCbG9ja0xpc3Quc2l6
ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgIyIsIHNvcnRlZEJsb2NrTGlz
dFtpXSk7CkBAIC0zMDcsMTEgKzMwNSwxMSBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIo
UHJpbnRTdHJlYW0mCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFZlY3Rvcjxjb25zdCBO
YXR1cmFsTG9vcCo+IGNvbnRhaW5pbmdMb29wcyA9Ci0gICAgICAgICAgICBtX25hdHVyYWxMb29w
cy5sb29wc09mKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgbV9uYXR1cmFsTG9vcHMubG9vcHNP
ZihibG9jayk7CiAgICAgICAgIGlmICghY29udGFpbmluZ0xvb3BzLmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgQ29udGFpbmluZyBsb29wIGhlYWRlcnM6Iik7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29udGFpbmluZ0xvb3BzLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiICMiLCBjb250YWluaW5nTG9v
cHNbaV0tPmhlYWRlcigpKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAiLCAqY29udGFp
bmluZ0xvb3BzW2ldLT5oZWFkZXIoKSk7CiAgICAgICAgICAgICBvdXQucHJpbnQoIlxuIik7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0zNDQsNyArMzQyLDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KQogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2JdLmdl
dCgpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGR1bXBCbG9ja0hlYWRlcihvdXQsICIiLCBiLCBEdW1wQWxsUGhpcyk7CisgICAgICAgIGR1bXBC
bG9ja0hlYWRlcihvdXQsICIiLCBibG9jaywgRHVtcEFsbFBoaXMpOwogICAgICAgICBvdXQucHJp
bnQoIiAgdmFycyBiZWZvcmU6ICIpOwogICAgICAgICBpZiAoYmxvY2stPmNmYUhhc1Zpc2l0ZWQp
CiAgICAgICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0SGVhZCwgb3V0KTsKQEAg
LTM5NCwyOSArMzkyLDI1IEBAIHZvaWQgR3JhcGg6OmRldGhyZWFkKCkKICAgICBtX2Zvcm0gPSBM
b2FkU3RvcmU7CiB9CiAKLXZvaWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJ
bmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1
Y2Nlc3NvckluZGV4KQordm9pZCBHcmFwaDo6aGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCYXNpY0Js
b2NrKiwgMTY+JiB3b3JrbGlzdCwgQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHN1Y2Nl
c3NvcikKIHsKLSAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBtX2Jsb2Nrc1tzdWNjZXNzb3JJ
bmRleF0uZ2V0KCk7CiAgICAgaWYgKCFzdWNjZXNzb3ItPmlzUmVhY2hhYmxlKSB7CiAgICAgICAg
IHN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUgPSB0cnVlOwotICAgICAgICB3b3JrbGlzdC5hcHBlbmQo
c3VjY2Vzc29ySW5kZXgpOworICAgICAgICB3b3JrbGlzdC5hcHBlbmQoc3VjY2Vzc29yKTsKICAg
ICB9CiAgICAgCi0gICAgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoYmxvY2tJbmRl
eCk7CisgICAgc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMuYXBwZW5kKGJsb2NrKTsKIH0KIAogdm9p
ZCBHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCkKIHsKLSAgICBWZWN0b3I8QmxvY2tJbmRl
eCwgMTY+IHdvcmtsaXN0OwotICAgIHdvcmtsaXN0LmFwcGVuZCgwKTsKLSAgICBtX2Jsb2Nrc1sw
XS0+aXNSZWFjaGFibGUgPSB0cnVlOworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+IHdvcmts
aXN0OworICAgIHdvcmtsaXN0LmFwcGVuZChibG9jaygwKSk7CisgICAgYmxvY2soMCktPmlzUmVh
Y2hhYmxlID0gdHJ1ZTsKICAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAg
ICBCbG9ja0luZGV4IGluZGV4ID0gd29ya2xpc3QubGFzdCgpOwotICAgICAgICB3b3JrbGlzdC5y
ZW1vdmVMYXN0KCk7Ci0gICAgICAgIAotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxv
Y2tzW2luZGV4XS5nZXQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtU3VjY2Vzc29y
cyhibG9jayk7IGktLTspCi0gICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGlu
ZGV4LCBzdWNjZXNzb3IoYmxvY2ssIGkpKTsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB3
b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVt
U3VjY2Vzc29ycygpOyBpLS07KQorICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0
LCBibG9jaywgYmxvY2stPnN1Y2Nlc3NvcihpKSk7CiAgICAgfQogfQogCkBAIC00MjcsNyArNDIx
LDcgQEAgdm9pZCBHcmFwaDo6cmVzZXRSZWFjaGFiaWxpdHkoKQogICAgICAgICBpZiAoIWJsb2Nr
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGJsb2NrLT5pc1JlYWNoYWJsZSA9IGZh
bHNlOwotICAgICAgICBibG9jay0+bV9wcmVkZWNlc3NvcnMuY2xlYXIoKTsKKyAgICAgICAgYmxv
Y2stPnByZWRlY2Vzc29ycy5jbGVhcigpOwogICAgIH0KICAgICAKICAgICBkZXRlcm1pbmVSZWFj
aGFiaWxpdHkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlz
aW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29y
a2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIHB1YmxpYzoKICAgICAvLyBDb2RlQmxvY2sg
aXMgb3B0aW9uYWwsIGJ1dCBtYXkgYWxsb3cgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBiZSBk
dW1wZWQgKGUuZy4gSWRlbnRpZmllciBuYW1lcykuCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiA9IFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgZW51bSBQaGlOb2RlRHVtcE1vZGUgeyBEdW1wTGl2
ZVBoaXNPbmx5LCBEdW1wQWxsUGhpcyB9OwotICAgIHZvaWQgZHVtcEJsb2NrSGVhZGVyKFByaW50
U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBCbG9ja0luZGV4LCBQaGlOb2RlRHVtcE1vZGUp
OworICAgIHZvaWQgZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJl
Zml4LCBCYXNpY0Jsb2NrKiwgUGhpTm9kZUR1bXBNb2RlKTsKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mLCBFZGdlKTsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBw
cmVmaXgsIE5vZGUqKTsKICAgICBzdGF0aWMgaW50IGFtb3VudE9mTm9kZVdoaXRlU3BhY2UoTm9k
ZSopOwpAQCAtMTc5LDggKzE3OSw2IEBAIHB1YmxpYzoKICAgICAvLyBwcmVjZWRpbmcgbm9kZS4g
UmV0dXJucyB0cnVlIGlmIGFueXRoaW5nIHdhcyBwcmludGVkLgogICAgIGJvb2wgZHVtcENvZGVP
cmlnaW4oUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIHByZXZpb3VzTm9k
ZSwgTm9kZSogY3VycmVudE5vZGUpOwogCi0gICAgQmxvY2tJbmRleCBibG9ja0luZGV4Rm9yQnl0
ZWNvZGVPZmZzZXQoVmVjdG9yPEJsb2NrSW5kZXg+JiBibG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2Rl
QmVnaW4pOwotCiAgICAgU3BlY3VsYXRlZFR5cGUgZ2V0SlNDb25zdGFudFNwZWN1bGF0aW9uKE5v
ZGUqIG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobm9k
ZS0+dmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKTsKQEAgLTQ1NSwxNyArNDUzLDI0IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCk7CiAg
ICAgfQogICAgIAotICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoQmFzaWNCbG9jayogYmxvY2sp
CisgICAgQmxvY2tJbmRleCBudW1CbG9ja3MoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXpl
KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBibG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOyB9CisgICAgQmFzaWNCbG9jayog
bGFzdEJsb2NrKCkgY29uc3QgeyByZXR1cm4gYmxvY2sobnVtQmxvY2tzKCkgLSAxKTsgfQorCisg
ICAgdm9pZCBhcHBlbmRCbG9jayhQYXNzUmVmUHRyPEJhc2ljQmxvY2s+IGJhc2ljQmxvY2spCiAg
ICAgewotICAgICAgICByZXR1cm4gYmxvY2stPmxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOworICAg
ICAgICBiYXNpY0Jsb2NrLT5pbmRleCA9IG1fYmxvY2tzLnNpemUoKTsKKyAgICAgICAgbV9ibG9j
a3MuYXBwZW5kKGJhc2ljQmxvY2spOwogICAgIH0KLSAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvcihC
YXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5kZXgpCisgICAgCisgICAgdm9pZCBraWxsQmxv
Y2soQmxvY2tJbmRleCBibG9ja0luZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJsb2NrLT5s
YXN0KCktPnN1Y2Nlc3NvcihpbmRleCk7CisgICAgICAgIG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmNs
ZWFyKCk7CiAgICAgfQotICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yRm9yQ29uZGl0aW9uKEJhc2lj
QmxvY2sqIGJsb2NrLCBib29sIGNvbmRpdGlvbikKKyAgICAKKyAgICB2b2lkIGtpbGxCbG9jayhC
YXNpY0Jsb2NrKiBiYXNpY0Jsb2NrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0
KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOworICAgICAgICBraWxsQmxvY2so
YmFzaWNCbG9jay0+aW5kZXgpOwogICAgIH0KICAgICAKICAgICBib29sIGlzUHJlZGljdGVkTnVt
ZXJpY2FsKE5vZGUqIG5vZGUpCkBAIC02NTksNyArNjY0LDcgQEAgcHVibGljOgogICAgIAogICAg
IE5vZGVBbGxvY2F0b3ImIG1fYWxsb2NhdG9yOwogCi0gICAgVmVjdG9yPCBPd25QdHI8QmFzaWNC
bG9jaz4gLCA4PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8IFJlZlB0cjxCYXNpY0Jsb2NrPiAsIDg+
IG1fYmxvY2tzOwogICAgIFZlY3RvcjxFZGdlLCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKICAgICBW
ZWN0b3I8U3RvcmFnZUFjY2Vzc0RhdGE+IG1fc3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAgVmVjdG9y
PE5vZGUqLCA4PiBtX2FyZ3VtZW50czsKQEAgLTY4Myw3ICs2ODgsNyBAQCBwdWJsaWM6CiAgICAg
UmVmQ291bnRTdGF0ZSBtX3JlZkNvdW50U3RhdGU7CiBwcml2YXRlOgogICAgIAotICAgIHZvaWQg
aGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0lu
ZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpOworICAgIHZvaWQgaGFu
ZGxlU3VjY2Vzc29yKFZlY3RvcjxCYXNpY0Jsb2NrKiwgMTY+JiB3b3JrbGlzdCwgQmFzaWNCbG9j
ayosIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcik7CiAgICAgCiAgICAgQWRkU3BlY3VsYXRpb25Nb2Rl
IGFkZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIoTm9kZSogYWRkLCBib29sIHZhcmlh
YmxlU2hvdWxkU3BlY3VsYXRlSW50ZWdlciwgTm9kZSogaW1tZWRpYXRlKQogICAgIHsKQEAgLTcz
MiwyNyArNzM3LDYgQEAgcHJpdmF0ZToKICAgICB9CiB9OwogCi1jbGFzcyBHZXRCeXRlY29kZUJl
Z2luRm9yQmxvY2sgewotcHVibGljOgotICAgIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayhHcmFw
aCYgZ3JhcGgpCi0gICAgICAgIDogbV9ncmFwaChncmFwaCkKLSAgICB7Ci0gICAgfQotICAgIAot
ICAgIHVuc2lnbmVkIG9wZXJhdG9yKCkoQmxvY2tJbmRleCogYmxvY2tJbmRleCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2dyYXBoLm1fYmxvY2tzWypibG9ja0luZGV4XS0+Ynl0ZWNv
ZGVCZWdpbjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGgmIG1fZ3JhcGg7Ci19OwotCi1p
bmxpbmUgQmxvY2tJbmRleCBHcmFwaDo6YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3Rv
cjxCbG9ja0luZGV4PiYgbGlua2luZ1RhcmdldHMsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pCi17
Ci0gICAgcmV0dXJuICpiaW5hcnlTZWFyY2g8QmxvY2tJbmRleCwgdW5zaWduZWQ+KGxpbmtpbmdU
YXJnZXRzLCBsaW5raW5nVGFyZ2V0cy5zaXplKCksIGJ5dGVjb2RlQmVnaW4sIEdldEJ5dGVjb2Rl
QmVnaW5Gb3JCbG9jaygqdGhpcykpOwotfQotCiAjZGVmaW5lIERGR19OT0RFX0RPX1RPX0NISUxE
UkVOKGdyYXBoLCBub2RlLCB0aGluZ1RvRG8pIGRvIHsgICAgICAgICAgICBcCiAgICAgICAgIE5v
ZGUqIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcg
KzQ4LDcgQEAgSklUQ29tcGlsZXI6OkpJVENvbXBpbGVyKEdyYXBoJiBkZmcpCiAgICAgOiBDQ2Fs
bEhlbHBlcnMoJmRmZy5tX3ZtLCBkZmcubV9jb2RlQmxvY2spCiAgICAgLCBtX2dyYXBoKGRmZykK
ICAgICAsIG1faml0Q29kZShhZG9wdFJlZihuZXcgSklUQ29kZSgpKSkKLSAgICAsIG1fYmxvY2tI
ZWFkcyhkZmcubV9ibG9ja3Muc2l6ZSgpKQorICAgICwgbV9ibG9ja0hlYWRzKGRmZy5udW1CbG9j
a3MoKSkKICAgICAsIG1fY3VycmVudENvZGVPcmlnaW5JbmRleCgwKQogewogICAgIGlmIChzaG91
bGRTaG93RGlzYXNzZW1ibHkoKSB8fCBtX2dyYXBoLm1fdm0ubV9wZXJCeXRlY29kZVByb2ZpbGVy
KQpAQCAtMTcwLDEzICsxNzAsMTMgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVy
JiBsaW5rQgogICAgICAgICAKICAgICAgICAgdXNlZEp1bXBUYWJsZXMuc2V0KGRhdGEuc3dpdGNo
VGFibGVJbmRleCk7CiAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9j
ay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgIHRhYmxl
LmN0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW2RhdGEuZmFs
bFRocm91Z2hdKTsKKyAgICAgICAgdGFibGUuY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaC0+aW5kZXhdKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gdGFibGUuY3RpT2Zmc2V0cy5zaXplKCk7IGotLTspCiAgICAgICAgICAg
ICB0YWJsZS5jdGlPZmZzZXRzW2pdID0gdGFibGUuY3RpRGVmYXVsdDsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gZGF0YS5jYXNlcy5zaXplKCk7IGotLTspIHsKICAgICAgICAgICAgIFN3aXRj
aENhc2UmIG15Q2FzZSA9IGRhdGEuY2FzZXNbal07CiAgICAgICAgICAgICB0YWJsZS5jdGlPZmZz
ZXRzW215Q2FzZS52YWx1ZS5zd2l0Y2hMb29rdXBWYWx1ZSgpIC0gdGFibGUubWluXSA9Ci0gICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fYmxvY2tIZWFkc1tteUNhc2UudGFy
Z2V0XSk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fYmxvY2tIZWFk
c1tteUNhc2UudGFyZ2V0LT5pbmRleF0pOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMTk5
LDcgKzE5OSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiB0
YWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJs
ZUluZGV4KTsKLSAgICAgICAgdGFibGUuY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaF0pOworICAgICAgICB0YWJsZS5jdGlEZWZh
dWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdo
LT5pbmRleF0pOwogICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjpp
dGVyYXRvciBpdGVyOwogICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxl
OjppdGVyYXRvciBlbmQgPSB0YWJsZS5vZmZzZXRUYWJsZS5lbmQoKTsKICAgICAgICAgZm9yIChp
dGVyID0gdGFibGUub2Zmc2V0VGFibGUuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKQEAg
LTIwOCw3ICsyMDgsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtC
CiAgICAgICAgICAgICBTd2l0Y2hDYXNlJiBteUNhc2UgPSBkYXRhLmNhc2VzW2pdOwogICAgICAg
ICAgICAgaXRlciA9IHRhYmxlLm9mZnNldFRhYmxlLmZpbmQobXlDYXNlLnZhbHVlLnN0cmluZ0lt
cGwoKSk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpdGVyICE9IGVuZCk7Ci0gICAgICAg
ICAgICBpdGVyLT52YWx1ZS5jdGlPZmZzZXQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9j
a0hlYWRzW215Q2FzZS50YXJnZXRdKTsKKyAgICAgICAgICAgIGl0ZXItPnZhbHVlLmN0aU9mZnNl
dCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldC0+aW5k
ZXhdKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYsMTEgKzI5
NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRTdGFydE9mQ29kZShs
YWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0Rm9y
QmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHZvaWQgc2V0Rm9yQmxvY2tJbmRleChC
bG9ja0luZGV4IGJsb2NrSW5kZXgpCiAgICAgewogICAgICAgICBpZiAoTElLRUxZKCFtX2Rpc2Fz
c2VtYmxlcikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZGlzYXNzZW1ibGVyLT5z
ZXRGb3JCbG9jayhibG9ja0luZGV4LCBsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7CisgICAg
ICAgIG1fZGlzYXNzZW1ibGVyLT5zZXRGb3JCbG9ja0luZGV4KGJsb2NrSW5kZXgsIGxhYmVsSWdu
b3JpbmdXYXRjaHBvaW50cygpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRGb3JOb2RlKE5v
ZGUqIG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29w
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFs
TG9vcHMuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05hdHVyYWxMb29wcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB2b2lkIE5hdHVyYWxMb29wOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCJbSGVhZGVyOiAjIiwgaGVh
ZGVyKCksICIsIEJvZHk6Iik7CisgICAgb3V0LnByaW50KCJbSGVhZGVyOiAiLCAqaGVhZGVyKCks
ICIsIEJvZHk6Iik7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYm9keS5zaXplKCk7
ICsraSkKLSAgICAgICAgb3V0LnByaW50KCIgIyIsIG1fYm9keVtpXSk7CisgICAgICAgIG91dC5w
cmludCgiICIsICptX2JvZHlbaV0pOwogICAgIG91dC5wcmludCgiXSIpOwogfQogCkBAIC02MCwy
NiArNjAsMjYgQEAgdm9pZCBOYXR1cmFsTG9vcHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQogICAg
IAogICAgIG1fbG9vcHMucmVzaXplKDApOwogICAgIAotICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Cisg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJ
bmRleC0tOykgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBncmFwaC5udW1TdWNjZXNzb3JzKGJsb2Nr
KTsgaS0tOykgewotICAgICAgICAgICAgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCA9IGdyYXBo
LnN1Y2Nlc3NvcihibG9jaywgaSk7Ci0gICAgICAgICAgICBpZiAoIWdyYXBoLm1fZG9taW5hdG9y
cy5kb21pbmF0ZXMoc3VjY2Vzc29ySW5kZXgsIGJsb2NrSW5kZXgpKQorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBibG9jay0+c3VjY2Vzc29yKGkpOworICAgICAgICAgICAg
aWYgKCFncmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKHN1Y2Nlc3NvciwgYmxvY2spKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbV9sb29wcy5zaXplKCk7IGotLTspIHsKLSAg
ICAgICAgICAgICAgICBpZiAobV9sb29wc1tpXS5oZWFkZXIoKSA9PSBzdWNjZXNzb3JJbmRleCkg
ewotICAgICAgICAgICAgICAgICAgICBtX2xvb3BzW2ldLmFkZEJsb2NrKGJsb2NrSW5kZXgpOwor
ICAgICAgICAgICAgICAgIGlmIChtX2xvb3BzW2ldLmhlYWRlcigpID09IHN1Y2Nlc3Nvcikgewor
ICAgICAgICAgICAgICAgICAgICBtX2xvb3BzW2ldLmFkZEJsb2NrKGJsb2NrKTsKICAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmIChmb3VuZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIE5hdHVyYWxMb29wIGxvb3Aoc3VjY2Vzc29ySW5kZXgpOwotICAgICAgICAgICAg
bG9vcC5hZGRCbG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIE5hdHVyYWxMb29wIGxvb3Ao
c3VjY2Vzc29yKTsKKyAgICAgICAgICAgIGxvb3AuYWRkQmxvY2soYmxvY2spOwogICAgICAgICAg
ICAgbV9sb29wcy5hcHBlbmQobG9vcCk7CiAgICAgICAgIH0KICAgICB9CkBAIC04OCw4ICs4OCw4
IEBAIHZvaWQgTmF0dXJhbExvb3BzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKICAgICAgICAgZGF0
YUxvZygiQWZ0ZXIgYm9vdHN0cmFwOiAiLCAqdGhpcywgIlxuIik7CiAgICAgCiAgICAgRmFzdEJp
dFZlY3RvciBzZWVuQmxvY2tzOwotICAgIFZlY3RvcjxCbG9ja0luZGV4LCA0PiBibG9ja1dvcmts
aXN0OwotICAgIHNlZW5CbG9ja3MucmVzaXplKGdyYXBoLm1fYmxvY2tzLnNpemUoKSk7CisgICAg
VmVjdG9yPEJhc2ljQmxvY2sqLCA0PiBibG9ja1dvcmtsaXN0OworICAgIHNlZW5CbG9ja3MucmVz
aXplKGdyYXBoLm51bUJsb2NrcygpKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xv
b3BzLnNpemUoKTsgaS0tOykgewogICAgICAgICBOYXR1cmFsTG9vcCYgbG9vcCA9IG1fbG9vcHNb
aV07CkBAIC0xMDEsMzAgKzEwMSwyNyBAQCB2b2lkIE5hdHVyYWxMb29wczo6Y29tcHV0ZShHcmFw
aCYgZ3JhcGgpCiAgICAgICAgICAgICBkYXRhTG9nKCJEZWFsaW5nIHdpdGggbG9vcCAiLCBsb29w
LCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGxvb3Auc2l6ZSgp
OyBqLS07KSB7Ci0gICAgICAgICAgICBzZWVuQmxvY2tzLnNldChsb29wW2pdKTsKKyAgICAgICAg
ICAgIHNlZW5CbG9ja3Muc2V0KGxvb3Bbal0tPmluZGV4KTsKICAgICAgICAgICAgIGJsb2NrV29y
a2xpc3QuYXBwZW5kKGxvb3Bbal0pOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB3aGls
ZSAoIWJsb2NrV29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBibG9ja1dvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IGJsb2NrV29ya2xpc3QudGFrZUxhc3QoKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIERlYWxp
bmcgd2l0aCAjIiwgYmxvY2tJbmRleCwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgIERlYWxpbmcgd2l0aCAiLCAqYmxvY2ssICJcbiIpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoYmxvY2tJbmRleCA9PSBsb29wLmhlYWRlcigpKQorICAgICAgICAgICAgaWYgKGJs
b2NrID09IGxvb3AuaGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGgubV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgICAgICBBU1NFUlQoYmxvY2spOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6
ZSgpOyBqLS07KSB7Ci0gICAgICAgICAgICAgICAgQmxvY2tJbmRleCBwcmVkZWNlc3NvckluZGV4
ID0gYmxvY2stPm1fcHJlZGVjZXNzb3JzW2pdOwotICAgICAgICAgICAgICAgIGlmIChzZWVuQmxv
Y2tzLmdldChwcmVkZWNlc3NvckluZGV4KSkKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogcHJlZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNzb3JzW2pdOworICAgICAgICAg
ICAgICAgIGlmIChzZWVuQmxvY2tzLmdldChwcmVkZWNlc3Nvci0+aW5kZXgpKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBs
b29wLmFkZEJsb2NrKHByZWRlY2Vzc29ySW5kZXgpOwotICAgICAgICAgICAgICAgIGJsb2NrV29y
a2xpc3QuYXBwZW5kKHByZWRlY2Vzc29ySW5kZXgpOwotICAgICAgICAgICAgICAgIHNlZW5CbG9j
a3Muc2V0KHByZWRlY2Vzc29ySW5kZXgpOworICAgICAgICAgICAgICAgIGxvb3AuYWRkQmxvY2so
cHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIGJsb2NrV29ya2xpc3QuYXBwZW5kKHByZWRl
Y2Vzc29yKTsKKyAgICAgICAgICAgICAgICBzZWVuQmxvY2tzLnNldChwcmVkZWNlc3Nvci0+aW5k
ZXgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTMzLDEyICsxMzAsMTIg
QEAgdm9pZCBOYXR1cmFsTG9vcHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQogICAgICAgICBkYXRh
TG9nKCJSZXN1bHRzOiAiLCAqdGhpcywgIlxuIik7CiB9CiAKLVZlY3Rvcjxjb25zdCBOYXR1cmFs
TG9vcCo+IE5hdHVyYWxMb29wczo6bG9vcHNPZihCbG9ja0luZGV4IGJsb2NrSW5kZXgpIGNvbnN0
CitWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBOYXR1cmFsTG9vcHM6Omxvb3BzT2YoQmFzaWNC
bG9jayogYmxvY2spIGNvbnN0CiB7CiAgICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gcmVz
dWx0OwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbG9vcHMuc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgIGlmIChtX2xvb3BzW2ldLmNvbnRhaW5zKGJsb2NrSW5kZXgpKQorICAgICAgICBp
ZiAobV9sb29wc1tpXS5jb250YWlucyhibG9jaykpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCZtX2xvb3BzW2ldKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05hdHVyYWxMb29wcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTmF0dXJhbExvb3BzLmgJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYg
KzMxLDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0FuYWx5c2lzLmgi
CisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0zOCwyNCArMzksMjQgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogY2xhc3MgTmF0dXJhbExvb3AgewogcHVibGljOgog
ICAgIE5hdHVyYWxMb29wKCkKLSAgICAgICAgOiBtX2hlYWRlcihOb0Jsb2NrKQorICAgICAgICA6
IG1faGVhZGVyKDApCiAgICAgewogICAgIH0KICAgICAKLSAgICBOYXR1cmFsTG9vcChCbG9ja0lu
ZGV4IGhlYWRlcikKKyAgICBOYXR1cmFsTG9vcChCYXNpY0Jsb2NrKiBoZWFkZXIpCiAgICAgICAg
IDogbV9oZWFkZXIoaGVhZGVyKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRCbG9j
ayhCbG9ja0luZGV4IGJsb2NrKSB7IG1fYm9keS5hcHBlbmQoYmxvY2spOyB9CisgICAgdm9pZCBh
ZGRCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykgeyBtX2JvZHkuYXBwZW5kKGJsb2NrKTsgfQogICAg
IAotICAgIEJsb2NrSW5kZXggaGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV9oZWFkZXI7IH0KKyAg
ICBCYXNpY0Jsb2NrKiBoZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYWRlcjsgfQogICAgIAog
ICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2JvZHkuc2l6ZSgpOyB9Ci0gICAg
QmxvY2tJbmRleCBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2JvZHlbaV07IH0KLSAg
ICBCbG9ja0luZGV4IG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7
IH0KKyAgICBCYXNpY0Jsb2NrKiBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2JvZHlb
aV07IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0
dXJuIGF0KGkpOyB9CiAgICAgCi0gICAgYm9vbCBjb250YWlucyhCbG9ja0luZGV4IGJsb2NrKSBj
b25zdAorICAgIGJvb2wgY29udGFpbnMoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CiAgICAgewog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2JvZHkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAg
ICAgICBpZiAobV9ib2R5W2ldID09IGJsb2NrKQpAQCAtNjcsOCArNjgsOCBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiBwcml2YXRlOgotICAgIEJs
b2NrSW5kZXggbV9oZWFkZXI7Ci0gICAgVmVjdG9yPEJsb2NrSW5kZXgsIDQ+IG1fYm9keTsKKyAg
ICBCYXNpY0Jsb2NrKiBtX2hlYWRlcjsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayosIDQ+IG1fYm9k
eTsKIH07CiAKIGNsYXNzIE5hdHVyYWxMb29wcyA6IHB1YmxpYyBBbmFseXNpczxOYXR1cmFsTG9v
cHM+IHsKQEAgLTkxLDE3ICs5MiwxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gUmV0dXJuIGVp
dGhlciBudWxsIGlmIHRoZSBibG9jayBpc24ndCBhIGxvb3AgaGVhZGVyLCBvciB0aGUKICAgICAv
LyBsb29wIGl0IGJlbG9uZ3MgdG8uCi0gICAgY29uc3QgTmF0dXJhbExvb3AqIGhlYWRlck9mKEJs
b2NrSW5kZXggYmxvY2tJbmRleCkgY29uc3QKKyAgICBjb25zdCBOYXR1cmFsTG9vcCogaGVhZGVy
T2YoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2xvb3BzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgaWYgKG1fbG9vcHNbaV0u
aGVhZGVyKCkgPT0gYmxvY2tJbmRleCkKKyAgICAgICAgICAgIGlmIChtX2xvb3BzW2ldLmhlYWRl
cigpID09IGJsb2NrKQogICAgICAgICAgICAgICAgIHJldHVybiAmbV9sb29wc1tpXTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCiAgICAgLy8gUmV0dXJuIHRoZSBp
bmRpY2VzIG9mIGFsbCBsb29wcyB0aGlzIGJlbG9uZ3MgdG8uCi0gICAgVmVjdG9yPGNvbnN0IE5h
dHVyYWxMb29wKj4gbG9vcHNPZihCbG9ja0luZGV4IGJsb2NrSW5kZXgpIGNvbnN0OworICAgIFZl
Y3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IGxvb3BzT2YoQmFzaWNCbG9jayopIGNvbnN0OwogCiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiBwcml2YXRlOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE1MjMzOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw4IEBA
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorc3RydWN0IEJhc2ljQmxvY2s7
CisKIHN0cnVjdCBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSB7CiAgICAgU3RydWN0dXJlKiBwcmV2
aW91c1N0cnVjdHVyZTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZTsKQEAgLTgwLDE4ICs4
MiwyOCBAQCBzdHJ1Y3QgTmV3QXJyYXlCdWZmZXJEYXRhIHsKIC8vIHZhbHVlcy4KIHN0cnVjdCBT
d2l0Y2hDYXNlIHsKICAgICBTd2l0Y2hDYXNlKCkKLSAgICAgICAgOiB0YXJnZXQoTm9CbG9jaykK
KyAgICAgICAgOiB0YXJnZXQoMCkKICAgICB7CiAgICAgfQogICAgIAotICAgIFN3aXRjaENhc2Uo
TGF6eUpTVmFsdWUgdmFsdWUsIEJsb2NrSW5kZXggdGFyZ2V0KQorICAgIFN3aXRjaENhc2UoTGF6
eUpTVmFsdWUgdmFsdWUsIEJhc2ljQmxvY2sqIHRhcmdldCkKICAgICAgICAgOiB2YWx1ZSh2YWx1
ZSkKICAgICAgICAgLCB0YXJnZXQodGFyZ2V0KQogICAgIHsKICAgICB9CiAgICAgCisgICAgc3Rh
dGljIFN3aXRjaENhc2Ugd2l0aEJ5dGVjb2RlSW5kZXgoTGF6eUpTVmFsdWUgdmFsdWUsIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgeworICAgICAgICBTd2l0Y2hDYXNlIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0LnZhbHVlID0gdmFsdWU7CisgICAgICAgIHJlc3VsdC50YXJnZXQgPSBiaXR3
aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0ZWNvZGVJbmRl
eCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCB0
YXJnZXRCeXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4odGFyZ2V0KTsgfQorICAgIAogICAgIExhenlKU1ZhbHVlIHZhbHVlOwotICAgIEJsb2NrSW5k
ZXggdGFyZ2V0OworICAgIEJhc2ljQmxvY2sqIHRhcmdldDsKIH07CiAKIGVudW0gU3dpdGNoS2lu
ZCB7CkBAIC0xMDUsMTUgKzExNywyMSBAQCBzdHJ1Y3QgU3dpdGNoRGF0YSB7CiAgICAgLy8gY29u
c3RydWN0aW5nIHRoaXMgc2hvdWxkIG1ha2Ugc3VyZSB0byBpbml0aWFsaXplIGV2ZXJ5dGhpbmcg
dGhleQogICAgIC8vIGNhcmUgYWJvdXQgbWFudWFsbHkuCiAgICAgU3dpdGNoRGF0YSgpCi0gICAg
ICAgIDogZmFsbFRocm91Z2goTm9CbG9jaykKKyAgICAgICAgOiBmYWxsVGhyb3VnaCgwKQogICAg
ICAgICAsIGtpbmQoc3RhdGljX2Nhc3Q8U3dpdGNoS2luZD4oLTEpKQogICAgICAgICAsIHN3aXRj
aFRhYmxlSW5kZXgoVUlOVF9NQVgpCiAgICAgICAgICwgZGlkVXNlSnVtcFRhYmxlKGZhbHNlKQog
ICAgIHsKICAgICB9CiAgICAgCisgICAgdm9pZCBzZXRGYWxsVGhyb3VnaEJ5dGVjb2RlSW5kZXgo
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICB7CisgICAgICAgIGZhbGxUaHJvdWdoID0gYml0
d2lzZV9jYXN0PEJhc2ljQmxvY2sqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGJ5dGVjb2RlSW5k
ZXgpKTsKKyAgICB9CisgICAgdW5zaWduZWQgZmFsbFRocm91Z2hCeXRlY29kZUluZGV4KCkgY29u
c3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZmFsbFRocm91Z2gpOyB9CisgICAg
CiAgICAgVmVjdG9yPFN3aXRjaENhc2U+IGNhc2VzOwotICAgIEJsb2NrSW5kZXggZmFsbFRocm91
Z2g7CisgICAgQmFzaWNCbG9jayogZmFsbFRocm91Z2g7CiAgICAgU3dpdGNoS2luZCBraW5kOwog
ICAgIHVuc2lnbmVkIHN3aXRjaFRhYmxlSW5kZXg7CiAgICAgYm9vbCBkaWRVc2VKdW1wVGFibGU7
CkBAIC03NDMsMjggKzc2MSwyOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29w
SW5mbzI7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0VGFrZW5CbG9ja0luZGV4KEJsb2NrSW5k
ZXggYmxvY2tJbmRleCkKKyAgICB2b2lkIHNldFRha2VuQmxvY2soQmFzaWNCbG9jayogYmxvY2sp
CiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7Ci0gICAgICAg
IG1fb3BJbmZvID0gYmxvY2tJbmRleDsKKyAgICAgICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihibG9jayk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0Tm90VGFrZW5CbG9j
a0luZGV4KEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB2b2lkIHNldE5vdFRha2VuQmxvY2so
QmFzaWNCbG9jayogYmxvY2spCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSk7Ci0g
ICAgICAgIG1fb3BJbmZvMiA9IGJsb2NrSW5kZXg7CisgICAgICAgIG1fb3BJbmZvMiA9IGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgQmxvY2tJbmRleCB0
YWtlbkJsb2NrSW5kZXgoKQorICAgIEJhc2ljQmxvY2sqIHRha2VuQmxvY2soKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGlzQnJhbmNoKCkgfHwgaXNKdW1wKCkpOwotICAgICAgICByZXR1cm4gbV9v
cEluZm87CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KG1fb3BJbmZv
KTsKICAgICB9CiAgICAgCi0gICAgQmxvY2tJbmRleCBub3RUYWtlbkJsb2NrSW5kZXgoKQorICAg
IEJhc2ljQmxvY2sqIG5vdFRha2VuQmxvY2soKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJh
bmNoKCkpOwotICAgICAgICByZXR1cm4gbV9vcEluZm8yOworICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PEJhc2ljQmxvY2sqPihtX29wSW5mbzIpOwogICAgIH0KICAgICAKICAgICBTd2l0Y2hE
YXRhKiBzd2l0Y2hEYXRhKCkKQEAgLTc4Nyw3ICs4MDUsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCi0gICAgQmxvY2tJbmRleCBzdWNjZXNzb3IodW5zaWduZWQgaW5k
ZXgpCisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQogICAgIHsKICAg
ICAgICAgaWYgKGlzU3dpdGNoKCkpIHsKICAgICAgICAgICAgIGlmIChpbmRleCA8IHN3aXRjaERh
dGEoKS0+Y2FzZXMuc2l6ZSgpKQpAQCAtNzk3LDE5ICs4MTUsMTkgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICB9CiAgICAgICAgIHN3aXRjaCAoaW5kZXgpIHsKICAgICAgICAgY2FzZSAwOgotICAg
ICAgICAgICAgcmV0dXJuIHRha2VuQmxvY2tJbmRleCgpOworICAgICAgICAgICAgcmV0dXJuIHRh
a2VuQmxvY2soKTsKICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgcmV0dXJuIG5vdFRha2Vu
QmxvY2tJbmRleCgpOworICAgICAgICAgICAgcmV0dXJuIG5vdFRha2VuQmxvY2soKTsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gTm9CbG9jazsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICB9CiAgICAgfQogICAgIAotICAgIEJsb2NrSW5kZXggc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJv
b2wgY29uZGl0aW9uKQorICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckZvckNvbmRpdGlvbihib29s
IGNvbmRpdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsKLSAgICAgICAg
cmV0dXJuIGNvbmRpdGlvbiA/IHRha2VuQmxvY2tJbmRleCgpIDogbm90VGFrZW5CbG9ja0luZGV4
KCk7CisgICAgICAgIHJldHVybiBjb25kaXRpb24gPyB0YWtlbkJsb2NrKCkgOiBub3RUYWtlbkJs
b2NrKCk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaGFzSGVhcFByZWRpY3Rpb24oKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbklu
amVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OCw4ICs2OCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwg
bV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2sp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoIWJsb2NrLT5pc09T
UlRhcmdldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYxLDggKzU2MSw4IEBAIHByaXZhdGU6CiAjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiUHJv
cGFnYXRpbmcgcHJlZGljdGlvbnMgZm9yd2FyZCBbJXVdXG4iLCArK21fY291bnQpOwogI2VuZGlm
Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1f
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5u
dW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1Jl
YWNoYWJsZSk7CkBAIC01NzgsOCArNTc4LDggQEAgcHJpdmF0ZToKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2dGKCJQcm9wYWdhdGluZyBw
cmVkaWN0aW9ucyBiYWNrd2FyZCBbJXVdXG4iLCArK21fY291bnQpOwogI2VuZGlmCi0gICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7IGJs
b2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAg
ICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
QVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CkBAIC03MDMsOCArNzAzLDggQEAgcHJpdmF0ZToK
ICNlbmRpZgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3Zhcmlh
YmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkKICAgICAgICAgICAgIG1fZ3JhcGgubV92YXJpYWJs
ZUFjY2Vzc0RhdGFbaV0uZmluZCgpLT5jbGVhclZvdGVzKCk7Ci0gICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
OyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0lu
ZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNSwxMiArNDM1LDEyIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKIAogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoRWRnZSBvcGVyYW5kLCBO
b2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCkKIHsKLSAgICBCbG9ja0luZGV4IHRha2VuID0g
YnJhbmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9
IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJhc2ljQmxvY2sqIHRha2Vu
ID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0g
YnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwogICAgIAogICAgIGlmICh0YWtlbiA9PSBuZXh0
QmxvY2soKSkgewogICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OwotICAgICAgICBCbG9ja0luZGV4
IHRtcCA9IHRha2VuOworICAgICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsKICAgICAgICAg
dGFrZW4gPSBub3RUYWtlbjsKICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgfQpAQCAtNDk1
LDcgKzQ5NSw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGEKIHsK
ICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgp
OwogICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgTm9k
ZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5j
aEluZGV4SW5CbG9jayk7CisgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2Jsb2NrLT5hdChi
cmFuY2hJbmRleEluQmxvY2spOwogCiAgICAgICAgIEFTU0VSVChub2RlLT5hZGp1c3RlZFJlZkNv
dW50KCkgPT0gMSk7CiAgICAgICAgIApAQCAtNTE2LDggKzUxNiw4IEBAIGJvb2wgU3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGEKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBNYWNy
b0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkog
aGVscGVyRnVuY3Rpb24pCiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRh
a2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5u
b3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUt
PnRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5v
dFRha2VuQmxvY2soKTsKIAogICAgIEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY2FsbFJl
c3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpOb25aZXJvOwogCkBAIC01MjYsNyArNTI2LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIGlmICh0YWtl
biA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICBjb25kID0gSklUQ29tcGlsZXI6OmludmVydChj
b25kKTsKICAgICAgICAgY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpaZXJvOwot
ICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAgICAgICBCYXNpY0Jsb2NrKiB0bXAg
PSB0YWtlbjsKICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKICAgICAgICAgbm90VGFrZW4gPSB0
bXA7CiAgICAgfQpAQCAtNTgwLDcgKzU4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNw
ZWN1bGF0aXZlUGVlcGgKIAogICAgIGp1bXAobm90VGFrZW4pOwogICAgIAotICAgIG1faW5kZXhJ
bkJsb2NrID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+c2l6ZSgpIC0gMTsKKyAg
ICBtX2luZGV4SW5CbG9jayA9IG1fYmxvY2stPnNpemUoKSAtIDE7CiAgICAgbV9jdXJyZW50Tm9k
ZSA9IGJyYW5jaE5vZGU7CiB9CiAKQEAgLTY2OSwxNCArNjY5LDE0IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIGJv
b2wgaW52ZXJ0KQogewotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJs
b2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFr
ZW5CbG9ja0luZGV4KCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtl
bkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtl
bkJsb2NrKCk7CiAKICAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRv
IHRoZSB0YWtlbiBibG9jay4KICAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4g
d2l0aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFs
bCB0aHJvdWdoLgogICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICBpbnZl
cnQgPSAhaW52ZXJ0OwotICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAgICAgICBC
YXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsKICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKICAgICAg
ICAgbm90VGFrZW4gPSB0bXA7CiAgICAgfQpAQCAtMTQ0NSw4ICsxNDQ1LDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRvT2JqZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eShFZGdlIGxlZnRDaGls
ZCwgRWRnZSByaWdodENoaWxkLCBOb2RlKiBicmFuY2hOb2RlKQogewotICAgIEJsb2NrSW5kZXgg
dGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5v
dFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmFzaWNCbG9j
ayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90
VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CiAgICAgCiAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgb3AxKHRoaXMsIGxlZnRDaGlsZCk7CiAgICAgSlNWYWx1ZU9wZXJhbmQgb3Ay
KHRoaXMsIHJpZ2h0Q2hpbGQsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CkBAIC0xNzM3LDcg
KzE3MzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAg
fQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaChFZGdl
IG5vZGVVc2UsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4pCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaChFZGdlIG5vZGVVc2UsIEJhc2lj
QmxvY2sqIHRha2VuLCBCYXNpY0Jsb2NrKiBub3RUYWtlbikKIHsKICAgICBKU1ZhbHVlT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlVXNlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwpAQCAtMTc5NCw4ICsxNzk0LDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0QnJhbmNoKE5vZGUqIG5vZGUpCiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUtPnRh
a2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBub2RlLT5ub3RUYWtl
bkJsb2NrSW5kZXgoKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IG5vZGUtPnRha2VuQmxvY2so
KTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IG5vZGUtPm5vdFRha2VuQmxvY2soKTsKIAog
ICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAgY2FzZSBCb29sZWFu
VXNlOiB7CkBAIC0xODA0LDcgKzE4MDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJh
bmNoKE5vZGUqIG5vCiAKICAgICAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAg
ICAgICAgICBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6WmVybzsKLSAgICAgICAgICAgIEJs
b2NrSW5kZXggdG1wID0gdGFrZW47CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0YWtl
bjsKICAgICAgICAgICAgIHRha2VuID0gbm90VGFrZW47CiAgICAgICAgICAgICBub3RUYWtlbiA9
IHRtcDsKICAgICAgICAgfQpAQCAtMTgyOCw3ICsxODI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEJyYW5jaChOb2RlKiBubwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAodGFr
ZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgICAgICAgICBpbnZlcnQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CisgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogdG1wID0gdGFrZW47CiAgICAgICAgICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsK
ICAgICAgICAgICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICAgICAgICAgIH0KQEAgLTMyMTYs
OCArMzIxNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICB9CiAKICAgICBjYXNlIERGRzo6SnVtcDogewotICAgICAgICBCbG9ja0luZGV4IHRha2VuID0g
bm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgICAgIGp1bXAodGFrZW4pOworICAgICAgICBq
dW1wKG5vZGUtPnRha2VuQmxvY2soKSk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4NCwxMiArMzg0LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9u
UGUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51
bGwoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCkKIHsKLSAgICBC
bG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxv
Y2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOworICAg
IEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOworICAgIEJhc2lj
QmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwogICAgIAogICAg
IGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0Owot
ICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAgICAgICBCYXNpY0Jsb2NrKiB0bXAg
PSB0YWtlbjsKICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKICAgICAgICAgbm90VGFrZW4gPSB0
bXA7CiAgICAgfQpAQCAtNDQzLDcgKzQ0Myw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNw
ZWN1bGF0aXZlQ29tcGEKIHsKICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRl
Y3RQZWVwSG9sZUJyYW5jaCgpOwogICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9N
QVgpIHsKLSAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3Nb
bV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CisgICAgICAgIE5vZGUqIGJyYW5jaE5v
ZGUgPSBtX2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOwogCiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgCkBAIC00NjQs
OCArNDY0LDggQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqIG5v
ZGUsIE5vZGUqIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKLSAgICBCbG9ja0lu
ZGV4IHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRl
eCBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJhc2lj
QmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sq
IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwogCiAgICAgSklUQ29tcGls
ZXI6OlJlc3VsdENvbmRpdGlvbiBjYWxsUmVzdWx0Q29uZGl0aW9uID0gSklUQ29tcGlsZXI6Ok5v
blplcm87CiAKQEAgLTQ3NCw3ICs0NzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVBlZXBoCiAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGNv
bmQgPSBKSVRDb21waWxlcjo6aW52ZXJ0KGNvbmQpOwogICAgICAgICBjYWxsUmVzdWx0Q29uZGl0
aW9uID0gSklUQ29tcGlsZXI6Olplcm87Ci0gICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47
CisgICAgICAgIEJhc2ljQmxvY2sqIHRtcCA9IHRha2VuOwogICAgICAgICB0YWtlbiA9IG5vdFRh
a2VuOwogICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICB9CkBAIC01MjYsNyArNTI2LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogCiAgICAganVtcChub3RU
YWtlbik7CiAKLSAgICBtX2luZGV4SW5CbG9jayA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9i
bG9ja10tPnNpemUoKSAtIDE7CisgICAgbV9pbmRleEluQmxvY2sgPSBtX2Jsb2NrLT5zaXplKCkg
LSAxOwogICAgIG1fY3VycmVudE5vZGUgPSBicmFuY2hOb2RlOwogfQogCkBAIC02MDcsMTQgKzYw
NywxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShOb2RlKiBub2Rl
LCBOb2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCkKIHsKLSAgICBCbG9ja0luZGV4IHRha2Vu
ID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtl
biA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJhc2ljQmxvY2sqIHRh
a2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2Vu
ID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwogCiAgICAgLy8gVGhlIGJyYW5jaCBpbnN0
cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8gSWYgdGFrZW4g
aXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBj
b25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KICAgICBpZiAodGFrZW4gPT0gbmV4dEJs
b2NrKCkpIHsKICAgICAgICAgaW52ZXJ0ID0gIWludmVydDsKLSAgICAgICAgQmxvY2tJbmRleCB0
bXAgPSB0YWtlbjsKKyAgICAgICAgQmFzaWNCbG9jayogdG1wID0gdGFrZW47CiAgICAgICAgIHRh
a2VuID0gbm90VGFrZW47CiAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAgIH0KQEAgLTE0NjYs
OCArMTQ2Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUKIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVy
RXF1YWxpdHkoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCwgTm9kZSogYnJhbmNoTm9k
ZSkKIHsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4
KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJ
bmRleCgpOworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygp
OworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygp
OwogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBsZWZ0Q2hpbGQpOwog
ICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCByaWdodENoaWxkLCBNYW51YWxPcGVyYW5kU3Bl
Y3VsYXRpb24pOwpAQCAtMTc2NCw3ICsxNzY0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUxvZ2ljYWxOb3QoTgogICAgIH0KIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9i
amVjdE9yT3RoZXJCcmFuY2goRWRnZSBub2RlVXNlLCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0lu
ZGV4IG5vdFRha2VuKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFu
Y2goRWRnZSBub2RlVXNlLCBCYXNpY0Jsb2NrKiB0YWtlbiwgQmFzaWNCbG9jayogbm90VGFrZW4p
CiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZVVzZSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAgLTE4MTcs
OCArMTgxNyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBub2RlKQogewotICAgIEJsb2Nr
SW5kZXggdGFrZW4gPSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5v
dFRha2VuID0gbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmFzaWNCbG9jayogdGFr
ZW4gPSBub2RlLT50YWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBub2Rl
LT5ub3RUYWtlbkJsb2NrKCk7CiAgICAgCiAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6IHsKQEAgLTE4MzMsNyArMTgzMyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgICAgICAg
ICAgaW52ZXJ0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2Vu
OworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRtcCA9IHRha2VuOwogICAgICAgICAgICAg
ICAgIHRha2VuID0gbm90VGFrZW47CiAgICAgICAgICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAg
ICAgICAgICAgICB9CkBAIC0xODYzLDcgKzE4NjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0QnJhbmNoKE5vZGUqIG5vCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYg
KHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9
IE1hY3JvQXNzZW1ibGVyOjpaZXJvOwotICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRt
cCA9IHRha2VuOworICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsK
ICAgICAgICAgICAgICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKICAgICAgICAgICAgICAgICAg
ICAgbm90VGFrZW4gPSB0bXA7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzE2MCw4ICszMTYwLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAg
IGNhc2UgREZHOjpKdW1wOiB7Ci0gICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLT50YWtl
bkJsb2NrSW5kZXgoKTsKLSAgICAgICAganVtcCh0YWtlbik7CisgICAgICAgIGp1bXAobm9kZS0+
dGFrZW5CbG9jaygpKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCw3IEBA
IEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIFNwZWN1bGF0aXZlSkkKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbnZlcnRMYXN0T1NSRXhpdFRvRm9yd2FyZChjb25zdCBWYWx1ZVJlY292ZXJ5JiB2
YWx1ZVJlY292ZXJ5KQogewogICAgIG1faml0LmppdENvZGUoKS0+bGFzdE9TUkV4aXQoKS5jb252
ZXJ0VG9Gb3J3YXJkKAotICAgICAgICBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLmdl
dCgpLCBtX2N1cnJlbnROb2RlLCBtX2luZGV4SW5CbG9jaywgdmFsdWVSZWNvdmVyeSk7CisgICAg
ICAgIG1fYmxvY2ssIG1fY3VycmVudE5vZGUsIG1faW5kZXhJbkJsb2NrLCB2YWx1ZVJlY292ZXJ5
KTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlKiBub2RlLCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJl
Y292ZXJ5KQpAQCAtOTkzLDcgKzk5Myw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlQ29tcGEKIHsKICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQ
ZWVwSG9sZUJyYW5jaCgpOwogICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgp
IHsKLSAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9i
bG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CisgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUg
PSBtX2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOwogCiAgICAgICAgIEFTU0VSVChub2Rl
LT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgIApAQCAtMTAxNCw3ICsxMDE0LDcg
QEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVTdHJpYwogewogICAgIHVuc2ln
bmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgaWYg
KGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewotICAgICAgICBOb2RlKiBicmFuY2hO
b2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJs
b2NrKTsKKyAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1fYmxvY2stPmF0KGJyYW5jaEluZGV4
SW5CbG9jayk7CiAKICAgICAgICAgQVNTRVJUKG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSA9PSAx
KTsKICAgICAgICAgCkBAIC0xMzc5LDggKzEzNzksOCBAQCBGUFJUZW1wb3Jhcnk6OkZQUlRlbXBv
cmFyeShTcGVjdWxhdGl2ZUpJCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9s
ZURvdWJsZUJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6
RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gYnJh
bmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJy
YW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJhc2ljQmxvY2sqIHRha2VuID0g
YnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJh
bmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwogICAgIAogICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBAIC0xMzkxLDE0ICsxMzkxLDE0IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZURvdWIKIAogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSogbm9kZSwgTm9kZSogYnJhbmNo
Tm9kZSkKIHsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9ja0lu
ZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxv
Y2tJbmRleCgpOworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9j
aygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9j
aygpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9u
ID0gTWFjcm9Bc3NlbWJsZXI6OkVxdWFsOwogICAgIAogICAgIGlmICh0YWtlbiA9PSBuZXh0Qmxv
Y2soKSkgewogICAgICAgICBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWw7Ci0g
ICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CisgICAgICAgIEJhc2ljQmxvY2sqIHRtcCA9
IHRha2VuOwogICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwogICAgICAgICBub3RUYWtlbiA9IHRt
cDsKICAgICB9CkBAIC0xNDY5LDE0ICsxNDY5LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQZWVwSG9sZU9iamUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xl
SW50ZWdlckJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBKSVRDb21waWxlcjo6
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9
IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4g
PSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtl
biA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9
IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKIAogICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1
Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgogICAgIC8vIElmIHRha2VuIGlz
IG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29u
ZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCiAgICAgaWYgKHRha2VuID09IG5leHRCbG9j
aygpKSB7CiAgICAgICAgIGNvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjppbnZlcnQoY29uZGl0aW9u
KTsKLSAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgQmFzaWNCbG9jayog
dG1wID0gdGFrZW47CiAgICAgICAgIHRha2VuID0gbm90VGFrZW47CiAgICAgICAgIG5vdFRha2Vu
ID0gdG1wOwogICAgIH0KQEAgLTE1MDQsNyArMTUwNCw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZUJyYW4KICAgICAvLyBGdXNlZCBjb21wYXJlICYgYnJhbmNoLgogICAg
IHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAg
ICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewotICAgICAgICBOb2RlKiBi
cmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5k
ZXhJbkJsb2NrKTsKKyAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1fYmxvY2stPmF0KGJyYW5j
aEluZGV4SW5CbG9jayk7CiAKICAgICAgICAgLy8gZGV0ZWN0UGVlcEhvbGVCcmFuY2ggY3VycmVu
dGx5IG9ubHkgcGVybWl0cyB0aGUgYnJhbmNoIHRvIGJlIHRoZSB2ZXJ5IG5leHQgbm9kZSwKICAg
ICAgICAgLy8gc28gY2FuIGJlIG5vIGludGVydmVuaW5nIG5vZGVzIHRvIGFsc28gcmVmZXJlbmNl
IHRoZSBjb21wYXJlLiAKQEAgLTE2MjQsMTQgKzE2MjQsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6YmFpbCgpCiAgICAgY2xlYXJHZW5lcmF0aW9uSW5mbygpOwogfQogCi12b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smIGJsb2NrKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUN1cnJlbnRCbG9jaygpCiB7CiAgICAgQVNTRVJUKG1fY29tcGlsZU9rYXkpOwogICAg
IAotICAgIGlmICghYmxvY2suaXNSZWFjaGFibGUpCisgICAgaWYgKCFtX2Jsb2NrKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgaWYgKCFibG9jay5jZmFIYXNWaXNpdGVkKSB7CisgICAgQVNT
RVJUKG1fYmxvY2stPmlzUmVhY2hhYmxlKTsKKyAgICAKKyAgICBpZiAoIW1fYmxvY2stPmNmYUhh
c1Zpc2l0ZWQpIHsKICAgICAgICAgLy8gRG9uJ3QgZ2VuZXJhdGUgY29kZSBmb3IgYmFzaWMgYmxv
Y2tzIHRoYXQgYXJlIHVucmVhY2hhYmxlIGFjY29yZGluZyB0byBDRkEuCiAgICAgICAgIC8vIEJ1
dCB0byBiZSBzdXJlIHRoYXQgbm9ib2R5IGhhcyBnZW5lcmF0ZWQgYSBqdW1wIHRvIHRoaXMgYmxv
Y2ssIGRyb3AgaW4gYQogICAgICAgICAvLyBicmVha3BvaW50IGhlcmUuCkBAIC0xNjM5LDIwICsx
NjQxLDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1faml0LmJsb2NrSGVhZHMoKVttX2Jsb2NrXSA9IG1f
aml0LmxhYmVsKCk7CisgICAgbV9qaXQuYmxvY2tIZWFkcygpW21fYmxvY2stPmluZGV4XSA9IG1f
aml0LmxhYmVsKCk7CiAjaWYgREZHX0VOQUJMRShKSVRfQlJFQUtfT05fRVZFUllfQkxPQ0spCiAg
ICAgbV9qaXQuYnJlYWtwb2ludCgpOwogI2VuZGlmCiAgICAgCiAjaWYgREZHX0VOQUJMRShERUJV
R19WRVJCT1NFKQotICAgIGRhdGFMb2dGKCJTZXR0aW5nIHVwIHN0YXRlIGZvciBibG9jayAjJXU6
ICIsIG1fYmxvY2spOworICAgIGRhdGFMb2coIlNldHRpbmcgdXAgc3RhdGUgZm9yIGJsb2NrICIs
ICptX2Jsb2NrLCAiOiAiKTsKICNlbmRpZgogICAgIAogICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRM
b2coVmFyaWFibGVFdmVudDo6cmVzZXQoKSk7CiAgICAgCiAgICAgbV9qaXQuaml0QXNzZXJ0SGFz
VmFsaWRDYWxsRnJhbWUoKTsKIAotICAgIEFTU0VSVChtX2FyZ3VtZW50cy5zaXplKCkgPT0gYmxv
Y2sudmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCkpOworICAgIEFTU0VSVChtX2Fy
Z3VtZW50cy5zaXplKCkgPT0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1l
bnRzKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShWYWx1
ZUluSlNTdGFjayk7CiAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gdmFsdWVTb3VyY2U7CkBAIC0x
NjYwLDExICsxNjYyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9j
ayYKICAgICB9CiAgICAgCiAgICAgbV9zdGF0ZS5yZXNldCgpOwotICAgIG1fc3RhdGUuYmVnaW5C
YXNpY0Jsb2NrKCZibG9jayk7CisgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2sobV9ibG9jayk7
CiAgICAgCi0gICAgQVNTRVJUKG1fdmFyaWFibGVzLnNpemUoKSA9PSBibG9jay52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgQVNTRVJUKG1fdmFyaWFibGVzLnNpemUoKSA9
PSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkgewotICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2sudmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOworICAgICAgICBOb2RlKiBu
b2RlID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwogICAgICAgICBWYWx1ZVNv
dXJjZSB2YWx1ZVNvdXJjZTsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgdmFsdWVT
b3VyY2UgPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwpAQCAtMTY5MCw4ICsxNjkyLDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgIGRhdGFMb2dGKCJc
biIpOwogI2VuZGlmCiAKLSAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRleEluQmxv
Y2sgPCBibG9jay5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKLSAgICAgICAgbV9jdXJyZW50
Tm9kZSA9IGJsb2NrW21faW5kZXhJbkJsb2NrXTsKKyAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0g
MDsgbV9pbmRleEluQmxvY2sgPCBtX2Jsb2NrLT5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsK
KyAgICAgICAgbV9jdXJyZW50Tm9kZSA9IG1fYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKICAg
ICAgICAgCiAgICAgICAgIC8vIFdlIG1heSBoYXZlIGhpcyBhIGNvbnRyYWRpY3Rpb24gdGhhdCB0
aGUgQ0ZBIHdhcyBhd2FyZSBvZiBidXQgdGhhdCB0aGUgSklUCiAgICAgICAgIC8vIGRpZG4ndCBj
YXVzZSBkaXJlY3RseS4KQEAgLTE4NzEsMTEgKzE4NzMsMTAgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSgpCiAgICAgY2hlY2tBcmd1bWVudFR5cGVzKCk7CiAKICAgICBBU1NFUlQoIW1f
Y3VycmVudE5vZGUpOwotICAgIGZvciAobV9ibG9jayA9IDA7IG1fYmxvY2sgPCBtX2ppdC5ncmFw
aCgpLm1fYmxvY2tzLnNpemUoKTsgKyttX2Jsb2NrKSB7Ci0gICAgICAgIG1faml0LnNldEZvckJs
b2NrKG1fYmxvY2spOwotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1faml0LmdyYXBoKCku
bV9ibG9ja3NbbV9ibG9ja10uZ2V0KCk7Ci0gICAgICAgIGlmIChibG9jaykKLSAgICAgICAgICAg
IGNvbXBpbGUoKmJsb2NrKTsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBtX2ppdC5ncmFwaCgpLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAg
ICAgICAgbV9qaXQuc2V0Rm9yQmxvY2tJbmRleChibG9ja0luZGV4KTsKKyAgICAgICAgbV9ibG9j
ayA9IG1faml0LmdyYXBoKCkuYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIGNvbXBpbGVDdXJy
ZW50QmxvY2soKTsKICAgICB9CiAgICAgbGlua0JyYW5jaGVzKCk7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC0xODgzLDggKzE4ODQsOCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKCkKIAog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y3JlYXRlT1NSRW50cmllcygpCiB7Ci0gICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nr
cy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
aml0LmdyYXBoKCkubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgoKS5udW1CbG9ja3Mo
KTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9qaXQuZ3Jh
cGgoKS5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKQEAgLTE4OTksOCAr
MTkwMCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNyZWF0ZU9TUkVudHJpZXMoKQogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bGlua09TUkVudHJpZXMoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKIHsK
ICAgICB1bnNpZ25lZCBvc3JFbnRyeUluZGV4ID0gMDsKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKTsg
KytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9qaXQuZ3JhcGgo
KS5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2ppdC5ncmFwaCgpLm51bUJsb2NrcygpOyArK2Jsb2Nr
SW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJsb2Nr
KGJsb2NrSW5kZXgpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQpAQCAtMzY2MywxNiArMzY2NCwxNiBA
QCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXFGb3JDCiAgICAgCiAgICAgdW5z
aWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICBp
ZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgIE5vZGUqIGJyYW5j
aE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleElu
QmxvY2spOwotICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9j
a0luZGV4KCk7Ci0gICAgICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RU
YWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1fYmxvY2stPmF0
KGJyYW5jaEluZGV4SW5CbG9jayk7CisgICAgICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNo
Tm9kZS0+dGFrZW5CbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5j
aE5vZGUtPm5vdFRha2VuQmxvY2soKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OkVxdWFsOwogICAgICAgICAK
ICAgICAgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFr
ZW4gYmxvY2suCiAgICAgICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRo
IG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRo
cm91Z2guCiAgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICAgICAg
Y29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsOwotICAgICAgICAgICAgQmxvY2tJ
bmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRtcCA9IHRha2VuOwog
ICAgICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKICAgICAgICAgICAgIG5vdFRha2VuID0gdG1w
OwogICAgICAgICB9CkBAIC0zNzM1LDcgKzM3MzYsNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlU3RyaWN0RXEoTm9kCiAgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICB1bnNpZ25l
ZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgICAgICBp
ZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICBOb2RlKiBi
cmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5k
ZXhJbkJsb2NrKTsKKyAgICAgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2Jsb2NrLT5hdChi
cmFuY2hJbmRleEluQmxvY2spOwogICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJy
YW5jaChub2RlLCBicmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwpOwogICAgICAgICAg
ICAgdXNlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIHVzZShub2RlLT5jaGlsZDIoKSk7
CkBAIC0zNzUwLDcgKzM3NTEsNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0
RXEoTm9kCiAgICAgY2FzZSBOdW1iZXJVc2U6IHsKICAgICAgICAgdW5zaWduZWQgYnJhbmNoSW5k
ZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICAgICAgaWYgKGJyYW5jaElu
ZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewotICAgICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9
IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7
CisgICAgICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9ibG9jay0+YXQoYnJhbmNoSW5kZXhJ
bkJsb2NrKTsKICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChub2RlLCBi
cmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpOwogICAgICAgICAgICAgdXNl
KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIHVzZShub2RlLT5jaGlsZDIoKSk7CkBAIC0z
Nzc1LDcgKzM3NzYsNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXEoTm9k
CiAgICAgY2FzZSBPYmplY3RVc2U6IHsKICAgICAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJs
b2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICAgICAgaWYgKGJyYW5jaEluZGV4SW5C
bG9jayAhPSBVSU5UX01BWCkgewotICAgICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0
LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CisgICAg
ICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9ibG9jay0+YXQoYnJhbmNoSW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJyYW5j
aE5vZGUpOwogICAgICAgICAgICAgdXNlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIHVz
ZShub2RlLT5jaGlsZDIoKSk7CkBAIC00MTMwLDE2ICs0MTMxLDE2IEBAIGJvb2wgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVSZWdFeHBFeGVjKE4KICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxv
Y2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sg
PT0gVUlOVF9NQVgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBOb2RlKiBicmFuY2hOb2Rl
ID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2Nr
KTsKKyAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9ibG9jay0+YXQoYnJhbmNoSW5kZXhJbkJsb2Nr
KTsKICAgICBBU1NFUlQobm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOwogCi0gICAgQmxv
Y2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2Nr
SW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBC
YXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Js
b2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKICAgICAKICAgICBi
b29sIGludmVydCA9IGZhbHNlOwogICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAg
ICAgICBpbnZlcnQgPSB0cnVlOwotICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAg
ICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsKICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsK
ICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgfQpAQCAtNTE3Niw3ICs1MTc3LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaChOb2RlKiBubwogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFkZEJyYW5jaChjb25z
dCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXAsIEJsb2NrSW5kZXggZGVzdGluYXRpb24p
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjphZGRCcmFuY2goY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0JiBqdW1wLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikKIHsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBqdW1wLmp1bXBzKCkuc2l6ZSgpOyBpLS07KQogICAgICAgICBhZGRCcmFuY2goanVt
cC5qdW1wcygpW2ldLCBkZXN0aW5hdGlvbik7CkBAIC01MTg2LDcgKzUxODcsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpsaW5rQnJhbmNoZXMoKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9icmFuY2hlcy5zaXplKCk7ICsraSkgewogICAgICAgICBCcmFuY2hSZWNvcmQmIGJyYW5j
aCA9IG1fYnJhbmNoZXNbaV07Ci0gICAgICAgIGJyYW5jaC5qdW1wLmxpbmtUbyhtX2ppdC5ibG9j
a0hlYWRzKClbYnJhbmNoLmRlc3RpbmF0aW9uXSwgJm1faml0KTsKKyAgICAgICAgYnJhbmNoLmp1
bXAubGlua1RvKG1faml0LmJsb2NrSGVhZHMoKVticmFuY2guZGVzdGluYXRpb24tPmluZGV4XSwg
Jm1faml0KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDEy
ICsxMTksMTIgQEAgcHVibGljOgogICAgIHZvaWQgY3JlYXRlT1NSRW50cmllcygpOwogICAgIHZv
aWQgbGlua09TUkVudHJpZXMoTGlua0J1ZmZlciYpOwogCi0gICAgQmxvY2tJbmRleCBuZXh0Qmxv
Y2soKQorICAgIEJhc2ljQmxvY2sqIG5leHRCbG9jaygpCiAgICAgewotICAgICAgICBmb3IgKEJs
b2NrSW5kZXggcmVzdWx0ID0gbV9ibG9jayArIDE7IDsgcmVzdWx0KyspIHsKLSAgICAgICAgICAg
IGlmIChyZXN1bHQgPj0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIE5vQmxvY2s7Ci0gICAgICAgICAgICBpZiAobV9qaXQuZ3JhcGgoKS5tX2Js
b2Nrc1tyZXN1bHRdKQorICAgICAgICBmb3IgKEJsb2NrSW5kZXggcmVzdWx0SW5kZXggPSBtX2Js
b2NrLT5pbmRleCArIDE7IDsgcmVzdWx0SW5kZXgrKykgeworICAgICAgICAgICAgaWYgKHJlc3Vs
dEluZGV4ID49IG1faml0LmdyYXBoKCkubnVtQmxvY2tzKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICBpZiAoQmFzaWNCbG9jayogcmVzdWx0ID0gbV9qaXQuZ3JhcGgo
KS5ibG9jayhyZXN1bHRJbmRleCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICAgICAgfQogICAgIH0KQEAgLTM0NCw3ICszNDQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21w
aWxlKE5vZGUqKTsKICAgICB2b2lkIG5vdGljZU9TUkJpcnRoKE5vZGUqKTsKICAgICB2b2lkIGJh
aWwoKTsKLSAgICB2b2lkIGNvbXBpbGUoQmFzaWNCbG9jayYpOworICAgIHZvaWQgY29tcGlsZUN1
cnJlbnRCbG9jaygpOwogCiAgICAgdm9pZCBjaGVja0FyZ3VtZW50VHlwZXMoKTsKIApAQCAtNzA0
LDE4ICs3MDQsMTYgQEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBi
cmFuY2ggbm9kZSBpZiBwZWVwaG9sZSBpcyBva2F5LCBVSU5UX01BWCBvdGhlcndpc2UuCiAgICAg
dW5zaWduZWQgZGV0ZWN0UGVlcEhvbGVCcmFuY2goKQogICAgIHsKLSAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLmdldCgpOwotCiAgICAg
ICAgIC8vIENoZWNrIHRoYXQgbm8gaW50ZXJ2ZW5pbmcgbm9kZXMgd2lsbCBiZSBnZW5lcmF0ZWQu
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBtX2luZGV4SW5CbG9jayArIDE7IGluZGV4
IDwgYmxvY2stPnNpemUoKSAtIDE7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+YXQoaW5kZXgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gbV9pbmRl
eEluQmxvY2sgKyAxOyBpbmRleCA8IG1fYmxvY2stPnNpemUoKSAtIDE7ICsraW5kZXgpIHsKKyAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChpbmRleCk7CiAgICAgICAgICAgICBp
ZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gVUlOVF9N
QVg7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDaGVjayBpZiB0aGUgbGFzdE5vZGUgaXMgYSBi
cmFuY2ggb24gdGhpcyBub2RlLgotICAgICAgICBOb2RlKiBsYXN0Tm9kZSA9IGJsb2NrLT5sYXN0
KCk7Ci0gICAgICAgIHJldHVybiBsYXN0Tm9kZS0+b3AoKSA9PSBCcmFuY2ggJiYgbGFzdE5vZGUt
PmNoaWxkMSgpID09IG1fY3VycmVudE5vZGUgPyBibG9jay0+c2l6ZSgpIC0gMSA6IFVJTlRfTUFY
OworICAgICAgICBOb2RlKiBsYXN0Tm9kZSA9IG1fYmxvY2stPmxhc3QoKTsKKyAgICAgICAgcmV0
dXJuIGxhc3ROb2RlLT5vcCgpID09IEJyYW5jaCAmJiBsYXN0Tm9kZS0+Y2hpbGQxKCkgPT0gbV9j
dXJyZW50Tm9kZSA/IG1fYmxvY2stPnNpemUoKSAtIDEgOiBVSU5UX01BWDsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBjb21waWxlTW92SGludChOb2RlKik7CkBAIC0xNzM4LDc0ICsxNzM2LDc0IEBA
IHB1YmxpYzoKICAgICB9CiAjZW5kaWYKICAgICAKLSAgICB2b2lkIGJyYW5jaERvdWJsZShKSVRD
b21waWxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmQsIEZQUlJlZyBsZWZ0LCBGUFJSZWcgcmlnaHQs
IEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgdm9pZCBicmFuY2hEb3VibGUoSklUQ29tcGls
ZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kLCBGUFJSZWcgbGVmdCwgRlBSUmVnIHJpZ2h0LCBCYXNp
Y0Jsb2NrKiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9q
aXQuYnJhbmNoRG91YmxlKGNvbmQsIGxlZnQsIHJpZ2h0KSwgZGVzdGluYXRpb24pOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGJyYW5jaERvdWJsZU5vblplcm8oRlBSUmVnIHZhbHVlLCBGUFJSZWcg
c2NyYXRjaCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB2b2lkIGJyYW5jaERvdWJsZU5v
blplcm8oRlBSUmVnIHZhbHVlLCBGUFJSZWcgc2NyYXRjaCwgQmFzaWNCbG9jayogZGVzdGluYXRp
b24pCiAgICAgewogICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaERvdWJsZU5v
blplcm8odmFsdWUsIHNjcmF0Y2gpLCBkZXN0aW5hdGlvbik7CiAgICAgfQogICAgIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci0gICAgdm9pZCBicmFuY2gzMihKSVRDb21w
aWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBUIGxlZnQsIFUgcmlnaHQsIEJsb2NrSW5k
ZXggZGVzdGluYXRpb24pCisgICAgdm9pZCBicmFuY2gzMihKSVRDb21waWxlcjo6UmVsYXRpb25h
bENvbmRpdGlvbiBjb25kLCBUIGxlZnQsIFUgcmlnaHQsIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9u
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25kLCBs
ZWZ0LCByaWdodCksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4KLSAgICB2b2lkIGJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6
UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUsIFUgbWFzaywgQmxvY2tJbmRleCBkZXN0aW5h
dGlvbikKKyAgICB2b2lkIGJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9u
IGNvbmQsIFQgdmFsdWUsIFUgbWFzaywgQmFzaWNCbG9jayogZGVzdGluYXRpb24pCiAgICAgewog
ICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3QzMihjb25kLCB2YWx1ZSwg
bWFzayksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLSAgICB2b2lkIGJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNv
bmQsIFQgdmFsdWUsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgdm9pZCBicmFuY2hUZXN0
MzIoSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBCYXNpY0Jsb2Nr
KiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJh
bmNoVGVzdDMyKGNvbmQsIHZhbHVlKSwgZGVzdGluYXRpb24pOwogICAgIH0KICAgICAKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci0gICAg
dm9pZCBicmFuY2g2NChKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBUIGxl
ZnQsIFUgcmlnaHQsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgdm9pZCBicmFuY2g2NChK
SVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBUIGxlZnQsIFUgcmlnaHQsIEJh
c2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaCht
X2ppdC5icmFuY2g2NChjb25kLCBsZWZ0LCByaWdodCksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAj
ZW5kaWYKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotICAgIHZv
aWQgYnJhbmNoOChKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBUIGxlZnQs
IFUgcmlnaHQsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgdm9pZCBicmFuY2g4KEpJVENv
bXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFQgbGVmdCwgVSByaWdodCwgQmFzaWNC
bG9jayogZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0
LmJyYW5jaDgoY29uZCwgbGVmdCwgcmlnaHQpLCBkZXN0aW5hdGlvbik7CiAgICAgfQogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci0gICAgdm9pZCBicmFuY2hQdHIo
SklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgVCBsZWZ0LCBVIHJpZ2h0LCBC
bG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAgIHZvaWQgYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFQgbGVmdCwgVSByaWdodCwgQmFzaWNCbG9jayogZGVz
dGluYXRpb24pCiAgICAgewogICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0
cihjb25kLCBsZWZ0LCByaWdodCksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAgCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLSAgICB2b2lkIGJyYW5jaFRlc3RQdHIoSklU
Q29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBVIG1hc2ssIEJsb2NrSW5k
ZXggZGVzdGluYXRpb24pCisgICAgdm9pZCBicmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpSZXN1
bHRDb25kaXRpb24gY29uZCwgVCB2YWx1ZSwgVSBtYXNrLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlv
bikKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdFB0cihj
b25kLCB2YWx1ZSwgbWFzayksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIGJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6OlJlc3Vs
dENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAgIHZv
aWQgYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFs
dWUsIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZEJy
YW5jaChtX2ppdC5icmFuY2hUZXN0UHRyKGNvbmQsIHZhbHVlKSwgZGVzdGluYXRpb24pOwogICAg
IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotICAgIHZvaWQg
YnJhbmNoVGVzdDgoSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBV
IG1hc2ssIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgdm9pZCBicmFuY2hUZXN0OChKSVRD
b21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUsIFUgbWFzaywgQmFzaWNCbG9j
ayogZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJy
YW5jaFRlc3Q4KGNvbmQsIHZhbHVlLCBtYXNrKSwgZGVzdGluYXRpb24pOwogICAgIH0KICAgICAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgYnJhbmNoVGVzdDgoSklUQ29tcGls
ZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9u
KQorICAgIHZvaWQgYnJhbmNoVGVzdDgoSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25k
LCBUIHZhbHVlLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIHJldHVy
biBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDgoY29uZCwgdmFsdWUpLCBkZXN0aW5hdGlvbik7
CiAgICAgfQpAQCAtMTgxNCw3ICsxODEyLDcgQEAgcHVibGljOgogICAgICAgICBBdEZhbGxUaHJv
dWdoUG9pbnQsCiAgICAgICAgIEZvcmNlSnVtcAogICAgIH07Ci0gICAgdm9pZCBqdW1wKEJsb2Nr
SW5kZXggZGVzdGluYXRpb24sIEZhbGxUaHJvdWdoTW9kZSBmYWxsVGhyb3VnaE1vZGUgPSBBdEZh
bGxUaHJvdWdoUG9pbnQpCisgICAgdm9pZCBqdW1wKEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uLCBG
YWxsVGhyb3VnaE1vZGUgZmFsbFRocm91Z2hNb2RlID0gQXRGYWxsVGhyb3VnaFBvaW50KQogICAg
IHsKICAgICAgICAgaWYgKGRlc3RpbmF0aW9uID09IG5leHRCbG9jaygpCiAgICAgICAgICAgICAm
JiBmYWxsVGhyb3VnaE1vZGUgPT0gQXRGYWxsVGhyb3VnaFBvaW50KQpAQCAtMTgyMiwxOSArMTgy
MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIGRlc3RpbmF0
aW9uKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRCcmFuY2goY29uc3QgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAmIGp1bXAsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgdm9pZCBhZGRCcmFu
Y2goY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIGp1bXAsIEJhc2ljQmxvY2sqIGRlc3RpbmF0
aW9uKQogICAgIHsKICAgICAgICAgbV9icmFuY2hlcy5hcHBlbmQoQnJhbmNoUmVjb3JkKGp1bXAs
IGRlc3RpbmF0aW9uKSk7CiAgICAgfQotICAgIHZvaWQgYWRkQnJhbmNoKGNvbnN0IE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCYganVtcCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbik7CisgICAgdm9p
ZCBhZGRCcmFuY2goY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wLCBCYXNpY0Js
b2NrKiBkZXN0aW5hdGlvbik7CiAKICAgICB2b2lkIGxpbmtCcmFuY2hlcygpOwogCi0gICAgQmFz
aWNCbG9jayogYmxvY2soKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faml0LmdyYXBoKCkubV9i
bG9ja3NbbV9ibG9ja10uZ2V0KCk7Ci0gICAgfQotCiAjaWZuZGVmIE5ERUJVRwogICAgIHZvaWQg
ZHVtcChjb25zdCBjaGFyKiBsYWJlbCA9IDApOwogI2VuZGlmCkBAIC0xODcyLDEzICsxODY1LDEz
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVTdHJpbmdFcXVhbGl0eShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlU3RyaW5nSWRl
bnRFcXVhbGl0eShOb2RlKik7Ci0gICAgdm9pZCBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChFZGdl
IHZhbHVlLCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuKTsKKyAgICB2b2lk
IGVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2UgdmFsdWUsIEJhc2ljQmxvY2sqIHRha2VuLCBC
YXNpY0Jsb2NrKiBub3RUYWtlbik7CiAgICAgdm9pZCBlbWl0QnJhbmNoKE5vZGUqKTsKICAgICAK
ICAgICBzdHJ1Y3QgU3RyaW5nU3dpdGNoQ2FzZSB7CiAgICAgICAgIFN0cmluZ1N3aXRjaENhc2Uo
KSB7IH0KICAgICAgICAgCi0gICAgICAgIFN0cmluZ1N3aXRjaENhc2UoU3RyaW5nSW1wbCogc3Ry
aW5nLCBCbG9ja0luZGV4IHRhcmdldCkKKyAgICAgICAgU3RyaW5nU3dpdGNoQ2FzZShTdHJpbmdJ
bXBsKiBzdHJpbmcsIEJhc2ljQmxvY2sqIHRhcmdldCkKICAgICAgICAgICAgIDogc3RyaW5nKHN0
cmluZykKICAgICAgICAgICAgICwgdGFyZ2V0KHRhcmdldCkKICAgICAgICAgewpAQCAtMTg4Nyw3
ICsxODgwLDcgQEAgcHVibGljOgogICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBTdHJpbmdT
d2l0Y2hDYXNlJiBvdGhlcikgY29uc3Q7CiAgICAgICAgIAogICAgICAgICBTdHJpbmdJbXBsKiBz
dHJpbmc7Ci0gICAgICAgIEJsb2NrSW5kZXggdGFyZ2V0OworICAgICAgICBCYXNpY0Jsb2NrKiB0
YXJnZXQ7CiAgICAgfTsKICAgICAKICAgICB2b2lkIGVtaXRTd2l0Y2hJbnRKdW1wKFN3aXRjaERh
dGEqLCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBzY3JhdGNoKTsKQEAgLTIxNTIsNyArMjE0NSw3IEBA
IHB1YmxpYzoKICAgICBKSVRDb21waWxlciYgbV9qaXQ7CiAKICAgICAvLyBUaGUgY3VycmVudCBu
b2RlIGJlaW5nIGdlbmVyYXRlZC4KLSAgICBCbG9ja0luZGV4IG1fYmxvY2s7CisgICAgQmFzaWNC
bG9jayogbV9ibG9jazsKICAgICBOb2RlKiBtX2N1cnJlbnROb2RlOwogICAgIFNwZWN1bGF0aW9u
RGlyZWN0aW9uIG1fc3BlY3VsYXRpb25EaXJlY3Rpb247CiAgICAgYm9vbCBtX2NhbkV4aXQ7CkBA
IC0yMTY1LDE0ICsyMTU4LDE0IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6
OkxhYmVsPiBtX29zckVudHJ5SGVhZHM7CiAgICAgCiAgICAgc3RydWN0IEJyYW5jaFJlY29yZCB7
Ci0gICAgICAgIEJyYW5jaFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wLCBCbG9ja0lu
ZGV4IGRlc3RpbmF0aW9uKQorICAgICAgICBCcmFuY2hSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6Okp1
bXAganVtcCwgQmFzaWNCbG9jayogZGVzdGluYXRpb24pCiAgICAgICAgICAgICA6IGp1bXAoanVt
cCkKICAgICAgICAgICAgICwgZGVzdGluYXRpb24oZGVzdGluYXRpb24pCiAgICAgICAgIHsKICAg
ICAgICAgfQogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXA7Ci0gICAgICAgIEJs
b2NrSW5kZXggZGVzdGluYXRpb247CisgICAgICAgIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uOwog
ICAgIH07CiAgICAgVmVjdG9yPEJyYW5jaFJlY29yZCwgOD4gbV9icmFuY2hlczsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0
aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDQsOCAr
MTA0LDggQEAgcHVibGljOgogCiAgICAgICAgIC8vIFBsYWNlIENoZWNrU3RydWN0dXJlJ3MgYXQg
U2V0TG9jYWwgc2l0ZXMuCiAgICAgICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9ncmFw
aCk7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2Nr
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5C
bG9jaykgewpAQCAtMjE3LDggKzIxNyw4IEBAIHByaXZhdGU6CiAgICAgLy8gY2hlY2tzLiBGb3Ig
bm93LCBvbmx5IGNvbnNpZGVyIG1vbm9tb3JwaGljIHN0cnVjdHVyZSBjaGVja3MgKG9uZSBzdHJ1
Y3R1cmUpLgogICAgIHZvaWQgaWRlbnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MoKQogICAg
IHsgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
KyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJs
b2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4
SW5CbG9jaykgewpAQCAtMzIxLDggKzMyMSw4IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgIHZv
aWQgaWRlbnRpZnlSZWR1bmRhbnRBcnJheUNoZWNrcygpCiAgICAgewotICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxv
Y2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5k
ZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKQEAgLTQ1MSw4ICs0
NTEsOCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlQ2hlY2s+CiAgICAg
dm9pZCBkaXNhYmxlSG9pc3RpbmdBY3Jvc3NPU1JFbnRyaWVzKCkKICAgICB7Ci0gICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsg
KytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
YmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VW5pZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDggQEAgcHVi
bGljOgogICAgICAgICBBU1NFUlQobV9ncmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUgPT0gTG9jYWxs
eVVuaWZpZWQpOwogICAgICAgICAKICAgICAgICAgLy8gRW5zdXJlIHRoYXQgYWxsIFBoaSBmdW5j
dGlvbnMgYXJlIHVuaWZpZWQuCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBi
bG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
YmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24g
MTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDIyICs3NiwyMiBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGluIHJl
bGVhc2UgYnVpbGRzLgogICAgICAgICAKICAgICAgICAgLy8gVmFsaWRhdGUgdGhhdCBhbGwgbG9j
YWwgdmFyaWFibGVzIGF0IHRoZSBoZWFkIG9mIHRoZSByb290IGJsb2NrIGFyZSBkZWFkLgotICAg
ICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKTsKKyAgICAg
ICAgQmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGguYmxvY2soMCk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCByb290LT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsg
KytpKQogICAgICAgICAgICAgVl9FUVVBTCgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihp
KSwgMCksIHN0YXRpY19jYXN0PE5vZGUqPigwKSwgcm9vdC0+dmFyaWFibGVzQXRIZWFkLmxvY2Fs
KGkpKTsKICAgICAgICAgCiAgICAgICAgIC8vIFZhbGlkYXRlIHJlZiBjb3VudHMgYW5kIHVzZXMu
CiAgICAgICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBteVJlZkNvdW50czsKLSAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Js
b2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nrcygp
OyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5p
c1JlYWNoYWJsZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPm51bU5vZGVzKCk7ICsraSkKICAgICAgICAgICAgICAg
ICBteVJlZkNvdW50cy5hZGQoYmxvY2stPm5vZGUoaSksIDApOwogICAgICAgICB9CiAgICAgICAg
IEhhc2hTZXQ8Tm9kZSo+IGFjY2VwdGFibGVOb2RlczsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsr
YmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1f
YmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5pc1JlYWNoYWJsZSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmxvY2stPm51bU5vZGVzKCk7ICsraSkgewpAQCAtMTU3LDggKzE1Nyw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyAr
K2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2sgfHwgIWJsb2NrLT5pc1Jl
YWNoYWJsZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIApAQCAtMjI1
LDE0ICsyMjUsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBtdXN0
IGV4aXN0IGEgcHJlZGVjZXNzb3IgYmxvY2sgdGhhdCBoYXMgdGhpcyBub2RlIGluZGV4IGluCiAg
ICAgICAgICAgICAgICAgICAgIC8vIGl0cyB0YWlsIHZhcmlhYmxlcy4KICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGsgPSAwOyBrIDwgYmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmV2QmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW2Jsb2NrLT5tX3ByZWRlY2Vzc29yc1trXV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgoQmxvY2ssIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSksIHByZXZCbG9j
ayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoQmxvY2ssIGJsb2NrLT5tX3By
ZWRlY2Vzc29yc1trXSksIHByZXZCbG9jay0+aXNSZWFjaGFibGUpOworICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7
ICsraykgeworICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJldkJsb2NrID0g
YmxvY2stPnByZWRlY2Vzc29yc1trXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrLT5pc1Jl
YWNoYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZC
bG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGlzIG5vdCByZWZlcnJpbmcgdG8gKnRoaXMq
IGJsb2NrIHRoZW4gYWxsIHByZWRlY2Vzc29ycwogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
bXVzdCBoYXZlIHRoYXQgbG9jYWwgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKGxvY2FsLCBibG9ja0luZGV4LCBCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNzb3Jz
W2tdKSwgcHJldk5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2Fs
LCBibG9jaywgYmxvY2stPnByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAocHJldk5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNo
OgpAQCAtMjQzLDExICsyNDMsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5v
ZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2st
PnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByZXZOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9k
ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2FsLCBibG9jay0+cHJlZGVjZXNz
b3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUt
Pm9wKCkgPT0gU2V0TG9jYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9k
ZS0+b3AoKSA9PSBNb3ZIaW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5v
ZGUtPm9wKCkgPT0gTW92SGludEFuZENoZWNrCkBAIC0yNTksNyArMjU5LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBpdCBjYW5ub3Qg
cmVmZXIgaW50byB0aGlzIGJsb2NrLgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+
aXNJbkJsb2NrKGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwgIXByZXZCbG9jay0+
aXNJbkJsb2NrKGVkZ2Uubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBlZGdlKSwg
Zm91bmQpOwpAQCAtMjc0LDE3ICsyNzQsMTcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5u
dW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBWQUxJREFURSgoc3Rh
dGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihhcmd1bWVudFRvT3BlcmFuZChpKSksIGJsb2NrSW5k
ZXgpLCAhYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLmFyZ3VtZW50KGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oYXJndW1lbnRU
b09wZXJhbmQoaSkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkp
IHx8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSktPmhhc1ZhcmlhYmxlQWNjZXNz
RGF0YSgpKTsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRD
UFMpCi0gICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVn
aXN0ZXI+KGFyZ3VtZW50VG9PcGVyYW5kKGkpKSwgYmxvY2tJbmRleCksICFibG9jay0+dmFyaWFi
bGVzQXRUYWlsLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQo
aSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oYXJndW1lbnRUb09wZXJhbmQoaSkpLCBi
bG9jayksICFibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwuYXJndW1lbnQoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5hcmd1bWVudChp
KSA9IG5vdFNldDsKICAgICAgICAgICAgICAgICBzZXRMb2NhbFBvc2l0aW9ucy5hcmd1bWVudChp
KSA9IG5vdFNldDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihpKSwg
YmxvY2tJbmRleCksICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpIHx8IGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQubG9jYWwoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAg
ICAgICAgICAgICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihpKSwgYmxv
Y2spLCAhYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKSB8fCBibG9jay0+dmFyaWFibGVz
QXRIZWFkLmxvY2FsKGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CiAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKQotICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihpKSwgYmxvY2tJbmRleCks
ICFibG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwubG9jYWwoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaSksIGJsb2NrKSwgIWJs
b2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5s
b2NhbChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOwogCiAgICAgICAgICAgICAgICAgZ2V0
TG9jYWxQb3NpdGlvbnMubG9jYWwoaSkgPSBub3RTZXQ7CiAgICAgICAgICAgICAgICAgc2V0TG9j
YWxQb3NpdGlvbnMubG9jYWwoaSkgPSBub3RTZXQ7CkBAIC0zMjQsNyArMzI0LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICBpZiAoIW15UmVmQ291bnRzLmdldChub2RlKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpCi0gICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobm9kZSwgYmxvY2tJbmRleCksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9j
YWwoKSkgPT0gbm90U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
LCBibG9jayksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPT0gbm90
U2V0KTsKICAgICAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGNhc2UgU2V0TG9jYWw6CkBAIC0zNDYsMTEgKzM0NiwxMSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKICAgICAgICAgICAgICAgICBjaGVj
a09wZXJhbmQoCi0gICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIGdldExvY2FsUG9zaXRp
b25zLCBzZXRMb2NhbFBvc2l0aW9ucywgYXJndW1lbnRUb09wZXJhbmQoaSkpOworICAgICAgICAg
ICAgICAgICAgICBibG9jaywgZ2V0TG9jYWxQb3NpdGlvbnMsIHNldExvY2FsUG9zaXRpb25zLCBh
cmd1bWVudFRvT3BlcmFuZChpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsg
KytpKSB7CiAgICAgICAgICAgICAgICAgY2hlY2tPcGVyYW5kKAotICAgICAgICAgICAgICAgICAg
ICBibG9ja0luZGV4LCBnZXRMb2NhbFBvc2l0aW9ucywgc2V0TG9jYWxQb3NpdGlvbnMsIGkpOwor
ICAgICAgICAgICAgICAgICAgICBibG9jaywgZ2V0TG9jYWxQb3NpdGlvbnMsIHNldExvY2FsUG9z
aXRpb25zLCBpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTM2MCw3ICsz
NjAsNyBAQCBwcml2YXRlOgogICAgIEdyYXBoRHVtcE1vZGUgbV9ncmFwaER1bXBNb2RlOwogICAg
IAogICAgIHZvaWQgY2hlY2tPcGVyYW5kKAotICAgICAgICBCbG9ja0luZGV4IGJsb2NrSW5kZXgs
IE9wZXJhbmRzPHNpemVfdD4mIGdldExvY2FsUG9zaXRpb25zLAorICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jaywgT3BlcmFuZHM8c2l6ZV90PiYgZ2V0TG9jYWxQb3NpdGlvbnMsCiAgICAgICAgIE9w
ZXJhbmRzPHNpemVfdD4mIHNldExvY2FsUG9zaXRpb25zLCBpbnQgb3BlcmFuZCkKICAgICB7CiAg
ICAgICAgIGlmIChnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG9wZXJhbmQpID09IG5vdFNldCkK
QEAgLTM2OCwxMiArMzY4LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0
aW9ucy5vcGVyYW5kKG9wZXJhbmQpID09IG5vdFNldCkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCi0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKLSAgICAgICAgCiAgICAgICAgIFZBTElEQVRFKAogICAgICAgICAgICAg
KGJsb2NrLT5hdChnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG9wZXJhbmQpKSwKICAgICAgICAg
ICAgICBibG9jay0+YXQoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSksCi0gICAg
ICAgICAgICAgYmxvY2tJbmRleCksCisgICAgICAgICAgICAgYmxvY2spLAogICAgICAgICAgICAg
Z2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSA8IHNldExvY2FsUG9zaXRpb25zLm9w
ZXJhbmQob3BlcmFuZCkpOwogICAgIH0KICAgICAKQEAgLTM4MiwxMCArMzgwLDkgQEAgcHJpdmF0
ZToKICAgICAgICAgZGF0YUxvZ0YoIkAldSIsIG5vZGUtPmluZGV4KCkpOwogICAgIH0KICAgICAK
LSAgICBlbnVtIEJsb2NrVGFnIHsgQmxvY2sgfTsKLSAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25D
b250ZXh0KEJsb2NrVGFnLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgdm9pZCByZXBvcnRW
YWxpZGF0aW9uQ29udGV4dChCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIGRhdGFM
b2dGKCJCbG9jayAjJXUiLCBibG9ja0luZGV4KTsKKyAgICAgICAgZGF0YUxvZygiQmxvY2sgIiwg
KmJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChO
b2RlKiBub2RlLCBFZGdlIGVkZ2UpCkBAIC0zOTMsMzkgKzM5MCwzNyBAQCBwcml2YXRlOgogICAg
ICAgICBkYXRhTG9nKG5vZGUsICIgLT4gIiwgZWRnZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
cmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCbG9ja0luZGV4
IGJsb2NrSW5kZXgpCisgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgZGF0YUxvZ0Yo
InIlZCBpbiBCbG9jayAjJXUiLCBsb2NhbCwgYmxvY2tJbmRleCk7CisgICAgICAgIGRhdGFMb2co
InIiLCBzdGF0aWNfY2FzdDxpbnQ+KGxvY2FsKSwgIiBpbiBCbG9jayAiLCAqYmxvY2spOwogICAg
IH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbG9jYWwsIEJsb2NrSW5kZXggc291cmNlQmxvY2tJbmRleCwgQmxvY2tUYWcs
IEJsb2NrSW5kZXggZGVzdGluYXRpb25CbG9ja0luZGV4KQorICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIHNvdXJjZUJsb2NrLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlv
bkJsb2NrKQogICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoInIlZCBpbiBCbG9jayAjJXUgLT4gIyV1
IiwgbG9jYWwsIHNvdXJjZUJsb2NrSW5kZXgsIGRlc3RpbmF0aW9uQmxvY2tJbmRleCk7CisgICAg
ICAgIGRhdGFMb2coInIiLCBzdGF0aWNfY2FzdDxpbnQ+KGxvY2FsKSwgIiBpbiBCbG9jayAiLCAq
c291cmNlQmxvY2ssICIgLT4gIiwgKmRlc3RpbmF0aW9uQmxvY2spOwogICAgIH0KICAgICAKICAg
ICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bG9jYWwsIEJsb2NrSW5kZXggc291cmNlQmxvY2tJbmRleCwgTm9kZSogcHJldk5vZGUpCisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIE5vZGUq
IHByZXZOb2RlKQogICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoIkAldSBmb3IgciVkIGluIEJsb2Nr
ICMldSIsIHByZXZOb2RlLT5pbmRleCgpLCBsb2NhbCwgc291cmNlQmxvY2tJbmRleCk7CisgICAg
ICAgIGRhdGFMb2cocHJldk5vZGUsICIgZm9yIHIiLCBzdGF0aWNfY2FzdDxpbnQ+KGxvY2FsKSwg
IiBpbiBCbG9jayAiLCAqc291cmNlQmxvY2spOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlcG9y
dFZhbGlkYXRpb25Db250ZXh0KAotICAgICAgICBOb2RlKiBub2RlLCBCbG9ja0luZGV4IGJsb2Nr
SW5kZXgpCisgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2RlKiBub2RlLCBCYXNp
Y0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUgaW4gQmxvY2sgIyV1
Iiwgbm9kZS0+aW5kZXgoKSwgYmxvY2tJbmRleCk7CisgICAgICAgIGRhdGFMb2cobm9kZSwgIiBp
biBCbG9jayAiLCAqYmxvY2spOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlcG9ydFZhbGlkYXRp
b25Db250ZXh0KAotICAgICAgICBOb2RlKiBub2RlLCBOb2RlKiBub2RlMiwgQmxvY2tJbmRleCBi
bG9ja0luZGV4KQorICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoTm9kZSogbm9kZSwg
Tm9kZSogbm9kZTIsIEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgZGF0YUxvZ0Yo
IkAldSBhbmQgQCV1IGluIEJsb2NrICMldSIsIG5vZGUtPmluZGV4KCksIG5vZGUyLT5pbmRleCgp
LCBibG9ja0luZGV4KTsKKyAgICAgICAgZGF0YUxvZyhub2RlLCAiIGFuZCAiLCBub2RlMiwgIiBp
biBCbG9jayAiLCAqYmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRp
b25Db250ZXh0KAotICAgICAgICBOb2RlKiBub2RlLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIE5v
ZGUqIGV4cGVjdGVkTm9kZSwgRWRnZSBpbmNvbWluZ0VkZ2UpCisgICAgICAgIE5vZGUqIG5vZGUs
IEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBleHBlY3RlZE5vZGUsIEVkZ2UgaW5jb21pbmdFZGdl
KQogICAgIHsKLSAgICAgICAgZGF0YUxvZyhub2RlLCAiIGluIEJsb2NrICMiLCBibG9ja0luZGV4
LCAiLCBzZWFyY2hpbmcgZm9yICIsIGV4cGVjdGVkTm9kZSwgIiBmcm9tICIsIGluY29taW5nRWRn
ZSk7CisgICAgICAgIGRhdGFMb2cobm9kZSwgIiBpbiBCbG9jayAiLCAqYmxvY2ssICIsIHNlYXJj
aGluZyBmb3IgIiwgZXhwZWN0ZWROb2RlLCAiIGZyb20gIiwgaW5jb21pbmdFZGdlKTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBkdW1wR3JhcGhJZkFwcHJvcHJpYXRlKCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsOCArNTMsOCBAQCBwdWJsaWM6CiAjaWYgREZHX0VOQUJMRShERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBib29sIG5lZWRzTmV3TGluZSA9IGZhbHNlOwog
I2VuZGlmCi0gICAgICAgIGZvciAoc2l6ZV90IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwg
bV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAg
ICAgICBmb3IgKHNpemVfdCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVt
QmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hh
YmxlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsOCArMTc0LDggQEAgaW5saW5l
IGJvb2wgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogCiBib29sIGNhbkNvbXBpbGUoR3JhcGgmIGdy
YXBoKQogewotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3Jh
cGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSBncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBpZiAoIWJs
b2NrKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1MjMz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MSwxMSArNjEsMTEgQEAgcHVibGljOgogICAgICAgICAsIG1fZnRs
U3RhdGUoc3RhdGUpCiAgICAgICAgICwgbV9oZWFwcyhzdGF0ZS5jb250ZXh0KQogICAgICAgICAs
IG1fb3V0KHN0YXRlLmNvbnRleHQpCi0gICAgICAgICwgbV9sb2NhbHNCb29sZWFuKE9wZXJhbmRz
TGlrZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAgICAg
LCBtX2xvY2FsczMyKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlh
Ymxlc0F0SGVhZCkKLSAgICAgICAgLCBtX2xvY2FsczY0KE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3Jh
cGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAgICAgLCBtX2xvY2Fsc0RvdWJs
ZShPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLm1fYmxvY2tzWzBdLT52YXJpYWJsZXNBdEhlYWQp
Ci0gICAgICAgICwgbV92YWx1ZVNvdXJjZXMoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5tX2Js
b2Nrc1swXS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1fbG9jYWxzQm9vbGVhbihPcGVy
YW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCisgICAgICAg
ICwgbV9sb2NhbHMzMihPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJs
ZXNBdEhlYWQpCisgICAgICAgICwgbV9sb2NhbHM2NChPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCisgICAgICAgICwgbV9sb2NhbHNEb3VibGUoT3Bl
cmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAg
ICAsIG1fdmFsdWVTb3VyY2VzKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZh
cmlhYmxlc0F0SGVhZCkKICAgICAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCkpCiAgICAgICAgICwgbV9leGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUp
CiAgICAgICAgICwgbV9zdGF0ZShzdGF0ZS5ncmFwaCkKQEAgLTk5LDIzICs5OSwyMyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fdGFnVHlwZU51bWJlciA9IG1fb3V0LmNvbnN0SW50NjQoVGFnVHlwZU51
bWJlcik7CiAgICAgICAgIG1fdGFnTWFzayA9IG1fb3V0LmNvbnN0SW50NjQoVGFnTWFzayk7CiAg
ICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5k
ZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAg
ICBtX2hpZ2hCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgbV9oaWdoQmxvY2sgPSBt
X2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFtX2hpZ2hCbG9jaykK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG1fYmxvY2tzLmFkZChtX2hp
Z2hCbG9jaywgRlRMX05FV19CTE9DSyhtX291dCwgKCJCbG9jayAjIiwgYmxvY2tJbmRleCkpKTsK
KyAgICAgICAgICAgIG1fYmxvY2tzLmFkZChtX2hpZ2hCbG9jaywgRlRMX05FV19CTE9DSyhtX291
dCwgKCJCbG9jayAiLCAqbV9oaWdoQmxvY2spKSk7CiAgICAgICAgICAgICBhZGRGbHVzaGVkTG9j
YWxPcFJvb3RzKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNsb3NlT3ZlckZsdXNo
ZWRMb2NhbE9wcygpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9hcmd1bWVu
dENoZWNrcywgbG93QmxvY2soMCkpOworICAgICAgICBtX291dC5hcHBlbmRUbyhtX2FyZ3VtZW50
Q2hlY2tzLCBsb3dCbG9jayhtX2dyYXBoLmJsb2NrKDApKSk7CiAKICAgICAgICAgdHJhbnNmZXJB
bmRDaGVja0FyZ3VtZW50cygpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuanVtcChsb3dCbG9j
aygwKSk7CisgICAgICAgIG1fb3V0Lmp1bXAobG93QmxvY2sobV9ncmFwaC5ibG9jaygwKSkpOwog
ICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkKKyAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9j
a3MoKTsgKytibG9ja0luZGV4KQogICAgICAgICAgICAgY29tcGlsZUJsb2NrKGJsb2NrSW5kZXgp
OwogICAgICAgICAKICAgICAgICAgLy8gQW5kIG5vdyBjb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRp
b24gYmxvY2suCkBAIC0yMTQsMTUgKzIxNCwxNSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQg
Y29tcGlsZUJsb2NrKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKICAgICB7Ci0gICAgICAgIG1faGln
aEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgbV9o
aWdoQmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBpZiAoIW1faGln
aEJsb2NrKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxv
Y2sgbG93QmxvY2sgPSBtX2Jsb2Nrcy5nZXQobV9oaWdoQmxvY2spOwogICAgICAgICAKICAgICAg
ICAgbV9uZXh0SGlnaEJsb2NrID0gMDsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IG5leHRCbG9j
a0luZGV4ID0gYmxvY2tJbmRleCArIDE7IG5leHRCbG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCk7ICsrbmV4dEJsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIG1fbmV4dEhpZ2hCbG9j
ayA9IG1fZ3JhcGgubV9ibG9ja3NbbmV4dEJsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggbmV4dEJsb2NrSW5kZXggPSBibG9ja0luZGV4ICsgMTsgbmV4dEJsb2NrSW5k
ZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK25leHRCbG9ja0luZGV4KSB7CisgICAgICAgICAg
ICBtX25leHRIaWdoQmxvY2sgPSBtX2dyYXBoLmJsb2NrKG5leHRCbG9ja0luZGV4KTsKICAgICAg
ICAgICAgIGlmIChtX25leHRIaWdoQmxvY2spCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KQEAgLTE1ODIsMTUgKzE1ODIsMTUgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNv
bXBpbGVKdW1wKCkKICAgICB7Ci0gICAgICAgIG1fb3V0Lmp1bXAobG93QmxvY2sobV9ub2RlLT50
YWtlbkJsb2NrSW5kZXgoKSkpOworICAgICAgICBtX291dC5qdW1wKGxvd0Jsb2NrKG1fbm9kZS0+
dGFrZW5CbG9jaygpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUJyYW5jaCgpCiAg
ICAgewogICAgICAgICBtX291dC5icmFuY2goCiAgICAgICAgICAgICBib29saWZ5KG1fbm9kZS0+
Y2hpbGQxKCkpLAotICAgICAgICAgICAgbG93QmxvY2sobV9ub2RlLT50YWtlbkJsb2NrSW5kZXgo
KSksCi0gICAgICAgICAgICBsb3dCbG9jayhtX25vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpKSk7
CisgICAgICAgICAgICBsb3dCbG9jayhtX25vZGUtPnRha2VuQmxvY2soKSksCisgICAgICAgICAg
ICBsb3dCbG9jayhtX25vZGUtPm5vdFRha2VuQmxvY2soKSkpOwogICAgIH0KICAgICAKICAgICB2
b2lkIGNvbXBpbGVTd2l0Y2goKQpAQCAtMjQ1NCw5ICsyNDU0LDkgQEAgcHJpdmF0ZToKICAgICAg
ICAgdXNlKGVkZ2UpOwogICAgIH0KICAgICAKLSAgICBMQmFzaWNCbG9jayBsb3dCbG9jayhCbG9j
a0luZGV4IGJsb2NrSW5kZXgpCisgICAgTEJhc2ljQmxvY2sgbG93QmxvY2soQmFzaWNCbG9jayog
YmxvY2spCiAgICAgewotICAgICAgICByZXR1cm4gbV9ibG9ja3MuZ2V0KG1fZ3JhcGgubV9ibG9j
a3NbYmxvY2tJbmRleF0uZ2V0KCkpOworICAgICAgICByZXR1cm4gbV9ibG9ja3MuZ2V0KGJsb2Nr
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBpbml0aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxvY2so
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206110</attachid>
            <date>2013-07-04 12:15:08 -0700</date>
            <delta_ts>2013-07-04 13:58:08 -0700</delta_ts>
            <desc>it runs programs</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>166291</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNDA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNiBA
QAorMjAxMy0wNy0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgcmVmZXIgdG8gQmFzaWNCbG9ja3MgYnkgQmFzaWNCbG9j
ayogYW5kIG5vdCBCbG9ja0luZGV4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTgzMzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWNjb21wbGlzaGVzIHR3byBnb2FsczoKKworICAg
ICAgICAxKSBTaW1wbGlmaWVzIGEgYnVuY2ggb2YgY29kZS4gWW91IGNhbiBub3cgbXVjaCBtb3Jl
IGRpcmVjdGx5IGdldCB0byBhIHN1Y2Nlc3NvcgorICAgICAgICAgICBvciBwcmVkZWNlc3Nvciwg
c2luY2UgeW91IGp1c3QgZ2V0IHRoZSBwb2ludGVyIGRpcmVjdGx5LiBUaGUgYmFja2VuZChzKSBh
bHdheXMKKyAgICAgICAgICAgaG9sZCBvbnRvIGEgcG9pbnRlciB0byB0aGUgYmxvY2sgdGhleSdy
ZSBvbiwgc28geW91IGRvbid0IGhhdmUgdG8gZG8gd29yayB0bworICAgICAgICAgICBnZXQgdGhl
IGJsb2NrIGZyb20gdGhlIGluZGV4LgorICAgICAgICAKKyAgICAgICAgMikgSXQgYWxsb3dzIGZv
ciB0aGUgcG9zc2liaWxpdHkgb2YgaW5zZXJ0aW5nIGJsb2NrcyBpbnRvIHRoZSBwcm9ncmFtLgor
ICAgICAgICAgICBQcmV2aW91c2x5LCBpZiB5b3UgZGlkIHRoYXQsIHlvdSdkIGhhdmUgdG8gZWRp
dCBhbGwgcmVmZXJlbmNlcyB0byBibG9ja3Mgc2luY2UKKyAgICAgICAgICAgdGhvc2UgcmVmZXJl
bmNlcyB3b3VsZCBoYXZlIG91dGRhdGVkIGluZGV4aW5nIGFmdGVyIGFuIGluc2VydGlvbi4gTm93
LCBpZiB5b3UKKyAgICAgICAgICAgY2hhbmdlIHRoZSBpbmRleGluZywgeW91IGp1c3QgaGF2ZSB0
byBpbnZhbGlkYXRlIHNvbWUgYW5hbHlzZXMgYW5kIG1ha2Ugc3VyZQorICAgICAgICAgICB0aGF0
IHlvdSBjaGFuZ2UgZWFjaCBibG9jaydzIEJhc2ljQmxvY2s6OmluZGV4IGFjY29yZGluZ2x5Lgor
CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
U3RhdGU6OmVuZEJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6
Om1lcmdlVG9TdWNjZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5oOgor
ICAgICAgICAoQWJzdHJhY3RTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZp
Y2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2U6
OnJ1bik6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKERGRyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6
OkRGRzo6QmFzaWNCbG9jazo6c2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6
aXNFbXB0eSk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6YXQpOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpERkc6OkJh
c2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OnJlc2l6ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6Z3Jvdyk6CisgICAgICAgIChCYXNpY0Js
b2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6Om51bVN1Y2Nlc3NvcnMpOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcik6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6
c3VjY2Vzc29yRm9yQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpk
dW1wKToKKyAgICAgICAgKFVubGlua2VkQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OlVubGlu
a2VkQmxvY2s6OlVubGlua2VkQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OmdldEJ5dGVjb2Rl
QmVnaW5Gb3JCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6YmxvY2tGb3JCeXRlY29kZU9mZnNl
dCk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEJ5dGVD
b2RlUGFyc2VyKToKKyAgICAgICAgKElubGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpsaW5rQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjps
aW5rQmxvY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3Rh
Y2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2UpOgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Q0ZBUGhhc2U6OnBlcmZvcm1CbG9ja0NGQSk6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZB
UGhhc2U6OnBlcmZvcm1Gb3J3YXJkQ0ZBKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFz
ZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpjb252
ZXJ0VG9KdW1wKToKKyAgICAgICAgKiBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6ZnJlZVVubmVjZXNzYXJ5Tm9k
ZXMpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6
ZUxvY2Fsc0luQmxvY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGluZ1BoYXNl
Ojpwcm9wYWdhdGVQaGlzKToKKyAgICAgICAgKENQU1JldGhyZWFkaW5nUGhhc2UpOgorICAgICAg
ICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnJ1
bik6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZnL0RG
R0RDRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6cnVuKToKKyAgICAg
ICAgKiBkZmcvREZHRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEaXNhc3Nl
bWJsZXI6OkRpc2Fzc2VtYmxlcik6CisgICAgICAgIChKU0M6OkRGRzo6RGlzYXNzZW1ibGVyOjpj
cmVhdGVEdW1wTGlzdCk6CisgICAgICAgICogZGZnL0RGR0Rpc2Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkRpc2Fzc2VtYmxlcjo6c2V0Rm9yQmxvY2tJbmRleCk6CisgICAgICAgICog
ZGZnL0RGR0RvbWluYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmNv
bXB1dGUpOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6Oml0ZXJhdGVGb3JCbG9jayk6
CisgICAgICAgICogZGZnL0RGR0RvbWluYXRvcnMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpEb21p
bmF0b3JzOjpkb21pbmF0ZXMpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkZp
eHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1
bXBCbG9ja0hlYWRlcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmhhbmRsZVN1Y2Nlc3Nv
cik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmRldGVybWluZVJlYWNoYWJpbGl0eSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnJlc2V0UmVhY2hhYmlsaXR5KToKKyAgICAgICAgKiBk
ZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bnVtQmxvY2tzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpsYXN0QmxvY2spOgorICAgICAgICAoR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjphcHBlbmRCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmtpbGxCbG9jayk6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpJVENvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OnNldEZvckJsb2NrSW5kZXgpOgorICAgICAg
ICAqIGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxM
b29wOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9vcHM6OmNvbXB1dGUpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wczo6bG9vcHNPZik6CisgICAgICAgICogZGZn
L0RGR05hdHVyYWxMb29wcy5oOgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wOjpOYXR1
cmFsTG9vcCk6CisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJhbExvb3A6OmFkZEJsb2NrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9vcDo6aGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZH
OjpOYXR1cmFsTG9vcDo6YXQpOgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wOjpvcGVy
YXRvcltdKToKKyAgICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9vcDo6Y29udGFpbnMpOgorICAg
ICAgICAoTmF0dXJhbExvb3ApOgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wczo6aGVh
ZGVyT2YpOgorICAgICAgICAoTmF0dXJhbExvb3BzKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5o
OgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hDYXNlOjpTd2l0Y2hD
YXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChTd2l0Y2hDYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hDYXNlOjp0
YXJnZXRCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hEYXRhOjpTd2l0
Y2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hEYXRhOjpzZXRGYWxsVGhyb3VnaEJ5
dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlN3aXRjaERhdGE6OmZhbGxUaHJvdWdo
Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChTd2l0Y2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjpzZXRUYWtlbkJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzZXROb3RU
YWtlbkJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp0YWtlbkJsb2NrKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpub3RUYWtlbkJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpzdWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN1Y2Nlc3NvckZvckNv
bmRpdGlvbik6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvbkluamVjdGlvblBoYXNlOjpydW4pOgorICAg
ICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZUZvcndhcmQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGVC
YWNrd2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6
OmRvUm91bmRPZkRvdWJsZVZvdGluZyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29udmVydExhc3RPU1JF
eGl0VG9Gb3J3YXJkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW5jaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2spOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y3JlYXRlT1NSRW50cmllcyk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmxpbmtPU1JFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXEpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFkZEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmxpbmtCcmFuY2hlcyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5leHRCbG9jayk6Cisg
ICAgICAgIChTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmRldGVjdFBlZXBIb2xlQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6YnJhbmNoRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
YnJhbmNoRG91YmxlTm9uWmVybyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmJyYW5jaDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoVGVz
dDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoNjQpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2g4KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoUHRyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6YnJhbmNoVGVzdFB0cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmJyYW5jaFRlc3Q4KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
anVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFkZEJyYW5jaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OlN0cmluZ1N3aXRjaENhc2U6OlN0cmlu
Z1N3aXRjaENhc2UpOgorICAgICAgICAoU3RyaW5nU3dpdGNoQ2FzZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OkJyYW5jaFJlY29yZDo6QnJhbmNoUmVjb3JkKToKKyAgICAg
ICAgKEJyYW5jaFJlY29yZCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBl
ZXBob2xlQnJhbmNoTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlQ29tcGFyZU51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RP
ck90aGVyRXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0
T2JqZWN0T3JPdGhlckJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJl
TnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
UGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNo
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0
aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50U3RydWN0dXJlQ2hlY2tzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFudEFycmF5Q2hl
Y2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjpkaXNhYmxl
SG9pc3RpbmdBY3Jvc3NPU1JFbnRyaWVzKToKKyAgICAgICAgKiBkZmcvREZHVW5pZmljYXRpb25Q
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VW5pZmljYXRpb25QaGFzZTo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRl
Ojp2YWxpZGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OmNoZWNrT3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OnJlcG9ydFZhbGlkYXRpb25Db250ZXh0KToK
KyAgICAgICAgKiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2U6OnJ1bik6Cisg
ICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2Fu
Q29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6TG93ZXJERkdUb0xMVk0pOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dlcik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVCbG9jayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmNvbXBpbGVKdW1wKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0Jsb2Nr
KToKKwogMjAxMy0wNy0wMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIGZvdXJ0aFRpZXI6IERGRzo6Tm9kZTo6bV9vcEluZm8yIHNob3VsZCBhbHNvIGJlIGEgdWlu
dHB0cl90CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAgdm9p
ZCBBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaQogCiB2b2lkIEFic3RyYWN0U3Rh
dGU6OmluaXRpYWxpemUoR3JhcGgmIGdyYXBoKQogewotICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBn
cmFwaC5tX2Jsb2Nrc1swXS5nZXQoKTsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gZ3JhcGguYmxv
Y2soMCk7CiAgICAgcm9vdC0+Y2ZhU2hvdWxkUmV2aXNpdCA9IHRydWU7CiAgICAgcm9vdC0+Y2Zh
SGFzVmlzaXRlZCA9IGZhbHNlOwogICAgIHJvb3QtPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7
CkBAIC0xMTgsOCArMTE4LDggQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBo
JiBncgogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmxvY2FsKGkpLmNsZWFyKCk7CiAg
ICAgICAgIHJvb3QtPnZhbHVlc0F0VGFpbC5sb2NhbChpKS5jbGVhcigpOwogICAgIH0KLSAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDEgOyBibG9ja0luZGV4IDwgZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBn
cmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDEgOyBibG9ja0luZGV4IDwgZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRl
eCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlm
ICghYmxvY2stPmlzUmVhY2hhYmxlKQpAQCAtMjAwLDcgKzIwMCw3IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZW5kQmFzaWNCbG9jayhNZXJnZU0KICAgICBpZiAobWVyZ2VNb2RlICE9IE1lcmdlVG9T
dWNjZXNzb3JzKQogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICAKLSAgICByZXR1cm4gbWVy
Z2VUb1N1Y2Nlc3NvcnMobV9ncmFwaCwgYmxvY2spOworICAgIHJldHVybiBtZXJnZVRvU3VjY2Vz
c29ycyhibG9jayk7CiB9CiAKIHZvaWQgQWJzdHJhY3RTdGF0ZTo6cmVzZXQoKQpAQCAtMTc5Miw3
ICsxNzkyLDcgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbAogICAg
IHJldHVybiBjaGFuZ2VkOwogfQogCi1pbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVRv
U3VjY2Vzc29ycyhHcmFwaCYgZ3JhcGgsIEJhc2ljQmxvY2sqIGJhc2ljQmxvY2spCitpbmxpbmUg
Ym9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVRvU3VjY2Vzc29ycyhCYXNpY0Jsb2NrKiBiYXNpY0Js
b2NrKQogewogICAgIE5vZGUqIHRlcm1pbmFsID0gYmFzaWNCbG9jay0+bGFzdCgpOwogICAgIApA
QCAtMTgwMiwyNCArMTgwMiwyNCBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVRv
U3VjY2VzCiAgICAgY2FzZSBKdW1wOiB7CiAgICAgICAgIEFTU0VSVChiYXNpY0Jsb2NrLT5jZmFC
cmFuY2hEaXJlY3Rpb24gPT0gSW52YWxpZEJyYW5jaERpcmVjdGlvbik7CiAjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgICAgICBN
ZXJnaW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgoKSk7Cisg
ICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAiLCAqdGVybWluYWwtPnRh
a2VuQmxvY2soKSwgIi5cbiIpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Js
b2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC0+dGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsK
KyAgICAgICAgcmV0dXJuIG1lcmdlKGJhc2ljQmxvY2ssIHRlcm1pbmFsLT50YWtlbkJsb2NrKCkp
OwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBCcmFuY2g6IHsKICAgICAgICAgQVNTRVJUKGJh
c2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiAhPSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsK
ICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQotICAgICAgICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHRvIGJs
b2NrICMldS5cbiIsIHRlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgIGRhdGFM
b2coIiAgICAgICAgTWVyZ2luZyB0byBibG9jayAiLCAqdGVybWluYWwtPnRha2VuQmxvY2soKSwg
Ii5cbiIpOwogI2VuZGlmCiAgICAgICAgIGlmIChiYXNpY0Jsb2NrLT5jZmFCcmFuY2hEaXJlY3Rp
b24gIT0gVGFrZUZhbHNlKQotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2Nr
LCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC0+dGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgdGVybWluYWwtPnRha2VuQmxv
Y2soKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAg
ICBkYXRhTG9nRigiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICMldS5cbiIsIHRlcm1pbmFsLT5u
b3RUYWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgIGRhdGFMb2coIiAgICAgICAgTWVyZ2luZyB0
byBibG9jayAiLCAqdGVybWluYWwtPm5vdFRha2VuQmxvY2soKSwgIi5cbiIpOwogI2VuZGlmCiAg
ICAgICAgIGlmIChiYXNpY0Jsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gIT0gVGFrZVRydWUpCi0g
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rl
cm1pbmFsLT5ub3RUYWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCB0ZXJtaW5hbC0+bm90VGFrZW5CbG9jaygpKTsKICAgICAg
ICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQogICAgICAgICAKQEAgLTE4MjgsOSArMTgyOCw5IEBA
IGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXMKICAgICAgICAgLy8gd2Un
cmUgbm90LiBIb3dldmVyIEkgc29tZWhvdyBkb3VidCB0aGF0IHRoaXMgd2lsbCBldmVyIGJlIGEg
YmlnIGRlYWwuCiAgICAgICAgIEFTU0VSVChiYXNpY0Jsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24g
PT0gSW52YWxpZEJyYW5jaERpcmVjdGlvbik7CiAgICAgICAgIFN3aXRjaERhdGEqIGRhdGEgPSB0
ZXJtaW5hbC0+c3dpdGNoRGF0YSgpOwotICAgICAgICBib29sIGNoYW5nZWQgPSBtZXJnZShiYXNp
Y0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1tkYXRhLT5mYWxsVGhyb3VnaF0uZ2V0KCkpOworICAgICAg
ICBib29sIGNoYW5nZWQgPSBtZXJnZShiYXNpY0Jsb2NrLCBkYXRhLT5mYWxsVGhyb3VnaCk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmNhc2VzLnNpemUoKTsgaS0tOykKLSAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbZGF0YS0+
Y2FzZXNbaV0udGFyZ2V0XS5nZXQoKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJh
c2ljQmxvY2ssIGRhdGEtPmNhc2VzW2ldLnRhcmdldCk7CiAgICAgICAgIHJldHVybiBjaGFuZ2Vk
OwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw3ICsyMjcs
NyBAQCBwdWJsaWM6CiAgICAgLy8gc3VjY2Vzc29ycy4gUmV0dXJucyB0cnVlIGlmIGFueSBvZiB0
aGUgc3VjY2Vzc29ycycgc3RhdGVzIGNoYW5nZWQuIE5vdGUKICAgICAvLyB0aGF0IHRoaXMgaXMg
YXV0b21hdGljYWxseSBjYWxsZWQgaW4gZW5kQmFzaWNCbG9jaygpIGlmIE1lcmdlTW9kZSBpcwog
ICAgIC8vIE1lcmdlVG9TdWNjZXNzb3JzLgotICAgIGJvb2wgbWVyZ2VUb1N1Y2Nlc3NvcnMoR3Jh
cGgmLCBCYXNpY0Jsb2NrKik7CisgICAgYm9vbCBtZXJnZVRvU3VjY2Vzc29ycyhCYXNpY0Jsb2Nr
Kik7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDIsOCArMTQyLDggQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAg
Ly8gRmlndXJlIG91dCB3aGljaCB2YXJpYWJsZXMgYXJlIGxpdmUsIHVzaW5nIGEgY29uc2VydmF0
aXZlIGFwcHJveGltYXRpb24gb2YKICAgICAgICAgLy8gbGl2ZW5lc3MuCi0gICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKyti
bG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBp
bmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewpAQCAtMTY0LDgg
KzE2NCw4IEBAIHB1YmxpYzoKICAgICAgICAgLy8gdXNlZCBvbmx5IGZvciBHZXRCeVZhbCBhbmQg
R2V0QXJyYXlMZW5ndGggYWNjZXNzZXMuIEF0IHRoZSBzYW1lIHRpbWUsCiAgICAgICAgIC8vIGlk
ZW50aWZ5IHVzZXMgb2YgQ3JlYXRlQXJndW1lbnRzIHRoYXQgYXJlIG5vdCBjb25zaXN0ZW50IHdp
dGggdGhlIGFyZ3VtZW50cwogICAgICAgICAvLyBiZWluZyBhbGlhc2VkIG9ubHkgdG8gdmFyaWFi
bGVzIHRoYXQgc2F0aXNmeSB0aGVzZSBjb25zdHJhaW50cy4KLSAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7
ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5k
ZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5C
bG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CkBAIC0zNTIsOCArMzUyLDgg
QEAgcHVibGljOgogICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGFzIHJlcXVpcmluZyBjcmVhdGlv
bi4gVGhpcyBpcyBhIHByb3BlcnR5IG9mIFNldExvY2FscyB0bwogICAgICAgICAvLyB2YXJpYWJs
ZXMgdGhhdCBhcmUgbmVpdGhlciB0aGUgY29ycmVjdCBhcmd1bWVudHMgcmVnaXN0ZXIgbm9yIGFy
ZSBtYXJrZWQgYXMKICAgICAgICAgLy8gYmVpbmcgYXJndW1lbnRzLWFsaWFzZWQuCi0gICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9i
bG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3Mo
KTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sg
PSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewpAQCAt
NDI4LDggKzQyOCw4IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIEluc2VydGlvblNldCBp
bnNlcnRpb25TZXQobV9ncmFwaCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKyti
bG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkg
eworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2Nr
IDwgYmxvY2stPnNpemUoKTsgaW5kZXhJbkJsb2NrKyspIHsKQEAgLTY2MSw4ICs2NjEsOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5n
ZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4
IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBp
ZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyAr
K2luZGV4SW5CbG9jaykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTIz
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw4IEBAIHB1YmxpYzoKICAgICAK
ICAgICBib29sIHJ1bigpCiAgICAgewotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4
KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAg
ICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJl
dmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTQgQEAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAogY2xhc3MgR3JhcGg7CitjbGFzcyBJbnNlcnRpb25TZXQ7CiAKLXR5
cGVkZWYgVmVjdG9yIDxCbG9ja0luZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7Cit0eXBlZGVmIFZl
Y3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OwogCi1zdHJ1Y3QgQmFzaWNCbG9j
ayA6IFZlY3RvcjxOb2RlKiwgOD4geworc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJh
c2ljQmxvY2s+IHsKICAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIHVuc2ln
bmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQogICAgICAgICA6IGJ5dGVjb2Rl
QmVnaW4oYnl0ZWNvZGVCZWdpbikKKyAgICAgICAgLCBpbmRleChOb0Jsb2NrKQogICAgICAgICAs
IGlzT1NSVGFyZ2V0KGZhbHNlKQogICAgICAgICAsIGNmYUhhc1Zpc2l0ZWQoZmFsc2UpCiAgICAg
ICAgICwgY2ZhU2hvdWxkUmV2aXNpdChmYWxzZSkKQEAgLTc0LDYgKzc2LDE3IEBAIHN0cnVjdCBC
YXNpY0Jsb2NrIDogVmVjdG9yPE5vZGUqLCA4PiB7CiAgICAgICAgIHZhbHVlc0F0VGFpbC5lbnN1
cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKICAgICB9CiAgICAgCisgICAgc2l6ZV90IHNpemUoKSBj
b25zdCB7IHJldHVybiBtX25vZGVzLnNpemUoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuICFzaXplKCk7IH0KKyAgICBOb2RlKiYgYXQoc2l6ZV90IGkpIHsgcmV0dXJuIG1f
bm9kZXNbaV07IH0KKyAgICBOb2RlKiBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9ub2Rl
c1tpXTsgfQorICAgIE5vZGUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0
KGkpOyB9CisgICAgTm9kZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIGF0KHNpemUoKSAtIDEpOyB9
CisgICAgdm9pZCByZXNpemUoc2l6ZV90IHNpemUpIHsgbV9ub2Rlcy5yZXNpemUoc2l6ZSk7IH0K
KyAgICB2b2lkIGdyb3coc2l6ZV90IHNpemUpIHsgbV9ub2Rlcy5ncm93KHNpemUpOyB9CisgICAg
CisgICAgdm9pZCBhcHBlbmQoTm9kZSogbm9kZSkgeyBtX25vZGVzLmFwcGVuZChub2RlKTsgfQor
ICAgIAogICAgIHNpemVfdCBudW1Ob2RlcygpIGNvbnN0IHsgcmV0dXJuIHBoaXMuc2l6ZSgpICsg
c2l6ZSgpOyB9CiAgICAgTm9kZSogbm9kZShzaXplX3QgaSkgY29uc3QKICAgICB7CkBAIC0xMDEs
MTUgKzExNCwzMyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlKiwgOD4gewogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAorICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3Nv
cnMoKSB7IHJldHVybiBsYXN0KCktPm51bVN1Y2Nlc3NvcnMoKTsgfQorICAgIAorICAgIEJhc2lj
QmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBs
YXN0KCktPnN1Y2Nlc3NvcihpbmRleCk7CisgICAgfQorICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nv
ckZvckNvbmRpdGlvbihib29sIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBsYXN0
KCktPnN1Y2Nlc3NvckZvckNvbmRpdGlvbihjb25kaXRpb24pOworICAgIH0KKwogI2RlZmluZSBE
RkdfREVGSU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJh
bXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKICAgICB0ZW1w
bGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhcHBlbmROb2RlKEdyYXBoJiwg
U3BlY3VsYXRlZFR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CiAgICAgREZHX1ZB
UklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCiAjdW5kZWYg
REZHX0RFRklORV9BUFBFTkRfTk9ERQogICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0LnByaW50KCIjIiwgaW5kZXgpOworICAgIH0K
KyAgICAKICAgICAvLyBUaGlzIHZhbHVlIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgYmxvY2sgbGlu
a2luZyBhbmQgT1NSIGVudHJ5LiBJdCBpcyBtb3N0bHkgbWVhbmluZ2xlc3MKICAgICAvLyBmb3Ig
b3RoZXIgcHVycG9zZXMgZHVlIHRvIGlubGluaW5nLgogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQmVn
aW47CiAgICAgCisgICAgQmxvY2tJbmRleCBpbmRleDsKKyAgICAKICAgICBib29sIGlzT1NSVGFy
Z2V0OwogICAgIGJvb2wgY2ZhSGFzVmlzaXRlZDsKICAgICBib29sIGNmYVNob3VsZFJldmlzaXQ7
CkBAIC0xMjIsMzAgKzE1Myw0NCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlKiwg
OD4gewogICAgIGJvb2wgaXNSZWFjaGFibGU7CiAgICAgCiAgICAgVmVjdG9yPE5vZGUqPiBwaGlz
OwotICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKKyAgICBQcmVkZWNlc3Nvckxp
c3QgcHJlZGVjZXNzb3JzOwogICAgIAogICAgIE9wZXJhbmRzPE5vZGUqLCBOb2RlUG9pbnRlclRy
YWl0cz4gdmFyaWFibGVzQXRIZWFkOwogICAgIE9wZXJhbmRzPE5vZGUqLCBOb2RlUG9pbnRlclRy
YWl0cz4gdmFyaWFibGVzQXRUYWlsOwogICAgIAogICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+
IHZhbHVlc0F0SGVhZDsKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdFRhaWw7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKKyAgICBWZWN0b3I8
Tm9kZSosIDg+IG1fbm9kZXM7CiB9OwogCiBzdHJ1Y3QgVW5saW5rZWRCbG9jayB7Ci0gICAgQmxv
Y2tJbmRleCBtX2Jsb2NrSW5kZXg7CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICBib29s
IG1fbmVlZHNOb3JtYWxMaW5raW5nOwogICAgIGJvb2wgbV9uZWVkc0Vhcmx5UmV0dXJuTGlua2lu
ZzsKICAgICAKICAgICBVbmxpbmtlZEJsb2NrKCkgeyB9CiAgICAgCi0gICAgZXhwbGljaXQgVW5s
aW5rZWRCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCi0gICAgICAgIDogbV9ibG9ja0luZGV4
KGJsb2NrSW5kZXgpCisgICAgZXhwbGljaXQgVW5saW5rZWRCbG9jayhCYXNpY0Jsb2NrKiBibG9j
aykKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQogICAgICAgICAsIG1fbmVlZHNOb3JtYWxMaW5r
aW5nKHRydWUpCiAgICAgICAgICwgbV9uZWVkc0Vhcmx5UmV0dXJuTGlua2luZyhmYWxzZSkKICAg
ICB7CiAgICAgfQogfTsKICAgICAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0Qnl0ZWNvZGVC
ZWdpbkZvckJsb2NrKEJhc2ljQmxvY2sqKiBiYXNpY0Jsb2NrKQoreworICAgIHJldHVybiAoKmJh
c2ljQmxvY2spLT5ieXRlY29kZUJlZ2luOworfQorCitzdGF0aWMgaW5saW5lIEJhc2ljQmxvY2sq
IGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPEJhc2ljQmxvY2sqPiYgbGlua2luZ1Rhcmdl
dHMsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pCit7CisgICAgcmV0dXJuICpiaW5hcnlTZWFyY2g8
QmFzaWNCbG9jayosIHVuc2lnbmVkPihsaW5raW5nVGFyZ2V0cywgbGlua2luZ1RhcmdldHMuc2l6
ZSgpLCBieXRlY29kZUJlZ2luLCBnZXRCeXRlY29kZUJlZ2luRm9yQmxvY2spOworfQorCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDggKzE4Myw4IEBAIHByaXZhdGU6CiAg
ICAgLy8gUGFyc2UgYSBzaW5nbGUgYmFzaWMgYmxvY2sgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25z
LgogICAgIGJvb2wgcGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCk7CiAgICAgLy8gTGluayBibG9j
ayBzdWNjZXNzb3JzLgotICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8Qmxv
Y2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0cyk7Ci0gICAgdm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxV
bmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCbG9ja0luZGV4PiYgcG9zc2li
bGVUYXJnZXRzKTsKKyAgICB2b2lkIGxpbmtCbG9jayhCYXNpY0Jsb2NrKiwgVmVjdG9yPEJhc2lj
QmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKTsKKyAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9yPFVu
bGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2li
bGVUYXJnZXRzKTsKICAgICAvLyBMaW5rIEdldExvY2FsICYgU2V0TG9jYWwgbm9kZXMsIHRvIGVu
c3VyZSBsaXZlIHZhbHVlcyBhcmUgZ2VuZXJhdGVkLgogICAgIGVudW0gUGhpU3RhY2tUeXBlIHsK
ICAgICAgICAgTG9jYWxQaGlTdGFjaywKQEAgLTEwMzksMTMgKzEwMzksMTMgQEAgcHJpdmF0ZToK
ICAgICAgICAgLy8gUG90ZW50aWFsIGJsb2NrIGxpbmtpbmcgdGFyZ2V0cy4gTXVzdCBiZSBzb3J0
ZWQgYnkgYnl0ZWNvZGVCZWdpbiwgYW5kCiAgICAgICAgIC8vIGNhbm5vdCBoYXZlIHR3byBibG9j
a3MgdGhhdCBoYXZlIHRoZSBzYW1lIGJ5dGVjb2RlQmVnaW4uIEZvciB0aGlzIHZlcnkKICAgICAg
ICAgLy8gcmVhc29uLCB0aGlzIGlzIG5vdCBlcXVpdmFsZW50IHRvIAotICAgICAgICBWZWN0b3I8
QmxvY2tJbmRleD4gbV9ibG9ja0xpbmtpbmdUYXJnZXRzOworICAgICAgICBWZWN0b3I8QmFzaWNC
bG9jayo+IG1fYmxvY2tMaW5raW5nVGFyZ2V0czsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHRo
ZSBjYWxsc2l0ZSdzIGJhc2ljIGJsb2NrIHdhcyBzcGxpdCBpbnRvIHR3bywgdGhlbiB0aGlzIHdp
bGwgYmUKICAgICAgICAgLy8gdGhlIGhlYWQgb2YgdGhlIGNhbGxzaXRlIGJsb2NrLiBJdCBuZWVk
cyBpdHMgc3VjY2Vzc29ycyBsaW5rZWQgdG8gdGhlCiAgICAgICAgIC8vIG1fdW5saW5rZWRCbG9j
a3MsIGJ1dCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQ6IHRoZXJlJ3Mgbm8gd2F5IGZvcgogICAg
ICAgICAvLyBhbnkgYmxvY2tzIGluIG1fdW5saW5rZWRCbG9ja3MgdG8ganVtcCBiYWNrIGludG8g
dGhpcyBibG9jay4KLSAgICAgICAgQmxvY2tJbmRleCBtX2NhbGxzaXRlQmxvY2tIZWFkOworICAg
ICAgICBCYXNpY0Jsb2NrKiBtX2NhbGxzaXRlQmxvY2tIZWFkOwogICAgICAgICAKICAgICAgICAg
Ly8gRG9lcyB0aGUgY2FsbHNpdGUgYmxvY2sgaGVhZCBuZWVkIGxpbmtpbmc/IFRoaXMgaXMgdHlw
aWNhbGx5IHRydWUKICAgICAgICAgLy8gYnV0IHdpbGwgYmUgZmFsc2UgZm9yIHRoZSBtYWNoaW5l
IGNvZGUgYmxvY2sncyBpbmxpbmUgc3RhY2sgZW50cnkKQEAgLTEwNzYsNyArMTA3Niw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBCeXRlQ29kZVBhcnNlciosCiAgICAgICAgICAgICBDb2RlQmxv
Y2sqLAogICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLAotICAgICAgICAgICAg
QmxvY2tJbmRleCBjYWxsc2l0ZUJsb2NrSGVhZCwKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGNh
bGxzaXRlQmxvY2tIZWFkLAogICAgICAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlLCAvLyBOdWxs
IGlmIHRoaXMgaXMgYSBjbG9zdXJlIGNhbGwuCiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmV0dXJuVmFsdWVWUiwKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBpbmxpbmVDYWxsRnJh
bWVTdGFydCwKQEAgLTEyOTUsMTQgKzEyOTUsMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW5saW5pbmcoTm9kZQogICAgIHVuc2lnbmVkIG5ld051bUxvY2FscyA9IGlubGluZUNhbGxG
cmFtZVN0YXJ0ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGNvZGVCbG9jay0+bV9u
dW1DYWxsZWVSZWdpc3RlcnM7CiAgICAgaWYgKG5ld051bUxvY2FscyA+IG1fbnVtTG9jYWxzKSB7
CiAgICAgICAgIG1fbnVtTG9jYWxzID0gbmV3TnVtTG9jYWxzOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBt
X2dyYXBoLm1fYmxvY2tzW2ldLT5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2kpCisgICAgICAg
ICAgICBtX2dyYXBoLmJsb2NrKGkpLT5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKICAgICB9
CiAgICAgCiAgICAgc2l6ZV90IGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG1fZ3JhcGgubV9hcmd1
bWVudFBvc2l0aW9ucy5zaXplKCk7CiAKICAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNr
RW50cnkoCi0gICAgICAgIHRoaXMsIGNvZGVCbG9jaywgY29kZUJsb2NrLCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKSAtIDEsIGNhbGxMaW5rU3RhdHVzLmZ1bmN0aW9uKCksCisgICAgICAgIHRoaXMs
IGNvZGVCbG9jaywgY29kZUJsb2NrLCBtX2dyYXBoLmxhc3RCbG9jaygpLCBjYWxsTGlua1N0YXR1
cy5mdW5jdGlvbigpLAogICAgICAgICAoVmlydHVhbFJlZ2lzdGVyKW1faW5saW5lU3RhY2tUb3At
PnJlbWFwT3BlcmFuZChyZXN1bHRPcGVyYW5kKSwKICAgICAgICAgKFZpcnR1YWxSZWdpc3Rlcilp
bmxpbmVDYWxsRnJhbWVTdGFydCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQpOwog
ICAgIApAQCAtMTMyMSwxOSArMTMyMSwxOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bmxpbmluZyhOb2RlCiAgICAgbV9jdXJyZW50SW5kZXggPSBvbGRJbmRleDsKICAgICAKICAgICAv
LyBJZiB0aGUgaW5saW5lZCBjb2RlIGNyZWF0ZWQgc29tZSBuZXcgYmFzaWMgYmxvY2tzLCB0aGVu
IHdlIGhhdmUgbGlua2luZyB0byBkby4KLSAgICBpZiAoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxz
aXRlQmxvY2tIZWFkICE9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSkgeworICAgIGlmIChp
bmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWQgIT0gbV9ncmFwaC5sYXN0QmxvY2so
KSkgewogICAgICAgICAKICAgICAgICAgQVNTRVJUKCFpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5r
ZWRCbG9ja3MuaXNFbXB0eSgpKTsKICAgICAgICAgaWYgKGlubGluZVN0YWNrRW50cnkubV9jYWxs
c2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZykKLSAgICAgICAgICAgIGxpbmtCbG9jayhtX2dyYXBo
Lm1fYmxvY2tzW2lubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZF0uZ2V0KCksIGlu
bGluZVN0YWNrRW50cnkubV9ibG9ja0xpbmtpbmdUYXJnZXRzKTsKKyAgICAgICAgICAgIGxpbmtC
bG9jayhpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWQsIGlubGluZVN0YWNrRW50
cnkubV9ibG9ja0xpbmtpbmdUYXJnZXRzKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV9ibG9ja3NbaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFk
XS0+aXNMaW5rZWQpOworICAgICAgICAgICAgQVNTRVJUKGlubGluZVN0YWNrRW50cnkubV9jYWxs
c2l0ZUJsb2NrSGVhZC0+aXNMaW5rZWQpOwogICAgICAgICAKICAgICAgICAgLy8gSXQncyBwb3Nz
aWJsZSB0aGF0IHRoZSBjYWxsc2l0ZSBibG9jayBoZWFkIGlzIG5vdCBvd25lZCBieSB0aGUgY2Fs
bGVyLgogICAgICAgICBpZiAoIWlubGluZVN0YWNrRW50cnkubV9jYWxsZXItPm1fdW5saW5rZWRC
bG9ja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBJdCdzIGRlZmluaXRlbHkgb3duZWQg
YnkgdGhlIGNhbGxlciwgYmVjYXVzZSB0aGUgY2FsbGVyIGNyZWF0ZWQgbmV3IGJsb2Nrcy4KICAg
ICAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoaXMgYWxsIGFkZHMgdXAuCi0gICAgICAgICAgICBB
U1NFUlQoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCku
bV9ibG9ja0luZGV4ID09IGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCk7Cisg
ICAgICAgICAgICBBU1NFUlQoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxlci0+bV91bmxpbmtlZEJs
b2Nrcy5sYXN0KCkubV9ibG9jayA9PSBpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hl
YWQpOwogICAgICAgICAgICAgQVNTRVJUKGlubGluZVN0YWNrRW50cnkubV9jYWxsZXItPm1fdW5s
aW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNOb3JtYWxMaW5raW5nKTsKICAgICAgICAgICAgIGlu
bGluZVN0YWNrRW50cnkubV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNO
b3JtYWxMaW5raW5nID0gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMzQ4LDcgKzEzNDgs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgfSBlbHNl
CiAgICAgICAgIEFTU0VSVChpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0
eSgpKTsKICAgICAKLSAgICBCYXNpY0Jsb2NrKiBsYXN0QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tz
Lmxhc3QoKS5nZXQoKTsKKyAgICBCYXNpY0Jsb2NrKiBsYXN0QmxvY2sgPSBtX2dyYXBoLmxhc3RC
bG9jaygpOwogICAgIC8vIElmIHRoZXJlIHdhcyBhIHJldHVybiwgYnV0IG5vIGVhcmx5IHJldHVy
bnMsIHRoZW4gd2UncmUgZG9uZS4gV2UgYWxsb3cgcGFyc2luZyBvZgogICAgIC8vIHRoZSBjYWxs
ZXIgdG8gY29udGludWUgaW4gd2hhdGV2ZXIgYmFzaWMgYmxvY2sgd2UncmUgaW4gcmlnaHQgbm93
LgogICAgIGlmICghaW5saW5lU3RhY2tFbnRyeS5tX2RpZEVhcmx5UmV0dXJuICYmIGlubGluZVN0
YWNrRW50cnkubV9kaWRSZXR1cm4pIHsKQEAgLTEzNjQsMTEgKzEzNjQsMTEgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICAgICAgLy8gZm9yIHJlbGVh
c2UgYnVpbGRzIGJlY2F1c2UgdGhpcyBibG9jayB3aWxsIG5ldmVyIHNlcnZlIGFzIGEgcG90ZW50
aWFsIHRhcmdldAogICAgICAgICAgICAgLy8gaW4gdGhlIGxpbmtlcidzIGJpbmFyeSBzZWFyY2gu
CiAgICAgICAgICAgICBsYXN0QmxvY2stPmJ5dGVjb2RlQmVnaW4gPSBtX2N1cnJlbnRJbmRleDsK
LSAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tz
LmFwcGVuZChVbmxpbmtlZEJsb2NrKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSkpOworICAg
ICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3MuYXBw
ZW5kKFVubGlua2VkQmxvY2sobV9ncmFwaC5sYXN0QmxvY2soKSkpOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLmdl
dCgpOwotCisgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC5sYXN0QmxvY2soKTsKKyAg
ICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigi
RG9uZSBpbmxpbmluZyBleGVjdXRhYmxlICVwLCBjb250aW51aW5nIGNvZGUgZ2VuZXJhdGlvbiBh
dCBlcGlsb2d1ZS5cbiIsIGV4ZWN1dGFibGUpOwogI2VuZGlmCkBAIC0xMzc4LDMyICsxMzc4LDM1
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyBJZiB3
ZSBnZXQgdG8gdGhpcyBwb2ludCB0aGVuIGFsbCBibG9ja3MgbXVzdCBlbmQgaW4gc29tZSBzb3J0
IG9mIHRlcm1pbmFscy4KICAgICBBU1NFUlQobGFzdEJsb2NrLT5sYXN0KCktPmlzVGVybWluYWwo
KSk7CiAgICAgCisKKyAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBiYXNpYyBibG9jayBmb3Ig
dGhlIGNvbnRpbnVhdGlvbiBhdCB0aGUgY2FsbGVyLgorICAgIFJlZlB0cjxCYXNpY0Jsb2NrPiBi
bG9jayA9IGFkb3B0UmVmKG5ldyBCYXNpY0Jsb2NrKG5leHRPZmZzZXQsIG1fbnVtQXJndW1lbnRz
LCBtX251bUxvY2FscykpOworCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgIGRh
dGFMb2dGKCJDcmVhdGluZyBpbmxpbmUgZXBpbG9ndWUgYmFzaWMgYmxvY2sgJXAsICMlenUgZm9y
ICVwIGJjIyV1IGF0IGlubGluZSBkZXB0aCAldS5cbiIsIGJsb2NrLmdldCgpLCBtX2dyYXBoLm51
bUJsb2NrcygpLCBtX2lubGluZVN0YWNrVG9wLT5leGVjdXRhYmxlKCksIG1fY3VycmVudEluZGV4
LCBDb2RlT3JpZ2luOjppbmxpbmVEZXB0aEZvckNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUoKSkp
OworI2VuZGlmCisKICAgICAvLyBMaW5rIHRoZSBlYXJseSByZXR1cm5zIHRvIHRoZSBiYXNpYyBi
bG9jayB3ZSdyZSBhYm91dCB0byBjcmVhdGUuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
aWYgKCFpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9uZWVkc0Vhcmx5UmV0
dXJuTGlua2luZykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tz
W2ldLm1fYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVCghYmxvY2stPmlzTGlua2Vk
KTsKLSAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5sYXN0KCk7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrVG9MaW5rID0gaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzW2ldLm1f
YmxvY2s7CisgICAgICAgIEFTU0VSVCghYmxvY2tUb0xpbmstPmlzTGlua2VkKTsKKyAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrVG9MaW5rLT5sYXN0KCk7CiAgICAgICAgIEFTU0VSVChub2RlLT5v
cCgpID09IEp1bXApOwotICAgICAgICBBU1NFUlQobm9kZS0+dGFrZW5CbG9ja0luZGV4KCkgPT0g
Tm9CbG9jayk7Ci0gICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2tJbmRleChtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKSk7CisgICAgICAgIEFTU0VSVChub2RlLT50YWtlbkJsb2NrKCkgPT0gMCk7Cisg
ICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2soYmxvY2suZ2V0KCkpOwogICAgICAgICBpbmxpbmVT
dGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9uZWVkc0Vhcmx5UmV0dXJuTGlua2luZyA9
IGZhbHNlOwogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgYmxvY2stPmlzTGlua2VkID0g
dHJ1ZTsKKyAgICAgICAgYmxvY2tUb0xpbmstPmlzTGlua2VkID0gdHJ1ZTsKICNlbmRpZgogICAg
IH0KICAgICAKLSAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBiYXNpYyBibG9jayBmb3IgdGhl
IGNvbnRpbnVhdGlvbiBhdCB0aGUgY2FsbGVyLgotICAgIE93blB0cjxCYXNpY0Jsb2NrPiBibG9j
ayA9IGFkb3B0UHRyKG5ldyBCYXNpY0Jsb2NrKG5leHRPZmZzZXQsIG1fbnVtQXJndW1lbnRzLCBt
X251bUxvY2FscykpOwotI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBkYXRhTG9n
RigiQ3JlYXRpbmcgaW5saW5lIGVwaWxvZ3VlIGJhc2ljIGJsb2NrICVwLCAjJXp1IGZvciAlcCBi
YyMldSBhdCBpbmxpbmUgZGVwdGggJXUuXG4iLCBibG9jay5nZXQoKSwgbV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCksIG1faW5saW5lU3RhY2tUb3AtPmV4ZWN1dGFibGUoKSwgbV9jdXJyZW50SW5kZXgs
IENvZGVPcmlnaW46OmlubGluZURlcHRoRm9yQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSgpKSk7
Ci0jZW5kaWYKICAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrLmdldCgpOwotICAgIEFTU0VSVCht
X2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlzRW1wdHko
KSB8fCBtX2dyYXBoLm1fYmxvY2tzW21faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX2Jsb2Nr
TGlua2luZ1RhcmdldHMubGFzdCgpXS0+Ynl0ZWNvZGVCZWdpbiA8IG5leHRPZmZzZXQpOwotICAg
IG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmFwcGVuZChVbmxp
bmtlZEJsb2NrKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKSk7Ci0gICAgbV9pbmxpbmVTdGFja1Rv
cC0+bV9jYWxsZXItPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5hcHBlbmQobV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCkpOwotICAgIG1fZ3JhcGgubV9ibG9ja3MuYXBwZW5kKGJsb2NrLnJlbGVhc2UoKSk7
CisgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX2Jsb2NrTGlua2luZ1Rh
cmdldHMuaXNFbXB0eSgpIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX2Jsb2NrTGlu
a2luZ1RhcmdldHMubGFzdCgpLT5ieXRlY29kZUJlZ2luIDwgbmV4dE9mZnNldCk7CisgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3MuYXBwZW5kKFVubGlua2Vk
QmxvY2soYmxvY2suZ2V0KCkpKTsKKyAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9i
bG9ja0xpbmtpbmdUYXJnZXRzLmFwcGVuZChibG9jay5nZXQoKSk7CisgICAgbV9ncmFwaC5hcHBl
bmRCbG9jayhibG9jayk7CiAgICAgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgIAogICAgIC8v
IEF0IHRoaXMgcG9pbnQgd2UgcmV0dXJuIGFuZCBjb250aW51ZSB0byBnZW5lcmF0ZSBjb2RlIGZv
ciB0aGUgY2FsbGVyLCBidXQKQEAgLTE3NTMsNyArMTc1Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAvLyBJZiB3ZSBhcmUgdGhlIGZpcnN0IGJhc2lj
IGJsb2NrLCBpbnRyb2R1Y2UgbWFya2VycyBmb3IgYXJndW1lbnRzLiBUaGlzIGFsbG93cwogICAg
IC8vIHVzIHRvIHRyYWNrIGlmIGEgdXNlIG9mIGFuIGFyZ3VtZW50IG1heSB1c2UgdGhlIGFjdHVh
bCBhcmd1bWVudCBwYXNzZWQsIGFzCiAgICAgLy8gb3Bwb3NlZCB0byB1c2luZyBhIHZhbHVlIHdl
IHNldCBleHBsaWNpdGx5LgotICAgIGlmIChtX2N1cnJlbnRCbG9jayA9PSBtX2dyYXBoLm1fYmxv
Y2tzWzBdLmdldCgpICYmICFpbmxpbmVDYWxsRnJhbWUoKSkgeworICAgIGlmIChtX2N1cnJlbnRC
bG9jayA9PSBtX2dyYXBoLmJsb2NrKDApICYmICFpbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAg
ICBtX2dyYXBoLm1fYXJndW1lbnRzLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyArK2Fy
Z3VtZW50KSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbmV3
VmFyaWFibGVBY2Nlc3NEYXRhKApAQCAtMjc2NSwxNSArMjc2OCwxNSBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBTd2l0Y2hEYXRhIGRhdGE7
CiAgICAgICAgICAgICBkYXRhLmtpbmQgPSBTd2l0Y2hJbW07CiAgICAgICAgICAgICBkYXRhLnN3
aXRjaFRhYmxlSW5kZXggPSBtX2lubGluZVN0YWNrVG9wLT5tX3N3aXRjaFJlbWFwW2N1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmRdOwotICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaCA9
IG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIGRhdGEuc2V0RmFsbFRocm91Z2hCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4ICsg
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBTaW1wbGVKdW1w
VGFibGUmIHRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRh
YmxlSW5kZXgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlLmJy
YW5jaE9mZnNldHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoIXRhYmxlLmJy
YW5jaE9mZnNldHNbaV0pCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fY3VycmVudEluZGV4ICsgdGFibGUuYnJhbmNoT2Zm
c2V0c1tpXTsKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRocm91Z2gp
CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoQnl0ZWNvZGVJ
bmRleCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBk
YXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKGpzTnVtYmVyKHRhYmxlLm1pbiArIGkpLCB0YXJn
ZXQpKTsKKyAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlOjp3aXRo
Qnl0ZWNvZGVJbmRleChqc051bWJlcih0YWJsZS5taW4gKyBpKSwgdGFyZ2V0KSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBtX2dyYXBoLm1fc3dpdGNoRGF0YS5hcHBlbmQoZGF0YSk7CiAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZtX2dyYXBoLm1fc3dpdGNoRGF0
YS5sYXN0KCkpLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwpAQCAtMjc4
NCwxNiArMjc4NywxNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICBTd2l0Y2hEYXRhIGRhdGE7CiAgICAgICAgICAgICBkYXRhLmtpbmQgPSBT
d2l0Y2hDaGFyOwogICAgICAgICAgICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0gbV9pbmxpbmVT
dGFja1RvcC0+bV9zd2l0Y2hSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kXTsK
LSAgICAgICAgICAgIGRhdGEuZmFsbFRocm91Z2ggPSBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBkYXRhLnNldEZhbGxUaHJvdWdo
Qnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpOwogICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9IG1fY29kZUJsb2Nr
LT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS5icmFuY2hPZmZzZXRzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKCF0YWJsZS5icmFuY2hPZmZzZXRzW2ldKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBt
X2N1cnJlbnRJbmRleCArIHRhYmxlLmJyYW5jaE9mZnNldHNbaV07Ci0gICAgICAgICAgICAgICAg
aWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoKQorICAgICAgICAgICAgICAgIGlmICh0YXJn
ZXQgPT0gZGF0YS5mYWxsVGhyb3VnaEJ5dGVjb2RlSW5kZXgoKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoCi0gICAgICAg
ICAgICAgICAgICAgIFN3aXRjaENhc2UoTGF6eUpTVmFsdWU6OnNpbmdsZUNoYXJhY3RlclN0cmlu
Zyh0YWJsZS5taW4gKyBpKSwgdGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgICAgIFN3aXRjaENh
c2U6OndpdGhCeXRlY29kZUluZGV4KExhenlKU1ZhbHVlOjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmco
dGFibGUubWluICsgaSksIHRhcmdldCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9n
cmFwaC5tX3N3aXRjaERhdGEuYXBwZW5kKGRhdGEpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChT
d2l0Y2gsIE9wSW5mbygmbV9ncmFwaC5tX3N3aXRjaERhdGEubGFzdCgpKSwgZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKQEAgLTI4MDQsMTYgKzI4MDcsMTYgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgU3dpdGNoRGF0
YSBkYXRhOwogICAgICAgICAgICAgZGF0YS5raW5kID0gU3dpdGNoU3RyaW5nOwogICAgICAgICAg
ICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGRhdGEuZmFsbFRocm91Z2ggPSBtX2N1cnJlbnRJbmRleCArIGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBkYXRhLnNldEZhbGxUaHJv
dWdoQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOwogICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiB0YWJsZSA9IG1fY29kZUJs
b2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKICAgICAg
ICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGl0ZXI7
CiAgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRv
ciBlbmQgPSB0YWJsZS5vZmZzZXRUYWJsZS5lbmQoKTsKICAgICAgICAgICAgIGZvciAoaXRlciA9
IHRhYmxlLm9mZnNldFRhYmxlLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBtX2N1cnJlbnRJbmRleCArIGl0ZXItPnZhbHVl
LmJyYW5jaE9mZnNldDsKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRo
cm91Z2gpCisgICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoQnl0
ZWNvZGVJbmRleCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICBkYXRhLmNhc2VzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgU3dpdGNoQ2FzZShM
YXp5SlNWYWx1ZTo6a25vd25TdHJpbmdJbXBsKGl0ZXItPmtleS5nZXQoKSksIHRhcmdldCkpOwor
ICAgICAgICAgICAgICAgICAgICBTd2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJbmRleChMYXp5SlNW
YWx1ZTo6a25vd25TdHJpbmdJbXBsKGl0ZXItPmtleS5nZXQoKSksIHRhcmdldCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgbV9ncmFwaC5tX3N3aXRjaERhdGEuYXBwZW5kKGRhdGEpOwog
ICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmbV9ncmFwaC5tX3N3aXRjaERh
dGEubGFzdCgpKSwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKQEAgLTI4
MjgsMTggKzI4MzEsMTggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZGlkUmV0dXJuID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgcmV0dXJuaW5nIGZy
b20gdGhlIGZpcnN0IGJsb2NrLCB0aGVuIHdlJ3JlIGRvbmUgcGFyc2luZy4KLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbHNpdGVCbG9ja0hlYWQgPT0g
bV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbHNpdGVCbG9ja0hlYWQgPT0gbV9ncmFwaC5sYXN0Qmxv
Y2soKSk7CiAgICAgICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlUGFyc2luZyA9IGZhbHNl
OwogICAgICAgICAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIGlubGluaW5nIGNyZWF0ZWQg
YmxvY2tzLCBhbmQgd2UncmUgZG9pbmcgYSByZXR1cm4sIHRoZW4gd2UgbmVlZCBzb21lCiAgICAg
ICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgbGlua2luZy4KLSAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2tJ
bmRleCA9PSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEpOworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9j
ayA9PSBtX2dyYXBoLmxhc3RCbG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9uZWVkc05vcm1hbExpbmtpbmcgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudElu
ZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9yZXQpICE9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9kaWRFYXJs
eVJldHVybikgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50SW5kZXggKyBP
UENPREVfTEVOR1RIKG9wX3JldCkgPD0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVt
cCwgT3BJbmZvKE5vQmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1w
LCBPcEluZm8oMCkpOwogICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Vu
bGlua2VkQmxvY2tzLmxhc3QoKS5tX25lZWRzRWFybHlSZXR1cm5MaW5raW5nID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9kaWRFYXJseVJldHVybiA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzE2Miw3ICszMTY1LDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIH0KIH0KIAotdm9pZCBCeXRlQ29kZVBh
cnNlcjo6bGlua0Jsb2NrKEJhc2ljQmxvY2sqIGJsb2NrLCBWZWN0b3I8QmxvY2tJbmRleD4mIHBv
c3NpYmxlVGFyZ2V0cykKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayhCYXNpY0Jsb2Nr
KiBibG9jaywgVmVjdG9yPEJhc2ljQmxvY2sqPiYgcG9zc2libGVUYXJnZXRzKQogewogICAgIEFT
U0VSVCghYmxvY2stPmlzTGlua2VkKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0VtcHR5KCkpOwpA
QCAtMzE3MSwyNCArMzE3NCwyNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2soQmFz
aWNCbG9jCiAgICAgCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKdW1wOgot
ICAgICAgICBub2RlLT5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0
ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVy
aW5nUGFyc2luZygpKSk7CisgICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2soYmxvY2tGb3JCeXRl
Y29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnRha2VuQnl0ZWNvZGVPZmZzZXREdXJp
bmdQYXJzaW5nKCkpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgIGRh
dGFMb2dGKCJMaW5rZWQgYmFzaWMgYmxvY2sgJXAgdG8gJXAsICMldS5cbiIsIGJsb2NrLCBtX2dy
YXBoLm1fYmxvY2tzW25vZGUtPnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSwgbm9kZS0+dGFrZW5C
bG9ja0luZGV4KCkpOworICAgICAgICBkYXRhTG9nRigiTGlua2VkIGJhc2ljIGJsb2NrICVwIHRv
ICVwLCAjJXUuXG4iLCBibG9jaywgbm9kZS0+dGFrZW5CbG9jaygpLCBub2RlLT50YWtlbkJsb2Nr
KCktPmluZGV4KTsKICNlbmRpZgogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBC
cmFuY2g6Ci0gICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnRha2VuQnl0ZWNvZGVP
ZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKLSAgICAgICAgbm9kZS0+c2V0Tm90VGFrZW5CbG9ja0lu
ZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywg
bm9kZS0+bm90VGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOworICAgICAgICBu
b2RlLT5zZXRUYWtlbkJsb2NrKGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRz
LCBub2RlLT50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CisgICAgICAgIG5v
ZGUtPnNldE5vdFRha2VuQmxvY2soYmxvY2tGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdl
dHMsIG5vZGUtPm5vdFRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCJMaW5rZWQgYmFzaWMg
YmxvY2sgJXAgdG8gJXAsICMldSBhbmQgJXAsICMldS5cbiIsIGJsb2NrLCBtX2dyYXBoLm1fYmxv
Y2tzW25vZGUtPnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSwgbm9kZS0+dGFrZW5CbG9ja0luZGV4
KCksIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCldLmdldCgpLCBu
b2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgIGRhdGFMb2dGKCJMaW5rZWQgYmFz
aWMgYmxvY2sgJXAgdG8gJXAsICMldSBhbmQgJXAsICMldS5cbiIsIGJsb2NrLCBub2RlLT50YWtl
bkJsb2NrKCksIG5vZGUtPnRha2VuQmxvY2soKS0+aW5kZXgsIG5vZGUtPm5vdFRha2VuQmxvY2so
KSwgbm9kZS0+bm90VGFrZW5CbG9jaygpLT5pbmRleCk7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIAogICAgIGNhc2UgU3dpdGNoOgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
b2RlLT5zd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgIG5vZGUt
PnN3aXRjaERhdGEoKS0+Y2FzZXNbaV0udGFyZ2V0ID0gbV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0
ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLT5zd2l0Y2hEYXRhKCktPmNhc2VzW2ld
LnRhcmdldCk7Ci0gICAgICAgIG5vZGUtPnN3aXRjaERhdGEoKS0+ZmFsbFRocm91Z2ggPSBtX2dy
YXBoLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnN3
aXRjaERhdGEoKS0+ZmFsbFRocm91Z2gpOworICAgICAgICAgICAgbm9kZS0+c3dpdGNoRGF0YSgp
LT5jYXNlc1tpXS50YXJnZXQgPSBibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0
cywgbm9kZS0+c3dpdGNoRGF0YSgpLT5jYXNlc1tpXS50YXJnZXRCeXRlY29kZUluZGV4KCkpOwor
ICAgICAgICBub2RlLT5zd2l0Y2hEYXRhKCktPmZhbGxUaHJvdWdoID0gYmxvY2tGb3JCeXRlY29k
ZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnN3aXRjaERhdGEoKS0+ZmFsbFRocm91Z2hC
eXRlY29kZUluZGV4KCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVsdDoK
QEAgLTMyMDMsMTEgKzMyMDYsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKEJh
c2ljQmxvYwogI2VuZGlmCiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9ja3MoVmVj
dG9yPFVubGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJsb2NrSW5kZXg+JiBw
b3NzaWJsZVRhcmdldHMpCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2tzKFZlY3RvcjxV
bmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3MsIFZlY3RvcjxCYXNpY0Jsb2NrKj4mIHBvc3Np
YmxlVGFyZ2V0cykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVubGlua2VkQmxvY2tz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmICh1bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzTm9y
bWFsTGlua2luZykgewotICAgICAgICAgICAgbGlua0Jsb2NrKG1fZ3JhcGgubV9ibG9ja3NbdW5s
aW5rZWRCbG9ja3NbaV0ubV9ibG9ja0luZGV4XS5nZXQoKSwgcG9zc2libGVUYXJnZXRzKTsKKyAg
ICAgICAgICAgIGxpbmtCbG9jayh1bmxpbmtlZEJsb2Nrc1tpXS5tX2Jsb2NrLCBwb3NzaWJsZVRh
cmdldHMpOwogICAgICAgICAgICAgdW5saW5rZWRCbG9ja3NbaV0ubV9uZWVkc05vcm1hbExpbmtp
bmcgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTMyMzUsNyArMzIzOCw3IEBAIEJ5dGVD
b2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICBCeXRlQ29kZVBhcnNlciog
Ynl0ZUNvZGVQYXJzZXIsCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssCiAgICAgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLAotICAgIEJsb2NrSW5kZXggY2FsbHNpdGVCbG9ja0hlYWQsCisgICAg
QmFzaWNCbG9jayogY2FsbHNpdGVCbG9ja0hlYWQsCiAgICAgSlNGdW5jdGlvbiogY2FsbGVlLCAv
LyBOdWxsIGlmIHRoaXMgaXMgYSBjbG9zdXJlIGNhbGwuCiAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
dHVyblZhbHVlVlIsCiAgICAgVmlydHVhbFJlZ2lzdGVyIGlubGluZUNhbGxGcmFtZVN0YXJ0LApA
QCAtMzI3Myw3ICszMjc2LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6Oklu
bGluZQogICAgICAgICAvLyBJbmxpbmUgY2FzZS4KICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayAh
PSBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2spOwogICAgICAgICBBU1NFUlQoaW5saW5lQ2Fs
bEZyYW1lU3RhcnQgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIEFTU0VSVChj
YWxsc2l0ZUJsb2NrSGVhZCAhPSBOb0Jsb2NrKTsKKyAgICAgICAgQVNTRVJUKGNhbGxzaXRlQmxv
Y2tIZWFkKTsKICAgICAgICAgCiAgICAgICAgIElubGluZUNhbGxGcmFtZSBpbmxpbmVDYWxsRnJh
bWU7CiAgICAgICAgIGlubGluZUNhbGxGcmFtZS5leGVjdXRhYmxlLnNldCgqYnl0ZUNvZGVQYXJz
ZXItPm1fdm0sIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOwpAQCAtMzM2OCw3ICszMzcxLDcgQEAgQnl0
ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICBBU1NFUlQoIWNh
bGxlZSk7CiAgICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZVZSID09IEludmFsaWRWaXJ0dWFsUmVn
aXN0ZXIpOwogICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lU3RhcnQgPT0gSW52YWxpZFZp
cnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgIEFTU0VSVChjYWxsc2l0ZUJsb2NrSGVhZCA9PSBOb0Js
b2NrKTsKKyAgICAgICAgQVNTRVJUKCFjYWxsc2l0ZUJsb2NrSGVhZCk7CiAKICAgICAgICAgbV9p
bmxpbmVDYWxsRnJhbWUgPSAwOwogCkBAIC0zNDQ2LDI3ICszNDQ5LDI3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKICAgICAgICAgZG8gewogICAgICAgICAgICAgaWYg
KCFtX2N1cnJlbnRCbG9jaykgewogICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiB1
c2UgdGhlIGxhc3QgYmxvY2suCi0gICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLm1fYmxvY2tz
LmlzRW1wdHkoKSAmJiBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS0+aXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubnVtQmxvY2tzKCkgJiYgbV9ncmFwaC5sYXN0QmxvY2so
KS0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBiZSBhIGJs
b2NrIGJlbG9uZ2luZyB0byB1cy4KLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5l
U3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2tJbmRleCA9PSBtX2dyYXBo
Lm1fYmxvY2tzLnNpemUoKSAtIDEpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxp
bmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9jayA9PSBtX2dyYXBoLmxh
c3RCbG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAgLy8gRWl0aGVyIHRoZSBibG9jayBpcyBs
aW5rYWJsZSBvciBpdCBpc24ndC4gSWYgaXQncyBsaW5rYWJsZSB0aGVuIGl0J3MgdGhlIGxhc3QK
ICAgICAgICAgICAgICAgICAgICAgLy8gYmxvY2sgaW4gdGhlIGJsb2NrTGlua2luZ1RhcmdldHMg
bGlzdC4gSWYgaXQncyBub3QgdGhlbiB0aGUgbGFzdCBibG9jayB3aWxsCiAgICAgICAgICAgICAg
ICAgICAgIC8vIGhhdmUgYSBsb3dlciBieXRlY29kZSBpbmRleCB0aGF0IHRoZSBvbmUgd2UncmUg
YWJvdXQgdG8gZ2l2ZSB0byB0aGlzIGJsb2NrLgotICAgICAgICAgICAgICAgICAgICBpZiAobV9p
bmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlzRW1wdHkoKSB8fCBtX2dyYXBo
Lm1fYmxvY2tzW21faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCld
LT5ieXRlY29kZUJlZ2luICE9IG1fY3VycmVudEluZGV4KSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuaXNFbXB0eSgpIHx8
IG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCktPmJ5dGVjb2Rl
QmVnaW4gIT0gbV9jdXJyZW50SW5kZXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1h
a2UgdGhlIGJsb2NrIGxpbmthYmxlLgotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1f
aW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5pc0VtcHR5KCkgfHwgbV9ncmFw
aC5tX2Jsb2Nrc1ttX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMubGFzdCgp
XS0+Ynl0ZWNvZGVCZWdpbiA8IG1fY3VycmVudEluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5hcHBlbmQobV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCht
X2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuaXNFbXB0eSgpIHx8IG1faW5s
aW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCktPmJ5dGVjb2RlQmVnaW4g
PCBtX2N1cnJlbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNr
VG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuYXBwZW5kKG1fZ3JhcGgubGFzdEJsb2NrKCkpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIC8vIENoYW5nZSBpdHMg
Ynl0ZWNvZGUgYmVnaW4gYW5kIGNvbnRpbnVlLgotICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLmdldCgpOworICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgubGFzdEJsb2NrKCk7CiAjaWYgREZHX0VOQUJM
RShERUJVR19WRVJCT1NFKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiUmVhc2NyaWJp
bmcgYnl0ZWNvZGUgaW5kZXggb2YgYmxvY2sgJXAgZnJvbSBiYyMldSB0byBiYyMldSAocGVlcGhv
bGUgY2FzZSkuXG4iLCBtX2N1cnJlbnRCbG9jaywgbV9jdXJyZW50QmxvY2stPmJ5dGVjb2RlQmVn
aW4sIG1fY3VycmVudEluZGV4KTsKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+Ynl0ZWNvZGVCZWdpbiA9IG1fY3VycmVudEluZGV4OwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIE93blB0cjxCYXNpY0Jsb2NrPiBibG9jayA9
IGFkb3B0UHRyKG5ldyBCYXNpY0Jsb2NrKG1fY3VycmVudEluZGV4LCBtX251bUFyZ3VtZW50cywg
bV9udW1Mb2NhbHMpKTsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPEJhc2ljQmxvY2s+IGJs
b2NrID0gYWRvcHRSZWYobmV3IEJhc2ljQmxvY2sobV9jdXJyZW50SW5kZXgsIG1fbnVtQXJndW1l
bnRzLCBtX251bUxvY2FscykpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNyZWF0aW5nIGJhc2ljIGJsb2NrICVwLCAjJXp1IGZv
ciAlcCBiYyMldSBhdCBpbmxpbmUgZGVwdGggJXUuXG4iLCBibG9jay5nZXQoKSwgbV9ncmFwaC5t
X2Jsb2Nrcy5zaXplKCksIG1faW5saW5lU3RhY2tUb3AtPmV4ZWN1dGFibGUoKSwgbV9jdXJyZW50
SW5kZXgsIENvZGVPcmlnaW46OmlubGluZURlcHRoRm9yQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFt
ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDcmVhdGluZyBiYXNpYyBibG9j
ayAlcCwgIyV6dSBmb3IgJXAgYmMjJXUgYXQgaW5saW5lIGRlcHRoICV1LlxuIiwgYmxvY2suZ2V0
KCksIG1fZ3JhcGgubnVtQmxvY2tzKCksIG1faW5saW5lU3RhY2tUb3AtPmV4ZWN1dGFibGUoKSwg
bV9jdXJyZW50SW5kZXgsIENvZGVPcmlnaW46OmlubGluZURlcHRoRm9yQ2FsbEZyYW1lKGlubGlu
ZUNhbGxGcmFtZSgpKSk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2sgPSBibG9jay5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhc3NlcnRpb24g
Y2hlY2tzIHR3byB0aGluZ3M6CkBAIC0zNDc1LDEzICszNDc4LDEzIEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKICAgICAgICAgICAgICAgICAgICAgLy8gMikgSWYgdGhl
IGJ5dGVjb2RlQmVnaW4gaXMgZXF1YWwgdG8gdGhlIGN1cnJlbnRJbmRleCwgdGhlbiB3ZSBmYWls
ZWQgdG8gZG8KICAgICAgICAgICAgICAgICAgICAgLy8gICAgYSBwZWVwaG9sZSBjb2FsZXNjaW5n
IG9mIHRoaXMgYmxvY2sgaW4gdGhlIGlmIHN0YXRlbWVudCBhYm92ZS4gU28sIHdlJ3JlCiAgICAg
ICAgICAgICAgICAgICAgIC8vICAgIGdlbmVyYXRpbmcgc3Vib3B0aW1hbCBjb2RlIGFuZCBsZWF2
aW5nIG1vcmUgd29yayBmb3IgdGhlIENGRyBzaW1wbGlmaWVyLgotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkgfHwg
bV9ncmFwaC5tX2Jsb2Nrc1ttX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3Qo
KS5tX2Jsb2NrSW5kZXhdLT5ieXRlY29kZUJlZ2luIDwgbV9jdXJyZW50SW5kZXgpOwotICAgICAg
ICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmFwcGVuZChV
bmxpbmtlZEJsb2NrKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5hcHBlbmQobV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVT
dGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkgfHwgbV9pbmxpbmVTdGFja1RvcC0+
bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9jay0+Ynl0ZWNvZGVCZWdpbiA8IG1fY3VycmVu
dEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtl
ZEJsb2Nrcy5hcHBlbmQoVW5saW5rZWRCbG9jayhibG9jay5nZXQoKSkpOworICAgICAgICAgICAg
ICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuYXBwZW5kKGJs
b2NrLmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGZpcnN0IGJsb2NrIGlzIGRl
ZmluaXRlbHkgYW4gT1NSIHRhcmdldC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBo
Lm1fYmxvY2tzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLm51bUJs
b2NrcygpKQogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmlzT1NSVGFyZ2V0ID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrcy5hcHBlbmQoYmxvY2sucmVs
ZWFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmRCbG9jayhibG9jayk7
CiAgICAgICAgICAgICAgICAgICAgIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zNTIwLDcgKzM1MjMsNyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZSgpCiAjZW5kaWYKICAgICAKICAgICBJbmxpbmVTdGFja0VudHJ5IGlubGlu
ZVN0YWNrRW50cnkoCi0gICAgICAgIHRoaXMsIG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVkQmxvY2ss
IE5vQmxvY2ssIDAsIEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIsIEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIsCisgICAgICAgIHRoaXMsIG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVkQmxvY2ssIDAsIDAsIElu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIsIEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIG1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIENvZGVGb3JDYWxsKTsKICAgICAKICAgICBwYXJz
ZUNvZGVCbG9jaygpOwpAQCAtMzU0MCwxMSArMzU0MywxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZSgpCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxv
Y2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAg
QVNTRVJUKGJsb2NrKTsKICAgICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpIHsKLSAgICAg
ICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uY2xlYXIoKTsKKyAgICAgICAgICAg
IG1fZ3JhcGgua2lsbEJsb2NrKGJsb2NrKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFz
ZS5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZBUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxNSArNzksMTQgQEAgcHVibGljOgog
ICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBwZXJmb3JtQmxvY2tDRkEoQmxvY2tJbmRl
eCBibG9ja0luZGV4KQorICAgIHZvaWQgcGVyZm9ybUJsb2NrQ0ZBKEJhc2ljQmxvY2sqIGJsb2Nr
KQogICAgIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Js
b2NrSW5kZXhdLmdldCgpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBpZiAoIWJsb2NrLT5jZmFTaG91bGRSZXZpc2l0KQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICBCbG9j
ayAjJXUgKGJjIyV1KTpcbiIsIGJsb2NrSW5kZXgsIGJsb2NrLT5ieXRlY29kZUJlZ2luKTsKKyAg
ICAgICAgICAgIGRhdGFMb2coIiAgIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICBt
X3N0YXRlLmJlZ2luQmFzaWNCbG9jayhibG9jayk7CiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAg
ICAgICAgICAgICBkYXRhTG9nRigiICAgICAgaGVhZCB2YXJzOiAiKTsKQEAgLTEyNyw4ICsxMjYs
OCBAQCBwcml2YXRlOgogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2dG
KCJDRkEgWyV1XVxuIiwgKyttX2NvdW50KTsKICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9jayA9IDA7IGJsb2NrIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2sp
Ci0gICAgICAgICAgICBwZXJmb3JtQmxvY2tDRkEoYmxvY2spOworICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyAr
K2Jsb2NrSW5kZXgpCisgICAgICAgICAgICBwZXJmb3JtQmxvY2tDRkEobV9ncmFwaC5ibG9jayhi
bG9ja0luZGV4KSk7CiAgICAgfQogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZp
Y2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw4ICs1NCw4IEBAIHB1YmxpYzoK
ICAgICAgICAgCiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IGZhbHNl
OwotICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4
IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQo
KTsKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAg
ICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKQEAgLTYzLDI3ICs2MywyNCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgc3dpdGNoIChibG9jay0+bGFzdCgpLT5vcCgpKSB7
CiAgICAgICAgICAgICAgICAgY2FzZSBKdW1wOiB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFN1
Y2Nlc3NvciB3aXRoIG9uZSBwcmVkZWNlc3NvciAtPiBtZXJnZS4KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApXS0+bV9w
cmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChtX2dyYXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKV0tPm1fcHJlZGVj
ZXNzb3JzWzBdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gYmxvY2tJbmRleCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+c3VjY2Vzc29yKDApLT5wcmVkZWNlc3Nv
cnMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+
c3VjY2Vzc29yKDApLT5wcmVkZWNlc3NvcnNbMF0gPT0gYmxvY2spOwogI2lmIERGR19FTkFCTEUo
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2dGKCJDRkdTaW1wbGlmeTogSnVtcCBtZXJnZSBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1Llxu
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9ncmFwaC5z
dWNjZXNzb3IoYmxvY2ssIDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNG
R1NpbXBsaWZ5OiBKdW1wIG1lcmdlIG9uIEJsb2NrICIsICpibG9jaywgIiB0byBCbG9jayAiLCAq
YmxvY2stPnN1Y2Nlc3NvcigwKSwgIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoZXh0cmVtZUxvZ2dpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5kdW1wKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9ja0luZGV4LCBtX2dyYXBo
LnN1Y2Nlc3NvcihibG9jaywgMCksIG5vQmxvY2tzKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbWVyZ2VCbG9ja3MoYmxvY2ssIGJsb2NrLT5zdWNjZXNzb3IoMCksIG5vQmxvY2tzKCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJDaGFuZ2VkID0gb3V0ZXJDaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJOb3QganVtcCBtZXJnaW5nIG9uIEJsb2NrICMl
dSB0byBCbG9jayAjJXUgYmVjYXVzZSBwcmVkZWNlc3NvcnMgPSAiLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3Jh
cGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApXS0+bV9wcmVkZWNlc3NvcnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNGR1NpbXBs
aWZ5OiBOb3QganVtcCBtZXJnaW5nIG9uIEJsb2NrICIsICpibG9jaywgIiB0byBCbG9jayAiLCAq
YmxvY2stPnN1Y2Nlc3NvcigwKSwgIiBiZWNhdXNlIHByZWRlY2Vzc29ycyA9ICIsKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c3VjY2Vz
c29yKDApLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0Yo
IiwgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiMldSIsIG1fZ3Jh
cGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApXS0+bV9wcmVkZWNlc3NvcnNb
aV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coKmJsb2NrLT5zdWNjZXNz
b3IoMCktPnByZWRlY2Vzc29yc1tpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiLlxuIik7CiAjZW5kaWYKQEAgLTEwMyw1MiAr
MTAwLDQ3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gQnJhbmNoIG9uIGNvbnN0
YW50IC0+IGpldHRpc29uIHRoZSBub3QtdGFrZW4gYmxvY2sgYW5kIG1lcmdlLgogICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNLbm93bkRpcmVjdGlvbihibG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9u
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb25kaXRpb24gPSBicmFuY2hDb25k
aXRpb24oYmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNv
bmRpdGlvbildLmdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldEJsb2Nr
LT5tX3ByZWRlY2Vzc29ycy5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
QmFzaWNCbG9jayogdGFyZ2V0QmxvY2sgPSBibG9jay0+c3VjY2Vzc29yRm9yQ29uZGl0aW9uKGNv
bmRpdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVk
QmxvY2sgPSBibG9jay0+c3VjY2Vzc29yRm9yQ29uZGl0aW9uKCFjb25kaXRpb24pOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldEJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpID09
IDEpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNGR1NpbXBsaWZ5OiBLbm93biBjb25kaXRp
b24gKCVzKSBicmFuY2ggbWVyZ2Ugb24gQmxvY2sgIyV1IHRvIEJsb2NrICMldSwgamV0dGlzb25p
bmcgQmxvY2sgIyV1LlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bmRpdGlvbiA/ICJ0cnVlIiA6ICJmYWxzZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywg
Y29uZGl0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
c3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IkNGR1NpbXBsaWZ5OiBLbm93biBjb25kaXRpb24gKCIsIGNvbmRpdGlvbiwgIikgYnJhbmNoIG1l
cmdlICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbiBCbG9jayAiLCAqYmxv
Y2ssICIgdG8gQmxvY2sgIiwgKnRhcmdldEJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiLCBqZXR0aXNvbmluZyBCbG9jayAiLCAqamV0dGlzb25lZEJsb2NrLCAiLlxuIik7
CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmVtZUxvZ2dpbmcp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtZXJnZUJsb2NrcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmxvY2tJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5z
dWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbiksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9uZUJsb2NrKG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJs
b2NrLCAhY29uZGl0aW9uKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlQmxv
Y2tzKGJsb2NrLCB0YXJnZXRCbG9jaywgb25lQmxvY2soamV0dGlzb25lZEJsb2NrKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ0ZH
U2ltcGxpZnk6IEtub3duIGNvbmRpdGlvbiAoJXMpIGJyYW5jaC0+anVtcCBjb252ZXJzaW9uIG9u
IEJsb2NrICMldSB0byBCbG9jayAjJXUsIGpldHRpc29uaW5nIEJsb2NrICMldS5cbiIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPyAidHJ1ZSIgOiAiZmFs
c2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgbV9n
cmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssIGNvbmRpdGlvbiksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihi
bG9jaywgIWNvbmRpdGlvbikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDRkdTaW1wbGlmeTogS25vd24gY29u
ZGl0aW9uICgiLCBjb25kaXRpb24sICIpICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJicmFuY2gtPmp1bXAgY29udmVyc2lvbiBvbiBCbG9jayAiLCAqYmxvY2ssICIgdG8gQmxv
Y2sgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QmxvY2ssICIsIGpl
dHRpc29uaW5nIEJsb2NrICIsIGpldHRpc29uZWRCbG9jaywgIi5cbiIpOwogI2VuZGlmCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
QmxvY2tJbmRleCB0YWtlbkJsb2NrSW5kZXggPSBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlv
bihibG9jaywgY29uZGl0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0lu
ZGV4IG5vdFRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJs
b2NrLCAhY29uZGl0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luID0g
YmxvY2stPmxhc3QoKS0+Y29kZU9yaWdpbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
bG9jay0+bGFzdCgpLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGJsb2NrLT5sYXN0KCktPnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2Nr
KGJsb2NrSW5kZXgsIG5vdFRha2VuQmxvY2tJbmRleCwgYm91bmRhcnlDb2RlT3JpZ2luKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2NrKGJsb2NrLCBqZXR0aXNvbmVk
QmxvY2ssIGJvdW5kYXJ5Q29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIGJvdW5kYXJ5Q29k
ZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRha2VuQmxv
Y2tJbmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odGFyZ2V0
QmxvY2spKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKSA9
PSBtX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnZlcnRUb0p1bXAoYmxvY2tJbmRleCwgbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5zdWNjZXNzb3IoMCkgPT0gYmxvY2stPnN1
Y2Nlc3NvcigxKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvSnVtcChibG9j
aywgYmxvY2stPnN1Y2Nlc3NvcigwKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckNo
YW5nZWQgPSBvdXRlckNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE3Nyw3ICsxNjksNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBjYXNlcyBvdGhlciB0aGFuIGRl
ZmF1bHQgdGhlbiB0aGlzIHR1cm5zCiAgICAgICAgICAgICAgICAgICAgIC8vIGludG8gYSBqdW1w
LgogICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS0+Y2FzZXMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9KdW1wKGJsb2NrSW5kZXgsIGRhdGEtPmZhbGxU
aHJvdWdoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0p1bXAoYmxvY2ssIGRh
dGEtPmZhbGxUaHJvdWdoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9
IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgfQpAQCAtMTg2LDQ3ICsxNzgsNDQgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVl
T2ZKU0NvbnN0YW50KGJsb2NrLT5sYXN0KCktPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBUcmlTdGF0ZSBmb3VuZCA9IEZhbHNlVHJpU3RhdGU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBCbG9ja0luZGV4IHRhcmdldEJsb2NrSW5kZXggPSBOb0Jsb2NrOworICAg
ICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2sgPSAwOwogICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6ZSgpOyBm
b3VuZCA9PSBGYWxzZVRyaVN0YXRlICYmIGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IGRhdGEtPmNhc2VzW2ldLnZhbHVlLnN0cmljdEVxdWFsKHZhbHVlKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQgPT0gVHJ1ZVRyaVN0YXRlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCbG9ja0luZGV4ID0gZGF0YS0+Y2Fz
ZXNbaV0udGFyZ2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCbG9j
ayA9IGRhdGEtPmNhc2VzW2ldLnRhcmdldDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5k
ID09IE1peGVkVHJpU3RhdGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQgPT0gRmFsc2VUcmlTdGF0ZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCbG9ja0luZGV4ID0gZGF0YS0+ZmFsbFRocm91
Z2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodGFyZ2V0QmxvY2tJbmRleCAhPSBO
b0Jsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCbG9jayA9IGRhdGEt
PmZhbGxUaHJvdWdoOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRhcmdldEJsb2Nr
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgVmVj
dG9yPEJsb2NrSW5kZXgsIDE+IGpldHRpc29uZWRCbG9ja3M7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm51bVN1Y2Nlc3NvcnMoYmxvY2spOyBpLS07
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCBqZXR0aXNvbmVkQmxv
Y2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCBpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoamV0dGlzb25lZEJsb2NrSW5kZXggIT0gdGFyZ2V0QmxvY2tJbmRleCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamV0dGlzb25lZEJsb2Nrcy5hcHBlbmQo
amV0dGlzb25lZEJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEJh
c2ljQmxvY2sqLCAxPiBqZXR0aXNvbmVkQmxvY2tzOworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jayA9IGJsb2Nr
LT5zdWNjZXNzb3IoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpldHRpc29u
ZWRCbG9jayAhPSB0YXJnZXRCbG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
amV0dGlzb25lZEJsb2Nrcy5hcHBlbmQoamV0dGlzb25lZEJsb2NrKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3RhcmdldEJs
b2NrSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodGFyZ2V0QmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0QmxvY2stPnByZWRlY2Vzc29ycy5z
aXplKCkgPT0gMSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiQ0ZHU2ltcGxpZnk6IEtub3duIGNvbnN0YW50ICgiLCB2YWx1ZSwgIikg
c3dpdGNoIG1lcmdlIG9uICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCbG9j
ayAjIiwgYmxvY2tJbmRleCwgIiB0byBCbG9jayAjIiwgdGFyZ2V0QmxvY2tJbmRleCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5cbiIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiQmxvY2sgIiwgKmJsb2NrLCAiIHRvIEJsb2NrICIsICp0YXJnZXRCbG9jaywg
Ii5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmRldGhyZWFkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgdGFyZ2V0Qmxv
Y2tJbmRleCwgamV0dGlzb25lZEJsb2Nrcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWVyZ2VCbG9ja3MoYmxvY2ssIHRhcmdldEJsb2NrLCBqZXR0aXNvbmVkQmxvY2tzKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDRkdTaW1wbGlmeTogS25vd24gY29uc3RhbnQg
KCIsIHZhbHVlLCAiKSBzd2l0Y2gtPmp1bXAgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiY29udmVyc2lvbiBvbiBCbG9jayAjIiwgYmxvY2tJbmRleCwgIiB0byBCbG9jayAjIiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QmxvY2tJbmRleCwgIi5cbiIp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29udmVyc2lvbiBvbiBCbG9jayAi
LCAqYmxvY2ssICIgdG8gQmxvY2sgIyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICp0YXJnZXRCbG9jaywgIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGV4dHJlbWVMb2dnaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLmR1bXAoKTsKQEAgLTIzNSw5ICsyMjQsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4gPSBibG9jay0+bGFz
dCgpLT5jb2RlT3JpZ2luOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5sYXN0
KCktPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBqZXR0aXNvbmVkQmxvY2tzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgamV0dGlzb25CbG9jayhibG9ja0luZGV4LCBqZXR0aXNvbmVk
QmxvY2tzW2ldLCBib3VuZGFyeUNvZGVPcmlnaW4pOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqZXR0aXNvbkJsb2NrKGJsb2NrLCBqZXR0aXNvbmVkQmxvY2tzW2ldLCBib3VuZGFy
eUNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmRO
b2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwg
SnVtcCwgYm91bmRhcnlDb2RlT3JpZ2luLCBPcEluZm8odGFyZ2V0QmxvY2tJbmRleCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYm91
bmRhcnlDb2RlT3JpZ2luLCBPcEluZm8odGFyZ2V0QmxvY2spKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hh
bmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI4MywxNCAr
MjcyLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBtX2dyYXBoLmludmFsaWRhdGVDRkco
KTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlc2V0UmVhY2hhYmlsaXR5KCk7CiAKLSAgICAg
ICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQo
KTsKKyAgICAgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNSZWFjaGFibGUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGtpbGxVbnJlYWNoYWJsZShibG9ja0luZGV4KTsKKyAgICAgICAg
ICAgICAgICAgICAga2lsbFVucmVhY2hhYmxlKGJsb2NrKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTMwMiwyNSArMjkxLDIzIEBAIHB1YmxpYzoK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBjb252ZXJ0VG9KdW1wKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCwgQmxvY2tJbmRleCB0YXJnZXRCbG9ja0luZGV4KQorICAgIHZvaWQgY29udmVydFRv
SnVtcChCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2spCiAgICAgewot
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0u
Z2V0KCk7Ci0gICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
c1t0YXJnZXRCbG9ja0luZGV4XS5nZXQoKTsKICAgICAgICAgQVNTRVJUKHRhcmdldEJsb2NrKTsK
ICAgICAgICAgQVNTRVJUKHRhcmdldEJsb2NrLT5pc1JlYWNoYWJsZSk7Ci0gICAgICAgIGlmICh0
YXJnZXRCbG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgaWYgKHRh
cmdldEJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpID09IDEpIHsKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nRigKLSAgICAgICAg
ICAgICAgICAiQ0ZHU2ltcGxpZnk6IEJyYW5jaC9Td2l0Y2ggdG8gc2FtZSBzdWNjZXNzb3IgbWVy
Z2Ugb24gQmxvY2sgIyV1IHRvIEJsb2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgYmxvY2tJ
bmRleCwgdGFyZ2V0QmxvY2tJbmRleCk7CisgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAg
ICAgICAgICJDRkdTaW1wbGlmeTogQnJhbmNoL1N3aXRjaCB0byBzYW1lIHN1Y2Nlc3NvciBtZXJn
ZSBvbiBCbG9jayAiLCAqYmxvY2ssCisgICAgICAgICAgICAgICAgIiB0byBCbG9jayAiLCAqdGFy
Z2V0QmxvY2ssICIuXG4iKTsKICNlbmRpZgogICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgp
OwotICAgICAgICAgICAgbWVyZ2VCbG9ja3MoYmxvY2tJbmRleCwgdGFyZ2V0QmxvY2tJbmRleCwg
bm9CbG9ja3MoKSk7CisgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9jaywgdGFyZ2V0QmxvY2ss
IG5vQmxvY2tzKCkpOwogICAgICAgICB9IGVsc2UgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKAotICAgICAgICAgICAgICAg
ICJDRkdTaW1wbGlmeTogQnJhbmNoLT5qdW1wIGNvbnZlcnNpb24gdG8gc2FtZSBzdWNjZXNzb3Ig
b24gQmxvY2sgIyV1IHRvIEJsb2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgYmxvY2tJbmRl
eCwgdGFyZ2V0QmxvY2tJbmRleCk7CisgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAg
ICAgICJDRkdTaW1wbGlmeTogQnJhbmNoLT5qdW1wIGNvbnZlcnNpb24gdG8gc2FtZSBzdWNjZXNz
b3Igb24gQmxvY2sgIiwKKyAgICAgICAgICAgICAgICAqYmxvY2ssICIgdG8gQmxvY2sgIiwgKnRh
cmdldEJsb2NrLCAiLlxuIiwKICNlbmRpZgogICAgICAgICAgICAgTm9kZSogYnJhbmNoID0gYmxv
Y2stPmxhc3QoKTsKICAgICAgICAgICAgIEFTU0VSVChicmFuY2gtPmlzVGVybWluYWwoKSk7CkBA
IC0zMzAsMTQgKzMxNywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBi
bG9jay0+YXBwZW5kTm9kZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVt
cCwgYnJhbmNoLT5jb2RlT3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyh0YXJnZXRCbG9j
a0luZGV4KSk7CisgICAgICAgICAgICAgICAgT3BJbmZvKHRhcmdldEJsb2NrKSk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICB2b2lkIGtpbGxVbnJlYWNoYWJsZShCbG9ja0luZGV4IGJsb2NrSW5k
ZXgpCisgICAgdm9pZCBraWxsVW5yZWFjaGFibGUoQmFzaWNCbG9jayogYmxvY2spCiAgICAgewot
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0u
Z2V0KCk7Ci0gICAgICAgIAogICAgICAgICBBU1NFUlQoYmxvY2spOwogICAgICAgICBBU1NFUlQo
IWJsb2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAgIApAQCAtMzQ2LDcgKzMzMSw3IEBAIHByaXZh
dGU6CiAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9k
ZUluZGV4LS07KQogICAgICAgICAgICAgbV9ncmFwaC5tX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5h
dChub2RlSW5kZXgpKTsKICAgICAgICAgCi0gICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJ
bmRleF0uY2xlYXIoKTsKKyAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soYmxvY2spOwogICAgIH0K
ICAgICAKICAgICB2b2lkIGtlZXBPcGVyYW5kQWxpdmUoQmFzaWNCbG9jayogYmxvY2ssIEJhc2lj
QmxvY2sqIGpldHRpc29uZWRCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBpbnQgb3BlcmFu
ZCkKQEAgLTM2MSw0OSArMzQ2LDQ3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBPcEluZm8obGl2
ZW5lc3NOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGpldHRpc29uQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29u
ZWRCbG9ja0luZGV4LCBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbikKKyAgICB2b2lkIGpl
dHRpc29uQmxvY2soQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9j
aywgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVPcmlnaW4pCiAgICAgewotICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAg
IEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlzb25l
ZEJsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBqZXR0aXNvbmVkQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2kpCiAgICAgICAgICAgICBrZWVwT3BlcmFuZEFsaXZlKGJsb2NrLCBqZXR0aXNvbmVkQmxv
Y2ssIGJvdW5kYXJ5Q29kZU9yaWdpbiwgYXJndW1lbnRUb09wZXJhbmQoaSkpOwogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCk7ICsraSkKICAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoYmxvY2ss
IGpldHRpc29uZWRCbG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBpKTsKICAgICAgICAgCi0gICAg
ICAgIGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoYmxvY2tJbmRleCwgamV0dGlzb25lZEJsb2Nr
SW5kZXgpOworICAgICAgICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGJsb2NrLCBqZXR0aXNv
bmVkQmxvY2spOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZpeEpldHRpc29uZWRQcmVkZWNlc3Nv
cnMoQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IGpldHRpc29uZWRCbG9ja0luZGV4
KQorICAgIHZvaWQgZml4SmV0dGlzb25lZFByZWRlY2Vzc29ycyhCYXNpY0Jsb2NrKiBibG9jaywg
QmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrKQogICAgIHsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCJGaXhpbmcgcHJlZGVjZXNz
b3JzIGFuZCBwaGlzIGR1ZSB0byBqZXR0aXNvbiBvZiBCbG9jayAjJXUgZnJvbSBCbG9jayAjJXUu
XG4iLAotICAgICAgICAgICAgICAgIGpldHRpc29uZWRCbG9ja0luZGV4LCBibG9ja0luZGV4KTsK
KyAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICJGaXhpbmcgcHJlZGVjZXNzb3JzIGFuZCBw
aGlzIGR1ZSB0byBqZXR0aXNvbiBvZiBCbG9jayAiLCAqamV0dGlzb25lZEJsb2NrLAorICAgICAg
ICAgICAgIiBmcm9tIEJsb2NrICIsICpibG9jaywgIi5cbiIsCiAjZW5kaWYKLSAgICAgICAgQmFz
aWNCbG9jayogamV0dGlzb25lZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tqZXR0aXNvbmVkQmxv
Y2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqZXR0aXNv
bmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
amV0dGlzb25lZEJsb2NrLT5tX3ByZWRlY2Vzc29yc1tpXSAhPSBibG9ja0luZGV4KQorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2NrLT5wcmVkZWNlc3NvcnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vz
c29yc1tpXSAhPSBibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnNbaV0gPSBqZXR0aXNvbmVkQmxvY2stPm1f
cHJlZGVjZXNzb3JzLmxhc3QoKTsKLSAgICAgICAgICAgIGpldHRpc29uZWRCbG9jay0+bV9wcmVk
ZWNlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgamV0dGlzb25lZEJsb2NrLT5wcmVk
ZWNlc3NvcnNbaV0gPSBqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29ycy5sYXN0KCk7CisgICAg
ICAgICAgICBqZXR0aXNvbmVkQmxvY2stPnByZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAotICAgIFZlY3RvcjxCbG9ja0luZGV4
LCAxPiBub0Jsb2NrcygpCisgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxPiBub0Jsb2NrcygpCiAg
ICAgewotICAgICAgICByZXR1cm4gVmVjdG9yPEJsb2NrSW5kZXgsIDE+KCk7CisgICAgICAgIHJl
dHVybiBWZWN0b3I8QmFzaWNCbG9jayosIDE+KCk7CiAgICAgfQogICAgIAotICAgIFZlY3RvcjxC
bG9ja0luZGV4LCAxPiBvbmVCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgVmVjdG9y
PEJhc2ljQmxvY2sqLCAxPiBvbmVCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAg
ICAgIFZlY3RvcjxCbG9ja0luZGV4LCAxPiByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQo
YmxvY2tJbmRleCk7CisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMT4gcmVzdWx0OworICAg
ICAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBtZXJnZUJsb2NrcygKLSAgICAgICAgQmxvY2tJbmRleCBmaXJzdEJs
b2NrSW5kZXgsIEJsb2NrSW5kZXggc2Vjb25kQmxvY2tJbmRleCwgVmVjdG9yPEJsb2NrSW5kZXgs
IDE+IGpldHRpc29uZWRCbG9ja0luZGljZXMpCisgICAgICAgIEJhc2ljQmxvY2sqIGZpcnN0Qmxv
Y2ssIEJhc2ljQmxvY2sqIHNlY29uZEJsb2NrLAorICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayos
IDE+IGpldHRpc29uZWRCbG9ja3MpCiAgICAgewogICAgICAgICAvLyBUaGlzIHdpbGwgYWRkIGFs
bCBvZiB0aGUgbm9kZXMgaW4gc2Vjb25kQmxvY2sgdG8gZmlyc3RCbG9jaywgYnV0IGluIHNvIGRv
aW5nCiAgICAgICAgIC8vIGl0IHdpbGwgYWxzbyBlbnN1cmUgdGhhdCBhbnkgR2V0TG9jYWxzIGZy
b20gdGhlIHNlY29uZCBibG9jayB0aGF0IHJlZmVyIHRvCkBAIC00MTEsOSArMzk0LDYgQEAgcHJp
dmF0ZToKICAgICAgICAgLy8gdGhlbiBQaGFudG9tcyBhcmUgaW5zZXJ0ZWQgZm9yIGFueXRoaW5n
IHRoYXQgdGhlIGpldHRpc29uZWRCbG9jayB3b3VsZCBoYXZlCiAgICAgICAgIC8vIGtlcHQgYWxp
dmUuCiAgICAgICAgIAotICAgICAgICBCYXNpY0Jsb2NrKiBmaXJzdEJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1tmaXJzdEJsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICBCYXNpY0Jsb2NrKiBzZWNv
bmRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nbc2Vjb25kQmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAg
ICAgIAogICAgICAgICAvLyBSZW1vdmUgdGhlIHRlcm1pbmFsIG9mIGZpcnN0QmxvY2sgc2luY2Ug
d2UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlLiBXZWxsLCB3ZSBkb24ndAogICAgICAgICAvLyByZWFs
bHkgcmVtb3ZlIGl0OyB3ZSBhY3R1YWxseSB0dXJuIGl0IGludG8gYSBQaGFudG9tLgogICAgICAg
ICBBU1NFUlQoZmlyc3RCbG9jay0+bGFzdCgpLT5pc1Rlcm1pbmFsKCkpOwpAQCAtNDIxLDggKzQw
MSw4IEBAIHByaXZhdGU6CiAgICAgICAgIGZpcnN0QmxvY2stPmxhc3QoKS0+Y29udmVydFRvUGhh
bnRvbSgpOwogICAgICAgICBBU1NFUlQoZmlyc3RCbG9jay0+bGFzdCgpLT5yZWZDb3VudCgpID09
IDEpOwogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gamV0dGlzb25lZEJsb2Nr
SW5kaWNlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGpldHRpc29u
ZWRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbamV0dGlzb25lZEJsb2NrSW5kaWNlc1tpXV0uZ2V0
KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGpldHRpc29uZWRCbG9ja3Muc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2sgPSBqZXR0aXNv
bmVkQmxvY2tzW2ldOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBUaW1lIHRvIGluc2Vy
dCBnaG9zdGllcyBmb3IgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBrZXB0IGFsaXZlIGluIGNhc2Ug
d2UgT1NSCiAgICAgICAgICAgICAvLyBleGl0IHByaW9yIHRvIGhpdHRpbmcgdGhlIGZpcnN0Qmxv
Y2sncyB0ZXJtaW5hbCwgYW5kIGVuZCB1cCBnb2luZyBkb3duIGEKQEAgLTQ0NywyMyArNDI3LDIz
IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIHByZWRlY2Vzc29ycyBlYWdlcmx5IHRvIGVuc3VyZSB0
aGF0IHdlIGtub3cgd2hhdCB0aGV5IGFyZSBpbiBjYXNlIHRoZSBuZXh0IGJsb2NrIHdlCiAgICAg
ICAgIC8vIGNvbnNpZGVyIGluIHRoaXMgcGhhc2Ugd2lzaGVzIHRvIHF1ZXJ5IHRoZSBwcmVkZWNl
c3NvcnMgb2Ygb25lIG9mIHRoZSBibG9ja3Mgd2UKICAgICAgICAgLy8gYWZmZWN0ZWQuCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubnVtU3VjY2Vzc29ycyhmaXJzdEJsb2NrKTsg
aS0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gbV9ncmFwaC5tX2Js
b2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihmaXJzdEJsb2NrLCBpKV0uZ2V0KCk7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29ycy5zaXpl
KCk7ICsraikgewotICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzb3ItPm1fcHJlZGVjZXNzb3Jz
W2pdID09IHNlY29uZEJsb2NrSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+
bV9wcmVkZWNlc3NvcnNbal0gPSBmaXJzdEJsb2NrSW5kZXg7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGZpcnN0QmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykgeworICAgICAgICAgICAg
QmFzaWNCbG9jayogc3VjY2Vzc29yID0gZmlyc3RCbG9jay0+c3VjY2Vzc29yKGkpOworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzLnNp
emUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3Jz
W2pdID09IHNlY29uZEJsb2NrKQorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnByZWRl
Y2Vzc29yc1tqXSA9IGZpcnN0QmxvY2s7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIC8vIEZpeCB0aGUgcHJlZGVjZXNzb3JzIG9mIG15IGZvcm1lciBzdWNjZXNz
b3JzLiBBZ2Fpbiwgd2UnZCByYXRoZXIgbm90IGRvIHRoaXMsIGJ1dCBpdCdzCiAgICAgICAgIC8v
IGFuIHVuZm9ydHVuYXRlIG5lY2Vzc2l0eS4gU2VlIGFib3ZlIGNvbW1lbnQuCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGpldHRpc29uZWRCbG9ja0luZGljZXMuc2l6ZSgpOyBpLS07KQotICAg
ICAgICAgICAgZml4SmV0dGlzb25lZFByZWRlY2Vzc29ycyhmaXJzdEJsb2NrSW5kZXgsIGpldHRp
c29uZWRCbG9ja0luZGljZXNbaV0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBqZXR0aXNv
bmVkQmxvY2tzLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGZpeEpldHRpc29uZWRQcmVkZWNl
c3NvcnMoZmlyc3RCbG9jaywgamV0dGlzb25lZEJsb2Nrc1tpXSk7CiAgICAgICAgIAogICAgICAg
ICBmaXJzdEJsb2NrLT52YWx1ZXNBdFRhaWwgPSBzZWNvbmRCbG9jay0+dmFsdWVzQXRUYWlsOwog
ICAgICAgICBmaXJzdEJsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24gPSBzZWNvbmRCbG9jay0+Y2Zh
QnJhbmNoRGlyZWN0aW9uOwogICAgICAgICAKLSAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tzZWNv
bmRCbG9ja0luZGV4XS5jbGVhcigpOworICAgICAgICBtX2dyYXBoLmtpbGxCbG9jayhzZWNvbmRC
bG9jayk7CiAgICAgfQogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
UFNSZXRocmVhZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSw4ICs2OSw4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBTYW1w
bGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENQUyBSZXRocmVhZGluZzogZnJlZVVubmVj
ZXNzYXJ5Tm9kZXMiKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQo
KTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nr
cygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJs
ZSk7CkBAIC0zODcsOCArMzg3LDggQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIFNhbXBsaW5n
UmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ1BTIFJldGhyZWFkaW5nOiBjYW5vbmljYWxpemVM
b2NhbHNJbkJsb2NrcyIpOwogICAgICAgICAKLSAgICAgICAgZm9yIChtX2Jsb2NrSW5kZXggPSBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgbV9ibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBt
X2Jsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1ttX2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5k
ZXgtLTspIHsKKyAgICAgICAgICAgIG1fYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OwogICAgICAgICAgICAgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9jaygpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtNDAyLDIwICs0MDIsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIC8v
IEVuc3VyZSB0aGF0IGF0dGVtcHRzIHRvIHVzZSB0aGlzIGZhaWwgaW5zdGFudGx5LgogICAgICAg
ICBtX2Jsb2NrID0gMDsKLSAgICAgICAgbV9ibG9ja0luZGV4ID0gTm9CbG9jazsKICAgICAgICAg
CiAgICAgICAgIHdoaWxlICghcGhpU3RhY2suaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBQaGlT
dGFja0VudHJ5IGVudHJ5ID0gcGhpU3RhY2subGFzdCgpOwogICAgICAgICAgICAgcGhpU3RhY2su
cmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IGVudHJ5Lm1fYmxvY2s7Ci0gICAgICAgICAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vz
c29ycyA9IGJsb2NrLT5tX3ByZWRlY2Vzc29yczsKKyAgICAgICAgICAgIFByZWRlY2Vzc29yTGlz
dCYgcHJlZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vzc29yczsKICAgICAgICAgICAgIE5vZGUq
IGN1cnJlbnRQaGkgPSBlbnRyeS5tX3BoaTsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBjdXJyZW50UGhpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAg
ICAgIHNpemVfdCBpbmRleCA9IGVudHJ5Lm1faW5kZXg7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSBwcmVkZWNlc3NvcnMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
cHJlZGVjZXNzb3JzW2ldXS5nZXQoKTsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVk
ZWNlc3NvckJsb2NrID0gcHJlZGVjZXNzb3JzW2ldOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIE5vZGUqIHZhcmlhYmxlSW5QcmV2aW91cyA9IHByZWRlY2Vzc29yQmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5hdEZvcjxvcGVyYW5kS2luZD4oaW5kZXgpOwogICAgICAgICAgICAgICAg
IGlmICghdmFyaWFibGVJblByZXZpb3VzKSB7CkBAIC00ODEsNyArNDgwLDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKICAgICB9CiAgICAgCi0gICAgQmxvY2tJ
bmRleCBtX2Jsb2NrSW5kZXg7CiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICBWZWN0b3I8
UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2FyZ3VtZW50UGhpU3RhY2s7CiAgICAgVmVjdG9yPFBoaVN0
YWNrRW50cnksIDEyOD4gbV9sb2NhbFBoaVN0YWNrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1
Miw4IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwogICAg
ICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBibG9jayA9IDA7IGJsb2NrIDwgbV9ncmFwaC5t
X2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2spCi0gICAgICAgICAgICBwZXJmb3JtQmxvY2tDU0UobV9n
cmFwaC5tX2Jsb2Nrc1tibG9ja10uZ2V0KCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2Nr
SW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4
KQorICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ1NFKG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCkp
OwogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDI0ICs1MiwyMyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAg
Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1f
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5u
dW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKGJsb2NrLT5jZmFGb3Vu
ZENvbnN0YW50cykKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IGZvbGRDb25zdGFudHMoYmxv
Y2tJbmRleCk7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBmb2xkQ29uc3RhbnRzKGJsb2Nr
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQog
CiBwcml2YXRlOgotICAgIGJvb2wgZm9sZENvbnN0YW50cyhCbG9ja0luZGV4IGJsb2NrSW5kZXgp
CisgICAgYm9vbCBmb2xkQ29uc3RhbnRzKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCJD
b25zdGFudCBmb2xkaW5nIGNvbnNpZGVyaW5nIEJsb2NrICMldS5cbiIsIGJsb2NrSW5kZXgpOwor
ICAgICAgICBkYXRhTG9nKCJDb25zdGFudCBmb2xkaW5nIGNvbnNpZGVyaW5nIEJsb2NrICIsICpi
bG9jaywgIi5cbiIpOwogI2VuZGlmCi0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFs
c2U7CiAgICAgICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKGJsb2NrKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgp
OyArK2luZGV4SW5CbG9jaykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
Q0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
Q0VQaGFzZS5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRENFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw4IEBAIHB1Ymxp
YzoKICAgICBib29sIHJ1bigpCiAgICAgewogICAgICAgICAvLyBGaXJzdCByZXNldCB0aGUgY291
bnRzIHRvIDAgZm9yIGFsbCBub2Rlcy4KLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRl
eCkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Js
b2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAg
ICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5C
bG9jay0tOykKQEAgLTYwLDggKzYwLDggQEAgcHVibGljOgogICAgICAgICAvLyAtIE5vZGVzIHRo
YXQgYXJlIG11c3QtZ2VuZXJhdGUuCiAgICAgICAgIC8vIC0gTm9kZXMgdGhhdCBhcmUgcmVhY2hh
YmxlIGZyb20gdHlwZSBjaGVja3MuCiAgICAgICAgIC8vIFNldCB0aGVpciByZWYgY291bnRzIHRv
IDEgYW5kIHB1dCB0aGVtIG9uIHRoZSB3b3JrbGlzdC4KLSAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsr
YmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1f
YmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7
IGluZGV4SW5CbG9jay0tOykgewpAQCAtODEsOCArODEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBjb3VudEVkZ2UpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0g
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRl
eF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJ
bmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAg
ICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTUy
MzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIERpc2Fzc2VtYmxlcjo6RGlzYXNzZW1ibGVyKEdyYXBoJiBncmFwaCkKICAgICA6IG1f
Z3JhcGgoZ3JhcGgpCiB7Ci0gICAgbV9sYWJlbEZvckJsb2NrSW5kZXgucmVzaXplKGdyYXBoLm1f
YmxvY2tzLnNpemUoKSk7CisgICAgbV9sYWJlbEZvckJsb2NrSW5kZXgucmVzaXplKGdyYXBoLm51
bUJsb2NrcygpKTsKIH0KIAogdm9pZCBEaXNhc3NlbWJsZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKQEAgLTk3LDEzICs5NywxMyBAQCBWZWN0b3I8RGlz
YXNzZW1ibGVyOjpEdW1wZWRPcD4gRGlzYXNzZW1iCiAgICAgCiAgICAgTm9kZSogbGFzdE5vZGUg
PSAwOwogICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBwcmV2aW91c0xhYmVsID0gbV9zdGFydE9m
Q29kZTsKLSAgICBmb3IgKHNpemVfdCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgIGZvciAoc2l6
ZV90IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKyti
bG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBkdW1wRGlzYXNzZW1ibHkob3V0LCBkaXNhc3NlbWJseVByZWZpeCwgbGlua0J1ZmZl
ciwgcHJldmlvdXNMYWJlbCwgbV9sYWJlbEZvckJsb2NrSW5kZXhbYmxvY2tJbmRleF0sIGxhc3RO
b2RlKTsKICAgICAgICAgYXBwZW5kKHJlc3VsdCwgb3V0LCBwcmV2aW91c09yaWdpbik7Ci0gICAg
ICAgIG1fZ3JhcGguZHVtcEJsb2NrSGVhZGVyKG91dCwgcHJlZml4LCBibG9ja0luZGV4LCBHcmFw
aDo6RHVtcExpdmVQaGlzT25seSk7CisgICAgICAgIG1fZ3JhcGguZHVtcEJsb2NrSGVhZGVyKG91
dCwgcHJlZml4LCBibG9jaywgR3JhcGg6OkR1bXBMaXZlUGhpc09ubHkpOwogICAgICAgICBhcHBl
bmQocmVzdWx0LCBvdXQsIHByZXZpb3VzT3JpZ2luKTsKICAgICAgICAgTm9kZSogbGFzdE5vZGVG
b3JEaXNhc3NlbWJseSA9IGJsb2NrLT5hdCgwKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKQEAgLTExOCw3ICsxMTgsNyBAQCBWZWN0b3I8RGlz
YXNzZW1ibGVyOjpEdW1wZWRPcD4gRGlzYXNzZW1iCiAgICAgICAgICAgICAgICAgLy8gYXMgdGhl
IGVuZCBwb2ludC4gVGhpcyBjYXNlIGlzIGhpdCBlaXRoZXIgZHVyaW5nIHBlZXBob2xlIGNvbXBh
cmUKICAgICAgICAgICAgICAgICAvLyBvcHRpbWl6YXRpb25zICh0aGUgQnJhbmNoIHdvbid0IGhh
dmUgaXRzIG93biBsYWJlbCkgb3IgaWYgd2UgaGF2ZSBhCiAgICAgICAgICAgICAgICAgLy8gZm9y
Y2VkIE9TUiBleGl0LgotICAgICAgICAgICAgICAgIGlmIChibG9ja0luZGV4ICsgMSA8IG1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgIGlmIChibG9ja0luZGV4ICsgMSA8
IG1fZ3JhcGgubnVtQmxvY2tzKCkpCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMYWJlbCA9
IG1fbGFiZWxGb3JCbG9ja0luZGV4W2Jsb2NrSW5kZXggKyAxXTsKICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMYWJlbCA9IG1fZW5kT2ZNYWluUGF0aDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1ibGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuaAkocmV2
aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgRGlzYXNz
ZW1ibGVyKEdyYXBoJik7CiAgICAgCiAgICAgdm9pZCBzZXRTdGFydE9mQ29kZShNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbGFiZWwpIHsgbV9zdGFydE9mQ29kZSA9IGxhYmVsOyB9Ci0gICAgdm9pZCBz
ZXRGb3JCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBs
YWJlbCkKKyAgICB2b2lkIHNldEZvckJsb2NrSW5kZXgoQmxvY2tJbmRleCBibG9ja0luZGV4LCBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwpCiAgICAgewogICAgICAgICBtX2xhYmVsRm9yQmxv
Y2tJbmRleFtibG9ja0luZGV4XSA9IGxhYmVsOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsOSArNDQsOSBAQCB2b2lkIERvbWluYXRvcnM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQog
ewogICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIG5haXZlIGRvbWluYXRvciBzb2x2ZXIuCiAgICAg
Ci0gICAgQVNTRVJUKGdyYXBoLm1fYmxvY2tzWzBdLT5tX3ByZWRlY2Vzc29ycy5pc0VtcHR5KCkp
OworICAgIEFTU0VSVChncmFwaC5ibG9jaygwKS0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSk7CiAg
ICAgCi0gICAgdW5zaWduZWQgbnVtQmxvY2tzID0gZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOworICAg
IHVuc2lnbmVkIG51bUJsb2NrcyA9IGdyYXBoLm51bUJsb2NrcygpOwogICAgIAogICAgIGlmIChu
dW1CbG9ja3MgPiBtX3Jlc3VsdHMuc2l6ZSgpKSB7CiAgICAgICAgIG1fcmVzdWx0cy5ncm93KG51
bUJsb2Nrcyk7CkBAIC02MCwxMyArNjAsMTMgQEAgdm9pZCBEb21pbmF0b3JzOjpjb21wdXRlKEdy
YXBoJiBncmFwaCkKICAgICAKICAgICBtX3NjcmF0Y2guY2xlYXJBbGwoKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBudW1CbG9ja3M7IGktLTspIHsKLSAgICAgICAgaWYgKCFncmFwaC5tX2Jsb2Nr
c1tpXSkKKyAgICAgICAgaWYgKCFncmFwaC5ibG9jayhpKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBtX3NjcmF0Y2guc2V0KGkpOwogICAgIH0KICAgICAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1CbG9ja3M7IGktLSA+IDE7KSB7Ci0gICAgICAgIGlmICghZ3JhcGgubV9ibG9j
a3NbaV0gfHwgZ3JhcGgubV9ibG9ja3NbaV0tPm1fcHJlZGVjZXNzb3JzLmlzRW1wdHkoKSkKKyAg
ICAgICAgaWYgKCFncmFwaC5ibG9jayhpKSB8fCBncmFwaC5ibG9jayhpKS0+cHJlZGVjZXNzb3Jz
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5jbGVhckFsbCgpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBtX3Jlc3VsdHNbaV0uc2V0KG1fc2NyYXRjaCk7CkBAIC04OCwx
NCArODgsMTQgQEAgdm9pZCBEb21pbmF0b3JzOjpjb21wdXRlKEdyYXBoJiBncmFwaCkKIAogYm9v
bCBEb21pbmF0b3JzOjppdGVyYXRlRm9yQmxvY2soR3JhcGgmIGdyYXBoLCBCbG9ja0luZGV4IGkp
CiB7Ci0gICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5tX2Jsb2Nrc1tpXS5nZXQoKTsKKyAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmJsb2NrKGkpOwogICAgIGlmICghYmxvY2spCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoYmxvY2stPm1fcHJlZGVjZXNzb3JzLmlzRW1w
dHkoKSkKKyAgICBpZiAoYmxvY2stPnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBtX3NjcmF0Y2guc2V0KG1fcmVzdWx0c1tibG9jay0+bV9wcmVkZWNl
c3NvcnNbMF1dKTsKLSAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9jay0+bV9wcmVkZWNlc3NvcnMu
c2l6ZSgpOyBqLS0gPiAxOykKLSAgICAgICAgbV9zY3JhdGNoLmZpbHRlcihtX3Jlc3VsdHNbYmxv
Y2stPm1fcHJlZGVjZXNzb3JzW2pdXSk7CisgICAgbV9zY3JhdGNoLnNldChtX3Jlc3VsdHNbYmxv
Y2stPnByZWRlY2Vzc29yc1swXS0+aW5kZXhdKTsKKyAgICBmb3IgKHVuc2lnbmVkIGogPSBibG9j
ay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tID4gMTspCisgICAgICAgIG1fc2NyYXRjaC5maWx0
ZXIobV9yZXN1bHRzW2Jsb2NrLT5wcmVkZWNlc3NvcnNbal0tPmluZGV4XSk7CiAgICAgbV9zY3Jh
dGNoLnNldChpKTsKICAgICByZXR1cm4gbV9yZXN1bHRzW2ldLnNldEFuZENoZWNrKG1fc2NyYXRj
aCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuaAko
cmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0
b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKIAogI2luY2x1ZGUgIkRGR0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5o
IgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+
CiAKQEAgLTQ4LDcgKzQ5LDExIEBAIHB1YmxpYzoKICAgICBib29sIGRvbWluYXRlcyhCbG9ja0lu
ZGV4IGZyb20sIEJsb2NrSW5kZXggdG8pIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNW
YWxpZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fcmVzdWx0c1t0b10uZ2V0KGZyb20pOworICAgICAg
ICByZXR1cm4gbV9yZXN1bHRzW2Zyb21dLmdldCh0byk7CisgICAgfQorICAgIGJvb2wgZG9taW5h
dGVzKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGRvbWluYXRlcyhmcm9tLT5pbmRleCwgdG8tPmluZGV4KTsKICAgICB9CiAgICAg
CiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw4IEBAIHB1YmxpYzoK
ICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKICAgICAgICAg
CiAgICAgICAgIG1fcHJvZml0YWJpbGl0eUNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5z
aXplKCk7ICsrYmxvY2tJbmRleCkKLSAgICAgICAgICAgIGZpeHVwQmxvY2sobV9ncmFwaC5tX2Js
b2Nrc1tibG9ja0luZGV4XS5nZXQoKSk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkK
KyAgICAgICAgICAgIGZpeHVwQmxvY2sobV9ncmFwaC5ibG9jayhibG9ja0luZGV4KSk7CiAgICAg
ICAgIAogICAgICAgICB3aGlsZSAobV9wcm9maXRhYmlsaXR5Q2hhbmdlZCkgewogICAgICAgICAg
ICAgbV9wcm9maXRhYmlsaXR5Q2hhbmdlZCA9IGZhbHNlOwpAQCAtNTksOCArNTksOCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fYXJndW1lbnRQb3Np
dGlvbnMuc2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudFBv
c2l0aW9uc1tpXS5tZXJnZUFyZ3VtZW50VW5ib3hpbmdBd2FyZW5lc3MoKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4
IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkKLSAgICAgICAgICAgICAg
ICBmaXh1cFNldExvY2Fsc0luQmxvY2sobV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQo
KSk7CisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5k
ZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpCisgICAgICAgICAgICAgICAg
Zml4dXBTZXRMb2NhbHNJbkJsb2NrKG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCkpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU3MywxMCArNTczLDEwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdDaGlsZEVkZ2UtPmhhc0Jvb2xl
YW5SZXN1bHQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0
Q2hpbGQxKG5ld0NoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG9CZVRha2VuID0gbm9kZS0+bm90VGFrZW5CbG9j
a0luZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRvQmVOb3RUYWtl
biA9IG5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0VGFrZW5CbG9ja0luZGV4KHRvQmVUYWtlbik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXROb3RUYWtlbkJsb2NrSW5kZXgodG9CZU5vdFRha2VuKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRvQmVUYWtlbiA9IG5vZGUtPm5vdFRha2VuQmxvY2so
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRvQmVOb3RUYWtlbiA9IG5v
ZGUtPnRha2VuQmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFRha2Vu
QmxvY2sodG9CZVRha2VuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE5vdFRh
a2VuQmxvY2sodG9CZU5vdFRha2VuKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDE1ICsyNDUsMTUgQEAgdm9pZCBH
cmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgIGlmIChvcCA9PSBXZWFrSlND
b25zdGFudCkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPndlYWtD
b25zdGFudCgpKSwgIiAoc3RydWN0dXJlOiAiLCAqbm9kZS0+d2Vha0NvbnN0YW50KCktPnN0cnVj
dHVyZSgpLCAiKSIpOwogICAgIGlmIChub2RlLT5pc0JyYW5jaCgpIHx8IG5vZGUtPmlzSnVtcCgp
KQotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJUOiMiLCBub2RlLT50YWtlbkJsb2NrSW5kZXgo
KSk7CisgICAgICAgIG91dC5wcmludChjb21tYSwgIlQ6IiwgKm5vZGUtPnRha2VuQmxvY2soKSk7
CiAgICAgaWYgKG5vZGUtPmlzQnJhbmNoKCkpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgIkY6
IyIsIG5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiRjoiLCAqbm9kZS0+bm90VGFrZW5CbG9jaygpKTsKICAgICBpZiAobm9kZS0+aXNTd2l0Y2go
KSkgewogICAgICAgICBTd2l0Y2hEYXRhKiBkYXRhID0gbm9kZS0+c3dpdGNoRGF0YSgpOwogICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPmtpbmQpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGF0YS0+Y2FzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBvdXQucHJp
bnQoY29tbWEsIGRhdGEtPmNhc2VzW2ldLnZhbHVlLCAiOiMiLCBkYXRhLT5jYXNlc1tpXS50YXJn
ZXQpOwotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJkZWZhdWx0OiMiLCBkYXRhLT5mYWxsVGhy
b3VnaCk7CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPmNhc2VzW2ldLnZhbHVl
LCAiOiIsICpkYXRhLT5jYXNlc1tpXS50YXJnZXQpOworICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJkZWZhdWx0OiIsICpkYXRhLT5mYWxsVGhyb3VnaCk7CiAgICAgfQogICAgIG91dC5wcmludChj
b21tYSwgImJjIyIsIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgCkBAIC0y
NjksMzcgKzI2OSwzNSBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0
CiAgICAgb3V0LnByaW50KCJcbiIpOwogfQogCi12b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIo
UHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4LCBCbG9ja0luZGV4IGJsb2NrSW5k
ZXgsIFBoaU5vZGVEdW1wTW9kZSBwaGlOb2RlRHVtcE1vZGUpCit2b2lkIEdyYXBoOjpkdW1wQmxv
Y2tIZWFkZXIoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4LCBCYXNpY0Jsb2Nr
KiBibG9jaywgUGhpTm9kZUR1bXBNb2RlIHBoaU5vZGVEdW1wTW9kZSkKIHsKLSAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotCi0gICAgb3V0LnByaW50
KHByZWZpeCwgIkJsb2NrICMiLCBibG9ja0luZGV4LCAiICgiLCBibG9jay0+YXQoMCktPmNvZGVP
cmlnaW4sICIpOiAiLCBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIoc2tpcHBlZCkiLCBibG9j
ay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIiwgIlxuIik7CisgICAgb3V0LnBy
aW50KHByZWZpeCwgIkJsb2NrICIsICpibG9jaywgIiAoIiwgYmxvY2stPmF0KDApLT5jb2RlT3Jp
Z2luLCAiKTogIiwgYmxvY2stPmlzUmVhY2hhYmxlID8gIiIgOiAiKHNraXBwZWQpIiwgYmxvY2st
PmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIsICJcbiIpOwogICAgIG91dC5wcmlu
dChwcmVmaXgsICIgIFByZWRlY2Vzc29yczoiKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJsb2NrLT5tX3ByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkKLSAgICAgICAgb3V0LnByaW50KCIg
IyIsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1tpXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKQorICAgICAgICBvdXQucHJpbnQoIiAi
LCAqYmxvY2stPnByZWRlY2Vzc29yc1tpXSk7CiAgICAgb3V0LnByaW50KCJcbiIpOwogICAgIGlm
IChtX2RvbWluYXRvcnMuaXNWYWxpZCgpKSB7CiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIg
IERvbWluYXRlZCBieToiKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Jsb2Nr
cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKCFtX2RvbWluYXRvcnMuZG9taW5hdGVz
KGksIGJsb2NrSW5kZXgpKQorICAgICAgICAgICAgaWYgKCFtX2RvbWluYXRvcnMuZG9taW5hdGVz
KGksIGJsb2NrLT5pbmRleCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBvdXQucHJpbnQoIiAjIiwgaSk7CiAgICAgICAgIH0KICAgICAgICAgb3V0LnByaW50KCJcbiIp
OwogICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBEb21pbmF0ZXM6Iik7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyhibG9ja0luZGV4LCBpKSkKKyAgICAgICAgICAg
IGlmICghbV9kb21pbmF0b3JzLmRvbWluYXRlcyhibG9jay0+aW5kZXgsIGkpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgb3V0LnByaW50KCIgIyIsIGkpOwogICAgICAg
ICB9CiAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICB9CiAgICAgaWYgKG1fbmF0dXJhbExv
b3BzLmlzVmFsaWQoKSkgewotICAgICAgICBpZiAoY29uc3QgTmF0dXJhbExvb3AqIGxvb3AgPSBt
X25hdHVyYWxMb29wcy5oZWFkZXJPZihibG9ja0luZGV4KSkgeworICAgICAgICBpZiAoY29uc3Qg
TmF0dXJhbExvb3AqIGxvb3AgPSBtX25hdHVyYWxMb29wcy5oZWFkZXJPZihibG9jaykpIHsKICAg
ICAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIExvb3AgaGVhZGVyLCBjb250YWluczoiKTsK
ICAgICAgICAgICAgIFZlY3RvcjxCbG9ja0luZGV4PiBzb3J0ZWRCbG9ja0xpc3Q7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9vcC0+c2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICAgICAgc29ydGVkQmxvY2tMaXN0LmFwcGVuZChsb29wLT5hdChpKSk7CisgICAgICAgICAg
ICAgICAgc29ydGVkQmxvY2tMaXN0LmFwcGVuZChsb29wLT5hdChpKS0+aW5kZXgpOwogICAgICAg
ICAgICAgc3RkOjpzb3J0KHNvcnRlZEJsb2NrTGlzdC5iZWdpbigpLCBzb3J0ZWRCbG9ja0xpc3Qu
ZW5kKCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvcnRlZEJsb2Nr
TGlzdC5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAjIiwgc29ydGVk
QmxvY2tMaXN0W2ldKTsKQEAgLTMwNywxMSArMzA1LDExIEBAIHZvaWQgR3JhcGg6OmR1bXBCbG9j
a0hlYWRlcihQcmludFN0cmVhbSYKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgVmVjdG9y
PGNvbnN0IE5hdHVyYWxMb29wKj4gY29udGFpbmluZ0xvb3BzID0KLSAgICAgICAgICAgIG1fbmF0
dXJhbExvb3BzLmxvb3BzT2YoYmxvY2tJbmRleCk7CisgICAgICAgICAgICBtX25hdHVyYWxMb29w
cy5sb29wc09mKGJsb2NrKTsKICAgICAgICAgaWYgKCFjb250YWluaW5nTG9vcHMuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBDb250YWluaW5nIGxvb3AgaGVh
ZGVyczoiKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb250YWluaW5n
TG9vcHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgb3V0LnByaW50KCIgIyIsIGNvbnRh
aW5pbmdMb29wc1tpXS0+aGVhZGVyKCkpOworICAgICAgICAgICAgICAgIG91dC5wcmludCgiICIs
ICpjb250YWluaW5nTG9vcHNbaV0tPmhlYWRlcigpKTsKICAgICAgICAgICAgIG91dC5wcmludCgi
XG4iKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM0NCw3ICszNDIsNyBAQCB2b2lkIEdyYXBoOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9j
a3NbYl0uZ2V0KCk7CiAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgZHVtcEJsb2NrSGVhZGVyKG91dCwgIiIsIGIsIER1bXBBbGxQaGlzKTsKKyAgICAg
ICAgZHVtcEJsb2NrSGVhZGVyKG91dCwgIiIsIGJsb2NrLCBEdW1wQWxsUGhpcyk7CiAgICAgICAg
IG91dC5wcmludCgiICB2YXJzIGJlZm9yZTogIik7CiAgICAgICAgIGlmIChibG9jay0+Y2ZhSGFz
VmlzaXRlZCkKICAgICAgICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFsdWVzQXRIZWFkLCBv
dXQpOwpAQCAtMzk0LDI5ICszOTIsMjUgQEAgdm9pZCBHcmFwaDo6ZGV0aHJlYWQoKQogICAgIG1f
Zm9ybSA9IExvYWRTdG9yZTsKIH0KIAotdm9pZCBHcmFwaDo6aGFuZGxlU3VjY2Vzc29yKFZlY3Rv
cjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2Nr
SW5kZXggc3VjY2Vzc29ySW5kZXgpCit2b2lkIEdyYXBoOjpoYW5kbGVTdWNjZXNzb3IoVmVjdG9y
PEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9j
ayogc3VjY2Vzc29yKQogewotICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fYmxvY2tzW3N1
Y2Nlc3NvckluZGV4XS5nZXQoKTsKICAgICBpZiAoIXN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUpIHsK
ICAgICAgICAgc3VjY2Vzc29yLT5pc1JlYWNoYWJsZSA9IHRydWU7Ci0gICAgICAgIHdvcmtsaXN0
LmFwcGVuZChzdWNjZXNzb3JJbmRleCk7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZChzdWNjZXNz
b3IpOwogICAgIH0KICAgICAKLSAgICBzdWNjZXNzb3ItPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChi
bG9ja0luZGV4KTsKKyAgICBzdWNjZXNzb3ItPnByZWRlY2Vzc29ycy5hcHBlbmQoYmxvY2spOwog
fQogCiB2b2lkIEdyYXBoOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKQogewotICAgIFZlY3RvcjxC
bG9ja0luZGV4LCAxNj4gd29ya2xpc3Q7Ci0gICAgd29ya2xpc3QuYXBwZW5kKDApOwotICAgIG1f
YmxvY2tzWzBdLT5pc1JlYWNoYWJsZSA9IHRydWU7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAx
Nj4gd29ya2xpc3Q7CisgICAgd29ya2xpc3QuYXBwZW5kKGJsb2NrKDApKTsKKyAgICBibG9jaygw
KS0+aXNSZWFjaGFibGUgPSB0cnVlOwogICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIEJsb2NrSW5kZXggaW5kZXggPSB3b3JrbGlzdC5sYXN0KCk7Ci0gICAgICAgIHdv
cmtsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgCi0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ibG9ja3NbaW5kZXhdLmdldCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1T
dWNjZXNzb3JzKGJsb2NrKTsgaS0tOykKLSAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3Jr
bGlzdCwgaW5kZXgsIHN1Y2Nlc3NvcihibG9jaywgaSkpOworICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJs
b2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Io
d29ya2xpc3QsIGJsb2NrLCBibG9jay0+c3VjY2Vzc29yKGkpKTsKICAgICB9CiB9CiAKQEAgLTQy
Nyw3ICs0MjEsNyBAQCB2b2lkIEdyYXBoOjpyZXNldFJlYWNoYWJpbGl0eSgpCiAgICAgICAgIGlm
ICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYmxvY2stPmlzUmVhY2hh
YmxlID0gZmFsc2U7Ci0gICAgICAgIGJsb2NrLT5tX3ByZWRlY2Vzc29ycy5jbGVhcigpOworICAg
ICAgICBibG9jay0+cHJlZGVjZXNzb3JzLmNsZWFyKCk7CiAgICAgfQogICAgIAogICAgIGRldGVy
bWluZVJlYWNoYWJpbGl0eSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNyArMTY5LDcgQEAgcHVibGljOgogICAgIC8vIENv
ZGVCbG9jayBpcyBvcHRpb25hbCwgYnV0IG1heSBhbGxvdyBhZGRpdGlvbmFsIGluZm9ybWF0aW9u
IHRvIGJlIGR1bXBlZCAoZS5nLiBJZGVudGlmaWVyIG5hbWVzKS4KICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mID0gV1RGOjpkYXRhRmlsZSgpKTsKICAgICBlbnVtIFBoaU5vZGVEdW1wTW9kZSB7
IER1bXBMaXZlUGhpc09ubHksIER1bXBBbGxQaGlzIH07Ci0gICAgdm9pZCBkdW1wQmxvY2tIZWFk
ZXIoUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIEJsb2NrSW5kZXgsIFBoaU5vZGVE
dW1wTW9kZSk7CisgICAgdm9pZCBkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mLCBjb25zdCBj
aGFyKiBwcmVmaXgsIEJhc2ljQmxvY2sqLCBQaGlOb2RlRHVtcE1vZGUpOwogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYsIEVkZ2UpOwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYsIGNvbnN0
IGNoYXIqIHByZWZpeCwgTm9kZSopOwogICAgIHN0YXRpYyBpbnQgYW1vdW50T2ZOb2RlV2hpdGVT
cGFjZShOb2RlKik7CkBAIC0xNzksOCArMTc5LDYgQEAgcHVibGljOgogICAgIC8vIHByZWNlZGlu
ZyBub2RlLiBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2FzIHByaW50ZWQuCiAgICAgYm9vbCBk
dW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSogcHJl
dmlvdXNOb2RlLCBOb2RlKiBjdXJyZW50Tm9kZSk7CiAKLSAgICBCbG9ja0luZGV4IGJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChWZWN0b3I8QmxvY2tJbmRleD4mIGJsb2NrcywgdW5zaWduZWQg
Ynl0ZWNvZGVCZWdpbik7Ci0KICAgICBTcGVjdWxhdGVkVHlwZSBnZXRKU0NvbnN0YW50U3BlY3Vs
YXRpb24oTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21W
YWx1ZShub2RlLT52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jaykpOwpAQCAtNDU1LDE3ICs0
NTMsMjQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPnVzZXNBcmd1bWVu
dHMoKTsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycyhCYXNpY0Jsb2Nr
KiBibG9jaykKKyAgICBCbG9ja0luZGV4IG51bUJsb2NrcygpIGNvbnN0IHsgcmV0dXJuIG1fYmxv
Y2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGJsb2NrKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7IH0KKyAgICBCYXNp
Y0Jsb2NrKiBsYXN0QmxvY2soKSBjb25zdCB7IHJldHVybiBibG9jayhudW1CbG9ja3MoKSAtIDEp
OyB9CisKKyAgICB2b2lkIGFwcGVuZEJsb2NrKFBhc3NSZWZQdHI8QmFzaWNCbG9jaz4gYmFzaWNC
bG9jaykKICAgICB7Ci0gICAgICAgIHJldHVybiBibG9jay0+bGFzdCgpLT5udW1TdWNjZXNzb3Jz
KCk7CisgICAgICAgIGJhc2ljQmxvY2stPmluZGV4ID0gbV9ibG9ja3Muc2l6ZSgpOworICAgICAg
ICBtX2Jsb2Nrcy5hcHBlbmQoYmFzaWNCbG9jayk7CiAgICAgfQotICAgIEJsb2NrSW5kZXggc3Vj
Y2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICAKKyAgICB2b2lk
IGtpbGxCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4g
YmxvY2stPmxhc3QoKS0+c3VjY2Vzc29yKGluZGV4KTsKKyAgICAgICAgbV9ibG9ja3NbYmxvY2tJ
bmRleF0uY2xlYXIoKTsKICAgICB9Ci0gICAgQmxvY2tJbmRleCBzdWNjZXNzb3JGb3JDb25kaXRp
b24oQmFzaWNCbG9jayogYmxvY2ssIGJvb2wgY29uZGl0aW9uKQorICAgIAorICAgIHZvaWQga2ls
bEJsb2NrKEJhc2ljQmxvY2sqIGJhc2ljQmxvY2spCiAgICAgewotICAgICAgICByZXR1cm4gYmxv
Y2stPmxhc3QoKS0+c3VjY2Vzc29yRm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7CisgICAgICAgIGtp
bGxCbG9jayhiYXNpY0Jsb2NrLT5pbmRleCk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNQcmVk
aWN0ZWROdW1lcmljYWwoTm9kZSogbm9kZSkKQEAgLTY1OSw3ICs2NjQsNyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgTm9kZUFsbG9jYXRvciYgbV9hbGxvY2F0b3I7CiAKLSAgICBWZWN0b3I8IE93blB0
cjxCYXNpY0Jsb2NrPiAsIDg+IG1fYmxvY2tzOworICAgIFZlY3RvcjwgUmVmUHRyPEJhc2ljQmxv
Y2s+ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPEVkZ2UsIDE2PiBtX3ZhckFyZ0NoaWxkcmVu
OwogICAgIFZlY3RvcjxTdG9yYWdlQWNjZXNzRGF0YT4gbV9zdG9yYWdlQWNjZXNzRGF0YTsKICAg
ICBWZWN0b3I8Tm9kZSosIDg+IG1fYXJndW1lbnRzOwpAQCAtNjgzLDcgKzY4OCw3IEBAIHB1Ymxp
YzoKICAgICBSZWZDb3VudFN0YXRlIG1fcmVmQ291bnRTdGF0ZTsKIHByaXZhdGU6CiAgICAgCi0g
ICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3Qs
IEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCk7CisgICAg
dm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJhc2ljQmxvY2sqLCAxNj4mIHdvcmtsaXN0LCBC
YXNpY0Jsb2NrKiwgQmFzaWNCbG9jayogc3VjY2Vzc29yKTsKICAgICAKICAgICBBZGRTcGVjdWxh
dGlvbk1vZGUgYWRkSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlKiBhZGQsIGJv
b2wgdmFyaWFibGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyLCBOb2RlKiBpbW1lZGlhdGUpCiAgICAg
ewpAQCAtNzMyLDI3ICs3MzcsNiBAQCBwcml2YXRlOgogICAgIH0KIH07CiAKLWNsYXNzIEdldEJ5
dGVjb2RlQmVnaW5Gb3JCbG9jayB7Ci1wdWJsaWM6Ci0gICAgR2V0Qnl0ZWNvZGVCZWdpbkZvckJs
b2NrKEdyYXBoJiBncmFwaCkKLSAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQotICAgIHsKLSAgICB9
Ci0gICAgCi0gICAgdW5zaWduZWQgb3BlcmF0b3IoKShCbG9ja0luZGV4KiBibG9ja0luZGV4KSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGgubV9ibG9ja3NbKmJsb2NrSW5kZXhd
LT5ieXRlY29kZUJlZ2luOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHcmFwaCYgbV9ncmFwaDsK
LX07Ci0KLWlubGluZSBCbG9ja0luZGV4IEdyYXBoOjpibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZz
ZXQoVmVjdG9yPEJsb2NrSW5kZXg+JiBsaW5raW5nVGFyZ2V0cywgdW5zaWduZWQgYnl0ZWNvZGVC
ZWdpbikKLXsKLSAgICByZXR1cm4gKmJpbmFyeVNlYXJjaDxCbG9ja0luZGV4LCB1bnNpZ25lZD4o
bGlua2luZ1RhcmdldHMsIGxpbmtpbmdUYXJnZXRzLnNpemUoKSwgYnl0ZWNvZGVCZWdpbiwgR2V0
Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKCp0aGlzKSk7Ci19Ci0KICNkZWZpbmUgREZHX05PREVfRE9f
VE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIHRoaW5nVG9EbykgZG8geyAgICAgICAgICAgIFwKICAg
ICAgICAgTm9kZSogX25vZGUgPSAobm9kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKF9ub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFy
Z3MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDgsNyArNDgsNyBAQCBKSVRDb21waWxlcjo6SklUQ29tcGlsZXIoR3JhcGgmIGRmZykKICAg
ICA6IENDYWxsSGVscGVycygmZGZnLm1fdm0sIGRmZy5tX2NvZGVCbG9jaykKICAgICAsIG1fZ3Jh
cGgoZGZnKQogICAgICwgbV9qaXRDb2RlKGFkb3B0UmVmKG5ldyBKSVRDb2RlKCkpKQotICAgICwg
bV9ibG9ja0hlYWRzKGRmZy5tX2Jsb2Nrcy5zaXplKCkpCisgICAgLCBtX2Jsb2NrSGVhZHMoZGZn
Lm51bUJsb2NrcygpKQogICAgICwgbV9jdXJyZW50Q29kZU9yaWdpbkluZGV4KDApCiB7CiAgICAg
aWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgpIHx8IG1fZ3JhcGgubV92bS5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXIpCkBAIC0xNzAsMTMgKzE3MCwxMyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExp
bmtCdWZmZXImIGxpbmtCCiAgICAgICAgIAogICAgICAgICB1c2VkSnVtcFRhYmxlcy5zZXQoZGF0
YS5zd2l0Y2hUYWJsZUluZGV4KTsKICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9IG1f
Y29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAg
ICAgdGFibGUuY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNb
ZGF0YS5mYWxsVGhyb3VnaF0pOworICAgICAgICB0YWJsZS5jdGlEZWZhdWx0ID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoLT5pbmRleF0pOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSB0YWJsZS5jdGlPZmZzZXRzLnNpemUoKTsgai0tOykKICAg
ICAgICAgICAgIHRhYmxlLmN0aU9mZnNldHNbal0gPSB0YWJsZS5jdGlEZWZhdWx0OwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSBkYXRhLmNhc2VzLnNpemUoKTsgai0tOykgewogICAgICAgICAg
ICAgU3dpdGNoQ2FzZSYgbXlDYXNlID0gZGF0YS5jYXNlc1tqXTsKICAgICAgICAgICAgIHRhYmxl
LmN0aU9mZnNldHNbbXlDYXNlLnZhbHVlLnN3aXRjaExvb2t1cFZhbHVlKCkgLSB0YWJsZS5taW5d
ID0KLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW215
Q2FzZS50YXJnZXRdKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9i
bG9ja0hlYWRzW215Q2FzZS50YXJnZXQtPmluZGV4XSk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
CkBAIC0xOTksNyArMTk5LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBs
aW5rQgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBTdHJpbmdKdW1w
VGFibGUmIHRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3
aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICB0YWJsZS5jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoXSk7CisgICAgICAgIHRhYmxl
LmN0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW2RhdGEuZmFs
bFRocm91Z2gtPmluZGV4XSk7CiAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0
VGFibGU6Oml0ZXJhdG9yIGl0ZXI7CiAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zm
c2V0VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLm9mZnNldFRhYmxlLmVuZCgpOwogICAgICAg
ICBmb3IgKGl0ZXIgPSB0YWJsZS5vZmZzZXRUYWJsZS5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytp
dGVyKQpAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZl
ciYgbGlua0IKICAgICAgICAgICAgIFN3aXRjaENhc2UmIG15Q2FzZSA9IGRhdGEuY2FzZXNbal07
CiAgICAgICAgICAgICBpdGVyID0gdGFibGUub2Zmc2V0VGFibGUuZmluZChteUNhc2UudmFsdWUu
c3RyaW5nSW1wbCgpKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gZW5kKTsK
LSAgICAgICAgICAgIGl0ZXItPnZhbHVlLmN0aU9mZnNldCA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldF0pOworICAgICAgICAgICAgaXRlci0+dmFsdWUu
Y3RpT2Zmc2V0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fYmxvY2tIZWFkc1tteUNhc2UudGFy
Z2V0LT5pbmRleF0pOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
NiwxMSArMjk2LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldFN0YXJ0
T2ZDb2RlKGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygpKTsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCBzZXRGb3JCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgdm9pZCBzZXRGb3JCbG9j
a0luZGV4KEJsb2NrSW5kZXggYmxvY2tJbmRleCkKICAgICB7CiAgICAgICAgIGlmIChMSUtFTFko
IW1fZGlzYXNzZW1ibGVyKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9kaXNhc3Nl
bWJsZXItPnNldEZvckJsb2NrKGJsb2NrSW5kZXgsIGxhYmVsSWdub3JpbmdXYXRjaHBvaW50cygp
KTsKKyAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEZvckJsb2NrSW5kZXgoYmxvY2tJbmRleCwg
bGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHNldEZv
ck5vZGUoTm9kZSogbm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTmF0
dXJhbExvb3BzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05hdHVyYWxMb29wcy5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUs
OSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHZvaWQgTmF0dXJhbExvb3A6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoIltIZWFkZXI6
ICMiLCBoZWFkZXIoKSwgIiwgQm9keToiKTsKKyAgICBvdXQucHJpbnQoIltIZWFkZXI6ICIsICpo
ZWFkZXIoKSwgIiwgQm9keToiKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ib2R5
LnNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQoIiAjIiwgbV9ib2R5W2ldKTsKKyAgICAg
ICAgb3V0LnByaW50KCIgIiwgKm1fYm9keVtpXSk7CiAgICAgb3V0LnByaW50KCJdIik7CiB9CiAK
QEAgLTYwLDI2ICs2MCwyNiBAQCB2b2lkIE5hdHVyYWxMb29wczo6Y29tcHV0ZShHcmFwaCYgZ3Jh
cGgpCiAgICAgCiAgICAgbV9sb29wcy5yZXNpemUoMCk7CiAgICAgCi0gICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSBncmFwaC5tX2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsK
LSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5n
ZXQoKTsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdyYXBoLm51bUJsb2Nrcygp
OyBibG9ja0luZGV4LS07KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7CiAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGdyYXBoLm51bVN1Y2Nlc3Nv
cnMoYmxvY2spOyBpLS07KSB7Ci0gICAgICAgICAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4
ID0gZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCBpKTsKLSAgICAgICAgICAgIGlmICghZ3JhcGgubV9k
b21pbmF0b3JzLmRvbWluYXRlcyhzdWNjZXNzb3JJbmRleCwgYmxvY2tJbmRleCkpCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspIHsKKyAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGJsb2NrLT5zdWNjZXNzb3IoaSk7CisgICAg
ICAgICAgICBpZiAoIWdyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMoc3VjY2Vzc29yLCBibG9j
aykpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBib29sIGZvdW5kID0g
ZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBtX2xvb3BzLnNpemUoKTsgai0t
OykgewotICAgICAgICAgICAgICAgIGlmIChtX2xvb3BzW2ldLmhlYWRlcigpID09IHN1Y2Nlc3Nv
ckluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbG9vcHNbaV0uYWRkQmxvY2soYmxvY2tJ
bmRleCk7CisgICAgICAgICAgICAgICAgaWYgKG1fbG9vcHNbaV0uaGVhZGVyKCkgPT0gc3VjY2Vz
c29yKSB7CisgICAgICAgICAgICAgICAgICAgIG1fbG9vcHNbaV0uYWRkQmxvY2soYmxvY2spOwog
ICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGZvdW5kKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgTmF0dXJhbExvb3AgbG9vcChzdWNjZXNzb3JJbmRleCk7Ci0gICAg
ICAgICAgICBsb29wLmFkZEJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgTmF0dXJhbExv
b3AgbG9vcChzdWNjZXNzb3IpOworICAgICAgICAgICAgbG9vcC5hZGRCbG9jayhibG9jayk7CiAg
ICAgICAgICAgICBtX2xvb3BzLmFwcGVuZChsb29wKTsKICAgICAgICAgfQogICAgIH0KQEAgLTg4
LDggKzg4LDggQEAgdm9pZCBOYXR1cmFsTG9vcHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQogICAg
ICAgICBkYXRhTG9nKCJBZnRlciBib290c3RyYXA6ICIsICp0aGlzLCAiXG4iKTsKICAgICAKICAg
ICBGYXN0Qml0VmVjdG9yIHNlZW5CbG9ja3M7Ci0gICAgVmVjdG9yPEJsb2NrSW5kZXgsIDQ+IGJs
b2NrV29ya2xpc3Q7Ci0gICAgc2VlbkJsb2Nrcy5yZXNpemUoZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
KTsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayosIDQ+IGJsb2NrV29ya2xpc3Q7CisgICAgc2VlbkJs
b2Nrcy5yZXNpemUoZ3JhcGgubnVtQmxvY2tzKCkpOwogICAgIAogICAgIGZvciAodW5zaWduZWQg
aSA9IG1fbG9vcHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIE5hdHVyYWxMb29wJiBsb29wID0g
bV9sb29wc1tpXTsKQEAgLTEwMSwzMCArMTAxLDI3IEBAIHZvaWQgTmF0dXJhbExvb3BzOjpjb21w
dXRlKEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgIGRhdGFMb2coIkRlYWxpbmcgd2l0aCBsb29w
ICIsIGxvb3AsICJcbiIpOwogICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbG9v
cC5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgIHNlZW5CbG9ja3Muc2V0KGxvb3Bbal0pOwor
ICAgICAgICAgICAgc2VlbkJsb2Nrcy5zZXQobG9vcFtqXS0+aW5kZXgpOwogICAgICAgICAgICAg
YmxvY2tXb3JrbGlzdC5hcHBlbmQobG9vcFtqXSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIHdoaWxlICghYmxvY2tXb3JrbGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IGJsb2NrV29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gYmxvY2tXb3JrbGlzdC50YWtlTGFzdCgpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgRGVhbGluZyB3aXRoICMiLCBibG9ja0luZGV4LCAiXG4iKTsKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgRGVhbGluZyB3aXRoICIsICpibG9jaywgIlxuIik7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChibG9ja0luZGV4ID09IGxvb3AuaGVhZGVyKCkpCisgICAgICAgICAg
ICBpZiAoYmxvY2sgPT0gbG9vcC5oZWFkZXIoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5tX2Js
b2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIEFTU0VSVChibG9jayk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5tX3ByZWRlY2Vz
c29ycy5zaXplKCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHByZWRlY2Vz
c29ySW5kZXggPSBibG9jay0+bV9wcmVkZWNlc3NvcnNbal07Ci0gICAgICAgICAgICAgICAgaWYg
KHNlZW5CbG9ja3MuZ2V0KHByZWRlY2Vzc29ySW5kZXgpKQorICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGotLTspIHsKKyAgICAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IGJsb2NrLT5wcmVkZWNlc3NvcnNbal07Cisg
ICAgICAgICAgICAgICAgaWYgKHNlZW5CbG9ja3MuZ2V0KHByZWRlY2Vzc29yLT5pbmRleCkpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGxvb3AuYWRkQmxvY2socHJlZGVjZXNzb3JJbmRleCk7Ci0gICAgICAgICAgICAgICAg
YmxvY2tXb3JrbGlzdC5hcHBlbmQocHJlZGVjZXNzb3JJbmRleCk7Ci0gICAgICAgICAgICAgICAg
c2VlbkJsb2Nrcy5zZXQocHJlZGVjZXNzb3JJbmRleCk7CisgICAgICAgICAgICAgICAgbG9vcC5h
ZGRCbG9jayhwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgYmxvY2tXb3JrbGlzdC5hcHBl
bmQocHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIHNlZW5CbG9ja3Muc2V0KHByZWRlY2Vz
c29yLT5pbmRleCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzMsMTIg
KzEzMCwxMiBAQCB2b2lkIE5hdHVyYWxMb29wczo6Y29tcHV0ZShHcmFwaCYgZ3JhcGgpCiAgICAg
ICAgIGRhdGFMb2coIlJlc3VsdHM6ICIsICp0aGlzLCAiXG4iKTsKIH0KIAotVmVjdG9yPGNvbnN0
IE5hdHVyYWxMb29wKj4gTmF0dXJhbExvb3BzOjpsb29wc09mKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCkgY29uc3QKK1ZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IE5hdHVyYWxMb29wczo6bG9vcHNP
ZihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKIHsKICAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExv
b3AqPiByZXN1bHQ7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb29wcy5zaXplKCk7
IGktLTspIHsKLSAgICAgICAgaWYgKG1fbG9vcHNbaV0uY29udGFpbnMoYmxvY2tJbmRleCkpCisg
ICAgICAgIGlmIChtX2xvb3BzW2ldLmNvbnRhaW5zKGJsb2NrKSkKICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoJm1fbG9vcHNbaV0pOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTmF0dXJhbExvb3BzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuaAkocmV2aXNpb24gMTUyMzM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQW5h
bHlzaXMuaCIKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9u
LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTM4LDI0ICszOSwyNCBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBjbGFzcyBOYXR1cmFsTG9vcCB7CiBw
dWJsaWM6CiAgICAgTmF0dXJhbExvb3AoKQotICAgICAgICA6IG1faGVhZGVyKE5vQmxvY2spCisg
ICAgICAgIDogbV9oZWFkZXIoMCkKICAgICB7CiAgICAgfQogICAgIAotICAgIE5hdHVyYWxMb29w
KEJsb2NrSW5kZXggaGVhZGVyKQorICAgIE5hdHVyYWxMb29wKEJhc2ljQmxvY2sqIGhlYWRlcikK
ICAgICAgICAgOiBtX2hlYWRlcihoZWFkZXIpCiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lk
IGFkZEJsb2NrKEJsb2NrSW5kZXggYmxvY2spIHsgbV9ib2R5LmFwcGVuZChibG9jayk7IH0KKyAg
ICB2b2lkIGFkZEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKSB7IG1fYm9keS5hcHBlbmQoYmxvY2sp
OyB9CiAgICAgCi0gICAgQmxvY2tJbmRleCBoZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYWRl
cjsgfQorICAgIEJhc2ljQmxvY2sqIGhlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGVyOyB9
CiAgICAgCiAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9keS5zaXplKCk7
IH0KLSAgICBCbG9ja0luZGV4IGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fYm9keVtp
XTsgfQotICAgIEJsb2NrSW5kZXggb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVy
biBhdChpKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJu
IG1fYm9keVtpXTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29u
c3QgeyByZXR1cm4gYXQoaSk7IH0KICAgICAKLSAgICBib29sIGNvbnRhaW5zKEJsb2NrSW5kZXgg
YmxvY2spIGNvbnN0CisgICAgYm9vbCBjb250YWlucyhCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QK
ICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fYm9keS5zaXplKCk7IGktLTspIHsK
ICAgICAgICAgICAgIGlmIChtX2JvZHlbaV0gPT0gYmxvY2spCkBAIC02Nyw4ICs2OCw4IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIHByaXZhdGU6
Ci0gICAgQmxvY2tJbmRleCBtX2hlYWRlcjsKLSAgICBWZWN0b3I8QmxvY2tJbmRleCwgND4gbV9i
b2R5OworICAgIEJhc2ljQmxvY2sqIG1faGVhZGVyOworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwg
ND4gbV9ib2R5OwogfTsKIAogY2xhc3MgTmF0dXJhbExvb3BzIDogcHVibGljIEFuYWx5c2lzPE5h
dHVyYWxMb29wcz4gewpAQCAtOTEsMTcgKzkyLDE3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBS
ZXR1cm4gZWl0aGVyIG51bGwgaWYgdGhlIGJsb2NrIGlzbid0IGEgbG9vcCBoZWFkZXIsIG9yIHRo
ZQogICAgIC8vIGxvb3AgaXQgYmVsb25ncyB0by4KLSAgICBjb25zdCBOYXR1cmFsTG9vcCogaGVh
ZGVyT2YoQmxvY2tJbmRleCBibG9ja0luZGV4KSBjb25zdAorICAgIGNvbnN0IE5hdHVyYWxMb29w
KiBoZWFkZXJPZihCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKICAgICB7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fbG9vcHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAobV9s
b29wc1tpXS5oZWFkZXIoKSA9PSBibG9ja0luZGV4KQorICAgICAgICAgICAgaWYgKG1fbG9vcHNb
aV0uaGVhZGVyKCkgPT0gYmxvY2spCiAgICAgICAgICAgICAgICAgcmV0dXJuICZtX2xvb3BzW2ld
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKICAgICAvLyBSZXR1
cm4gdGhlIGluZGljZXMgb2YgYWxsIGxvb3BzIHRoaXMgYmVsb25ncyB0by4KLSAgICBWZWN0b3I8
Y29uc3QgTmF0dXJhbExvb3AqPiBsb29wc09mKEJsb2NrSW5kZXggYmxvY2tJbmRleCkgY29uc3Q7
CisgICAgVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gbG9vcHNPZihCYXNpY0Jsb2NrKikgY29u
c3Q7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIHByaXZhdGU6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTUyMzM5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYg
KzQ4LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitzdHJ1Y3QgQmFz
aWNCbG9jazsKKwogc3RydWN0IFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhIHsKICAgICBTdHJ1Y3R1
cmUqIHByZXZpb3VzU3RydWN0dXJlOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlOwpAQCAt
ODAsMTggKzgyLDI4IEBAIHN0cnVjdCBOZXdBcnJheUJ1ZmZlckRhdGEgewogLy8gdmFsdWVzLgog
c3RydWN0IFN3aXRjaENhc2UgewogICAgIFN3aXRjaENhc2UoKQotICAgICAgICA6IHRhcmdldChO
b0Jsb2NrKQorICAgICAgICA6IHRhcmdldCgwKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgU3dp
dGNoQ2FzZShMYXp5SlNWYWx1ZSB2YWx1ZSwgQmxvY2tJbmRleCB0YXJnZXQpCisgICAgU3dpdGNo
Q2FzZShMYXp5SlNWYWx1ZSB2YWx1ZSwgQmFzaWNCbG9jayogdGFyZ2V0KQogICAgICAgICA6IHZh
bHVlKHZhbHVlKQogICAgICAgICAsIHRhcmdldCh0YXJnZXQpCiAgICAgewogICAgIH0KICAgICAK
KyAgICBzdGF0aWMgU3dpdGNoQ2FzZSB3aXRoQnl0ZWNvZGVJbmRleChMYXp5SlNWYWx1ZSB2YWx1
ZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICB7CisgICAgICAgIFN3aXRjaENhc2UgcmVz
dWx0OworICAgICAgICByZXN1bHQudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmVzdWx0LnRhcmdl
dCA9IGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihieXRl
Y29kZUluZGV4KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHVu
c2lnbmVkIHRhcmdldEJ5dGVjb2RlSW5kZXgoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90Pih0YXJnZXQpOyB9CisgICAgCiAgICAgTGF6eUpTVmFsdWUgdmFsdWU7Ci0gICAg
QmxvY2tJbmRleCB0YXJnZXQ7CisgICAgQmFzaWNCbG9jayogdGFyZ2V0OwogfTsKIAogZW51bSBT
d2l0Y2hLaW5kIHsKQEAgLTEwNSwxNSArMTE3LDIxIEBAIHN0cnVjdCBTd2l0Y2hEYXRhIHsKICAg
ICAvLyBjb25zdHJ1Y3RpbmcgdGhpcyBzaG91bGQgbWFrZSBzdXJlIHRvIGluaXRpYWxpemUgZXZl
cnl0aGluZyB0aGV5CiAgICAgLy8gY2FyZSBhYm91dCBtYW51YWxseS4KICAgICBTd2l0Y2hEYXRh
KCkKLSAgICAgICAgOiBmYWxsVGhyb3VnaChOb0Jsb2NrKQorICAgICAgICA6IGZhbGxUaHJvdWdo
KDApCiAgICAgICAgICwga2luZChzdGF0aWNfY2FzdDxTd2l0Y2hLaW5kPigtMSkpCiAgICAgICAg
ICwgc3dpdGNoVGFibGVJbmRleChVSU5UX01BWCkKICAgICAgICAgLCBkaWRVc2VKdW1wVGFibGUo
ZmFsc2UpCiAgICAgewogICAgIH0KICAgICAKKyAgICB2b2lkIHNldEZhbGxUaHJvdWdoQnl0ZWNv
ZGVJbmRleCh1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgIHsKKyAgICAgICAgZmFsbFRocm91
Z2ggPSBiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oYnl0
ZWNvZGVJbmRleCkpOworICAgIH0KKyAgICB1bnNpZ25lZCBmYWxsVGhyb3VnaEJ5dGVjb2RlSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihmYWxsVGhyb3VnaCk7
IH0KKyAgICAKICAgICBWZWN0b3I8U3dpdGNoQ2FzZT4gY2FzZXM7Ci0gICAgQmxvY2tJbmRleCBm
YWxsVGhyb3VnaDsKKyAgICBCYXNpY0Jsb2NrKiBmYWxsVGhyb3VnaDsKICAgICBTd2l0Y2hLaW5k
IGtpbmQ7CiAgICAgdW5zaWduZWQgc3dpdGNoVGFibGVJbmRleDsKICAgICBib29sIGRpZFVzZUp1
bXBUYWJsZTsKQEAgLTc0MywyOCArNzYxLDI4IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0
dXJuIG1fb3BJbmZvMjsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRUYWtlbkJsb2NrSW5kZXgo
QmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHZvaWQgc2V0VGFrZW5CbG9jayhCYXNpY0Jsb2Nr
KiBibG9jaykKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpIHx8IGlzSnVtcCgpKTsK
LSAgICAgICAgbV9vcEluZm8gPSBibG9ja0luZGV4OworICAgICAgICBtX29wSW5mbyA9IGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXROb3RU
YWtlbkJsb2NrSW5kZXgoQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHZvaWQgc2V0Tm90VGFr
ZW5CbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5j
aCgpKTsKLSAgICAgICAgbV9vcEluZm8yID0gYmxvY2tJbmRleDsKKyAgICAgICAgbV9vcEluZm8y
ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYmxvY2spOwogICAgIH0KICAgICAKLSAgICBCbG9j
a0luZGV4IHRha2VuQmxvY2tJbmRleCgpCisgICAgQmFzaWNCbG9jayogdGFrZW5CbG9jaygpCiAg
ICAgewogICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7Ci0gICAgICAgIHJl
dHVybiBtX29wSW5mbzsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4o
bV9vcEluZm8pOwogICAgIH0KICAgICAKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuQmxvY2tJbmRl
eCgpCisgICAgQmFzaWNCbG9jayogbm90VGFrZW5CbG9jaygpCiAgICAgewogICAgICAgICBBU1NF
UlQoaXNCcmFuY2goKSk7Ci0gICAgICAgIHJldHVybiBtX29wSW5mbzI7CisgICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8QmFzaWNCbG9jayo+KG1fb3BJbmZvMik7CiAgICAgfQogICAgIAogICAg
IFN3aXRjaERhdGEqIHN3aXRjaERhdGEoKQpAQCAtNzg3LDcgKzgwNSw3IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBCbG9ja0luZGV4IHN1Y2Nlc3Nvcih1bnNp
Z25lZCBpbmRleCkKKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCiAg
ICAgewogICAgICAgICBpZiAoaXNTd2l0Y2goKSkgewogICAgICAgICAgICAgaWYgKGluZGV4IDwg
c3dpdGNoRGF0YSgpLT5jYXNlcy5zaXplKCkpCkBAIC03OTcsMTkgKzgxNSwxOSBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgIH0KICAgICAgICAgc3dpdGNoIChpbmRleCkgewogICAgICAgICBjYXNl
IDA6Ci0gICAgICAgICAgICByZXR1cm4gdGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgICAgICBy
ZXR1cm4gdGFrZW5CbG9jaygpOwogICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICByZXR1cm4g
bm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgICAgICByZXR1cm4gbm90VGFrZW5CbG9jaygp
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIHJldHVybiBOb0Jsb2NrOworICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQmxvY2tJbmRleCBzdWNjZXNzb3JGb3JDb25k
aXRpb24oYm9vbCBjb25kaXRpb24pCisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yRm9yQ29uZGl0
aW9uKGJvb2wgY29uZGl0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkpOwot
ICAgICAgICByZXR1cm4gY29uZGl0aW9uID8gdGFrZW5CbG9ja0luZGV4KCkgOiBub3RUYWtlbkJs
b2NrSW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIGNvbmRpdGlvbiA/IHRha2VuQmxvY2soKSA6IG5v
dFRha2VuQmxvY2soKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNIZWFwUHJlZGljdGlvbigp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY4LDggKzY4LDggQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0
KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYg
KCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghYmxv
Y2stPmlzT1NSVGFyZ2V0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1
MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjEsOCArNTYxLDggQEAgcHJpdmF0ZToK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFM
b2dGKCJQcm9wYWdhdGluZyBwcmVkaWN0aW9ucyBmb3J3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7
CiAjZW5kaWYKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgp
OworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICgh
YmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBBU1NFUlQoYmxv
Y2stPmlzUmVhY2hhYmxlKTsKQEAgLTU3OCw4ICs1NzgsOCBAQCBwcml2YXRlOgogI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0YoIlByb3Bh
Z2F0aW5nIHByZWRpY3Rpb25zIGJhY2t3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CiAjZW5kaWYK
LSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsK
ICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKQEAgLTcwMyw4ICs3MDMsOCBAQCBw
cml2YXRlOgogI2VuZGlmCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBo
Lm1fdmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgKytpKQogICAgICAgICAgICAgbV9ncmFwaC5t
X3ZhcmlhYmxlQWNjZXNzRGF0YVtpXS5maW5kKCktPmNsZWFyVm90ZXMoKTsKLSAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyAr
K2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5i
bG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM1LDEyICs0
MzUsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbChFZGdlIG9w
ZXJhbmQsIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0KQogewotICAgIEJsb2NrSW5kZXgg
dGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5v
dFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmFzaWNCbG9j
ayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90
VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CiAgICAgCiAgICAgaWYgKHRha2Vu
ID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGludmVydCA9ICFpbnZlcnQ7Ci0gICAgICAgIEJs
b2NrSW5kZXggdG1wID0gdGFrZW47CisgICAgICAgIEJhc2ljQmxvY2sqIHRtcCA9IHRha2VuOwog
ICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwogICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICB9
CkBAIC00OTUsNyArNDk1LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVD
b21wYQogewogICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xl
QnJhbmNoKCk7CiAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewotICAg
ICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+
YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKKyAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1fYmxv
Y2stPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CiAKICAgICAgICAgQVNTRVJUKG5vZGUtPmFkanVz
dGVkUmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgCkBAIC01MTYsOCArNTE2LDggQEAgYm9vbCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYQogCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5v
ZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0
aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNo
Tm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5j
aE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJh
bmNoTm9kZS0+dGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNo
Tm9kZS0+bm90VGFrZW5CbG9jaygpOwogCiAgICAgSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlv
biBjYWxsUmVzdWx0Q29uZGl0aW9uID0gSklUQ29tcGlsZXI6Ok5vblplcm87CiAKQEAgLTUyNiw3
ICs1MjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAgICAg
aWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGNvbmQgPSBKSVRDb21waWxlcjo6
aW52ZXJ0KGNvbmQpOwogICAgICAgICBjYWxsUmVzdWx0Q29uZGl0aW9uID0gSklUQ29tcGlsZXI6
Olplcm87Ci0gICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CisgICAgICAgIEJhc2ljQmxv
Y2sqIHRtcCA9IHRha2VuOwogICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwogICAgICAgICBub3RU
YWtlbiA9IHRtcDsKICAgICB9CkBAIC01ODAsNyArNTgwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogCiAgICAganVtcChub3RUYWtlbik7CiAgICAgCi0gICAg
bV9pbmRleEluQmxvY2sgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5zaXplKCkg
LSAxOworICAgIG1faW5kZXhJbkJsb2NrID0gbV9ibG9jay0+c2l6ZSgpIC0gMTsKICAgICBtX2N1
cnJlbnROb2RlID0gYnJhbmNoTm9kZTsKIH0KIApAQCAtNjY5LDE0ICs2NjksMTQgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZQogCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9kZSogbm9kZSwgTm9kZSogYnJhbmNo
Tm9kZSwgYm9vbCBpbnZlcnQpCiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUt
PnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2Rl
LT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5v
ZGUtPnRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUt
Pm5vdFRha2VuQmxvY2soKTsKIAogICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBi
cmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgogICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRj
aCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdl
IGNhbiBmYWxsIHRocm91Z2guCiAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAg
ICAgIGludmVydCA9ICFpbnZlcnQ7Ci0gICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47Cisg
ICAgICAgIEJhc2ljQmxvY2sqIHRtcCA9IHRha2VuOwogICAgICAgICB0YWtlbiA9IG5vdFRha2Vu
OwogICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICB9CkBAIC0xNDQ1LDggKzE0NDUsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0VG9PYmplCiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2Ug
bGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQsIE5vZGUqIGJyYW5jaE5vZGUpCiB7Ci0gICAgQmxv
Y2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2Nr
SW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBC
YXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Js
b2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKICAgICAKICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbGVmdENoaWxkKTsKICAgICBKU1ZhbHVlT3Bl
cmFuZCBvcDIodGhpcywgcmlnaHRDaGlsZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKQEAg
LTE3MzcsNyArMTczNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90
KE4KICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJh
bmNoKEVkZ2Ugbm9kZVVzZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbikK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2Ugbm9kZVVz
ZSwgQmFzaWNCbG9jayogdGFrZW4sIEJhc2ljQmxvY2sqIG5vdFRha2VuKQogewogICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7
CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CkBAIC0xNzk0LDggKzE3OTQsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm9kZSkKIHsKLSAgICBCbG9ja0luZGV4IHRha2VuID0g
bm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG5vZGUt
Pm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gbm9kZS0+dGFr
ZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gbm9kZS0+bm90VGFrZW5CbG9j
aygpOwogCiAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICBjYXNl
IEJvb2xlYW5Vc2U6IHsKQEAgLTE4MDQsNyArMTgwNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRCcmFuY2goTm9kZSogbm8KIAogICAgICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkp
IHsKICAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpaZXJvOwotICAgICAg
ICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRt
cCA9IHRha2VuOwogICAgICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKICAgICAgICAgICAgIG5v
dFRha2VuID0gdG1wOwogICAgICAgICB9CkBAIC0xODI4LDcgKzE4MjgsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vCiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICAgICAgICAgIGludmVydCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsKICAgICAgICAgICAgICAgICB0YWtlbiA9IG5v
dFRha2VuOwogICAgICAgICAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAgICAgICAgICAgfQpA
QCAtMzIxNiw4ICszMjE2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgIH0KIAogICAgIGNhc2UgREZHOjpKdW1wOiB7Ci0gICAgICAgIEJsb2NrSW5kZXgg
dGFrZW4gPSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICAgICAganVtcCh0YWtlbik7Cisg
ICAgICAgIGp1bXAobm9kZS0+dGFrZW5CbG9jaygpKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzg0LDEyICszODQsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3Vs
YXRpdmVOb25QZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xl
QnJhbmNoTnVsbChFZGdlIG9wZXJhbmQsIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0KQog
ewotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrSW5kZXgoKTsK
LSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9ja0luZGV4
KCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7Cisg
ICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CiAg
ICAgCiAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGludmVydCA9ICFp
bnZlcnQ7Ci0gICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CisgICAgICAgIEJhc2ljQmxv
Y2sqIHRtcCA9IHRha2VuOwogICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwogICAgICAgICBub3RU
YWtlbiA9IHRtcDsKICAgICB9CkBAIC00NDMsNyArNDQzLDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVDb21wYQogewogICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9j
ayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAh
PSBVSU5UX01BWCkgewotICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5t
X2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKKyAgICAgICAgTm9kZSog
YnJhbmNoTm9kZSA9IG1fYmxvY2stPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CiAKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQobm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOwogICAgICAgICAK
QEAgLTQ2NCw4ICs0NjQsOCBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNv
bXBhCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2go
Tm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24gY29uZCwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQogewotICAg
IEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBC
bG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7Cisg
ICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7CisgICAgQmFz
aWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CiAKICAgICBK
SVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21w
aWxlcjo6Tm9uWmVybzsKIApAQCAtNDc0LDcgKzQ3NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlUGVlcGgKICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAg
ICAgICAgY29uZCA9IEpJVENvbXBpbGVyOjppbnZlcnQoY29uZCk7CiAgICAgICAgIGNhbGxSZXN1
bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6WmVybzsKLSAgICAgICAgQmxvY2tJbmRleCB0bXAg
PSB0YWtlbjsKKyAgICAgICAgQmFzaWNCbG9jayogdG1wID0gdGFrZW47CiAgICAgICAgIHRha2Vu
ID0gbm90VGFrZW47CiAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAgIH0KQEAgLTUyNiw3ICs1
MjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAKICAgICBq
dW1wKG5vdFRha2VuKTsKIAotICAgIG1faW5kZXhJbkJsb2NrID0gbV9qaXQuZ3JhcGgoKS5tX2Js
b2Nrc1ttX2Jsb2NrXS0+c2l6ZSgpIC0gMTsKKyAgICBtX2luZGV4SW5CbG9jayA9IG1fYmxvY2st
PnNpemUoKSAtIDE7CiAgICAgbV9jdXJyZW50Tm9kZSA9IGJyYW5jaE5vZGU7CiB9CiAKQEAgLTYw
NywxNCArNjA3LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGUK
IAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKE5v
ZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0KQogewotICAgIEJsb2NrSW5k
ZXggdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4
IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmFzaWNC
bG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayog
bm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CiAKICAgICAvLyBUaGUgYnJh
bmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRoZSB0YWtlbiBibG9jay4KICAgICAvLyBJ
ZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0aCBub3RUYWtlbiAmIGludmVydCB0aGUg
YnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLgogICAgIGlmICh0YWtlbiA9
PSBuZXh0QmxvY2soKSkgewogICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OwotICAgICAgICBCbG9j
a0luZGV4IHRtcCA9IHRha2VuOworICAgICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsKICAg
ICAgICAgdGFrZW4gPSBub3RUYWtlbjsKICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgfQpA
QCAtMTQ2Niw4ICsxNDY2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdFRv
T2JqZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVj
dE9yT3RoZXJFcXVhbGl0eShFZGdlIGxlZnRDaGlsZCwgRWRnZSByaWdodENoaWxkLCBOb2RlKiBi
cmFuY2hOb2RlKQogewotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJs
b2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFr
ZW5CbG9ja0luZGV4KCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtl
bkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtl
bkJsb2NrKCk7CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIGxlZnRD
aGlsZCk7CiAgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIHJpZ2h0Q2hpbGQsIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbik7CkBAIC0xNzY0LDcgKzE3NjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaChFZGdlIG5vZGVVc2UsIEJsb2NrSW5kZXggdGFrZW4s
IEJsb2NrSW5kZXggbm90VGFrZW4pCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JP
dGhlckJyYW5jaChFZGdlIG5vZGVVc2UsIEJhc2ljQmxvY2sqIHRha2VuLCBCYXNpY0Jsb2NrKiBu
b3RUYWtlbikKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlVXNlLCBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwpA
QCAtMTgxNyw4ICsxODE3LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3Ro
ZXJCcgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vZGUpCiB7Ci0g
ICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2Nr
SW5kZXggbm90VGFrZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCYXNpY0Js
b2NrKiB0YWtlbiA9IG5vZGUtPnRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtl
biA9IG5vZGUtPm5vdFRha2VuQmxvY2soKTsKICAgICAKICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgewogICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZTogewpAQCAtMTgzMyw3
ICsxODMzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAg
ICAgICAgICAgICBpbnZlcnQgPSB0cnVlOwotICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG1w
ID0gdGFrZW47CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogdG1wID0gdGFrZW47CiAgICAg
ICAgICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKICAgICAgICAgICAgICAgICBub3RUYWtlbiA9
IHRtcDsKICAgICAgICAgICAgIH0KQEAgLTE4NjMsNyArMTg2Myw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY29u
ZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Olplcm87Ci0gICAgICAgICAgICAgICAgICAgIEJsb2Nr
SW5kZXggdG1wID0gdGFrZW47CisgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRtcCA9
IHRha2VuOwogICAgICAgICAgICAgICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwogICAgICAgICAg
ICAgICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICAgICAgICAgICAgICB9CkBAIC0zMTYwLDgg
KzMxNjAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
fQogCiAgICAgY2FzZSBERkc6Okp1bXA6IHsKLSAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5v
ZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgICAgICBqdW1wKHRha2VuKTsKKyAgICAgICAganVt
cChub2RlLT50YWtlbkJsb2NrKCkpOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyAr
MjI0LDcgQEAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogU3BlY3VsYXRpdmVKSQogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCiB7CiAgICAgbV9qaXQuaml0Q29kZSgpLT5sYXN0T1NSRXhp
dCgpLmNvbnZlcnRUb0ZvcndhcmQoCi0gICAgICAgIG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9i
bG9ja10uZ2V0KCksIG1fY3VycmVudE5vZGUsIG1faW5kZXhJbkJsb2NrLCB2YWx1ZVJlY292ZXJ5
KTsKKyAgICAgICAgbV9ibG9jaywgbV9jdXJyZW50Tm9kZSwgbV9pbmRleEluQmxvY2ssIHZhbHVl
UmVjb3ZlcnkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25D
aGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGUqIG5v
ZGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHZhbHVlUmVjb3ZlcnkpCkBAIC05OTMsNyArOTkzLDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVDb21wYQogewogICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9
IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBV
SU5UX01BWCkgewotICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Js
b2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKKyAgICAgICAgTm9kZSogYnJh
bmNoTm9kZSA9IG1fYmxvY2stPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CiAKICAgICAgICAgQVNT
RVJUKG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgCkBAIC0xMDE0LDcg
KzEwMTQsNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVN0cmljCiB7CiAg
ICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsK
ICAgICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgIE5vZGUq
IGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJ
bmRleEluQmxvY2spOworICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9ibG9jay0+YXQoYnJh
bmNoSW5kZXhJbkJsb2NrKTsKIAogICAgICAgICBBU1NFUlQobm9kZS0+YWRqdXN0ZWRSZWZDb3Vu
dCgpID09IDEpOwogICAgICAgICAKQEAgLTEzNzksOCArMTM3OSw4IEBAIEZQUlRlbXBvcmFyeTo6
RlBSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSkkKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVBlZXBIb2xlRG91YmxlQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIEpJVENv
bXBpbGVyOjpEb3VibGVDb25kaXRpb24gY29uZGl0aW9uKQogewotICAgIEJsb2NrSW5kZXggdGFr
ZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRh
a2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmFzaWNCbG9jayog
dGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90VGFr
ZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CiAgICAgCiAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKQEAgLTEzOTEsMTQgKzEzOTEsMTQg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91YgogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShOb2RlKiBub2RlLCBOb2Rl
KiBicmFuY2hOb2RlKQogewotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLT50YWtl
bkJsb2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90
VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50
YWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RU
YWtlbkJsb2NrKCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBj
b25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6RXF1YWw7CiAgICAgCiAgICAgaWYgKHRha2VuID09
IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbDsKLSAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgQmFzaWNCbG9j
ayogdG1wID0gdGFrZW47CiAgICAgICAgIHRha2VuID0gbm90VGFrZW47CiAgICAgICAgIG5vdFRh
a2VuID0gdG1wOwogICAgIH0KQEAgLTE0NjksMTQgKzE0NjksMTQgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UGVlcEhvbGVJbnRlZ2VyQnJhbmNoKE5vZGUqIG5vZGUsIE5vZGUqIGJyYW5jaE5vZGUsIEpJVENv
bXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKLSAgICBCbG9ja0luZGV4
IHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBu
b3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJhc2ljQmxv
Y2sqIHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5v
dFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwogCiAgICAgLy8gVGhlIGJyYW5j
aCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8gSWYg
dGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJy
YW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KICAgICBpZiAodGFrZW4gPT0g
bmV4dEJsb2NrKCkpIHsKICAgICAgICAgY29uZGl0aW9uID0gSklUQ29tcGlsZXI6OmludmVydChj
b25kaXRpb24pOwotICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAgICAgICBCYXNp
Y0Jsb2NrKiB0bXAgPSB0YWtlbjsKICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKICAgICAgICAg
bm90VGFrZW4gPSB0bXA7CiAgICAgfQpAQCAtMTUwNCw3ICsxNTA0LDcgQEAgYm9vbCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbgogICAgIC8vIEZ1c2VkIGNvbXBhcmUgJiBicmFu
Y2guCiAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFu
Y2goKTsKICAgICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAg
IE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChi
cmFuY2hJbmRleEluQmxvY2spOworICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9ibG9jay0+
YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKIAogICAgICAgICAvLyBkZXRlY3RQZWVwSG9sZUJyYW5j
aCBjdXJyZW50bHkgb25seSBwZXJtaXRzIHRoZSBicmFuY2ggdG8gYmUgdGhlIHZlcnkgbmV4dCBu
b2RlLAogICAgICAgICAvLyBzbyBjYW4gYmUgbm8gaW50ZXJ2ZW5pbmcgbm9kZXMgdG8gYWxzbyBy
ZWZlcmVuY2UgdGhlIGNvbXBhcmUuIApAQCAtMTYyNCwxNCArMTYyNCwxNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpiYWlsKCkKICAgICBjbGVhckdlbmVyYXRpb25JbmZvKCk7CiB9CiAKLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYgYmxvY2spCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKCkKIHsKICAgICBBU1NFUlQobV9jb21waWxlT2th
eSk7CiAgICAgCi0gICAgaWYgKCFibG9jay5pc1JlYWNoYWJsZSkKKyAgICBpZiAoIW1fYmxvY2sp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoIWJsb2NrLmNmYUhhc1Zpc2l0ZWQpIHsK
KyAgICBBU1NFUlQobV9ibG9jay0+aXNSZWFjaGFibGUpOworICAgIAorICAgIGlmICghbV9ibG9j
ay0+Y2ZhSGFzVmlzaXRlZCkgewogICAgICAgICAvLyBEb24ndCBnZW5lcmF0ZSBjb2RlIGZvciBi
YXNpYyBibG9ja3MgdGhhdCBhcmUgdW5yZWFjaGFibGUgYWNjb3JkaW5nIHRvIENGQS4KICAgICAg
ICAgLy8gQnV0IHRvIGJlIHN1cmUgdGhhdCBub2JvZHkgaGFzIGdlbmVyYXRlZCBhIGp1bXAgdG8g
dGhpcyBibG9jaywgZHJvcCBpbiBhCiAgICAgICAgIC8vIGJyZWFrcG9pbnQgaGVyZS4KQEAgLTE2
MzksMjAgKzE2NDEsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2Nr
JgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9qaXQuYmxvY2tIZWFkcygpW21fYmxv
Y2tdID0gbV9qaXQubGFiZWwoKTsKKyAgICBtX2ppdC5ibG9ja0hlYWRzKClbbV9ibG9jay0+aW5k
ZXhdID0gbV9qaXQubGFiZWwoKTsKICNpZiBERkdfRU5BQkxFKEpJVF9CUkVBS19PTl9FVkVSWV9C
TE9DSykKICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5kaWYKICAgICAKICNpZiBERkdfRU5B
QkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0YUxvZ0YoIlNldHRpbmcgdXAgc3RhdGUgZm9yIGJs
b2NrICMldTogIiwgbV9ibG9jayk7CisgICAgZGF0YUxvZygiU2V0dGluZyB1cCBzdGF0ZSBmb3Ig
YmxvY2sgIiwgKm1fYmxvY2ssICI6ICIpOwogI2VuZGlmCiAgICAgCiAgICAgbV9zdHJlYW0tPmFw
cGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpyZXNldCgpKTsKICAgICAKICAgICBtX2ppdC5qaXRB
c3NlcnRIYXNWYWxpZENhbGxGcmFtZSgpOwogCi0gICAgQVNTRVJUKG1fYXJndW1lbnRzLnNpemUo
KSA9PSBibG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7CisgICAgQVNT
RVJUKG1fYXJndW1lbnRzLnNpemUoKSA9PSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVy
T2ZBcmd1bWVudHMoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5z
aXplKCk7ICsraSkgewogICAgICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZSA9IFZhbHVlU291
cmNlKFZhbHVlSW5KU1N0YWNrKTsKICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSB2YWx1ZVNvdXJj
ZTsKQEAgLTE2NjAsMTEgKzE2NjIsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShC
YXNpY0Jsb2NrJgogICAgIH0KICAgICAKICAgICBtX3N0YXRlLnJlc2V0KCk7Ci0gICAgbV9zdGF0
ZS5iZWdpbkJhc2ljQmxvY2soJmJsb2NrKTsKKyAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayht
X2Jsb2NrKTsKICAgICAKLSAgICBBU1NFUlQobV92YXJpYWJsZXMuc2l6ZSgpID09IGJsb2NrLnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKKyAgICBBU1NFUlQobV92YXJpYWJsZXMu
c2l6ZSgpID09IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIE5vZGUqIG5vZGUgPSBibG9jay52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7CisgICAgICAg
IE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7CiAgICAgICAg
IFZhbHVlU291cmNlIHZhbHVlU291cmNlOwogICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAg
ICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CkBAIC0xNjkwLDggKzE2
OTIsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgZGF0
YUxvZ0YoIlxuIik7CiAjZW5kaWYKIAotICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2lu
ZGV4SW5CbG9jayA8IGJsb2NrLnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewotICAgICAgICBt
X2N1cnJlbnROb2RlID0gYmxvY2tbbV9pbmRleEluQmxvY2tdOworICAgIGZvciAobV9pbmRleElu
QmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IG1fYmxvY2stPnNpemUoKTsgKyttX2luZGV4SW5C
bG9jaykgeworICAgICAgICBtX2N1cnJlbnROb2RlID0gbV9ibG9jay0+YXQobV9pbmRleEluQmxv
Y2spOwogICAgICAgICAKICAgICAgICAgLy8gV2UgbWF5IGhhdmUgaGlzIGEgY29udHJhZGljdGlv
biB0aGF0IHRoZSBDRkEgd2FzIGF3YXJlIG9mIGJ1dCB0aGF0IHRoZSBKSVQKICAgICAgICAgLy8g
ZGlkbid0IGNhdXNlIGRpcmVjdGx5LgpAQCAtMTg3MSwxMSArMTg3MywxMCBAQCBib29sIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKCkKICAgICBjaGVja0FyZ3VtZW50VHlwZXMoKTsKIAogICAgIEFT
U0VSVCghbV9jdXJyZW50Tm9kZSk7Ci0gICAgZm9yIChtX2Jsb2NrID0gMDsgbV9ibG9jayA8IG1f
aml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21fYmxvY2spIHsKLSAgICAgICAgbV9qaXQu
c2V0Rm9yQmxvY2sobV9ibG9jayk7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9qaXQu
Z3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS5nZXQoKTsKLSAgICAgICAgaWYgKGJsb2NrKQotICAg
ICAgICAgICAgY29tcGlsZSgqYmxvY2spOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1faml0LmdyYXBoKCkubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRl
eCkgeworICAgICAgICBtX2ppdC5zZXRGb3JCbG9ja0luZGV4KGJsb2NrSW5kZXgpOworICAgICAg
ICBtX2Jsb2NrID0gbV9qaXQuZ3JhcGgoKS5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgY29t
cGlsZUN1cnJlbnRCbG9jaygpOwogICAgIH0KICAgICBsaW5rQnJhbmNoZXMoKTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTE4ODMsOCArMTg4NCw4IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoKQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjcmVhdGVPU1JFbnRyaWVzKCkKIHsKLSAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2ppdC5ncmFwaCgp
Lm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2ppdC5ncmFwaCgpLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2ppdC5ncmFwaCgpLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQpAQCAt
MTg5OSw4ICsxOTAwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y3JlYXRlT1NSRW50cmllcygp
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5rT1NSRW50cmllcyhMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKQogewogICAgIHVuc2lnbmVkIG9zckVudHJ5SW5kZXggPSAwOwotICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Mu
c2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2pp
dC5ncmFwaCgpLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1faml0LmdyYXBoKCkubnVtQmxvY2tzKCk7
ICsrYmxvY2tJbmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1faml0LmdyYXBo
KCkuYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCkBAIC0zNjYzLDE2ICsz
NjY0LDE2IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJpY3RFcUZvckMKICAgICAK
ICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgp
OwogICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgTm9k
ZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJyYW5j
aEluZGV4SW5CbG9jayk7Ci0gICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLT50
YWtlbkJsb2NrSW5kZXgoKTsKLSAgICAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5v
ZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9i
bG9jay0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKKyAgICAgICAgQmFzaWNCbG9jayogdGFrZW4g
PSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7CisgICAgICAgIEJhc2ljQmxvY2sqIG5vdFRha2Vu
ID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6RXF1YWw7CiAg
ICAgICAgIAogICAgICAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRv
IHRoZSB0YWtlbiBibG9jay4KICAgICAgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRh
a2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2Fu
IGZhbGwgdGhyb3VnaC4KICAgICAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAg
ICAgICAgICBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWw7Ci0gICAgICAgICAg
ICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAgICAgICAgICAgQmFzaWNCbG9jayogdG1wID0g
dGFrZW47CiAgICAgICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwogICAgICAgICAgICAgbm90VGFr
ZW4gPSB0bXA7CiAgICAgICAgIH0KQEAgLTM3MzUsNyArMzczNiw3IEBAIGJvb2wgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVTdHJpY3RFcShOb2QKICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAg
IHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAg
ICAgICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAg
IE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChi
cmFuY2hJbmRleEluQmxvY2spOworICAgICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1fYmxv
Y2stPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVJ
bnRlZ2VyQnJhbmNoKG5vZGUsIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCk7CiAg
ICAgICAgICAgICB1c2Uobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgdXNlKG5vZGUtPmNo
aWxkMigpKTsKQEAgLTM3NTAsNyArMzc1MSw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVTdHJpY3RFcShOb2QKICAgICBjYXNlIE51bWJlclVzZTogewogICAgICAgICB1bnNpZ25lZCBi
cmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgICAgICBpZiAo
YnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICBOb2RlKiBicmFu
Y2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJ
bkJsb2NrKTsKKyAgICAgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2Jsb2NrLT5hdChicmFu
Y2hJbmRleEluQmxvY2spOwogICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNo
KG5vZGUsIGJyYW5jaE5vZGUsIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbCk7CiAgICAgICAg
ICAgICB1c2Uobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgdXNlKG5vZGUtPmNoaWxkMigp
KTsKQEAgLTM3NzUsNyArMzc3Niw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdHJp
Y3RFcShOb2QKICAgICBjYXNlIE9iamVjdFVzZTogewogICAgICAgICB1bnNpZ25lZCBicmFuY2hJ
bmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwogICAgICAgICBpZiAoYnJhbmNo
SW5kZXhJbkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICBOb2RlKiBicmFuY2hOb2Rl
ID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2Nr
KTsKKyAgICAgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2Jsb2NrLT5hdChicmFuY2hJbmRl
eEluQmxvY2spOwogICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkobm9k
ZSwgYnJhbmNoTm9kZSk7CiAgICAgICAgICAgICB1c2Uobm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgdXNlKG5vZGUtPmNoaWxkMigpKTsKQEAgLTQxMzAsMTYgKzQxMzEsMTYgQEAgYm9vbCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cEV4ZWMoTgogICAgIHVuc2lnbmVkIGJyYW5jaElu
ZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgaWYgKGJyYW5jaEluZGV4
SW5CbG9jayA9PSBVSU5UX01BWCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIE5vZGUqIGJy
YW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRl
eEluQmxvY2spOworICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2Jsb2NrLT5hdChicmFuY2hJbmRl
eEluQmxvY2spOwogICAgIEFTU0VSVChub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAK
LSAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0g
ICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgp
OworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOworICAg
IEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwogICAg
IAogICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7CiAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygp
KSB7CiAgICAgICAgIGludmVydCA9IHRydWU7Ci0gICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFr
ZW47CisgICAgICAgIEJhc2ljQmxvY2sqIHRtcCA9IHRha2VuOwogICAgICAgICB0YWtlbiA9IG5v
dFRha2VuOwogICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICB9CkBAIC01MTc2LDcgKzUxNzcs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoKE5vZGUqIG5vCiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YWRkQnJh
bmNoKGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcCwgQmxvY2tJbmRleCBkZXN0
aW5hdGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFkZEJyYW5jaChjb25zdCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QmIGp1bXAsIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogewogICAgIGZv
ciAodW5zaWduZWQgaSA9IGp1bXAuanVtcHMoKS5zaXplKCk7IGktLTspCiAgICAgICAgIGFkZEJy
YW5jaChqdW1wLmp1bXBzKClbaV0sIGRlc3RpbmF0aW9uKTsKQEAgLTUxODYsNyArNTE4Nyw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtCcmFuY2hlcygpCiB7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2JyYW5jaGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEJyYW5jaFJlY29y
ZCYgYnJhbmNoID0gbV9icmFuY2hlc1tpXTsKLSAgICAgICAgYnJhbmNoLmp1bXAubGlua1RvKG1f
aml0LmJsb2NrSGVhZHMoKVticmFuY2guZGVzdGluYXRpb25dLCAmbV9qaXQpOworICAgICAgICBi
cmFuY2guanVtcC5saW5rVG8obV9qaXQuYmxvY2tIZWFkcygpW2JyYW5jaC5kZXN0aW5hdGlvbi0+
aW5kZXhdLCAmbV9qaXQpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTksMTIgKzExOSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjcmVhdGVPU1JFbnRyaWVzKCk7
CiAgICAgdm9pZCBsaW5rT1NSRW50cmllcyhMaW5rQnVmZmVyJik7CiAKLSAgICBCbG9ja0luZGV4
IG5leHRCbG9jaygpCisgICAgQmFzaWNCbG9jayogbmV4dEJsb2NrKCkKICAgICB7Ci0gICAgICAg
IGZvciAoQmxvY2tJbmRleCByZXN1bHQgPSBtX2Jsb2NrICsgMTsgOyByZXN1bHQrKykgewotICAg
ICAgICAgICAgaWYgKHJlc3VsdCA+PSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gTm9CbG9jazsKLSAgICAgICAgICAgIGlmIChtX2ppdC5ncmFw
aCgpLm1fYmxvY2tzW3Jlc3VsdF0pCisgICAgICAgIGZvciAoQmxvY2tJbmRleCByZXN1bHRJbmRl
eCA9IG1fYmxvY2stPmluZGV4ICsgMTsgOyByZXN1bHRJbmRleCsrKSB7CisgICAgICAgICAgICBp
ZiAocmVzdWx0SW5kZXggPj0gbV9qaXQuZ3JhcGgoKS5udW1CbG9ja3MoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmIChCYXNpY0Jsb2NrKiByZXN1bHQgPSBtX2pp
dC5ncmFwaCgpLmJsb2NrKHJlc3VsdEluZGV4KSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICB9CiAgICAgfQpAQCAtMzQ0LDcgKzM0NCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNvbXBpbGUoTm9kZSopOwogICAgIHZvaWQgbm90aWNlT1NSQmlydGgoTm9kZSopOwogICAg
IHZvaWQgYmFpbCgpOwotICAgIHZvaWQgY29tcGlsZShCYXNpY0Jsb2NrJik7CisgICAgdm9pZCBj
b21waWxlQ3VycmVudEJsb2NrKCk7CiAKICAgICB2b2lkIGNoZWNrQXJndW1lbnRUeXBlcygpOwog
CkBAIC03MDQsMTggKzcwNCwxNiBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0aGUgaW5kZXgg
b2YgdGhlIGJyYW5jaCBub2RlIGlmIHBlZXBob2xlIGlzIG9rYXksIFVJTlRfTUFYIG90aGVyd2lz
ZS4KICAgICB1bnNpZ25lZCBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpCiAgICAgewotICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10uZ2V0KCk7
Ci0KICAgICAgICAgLy8gQ2hlY2sgdGhhdCBubyBpbnRlcnZlbmluZyBub2RlcyB3aWxsIGJlIGdl
bmVyYXRlZC4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IG1faW5kZXhJbkJsb2NrICsg
MTsgaW5kZXggPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpbmRleCkgewotICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXgg
PSBtX2luZGV4SW5CbG9jayArIDE7IGluZGV4IDwgbV9ibG9jay0+c2l6ZSgpIC0gMTsgKytpbmRl
eCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGluZGV4KTsKICAgICAg
ICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBVSU5UX01BWDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBsYXN0Tm9k
ZSBpcyBhIGJyYW5jaCBvbiB0aGlzIG5vZGUuCi0gICAgICAgIE5vZGUqIGxhc3ROb2RlID0gYmxv
Y2stPmxhc3QoKTsKLSAgICAgICAgcmV0dXJuIGxhc3ROb2RlLT5vcCgpID09IEJyYW5jaCAmJiBs
YXN0Tm9kZS0+Y2hpbGQxKCkgPT0gbV9jdXJyZW50Tm9kZSA/IGJsb2NrLT5zaXplKCkgLSAxIDog
VUlOVF9NQVg7CisgICAgICAgIE5vZGUqIGxhc3ROb2RlID0gbV9ibG9jay0+bGFzdCgpOworICAg
ICAgICByZXR1cm4gbGFzdE5vZGUtPm9wKCkgPT0gQnJhbmNoICYmIGxhc3ROb2RlLT5jaGlsZDEo
KSA9PSBtX2N1cnJlbnROb2RlID8gbV9ibG9jay0+c2l6ZSgpIC0gMSA6IFVJTlRfTUFYOwogICAg
IH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVNb3ZIaW50KE5vZGUqKTsKQEAgLTE3MzgsNzQgKzE3
MzYsNzQgQEAgcHVibGljOgogICAgIH0KICNlbmRpZgogICAgIAotICAgIHZvaWQgYnJhbmNoRG91
YmxlKEpJVENvbXBpbGVyOjpEb3VibGVDb25kaXRpb24gY29uZCwgRlBSUmVnIGxlZnQsIEZQUlJl
ZyByaWdodCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB2b2lkIGJyYW5jaERvdWJsZShK
SVRDb21waWxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmQsIEZQUlJlZyBsZWZ0LCBGUFJSZWcgcmln
aHQsIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZEJy
YW5jaChtX2ppdC5icmFuY2hEb3VibGUoY29uZCwgbGVmdCwgcmlnaHQpLCBkZXN0aW5hdGlvbik7
CiAgICAgfQogICAgIAotICAgIHZvaWQgYnJhbmNoRG91YmxlTm9uWmVybyhGUFJSZWcgdmFsdWUs
IEZQUlJlZyBzY3JhdGNoLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAgIHZvaWQgYnJhbmNo
RG91YmxlTm9uWmVybyhGUFJSZWcgdmFsdWUsIEZQUlJlZyBzY3JhdGNoLCBCYXNpY0Jsb2NrKiBk
ZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNo
RG91YmxlTm9uWmVybyh2YWx1ZSwgc2NyYXRjaCksIGRlc3RpbmF0aW9uKTsKICAgICB9CiAgICAg
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLSAgICB2b2lkIGJyYW5jaDMy
KEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFQgbGVmdCwgVSByaWdodCwg
QmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB2b2lkIGJyYW5jaDMyKEpJVENvbXBpbGVyOjpS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFQgbGVmdCwgVSByaWdodCwgQmFzaWNCbG9jayogZGVz
dGluYXRpb24pCiAgICAgewogICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaDMy
KGNvbmQsIGxlZnQsIHJpZ2h0KSwgZGVzdGluYXRpb24pOwogICAgIH0KICAgICAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotICAgIHZvaWQgYnJhbmNoVGVzdDMyKEpJVENv
bXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCwgVCB2YWx1ZSwgVSBtYXNrLCBCbG9ja0luZGV4
IGRlc3RpbmF0aW9uKQorICAgIHZvaWQgYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpSZXN1bHRD
b25kaXRpb24gY29uZCwgVCB2YWx1ZSwgVSBtYXNrLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikK
ICAgICB7CiAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKGNvbmQs
IHZhbHVlLCBtYXNrKSwgZGVzdGluYXRpb24pOwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICAgIHZvaWQgYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpSZXN1bHRDb25k
aXRpb24gY29uZCwgVCB2YWx1ZSwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB2b2lkIGJy
YW5jaFRlc3QzMihKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUsIEJh
c2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaCht
X2ppdC5icmFuY2hUZXN0MzIoY29uZCwgdmFsdWUpLCBkZXN0aW5hdGlvbik7CiAgICAgfQogICAg
IAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4KLSAgICB2b2lkIGJyYW5jaDY0KEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmQsIFQgbGVmdCwgVSByaWdodCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB2b2lkIGJy
YW5jaDY0KEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFQgbGVmdCwgVSBy
aWdodCwgQmFzaWNCbG9jayogZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICByZXR1cm4gYWRk
QnJhbmNoKG1faml0LmJyYW5jaDY0KGNvbmQsIGxlZnQsIHJpZ2h0KSwgZGVzdGluYXRpb24pOwog
ICAgIH0KICNlbmRpZgogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
Ci0gICAgdm9pZCBicmFuY2g4KEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQs
IFQgbGVmdCwgVSByaWdodCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB2b2lkIGJyYW5j
aDgoSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgVCBsZWZ0LCBVIHJpZ2h0
LCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRCcmFu
Y2gobV9qaXQuYnJhbmNoOChjb25kLCBsZWZ0LCByaWdodCksIGRlc3RpbmF0aW9uKTsKICAgICB9
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KLSAgICB2b2lkIGJy
YW5jaFB0cihKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBUIGxlZnQsIFUg
cmlnaHQsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgdm9pZCBicmFuY2hQdHIoSklUQ29t
cGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgVCBsZWZ0LCBVIHJpZ2h0LCBCYXNpY0Js
b2NrKiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQu
YnJhbmNoUHRyKGNvbmQsIGxlZnQsIHJpZ2h0KSwgZGVzdGluYXRpb24pOwogICAgIH0KICAgICAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotICAgIHZvaWQgYnJhbmNoVGVz
dFB0cihKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUsIFUgbWFzaywg
QmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB2b2lkIGJyYW5jaFRlc3RQdHIoSklUQ29tcGls
ZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBVIG1hc2ssIEJhc2ljQmxvY2sqIGRl
c3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hU
ZXN0UHRyKGNvbmQsIHZhbHVlLCBtYXNrKSwgZGVzdGluYXRpb24pOwogICAgIH0KICAgICAKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgYnJhbmNoVGVzdFB0cihKSVRDb21waWxl
cjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUsIEJsb2NrSW5kZXggZGVzdGluYXRpb24p
CisgICAgdm9pZCBicmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY29u
ZCwgVCB2YWx1ZSwgQmFzaWNCbG9jayogZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICByZXR1
cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3RQdHIoY29uZCwgdmFsdWUpLCBkZXN0aW5hdGlv
bik7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci0g
ICAgdm9pZCBicmFuY2hUZXN0OChKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQg
dmFsdWUsIFUgbWFzaywgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB2b2lkIGJyYW5jaFRl
c3Q4KEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCwgVCB2YWx1ZSwgVSBtYXNrLCBC
YXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRCcmFuY2go
bV9qaXQuYnJhbmNoVGVzdDgoY29uZCwgdmFsdWUsIG1hc2spLCBkZXN0aW5hdGlvbik7CiAgICAg
fQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBicmFuY2hUZXN0OChK
SVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUsIEJsb2NrSW5kZXggZGVz
dGluYXRpb24pCisgICAgdm9pZCBicmFuY2hUZXN0OChKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0
aW9uIGNvbmQsIFQgdmFsdWUsIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0OChjb25kLCB2YWx1ZSksIGRlc3Rp
bmF0aW9uKTsKICAgICB9CkBAIC0xODE0LDcgKzE4MTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIEF0
RmFsbFRocm91Z2hQb2ludCwKICAgICAgICAgRm9yY2VKdW1wCiAgICAgfTsKLSAgICB2b2lkIGp1
bXAoQmxvY2tJbmRleCBkZXN0aW5hdGlvbiwgRmFsbFRocm91Z2hNb2RlIGZhbGxUaHJvdWdoTW9k
ZSA9IEF0RmFsbFRocm91Z2hQb2ludCkKKyAgICB2b2lkIGp1bXAoQmFzaWNCbG9jayogZGVzdGlu
YXRpb24sIEZhbGxUaHJvdWdoTW9kZSBmYWxsVGhyb3VnaE1vZGUgPSBBdEZhbGxUaHJvdWdoUG9p
bnQpCiAgICAgewogICAgICAgICBpZiAoZGVzdGluYXRpb24gPT0gbmV4dEJsb2NrKCkKICAgICAg
ICAgICAgICYmIGZhbGxUaHJvdWdoTW9kZSA9PSBBdEZhbGxUaHJvdWdoUG9pbnQpCkBAIC0xODIy
LDE5ICsxODIwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwg
ZGVzdGluYXRpb24pOwogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZEJyYW5jaChjb25zdCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCYganVtcCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB2b2lk
IGFkZEJyYW5jaChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYganVtcCwgQmFzaWNCbG9jayog
ZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBtX2JyYW5jaGVzLmFwcGVuZChCcmFuY2hSZWNv
cmQoanVtcCwgZGVzdGluYXRpb24pKTsKICAgICB9Ci0gICAgdm9pZCBhZGRCcmFuY2goY29uc3Qg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKTsK
KyAgICB2b2lkIGFkZEJyYW5jaChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXAs
IEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKTsKIAogICAgIHZvaWQgbGlua0JyYW5jaGVzKCk7CiAK
LSAgICBCYXNpY0Jsb2NrKiBibG9jaygpCi0gICAgewotICAgICAgICByZXR1cm4gbV9qaXQuZ3Jh
cGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS5nZXQoKTsKLSAgICB9Ci0KICNpZm5kZWYgTkRFQlVHCiAg
ICAgdm9pZCBkdW1wKGNvbnN0IGNoYXIqIGxhYmVsID0gMCk7CiAjZW5kaWYKQEAgLTE4NzIsMTMg
KzE4NjUsMTMgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZVN0cmluZ0VxdWFsaXR5KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVT
dHJpbmdJZGVudEVxdWFsaXR5KE5vZGUqKTsKLSAgICB2b2lkIGVtaXRPYmplY3RPck90aGVyQnJh
bmNoKEVkZ2UgdmFsdWUsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4pOwor
ICAgIHZvaWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSB2YWx1ZSwgQmFzaWNCbG9jayog
dGFrZW4sIEJhc2ljQmxvY2sqIG5vdFRha2VuKTsKICAgICB2b2lkIGVtaXRCcmFuY2goTm9kZSop
OwogICAgIAogICAgIHN0cnVjdCBTdHJpbmdTd2l0Y2hDYXNlIHsKICAgICAgICAgU3RyaW5nU3dp
dGNoQ2FzZSgpIHsgfQogICAgICAgICAKLSAgICAgICAgU3RyaW5nU3dpdGNoQ2FzZShTdHJpbmdJ
bXBsKiBzdHJpbmcsIEJsb2NrSW5kZXggdGFyZ2V0KQorICAgICAgICBTdHJpbmdTd2l0Y2hDYXNl
KFN0cmluZ0ltcGwqIHN0cmluZywgQmFzaWNCbG9jayogdGFyZ2V0KQogICAgICAgICAgICAgOiBz
dHJpbmcoc3RyaW5nKQogICAgICAgICAgICAgLCB0YXJnZXQodGFyZ2V0KQogICAgICAgICB7CkBA
IC0xODg3LDcgKzE4ODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0
IFN0cmluZ1N3aXRjaENhc2UmIG90aGVyKSBjb25zdDsKICAgICAgICAgCiAgICAgICAgIFN0cmlu
Z0ltcGwqIHN0cmluZzsKLSAgICAgICAgQmxvY2tJbmRleCB0YXJnZXQ7CisgICAgICAgIEJhc2lj
QmxvY2sqIHRhcmdldDsKICAgICB9OwogICAgIAogICAgIHZvaWQgZW1pdFN3aXRjaEludEp1bXAo
U3dpdGNoRGF0YSosIEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gpOwpAQCAtMjE1Miw3ICsy
MTQ1LDcgQEAgcHVibGljOgogICAgIEpJVENvbXBpbGVyJiBtX2ppdDsKIAogICAgIC8vIFRoZSBj
dXJyZW50IG5vZGUgYmVpbmcgZ2VuZXJhdGVkLgotICAgIEJsb2NrSW5kZXggbV9ibG9jazsKKyAg
ICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIE5vZGUqIG1fY3VycmVudE5vZGU7CiAgICAgU3Bl
Y3VsYXRpb25EaXJlY3Rpb24gbV9zcGVjdWxhdGlvbkRpcmVjdGlvbjsKICAgICBib29sIG1fY2Fu
RXhpdDsKQEAgLTIxNjUsMTQgKzIxNTgsMTQgQEAgcHVibGljOgogICAgIFZlY3RvcjxNYWNyb0Fz
c2VtYmxlcjo6TGFiZWw+IG1fb3NyRW50cnlIZWFkczsKICAgICAKICAgICBzdHJ1Y3QgQnJhbmNo
UmVjb3JkIHsKLSAgICAgICAgQnJhbmNoUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXAs
IEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgICAgIEJyYW5jaFJlY29yZChNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBqdW1wLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikKICAgICAgICAgICAgIDog
anVtcChqdW1wKQogICAgICAgICAgICAgLCBkZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKICAgICAg
ICAgewogICAgICAgICB9CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcDsKLSAg
ICAgICAgQmxvY2tJbmRleCBkZXN0aW5hdGlvbjsKKyAgICAgICAgQmFzaWNCbG9jayogZGVzdGlu
YXRpb247CiAgICAgfTsKICAgICBWZWN0b3I8QnJhbmNoUmVjb3JkLCA4PiBtX2JyYW5jaGVzOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNo
ZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE1MjMzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTEwNCw4ICsxMDQsOCBAQCBwdWJsaWM6CiAKICAgICAgICAgLy8gUGxhY2UgQ2hlY2tTdHJ1Y3R1
cmUncyBhdCBTZXRMb2NhbCBzaXRlcy4KICAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNl
dChtX2dyYXBoKTsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9j
a0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdl
dCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlm
ICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsr
aW5kZXhJbkJsb2NrKSB7CkBAIC0yMTcsOCArMjE3LDggQEAgcHJpdmF0ZToKICAgICAvLyBjaGVj
a3MuIEZvciBub3csIG9ubHkgY29uc2lkZXIgbW9ub21vcnBoaWMgc3RydWN0dXJlIGNoZWNrcyAo
b25lIHN0cnVjdHVyZSkuCiAgICAgdm9pZCBpZGVudGlmeVJlZHVuZGFudFN0cnVjdHVyZUNoZWNr
cygpCiAgICAgeyAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhd
LmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5k
ZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAg
IGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7
ICsraW5kZXhJbkJsb2NrKSB7CkBAIC0zMjEsOCArMzIxLDggQEAgcHJpdmF0ZToKICAgICAgICAg
CiAgICAgdm9pZCBpZGVudGlmeVJlZHVuZGFudEFycmF5Q2hlY2tzKCkKICAgICB7Ci0gICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9i
bG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3Mo
KTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sg
PSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewpAQCAt
NDUxLDggKzQ1MSw4IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFR5cGVDaGVj
az4KICAgICB2b2lkIGRpc2FibGVIb2lzdGluZ0Fjcm9zc09TUkVudHJpZXMoKQogICAgIHsKLSAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJs
b2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hh
YmxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgs
OCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fdW5pZmljYXRpb25TdGF0ZSA9
PSBMb2NhbGx5VW5pZmllZCk7CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgdGhhdCBhbGwg
UGhpIGZ1bmN0aW9ucyBhcmUgdW5pZmllZC4KLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdl
dCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hh
YmxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShy
ZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsMjIgKzc2LDIyIEBAIHB1YmxpYzoKICAgICAgICAg
Ly8gaW4gcmVsZWFzZSBidWlsZHMuCiAgICAgICAgIAogICAgICAgICAvLyBWYWxpZGF0ZSB0aGF0
IGFsbCBsb2NhbCB2YXJpYWJsZXMgYXQgdGhlIGhlYWQgb2YgdGhlIHJvb3QgYmxvY2sgYXJlIGRl
YWQuCi0gICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBtX2dyYXBoLm1fYmxvY2tzWzBdLmdldCgp
OworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gbV9ncmFwaC5ibG9jaygwKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJvb3QtPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpOyArK2kpCiAgICAgICAgICAgICBWX0VRVUFMKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVn
aXN0ZXI+KGkpLCAwKSwgc3RhdGljX2Nhc3Q8Tm9kZSo+KDApLCByb290LT52YXJpYWJsZXNBdEhl
YWQubG9jYWwoaSkpOwogICAgICAgICAKICAgICAgICAgLy8gVmFsaWRhdGUgcmVmIGNvdW50cyBh
bmQgdXNlcy4KICAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IG15UmVmQ291bnRzOwot
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dy
YXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVt
QmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jayB8fCAh
YmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytpKQogICAgICAg
ICAgICAgICAgIG15UmVmQ291bnRzLmFkZChibG9jay0+bm9kZShpKSwgMCk7CiAgICAgICAgIH0K
ICAgICAgICAgSGFzaFNldDxOb2RlKj4gYWNjZXB0YWJsZU5vZGVzOwotICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxv
Y2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jayB8fCAhYmxvY2stPmlzUmVhY2hh
YmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBibG9jay0+bnVtTm9kZXMoKTsgKytpKSB7CkBAIC0xNTcsOCArMTU3LDggQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jayB8fCAhYmxv
Y2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
CkBAIC0yMjUsMTQgKzIyNSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIFRo
ZXJlIG11c3QgZXhpc3QgYSBwcmVkZWNlc3NvciBibG9jayB0aGF0IGhhcyB0aGlzIG5vZGUgaW5k
ZXggaW4KICAgICAgICAgICAgICAgICAgICAgLy8gaXRzIHRhaWwgdmFyaWFibGVzLgogICAgICAg
ICAgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgayA9IDA7IGsgPCBibG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2sp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZXZCbG9jayA9IG1fZ3Jh
cGgubV9ibG9ja3NbYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdXS5nZXQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChCbG9jaywgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdKSwg
cHJldkJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChCbG9jaywgYmxv
Y2stPm1fcHJlZGVjZXNzb3JzW2tdKSwgcHJldkJsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBibG9jay0+cHJlZGVjZXNzb3Jz
LnNpemUoKTsgKytrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmV2
QmxvY2sgPSBibG9jay0+cHJlZGVjZXNzb3JzW2tdOworICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2spOworICAgICAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2Qmxv
Y2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZOb2Rl
ID0gcHJldkJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChsb2NhbCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgUGhpIHRoYXQgaXMgbm90IHJlZmVycmluZyB0
byAqdGhpcyogYmxvY2sgdGhlbiBhbGwgcHJlZGVjZXNzb3JzCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBtdXN0IGhhdmUgdGhhdCBsb2NhbCBhdmFpbGFibGUuCi0gICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrSW5kZXgsIEJsb2NrLCBibG9jay0+bV9wcmVk
ZWNlc3NvcnNba10pLCBwcmV2Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobG9jYWwsIGJsb2NrLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGUpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwcmV2Tm9kZS0+b3AoKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgRmx1c2g6CkBAIC0yNDMsMTEgKzI0MywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2td
LCBwcmV2Tm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2Fs
LCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10s
IHByZXZOb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9jYWwsIGJsb2NrLT5w
cmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IHByZXZOb2RlLT5vcCgpID09IE1vdkhpbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
fCBwcmV2Tm9kZS0+b3AoKSA9PSBNb3ZIaW50QW5kQ2hlY2sKQEAgLTI1OSw3ICsyNTksNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGl0
IGNhbm5vdCByZWZlciBpbnRvIHRoaXMgYmxvY2suCi0gICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJl
dkJsb2NrLT5pc0luQmxvY2soZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLCAhcHJl
dkJsb2NrLT5pc0luQmxvY2soZWRnZS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUs
IGVkZ2UpLCBmb3VuZCk7CkBAIC0yNzQsMTcgKzI3NCwxNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVz
QXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewotICAgICAgICAgICAgICAgIFZBTElE
QVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGFyZ3VtZW50VG9PcGVyYW5kKGkpKSwg
YmxvY2tJbmRleCksICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpIHx8IGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihh
cmd1bWVudFRvT3BlcmFuZChpKSksIGJsb2NrKSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJn
dW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKS0+aGFzVmFyaWFi
bGVBY2Nlc3NEYXRhKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBU
aHJlYWRlZENQUykKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZp
cnR1YWxSZWdpc3Rlcj4oYXJndW1lbnRUb09wZXJhbmQoaSkpLCBibG9ja0luZGV4KSwgIWJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaSkgfHwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5h
cmd1bWVudChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihhcmd1bWVudFRvT3BlcmFu
ZChpKSksIGJsb2NrKSwgIWJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaSkgfHwgYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkp
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLmFy
Z3VtZW50KGkpID0gbm90U2V0OwogICAgICAgICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLmFy
Z3VtZW50KGkpID0gbm90U2V0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsr
aSkgewotICAgICAgICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KGkpLCBibG9ja0luZGV4KSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkgfHwg
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkp
OworICAgICAgICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KGkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpIHx8IGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQubG9jYWwoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpCi0gICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGkpLCBibG9j
a0luZGV4KSwgIWJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaSkgfHwgYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5sb2NhbChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihpKSwgYmxv
Y2spLCAhYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpKSB8fCBibG9jay0+dmFyaWFibGVz
QXRUYWlsLmxvY2FsKGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CiAKICAgICAgICAgICAg
ICAgICBnZXRMb2NhbFBvc2l0aW9ucy5sb2NhbChpKSA9IG5vdFNldDsKICAgICAgICAgICAgICAg
ICBzZXRMb2NhbFBvc2l0aW9ucy5sb2NhbChpKSA9IG5vdFNldDsKQEAgLTMyNCw3ICszMjQsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghbXlSZWZDb3VudHMuZ2V0KG5vZGUp
KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykKLSAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChub2RlLCBibG9ja0luZGV4KSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9PSBub3RTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKG5vZGUsIGJsb2NrKSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgp
KSA9PSBub3RTZXQpOwogICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVy
YW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKQEAgLTM0NiwxMSArMzQ2LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+
dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewogICAgICAgICAgICAg
ICAgIGNoZWNrT3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgZ2V0TG9j
YWxQb3NpdGlvbnMsIHNldExvY2FsUG9zaXRpb25zLCBhcmd1bWVudFRvT3BlcmFuZChpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJsb2NrLCBnZXRMb2NhbFBvc2l0aW9ucywgc2V0TG9jYWxQb3Np
dGlvbnMsIGFyZ3VtZW50VG9PcGVyYW5kKGkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpOyArK2kpIHsKICAgICAgICAgICAgICAgICBjaGVja09wZXJhbmQoCi0gICAgICAgICAg
ICAgICAgICAgIGJsb2NrSW5kZXgsIGdldExvY2FsUG9zaXRpb25zLCBzZXRMb2NhbFBvc2l0aW9u
cywgaSk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBnZXRMb2NhbFBvc2l0aW9ucywgc2V0
TG9jYWxQb3NpdGlvbnMsIGkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAt
MzYwLDcgKzM2MCw3IEBAIHByaXZhdGU6CiAgICAgR3JhcGhEdW1wTW9kZSBtX2dyYXBoRHVtcE1v
ZGU7CiAgICAgCiAgICAgdm9pZCBjaGVja09wZXJhbmQoCi0gICAgICAgIEJsb2NrSW5kZXggYmxv
Y2tJbmRleCwgT3BlcmFuZHM8c2l6ZV90PiYgZ2V0TG9jYWxQb3NpdGlvbnMsCisgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrLCBPcGVyYW5kczxzaXplX3Q+JiBnZXRMb2NhbFBvc2l0aW9ucywKICAg
ICAgICAgT3BlcmFuZHM8c2l6ZV90PiYgc2V0TG9jYWxQb3NpdGlvbnMsIGludCBvcGVyYW5kKQog
ICAgIHsKICAgICAgICAgaWYgKGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkgPT0g
bm90U2V0KQpAQCAtMzY4LDEyICszNjgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHNldExv
Y2FsUG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkgPT0gbm90U2V0KQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICAKICAgICAgICAgVkFMSURBVEUoCiAgICAg
ICAgICAgICAoYmxvY2stPmF0KGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkpLAog
ICAgICAgICAgICAgIGJsb2NrLT5hdChzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG9wZXJhbmQp
KSwKLSAgICAgICAgICAgICBibG9ja0luZGV4KSwKKyAgICAgICAgICAgICBibG9jayksCiAgICAg
ICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG9wZXJhbmQpIDwgc2V0TG9jYWxQb3Np
dGlvbnMub3BlcmFuZChvcGVyYW5kKSk7CiAgICAgfQogICAgIApAQCAtMzgyLDEwICszODAsOSBA
QCBwcml2YXRlOgogICAgICAgICBkYXRhTG9nRigiQCV1Iiwgbm9kZS0+aW5kZXgoKSk7CiAgICAg
fQogICAgIAotICAgIGVudW0gQmxvY2tUYWcgeyBCbG9jayB9OwotICAgIHZvaWQgcmVwb3J0VmFs
aWRhdGlvbkNvbnRleHQoQmxvY2tUYWcsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB2b2lk
IHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAg
ICAgZGF0YUxvZ0YoIkJsb2NrICMldSIsIGJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9nKCJC
bG9jayAiLCAqYmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25D
b250ZXh0KE5vZGUqIG5vZGUsIEVkZ2UgZWRnZSkKQEAgLTM5MywzOSArMzkwLDM3IEBAIHByaXZh
dGU6CiAgICAgICAgIGRhdGFMb2cobm9kZSwgIiAtPiAiLCBlZGdlKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJs
b2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KFZp
cnR1YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBk
YXRhTG9nRigiciVkIGluIEJsb2NrICMldSIsIGxvY2FsLCBibG9ja0luZGV4KTsKKyAgICAgICAg
ZGF0YUxvZygiciIsIHN0YXRpY19jYXN0PGludD4obG9jYWwpLCAiIGluIEJsb2NrICIsICpibG9j
ayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCwgQmxvY2tJbmRleCBzb3VyY2VCbG9ja0luZGV4LCBC
bG9ja1RhZywgQmxvY2tJbmRleCBkZXN0aW5hdGlvbkJsb2NrSW5kZXgpCisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBsb2NhbCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIEJhc2ljQmxvY2sqIGRl
c3RpbmF0aW9uQmxvY2spCiAgICAgewotICAgICAgICBkYXRhTG9nRigiciVkIGluIEJsb2NrICMl
dSAtPiAjJXUiLCBsb2NhbCwgc291cmNlQmxvY2tJbmRleCwgZGVzdGluYXRpb25CbG9ja0luZGV4
KTsKKyAgICAgICAgZGF0YUxvZygiciIsIHN0YXRpY19jYXN0PGludD4obG9jYWwpLCAiIGluIEJs
b2NrICIsICpzb3VyY2VCbG9jaywgIiAtPiAiLCAqZGVzdGluYXRpb25CbG9jayk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBsb2NhbCwgQmxvY2tJbmRleCBzb3VyY2VCbG9ja0luZGV4LCBOb2RlKiBwcmV2Tm9k
ZSkKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9j
aywgTm9kZSogcHJldk5vZGUpCiAgICAgewotICAgICAgICBkYXRhTG9nRigiQCV1IGZvciByJWQg
aW4gQmxvY2sgIyV1IiwgcHJldk5vZGUtPmluZGV4KCksIGxvY2FsLCBzb3VyY2VCbG9ja0luZGV4
KTsKKyAgICAgICAgZGF0YUxvZyhwcmV2Tm9kZSwgIiBmb3IgciIsIHN0YXRpY19jYXN0PGludD4o
bG9jYWwpLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jayk7CiAgICAgfQogICAgIAotICAgIHZv
aWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIE5vZGUqIG5vZGUsIEJsb2NrSW5k
ZXggYmxvY2tJbmRleCkKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KE5vZGUqIG5v
ZGUsIEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgZGF0YUxvZ0YoIkAldSBpbiBC
bG9jayAjJXUiLCBub2RlLT5pbmRleCgpLCBibG9ja0luZGV4KTsKKyAgICAgICAgZGF0YUxvZyhu
b2RlLCAiIGluIEJsb2NrICIsICpibG9jayk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcmVwb3J0
VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIE5vZGUqIG5vZGUsIE5vZGUqIG5vZGUyLCBCbG9j
a0luZGV4IGJsb2NrSW5kZXgpCisgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChOb2Rl
KiBub2RlLCBOb2RlKiBub2RlMiwgQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBk
YXRhTG9nRigiQCV1IGFuZCBAJXUgaW4gQmxvY2sgIyV1Iiwgbm9kZS0+aW5kZXgoKSwgbm9kZTIt
PmluZGV4KCksIGJsb2NrSW5kZXgpOworICAgICAgICBkYXRhTG9nKG5vZGUsICIgYW5kICIsIG5v
ZGUyLCAiIGluIEJsb2NrICIsICpibG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0
VmFsaWRhdGlvbkNvbnRleHQoCi0gICAgICAgIE5vZGUqIG5vZGUsIEJsb2NrSW5kZXggYmxvY2tJ
bmRleCwgTm9kZSogZXhwZWN0ZWROb2RlLCBFZGdlIGluY29taW5nRWRnZSkKKyAgICAgICAgTm9k
ZSogbm9kZSwgQmFzaWNCbG9jayogYmxvY2ssIE5vZGUqIGV4cGVjdGVkTm9kZSwgRWRnZSBpbmNv
bWluZ0VkZ2UpCiAgICAgewotICAgICAgICBkYXRhTG9nKG5vZGUsICIgaW4gQmxvY2sgIyIsIGJs
b2NrSW5kZXgsICIsIHNlYXJjaGluZyBmb3IgIiwgZXhwZWN0ZWROb2RlLCAiIGZyb20gIiwgaW5j
b21pbmdFZGdlKTsKKyAgICAgICAgZGF0YUxvZyhub2RlLCAiIGluIEJsb2NrICIsICpibG9jaywg
Iiwgc2VhcmNoaW5nIGZvciAiLCBleHBlY3RlZE5vZGUsICIgZnJvbSAiLCBpbmNvbWluZ0VkZ2Up
OwogICAgIH0KICAgICAKICAgICB2b2lkIGR1bXBHcmFwaElmQXBwcm9wcmlhdGUoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVh
bFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1Myw4IEBAIHB1YmxpYzoKICNpZiBERkdfRU5BQkxF
KERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGJvb2wgbmVlZHNOZXdMaW5lID0g
ZmFsc2U7CiAjZW5kaWYKLSAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0
KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJs
b2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKCFibG9jay0+
aXNSZWFjaGFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsOCBAQCB2b2lkIFdvcmts
aXN0OjpyZW1vdmVBbGxSZWFkeVBsYW5zRm9yVk0oCiAgICAgICAgIGlmICghcGxhbi0+aXNDb21w
aWxlZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBteVJlYWR5UGxhbnMuYXBwZW5k
KHBsYW4pOwotICAgICAgICBtX3JlYWR5UGxhbnNbaS0tXSA9IG1fcmVhZHlQbGFucy50YWtlTGFz
dCgpOworICAgICAgICBtX3JlYWR5UGxhbnNbaS0tXSA9IG1fcmVhZHlQbGFucy5sYXN0KCk7Cisg
ICAgICAgIG1fcmVhZHlQbGFucy5yZW1vdmVMYXN0KCk7CiAgICAgICAgIG1fcGxhbnMucmVtb3Zl
KHBsYW4tPmtleSgpKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNTIzMzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
NCw4ICsxNzQsOCBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAKIGJvb2wg
Y2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSBncmFwaC5tX2Jsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4
LS07KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7CiAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkocmV2aXNpb24gMTUyMzM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDExICs2MSwxMSBAQCBwdWJs
aWM6CiAgICAgICAgICwgbV9mdGxTdGF0ZShzdGF0ZSkKICAgICAgICAgLCBtX2hlYXBzKHN0YXRl
LmNvbnRleHQpCiAgICAgICAgICwgbV9vdXQoc3RhdGUuY29udGV4dCkKLSAgICAgICAgLCBtX2xv
Y2Fsc0Jvb2xlYW4oT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5tX2Jsb2Nrc1swXS0+dmFyaWFi
bGVzQXRIZWFkKQotICAgICAgICAsIG1fbG9jYWxzMzIoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFw
aC5tX2Jsb2Nrc1swXS0+dmFyaWFibGVzQXRIZWFkKQotICAgICAgICAsIG1fbG9jYWxzNjQoT3Bl
cmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5tX2Jsb2Nrc1swXS0+dmFyaWFibGVzQXRIZWFkKQotICAg
ICAgICAsIG1fbG9jYWxzRG91YmxlKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3Nb
MF0tPnZhcmlhYmxlc0F0SGVhZCkKLSAgICAgICAgLCBtX3ZhbHVlU291cmNlcyhPcGVyYW5kc0xp
a2UsIHN0YXRlLmdyYXBoLm1fYmxvY2tzWzBdLT52YXJpYWJsZXNBdEhlYWQpCisgICAgICAgICwg
bV9sb2NhbHNCb29sZWFuKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlh
Ymxlc0F0SGVhZCkKKyAgICAgICAgLCBtX2xvY2FsczMyKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAgICAgLCBtX2xvY2FsczY0KE9wZXJh
bmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAgICAg
LCBtX2xvY2Fsc0RvdWJsZShPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJp
YWJsZXNBdEhlYWQpCisgICAgICAgICwgbV92YWx1ZVNvdXJjZXMoT3BlcmFuZHNMaWtlLCBzdGF0
ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAgICAsIG1fbGFzdFNldE9w
ZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKICAgICAgICAgLCBtX2V4aXRU
aHVua0dlbmVyYXRvcihzdGF0ZSkKICAgICAgICAgLCBtX3N0YXRlKHN0YXRlLmdyYXBoKQpAQCAt
OTksMjMgKzk5LDIzIEBAIHB1YmxpYzoKICAgICAgICAgbV90YWdUeXBlTnVtYmVyID0gbV9vdXQu
Y29uc3RJbnQ2NChUYWdUeXBlTnVtYmVyKTsKICAgICAgICAgbV90YWdNYXNrID0gbV9vdXQuY29u
c3RJbnQ2NChUYWdNYXNrKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2Nr
SW5kZXgpIHsKLSAgICAgICAgICAgIG1faGlnaEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAg
ICAgICBtX2hpZ2hCbG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAg
ICBpZiAoIW1faGlnaEJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgbV9ibG9ja3MuYWRkKG1faGlnaEJsb2NrLCBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJsb2Nr
ICMiLCBibG9ja0luZGV4KSkpOworICAgICAgICAgICAgbV9ibG9ja3MuYWRkKG1faGlnaEJsb2Nr
LCBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJsb2NrICIsICptX2hpZ2hCbG9jaykpKTsKICAgICAg
ICAgICAgIGFkZEZsdXNoZWRMb2NhbE9wUm9vdHMoKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgY2xvc2VPdmVyRmx1c2hlZExvY2FsT3BzKCk7CiAgICAgICAgIAotICAgICAgICBtX291
dC5hcHBlbmRUbyhtX2FyZ3VtZW50Q2hlY2tzLCBsb3dCbG9jaygwKSk7CisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKG1fYXJndW1lbnRDaGVja3MsIGxvd0Jsb2NrKG1fZ3JhcGguYmxvY2soMCkpKTsK
IAogICAgICAgICB0cmFuc2ZlckFuZENoZWNrQXJndW1lbnRzKCk7CiAgICAgICAgIAotICAgICAg
ICBtX291dC5qdW1wKGxvd0Jsb2NrKDApKTsKKyAgICAgICAgbV9vdXQuanVtcChsb3dCbG9jayht
X2dyYXBoLmJsb2NrKDApKSk7CiAgICAgICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9j
a0luZGV4KQorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5k
ZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpCiAgICAgICAgICAgICBjb21w
aWxlQmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIAogICAgICAgICAvLyBBbmQgbm93IGNvbXBs
ZXRlIHRoZSBpbml0aWFsaXphdGlvbiBibG9jay4KQEAgLTIxNCwxNSArMjE0LDE1IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4KQog
ICAgIHsKLSAgICAgICAgbV9oaWdoQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhd
LmdldCgpOworICAgICAgICBtX2hpZ2hCbG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
CiAgICAgICAgIGlmICghbV9oaWdoQmxvY2spCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IAogICAgICAgICBMQmFzaWNCbG9jayBsb3dCbG9jayA9IG1fYmxvY2tzLmdldChtX2hpZ2hCbG9j
ayk7CiAgICAgICAgIAogICAgICAgICBtX25leHRIaWdoQmxvY2sgPSAwOwotICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggbmV4dEJsb2NrSW5kZXggPSBibG9ja0luZGV4ICsgMTsgbmV4dEJsb2NrSW5k
ZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytuZXh0QmxvY2tJbmRleCkgewotICAgICAg
ICAgICAgbV9uZXh0SGlnaEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tuZXh0QmxvY2tJbmRleF0u
Z2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBuZXh0QmxvY2tJbmRleCA9IGJsb2NrSW5k
ZXggKyAxOyBuZXh0QmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrbmV4dEJsb2Nr
SW5kZXgpIHsKKyAgICAgICAgICAgIG1fbmV4dEhpZ2hCbG9jayA9IG1fZ3JhcGguYmxvY2sobmV4
dEJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKG1fbmV4dEhpZ2hCbG9jaykKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTU4MiwxNSArMTU4MiwxNSBAQCBwcml2YXRl
OgogICAgIAogICAgIHZvaWQgY29tcGlsZUp1bXAoKQogICAgIHsKLSAgICAgICAgbV9vdXQuanVt
cChsb3dCbG9jayhtX25vZGUtPnRha2VuQmxvY2tJbmRleCgpKSk7CisgICAgICAgIG1fb3V0Lmp1
bXAobG93QmxvY2sobV9ub2RlLT50YWtlbkJsb2NrKCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlQnJhbmNoKCkKICAgICB7CiAgICAgICAgIG1fb3V0LmJyYW5jaCgKICAgICAgICAg
ICAgIGJvb2xpZnkobV9ub2RlLT5jaGlsZDEoKSksCi0gICAgICAgICAgICBsb3dCbG9jayhtX25v
ZGUtPnRha2VuQmxvY2tJbmRleCgpKSwKLSAgICAgICAgICAgIGxvd0Jsb2NrKG1fbm9kZS0+bm90
VGFrZW5CbG9ja0luZGV4KCkpKTsKKyAgICAgICAgICAgIGxvd0Jsb2NrKG1fbm9kZS0+dGFrZW5C
bG9jaygpKSwKKyAgICAgICAgICAgIGxvd0Jsb2NrKG1fbm9kZS0+bm90VGFrZW5CbG9jaygpKSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVN3aXRjaCgpCkBAIC0yNDU0LDkgKzI0NTQs
OSBAQCBwcml2YXRlOgogICAgICAgICB1c2UoZWRnZSk7CiAgICAgfQogICAgIAotICAgIExCYXNp
Y0Jsb2NrIGxvd0Jsb2NrKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICBMQmFzaWNCbG9jayBs
b3dCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2Jsb2Nr
cy5nZXQobV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKSk7CisgICAgICAgIHJldHVy
biBtX2Jsb2Nrcy5nZXQoYmxvY2spOwogICAgIH0KICAgICAKICAgICB2b2lkIGluaXRpYWxpemVP
U1JFeGl0U3RhdGVGb3JCbG9jaygpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206112</attachid>
            <date>2013-07-04 13:58:08 -0700</date>
            <delta_ts>2013-07-05 16:03:03 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>166299</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNDA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyNiBA
QAorMjAxMy0wNy0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgcmVmZXIgdG8gQmFzaWNCbG9ja3MgYnkgQmFzaWNCbG9j
ayogYW5kIG5vdCBCbG9ja0luZGV4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTgzMzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWNjb21wbGlzaGVzIHR3byBnb2FsczoKKworICAg
ICAgICAxKSBTaW1wbGlmaWVzIGEgYnVuY2ggb2YgY29kZS4gWW91IGNhbiBub3cgbXVjaCBtb3Jl
IGRpcmVjdGx5IGdldCB0byBhIHN1Y2Nlc3NvcgorICAgICAgICAgICBvciBwcmVkZWNlc3Nvciwg
c2luY2UgeW91IGp1c3QgZ2V0IHRoZSBwb2ludGVyIGRpcmVjdGx5LiBUaGUgYmFja2VuZChzKSBh
bHdheXMKKyAgICAgICAgICAgaG9sZCBvbnRvIGEgcG9pbnRlciB0byB0aGUgYmxvY2sgdGhleSdy
ZSBvbiwgc28geW91IGRvbid0IGhhdmUgdG8gZG8gd29yayB0bworICAgICAgICAgICBnZXQgdGhl
IGJsb2NrIGZyb20gdGhlIGluZGV4LgorICAgICAgICAKKyAgICAgICAgMikgSXQgYWxsb3dzIGZv
ciB0aGUgcG9zc2liaWxpdHkgb2YgaW5zZXJ0aW5nIGJsb2NrcyBpbnRvIHRoZSBwcm9ncmFtLgor
ICAgICAgICAgICBQcmV2aW91c2x5LCBpZiB5b3UgZGlkIHRoYXQsIHlvdSdkIGhhdmUgdG8gZWRp
dCBhbGwgcmVmZXJlbmNlcyB0byBibG9ja3Mgc2luY2UKKyAgICAgICAgICAgdGhvc2UgcmVmZXJl
bmNlcyB3b3VsZCBoYXZlIG91dGRhdGVkIGluZGV4aW5nIGFmdGVyIGFuIGluc2VydGlvbi4gTm93
LCBpZiB5b3UKKyAgICAgICAgICAgY2hhbmdlIHRoZSBpbmRleGluZywgeW91IGp1c3QgaGF2ZSB0
byBpbnZhbGlkYXRlIHNvbWUgYW5hbHlzZXMgYW5kIG1ha2Ugc3VyZQorICAgICAgICAgICB0aGF0
IHlvdSBjaGFuZ2UgZWFjaCBibG9jaydzIEJhc2ljQmxvY2s6OmluZGV4IGFjY29yZGluZ2x5Lgor
CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
U3RhdGU6OmVuZEJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6
Om1lcmdlVG9TdWNjZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5oOgor
ICAgICAgICAoQWJzdHJhY3RTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZp
Y2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2U6
OnJ1bik6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKERGRyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6
OkRGRzo6QmFzaWNCbG9jazo6c2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6
aXNFbXB0eSk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6YXQpOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpERkc6OkJh
c2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OnJlc2l6ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6Z3Jvdyk6CisgICAgICAgIChCYXNpY0Js
b2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpERkc6OkJhc2ljQmxvY2s6Om51bVN1Y2Nlc3NvcnMpOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcik6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6
c3VjY2Vzc29yRm9yQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpk
dW1wKToKKyAgICAgICAgKFVubGlua2VkQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OlVubGlu
a2VkQmxvY2s6OlVubGlua2VkQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OmdldEJ5dGVjb2Rl
QmVnaW5Gb3JCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6YmxvY2tGb3JCeXRlY29kZU9mZnNl
dCk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEJ5dGVD
b2RlUGFyc2VyKToKKyAgICAgICAgKElubGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpsaW5rQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjps
aW5rQmxvY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3Rh
Y2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2UpOgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Q0ZBUGhhc2U6OnBlcmZvcm1CbG9ja0NGQSk6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZB
UGhhc2U6OnBlcmZvcm1Gb3J3YXJkQ0ZBKToKKyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFz
ZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpDRkdTaW1wbGlmaWNhdGlvblBoYXNlOjpjb252
ZXJ0VG9KdW1wKToKKyAgICAgICAgKiBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6ZnJlZVVubmVjZXNzYXJ5Tm9k
ZXMpOgorICAgICAgICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OmNhbm9uaWNhbGl6
ZUxvY2Fsc0luQmxvY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNSZXRocmVhZGluZ1BoYXNl
Ojpwcm9wYWdhdGVQaGlzKToKKyAgICAgICAgKENQU1JldGhyZWFkaW5nUGhhc2UpOgorICAgICAg
ICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnJ1
bik6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZH
OjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZnL0RG
R0RDRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6cnVuKToKKyAgICAg
ICAgKiBkZmcvREZHRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEaXNhc3Nl
bWJsZXI6OkRpc2Fzc2VtYmxlcik6CisgICAgICAgIChKU0M6OkRGRzo6RGlzYXNzZW1ibGVyOjpj
cmVhdGVEdW1wTGlzdCk6CisgICAgICAgICogZGZnL0RGR0Rpc2Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkRpc2Fzc2VtYmxlcjo6c2V0Rm9yQmxvY2tJbmRleCk6CisgICAgICAgICog
ZGZnL0RGR0RvbWluYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6OmNv
bXB1dGUpOgorICAgICAgICAoSlNDOjpERkc6OkRvbWluYXRvcnM6Oml0ZXJhdGVGb3JCbG9jayk6
CisgICAgICAgICogZGZnL0RGR0RvbWluYXRvcnMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpEb21p
bmF0b3JzOjpkb21pbmF0ZXMpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkZp
eHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1
bXBCbG9ja0hlYWRlcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmhhbmRsZVN1Y2Nlc3Nv
cik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmRldGVybWluZVJlYWNoYWJpbGl0eSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnJlc2V0UmVhY2hhYmlsaXR5KToKKyAgICAgICAgKiBk
ZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bnVtQmxvY2tzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpsYXN0QmxvY2spOgorICAgICAgICAoR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjphcHBlbmRCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmtpbGxCbG9jayk6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpJVENvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OnNldEZvckJsb2NrSW5kZXgpOgorICAgICAg
ICAqIGRmZy9ERkdOYXR1cmFsTG9vcHMuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxM
b29wOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9vcHM6OmNvbXB1dGUpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wczo6bG9vcHNPZik6CisgICAgICAgICogZGZn
L0RGR05hdHVyYWxMb29wcy5oOgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wOjpOYXR1
cmFsTG9vcCk6CisgICAgICAgIChKU0M6OkRGRzo6TmF0dXJhbExvb3A6OmFkZEJsb2NrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9vcDo6aGVhZGVyKToKKyAgICAgICAgKEpTQzo6REZH
OjpOYXR1cmFsTG9vcDo6YXQpOgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wOjpvcGVy
YXRvcltdKToKKyAgICAgICAgKEpTQzo6REZHOjpOYXR1cmFsTG9vcDo6Y29udGFpbnMpOgorICAg
ICAgICAoTmF0dXJhbExvb3ApOgorICAgICAgICAoSlNDOjpERkc6Ok5hdHVyYWxMb29wczo6aGVh
ZGVyT2YpOgorICAgICAgICAoTmF0dXJhbExvb3BzKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5o
OgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hDYXNlOjpTd2l0Y2hD
YXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJbmRleCk6
CisgICAgICAgIChTd2l0Y2hDYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hDYXNlOjp0
YXJnZXRCeXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hEYXRhOjpTd2l0
Y2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpTd2l0Y2hEYXRhOjpzZXRGYWxsVGhyb3VnaEJ5
dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlN3aXRjaERhdGE6OmZhbGxUaHJvdWdo
Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChTd2l0Y2hEYXRhKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjpzZXRUYWtlbkJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzZXROb3RU
YWtlbkJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp0YWtlbkJsb2NrKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpub3RUYWtlbkJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpzdWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN1Y2Nlc3NvckZvckNv
bmRpdGlvbik6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvbkluamVjdGlvblBoYXNlOjpydW4pOgorICAg
ICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZUZvcndhcmQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGVC
YWNrd2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6
OmRvUm91bmRPZkRvdWJsZVZvdGluZyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29udmVydExhc3RPU1JF
eGl0VG9Gb3J3YXJkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVDb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW5jaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2spOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y3JlYXRlT1NSRW50cmllcyk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmxpbmtPU1JFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxRm9yQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RyaWN0RXEpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFkZEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmxpbmtCcmFuY2hlcyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5leHRCbG9jayk6Cisg
ICAgICAgIChTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmRldGVjdFBlZXBIb2xlQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6YnJhbmNoRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
YnJhbmNoRG91YmxlTm9uWmVybyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmJyYW5jaDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoVGVz
dDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoNjQpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpicmFuY2g4KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6YnJhbmNoUHRyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6YnJhbmNoVGVzdFB0cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmJyYW5jaFRlc3Q4KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
anVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFkZEJyYW5jaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OlN0cmluZ1N3aXRjaENhc2U6OlN0cmlu
Z1N3aXRjaENhc2UpOgorICAgICAgICAoU3RyaW5nU3dpdGNoQ2FzZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OkJyYW5jaFJlY29yZDo6QnJhbmNoUmVjb3JkKToKKyAgICAg
ICAgKEJyYW5jaFJlY29yZCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBl
ZXBob2xlQnJhbmNoTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlQ29tcGFyZU51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RP
ck90aGVyRXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0
T2JqZWN0T3JPdGhlckJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJl
TnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
UGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RUb09iamVjdE9yT3RoZXJFcXVhbGl0eSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNo
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0
aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50U3RydWN0dXJlQ2hlY2tzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFudEFycmF5Q2hl
Y2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjpkaXNhYmxl
SG9pc3RpbmdBY3Jvc3NPU1JFbnRyaWVzKToKKyAgICAgICAgKiBkZmcvREZHVW5pZmljYXRpb25Q
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VW5pZmljYXRpb25QaGFzZTo6cnVuKToKKyAg
ICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRl
Ojp2YWxpZGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OmNoZWNrT3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OnJlcG9ydFZhbGlkYXRpb25Db250ZXh0KToK
KyAgICAgICAgKiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2U6OnJ1bik6Cisg
ICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2Fu
Q29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6TG93ZXJERkdUb0xMVk0pOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dlcik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVCbG9jayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmNvbXBpbGVKdW1wKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0Jsb2Nr
KToKKwogMjAxMy0wNy0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIGFkZCBhIGhlbHBmdWwgY29tbWVudCBmb3Igd2h5IERDRSBpcyBuZWVk
ZWQgaW4gdGhlIEZUTC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTUyNDA2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUs
NyBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNCbG9jayhCYXNpCiAKIHZvaWQgQWJz
dHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgQmFzaWNCbG9jayog
cm9vdCA9IGdyYXBoLm1fYmxvY2tzWzBdLmdldCgpOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBn
cmFwaC5ibG9jaygwKTsKICAgICByb290LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKICAgICBy
b290LT5jZmFIYXNWaXNpdGVkID0gZmFsc2U7CiAgICAgcm9vdC0+Y2ZhRm91bmRDb25zdGFudHMg
PSBmYWxzZTsKQEAgLTExOCw4ICsxMTgsOCBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxp
emUoR3JhcGgmIGdyCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xl
YXIoKTsKICAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmxvY2FsKGkpLmNsZWFyKCk7CiAgICAg
fQotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMSA7IGJsb2NrSW5kZXggPCBncmFw
aC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IGdyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMSA7IGJsb2NrSW5kZXggPCBncmFwaC5udW1CbG9ja3MoKTsgKyti
bG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CiAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgaWYgKCFibG9jay0+aXNSZWFjaGFibGUpCkBAIC0yMDAsNyArMjAwLDcgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjplbmRCYXNpY0Jsb2NrKE1lcmdlTQogICAgIGlmIChtZXJnZU1vZGUgIT0g
TWVyZ2VUb1N1Y2Nlc3NvcnMpCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIAotICAgIHJl
dHVybiBtZXJnZVRvU3VjY2Vzc29ycyhtX2dyYXBoLCBibG9jayk7CisgICAgcmV0dXJuIG1lcmdl
VG9TdWNjZXNzb3JzKGJsb2NrKTsKIH0KIAogdm9pZCBBYnN0cmFjdFN0YXRlOjpyZXNldCgpCkBA
IC0xNzkyLDcgKzE3OTIsNyBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNp
Y0JsCiAgICAgcmV0dXJuIGNoYW5nZWQ7CiB9CiAKLWlubGluZSBib29sIEFic3RyYWN0U3RhdGU6
Om1lcmdlVG9TdWNjZXNzb3JzKEdyYXBoJiBncmFwaCwgQmFzaWNCbG9jayogYmFzaWNCbG9jaykK
K2lubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKEJhc2ljQmxvY2sq
IGJhc2ljQmxvY2spCiB7CiAgICAgTm9kZSogdGVybWluYWwgPSBiYXNpY0Jsb2NrLT5sYXN0KCk7
CiAgICAgCkBAIC0xODAyLDI0ICsxODAyLDI0IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6
Om1lcmdlVG9TdWNjZXMKICAgICBjYXNlIEp1bXA6IHsKICAgICAgICAgQVNTRVJUKGJhc2ljQmxv
Y2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIg
ICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwtPnRha2VuQmxvY2tJbmRl
eCgpKTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICIsICp0ZXJt
aW5hbC0+dGFrZW5CbG9jaygpLCAiLlxuIik7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIG1lcmdl
KGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgoKV0u
Z2V0KCkpOworICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgdGVybWluYWwtPnRha2Vu
QmxvY2soKSk7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEJyYW5jaDogewogICAgICAgICBB
U1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uICE9IEludmFsaWRCcmFuY2hEaXJl
Y3Rpb24pOwogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICNpZiBERkdfRU5BQkxFKERF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdp
bmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVybWluYWwtPnRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAg
ICAgZGF0YUxvZygiICAgICAgICBNZXJnaW5nIHRvIGJsb2NrICIsICp0ZXJtaW5hbC0+dGFrZW5C
bG9jaygpLCAiLlxuIik7CiAjZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxvY2stPmNmYUJyYW5j
aERpcmVjdGlvbiAhPSBUYWtlRmFsc2UpCi0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlKGJh
c2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLT50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0
KCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCB0ZXJtaW5hbC0+
dGFrZW5CbG9jaygpKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
Ci0gICAgICAgIGRhdGFMb2dGKCIgICAgICAgIE1lcmdpbmcgdG8gYmxvY2sgIyV1LlxuIiwgdGVy
bWluYWwtPm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZygiICAgICAgICBN
ZXJnaW5nIHRvIGJsb2NrICIsICp0ZXJtaW5hbC0+bm90VGFrZW5CbG9jaygpLCAiLlxuIik7CiAj
ZW5kaWYKICAgICAgICAgaWYgKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiAhPSBUYWtl
VHJ1ZSkKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9i
bG9ja3NbdGVybWluYWwtPm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlKGJhc2ljQmxvY2ssIHRlcm1pbmFsLT5ub3RUYWtlbkJsb2NrKCkp
OwogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CiAgICAgICAgIApAQCAtMTgyOCw5ICsx
ODI4LDkgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2NlcwogICAgICAg
ICAvLyB3ZSdyZSBub3QuIEhvd2V2ZXIgSSBzb21laG93IGRvdWJ0IHRoYXQgdGhpcyB3aWxsIGV2
ZXIgYmUgYSBiaWcgZGVhbC4KICAgICAgICAgQVNTRVJUKGJhc2ljQmxvY2stPmNmYUJyYW5jaERp
cmVjdGlvbiA9PSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKTsKICAgICAgICAgU3dpdGNoRGF0YSog
ZGF0YSA9IHRlcm1pbmFsLT5zd2l0Y2hEYXRhKCk7Ci0gICAgICAgIGJvb2wgY2hhbmdlZCA9IG1l
cmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW2RhdGEtPmZhbGxUaHJvdWdoXS5nZXQoKSk7
CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IG1lcmdlKGJhc2ljQmxvY2ssIGRhdGEtPmZhbGxUaHJv
dWdoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6ZSgpOyBpLS07
KQotICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nr
c1tkYXRhLT5jYXNlc1tpXS50YXJnZXRdLmdldCgpKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2UoYmFzaWNCbG9jaywgZGF0YS0+Y2FzZXNbaV0udGFyZ2V0KTsKICAgICAgICAgcmV0dXJu
IGNoYW5nZWQ7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAxNTI0MDYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjI3
LDcgKzIyNyw3IEBAIHB1YmxpYzoKICAgICAvLyBzdWNjZXNzb3JzLiBSZXR1cm5zIHRydWUgaWYg
YW55IG9mIHRoZSBzdWNjZXNzb3JzJyBzdGF0ZXMgY2hhbmdlZC4gTm90ZQogICAgIC8vIHRoYXQg
dGhpcyBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBpbiBlbmRCYXNpY0Jsb2NrKCkgaWYgTWVyZ2VN
b2RlIGlzCiAgICAgLy8gTWVyZ2VUb1N1Y2Nlc3NvcnMuCi0gICAgYm9vbCBtZXJnZVRvU3VjY2Vz
c29ycyhHcmFwaCYsIEJhc2ljQmxvY2sqKTsKKyAgICBib29sIG1lcmdlVG9TdWNjZXNzb3JzKEJh
c2ljQmxvY2sqKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCk7CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MjQwNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw4ICsxNDIsOCBAQCBwdWJsaWM6CiAgICAgICAgIAog
ICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIHZhcmlhYmxlcyBhcmUgbGl2ZSwgdXNpbmcgYSBj
b25zZXJ2YXRpdmUgYXBwcm94aW1hdGlvbiBvZgogICAgICAgICAvLyBsaXZlbmVzcy4KLSAgICAg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5t
X2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nr
cygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9j
ayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CkBA
IC0xNjQsOCArMTY0LDggQEAgcHVibGljOgogICAgICAgICAvLyB1c2VkIG9ubHkgZm9yIEdldEJ5
VmFsIGFuZCBHZXRBcnJheUxlbmd0aCBhY2Nlc3Nlcy4gQXQgdGhlIHNhbWUgdGltZSwKICAgICAg
ICAgLy8gaWRlbnRpZnkgdXNlcyBvZiBDcmVhdGVBcmd1bWVudHMgdGhhdCBhcmUgbm90IGNvbnNp
c3RlbnQgd2l0aCB0aGUgYXJndW1lbnRzCiAgICAgICAgIC8vIGJlaW5nIGFsaWFzZWQgb25seSB0
byB2YXJpYWJsZXMgdGhhdCBzYXRpc2Z5IHRoZXNlIGNvbnN0cmFpbnRzLgotICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tz
LnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsr
YmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsg
aW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKQEAgLTM1Miw4
ICszNTIsOCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYXMgcmVxdWlyaW5n
IGNyZWF0aW9uLiBUaGlzIGlzIGEgcHJvcGVydHkgb2YgU2V0TG9jYWxzIHRvCiAgICAgICAgIC8v
IHZhcmlhYmxlcyB0aGF0IGFyZSBuZWl0aGVyIHRoZSBjb3JyZWN0IGFyZ3VtZW50cyByZWdpc3Rl
ciBub3IgYXJlIG1hcmtlZCBhcwogICAgICAgICAvLyBiZWluZyBhcmd1bWVudHMtYWxpYXNlZC4K
LSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2Nr
KSB7CkBAIC00MjgsOCArNDI4LDggQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgSW5zZXJ0
aW9uU2V0IGluc2VydGlvblNldChtX2dyYXBoKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9j
a0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRl
eEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2srKykgewpAQCAtNjYxLDggKzY2
MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkg
ewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2Nr
SW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAg
ICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5z
aXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE1MjQwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0LDggQEAgcHVibGlj
OgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Js
b2NrSW5kZXgpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Js
b2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7
CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRl
eCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxv
Y2suaAkocmV2aXNpb24gMTUyNDA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEyICszOSwxNCBAQAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBHcmFwaDsKK2NsYXNzIEluc2VydGlvblNl
dDsKIAotdHlwZWRlZiBWZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRlY2Vzc29yTGlzdDsKK3R5
cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7CiAKLXN0cnVjdCBC
YXNpY0Jsb2NrIDogVmVjdG9yPE5vZGUqLCA4PiB7CitzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNv
dW50ZWQ8QmFzaWNCbG9jaz4gewogICAgIEJhc2ljQmxvY2sodW5zaWduZWQgYnl0ZWNvZGVCZWdp
biwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMpCiAgICAgICAgIDog
Ynl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQorICAgICAgICAsIGluZGV4KE5vQmxvY2spCiAg
ICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2UpCiAgICAgICAgICwgY2ZhSGFzVmlzaXRlZChmYWxz
ZSkKICAgICAgICAgLCBjZmFTaG91bGRSZXZpc2l0KGZhbHNlKQpAQCAtNzQsNiArNzYsMTcgQEAg
c3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZSosIDg+IHsKICAgICAgICAgdmFsdWVzQXRU
YWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwogICAgIH0KICAgICAKKyAgICBzaXplX3Qg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQorICAgIE5vZGUqJiBhdChzaXplX3QgaSkgeyBy
ZXR1cm4gbV9ub2Rlc1tpXTsgfQorICAgIE5vZGUqIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVy
biBtX25vZGVzW2ldOyB9CisgICAgTm9kZSogb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyBy
ZXR1cm4gYXQoaSk7IH0KKyAgICBOb2RlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4gYXQoc2l6ZSgp
IC0gMSk7IH0KKyAgICB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSkgeyBtX25vZGVzLnJlc2l6ZShz
aXplKTsgfQorICAgIHZvaWQgZ3JvdyhzaXplX3Qgc2l6ZSkgeyBtX25vZGVzLmdyb3coc2l6ZSk7
IH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZChOb2RlKiBub2RlKSB7IG1fbm9kZXMuYXBwZW5kKG5v
ZGUpOyB9CisgICAgCiAgICAgc2l6ZV90IG51bU5vZGVzKCkgY29uc3QgeyByZXR1cm4gcGhpcy5z
aXplKCkgKyBzaXplKCk7IH0KICAgICBOb2RlKiBub2RlKHNpemVfdCBpKSBjb25zdAogICAgIHsK
QEAgLTEwMSwxNSArMTE0LDMzIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5vZGUqLCA4
PiB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCisgICAgdW5zaWduZWQgbnVt
U3VjY2Vzc29ycygpIHsgcmV0dXJuIGxhc3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9CisgICAgCisg
ICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGxhc3QoKS0+c3VjY2Vzc29yKGluZGV4KTsKKyAgICB9CisgICAgQmFzaWNCbG9jayog
c3VjY2Vzc29yRm9yQ29uZGl0aW9uKGJvb2wgY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGxhc3QoKS0+c3VjY2Vzc29yRm9yQ29uZGl0aW9uKGNvbmRpdGlvbik7CisgICAgfQorCiAj
ZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwg
dHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAog
ICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFwcGVuZE5vZGUo
R3JhcGgmLCBTcGVjdWxhdGVkVHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKTsKICAg
ICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkK
ICN1bmRlZiBERkdfREVGSU5FX0FQUEVORF9OT0RFCiAgICAgCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQucHJpbnQoIiMiLCBpbmRleCk7
CisgICAgfQorICAgIAogICAgIC8vIFRoaXMgdmFsdWUgaXMgdXNlZCBpbnRlcm5hbGx5IGZvciBi
bG9jayBsaW5raW5nIGFuZCBPU1IgZW50cnkuIEl0IGlzIG1vc3RseSBtZWFuaW5nbGVzcwogICAg
IC8vIGZvciBvdGhlciBwdXJwb3NlcyBkdWUgdG8gaW5saW5pbmcuCiAgICAgdW5zaWduZWQgYnl0
ZWNvZGVCZWdpbjsKICAgICAKKyAgICBCbG9ja0luZGV4IGluZGV4OworICAgIAogICAgIGJvb2wg
aXNPU1JUYXJnZXQ7CiAgICAgYm9vbCBjZmFIYXNWaXNpdGVkOwogICAgIGJvb2wgY2ZhU2hvdWxk
UmV2aXNpdDsKQEAgLTEyMiwzMCArMTUzLDQ0IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9y
PE5vZGUqLCA4PiB7CiAgICAgYm9vbCBpc1JlYWNoYWJsZTsKICAgICAKICAgICBWZWN0b3I8Tm9k
ZSo+IHBoaXM7Ci0gICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOworICAgIFByZWRl
Y2Vzc29yTGlzdCBwcmVkZWNlc3NvcnM7CiAgICAgCiAgICAgT3BlcmFuZHM8Tm9kZSosIE5vZGVQ
b2ludGVyVHJhaXRzPiB2YXJpYWJsZXNBdEhlYWQ7CiAgICAgT3BlcmFuZHM8Tm9kZSosIE5vZGVQ
b2ludGVyVHJhaXRzPiB2YXJpYWJsZXNBdFRhaWw7CiAgICAgCiAgICAgT3BlcmFuZHM8QWJzdHJh
Y3RWYWx1ZT4gdmFsdWVzQXRIZWFkOwogICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IHZhbHVl
c0F0VGFpbDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0OworICAg
IFZlY3RvcjxOb2RlKiwgOD4gbV9ub2RlczsKIH07CiAKIHN0cnVjdCBVbmxpbmtlZEJsb2NrIHsK
LSAgICBCbG9ja0luZGV4IG1fYmxvY2tJbmRleDsKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwog
ICAgIGJvb2wgbV9uZWVkc05vcm1hbExpbmtpbmc7CiAgICAgYm9vbCBtX25lZWRzRWFybHlSZXR1
cm5MaW5raW5nOwogICAgIAogICAgIFVubGlua2VkQmxvY2soKSB7IH0KICAgICAKLSAgICBleHBs
aWNpdCBVbmxpbmtlZEJsb2NrKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKLSAgICAgICAgOiBtX2Js
b2NrSW5kZXgoYmxvY2tJbmRleCkKKyAgICBleHBsaWNpdCBVbmxpbmtlZEJsb2NrKEJhc2ljQmxv
Y2sqIGJsb2NrKQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCiAgICAgICAgICwgbV9uZWVkc05v
cm1hbExpbmtpbmcodHJ1ZSkKICAgICAgICAgLCBtX25lZWRzRWFybHlSZXR1cm5MaW5raW5nKGZh
bHNlKQogICAgIHsKICAgICB9CiB9OwogICAgIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBnZXRC
eXRlY29kZUJlZ2luRm9yQmxvY2soQmFzaWNCbG9jayoqIGJhc2ljQmxvY2spCit7CisgICAgcmV0
dXJuICgqYmFzaWNCbG9jayktPmJ5dGVjb2RlQmVnaW47Cit9CisKK3N0YXRpYyBpbmxpbmUgQmFz
aWNCbG9jayogYmxvY2tGb3JCeXRlY29kZU9mZnNldChWZWN0b3I8QmFzaWNCbG9jayo+JiBsaW5r
aW5nVGFyZ2V0cywgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbikKK3sKKyAgICByZXR1cm4gKmJpbmFy
eVNlYXJjaDxCYXNpY0Jsb2NrKiwgdW5zaWduZWQ+KGxpbmtpbmdUYXJnZXRzLCBsaW5raW5nVGFy
Z2V0cy5zaXplKCksIGJ5dGVjb2RlQmVnaW4sIGdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jayk7Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDE1MjQwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsOCArMTgzLDggQEAgcHJp
dmF0ZToKICAgICAvLyBQYXJzZSBhIHNpbmdsZSBiYXNpYyBibG9jayBvZiBieXRlY29kZSBpbnN0
cnVjdGlvbnMuCiAgICAgYm9vbCBwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KTsKICAgICAvLyBM
aW5rIGJsb2NrIHN1Y2Nlc3NvcnMuCi0gICAgdm9pZCBsaW5rQmxvY2soQmFzaWNCbG9jayosIFZl
Y3RvcjxCbG9ja0luZGV4PiYgcG9zc2libGVUYXJnZXRzKTsKLSAgICB2b2lkIGxpbmtCbG9ja3Mo
VmVjdG9yPFVubGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJsb2NrSW5kZXg+
JiBwb3NzaWJsZVRhcmdldHMpOworICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0
b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpOworICAgIHZvaWQgbGlua0Jsb2NrcyhW
ZWN0b3I8VW5saW5rZWRCbG9jaz4mIHVubGlua2VkQmxvY2tzLCBWZWN0b3I8QmFzaWNCbG9jayo+
JiBwb3NzaWJsZVRhcmdldHMpOwogICAgIC8vIExpbmsgR2V0TG9jYWwgJiBTZXRMb2NhbCBub2Rl
cywgdG8gZW5zdXJlIGxpdmUgdmFsdWVzIGFyZSBnZW5lcmF0ZWQuCiAgICAgZW51bSBQaGlTdGFj
a1R5cGUgewogICAgICAgICBMb2NhbFBoaVN0YWNrLApAQCAtMTAzOSwxMyArMTAzOSwxMyBAQCBw
cml2YXRlOgogICAgICAgICAvLyBQb3RlbnRpYWwgYmxvY2sgbGlua2luZyB0YXJnZXRzLiBNdXN0
IGJlIHNvcnRlZCBieSBieXRlY29kZUJlZ2luLCBhbmQKICAgICAgICAgLy8gY2Fubm90IGhhdmUg
dHdvIGJsb2NrcyB0aGF0IGhhdmUgdGhlIHNhbWUgYnl0ZWNvZGVCZWdpbi4gRm9yIHRoaXMgdmVy
eQogICAgICAgICAvLyByZWFzb24sIHRoaXMgaXMgbm90IGVxdWl2YWxlbnQgdG8gCi0gICAgICAg
IFZlY3RvcjxCbG9ja0luZGV4PiBtX2Jsb2NrTGlua2luZ1RhcmdldHM7CisgICAgICAgIFZlY3Rv
cjxCYXNpY0Jsb2NrKj4gbV9ibG9ja0xpbmtpbmdUYXJnZXRzOwogICAgICAgICAKICAgICAgICAg
Ly8gSWYgdGhlIGNhbGxzaXRlJ3MgYmFzaWMgYmxvY2sgd2FzIHNwbGl0IGludG8gdHdvLCB0aGVu
IHRoaXMgd2lsbCBiZQogICAgICAgICAvLyB0aGUgaGVhZCBvZiB0aGUgY2FsbHNpdGUgYmxvY2su
IEl0IG5lZWRzIGl0cyBzdWNjZXNzb3JzIGxpbmtlZCB0byB0aGUKICAgICAgICAgLy8gbV91bmxp
bmtlZEJsb2NrcywgYnV0IG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZDogdGhlcmUncyBubyB3YXkg
Zm9yCiAgICAgICAgIC8vIGFueSBibG9ja3MgaW4gbV91bmxpbmtlZEJsb2NrcyB0byBqdW1wIGJh
Y2sgaW50byB0aGlzIGJsb2NrLgotICAgICAgICBCbG9ja0luZGV4IG1fY2FsbHNpdGVCbG9ja0hl
YWQ7CisgICAgICAgIEJhc2ljQmxvY2sqIG1fY2FsbHNpdGVCbG9ja0hlYWQ7CiAgICAgICAgIAog
ICAgICAgICAvLyBEb2VzIHRoZSBjYWxsc2l0ZSBibG9jayBoZWFkIG5lZWQgbGlua2luZz8gVGhp
cyBpcyB0eXBpY2FsbHkgdHJ1ZQogICAgICAgICAvLyBidXQgd2lsbCBiZSBmYWxzZSBmb3IgdGhl
IG1hY2hpbmUgY29kZSBibG9jaydzIGlubGluZSBzdGFjayBlbnRyeQpAQCAtMTA3Niw3ICsxMDc2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEJ5dGVDb2RlUGFyc2VyKiwKICAgICAgICAgICAg
IENvZGVCbG9jayosCiAgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssCi0gICAg
ICAgICAgICBCbG9ja0luZGV4IGNhbGxzaXRlQmxvY2tIZWFkLAorICAgICAgICAgICAgQmFzaWNC
bG9jayogY2FsbHNpdGVCbG9ja0hlYWQsCiAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUs
IC8vIE51bGwgaWYgdGhpcyBpcyBhIGNsb3N1cmUgY2FsbC4KICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZXR1cm5WYWx1ZVZSLAogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGlubGlu
ZUNhbGxGcmFtZVN0YXJ0LApAQCAtMTI5NSwxNCArMTI5NSwxNCBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgdW5zaWduZWQgbmV3TnVtTG9jYWxzID0gaW5s
aW5lQ2FsbEZyYW1lU3RhcnQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgY29kZUJs
b2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKICAgICBpZiAobmV3TnVtTG9jYWxzID4gbV9udW1M
b2NhbHMpIHsKICAgICAgICAgbV9udW1Mb2NhbHMgPSBuZXdOdW1Mb2NhbHM7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbaV0tPmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsraSkK
KyAgICAgICAgICAgIG1fZ3JhcGguYmxvY2soaSktPmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMp
OwogICAgIH0KICAgICAKICAgICBzaXplX3QgYXJndW1lbnRQb3NpdGlvblN0YXJ0ID0gbV9ncmFw
aC5tX2FyZ3VtZW50UG9zaXRpb25zLnNpemUoKTsKIAogICAgIElubGluZVN0YWNrRW50cnkgaW5s
aW5lU3RhY2tFbnRyeSgKLSAgICAgICAgdGhpcywgY29kZUJsb2NrLCBjb2RlQmxvY2ssIG1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpIC0gMSwgY2FsbExpbmtTdGF0dXMuZnVuY3Rpb24oKSwKKyAgICAg
ICAgdGhpcywgY29kZUJsb2NrLCBjb2RlQmxvY2ssIG1fZ3JhcGgubGFzdEJsb2NrKCksIGNhbGxM
aW5rU3RhdHVzLmZ1bmN0aW9uKCksCiAgICAgICAgIChWaXJ0dWFsUmVnaXN0ZXIpbV9pbmxpbmVT
dGFja1RvcC0+cmVtYXBPcGVyYW5kKHJlc3VsdE9wZXJhbmQpLAogICAgICAgICAoVmlydHVhbFJl
Z2lzdGVyKWlubGluZUNhbGxGcmFtZVN0YXJ0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
a2luZCk7CiAgICAgCkBAIC0xMzIxLDE5ICsxMzIxLDE5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZEluZGV4OwogICAg
IAogICAgIC8vIElmIHRoZSBpbmxpbmVkIGNvZGUgY3JlYXRlZCBzb21lIG5ldyBiYXNpYyBibG9j
a3MsIHRoZW4gd2UgaGF2ZSBsaW5raW5nIHRvIGRvLgotICAgIGlmIChpbmxpbmVTdGFja0VudHJ5
Lm1fY2FsbHNpdGVCbG9ja0hlYWQgIT0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxKSB7Cisg
ICAgaWYgKGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCAhPSBtX2dyYXBoLmxh
c3RCbG9jaygpKSB7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoIWlubGluZVN0YWNrRW50cnku
bV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpOwogICAgICAgICBpZiAoaW5saW5lU3RhY2tFbnRy
eS5tX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nKQotICAgICAgICAgICAgbGlua0Jsb2Nr
KG1fZ3JhcGgubV9ibG9ja3NbaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFkXS5n
ZXQoKSwgaW5saW5lU3RhY2tFbnRyeS5tX2Jsb2NrTGlua2luZ1RhcmdldHMpOworICAgICAgICAg
ICAgbGlua0Jsb2NrKGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCwgaW5saW5l
U3RhY2tFbnRyeS5tX2Jsb2NrTGlua2luZ1RhcmdldHMpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBBU1NFUlQobV9ncmFwaC5tX2Jsb2Nrc1tpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVC
bG9ja0hlYWRdLT5pc0xpbmtlZCk7CisgICAgICAgICAgICBBU1NFUlQoaW5saW5lU3RhY2tFbnRy
eS5tX2NhbGxzaXRlQmxvY2tIZWFkLT5pc0xpbmtlZCk7CiAgICAgICAgIAogICAgICAgICAvLyBJ
dCdzIHBvc3NpYmxlIHRoYXQgdGhlIGNhbGxzaXRlIGJsb2NrIGhlYWQgaXMgbm90IG93bmVkIGJ5
IHRoZSBjYWxsZXIuCiAgICAgICAgIGlmICghaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxlci0+bV91
bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIEl0J3MgZGVmaW5pdGVs
eSBvd25lZCBieSB0aGUgY2FsbGVyLCBiZWNhdXNlIHRoZSBjYWxsZXIgY3JlYXRlZCBuZXcgYmxv
Y2tzLgogICAgICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhpcyBhbGwgYWRkcyB1cC4KLSAgICAg
ICAgICAgIEFTU0VSVChpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tz
Lmxhc3QoKS5tX2Jsb2NrSW5kZXggPT0gaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tI
ZWFkKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbGVyLT5tX3Vu
bGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrID09IGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0
ZUJsb2NrSGVhZCk7CiAgICAgICAgICAgICBBU1NFUlQoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxl
ci0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9uZWVkc05vcm1hbExpbmtpbmcpOwogICAgICAg
ICAgICAgaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCku
bV9uZWVkc05vcm1hbExpbmtpbmcgPSBmYWxzZTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEzNDgs
NyArMTM0OCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAg
ICB9IGVsc2UKICAgICAgICAgQVNTRVJUKGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nr
cy5pc0VtcHR5KCkpOwogICAgIAotICAgIEJhc2ljQmxvY2sqIGxhc3RCbG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3MubGFzdCgpLmdldCgpOworICAgIEJhc2ljQmxvY2sqIGxhc3RCbG9jayA9IG1fZ3Jh
cGgubGFzdEJsb2NrKCk7CiAgICAgLy8gSWYgdGhlcmUgd2FzIGEgcmV0dXJuLCBidXQgbm8gZWFy
bHkgcmV0dXJucywgdGhlbiB3ZSdyZSBkb25lLiBXZSBhbGxvdyBwYXJzaW5nIG9mCiAgICAgLy8g
dGhlIGNhbGxlciB0byBjb250aW51ZSBpbiB3aGF0ZXZlciBiYXNpYyBibG9jayB3ZSdyZSBpbiBy
aWdodCBub3cuCiAgICAgaWYgKCFpbmxpbmVTdGFja0VudHJ5Lm1fZGlkRWFybHlSZXR1cm4gJiYg
aW5saW5lU3RhY2tFbnRyeS5tX2RpZFJldHVybikgewpAQCAtMTM2NCwxMSArMTM2NCwxMSBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAgICAgICAvLyBm
b3IgcmVsZWFzZSBidWlsZHMgYmVjYXVzZSB0aGlzIGJsb2NrIHdpbGwgbmV2ZXIgc2VydmUgYXMg
YSBwb3RlbnRpYWwgdGFyZ2V0CiAgICAgICAgICAgICAvLyBpbiB0aGUgbGlua2VyJ3MgYmluYXJ5
IHNlYXJjaC4KICAgICAgICAgICAgIGxhc3RCbG9jay0+Ynl0ZWNvZGVCZWdpbiA9IG1fY3VycmVu
dEluZGV4OwotICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fdW5saW5r
ZWRCbG9ja3MuYXBwZW5kKFVubGlua2VkQmxvY2sobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAx
KSk7CisgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJs
b2Nrcy5hcHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLmxhc3RCbG9jaygpKSk7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrcy5s
YXN0KCkuZ2V0KCk7Ci0KKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLmxhc3RCbG9j
aygpOworICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgICAgIGRh
dGFMb2dGKCJEb25lIGlubGluaW5nIGV4ZWN1dGFibGUgJXAsIGNvbnRpbnVpbmcgY29kZSBnZW5l
cmF0aW9uIGF0IGVwaWxvZ3VlLlxuIiwgZXhlY3V0YWJsZSk7CiAjZW5kaWYKQEAgLTEzNzgsMzIg
KzEzNzgsMzUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAg
IC8vIElmIHdlIGdldCB0byB0aGlzIHBvaW50IHRoZW4gYWxsIGJsb2NrcyBtdXN0IGVuZCBpbiBz
b21lIHNvcnQgb2YgdGVybWluYWxzLgogICAgIEFTU0VSVChsYXN0QmxvY2stPmxhc3QoKS0+aXNU
ZXJtaW5hbCgpKTsKICAgICAKKworICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IGJhc2ljIGJs
b2NrIGZvciB0aGUgY29udGludWF0aW9uIGF0IHRoZSBjYWxsZXIuCisgICAgUmVmUHRyPEJhc2lj
QmxvY2s+IGJsb2NrID0gYWRvcHRSZWYobmV3IEJhc2ljQmxvY2sobmV4dE9mZnNldCwgbV9udW1B
cmd1bWVudHMsIG1fbnVtTG9jYWxzKSk7CisKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0Up
CisgICAgZGF0YUxvZ0YoIkNyZWF0aW5nIGlubGluZSBlcGlsb2d1ZSBiYXNpYyBibG9jayAlcCwg
IyV6dSBmb3IgJXAgYmMjJXUgYXQgaW5saW5lIGRlcHRoICV1LlxuIiwgYmxvY2suZ2V0KCksIG1f
Z3JhcGgubnVtQmxvY2tzKCksIG1faW5saW5lU3RhY2tUb3AtPmV4ZWN1dGFibGUoKSwgbV9jdXJy
ZW50SW5kZXgsIENvZGVPcmlnaW46OmlubGluZURlcHRoRm9yQ2FsbEZyYW1lKGlubGluZUNhbGxG
cmFtZSgpKSk7CisjZW5kaWYKKwogICAgIC8vIExpbmsgdGhlIGVhcmx5IHJldHVybnMgdG8gdGhl
IGJhc2ljIGJsb2NrIHdlJ3JlIGFib3V0IHRvIGNyZWF0ZS4KICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrcy5zaXplKCk7ICsraSkgewog
ICAgICAgICBpZiAoIWlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRz
RWFybHlSZXR1cm5MaW5raW5nKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5r
ZWRCbG9ja3NbaV0ubV9ibG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgQVNTRVJUKCFibG9jay0+
aXNMaW5rZWQpOwotICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAg
QmFzaWNCbG9jayogYmxvY2tUb0xpbmsgPSBpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9j
a3NbaV0ubV9ibG9jazsKKyAgICAgICAgQVNTRVJUKCFibG9ja1RvTGluay0+aXNMaW5rZWQpOwor
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2tUb0xpbmstPmxhc3QoKTsKICAgICAgICAgQVNTRVJU
KG5vZGUtPm9wKCkgPT0gSnVtcCk7Ci0gICAgICAgIEFTU0VSVChub2RlLT50YWtlbkJsb2NrSW5k
ZXgoKSA9PSBOb0Jsb2NrKTsKLSAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9ja0luZGV4KG1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPnRha2VuQmxvY2soKSA9
PSAwKTsKKyAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9jayhibG9jay5nZXQoKSk7CiAgICAgICAg
IGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzRWFybHlSZXR1cm5M
aW5raW5nID0gZmFsc2U7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBibG9jay0+aXNM
aW5rZWQgPSB0cnVlOworICAgICAgICBibG9ja1RvTGluay0+aXNMaW5rZWQgPSB0cnVlOwogI2Vu
ZGlmCiAgICAgfQogICAgIAotICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IGJhc2ljIGJsb2Nr
IGZvciB0aGUgY29udGludWF0aW9uIGF0IHRoZSBjYWxsZXIuCi0gICAgT3duUHRyPEJhc2ljQmxv
Y2s+IGJsb2NrID0gYWRvcHRQdHIobmV3IEJhc2ljQmxvY2sobmV4dE9mZnNldCwgbV9udW1Bcmd1
bWVudHMsIG1fbnVtTG9jYWxzKSk7Ci0jaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAg
IGRhdGFMb2dGKCJDcmVhdGluZyBpbmxpbmUgZXBpbG9ndWUgYmFzaWMgYmxvY2sgJXAsICMlenUg
Zm9yICVwIGJjIyV1IGF0IGlubGluZSBkZXB0aCAldS5cbiIsIGJsb2NrLmdldCgpLCBtX2dyYXBo
Lm1fYmxvY2tzLnNpemUoKSwgbV9pbmxpbmVTdGFja1RvcC0+ZXhlY3V0YWJsZSgpLCBtX2N1cnJl
bnRJbmRleCwgQ29kZU9yaWdpbjo6aW5saW5lRGVwdGhGb3JDYWxsRnJhbWUoaW5saW5lQ2FsbEZy
YW1lKCkpKTsKLSNlbmRpZgogICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2suZ2V0KCk7Ci0gICAg
QVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMu
aXNFbXB0eSgpIHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXIt
Pm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCldLT5ieXRlY29kZUJlZ2luIDwgbmV4dE9mZnNl
dCk7Ci0gICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3MuYXBw
ZW5kKFVubGlua2VkQmxvY2sobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkpKTsKLSAgICBtX2lubGlu
ZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmFwcGVuZChtX2dyYXBo
Lm1fYmxvY2tzLnNpemUoKSk7Ci0gICAgbV9ncmFwaC5tX2Jsb2Nrcy5hcHBlbmQoYmxvY2sucmVs
ZWFzZSgpKTsKKyAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fYmxvY2tM
aW5raW5nVGFyZ2V0cy5pc0VtcHR5KCkgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1f
YmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCktPmJ5dGVjb2RlQmVnaW4gPCBuZXh0T2Zmc2V0KTsK
KyAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5hcHBlbmQo
VW5saW5rZWRCbG9jayhibG9jay5nZXQoKSkpOworICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2Fs
bGVyLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuYXBwZW5kKGJsb2NrLmdldCgpKTsKKyAgICBtX2dy
YXBoLmFwcGVuZEJsb2NrKGJsb2NrKTsKICAgICBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiAgICAg
CiAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSByZXR1cm4gYW5kIGNvbnRpbnVlIHRvIGdlbmVyYXRl
IGNvZGUgZm9yIHRoZSBjYWxsZXIsIGJ1dApAQCAtMTc1Myw3ICsxNzU2LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIC8vIElmIHdlIGFyZSB0aGUgZmly
c3QgYmFzaWMgYmxvY2ssIGludHJvZHVjZSBtYXJrZXJzIGZvciBhcmd1bWVudHMuIFRoaXMgYWxs
b3dzCiAgICAgLy8gdXMgdG8gdHJhY2sgaWYgYSB1c2Ugb2YgYW4gYXJndW1lbnQgbWF5IHVzZSB0
aGUgYWN0dWFsIGFyZ3VtZW50IHBhc3NlZCwgYXMKICAgICAvLyBvcHBvc2VkIHRvIHVzaW5nIGEg
dmFsdWUgd2Ugc2V0IGV4cGxpY2l0bHkuCi0gICAgaWYgKG1fY3VycmVudEJsb2NrID09IG1fZ3Jh
cGgubV9ibG9ja3NbMF0uZ2V0KCkgJiYgIWlubGluZUNhbGxGcmFtZSgpKSB7CisgICAgaWYgKG1f
Y3VycmVudEJsb2NrID09IG1fZ3JhcGguYmxvY2soMCkgJiYgIWlubGluZUNhbGxGcmFtZSgpKSB7
CiAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHMucmVzaXplKG1fbnVtQXJndW1lbnRzKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVu
dHM7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCkBAIC0yNzY1LDE1ICsyNzY4LDE1IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIFN3aXRjaERh
dGEgZGF0YTsKICAgICAgICAgICAgIGRhdGEua2luZCA9IFN3aXRjaEltbTsKICAgICAgICAgICAg
IGRhdGEuc3dpdGNoVGFibGVJbmRleCA9IG1faW5saW5lU3RhY2tUb3AtPm1fc3dpdGNoUmVtYXBb
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZF07Ci0gICAgICAgICAgICBkYXRhLmZhbGxU
aHJvdWdoID0gbV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OworICAgICAgICAgICAgZGF0YS5zZXRGYWxsVGhyb3VnaEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50
SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIFNp
bXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEu
c3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGFibGUuYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIGlmICgh
dGFibGUuYnJhbmNoT2Zmc2V0c1tpXSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gbV9jdXJyZW50SW5kZXggKyB0YWJsZS5i
cmFuY2hPZmZzZXRzW2ldOwotICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gZGF0YS5mYWxs
VGhyb3VnaCkKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRocm91Z2hC
eXRlY29kZUluZGV4KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UoanNOdW1iZXIodGFibGUubWluICsg
aSksIHRhcmdldCkpOworICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKFN3aXRjaENh
c2U6OndpdGhCeXRlY29kZUluZGV4KGpzTnVtYmVyKHRhYmxlLm1pbiArIGkpLCB0YXJnZXQpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fZ3JhcGgubV9zd2l0Y2hEYXRhLmFwcGVuZChk
YXRhKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJm1fZ3JhcGgubV9z
d2l0Y2hEYXRhLmxhc3QoKSksIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7
CkBAIC0yNzg0LDE2ICsyNzg3LDE2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgIFN3aXRjaERhdGEgZGF0YTsKICAgICAgICAgICAgIGRhdGEu
a2luZCA9IFN3aXRjaENoYXI7CiAgICAgICAgICAgICBkYXRhLnN3aXRjaFRhYmxlSW5kZXggPSBt
X2lubGluZVN0YWNrVG9wLT5tX3N3aXRjaFJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmRdOwotICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaCA9IG1fY3VycmVudEluZGV4ICsg
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGRhdGEuc2V0RmFs
bFRocm91Z2hCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBTaW1wbGVKdW1wVGFibGUmIHRhYmxlID0gbV9j
b2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlLmJyYW5jaE9mZnNldHMuc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoIXRhYmxlLmJyYW5jaE9mZnNldHNbaV0pCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRh
cmdldCA9IG1fY3VycmVudEluZGV4ICsgdGFibGUuYnJhbmNoT2Zmc2V0c1tpXTsKLSAgICAgICAg
ICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRocm91Z2gpCisgICAgICAgICAgICAgICAg
aWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoQnl0ZWNvZGVJbmRleCgpKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZCgK
LSAgICAgICAgICAgICAgICAgICAgU3dpdGNoQ2FzZShMYXp5SlNWYWx1ZTo6c2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKHRhYmxlLm1pbiArIGkpLCB0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICAgICAg
U3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgoTGF6eUpTVmFsdWU6OnNpbmdsZUNoYXJhY3Rl
clN0cmluZyh0YWJsZS5taW4gKyBpKSwgdGFyZ2V0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBtX2dyYXBoLm1fc3dpdGNoRGF0YS5hcHBlbmQoZGF0YSk7CiAgICAgICAgICAgICBhZGRU
b0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZtX2dyYXBoLm1fc3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwpAQCAtMjgwNCwxNiArMjgwNywxNiBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBT
d2l0Y2hEYXRhIGRhdGE7CiAgICAgICAgICAgICBkYXRhLmtpbmQgPSBTd2l0Y2hTdHJpbmc7CiAg
ICAgICAgICAgICBkYXRhLnN3aXRjaFRhYmxlSW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwotICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaCA9IG1fY3VycmVudEluZGV4
ICsgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGRhdGEuc2V0
RmFsbFRocm91Z2hCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUmIHRhYmxlID0g
bV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgp
OwogICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0
b3IgaXRlcjsKICAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6
Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLm9mZnNldFRhYmxlLmVuZCgpOwogICAgICAgICAgICAgZm9y
IChpdGVyID0gdGFibGUub2Zmc2V0VGFibGUuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikg
ewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fY3VycmVudEluZGV4ICsgaXRl
ci0+dmFsdWUuYnJhbmNoT2Zmc2V0OwotICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gZGF0
YS5mYWxsVGhyb3VnaCkKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRo
cm91Z2hCeXRlY29kZUluZGV4KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBTd2l0
Y2hDYXNlKExhenlKU1ZhbHVlOjprbm93blN0cmluZ0ltcGwoaXRlci0+a2V5LmdldCgpKSwgdGFy
Z2V0KSk7CisgICAgICAgICAgICAgICAgICAgIFN3aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4
KExhenlKU1ZhbHVlOjprbm93blN0cmluZ0ltcGwoaXRlci0+a2V5LmdldCgpKSwgdGFyZ2V0KSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2dyYXBoLm1fc3dpdGNoRGF0YS5hcHBlbmQo
ZGF0YSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZtX2dyYXBoLm1f
c3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkp
OwpAQCAtMjgyOCwxOCArMjgzMSwxOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9kaWRSZXR1cm4g
PSB0cnVlOwogICAgICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2Vk
QmxvY2tzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSByZXR1
cm5pbmcgZnJvbSB0aGUgZmlyc3QgYmxvY2ssIHRoZW4gd2UncmUgZG9uZSBwYXJzaW5nLgotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsc2l0ZUJsb2Nr
SGVhZCA9PSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEpOworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsc2l0ZUJsb2NrSGVhZCA9PSBtX2dyYXBo
Lmxhc3RCbG9jaygpKTsKICAgICAgICAgICAgICAgICAgICAgc2hvdWxkQ29udGludWVQYXJzaW5n
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3JldCk7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgaW5saW5pbmcg
Y3JlYXRlZCBibG9ja3MsIGFuZCB3ZSdyZSBkb2luZyBhIHJldHVybiwgdGhlbiB3ZSBuZWVkIHNv
bWUKICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBsaW5raW5nLgotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCku
bV9ibG9ja0luZGV4ID09IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSk7CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3Qo
KS5tX2Jsb2NrID09IG1fZ3JhcGgubGFzdEJsb2NrKCkpOwogICAgICAgICAgICAgICAgICAgICBt
X2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX25lZWRzTm9ybWFsTGlu
a2luZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAobV9j
dXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX3JldCkgIT0gbV9pbmxpbmVTdGFja1RvcC0+
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSB8fCBtX2lubGluZVN0YWNrVG9wLT5t
X2RpZEVhcmx5UmV0dXJuKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRJ
bmRleCArIE9QQ09ERV9MRU5HVEgob3BfcmV0KSA8PSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChKdW1wLCBPcEluZm8oTm9CbG9jaykpOworICAgICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKEp1bXAsIE9wSW5mbygwKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tU
b3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNFYXJseVJldHVybkxpbmtpbmcgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2RpZEVhcmx5UmV0
dXJuID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0zMTYyLDcgKzMxNjUsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgfQogfQogCi12b2lkIEJ5
dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxCbG9ja0lu
ZGV4PiYgcG9zc2libGVUYXJnZXRzKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKEJh
c2ljQmxvY2sqIGJsb2NrLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJsZVRhcmdldHMpCiB7
CiAgICAgQVNTRVJUKCFibG9jay0+aXNMaW5rZWQpOwogICAgIEFTU0VSVCghYmxvY2stPmlzRW1w
dHkoKSk7CkBAIC0zMTcxLDI0ICszMTc0LDI0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtC
bG9jayhCYXNpY0Jsb2MKICAgICAKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICBjYXNl
IEp1bXA6Ci0gICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnRha2VuQnl0ZWNvZGVP
ZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKKyAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9jayhibG9j
a0ZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+dGFrZW5CeXRlY29kZU9m
ZnNldER1cmluZ1BhcnNpbmcoKSkpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAg
ICAgICAgZGF0YUxvZ0YoIkxpbmtlZCBiYXNpYyBibG9jayAlcCB0byAlcCwgIyV1LlxuIiwgYmxv
Y2ssIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS0+dGFrZW5CbG9ja0luZGV4KCldLmdldCgpLCBub2Rl
LT50YWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgIGRhdGFMb2dGKCJMaW5rZWQgYmFzaWMgYmxv
Y2sgJXAgdG8gJXAsICMldS5cbiIsIGJsb2NrLCBub2RlLT50YWtlbkJsb2NrKCksIG5vZGUtPnRh
a2VuQmxvY2soKS0+aW5kZXgpOwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAg
ICBjYXNlIEJyYW5jaDoKLSAgICAgICAgbm9kZS0+c2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGgu
YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+dGFrZW5C
eXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOwotICAgICAgICBub2RlLT5zZXROb3RUYWtl
bkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVU
YXJnZXRzLCBub2RlLT5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7Cisg
ICAgICAgIG5vZGUtPnNldFRha2VuQmxvY2soYmxvY2tGb3JCeXRlY29kZU9mZnNldChwb3NzaWJs
ZVRhcmdldHMsIG5vZGUtPnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKKyAg
ICAgICAgbm9kZS0+c2V0Tm90VGFrZW5CbG9jayhibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KHBvc3Np
YmxlVGFyZ2V0cywgbm9kZS0+bm90VGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkp
OwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIkxpbmtl
ZCBiYXNpYyBibG9jayAlcCB0byAlcCwgIyV1IGFuZCAlcCwgIyV1LlxuIiwgYmxvY2ssIG1fZ3Jh
cGgubV9ibG9ja3Nbbm9kZS0+dGFrZW5CbG9ja0luZGV4KCldLmdldCgpLCBub2RlLT50YWtlbkJs
b2NrSW5kZXgoKSwgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKV0u
Z2V0KCksIG5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkxp
bmtlZCBiYXNpYyBibG9jayAlcCB0byAlcCwgIyV1IGFuZCAlcCwgIyV1LlxuIiwgYmxvY2ssIG5v
ZGUtPnRha2VuQmxvY2soKSwgbm9kZS0+dGFrZW5CbG9jaygpLT5pbmRleCwgbm9kZS0+bm90VGFr
ZW5CbG9jaygpLCBub2RlLT5ub3RUYWtlbkJsb2NrKCktPmluZGV4KTsKICNlbmRpZgogICAgICAg
ICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBTd2l0Y2g6CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG5vZGUtPnN3aXRjaERhdGEoKS0+Y2FzZXMuc2l6ZSgpOyBpLS07KQotICAgICAgICAg
ICAgbm9kZS0+c3dpdGNoRGF0YSgpLT5jYXNlc1tpXS50YXJnZXQgPSBtX2dyYXBoLmJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUtPnN3aXRjaERhdGEoKS0+
Y2FzZXNbaV0udGFyZ2V0KTsKLSAgICAgICAgbm9kZS0+c3dpdGNoRGF0YSgpLT5mYWxsVGhyb3Vn
aCA9IG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywg
bm9kZS0+c3dpdGNoRGF0YSgpLT5mYWxsVGhyb3VnaCk7CisgICAgICAgICAgICBub2RlLT5zd2l0
Y2hEYXRhKCktPmNhc2VzW2ldLnRhcmdldCA9IGJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQocG9zc2li
bGVUYXJnZXRzLCBub2RlLT5zd2l0Y2hEYXRhKCktPmNhc2VzW2ldLnRhcmdldEJ5dGVjb2RlSW5k
ZXgoKSk7CisgICAgICAgIG5vZGUtPnN3aXRjaERhdGEoKS0+ZmFsbFRocm91Z2ggPSBibG9ja0Zv
ckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS0+c3dpdGNoRGF0YSgpLT5mYWxs
VGhyb3VnaEJ5dGVjb2RlSW5kZXgoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBk
ZWZhdWx0OgpAQCAtMzIwMywxMSArMzIwNiwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5r
QmxvY2soQmFzaWNCbG9jCiAjZW5kaWYKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Js
b2NrcyhWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHVubGlua2VkQmxvY2tzLCBWZWN0b3I8QmxvY2tJ
bmRleD4mIHBvc3NpYmxlVGFyZ2V0cykKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9ja3Mo
VmVjdG9yPFVubGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJhc2ljQmxvY2sq
PiYgcG9zc2libGVUYXJnZXRzKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdW5saW5r
ZWRCbG9ja3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKHVubGlua2VkQmxvY2tzW2ldLm1f
bmVlZHNOb3JtYWxMaW5raW5nKSB7Ci0gICAgICAgICAgICBsaW5rQmxvY2sobV9ncmFwaC5tX2Js
b2Nrc1t1bmxpbmtlZEJsb2Nrc1tpXS5tX2Jsb2NrSW5kZXhdLmdldCgpLCBwb3NzaWJsZVRhcmdl
dHMpOworICAgICAgICAgICAgbGlua0Jsb2NrKHVubGlua2VkQmxvY2tzW2ldLm1fYmxvY2ssIHBv
c3NpYmxlVGFyZ2V0cyk7CiAgICAgICAgICAgICB1bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzTm9y
bWFsTGlua2luZyA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMzIzNSw3ICszMjM4LDcg
QEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgIEJ5dGVDb2Rl
UGFyc2VyKiBieXRlQ29kZVBhcnNlciwKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywKICAgICBD
b2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssCi0gICAgQmxvY2tJbmRleCBjYWxsc2l0ZUJsb2NrSGVh
ZCwKKyAgICBCYXNpY0Jsb2NrKiBjYWxsc2l0ZUJsb2NrSGVhZCwKICAgICBKU0Z1bmN0aW9uKiBj
YWxsZWUsIC8vIE51bGwgaWYgdGhpcyBpcyBhIGNsb3N1cmUgY2FsbC4KICAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmV0dXJuVmFsdWVWUiwKICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5saW5lQ2FsbEZyYW1l
U3RhcnQsCkBAIC0zMjczLDcgKzMyNzYsNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tF
bnRyeTo6SW5saW5lCiAgICAgICAgIC8vIElubGluZSBjYXNlLgogICAgICAgICBBU1NFUlQoY29k
ZUJsb2NrICE9IGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jayk7CiAgICAgICAgIEFTU0VSVChp
bmxpbmVDYWxsRnJhbWVTdGFydCAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAg
QVNTRVJUKGNhbGxzaXRlQmxvY2tIZWFkICE9IE5vQmxvY2spOworICAgICAgICBBU1NFUlQoY2Fs
bHNpdGVCbG9ja0hlYWQpOwogICAgICAgICAKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lIGlubGlu
ZUNhbGxGcmFtZTsKICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmV4ZWN1dGFibGUuc2V0KCpieXRl
Q29kZVBhcnNlci0+bV92bSwgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7CkBAIC0zMzY4LDcgKzMzNzEs
NyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgIEFT
U0VSVCghY2FsbGVlKTsKICAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlVlIgPT0gSW52YWxpZFZp
cnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWVTdGFydCA9PSBJ
bnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgQVNTRVJUKGNhbGxzaXRlQmxvY2tIZWFk
ID09IE5vQmxvY2spOworICAgICAgICBBU1NFUlQoIWNhbGxzaXRlQmxvY2tIZWFkKTsKIAogICAg
ICAgICBtX2lubGluZUNhbGxGcmFtZSA9IDA7CiAKQEAgLTM0NDYsMjcgKzM0NDksMjcgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgICAgICBkbyB7CiAgICAgICAg
ICAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYg
d2UgY2FuIHVzZSB0aGUgbGFzdCBibG9jay4KLSAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgu
bV9ibG9ja3MuaXNFbXB0eSgpICYmIG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLT5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5udW1CbG9ja3MoKSAmJiBtX2dyYXBoLmxh
c3RCbG9jaygpLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtdXN0
IGJlIGEgYmxvY2sgYmVsb25naW5nIHRvIHVzLgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4ID09
IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrID09IG1f
Z3JhcGgubGFzdEJsb2NrKCkpOwogICAgICAgICAgICAgICAgICAgICAvLyBFaXRoZXIgdGhlIGJs
b2NrIGlzIGxpbmthYmxlIG9yIGl0IGlzbid0LiBJZiBpdCdzIGxpbmthYmxlIHRoZW4gaXQncyB0
aGUgbGFzdAogICAgICAgICAgICAgICAgICAgICAvLyBibG9jayBpbiB0aGUgYmxvY2tMaW5raW5n
VGFyZ2V0cyBsaXN0LiBJZiBpdCdzIG5vdCB0aGVuIHRoZSBsYXN0IGJsb2NrIHdpbGwKICAgICAg
ICAgICAgICAgICAgICAgLy8gaGF2ZSBhIGxvd2VyIGJ5dGVjb2RlIGluZGV4IHRoYXQgdGhlIG9u
ZSB3ZSdyZSBhYm91dCB0byBnaXZlIHRvIHRoaXMgYmxvY2suCi0gICAgICAgICAgICAgICAgICAg
IGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuaXNFbXB0eSgpIHx8
IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRz
Lmxhc3QoKV0tPmJ5dGVjb2RlQmVnaW4gIT0gbV9jdXJyZW50SW5kZXgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5pc0Vt
cHR5KCkgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmxhc3QoKS0+
Ynl0ZWNvZGVCZWdpbiAhPSBtX2N1cnJlbnRJbmRleCkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTWFrZSB0aGUgYmxvY2sgbGlua2FibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmlzRW1wdHkoKSB8
fCBtX2dyYXBoLm1fYmxvY2tzW21faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0
cy5sYXN0KCldLT5ieXRlY29kZUJlZ2luIDwgbV9jdXJyZW50SW5kZXgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmFwcGVu
ZChtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEpOworICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5pc0VtcHR5KCkg
fHwgbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmxhc3QoKS0+Ynl0ZWNv
ZGVCZWdpbiA8IG1fY3VycmVudEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5hcHBlbmQobV9ncmFwaC5sYXN0Qmxv
Y2soKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgLy8gQ2hh
bmdlIGl0cyBieXRlY29kZSBiZWdpbiBhbmQgY29udGludWUuCi0gICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrcy5sYXN0KCkuZ2V0KCk7CisgICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC5sYXN0QmxvY2soKTsKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJS
ZWFzY3JpYmluZyBieXRlY29kZSBpbmRleCBvZiBibG9jayAlcCBmcm9tIGJjIyV1IHRvIGJjIyV1
IChwZWVwaG9sZSBjYXNlKS5cbiIsIG1fY3VycmVudEJsb2NrLCBtX2N1cnJlbnRCbG9jay0+Ynl0
ZWNvZGVCZWdpbiwgbV9jdXJyZW50SW5kZXgpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5ieXRlY29kZUJlZ2luID0gbV9jdXJyZW50SW5kZXg7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgT3duUHRyPEJhc2ljQmxvY2s+
IGJsb2NrID0gYWRvcHRQdHIobmV3IEJhc2ljQmxvY2sobV9jdXJyZW50SW5kZXgsIG1fbnVtQXJn
dW1lbnRzLCBtX251bUxvY2FscykpOworICAgICAgICAgICAgICAgICAgICBSZWZQdHI8QmFzaWNC
bG9jaz4gYmxvY2sgPSBhZG9wdFJlZihuZXcgQmFzaWNCbG9jayhtX2N1cnJlbnRJbmRleCwgbV9u
dW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzKSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NF
KQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ3JlYXRpbmcgYmFzaWMgYmxvY2sgJXAs
ICMlenUgZm9yICVwIGJjIyV1IGF0IGlubGluZSBkZXB0aCAldS5cbiIsIGJsb2NrLmdldCgpLCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKSwgbV9pbmxpbmVTdGFja1RvcC0+ZXhlY3V0YWJsZSgpLCBt
X2N1cnJlbnRJbmRleCwgQ29kZU9yaWdpbjo6aW5saW5lRGVwdGhGb3JDYWxsRnJhbWUoaW5saW5l
Q2FsbEZyYW1lKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNyZWF0aW5nIGJh
c2ljIGJsb2NrICVwLCAjJXp1IGZvciAlcCBiYyMldSBhdCBpbmxpbmUgZGVwdGggJXUuXG4iLCBi
bG9jay5nZXQoKSwgbV9ncmFwaC5udW1CbG9ja3MoKSwgbV9pbmxpbmVTdGFja1RvcC0+ZXhlY3V0
YWJsZSgpLCBtX2N1cnJlbnRJbmRleCwgQ29kZU9yaWdpbjo6aW5saW5lRGVwdGhGb3JDYWxsRnJh
bWUoaW5saW5lQ2FsbEZyYW1lKCkpKTsKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jayA9IGJsb2NrLmdldCgpOwogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGFz
c2VydGlvbiBjaGVja3MgdHdvIHRoaW5nczoKQEAgLTM0NzUsMTMgKzM0NzgsMTMgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgICAgICAgICAgICAgICAgICAvLyAy
KSBJZiB0aGUgYnl0ZWNvZGVCZWdpbiBpcyBlcXVhbCB0byB0aGUgY3VycmVudEluZGV4LCB0aGVu
IHdlIGZhaWxlZCB0byBkbwogICAgICAgICAgICAgICAgICAgICAvLyAgICBhIHBlZXBob2xlIGNv
YWxlc2Npbmcgb2YgdGhpcyBibG9jayBpbiB0aGUgaWYgc3RhdGVtZW50IGFib3ZlLiBTbywgd2Un
cmUKICAgICAgICAgICAgICAgICAgICAgLy8gICAgZ2VuZXJhdGluZyBzdWJvcHRpbWFsIGNvZGUg
YW5kIGxlYXZpbmcgbW9yZSB3b3JrIGZvciB0aGUgQ0ZHIHNpbXBsaWZpZXIuCi0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmlzRW1w
dHkoKSB8fCBtX2dyYXBoLm1fYmxvY2tzW21faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9j
a3MubGFzdCgpLm1fYmxvY2tJbmRleF0tPmJ5dGVjb2RlQmVnaW4gPCBtX2N1cnJlbnRJbmRleCk7
Ci0gICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3Mu
YXBwZW5kKFVubGlua2VkQmxvY2sobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmFwcGVu
ZChtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCht
X2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSB8fCBtX2lubGluZVN0
YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrLT5ieXRlY29kZUJlZ2luIDwg
bV9jdXJyZW50SW5kZXgpOworICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5t
X3VubGlua2VkQmxvY2tzLmFwcGVuZChVbmxpbmtlZEJsb2NrKGJsb2NrLmdldCgpKSk7CisgICAg
ICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5h
cHBlbmQoYmxvY2suZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZmlyc3QgYmxv
Y2sgaXMgZGVmaW5pdGVseSBhbiBPU1IgdGFyZ2V0LgotICAgICAgICAgICAgICAgICAgICBpZiAo
IW1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3Jh
cGgubnVtQmxvY2tzKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+aXNPU1JUYXJn
ZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzLmFwcGVuZChi
bG9jay5yZWxlYXNlKCkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFwcGVuZEJsb2Nr
KGJsb2NrKTsKICAgICAgICAgICAgICAgICAgICAgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTM1MjAsNyArMzUyMyw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICNlbmRpZgogICAgIAogICAgIElubGluZVN0YWNrRW50
cnkgaW5saW5lU3RhY2tFbnRyeSgKLSAgICAgICAgdGhpcywgbV9jb2RlQmxvY2ssIG1fcHJvZmls
ZWRCbG9jaywgTm9CbG9jaywgMCwgSW52YWxpZFZpcnR1YWxSZWdpc3RlciwgSW52YWxpZFZpcnR1
YWxSZWdpc3RlciwKKyAgICAgICAgdGhpcywgbV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRCbG9jaywg
MCwgMCwgSW52YWxpZFZpcnR1YWxSZWdpc3RlciwgSW52YWxpZFZpcnR1YWxSZWdpc3RlciwKICAg
ICAgICAgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgQ29kZUZvckNhbGwpOwogICAgIAog
ICAgIHBhcnNlQ29kZUJsb2NrKCk7CkBAIC0zNTQwLDExICszNTQzLDExIEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlKCkKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsK
KyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwog
ICAgICAgICBBU1NFUlQoYmxvY2spOwogICAgICAgICBpZiAoIWJsb2NrLT5pc1JlYWNoYWJsZSkg
ewotICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5jbGVhcigpOworICAg
ICAgICAgICAgbV9ncmFwaC5raWxsQmxvY2soYmxvY2spOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NGQVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NGQVBoYXNlLmNwcAkocmV2aXNpb24gMTUyNDA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDRkFQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDE1ICs3OSwxNCBAQCBw
dWJsaWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICB2b2lkIHBlcmZvcm1CbG9ja0NGQShC
bG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgdm9pZCBwZXJmb3JtQmxvY2tDRkEoQmFzaWNCbG9j
ayogYmxvY2spCiAgICAgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CiAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGlmICghYmxvY2stPmNmYVNob3VsZFJldmlzaXQpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZ0Yo
IiAgIEJsb2NrICMldSAoYmMjJXUpOlxuIiwgYmxvY2tJbmRleCwgYmxvY2stPmJ5dGVjb2RlQmVn
aW4pOworICAgICAgICAgICAgZGF0YUxvZygiICAgQmxvY2sgIiwgKmJsb2NrLCAiOlxuIik7CiAg
ICAgICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKGJsb2NrKTsKICAgICAgICAgaWYgKHZlcmJv
c2UpIHsKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICBoZWFkIHZhcnM6ICIpOwpAQCAtMTI3
LDggKzEyNiw4IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ZGF0YUxvZ0YoIkNGQSBbJXVdXG4iLCArK21fY291bnQpOwogICAgICAgICAKLSAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrID0gMDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsg
KytibG9jaykKLSAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NGQShibG9jayk7CisgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7ICsrYmxvY2tJbmRleCkKKyAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NGQShtX2dyYXBo
LmJsb2NrKGJsb2NrSW5kZXgpKTsKICAgICB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDE1MjQwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZH
U2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDggQEAg
cHVibGljOgogICAgICAgICAKICAgICAgICAgZG8gewogICAgICAgICAgICAgaW5uZXJDaGFuZ2Vk
ID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAg
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5k
ZXhdLmdldCgpOworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwog
ICAgICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwpAQCAtNjMsMjcg
KzYzLDI0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGJsb2NrLT5sYXN0KCkt
Pm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEp1bXA6IHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gU3VjY2Vzc29yIHdpdGggb25lIHByZWRlY2Vzc29yIC0+IG1lcmdlLgotICAgICAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywg
MCldLT5tX3ByZWRlY2Vzc29ycy5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKG1fZ3JhcGgubV9ibG9ja3NbbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIDApXS0+
bV9wcmVkZWNlc3NvcnNbMF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBibG9j
a0luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5zdWNjZXNzb3IoMCktPnBy
ZWRlY2Vzc29ycy5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGJsb2NrLT5zdWNjZXNzb3IoMCktPnByZWRlY2Vzc29yc1swXSA9PSBibG9jayk7CiAjaWYgREZH
X0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIkNGR1NpbXBsaWZ5OiBKdW1wIG1lcmdlIG9uIEJsb2NrICMldSB0byBCbG9j
ayAjJXUuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja0luZGV4LCBt
X2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZygiQ0ZHU2ltcGxpZnk6IEp1bXAgbWVyZ2Ugb24gQmxvY2sgIiwgKmJsb2NrLCAiIHRvIEJs
b2NrICIsICpibG9jay0+c3VjY2Vzc29yKDApLCAiLlxuIik7CiAjZW5kaWYKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChleHRyZW1lTG9nZ2luZykKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGV0
aHJlYWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlQmxvY2tzKGJsb2NrSW5kZXgs
IG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAwKSwgbm9CbG9ja3MoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9jaywgYmxvY2stPnN1Y2Nlc3NvcigwKSwgbm9CbG9j
a3MoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckNoYW5nZWQgPSBvdXRlckNoYW5n
ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIk5vdCBqdW1wIG1lcmdpbmcgb24g
QmxvY2sgIyV1IHRvIEJsb2NrICMldSBiZWNhdXNlIHByZWRlY2Vzc29ycyA9ICIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIG1fZ3JhcGguc3VjY2Vzc29yKGJs
b2NrLCAwKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCldLT5tX3ByZWRl
Y2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
Q0ZHU2ltcGxpZnk6IE5vdCBqdW1wIG1lcmdpbmcgb24gQmxvY2sgIiwgKmJsb2NrLCAiIHRvIEJs
b2NrICIsICpibG9jay0+c3VjY2Vzc29yKDApLCAiIGJlY2F1c2UgcHJlZGVjZXNzb3JzID0gIiwp
OworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2Nr
LT5zdWNjZXNzb3IoMCktPnByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nRigiLCAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiIyV1
IiwgbV9ncmFwaC5tX2Jsb2Nrc1ttX2dyYXBoLnN1Y2Nlc3NvcihibG9jaywgMCldLT5tX3ByZWRl
Y2Vzc29yc1tpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygqYmxvY2st
PnN1Y2Nlc3NvcigwKS0+cHJlZGVjZXNzb3JzW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIuXG4iKTsKICNlbmRpZgpAQCAt
MTAzLDUyICsxMDAsNDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBCcmFuY2gg
b24gY29uc3RhbnQgLT4gamV0dGlzb24gdGhlIG5vdC10YWtlbiBibG9jayBhbmQgbWVyZ2UuCiAg
ICAgICAgICAgICAgICAgICAgIGlmIChpc0tub3duRGlyZWN0aW9uKGJsb2NrLT5jZmFCcmFuY2hE
aXJlY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbmRpdGlvbiA9IGJy
YW5jaENvbmRpdGlvbihibG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1sKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihi
bG9jaywgY29uZGl0aW9uKV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFy
Z2V0QmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jayA9IGJsb2NrLT5zdWNjZXNzb3JGb3JDb25k
aXRpb24oY29uZGl0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGpl
dHRpc29uZWRCbG9jayA9IGJsb2NrLT5zdWNjZXNzb3JGb3JDb25kaXRpb24oIWNvbmRpdGlvbik7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0QmxvY2stPnByZWRlY2Vzc29ycy5z
aXplKCkgPT0gMSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ0ZHU2ltcGxpZnk6IEtub3du
IGNvbmRpdGlvbiAoJXMpIGJyYW5jaCBtZXJnZSBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1LCBq
ZXR0aXNvbmluZyBCbG9jayAjJXUuXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uZGl0aW9uID8gInRydWUiIDogImZhbHNlIiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJsb2NrSW5kZXgsIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29uZGl0aW9u
KGJsb2NrLCBjb25kaXRpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5zdWNjZXNzb3JGb3JDb25kaXRpb24oYmxvY2ssICFjb25kaXRpb24pKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiQ0ZHU2ltcGxpZnk6IEtub3duIGNvbmRpdGlvbiAoIiwgY29uZGl0aW9uLCAiKSBi
cmFuY2ggbWVyZ2UgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIEJsb2Nr
ICIsICpibG9jaywgIiB0byBCbG9jayAiLCAqdGFyZ2V0QmxvY2ssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIsIGpldHRpc29uaW5nIEJsb2NrICIsICpqZXR0aXNvbmVkQmxvY2ss
ICIuXG4iKTsKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHRyZW1l
TG9nZ2luZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1lcmdlQmxvY2tzKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBibG9ja0luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgY29uZGl0aW9uKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb25lQmxvY2sobV9ncmFwaC5zdWNjZXNzb3JGb3JDb25k
aXRpb24oYmxvY2ssICFjb25kaXRpb24pKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWVyZ2VCbG9ja3MoYmxvY2ssIHRhcmdldEJsb2NrLCBvbmVCbG9jayhqZXR0aXNvbmVkQmxvY2sp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAjaWYgREZHX0VOQUJMRShERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2dGKCJDRkdTaW1wbGlmeTogS25vd24gY29uZGl0aW9uICglcykgYnJhbmNoLT5qdW1wIGNvbnZl
cnNpb24gb24gQmxvY2sgIyV1IHRvIEJsb2NrICMldSwgamV0dGlzb25pbmcgQmxvY2sgIyV1Llxu
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA/ICJ0cnVl
IiA6ICJmYWxzZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja0lu
ZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvckZvckNvbmRpdGlvbihibG9jaywgY29uZGl0aW9uKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguc3VjY2Vzc29yRm9yQ29u
ZGl0aW9uKGJsb2NrLCAhY29uZGl0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNGR1NpbXBsaWZ5OiBL
bm93biBjb25kaXRpb24gKCIsIGNvbmRpdGlvbiwgIikgIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImJyYW5jaC0+anVtcCBjb252ZXJzaW9uIG9uIEJsb2NrICIsICpibG9jaywg
IiB0byBCbG9jayAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCbG9j
aywgIiwgamV0dGlzb25pbmcgQmxvY2sgIiwgamV0dGlzb25lZEJsb2NrLCAiLlxuIik7CiAjZW5k
aWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmVtZUxvZ2dpbmcpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCbG9ja0luZGV4IHRha2VuQmxvY2tJbmRleCA9IG1fZ3JhcGguc3VjY2Vzc29yRm9y
Q29uZGl0aW9uKGJsb2NrLCBjb25kaXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJsb2NrSW5kZXggbm90VGFrZW5CbG9ja0luZGV4ID0gbV9ncmFwaC5zdWNjZXNzb3JGb3JDb25k
aXRpb24oYmxvY2ssICFjb25kaXRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5sYXN0KCktPmlzVGVybWluYWwo
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBib3VuZGFyeUNvZGVP
cmlnaW4gPSBibG9jay0+bGFzdCgpLT5jb2RlT3JpZ2luOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJsb2NrLT5sYXN0KCktPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmxhc3QoKS0+cmVmQ291bnQoKSA9PSAxKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpldHRp
c29uQmxvY2soYmxvY2tJbmRleCwgbm90VGFrZW5CbG9ja0luZGV4LCBib3VuZGFyeUNvZGVPcmln
aW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpldHRpc29uQmxvY2soYmxvY2ssIGpl
dHRpc29uZWRCbG9jaywgYm91bmRhcnlDb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYm91
bmRhcnlDb2RlT3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
dGFrZW5CbG9ja0luZGV4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byh0YXJnZXRCbG9jaykpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5uZXJDaGFuZ2VkID0gb3V0ZXJDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5zdWNjZXNzb3IoYmxv
Y2ssIDApID09IG1fZ3JhcGguc3VjY2Vzc29yKGJsb2NrLCAxKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udmVydFRvSnVtcChibG9ja0luZGV4LCBtX2dyYXBoLnN1Y2Nlc3NvcihibG9j
aywgMCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPnN1Y2Nlc3NvcigwKSA9PSBi
bG9jay0+c3VjY2Vzc29yKDEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9K
dW1wKGJsb2NrLCBibG9jay0+c3VjY2Vzc29yKDApKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTc3LDcgKzE2OSw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGNhc2VzIG90aGVy
IHRoYW4gZGVmYXVsdCB0aGVuIHRoaXMgdHVybnMKICAgICAgICAgICAgICAgICAgICAgLy8gaW50
byBhIGp1bXAuCiAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5jYXNlcy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0p1bXAoYmxvY2tJbmRleCwgZGF0
YS0+ZmFsbFRocm91Z2gpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvSnVtcChi
bG9jaywgZGF0YS0+ZmFsbFRocm91Z2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJD
aGFuZ2VkID0gb3V0ZXJDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xODYsNDcgKzE3OCw0NCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+bGFzdCgpLT5jaGlsZDEoKS0+aGFzQ29u
c3RhbnQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3Jh
cGgudmFsdWVPZkpTQ29uc3RhbnQoYmxvY2stPmxhc3QoKS0+Y2hpbGQxKCkubm9kZSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIFRyaVN0YXRlIGZvdW5kID0gRmFsc2VUcmlTdGF0ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdGFyZ2V0QmxvY2tJbmRleCA9IE5vQmxv
Y2s7CisgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jayA9IDA7
CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5jYXNlcy5z
aXplKCk7IGZvdW5kID09IEZhbHNlVHJpU3RhdGUgJiYgaS0tOykgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvdW5kID0gZGF0YS0+Y2FzZXNbaV0udmFsdWUuc3RyaWN0RXF1YWwodmFs
dWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCA9PSBUcnVlVHJpU3Rh
dGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEJsb2NrSW5kZXggPSBk
YXRhLT5jYXNlc1tpXS50YXJnZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRh
cmdldEJsb2NrID0gZGF0YS0+Y2FzZXNbaV0udGFyZ2V0OwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZm91bmQgPT0gTWl4ZWRUcmlTdGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCA9PSBGYWxzZVRyaVN0YXRl
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEJsb2NrSW5kZXggPSBkYXRhLT5m
YWxsVGhyb3VnaDsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh0YXJnZXRCbG9ja0lu
ZGV4ICE9IE5vQmxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEJsb2Nr
ID0gZGF0YS0+ZmFsbFRocm91Z2g7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodGFy
Z2V0QmxvY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8QmxvY2tJbmRleCwgMT4gamV0dGlzb25lZEJsb2NrczsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubnVtU3VjY2Vzc29ycyhibG9j
ayk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IGpldHRp
c29uZWRCbG9ja0luZGV4ID0gbV9ncmFwaC5zdWNjZXNzb3IoYmxvY2ssIGkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChqZXR0aXNvbmVkQmxvY2tJbmRleCAhPSB0YXJnZXRCbG9j
a0luZGV4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbmVkQmxvY2tz
LmFwcGVuZChqZXR0aXNvbmVkQmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBW
ZWN0b3I8QmFzaWNCbG9jayosIDE+IGpldHRpc29uZWRCbG9ja3M7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2Nr
ID0gYmxvY2stPnN1Y2Nlc3NvcihpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
amV0dGlzb25lZEJsb2NrICE9IHRhcmdldEJsb2NrKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqZXR0aXNvbmVkQmxvY2tzLmFwcGVuZChqZXR0aXNvbmVkQmxvY2spOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
dGFyZ2V0QmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRCbG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgp
ID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRCbG9jay0+cHJlZGVj
ZXNzb3JzLnNpemUoKSA9PSAxKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJDRkdTaW1wbGlmeTogS25vd24gY29uc3RhbnQgKCIsIHZh
bHVlLCAiKSBzd2l0Y2ggbWVyZ2Ugb24gIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIkJsb2NrICMiLCBibG9ja0luZGV4LCAiIHRvIEJsb2NrICMiLCB0YXJnZXRCbG9ja0luZGV4
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLlxuIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJCbG9jayAiLCAqYmxvY2ssICIgdG8gQmxvY2sgIiwgKnRhcmdl
dEJsb2NrLCAiLlxuIik7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmVtZUxvZ2dpbmcpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9ja0luZGV4LCB0
YXJnZXRCbG9ja0luZGV4LCBqZXR0aXNvbmVkQmxvY2tzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtZXJnZUJsb2NrcyhibG9jaywgdGFyZ2V0QmxvY2ssIGpldHRpc29uZWRCbG9ja3Mp
OwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNGR1NpbXBsaWZ5OiBLbm93biBj
b25zdGFudCAoIiwgdmFsdWUsICIpIHN3aXRjaC0+anVtcCAiCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJjb252ZXJzaW9uIG9uIEJsb2NrICMiLCBibG9ja0luZGV4LCAiIHRvIEJs
b2NrICMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCbG9ja0luZGV4
LCAiLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb252ZXJzaW9uIG9u
IEJsb2NrICIsICpibG9jaywgIiB0byBCbG9jayAjIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKnRhcmdldEJsb2NrLCAiLlxuIik7CiAjZW5kaWYKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZXh0cmVtZUxvZ2dpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguZHVtcCgpOwpAQCAtMjM1LDkgKzIyNCw5IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbiA9IGJs
b2NrLT5sYXN0KCktPmNvZGVPcmlnaW47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPmxhc3QoKS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGpldHRpc29uZWRCbG9ja3Muc2l6ZSgpOyBpLS07KQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2NrKGJsb2NrSW5kZXgsIGpl
dHRpc29uZWRCbG9ja3NbaV0sIGJvdW5kYXJ5Q29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpldHRpc29uQmxvY2soYmxvY2ssIGpldHRpc29uZWRCbG9ja3NbaV0s
IGJvdW5kYXJ5Q29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2st
PmFwcGVuZE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNw
ZWNOb25lLCBKdW1wLCBib3VuZGFyeUNvZGVPcmlnaW4sIE9wSW5mbyh0YXJnZXRCbG9ja0luZGV4
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBK
dW1wLCBib3VuZGFyeUNvZGVPcmlnaW4sIE9wSW5mbyh0YXJnZXRCbG9jaykpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJDaGFuZ2VkID0g
b3V0ZXJDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MjgzLDE0ICsyNzIsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIG1fZ3JhcGguaW52YWxp
ZGF0ZUNGRygpOwogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVzZXRSZWFjaGFiaWxpdHkoKTsK
IAotICAgICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJ
bmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5k
ZXhdLmdldCgpOworICAgICAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAg
ICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJ
bmRleCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5pc1JlYWNo
YWJsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAga2lsbFVucmVhY2hhYmxlKGJsb2NrSW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICBraWxsVW5yZWFjaGFibGUoYmxvY2spOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzAyLDI1ICsyOTEsMjMgQEAg
cHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGNvbnZlcnRUb0p1bXAoQmxvY2tJ
bmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHRhcmdldEJsb2NrSW5kZXgpCisgICAgdm9pZCBj
b252ZXJ0VG9KdW1wKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jaykK
ICAgICB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKLSAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW3RhcmdldEJsb2NrSW5kZXhdLmdldCgpOwogICAgICAgICBBU1NFUlQodGFyZ2V0
QmxvY2spOwogICAgICAgICBBU1NFUlQodGFyZ2V0QmxvY2stPmlzUmVhY2hhYmxlKTsKLSAgICAg
ICAgaWYgKHRhcmdldEJsb2NrLT5tX3ByZWRlY2Vzc29ycy5zaXplKCkgPT0gMSkgeworICAgICAg
ICBpZiAodGFyZ2V0QmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCkgPT0gMSkgewogI2lmIERGR19F
TkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2dGKAot
ICAgICAgICAgICAgICAgICJDRkdTaW1wbGlmeTogQnJhbmNoL1N3aXRjaCB0byBzYW1lIHN1Y2Nl
c3NvciBtZXJnZSBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1LlxuIiwKLSAgICAgICAgICAgICAg
ICBibG9ja0luZGV4LCB0YXJnZXRCbG9ja0luZGV4KTsKKyAgICAgICAgICAgIGRhdGFMb2coCisg
ICAgICAgICAgICAgICAgIkNGR1NpbXBsaWZ5OiBCcmFuY2gvU3dpdGNoIHRvIHNhbWUgc3VjY2Vz
c29yIG1lcmdlIG9uIEJsb2NrICIsICpibG9jaywKKyAgICAgICAgICAgICAgICAiIHRvIEJsb2Nr
ICIsICp0YXJnZXRCbG9jaywgIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICBtX2dyYXBoLmRl
dGhyZWFkKCk7Ci0gICAgICAgICAgICBtZXJnZUJsb2NrcyhibG9ja0luZGV4LCB0YXJnZXRCbG9j
a0luZGV4LCBub0Jsb2NrcygpKTsKKyAgICAgICAgICAgIG1lcmdlQmxvY2tzKGJsb2NrLCB0YXJn
ZXRCbG9jaywgbm9CbG9ja3MoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZ0YoCi0gICAgICAg
ICAgICAgICAgIkNGR1NpbXBsaWZ5OiBCcmFuY2gtPmp1bXAgY29udmVyc2lvbiB0byBzYW1lIHN1
Y2Nlc3NvciBvbiBCbG9jayAjJXUgdG8gQmxvY2sgIyV1LlxuIiwKLSAgICAgICAgICAgICAgICBi
bG9ja0luZGV4LCB0YXJnZXRCbG9ja0luZGV4KTsKKyAgICAgICAgICAgIGRhdGFMb2coCisgICAg
ICAgICAgICAgICAgIkNGR1NpbXBsaWZ5OiBCcmFuY2gtPmp1bXAgY29udmVyc2lvbiB0byBzYW1l
IHN1Y2Nlc3NvciBvbiBCbG9jayAiLAorICAgICAgICAgICAgICAgICpibG9jaywgIiB0byBCbG9j
ayAiLCAqdGFyZ2V0QmxvY2ssICIuXG4iLAogI2VuZGlmCiAgICAgICAgICAgICBOb2RlKiBicmFu
Y2ggPSBibG9jay0+bGFzdCgpOwogICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC0+aXNUZXJtaW5h
bCgpKTsKQEAgLTMzMCwxNCArMzE3LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNO
b25lLCBKdW1wLCBicmFuY2gtPmNvZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAgT3BJbmZvKHRh
cmdldEJsb2NrSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBPcEluZm8odGFyZ2V0QmxvY2spKTsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQga2lsbFVucmVhY2hhYmxlKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCkKKyAgICB2b2lkIGtpbGxVbnJlYWNoYWJsZShCYXNpY0Jsb2NrKiBibG9jaykK
ICAgICB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKLSAgICAgICAgCiAgICAgICAgIEFTU0VSVChibG9jayk7CiAgICAgICAg
IEFTU0VSVCghYmxvY2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgCkBAIC0zNDYsNyArMzMxLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6
ZSgpOyBub2RlSW5kZXgtLTspCiAgICAgICAgICAgICBtX2dyYXBoLm1fYWxsb2NhdG9yLmZyZWUo
YmxvY2stPmF0KG5vZGVJbmRleCkpOwogICAgICAgICAKLSAgICAgICAgbV9ncmFwaC5tX2Jsb2Nr
c1tibG9ja0luZGV4XS5jbGVhcigpOworICAgICAgICBtX2dyYXBoLmtpbGxCbG9jayhibG9jayk7
CiAgICAgfQogICAgIAogICAgIHZvaWQga2VlcE9wZXJhbmRBbGl2ZShCYXNpY0Jsb2NrKiBibG9j
aywgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGlu
dCBvcGVyYW5kKQpAQCAtMzYxLDQ5ICszNDYsNDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE9w
SW5mbyhsaXZlbmVzc05vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSk7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgamV0dGlzb25CbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXgg
amV0dGlzb25lZEJsb2NrSW5kZXgsIENvZGVPcmlnaW4gYm91bmRhcnlDb2RlT3JpZ2luKQorICAg
IHZvaWQgamV0dGlzb25CbG9jayhCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogamV0dGlz
b25lZEJsb2NrLCBDb2RlT3JpZ2luIGJvdW5kYXJ5Q29kZU9yaWdpbikKICAgICB7Ci0gICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
LSAgICAgICAgQmFzaWNCbG9jayogamV0dGlzb25lZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tq
ZXR0aXNvbmVkQmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIAogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGpldHRpc29uZWRCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJn
dW1lbnRzKCk7ICsraSkKICAgICAgICAgICAgIGtlZXBPcGVyYW5kQWxpdmUoYmxvY2ssIGpldHRp
c29uZWRCbG9jaywgYm91bmRhcnlDb2RlT3JpZ2luLCBhcmd1bWVudFRvT3BlcmFuZChpKSk7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgamV0dGlzb25lZEJsb2NrLT52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQogICAgICAgICAgICAga2VlcE9wZXJhbmRBbGl2
ZShibG9jaywgamV0dGlzb25lZEJsb2NrLCBib3VuZGFyeUNvZGVPcmlnaW4sIGkpOwogICAgICAg
ICAKLSAgICAgICAgZml4SmV0dGlzb25lZFByZWRlY2Vzc29ycyhibG9ja0luZGV4LCBqZXR0aXNv
bmVkQmxvY2tJbmRleCk7CisgICAgICAgIGZpeEpldHRpc29uZWRQcmVkZWNlc3NvcnMoYmxvY2ss
IGpldHRpc29uZWRCbG9jayk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZml4SmV0dGlzb25lZFBy
ZWRlY2Vzc29ycyhCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggamV0dGlzb25lZEJs
b2NrSW5kZXgpCisgICAgdm9pZCBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKEJhc2ljQmxvY2sq
IGJsb2NrLCBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2spCiAgICAgewogI2lmIERGR19FTkFC
TEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0YUxvZ0YoIkZpeGluZyBw
cmVkZWNlc3NvcnMgYW5kIHBoaXMgZHVlIHRvIGpldHRpc29uIG9mIEJsb2NrICMldSBmcm9tIEJs
b2NrICMldS5cbiIsCi0gICAgICAgICAgICAgICAgamV0dGlzb25lZEJsb2NrSW5kZXgsIGJsb2Nr
SW5kZXgpOworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgIkZpeGluZyBwcmVkZWNlc3Nv
cnMgYW5kIHBoaXMgZHVlIHRvIGpldHRpc29uIG9mIEJsb2NrICIsICpqZXR0aXNvbmVkQmxvY2ss
CisgICAgICAgICAgICAiIGZyb20gQmxvY2sgIiwgKmJsb2NrLCAiLlxuIiwKICNlbmRpZgotICAg
ICAgICBCYXNpY0Jsb2NrKiBqZXR0aXNvbmVkQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2pldHRp
c29uZWRCbG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGpldHRpc29uZWRCbG9jay0+bV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIGlmIChqZXR0aXNvbmVkQmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldICE9IGJsb2NrSW5kZXgp
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqZXR0aXNvbmVkQmxvY2stPnByZWRl
Y2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGpldHRpc29uZWRCbG9jay0+
cHJlZGVjZXNzb3JzW2ldICE9IGJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgamV0dGlzb25lZEJsb2NrLT5tX3ByZWRlY2Vzc29yc1tpXSA9IGpldHRpc29uZWRC
bG9jay0+bV9wcmVkZWNlc3NvcnMubGFzdCgpOwotICAgICAgICAgICAgamV0dGlzb25lZEJsb2Nr
LT5tX3ByZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBqZXR0aXNvbmVkQmxv
Y2stPnByZWRlY2Vzc29yc1tpXSA9IGpldHRpc29uZWRCbG9jay0+cHJlZGVjZXNzb3JzLmxhc3Qo
KTsKKyAgICAgICAgICAgIGpldHRpc29uZWRCbG9jay0+cHJlZGVjZXNzb3JzLnJlbW92ZUxhc3Qo
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCi0gICAgVmVjdG9yPEJs
b2NrSW5kZXgsIDE+IG5vQmxvY2tzKCkKKyAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE+IG5vQmxv
Y2tzKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBWZWN0b3I8QmxvY2tJbmRleCwgMT4oKTsKKyAg
ICAgICAgcmV0dXJuIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMT4oKTsKICAgICB9CiAgICAgCi0gICAg
VmVjdG9yPEJsb2NrSW5kZXgsIDE+IG9uZUJsb2NrKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAg
ICBWZWN0b3I8QmFzaWNCbG9jayosIDE+IG9uZUJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQogICAg
IHsKLSAgICAgICAgVmVjdG9yPEJsb2NrSW5kZXgsIDE+IHJlc3VsdDsKLSAgICAgICAgcmVzdWx0
LmFwcGVuZChibG9ja0luZGV4KTsKKyAgICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxPiByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYmxvY2spOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KICAgICAKICAgICB2b2lkIG1lcmdlQmxvY2tzKAotICAgICAgICBCbG9ja0luZGV4
IGZpcnN0QmxvY2tJbmRleCwgQmxvY2tJbmRleCBzZWNvbmRCbG9ja0luZGV4LCBWZWN0b3I8Qmxv
Y2tJbmRleCwgMT4gamV0dGlzb25lZEJsb2NrSW5kaWNlcykKKyAgICAgICAgQmFzaWNCbG9jayog
Zmlyc3RCbG9jaywgQmFzaWNCbG9jayogc2Vjb25kQmxvY2ssCisgICAgICAgIFZlY3RvcjxCYXNp
Y0Jsb2NrKiwgMT4gamV0dGlzb25lZEJsb2NrcykKICAgICB7CiAgICAgICAgIC8vIFRoaXMgd2ls
bCBhZGQgYWxsIG9mIHRoZSBub2RlcyBpbiBzZWNvbmRCbG9jayB0byBmaXJzdEJsb2NrLCBidXQg
aW4gc28gZG9pbmcKICAgICAgICAgLy8gaXQgd2lsbCBhbHNvIGVuc3VyZSB0aGF0IGFueSBHZXRM
b2NhbHMgZnJvbSB0aGUgc2Vjb25kIGJsb2NrIHRoYXQgcmVmZXIgdG8KQEAgLTQxMSw5ICszOTQs
NiBAQCBwcml2YXRlOgogICAgICAgICAvLyB0aGVuIFBoYW50b21zIGFyZSBpbnNlcnRlZCBmb3Ig
YW55dGhpbmcgdGhhdCB0aGUgamV0dGlzb25lZEJsb2NrIHdvdWxkIGhhdmUKICAgICAgICAgLy8g
a2VwdCBhbGl2ZS4KICAgICAgICAgCi0gICAgICAgIEJhc2ljQmxvY2sqIGZpcnN0QmxvY2sgPSBt
X2dyYXBoLm1fYmxvY2tzW2ZpcnN0QmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIEJhc2ljQmxv
Y2sqIHNlY29uZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tzZWNvbmRCbG9ja0luZGV4XS5nZXQo
KTsKLSAgICAgICAgCiAgICAgICAgIC8vIFJlbW92ZSB0aGUgdGVybWluYWwgb2YgZmlyc3RCbG9j
ayBzaW5jZSB3ZSBkb24ndCBuZWVkIGl0IGFueW1vcmUuIFdlbGwsIHdlIGRvbid0CiAgICAgICAg
IC8vIHJlYWxseSByZW1vdmUgaXQ7IHdlIGFjdHVhbGx5IHR1cm4gaXQgaW50byBhIFBoYW50b20u
CiAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT5sYXN0KCktPmlzVGVybWluYWwoKSk7CkBAIC00
MjEsOCArNDAxLDggQEAgcHJpdmF0ZToKICAgICAgICAgZmlyc3RCbG9jay0+bGFzdCgpLT5jb252
ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgIEFTU0VSVChmaXJzdEJsb2NrLT5sYXN0KCktPnJlZkNv
dW50KCkgPT0gMSk7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBqZXR0aXNv
bmVkQmxvY2tJbmRpY2VzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayog
amV0dGlzb25lZEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tqZXR0aXNvbmVkQmxvY2tJbmRpY2Vz
W2ldXS5nZXQoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gamV0dGlzb25lZEJsb2Nrcy5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGpldHRpc29uZWRCbG9jayA9
IGpldHRpc29uZWRCbG9ja3NbaV07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFRpbWUg
dG8gaW5zZXJ0IGdob3N0aWVzIGZvciB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlIGtlcHQgYWxpdmUg
aW4gY2FzZSB3ZSBPU1IKICAgICAgICAgICAgIC8vIGV4aXQgcHJpb3IgdG8gaGl0dGluZyB0aGUg
Zmlyc3RCbG9jaydzIHRlcm1pbmFsLCBhbmQgZW5kIHVwIGdvaW5nIGRvd24gYQpAQCAtNDQ3LDIz
ICs0MjcsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gcHJlZGVjZXNzb3JzIGVhZ2VybHkgdG8g
ZW5zdXJlIHRoYXQgd2Uga25vdyB3aGF0IHRoZXkgYXJlIGluIGNhc2UgdGhlIG5leHQgYmxvY2sg
d2UKICAgICAgICAgLy8gY29uc2lkZXIgaW4gdGhpcyBwaGFzZSB3aXNoZXMgdG8gcXVlcnkgdGhl
IHByZWRlY2Vzc29ycyBvZiBvbmUgb2YgdGhlIGJsb2NrcyB3ZQogICAgICAgICAvLyBhZmZlY3Rl
ZC4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5udW1TdWNjZXNzb3JzKGZpcnN0
QmxvY2spOyBpLS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBtX2dy
YXBoLm1fYmxvY2tzW21fZ3JhcGguc3VjY2Vzc29yKGZpcnN0QmxvY2ssIGkpXS5nZXQoKTsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBzdWNjZXNzb3ItPm1fcHJlZGVjZXNz
b3JzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3Nvci0+bV9wcmVk
ZWNlc3NvcnNbal0gPT0gc2Vjb25kQmxvY2tJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgc3Vj
Y2Vzc29yLT5tX3ByZWRlY2Vzc29yc1tqXSA9IGZpcnN0QmxvY2tJbmRleDsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZmlyc3RCbG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KSB7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBmaXJzdEJsb2NrLT5zdWNjZXNzb3IoaSk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc3VjY2Vzc29yLT5wcmVkZWNl
c3NvcnMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzc29yLT5wcmVk
ZWNlc3NvcnNbal0gPT0gc2Vjb25kQmxvY2spCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nv
ci0+cHJlZGVjZXNzb3JzW2pdID0gZmlyc3RCbG9jazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgLy8gRml4IHRoZSBwcmVkZWNlc3NvcnMgb2YgbXkgZm9ybWVy
IHN1Y2Nlc3NvcnMuIEFnYWluLCB3ZSdkIHJhdGhlciBub3QgZG8gdGhpcywgYnV0IGl0J3MKICAg
ICAgICAgLy8gYW4gdW5mb3J0dW5hdGUgbmVjZXNzaXR5LiBTZWUgYWJvdmUgY29tbWVudC4KLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gamV0dGlzb25lZEJsb2NrSW5kaWNlcy5zaXplKCk7IGkt
LTspCi0gICAgICAgICAgICBmaXhKZXR0aXNvbmVkUHJlZGVjZXNzb3JzKGZpcnN0QmxvY2tJbmRl
eCwgamV0dGlzb25lZEJsb2NrSW5kaWNlc1tpXSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGpldHRpc29uZWRCbG9ja3Muc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgZml4SmV0dGlzb25l
ZFByZWRlY2Vzc29ycyhmaXJzdEJsb2NrLCBqZXR0aXNvbmVkQmxvY2tzW2ldKTsKICAgICAgICAg
CiAgICAgICAgIGZpcnN0QmxvY2stPnZhbHVlc0F0VGFpbCA9IHNlY29uZEJsb2NrLT52YWx1ZXNB
dFRhaWw7CiAgICAgICAgIGZpcnN0QmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9IHNlY29uZEJs
b2NrLT5jZmFCcmFuY2hEaXJlY3Rpb247CiAgICAgICAgIAotICAgICAgICBtX2dyYXBoLm1fYmxv
Y2tzW3NlY29uZEJsb2NrSW5kZXhdLmNsZWFyKCk7CisgICAgICAgIG1fZ3JhcGgua2lsbEJsb2Nr
KHNlY29uZEJsb2NrKTsKICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE1MjQw
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDggKzY5LDggQEAgcHJpdmF0ZToKICAgICB7CiAgICAg
ICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ1BTIFJldGhyZWFkaW5nOiBm
cmVlVW5uZWNlc3NhcnlOb2RlcyIpOwogICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleC0tOykgewot
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5k
ZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2sp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBBU1NFUlQoYmxvY2stPmlz
UmVhY2hhYmxlKTsKQEAgLTM4Nyw4ICszODcsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAg
U2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDUFMgUmV0aHJlYWRpbmc6IGNhbm9u
aWNhbGl6ZUxvY2Fsc0luQmxvY2tzIik7CiAgICAgICAgIAotICAgICAgICBmb3IgKG1fYmxvY2tJ
bmRleCA9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBtX2Jsb2NrSW5kZXgtLTspIHsKLSAgICAg
ICAgICAgIG1fYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW21fYmxvY2tJbmRleF0uZ2V0KCk7Cisg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsg
YmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgbV9ibG9jayA9IG1fZ3JhcGguYmxvY2soYmxv
Y2tJbmRleCk7CiAgICAgICAgICAgICBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrKCk7CiAgICAg
ICAgIH0KICAgICB9CkBAIC00MDIsMjAgKzQwMiwxOSBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICAgICAgLy8gRW5zdXJlIHRoYXQgYXR0ZW1wdHMgdG8gdXNlIHRoaXMgZmFpbCBpbnN0YW50bHku
CiAgICAgICAgIG1fYmxvY2sgPSAwOwotICAgICAgICBtX2Jsb2NrSW5kZXggPSBOb0Jsb2NrOwog
ICAgICAgICAKICAgICAgICAgd2hpbGUgKCFwaGlTdGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgIFBoaVN0YWNrRW50cnkgZW50cnkgPSBwaGlTdGFjay5sYXN0KCk7CiAgICAgICAgICAgICBw
aGlTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gZW50cnkubV9ibG9jazsKLSAgICAgICAgICAgIFByZWRlY2Vzc29yTGlzdCYg
cHJlZGVjZXNzb3JzID0gYmxvY2stPm1fcHJlZGVjZXNzb3JzOworICAgICAgICAgICAgUHJlZGVj
ZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMgPSBibG9jay0+cHJlZGVjZXNzb3JzOwogICAgICAgICAg
ICAgTm9kZSogY3VycmVudFBoaSA9IGVudHJ5Lm1fcGhpOwogICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IGN1cnJlbnRQaGktPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwog
ICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gZW50cnkubV9pbmRleDsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IHByZWRlY2Vzc29ycy5zaXplKCk7IGktLTspIHsK
LSAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvckJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1twcmVkZWNlc3NvcnNbaV1dLmdldCgpOworICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHByZWRlY2Vzc29yQmxvY2sgPSBwcmVkZWNlc3NvcnNbaV07CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgTm9kZSogdmFyaWFibGVJblByZXZpb3VzID0gcHJlZGVjZXNzb3JC
bG9jay0+dmFyaWFibGVzQXRUYWlsLmF0Rm9yPG9wZXJhbmRLaW5kPihpbmRleCk7CiAgICAgICAg
ICAgICAgICAgaWYgKCF2YXJpYWJsZUluUHJldmlvdXMpIHsKQEAgLTQ4MSw3ICs0ODAsNiBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gbV9sb2NhbFBoaVN0YWNrOwogICAgIH0KICAgICAKLSAg
ICBCbG9ja0luZGV4IG1fYmxvY2tJbmRleDsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAg
IFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+IG1fYXJndW1lbnRQaGlTdGFjazsKICAgICBWZWN0
b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBtX2xvY2FsUGhpU3RhY2s7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTUyNDA2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDggKzUyLDggQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgbV9jaGFuZ2VkID0gZmFs
c2U7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrID0gMDsgYmxvY2sgPCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9jaykKLSAgICAgICAgICAgIHBlcmZvcm1CbG9j
a0NTRShtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrXS5nZXQoKSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Js
b2NrSW5kZXgpCisgICAgICAgICAgICBwZXJmb3JtQmxvY2tDU0UobV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KSk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbV9jaGFuZ2VkOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI0MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMjQg
KzUyLDIzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwog
ICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgp
OworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICgh
YmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoYmxvY2st
PmNmYUZvdW5kQ29uc3RhbnRzKQotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gZm9sZENvbnN0
YW50cyhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IGZvbGRDb25zdGFu
dHMoYmxvY2spOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gY2hhbmdlZDsK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBmb2xkQ29uc3RhbnRzKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCkKKyAgICBib29sIGZvbGRDb25zdGFudHMoQmFzaWNCbG9jayogYmxvY2spCiAgICAg
ewogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgZGF0
YUxvZ0YoIkNvbnN0YW50IGZvbGRpbmcgY29uc2lkZXJpbmcgQmxvY2sgIyV1LlxuIiwgYmxvY2tJ
bmRleCk7CisgICAgICAgIGRhdGFMb2coIkNvbnN0YW50IGZvbGRpbmcgY29uc2lkZXJpbmcgQmxv
Y2sgIiwgKmJsb2NrLCAiLlxuIik7CiAjZW5kaWYKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwogICAgICAgICBib29sIGNoYW5n
ZWQgPSBmYWxzZTsKICAgICAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2Nr
LT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24gMTUyNDA2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDgg
QEAgcHVibGljOgogICAgIGJvb2wgcnVuKCkKICAgICB7CiAgICAgICAgIC8vIEZpcnN0IHJlc2V0
IHRoZSBjb3VudHMgdG8gMCBmb3IgYWxsIG5vZGVzLgotICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKyti
bG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkg
eworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsg
aW5kZXhJbkJsb2NrLS07KQpAQCAtNjAsOCArNjAsOCBAQCBwdWJsaWM6CiAgICAgICAgIC8vIC0g
Tm9kZXMgdGhhdCBhcmUgbXVzdC1nZW5lcmF0ZS4KICAgICAgICAgLy8gLSBOb2RlcyB0aGF0IGFy
ZSByZWFjaGFibGUgZnJvbSB0eXBlIGNoZWNrcy4KICAgICAgICAgLy8gU2V0IHRoZWlyIHJlZiBj
b3VudHMgdG8gMSBhbmQgcHV0IHRoZW0gb24gdGhlIHdvcmtsaXN0LgotICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxv
Y2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2st
PnNpemUoKTsgaW5kZXhJbkJsb2NrLS07KSB7CkBAIC04MSw4ICs4MSw4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGNvdW50RWRn
ZSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5k
ZXgpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1ti
bG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAg
ICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCShyZXZp
c2lvbiAxNTI0MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogRGlzYXNzZW1ibGVyOjpEaXNhc3NlbWJsZXIoR3JhcGgmIGdyYXBoKQog
ICAgIDogbV9ncmFwaChncmFwaCkKIHsKLSAgICBtX2xhYmVsRm9yQmxvY2tJbmRleC5yZXNpemUo
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKKyAgICBtX2xhYmVsRm9yQmxvY2tJbmRleC5yZXNpemUo
Z3JhcGgubnVtQmxvY2tzKCkpOwogfQogCiB2b2lkIERpc2Fzc2VtYmxlcjo6ZHVtcChQcmludFN0
cmVhbSYgb3V0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQpAQCAtOTcsMTMgKzk3LDEzIEBAIFZl
Y3RvcjxEaXNhc3NlbWJsZXI6OkR1bXBlZE9wPiBEaXNhc3NlbWIKICAgICAKICAgICBOb2RlKiBs
YXN0Tm9kZSA9IDA7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIHByZXZpb3VzTGFiZWwgPSBt
X3N0YXJ0T2ZDb2RlOwotICAgIGZvciAoc2l6ZV90IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4
IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAg
Zm9yIChzaXplX3QgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nr
cygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
LmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIGR1bXBEaXNhc3NlbWJseShvdXQsIGRpc2Fzc2VtYmx5UHJlZml4LCBs
aW5rQnVmZmVyLCBwcmV2aW91c0xhYmVsLCBtX2xhYmVsRm9yQmxvY2tJbmRleFtibG9ja0luZGV4
XSwgbGFzdE5vZGUpOwogICAgICAgICBhcHBlbmQocmVzdWx0LCBvdXQsIHByZXZpb3VzT3JpZ2lu
KTsKLSAgICAgICAgbV9ncmFwaC5kdW1wQmxvY2tIZWFkZXIob3V0LCBwcmVmaXgsIGJsb2NrSW5k
ZXgsIEdyYXBoOjpEdW1wTGl2ZVBoaXNPbmx5KTsKKyAgICAgICAgbV9ncmFwaC5kdW1wQmxvY2tI
ZWFkZXIob3V0LCBwcmVmaXgsIGJsb2NrLCBHcmFwaDo6RHVtcExpdmVQaGlzT25seSk7CiAgICAg
ICAgIGFwcGVuZChyZXN1bHQsIG91dCwgcHJldmlvdXNPcmlnaW4pOwogICAgICAgICBOb2RlKiBs
YXN0Tm9kZUZvckRpc2Fzc2VtYmx5ID0gYmxvY2stPmF0KDApOwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewpAQCAtMTE4LDcgKzExOCw3IEBAIFZl
Y3RvcjxEaXNhc3NlbWJsZXI6OkR1bXBlZE9wPiBEaXNhc3NlbWIKICAgICAgICAgICAgICAgICAv
LyBhcyB0aGUgZW5kIHBvaW50LiBUaGlzIGNhc2UgaXMgaGl0IGVpdGhlciBkdXJpbmcgcGVlcGhv
bGUgY29tcGFyZQogICAgICAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbnMgKHRoZSBCcmFuY2gg
d29uJ3QgaGF2ZSBpdHMgb3duIGxhYmVsKSBvciBpZiB3ZSBoYXZlIGEKICAgICAgICAgICAgICAg
ICAvLyBmb3JjZWQgT1NSIGV4aXQuCi0gICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5kZXggKyAx
IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkpCisgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5k
ZXggKyAxIDwgbV9ncmFwaC5udW1CbG9ja3MoKSkKICAgICAgICAgICAgICAgICAgICAgY3VycmVu
dExhYmVsID0gbV9sYWJlbEZvckJsb2NrSW5kZXhbYmxvY2tJbmRleCArIDFdOwogICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY3VycmVudExhYmVsID0gbV9lbmRPZk1h
aW5QYXRoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rpc2Fzc2VtYmxl
ci5oCShyZXZpc2lvbiAxNTI0MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rp
c2Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAg
ICBEaXNhc3NlbWJsZXIoR3JhcGgmKTsKICAgICAKICAgICB2b2lkIHNldFN0YXJ0T2ZDb2RlKE1h
Y3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbCkgeyBtX3N0YXJ0T2ZDb2RlID0gbGFiZWw7IH0KLSAg
ICB2b2lkIHNldEZvckJsb2NrKEJsb2NrSW5kZXggYmxvY2tJbmRleCwgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIGxhYmVsKQorICAgIHZvaWQgc2V0Rm9yQmxvY2tJbmRleChCbG9ja0luZGV4IGJsb2Nr
SW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbCkKICAgICB7CiAgICAgICAgIG1fbGFi
ZWxGb3JCbG9ja0luZGV4W2Jsb2NrSW5kZXhdID0gbGFiZWw7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb21pbmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuY3BwCShyZXZpc2lvbiAxNTI0MDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvbWluYXRvcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw5ICs0NCw5IEBAIHZvaWQgRG9taW5hdG9yczo6Y29tcHV0ZShHcmFwaCYg
Z3JhcGgpCiB7CiAgICAgLy8gVGhpcyBpbXBsZW1lbnRzIGEgbmFpdmUgZG9taW5hdG9yIHNvbHZl
ci4KICAgICAKLSAgICBBU1NFUlQoZ3JhcGgubV9ibG9ja3NbMF0tPm1fcHJlZGVjZXNzb3JzLmlz
RW1wdHkoKSk7CisgICAgQVNTRVJUKGdyYXBoLmJsb2NrKDApLT5wcmVkZWNlc3NvcnMuaXNFbXB0
eSgpKTsKICAgICAKLSAgICB1bnNpZ25lZCBudW1CbG9ja3MgPSBncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7CisgICAgdW5zaWduZWQgbnVtQmxvY2tzID0gZ3JhcGgubnVtQmxvY2tzKCk7CiAgICAgCiAg
ICAgaWYgKG51bUJsb2NrcyA+IG1fcmVzdWx0cy5zaXplKCkpIHsKICAgICAgICAgbV9yZXN1bHRz
Lmdyb3cobnVtQmxvY2tzKTsKQEAgLTYwLDEzICs2MCwxMyBAQCB2b2lkIERvbWluYXRvcnM6OmNv
bXB1dGUoR3JhcGgmIGdyYXBoKQogICAgIAogICAgIG1fc2NyYXRjaC5jbGVhckFsbCgpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0tOykgewotICAgICAgICBpZiAoIWdyYXBo
Lm1fYmxvY2tzW2ldKQorICAgICAgICBpZiAoIWdyYXBoLmJsb2NrKGkpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIG1fc2NyYXRjaC5zZXQoaSk7CiAgICAgfQogICAgIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IG51bUJsb2NrczsgaS0tID4gMTspIHsKLSAgICAgICAgaWYgKCFncmFw
aC5tX2Jsb2Nrc1tpXSB8fCBncmFwaC5tX2Jsb2Nrc1tpXS0+bV9wcmVkZWNlc3NvcnMuaXNFbXB0
eSgpKQorICAgICAgICBpZiAoIWdyYXBoLmJsb2NrKGkpIHx8IGdyYXBoLmJsb2NrKGkpLT5wcmVk
ZWNlc3NvcnMuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9yZXN1bHRzW2ldLmNsZWFyQWxsKCk7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fcmVzdWx0c1tpXS5zZXQobV9zY3JhdGNoKTsK
QEAgLTg4LDE0ICs4OCwxNCBAQCB2b2lkIERvbWluYXRvcnM6OmNvbXB1dGUoR3JhcGgmIGdyYXBo
KQogCiBib29sIERvbWluYXRvcnM6Oml0ZXJhdGVGb3JCbG9jayhHcmFwaCYgZ3JhcGgsIEJsb2Nr
SW5kZXggaSkKIHsKLSAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLm1fYmxvY2tzW2ldLmdl
dCgpOworICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguYmxvY2soaSk7CiAgICAgaWYgKCFi
bG9jaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChibG9jay0+bV9wcmVkZWNlc3Nv
cnMuaXNFbXB0eSgpKQorICAgIGlmIChibG9jay0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fc2NyYXRjaC5zZXQobV9yZXN1bHRzW2Jsb2NrLT5t
X3ByZWRlY2Vzc29yc1swXV0pOwotICAgIGZvciAodW5zaWduZWQgaiA9IGJsb2NrLT5tX3ByZWRl
Y2Vzc29ycy5zaXplKCk7IGotLSA+IDE7KQotICAgICAgICBtX3NjcmF0Y2guZmlsdGVyKG1fcmVz
dWx0c1tibG9jay0+bV9wcmVkZWNlc3NvcnNbal1dKTsKKyAgICBtX3NjcmF0Y2guc2V0KG1fcmVz
dWx0c1tibG9jay0+cHJlZGVjZXNzb3JzWzBdLT5pbmRleF0pOworICAgIGZvciAodW5zaWduZWQg
aiA9IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyBqLS0gPiAxOykKKyAgICAgICAgbV9zY3Jh
dGNoLmZpbHRlcihtX3Jlc3VsdHNbYmxvY2stPnByZWRlY2Vzc29yc1tqXS0+aW5kZXhdKTsKICAg
ICBtX3NjcmF0Y2guc2V0KGkpOwogICAgIHJldHVybiBtX3Jlc3VsdHNbaV0uc2V0QW5kQ2hlY2so
bV9zY3JhdGNoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5h
dG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5h
dG9ycy5oCShyZXZpc2lvbiAxNTI0MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvbWluYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJM
RShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQW5hbHlzaXMuaCIKKyNpbmNsdWRlICJERkdCYXNp
Y0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RCaXRW
ZWN0b3IuaD4KIApAQCAtNDgsNyArNDksMTEgQEAgcHVibGljOgogICAgIGJvb2wgZG9taW5hdGVz
KEJsb2NrSW5kZXggZnJvbSwgQmxvY2tJbmRleCB0bykgY29uc3QKICAgICB7CiAgICAgICAgIEFT
U0VSVChpc1ZhbGlkKCkpOwotICAgICAgICByZXR1cm4gbV9yZXN1bHRzW3RvXS5nZXQoZnJvbSk7
CisgICAgICAgIHJldHVybiBtX3Jlc3VsdHNbZnJvbV0uZ2V0KHRvKTsKKyAgICB9CisgICAgYm9v
bCBkb21pbmF0ZXMoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZG9taW5hdGVzKGZyb20tPmluZGV4LCB0by0+aW5kZXgpOwogICAg
IH0KICAgICAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE1MjQwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDggQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOwog
ICAgICAgICAKICAgICAgICAgbV9wcm9maXRhYmlsaXR5Q2hhbmdlZCA9IGZhbHNlOwotICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1f
YmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KQotICAgICAgICAgICAgZml4dXBCbG9jayhtX2dy
YXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9j
a0luZGV4KQorICAgICAgICAgICAgZml4dXBCbG9jayhtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
KTsKICAgICAgICAgCiAgICAgICAgIHdoaWxlIChtX3Byb2ZpdGFiaWxpdHlDaGFuZ2VkKSB7CiAg
ICAgICAgICAgICBtX3Byb2ZpdGFiaWxpdHlDaGFuZ2VkID0gZmFsc2U7CkBAIC01OSw4ICs1OSw4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV9hcmd1
bWVudFBvc2l0aW9ucy5zaXplKCk7IGktLTspCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2Fy
Z3VtZW50UG9zaXRpb25zW2ldLm1lcmdlQXJndW1lbnRVbmJveGluZ0F3YXJlbmVzcygpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KQotICAgICAg
ICAgICAgICAgIGZpeHVwU2V0TG9jYWxzSW5CbG9jayhtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5k
ZXhdLmdldCgpKTsKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkKKyAgICAgICAg
ICAgICAgICBmaXh1cFNldExvY2Fsc0luQmxvY2sobV9ncmFwaC5ibG9jayhibG9ja0luZGV4KSk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTczLDEwICs1
NzMsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NoaWxkRWRnZS0+
aGFzQm9vbGVhblJlc3VsdCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZHJlbi5zZXRDaGlsZDEobmV3Q2hpbGRFZGdlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0JlVGFrZW4gPSBub2RlLT5ub3RU
YWtlbkJsb2NrSW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG9C
ZU5vdFRha2VuID0gbm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRUYWtlbkJsb2NrSW5kZXgodG9CZVRha2VuKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnNldE5vdFRha2VuQmxvY2tJbmRleCh0b0JlTm90VGFrZW4pOworICAg
ICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogdG9CZVRha2VuID0gbm9kZS0+bm90VGFr
ZW5CbG9jaygpOworICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogdG9CZU5vdFRh
a2VuID0gbm9kZS0+dGFrZW5CbG9jaygpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
c2V0VGFrZW5CbG9jayh0b0JlVGFrZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
c2V0Tm90VGFrZW5CbG9jayh0b0JlTm90VGFrZW4pOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE1MjQwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsMTUgKzI0NSwxNSBA
QCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgaWYgKG9wID09
IFdlYWtKU0NvbnN0YW50KQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9k
ZS0+d2Vha0NvbnN0YW50KCkpLCAiIChzdHJ1Y3R1cmU6ICIsICpub2RlLT53ZWFrQ29uc3RhbnQo
KS0+c3RydWN0dXJlKCksICIpIik7CiAgICAgaWYgKG5vZGUtPmlzQnJhbmNoKCkgfHwgbm9kZS0+
aXNKdW1wKCkpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgIlQ6IyIsIG5vZGUtPnRha2VuQmxv
Y2tJbmRleCgpKTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVDoiLCAqbm9kZS0+dGFrZW5C
bG9jaygpKTsKICAgICBpZiAobm9kZS0+aXNCcmFuY2goKSkKLSAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiRjojIiwgbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJGOiIsICpub2RlLT5ub3RUYWtlbkJsb2NrKCkpOwogICAgIGlmIChub2RlLT5p
c1N3aXRjaCgpKSB7CiAgICAgICAgIFN3aXRjaERhdGEqIGRhdGEgPSBub2RlLT5zd2l0Y2hEYXRh
KCk7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+a2luZCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
IG91dC5wcmludChjb21tYSwgZGF0YS0+Y2FzZXNbaV0udmFsdWUsICI6IyIsIGRhdGEtPmNhc2Vz
W2ldLnRhcmdldCk7Ci0gICAgICAgIG91dC5wcmludChjb21tYSwgImRlZmF1bHQ6IyIsIGRhdGEt
PmZhbGxUaHJvdWdoKTsKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+Y2FzZXNb
aV0udmFsdWUsICI6IiwgKmRhdGEtPmNhc2VzW2ldLnRhcmdldCk7CisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgImRlZmF1bHQ6IiwgKmRhdGEtPmZhbGxUaHJvdWdoKTsKICAgICB9CiAgICAgb3V0
LnByaW50KGNvbW1hLCAiYmMjIiwgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAg
ICAKQEAgLTI2OSwzNyArMjY5LDM1IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QKICAgICBvdXQucHJpbnQoIlxuIik7CiB9CiAKLXZvaWQgR3JhcGg6OmR1bXBCbG9j
a0hlYWRlcihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIEJsb2NrSW5kZXgg
YmxvY2tJbmRleCwgUGhpTm9kZUR1bXBNb2RlIHBoaU5vZGVEdW1wTW9kZSkKK3ZvaWQgR3JhcGg6
OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIEJh
c2ljQmxvY2sqIGJsb2NrLCBQaGlOb2RlRHVtcE1vZGUgcGhpTm9kZUR1bXBNb2RlKQogewotICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0KLSAgICBv
dXQucHJpbnQocHJlZml4LCAiQmxvY2sgIyIsIGJsb2NrSW5kZXgsICIgKCIsIGJsb2NrLT5hdCgw
KS0+Y29kZU9yaWdpbiwgIik6ICIsIGJsb2NrLT5pc1JlYWNoYWJsZSA/ICIiIDogIihza2lwcGVk
KSIsIGJsb2NrLT5pc09TUlRhcmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6ICIiLCAiXG4iKTsKKyAg
ICBvdXQucHJpbnQocHJlZml4LCAiQmxvY2sgIiwgKmJsb2NrLCAiICgiLCBibG9jay0+YXQoMCkt
PmNvZGVPcmlnaW4sICIpOiAiLCBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIoc2tpcHBlZCki
LCBibG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIiwgIlxuIik7CiAgICAg
b3V0LnByaW50KHByZWZpeCwgIiAgUHJlZGVjZXNzb3JzOiIpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYmxvY2stPm1fcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKQotICAgICAgICBvdXQu
cHJpbnQoIiAjIiwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2ldKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG91dC5w
cmludCgiICIsICpibG9jay0+cHJlZGVjZXNzb3JzW2ldKTsKICAgICBvdXQucHJpbnQoIlxuIik7
CiAgICAgaWYgKG1fZG9taW5hdG9ycy5pc1ZhbGlkKCkpIHsKICAgICAgICAgb3V0LnByaW50KHBy
ZWZpeCwgIiAgRG9taW5hdGVkIGJ5OiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYmxvY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5k
b21pbmF0ZXMoaSwgYmxvY2tJbmRleCkpCisgICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy5k
b21pbmF0ZXMoaSwgYmxvY2stPmluZGV4KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIG91dC5wcmludCgiICMiLCBpKTsKICAgICAgICAgfQogICAgICAgICBvdXQucHJp
bnQoIlxuIik7CiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIERvbWluYXRlczoiKTsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Jsb2Nrcy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgaWYgKCFtX2RvbWluYXRvcnMuZG9taW5hdGVzKGJsb2NrSW5kZXgsIGkpKQorICAg
ICAgICAgICAgaWYgKCFtX2RvbWluYXRvcnMuZG9taW5hdGVzKGJsb2NrLT5pbmRleCwgaSkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBvdXQucHJpbnQoIiAjIiwgaSk7
CiAgICAgICAgIH0KICAgICAgICAgb3V0LnByaW50KCJcbiIpOwogICAgIH0KICAgICBpZiAobV9u
YXR1cmFsTG9vcHMuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGlmIChjb25zdCBOYXR1cmFsTG9vcCog
bG9vcCA9IG1fbmF0dXJhbExvb3BzLmhlYWRlck9mKGJsb2NrSW5kZXgpKSB7CisgICAgICAgIGlm
IChjb25zdCBOYXR1cmFsTG9vcCogbG9vcCA9IG1fbmF0dXJhbExvb3BzLmhlYWRlck9mKGJsb2Nr
KSkgewogICAgICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgTG9vcCBoZWFkZXIsIGNvbnRh
aW5zOiIpOwogICAgICAgICAgICAgVmVjdG9yPEJsb2NrSW5kZXg+IHNvcnRlZEJsb2NrTGlzdDsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsb29wLT5zaXplKCk7ICsraSkK
LSAgICAgICAgICAgICAgICBzb3J0ZWRCbG9ja0xpc3QuYXBwZW5kKGxvb3AtPmF0KGkpKTsKKyAg
ICAgICAgICAgICAgICBzb3J0ZWRCbG9ja0xpc3QuYXBwZW5kKGxvb3AtPmF0KGkpLT5pbmRleCk7
CiAgICAgICAgICAgICBzdGQ6OnNvcnQoc29ydGVkQmxvY2tMaXN0LmJlZ2luKCksIHNvcnRlZEJs
b2NrTGlzdC5lbmQoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc29y
dGVkQmxvY2tMaXN0LnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAgIG91dC5wcmludCgiICMi
LCBzb3J0ZWRCbG9ja0xpc3RbaV0pOwpAQCAtMzA3LDExICszMDUsMTEgQEAgdm9pZCBHcmFwaDo6
ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBjb250YWluaW5nTG9vcHMgPQotICAgICAgICAg
ICAgbV9uYXR1cmFsTG9vcHMubG9vcHNPZihibG9ja0luZGV4KTsKKyAgICAgICAgICAgIG1fbmF0
dXJhbExvb3BzLmxvb3BzT2YoYmxvY2spOwogICAgICAgICBpZiAoIWNvbnRhaW5pbmdMb29wcy5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIENvbnRhaW5pbmcg
bG9vcCBoZWFkZXJzOiIpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNv
bnRhaW5pbmdMb29wcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAj
IiwgY29udGFpbmluZ0xvb3BzW2ldLT5oZWFkZXIoKSk7CisgICAgICAgICAgICAgICAgb3V0LnBy
aW50KCIgIiwgKmNvbnRhaW5pbmdMb29wc1tpXS0+aGVhZGVyKCkpOwogICAgICAgICAgICAgb3V0
LnByaW50KCJcbiIpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzQ0LDcgKzM0Miw3IEBAIHZvaWQg
R3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2Jsb2Nrc1tiXS5nZXQoKTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBkdW1wQmxvY2tIZWFkZXIob3V0LCAiIiwgYiwgRHVtcEFsbFBoaXMp
OworICAgICAgICBkdW1wQmxvY2tIZWFkZXIob3V0LCAiIiwgYmxvY2ssIER1bXBBbGxQaGlzKTsK
ICAgICAgICAgb3V0LnByaW50KCIgIHZhcnMgYmVmb3JlOiAiKTsKICAgICAgICAgaWYgKGJsb2Nr
LT5jZmFIYXNWaXNpdGVkKQogICAgICAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNB
dEhlYWQsIG91dCk7CkBAIC0zOTQsMjkgKzM5MiwyNSBAQCB2b2lkIEdyYXBoOjpkZXRocmVhZCgp
CiAgICAgbV9mb3JtID0gTG9hZFN0b3JlOwogfQogCi12b2lkIEdyYXBoOjpoYW5kbGVTdWNjZXNz
b3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXggYmxvY2tJbmRl
eCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCkKK3ZvaWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3Nv
cihWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29ya2xpc3QsIEJhc2ljQmxvY2sqIGJsb2NrLCBC
YXNpY0Jsb2NrKiBzdWNjZXNzb3IpCiB7Ci0gICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gbV9i
bG9ja3Nbc3VjY2Vzc29ySW5kZXhdLmdldCgpOwogICAgIGlmICghc3VjY2Vzc29yLT5pc1JlYWNo
YWJsZSkgewogICAgICAgICBzdWNjZXNzb3ItPmlzUmVhY2hhYmxlID0gdHJ1ZTsKLSAgICAgICAg
d29ya2xpc3QuYXBwZW5kKHN1Y2Nlc3NvckluZGV4KTsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5k
KHN1Y2Nlc3Nvcik7CiAgICAgfQogICAgIAotICAgIHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMu
YXBwZW5kKGJsb2NrSW5kZXgpOworICAgIHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzLmFwcGVuZChi
bG9jayk7CiB9CiAKIHZvaWQgR3JhcGg6OmRldGVybWluZVJlYWNoYWJpbGl0eSgpCiB7Ci0gICAg
VmVjdG9yPEJsb2NrSW5kZXgsIDE2PiB3b3JrbGlzdDsKLSAgICB3b3JrbGlzdC5hcHBlbmQoMCk7
Ci0gICAgbV9ibG9ja3NbMF0tPmlzUmVhY2hhYmxlID0gdHJ1ZTsKKyAgICBWZWN0b3I8QmFzaWNC
bG9jayosIDE2PiB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5hcHBlbmQoYmxvY2soMCkpOworICAg
IGJsb2NrKDApLT5pc1JlYWNoYWJsZSA9IHRydWU7CiAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgQmxvY2tJbmRleCBpbmRleCA9IHdvcmtsaXN0Lmxhc3QoKTsKLSAg
ICAgICAgd29ya2xpc3QucmVtb3ZlTGFzdCgpOwotICAgICAgICAKLSAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG51bVN1Y2Nlc3NvcnMoYmxvY2spOyBpLS07KQotICAgICAgICAgICAgaGFuZGxlU3VjY2Vz
c29yKHdvcmtsaXN0LCBpbmRleCwgc3VjY2Vzc29yKGJsb2NrLCBpKSk7CisgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgIGhhbmRsZVN1
Y2Nlc3Nvcih3b3JrbGlzdCwgYmxvY2ssIGJsb2NrLT5zdWNjZXNzb3IoaSkpOwogICAgIH0KIH0K
IApAQCAtNDI3LDcgKzQyMSw3IEBAIHZvaWQgR3JhcGg6OnJlc2V0UmVhY2hhYmlsaXR5KCkKICAg
ICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBibG9jay0+
aXNSZWFjaGFibGUgPSBmYWxzZTsKLSAgICAgICAgYmxvY2stPm1fcHJlZGVjZXNzb3JzLmNsZWFy
KCk7CisgICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMuY2xlYXIoKTsKICAgICB9CiAgICAgCiAg
ICAgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCShyZXZpc2lvbiAxNTI0MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw3ICsxNjksNyBAQCBwdWJsaWM6CiAg
ICAgLy8gQ29kZUJsb2NrIGlzIG9wdGlvbmFsLCBidXQgbWF5IGFsbG93IGFkZGl0aW9uYWwgaW5m
b3JtYXRpb24gdG8gYmUgZHVtcGVkIChlLmcuIElkZW50aWZpZXIgbmFtZXMpLgogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCkpOwogICAgIGVudW0gUGhpTm9kZUR1
bXBNb2RlIHsgRHVtcExpdmVQaGlzT25seSwgRHVtcEFsbFBoaXMgfTsKLSAgICB2b2lkIGR1bXBC
bG9ja0hlYWRlcihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgQmxvY2tJbmRleCwg
UGhpTm9kZUR1bXBNb2RlKTsKKyAgICB2b2lkIGR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYs
IGNvbnN0IGNoYXIqIHByZWZpeCwgQmFzaWNCbG9jayosIFBoaU5vZGVEdW1wTW9kZSk7CiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiwgRWRnZSk7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKik7CiAgICAgc3RhdGljIGludCBhbW91bnRPZk5v
ZGVXaGl0ZVNwYWNlKE5vZGUqKTsKQEAgLTE3OSw4ICsxNzksNiBAQCBwdWJsaWM6CiAgICAgLy8g
cHJlY2VkaW5nIG5vZGUuIFJldHVybnMgdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcHJpbnRlZC4KICAg
ICBib29sIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBO
b2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlKTsKIAotICAgIEJsb2NrSW5kZXgg
YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCbG9ja0luZGV4PiYgYmxvY2tzLCB1
bnNpZ25lZCBieXRlY29kZUJlZ2luKTsKLQogICAgIFNwZWN1bGF0ZWRUeXBlIGdldEpTQ29uc3Rh
bnRTcGVjdWxhdGlvbihOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIHNwZWN1bGF0
aW9uRnJvbVZhbHVlKG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKSk7CkBAIC00
NTUsMTcgKzQ1MywyNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+dXNl
c0FyZ3VtZW50cygpOwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKEJh
c2ljQmxvY2sqIGJsb2NrKQorICAgIEJsb2NrSW5kZXggbnVtQmxvY2tzKCkgY29uc3QgeyByZXR1
cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYmxvY2soQmxvY2tJbmRleCBi
bG9ja0luZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsgfQor
ICAgIEJhc2ljQmxvY2sqIGxhc3RCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGJsb2NrKG51bUJsb2Nr
cygpIC0gMSk7IH0KKworICAgIHZvaWQgYXBwZW5kQmxvY2soUGFzc1JlZlB0cjxCYXNpY0Jsb2Nr
PiBiYXNpY0Jsb2NrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJsb2NrLT5sYXN0KCktPm51bVN1
Y2Nlc3NvcnMoKTsKKyAgICAgICAgYmFzaWNCbG9jay0+aW5kZXggPSBtX2Jsb2Nrcy5zaXplKCk7
CisgICAgICAgIG1fYmxvY2tzLmFwcGVuZChiYXNpY0Jsb2NrKTsKICAgICB9Ci0gICAgQmxvY2tJ
bmRleCBzdWNjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4KQorICAgIAor
ICAgIHZvaWQga2lsbEJsb2NrKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBibG9jay0+bGFzdCgpLT5zdWNjZXNzb3IoaW5kZXgpOworICAgICAgICBtX2Jsb2Nr
c1tibG9ja0luZGV4XS5jbGVhcigpOwogICAgIH0KLSAgICBCbG9ja0luZGV4IHN1Y2Nlc3NvckZv
ckNvbmRpdGlvbihCYXNpY0Jsb2NrKiBibG9jaywgYm9vbCBjb25kaXRpb24pCisgICAgCisgICAg
dm9pZCBraWxsQmxvY2soQmFzaWNCbG9jayogYmFzaWNCbG9jaykKICAgICB7Ci0gICAgICAgIHJl
dHVybiBibG9jay0+bGFzdCgpLT5zdWNjZXNzb3JGb3JDb25kaXRpb24oY29uZGl0aW9uKTsKKyAg
ICAgICAga2lsbEJsb2NrKGJhc2ljQmxvY2stPmluZGV4KTsKICAgICB9CiAgICAgCiAgICAgYm9v
bCBpc1ByZWRpY3RlZE51bWVyaWNhbChOb2RlKiBub2RlKQpAQCAtNjU5LDcgKzY2NCw3IEBAIHB1
YmxpYzoKICAgICAKICAgICBOb2RlQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKIAotICAgIFZlY3Rv
cjwgT3duUHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7CisgICAgVmVjdG9yPCBSZWZQdHI8
QmFzaWNCbG9jaz4gLCA4PiBtX2Jsb2NrczsKICAgICBWZWN0b3I8RWRnZSwgMTY+IG1fdmFyQXJn
Q2hpbGRyZW47CiAgICAgVmVjdG9yPFN0b3JhZ2VBY2Nlc3NEYXRhPiBtX3N0b3JhZ2VBY2Nlc3NE
YXRhOwogICAgIFZlY3RvcjxOb2RlKiwgOD4gbV9hcmd1bWVudHM7CkBAIC02ODMsNyArNjg4LDcg
QEAgcHVibGljOgogICAgIFJlZkNvdW50U3RhdGUgbV9yZWZDb3VudFN0YXRlOwogcHJpdmF0ZToK
ICAgICAKLSAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3
b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4
KTsKKyAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmFzaWNCbG9jayosIDE2PiYgd29y
a2xpc3QsIEJhc2ljQmxvY2sqLCBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IpOwogICAgIAogICAgIEFk
ZFNwZWN1bGF0aW9uTW9kZSBhZGRJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUq
IGFkZCwgYm9vbCB2YXJpYWJsZVNob3VsZFNwZWN1bGF0ZUludGVnZXIsIE5vZGUqIGltbWVkaWF0
ZSkKICAgICB7CkBAIC03MzIsMjcgKzczNyw2IEBAIHByaXZhdGU6CiAgICAgfQogfTsKIAotY2xh
c3MgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrIHsKLXB1YmxpYzoKLSAgICBHZXRCeXRlY29kZUJl
Z2luRm9yQmxvY2soR3JhcGgmIGdyYXBoKQotICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCi0gICAg
ewotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBvcGVyYXRvcigpKEJsb2NrSW5kZXgqIGJsb2Nr
SW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9ncmFwaC5tX2Jsb2Nrc1sqYmxv
Y2tJbmRleF0tPmJ5dGVjb2RlQmVnaW47Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEdyYXBoJiBt
X2dyYXBoOwotfTsKLQotaW5saW5lIEJsb2NrSW5kZXggR3JhcGg6OmJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChWZWN0b3I8QmxvY2tJbmRleD4mIGxpbmtpbmdUYXJnZXRzLCB1bnNpZ25lZCBi
eXRlY29kZUJlZ2luKQotewotICAgIHJldHVybiAqYmluYXJ5U2VhcmNoPEJsb2NrSW5kZXgsIHVu
c2lnbmVkPihsaW5raW5nVGFyZ2V0cywgbGlua2luZ1RhcmdldHMuc2l6ZSgpLCBieXRlY29kZUJl
Z2luLCBHZXRCeXRlY29kZUJlZ2luRm9yQmxvY2soKnRoaXMpKTsKLX0KLQogI2RlZmluZSBERkdf
Tk9ERV9ET19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAg
ICAgXAogICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoX25vZGUtPmZsYWdzKCkgJiBOb2Rl
SGFzVmFyQXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE1MjQwNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIEpJVENvbXBpbGVyOjpKSVRDb21waWxlcihHcmFwaCYg
ZGZnKQogICAgIDogQ0NhbGxIZWxwZXJzKCZkZmcubV92bSwgZGZnLm1fY29kZUJsb2NrKQogICAg
ICwgbV9ncmFwaChkZmcpCiAgICAgLCBtX2ppdENvZGUoYWRvcHRSZWYobmV3IEpJVENvZGUoKSkp
Ci0gICAgLCBtX2Jsb2NrSGVhZHMoZGZnLm1fYmxvY2tzLnNpemUoKSkKKyAgICAsIG1fYmxvY2tI
ZWFkcyhkZmcubnVtQmxvY2tzKCkpCiAgICAgLCBtX2N1cnJlbnRDb2RlT3JpZ2luSW5kZXgoMCkK
IHsKICAgICBpZiAoc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkgfHwgbV9ncmFwaC5tX3ZtLm1fcGVy
Qnl0ZWNvZGVQcm9maWxlcikKQEAgLTE3MCwxMyArMTcwLDEzIEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgCiAgICAgICAgIHVzZWRKdW1wVGFibGVz
LnNldChkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICBTaW1wbGVKdW1wVGFibGUmIHRh
YmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgp
OwotICAgICAgICB0YWJsZS5jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fYmxv
Y2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoXSk7CisgICAgICAgIHRhYmxlLmN0aURlZmF1bHQgPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2gtPmluZGV4
XSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHRhYmxlLmN0aU9mZnNldHMuc2l6ZSgpOyBq
LS07KQogICAgICAgICAgICAgdGFibGUuY3RpT2Zmc2V0c1tqXSA9IHRhYmxlLmN0aURlZmF1bHQ7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBqLS07KSB7CiAg
ICAgICAgICAgICBTd2l0Y2hDYXNlJiBteUNhc2UgPSBkYXRhLmNhc2VzW2pdOwogICAgICAgICAg
ICAgdGFibGUuY3RpT2Zmc2V0c1tteUNhc2UudmFsdWUuc3dpdGNoTG9va3VwVmFsdWUoKSAtIHRh
YmxlLm1pbl0gPQotICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2Nr
SGVhZHNbbXlDYXNlLnRhcmdldF0pOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldC0+aW5kZXhdKTsKICAgICAgICAgfQogICAg
IH0KICAgICAKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtC
dWZmZXImIGxpbmtCCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIFN0
cmluZ0p1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxl
KGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgIHRhYmxlLmN0aURlZmF1bHQgPSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2hdKTsKKyAgICAg
ICAgdGFibGUuY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNb
ZGF0YS5mYWxsVGhyb3VnaC0+aW5kZXhdKTsKICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJp
bmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgaXRlcjsKICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpT
dHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUub2Zmc2V0VGFibGUuZW5kKCk7
CiAgICAgICAgIGZvciAoaXRlciA9IHRhYmxlLm9mZnNldFRhYmxlLmJlZ2luKCk7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpCkBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhM
aW5rQnVmZmVyJiBsaW5rQgogICAgICAgICAgICAgU3dpdGNoQ2FzZSYgbXlDYXNlID0gZGF0YS5j
YXNlc1tqXTsKICAgICAgICAgICAgIGl0ZXIgPSB0YWJsZS5vZmZzZXRUYWJsZS5maW5kKG15Q2Fz
ZS52YWx1ZS5zdHJpbmdJbXBsKCkpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAh
PSBlbmQpOwotICAgICAgICAgICAgaXRlci0+dmFsdWUuY3RpT2Zmc2V0ID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKG1fYmxvY2tIZWFkc1tteUNhc2UudGFyZ2V0XSk7CisgICAgICAgICAgICBpdGVy
LT52YWx1ZS5jdGlPZmZzZXQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW215
Q2FzZS50YXJnZXQtPmluZGV4XSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDE1MjQwNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjk2LDExICsyOTYsMTEgQEAgcHVibGljOgogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+
c2V0U3RhcnRPZkNvZGUobGFiZWxJZ25vcmluZ1dhdGNocG9pbnRzKCkpOwogICAgIH0KICAgICAK
LSAgICB2b2lkIHNldEZvckJsb2NrKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB2b2lkIHNl
dEZvckJsb2NrSW5kZXgoQmxvY2tJbmRleCBibG9ja0luZGV4KQogICAgIHsKICAgICAgICAgaWYg
KExJS0VMWSghbV9kaXNhc3NlbWJsZXIpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBt
X2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQmxvY2soYmxvY2tJbmRleCwgbGFiZWxJZ25vcmluZ1dhdGNo
cG9pbnRzKCkpOworICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+c2V0Rm9yQmxvY2tJbmRleChibG9j
a0luZGV4LCBsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgc2V0Rm9yTm9kZShOb2RlKiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOYXR1cmFsTG9vcHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTmF0dXJhbExvb3BzLmNwcAkocmV2aXNpb24gMTUyNDA2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw5ICszNSw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBOYXR1
cmFsTG9vcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmludCgi
W0hlYWRlcjogIyIsIGhlYWRlcigpLCAiLCBCb2R5OiIpOworICAgIG91dC5wcmludCgiW0hlYWRl
cjogIiwgKmhlYWRlcigpLCAiLCBCb2R5OiIpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2JvZHkuc2l6ZSgpOyArK2kpCi0gICAgICAgIG91dC5wcmludCgiICMiLCBtX2JvZHlbaV0p
OworICAgICAgICBvdXQucHJpbnQoIiAiLCAqbV9ib2R5W2ldKTsKICAgICBvdXQucHJpbnQoIl0i
KTsKIH0KIApAQCAtNjAsMjYgKzYwLDI2IEBAIHZvaWQgTmF0dXJhbExvb3BzOjpjb21wdXRlKEdy
YXBoJiBncmFwaCkKICAgICAKICAgICBtX2xvb3BzLnJlc2l6ZSgwKTsKICAgICAKLSAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IGdyYXBoLm1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRl
eC0tOykgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLm1fYmxvY2tzW2Jsb2Nr
SW5kZXhdLmdldCgpOworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgubnVt
QmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBn
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZ3JhcGgubnVt
U3VjY2Vzc29ycyhibG9jayk7IGktLTspIHsKLSAgICAgICAgICAgIEJsb2NrSW5kZXggc3VjY2Vz
c29ySW5kZXggPSBncmFwaC5zdWNjZXNzb3IoYmxvY2ssIGkpOwotICAgICAgICAgICAgaWYgKCFn
cmFwaC5tX2RvbWluYXRvcnMuZG9taW5hdGVzKHN1Y2Nlc3NvckluZGV4LCBibG9ja0luZGV4KSkK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykg
eworICAgICAgICAgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3Nvcihp
KTsKKyAgICAgICAgICAgIGlmICghZ3JhcGgubV9kb21pbmF0b3JzLmRvbWluYXRlcyhzdWNjZXNz
b3IsIGJsb2NrKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGJvb2wg
Zm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IG1fbG9vcHMuc2l6
ZSgpOyBqLS07KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbG9vcHNbaV0uaGVhZGVyKCkgPT0g
c3VjY2Vzc29ySW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9sb29wc1tpXS5hZGRCbG9j
ayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAobV9sb29wc1tpXS5oZWFkZXIoKSA9
PSBzdWNjZXNzb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9sb29wc1tpXS5hZGRCbG9jayhi
bG9jayk7CiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBOYXR1cmFsTG9vcCBsb29wKHN1Y2Nlc3NvckluZGV4
KTsKLSAgICAgICAgICAgIGxvb3AuYWRkQmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBO
YXR1cmFsTG9vcCBsb29wKHN1Y2Nlc3Nvcik7CisgICAgICAgICAgICBsb29wLmFkZEJsb2NrKGJs
b2NrKTsKICAgICAgICAgICAgIG1fbG9vcHMuYXBwZW5kKGxvb3ApOwogICAgICAgICB9CiAgICAg
fQpAQCAtODgsOCArODgsOCBAQCB2b2lkIE5hdHVyYWxMb29wczo6Y29tcHV0ZShHcmFwaCYgZ3Jh
cGgpCiAgICAgICAgIGRhdGFMb2coIkFmdGVyIGJvb3RzdHJhcDogIiwgKnRoaXMsICJcbiIpOwog
ICAgIAogICAgIEZhc3RCaXRWZWN0b3Igc2VlbkJsb2NrczsKLSAgICBWZWN0b3I8QmxvY2tJbmRl
eCwgND4gYmxvY2tXb3JrbGlzdDsKLSAgICBzZWVuQmxvY2tzLnJlc2l6ZShncmFwaC5tX2Jsb2Nr
cy5zaXplKCkpOworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgND4gYmxvY2tXb3JrbGlzdDsKKyAg
ICBzZWVuQmxvY2tzLnJlc2l6ZShncmFwaC5udW1CbG9ja3MoKSk7CiAgICAgCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9sb29wcy5zaXplKCk7IGktLTspIHsKICAgICAgICAgTmF0dXJhbExvb3Am
IGxvb3AgPSBtX2xvb3BzW2ldOwpAQCAtMTAxLDMwICsxMDEsMjcgQEAgdm9pZCBOYXR1cmFsTG9v
cHM6OmNvbXB1dGUoR3JhcGgmIGdyYXBoKQogICAgICAgICAgICAgZGF0YUxvZygiRGVhbGluZyB3
aXRoIGxvb3AgIiwgbG9vcCwgIlxuIik7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSBsb29wLnNpemUoKTsgai0tOykgewotICAgICAgICAgICAgc2VlbkJsb2Nrcy5zZXQobG9v
cFtqXSk7CisgICAgICAgICAgICBzZWVuQmxvY2tzLnNldChsb29wW2pdLT5pbmRleCk7CiAgICAg
ICAgICAgICBibG9ja1dvcmtsaXN0LmFwcGVuZChsb29wW2pdKTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgd2hpbGUgKCFibG9ja1dvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgQmxvY2tJbmRleCBibG9ja0luZGV4ID0gYmxvY2tXb3JrbGlzdC50YWtlTGFzdCgpOworICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBibG9ja1dvcmtsaXN0LnRha2VMYXN0KCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICBEZWFsaW5nIHdpdGggIyIsIGJsb2NrSW5kZXgsICJcbiIpOworICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBEZWFsaW5nIHdpdGggIiwgKmJsb2NrLCAiXG4iKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKGJsb2NrSW5kZXggPT0gbG9vcC5oZWFkZXIoKSkKKyAg
ICAgICAgICAgIGlmIChibG9jayA9PSBsb29wLmhlYWRlcigpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdy
YXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgQVNTRVJUKGJsb2Nr
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gYmxvY2stPm1f
cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tOykgewotICAgICAgICAgICAgICAgIEJsb2NrSW5kZXgg
cHJlZGVjZXNzb3JJbmRleCA9IGJsb2NrLT5tX3ByZWRlY2Vzc29yc1tqXTsKLSAgICAgICAgICAg
ICAgICBpZiAoc2VlbkJsb2Nrcy5nZXQocHJlZGVjZXNzb3JJbmRleCkpCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgai0tOykgeworICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29y
c1tqXTsKKyAgICAgICAgICAgICAgICBpZiAoc2VlbkJsb2Nrcy5nZXQocHJlZGVjZXNzb3ItPmlu
ZGV4KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgbG9vcC5hZGRCbG9jayhwcmVkZWNlc3NvckluZGV4KTsKLSAgICAgICAg
ICAgICAgICBibG9ja1dvcmtsaXN0LmFwcGVuZChwcmVkZWNlc3NvckluZGV4KTsKLSAgICAgICAg
ICAgICAgICBzZWVuQmxvY2tzLnNldChwcmVkZWNlc3NvckluZGV4KTsKKyAgICAgICAgICAgICAg
ICBsb29wLmFkZEJsb2NrKHByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICBibG9ja1dvcmts
aXN0LmFwcGVuZChwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgc2VlbkJsb2Nrcy5zZXQo
cHJlZGVjZXNzb3ItPmluZGV4KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAg
LTEzMywxMiArMTMwLDEyIEBAIHZvaWQgTmF0dXJhbExvb3BzOjpjb21wdXRlKEdyYXBoJiBncmFw
aCkKICAgICAgICAgZGF0YUxvZygiUmVzdWx0czogIiwgKnRoaXMsICJcbiIpOwogfQogCi1WZWN0
b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBOYXR1cmFsTG9vcHM6Omxvb3BzT2YoQmxvY2tJbmRleCBi
bG9ja0luZGV4KSBjb25zdAorVmVjdG9yPGNvbnN0IE5hdHVyYWxMb29wKj4gTmF0dXJhbExvb3Bz
Ojpsb29wc09mKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAogewogICAgIFZlY3Rvcjxjb25zdCBO
YXR1cmFsTG9vcCo+IHJlc3VsdDsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2xvb3Bz
LnNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAobV9sb29wc1tpXS5jb250YWlucyhibG9ja0lu
ZGV4KSkKKyAgICAgICAgaWYgKG1fbG9vcHNbaV0uY29udGFpbnMoYmxvY2spKQogICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgmbV9sb29wc1tpXSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOYXR1cmFsTG9vcHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCShyZXZpc2lvbiAxNTI0MDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05hdHVyYWxMb29wcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRl
ICJERkdBbmFseXNpcy5oIgorI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNsdWRlICJE
RkdDb21tb24uaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtMzgsMjQg
KzM5LDI0IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIE5hdHVyYWxM
b29wIHsKIHB1YmxpYzoKICAgICBOYXR1cmFsTG9vcCgpCi0gICAgICAgIDogbV9oZWFkZXIoTm9C
bG9jaykKKyAgICAgICAgOiBtX2hlYWRlcigwKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgTmF0
dXJhbExvb3AoQmxvY2tJbmRleCBoZWFkZXIpCisgICAgTmF0dXJhbExvb3AoQmFzaWNCbG9jayog
aGVhZGVyKQogICAgICAgICA6IG1faGVhZGVyKGhlYWRlcikKICAgICB7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgYWRkQmxvY2soQmxvY2tJbmRleCBibG9jaykgeyBtX2JvZHkuYXBwZW5kKGJsb2Nr
KTsgfQorICAgIHZvaWQgYWRkQmxvY2soQmFzaWNCbG9jayogYmxvY2spIHsgbV9ib2R5LmFwcGVu
ZChibG9jayk7IH0KICAgICAKLSAgICBCbG9ja0luZGV4IGhlYWRlcigpIGNvbnN0IHsgcmV0dXJu
IG1faGVhZGVyOyB9CisgICAgQmFzaWNCbG9jayogaGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV9o
ZWFkZXI7IH0KICAgICAKICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ib2R5
LnNpemUoKTsgfQotICAgIEJsb2NrSW5kZXggYXQodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4g
bV9ib2R5W2ldOyB9Ci0gICAgQmxvY2tJbmRleCBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0
IHsgcmV0dXJuIGF0KGkpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaSkgY29uc3Qg
eyByZXR1cm4gbV9ib2R5W2ldOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25l
ZCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQogICAgIAotICAgIGJvb2wgY29udGFpbnMoQmxv
Y2tJbmRleCBibG9jaykgY29uc3QKKyAgICBib29sIGNvbnRhaW5zKEJhc2ljQmxvY2sqIGJsb2Nr
KSBjb25zdAogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ib2R5LnNpemUoKTsg
aS0tOykgewogICAgICAgICAgICAgaWYgKG1fYm9keVtpXSA9PSBibG9jaykKQEAgLTY3LDggKzY4
LDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owog
cHJpdmF0ZToKLSAgICBCbG9ja0luZGV4IG1faGVhZGVyOwotICAgIFZlY3RvcjxCbG9ja0luZGV4
LCA0PiBtX2JvZHk7CisgICAgQmFzaWNCbG9jayogbV9oZWFkZXI7CisgICAgVmVjdG9yPEJhc2lj
QmxvY2sqLCA0PiBtX2JvZHk7CiB9OwogCiBjbGFzcyBOYXR1cmFsTG9vcHMgOiBwdWJsaWMgQW5h
bHlzaXM8TmF0dXJhbExvb3BzPiB7CkBAIC05MSwxNyArOTIsMTcgQEAgcHVibGljOgogICAgIAog
ICAgIC8vIFJldHVybiBlaXRoZXIgbnVsbCBpZiB0aGUgYmxvY2sgaXNuJ3QgYSBsb29wIGhlYWRl
ciwgb3IgdGhlCiAgICAgLy8gbG9vcCBpdCBiZWxvbmdzIHRvLgotICAgIGNvbnN0IE5hdHVyYWxM
b29wKiBoZWFkZXJPZihCbG9ja0luZGV4IGJsb2NrSW5kZXgpIGNvbnN0CisgICAgY29uc3QgTmF0
dXJhbExvb3AqIGhlYWRlck9mKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAogICAgIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9sb29wcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAg
IGlmIChtX2xvb3BzW2ldLmhlYWRlcigpID09IGJsb2NrSW5kZXgpCisgICAgICAgICAgICBpZiAo
bV9sb29wc1tpXS5oZWFkZXIoKSA9PSBibG9jaykKICAgICAgICAgICAgICAgICByZXR1cm4gJm1f
bG9vcHNbaV07CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAogICAg
IC8vIFJldHVybiB0aGUgaW5kaWNlcyBvZiBhbGwgbG9vcHMgdGhpcyBiZWxvbmdzIHRvLgotICAg
IFZlY3Rvcjxjb25zdCBOYXR1cmFsTG9vcCo+IGxvb3BzT2YoQmxvY2tJbmRleCBibG9ja0luZGV4
KSBjb25zdDsKKyAgICBWZWN0b3I8Y29uc3QgTmF0dXJhbExvb3AqPiBsb29wc09mKEJhc2ljQmxv
Y2sqKSBjb25zdDsKIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogcHJpdmF0
ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNTI0MDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDgsNiArNDgsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK3N0
cnVjdCBCYXNpY0Jsb2NrOworCiBzdHJ1Y3QgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEgewogICAg
IFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmU7CkBAIC04MCwxOCArODIsMjggQEAgc3RydWN0IE5ld0FycmF5QnVmZmVyRGF0YSB7CiAvLyB2
YWx1ZXMuCiBzdHJ1Y3QgU3dpdGNoQ2FzZSB7CiAgICAgU3dpdGNoQ2FzZSgpCi0gICAgICAgIDog
dGFyZ2V0KE5vQmxvY2spCisgICAgICAgIDogdGFyZ2V0KDApCiAgICAgewogICAgIH0KICAgICAK
LSAgICBTd2l0Y2hDYXNlKExhenlKU1ZhbHVlIHZhbHVlLCBCbG9ja0luZGV4IHRhcmdldCkKKyAg
ICBTd2l0Y2hDYXNlKExhenlKU1ZhbHVlIHZhbHVlLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCiAgICAg
ICAgIDogdmFsdWUodmFsdWUpCiAgICAgICAgICwgdGFyZ2V0KHRhcmdldCkKICAgICB7CiAgICAg
fQogICAgIAorICAgIHN0YXRpYyBTd2l0Y2hDYXNlIHdpdGhCeXRlY29kZUluZGV4KExhenlKU1Zh
bHVlIHZhbHVlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgIHsKKyAgICAgICAgU3dpdGNo
Q2FzZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC52YWx1ZSA9IHZhbHVlOworICAgICAgICByZXN1
bHQudGFyZ2V0ID0gYml0d2lzZV9jYXN0PEJhc2ljQmxvY2sqPihzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KGJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
CisgICAgdW5zaWduZWQgdGFyZ2V0Qnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KHRhcmdldCk7IH0KKyAgICAKICAgICBMYXp5SlNWYWx1ZSB2YWx1
ZTsKLSAgICBCbG9ja0luZGV4IHRhcmdldDsKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQ7CiB9Owog
CiBlbnVtIFN3aXRjaEtpbmQgewpAQCAtMTA1LDE1ICsxMTcsMjEgQEAgc3RydWN0IFN3aXRjaERh
dGEgewogICAgIC8vIGNvbnN0cnVjdGluZyB0aGlzIHNob3VsZCBtYWtlIHN1cmUgdG8gaW5pdGlh
bGl6ZSBldmVyeXRoaW5nIHRoZXkKICAgICAvLyBjYXJlIGFib3V0IG1hbnVhbGx5LgogICAgIFN3
aXRjaERhdGEoKQotICAgICAgICA6IGZhbGxUaHJvdWdoKE5vQmxvY2spCisgICAgICAgIDogZmFs
bFRocm91Z2goMCkKICAgICAgICAgLCBraW5kKHN0YXRpY19jYXN0PFN3aXRjaEtpbmQ+KC0xKSkK
ICAgICAgICAgLCBzd2l0Y2hUYWJsZUluZGV4KFVJTlRfTUFYKQogICAgICAgICAsIGRpZFVzZUp1
bXBUYWJsZShmYWxzZSkKICAgICB7CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0RmFsbFRocm91
Z2hCeXRlY29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgeworICAgICAgICBm
YWxsVGhyb3VnaCA9IGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4oc3RhdGljX2Nhc3Q8dWludHB0
cl90PihieXRlY29kZUluZGV4KSk7CisgICAgfQorICAgIHVuc2lnbmVkIGZhbGxUaHJvdWdoQnl0
ZWNvZGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGZhbGxU
aHJvdWdoKTsgfQorICAgIAogICAgIFZlY3RvcjxTd2l0Y2hDYXNlPiBjYXNlczsKLSAgICBCbG9j
a0luZGV4IGZhbGxUaHJvdWdoOworICAgIEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoOwogICAgIFN3
aXRjaEtpbmQga2luZDsKICAgICB1bnNpZ25lZCBzd2l0Y2hUYWJsZUluZGV4OwogICAgIGJvb2wg
ZGlkVXNlSnVtcFRhYmxlOwpAQCAtNzQzLDI4ICs3NjEsMjggQEAgc3RydWN0IE5vZGUgewogICAg
ICAgICByZXR1cm4gbV9vcEluZm8yOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldFRha2VuQmxv
Y2tJbmRleChCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgdm9pZCBzZXRUYWtlbkJsb2NrKEJh
c2ljQmxvY2sqIGJsb2NrKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkgfHwgaXNK
dW1wKCkpOwotICAgICAgICBtX29wSW5mbyA9IGJsb2NrSW5kZXg7CisgICAgICAgIG1fb3BJbmZv
ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYmxvY2spOwogICAgIH0KICAgICAKLSAgICB2b2lk
IHNldE5vdFRha2VuQmxvY2tJbmRleChCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgdm9pZCBz
ZXROb3RUYWtlbkJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKICAgICAgICAgQVNTRVJU
KGlzQnJhbmNoKCkpOwotICAgICAgICBtX29wSW5mbzIgPSBibG9ja0luZGV4OworICAgICAgICBt
X29wSW5mbzIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihibG9jayk7CiAgICAgfQogICAgIAot
ICAgIEJsb2NrSW5kZXggdGFrZW5CbG9ja0luZGV4KCkKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbkJs
b2NrKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpIHx8IGlzSnVtcCgpKTsKLSAg
ICAgICAgcmV0dXJuIG1fb3BJbmZvOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEJhc2lj
QmxvY2sqPihtX29wSW5mbyk7CiAgICAgfQogICAgIAotICAgIEJsb2NrSW5kZXggbm90VGFrZW5C
bG9ja0luZGV4KCkKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbkJsb2NrKCkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChpc0JyYW5jaCgpKTsKLSAgICAgICAgcmV0dXJuIG1fb3BJbmZvMjsKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCYXNpY0Jsb2NrKj4obV9vcEluZm8yKTsKICAgICB9CiAg
ICAgCiAgICAgU3dpdGNoRGF0YSogc3dpdGNoRGF0YSgpCkBAIC03ODcsNyArODA1LDcgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEJsb2NrSW5kZXggc3VjY2Vz
c29yKHVuc2lnbmVkIGluZGV4KQorICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBp
bmRleCkKICAgICB7CiAgICAgICAgIGlmIChpc1N3aXRjaCgpKSB7CiAgICAgICAgICAgICBpZiAo
aW5kZXggPCBzd2l0Y2hEYXRhKCktPmNhc2VzLnNpemUoKSkKQEAgLTc5NywxOSArODE1LDE5IEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKGluZGV4KSB7CiAgICAg
ICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHJldHVybiB0YWtlbkJsb2NrSW5kZXgoKTsKKyAgICAg
ICAgICAgIHJldHVybiB0YWtlbkJsb2NrKCk7CiAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAg
IHJldHVybiBub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgICAgIHJldHVybiBub3RUYWtl
bkJsb2NrKCk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIE5vQmxvY2s7CisgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBCbG9ja0luZGV4IHN1Y2Nlc3Nv
ckZvckNvbmRpdGlvbihib29sIGNvbmRpdGlvbikKKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JG
b3JDb25kaXRpb24oYm9vbCBjb25kaXRpb24pCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCcmFu
Y2goKSk7Ci0gICAgICAgIHJldHVybiBjb25kaXRpb24gPyB0YWtlbkJsb2NrSW5kZXgoKSA6IG5v
dFRha2VuQmxvY2tJbmRleCgpOworICAgICAgICByZXR1cm4gY29uZGl0aW9uID8gdGFrZW5CbG9j
aygpIDogbm90VGFrZW5CbG9jaygpOwogICAgIH0KICAgICAKICAgICBib29sIGhhc0hlYXBQcmVk
aWN0aW9uKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbklu
amVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MjQwNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjgsOCArNjgsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsK
LSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0lu
ZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9j
a0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAg
ICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
aWYgKCFibG9jay0+aXNPU1JUYXJnZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMTUyNDA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2MSw4ICs1NjEsOCBAQCBw
cml2YXRlOgogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAg
ICAgZGF0YUxvZ0YoIlByb3BhZ2F0aW5nIHByZWRpY3Rpb25zIGZvcndhcmQgWyV1XVxuIiwgKytt
X2NvdW50KTsKICNlbmRpZgotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0g
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRl
eF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJ
bmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAg
ICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEFT
U0VSVChibG9jay0+aXNSZWFjaGFibGUpOwpAQCAtNTc4LDggKzU3OCw4IEBAIHByaXZhdGU6CiAj
aWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBkYXRhTG9n
RigiUHJvcGFnYXRpbmcgcHJlZGljdGlvbnMgYmFja3dhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsK
ICNlbmRpZgotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubV9i
bG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0t
OykgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFibGUpOwpAQCAtNzAzLDggKzcw
Myw4IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBt
X2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldLmZpbmQoKS0+Y2xlYXJWb3RlcygpOwotICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNSZWFjaGFi
bGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNTI0MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MzUsMTIgKzQzNSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBl
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxs
KEVkZ2Ugb3BlcmFuZCwgTm9kZSogYnJhbmNoTm9kZSwgYm9vbCBpbnZlcnQpCiB7Ci0gICAgQmxv
Y2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2Nr
SW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBC
YXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Js
b2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKICAgICAKICAgICBp
ZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgaW52ZXJ0ID0gIWludmVydDsKLSAg
ICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgQmFzaWNCbG9jayogdG1wID0g
dGFrZW47CiAgICAgICAgIHRha2VuID0gbm90VGFrZW47CiAgICAgICAgIG5vdFRha2VuID0gdG1w
OwogICAgIH0KQEAgLTQ5NSw3ICs0OTUsNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZUNvbXBhCiB7CiAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0
UGVlcEhvbGVCcmFuY2goKTsKICAgICBpZiAoYnJhbmNoSW5kZXhJbkJsb2NrICE9IFVJTlRfTUFY
KSB7Ci0gICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21f
YmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxvY2spOworICAgICAgICBOb2RlKiBicmFuY2hOb2Rl
ID0gbV9ibG9jay0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKIAogICAgICAgICBBU1NFUlQobm9k
ZS0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOwogICAgICAgICAKQEAgLTUxNiw4ICs1MTYsOCBA
QCBib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhCiAKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSogbm9kZSwgTm9kZSog
YnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19E
RkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQogewotICAgIEJsb2NrSW5kZXggdGFrZW4g
PSBicmFuY2hOb2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2Vu
ID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmFzaWNCbG9jayogdGFr
ZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4g
PSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CiAKICAgICBKSVRDb21waWxlcjo6UmVzdWx0
Q29uZGl0aW9uIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6Tm9uWmVybzsKIApA
QCAtNTI2LDcgKzUyNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVl
cGgKICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgY29uZCA9IEpJVENv
bXBpbGVyOjppbnZlcnQoY29uZCk7CiAgICAgICAgIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRD
b21waWxlcjo6WmVybzsKLSAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAg
QmFzaWNCbG9jayogdG1wID0gdGFrZW47CiAgICAgICAgIHRha2VuID0gbm90VGFrZW47CiAgICAg
ICAgIG5vdFRha2VuID0gdG1wOwogICAgIH0KQEAgLTU4MCw3ICs1ODAsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBoCiAKICAgICBqdW1wKG5vdFRha2VuKTsKICAg
ICAKLSAgICBtX2luZGV4SW5CbG9jayA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10t
PnNpemUoKSAtIDE7CisgICAgbV9pbmRleEluQmxvY2sgPSBtX2Jsb2NrLT5zaXplKCkgLSAxOwog
ICAgIG1fY3VycmVudE5vZGUgPSBicmFuY2hOb2RlOwogfQogCkBAIC02NjksMTQgKzY2OSwxNCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlCiAKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShOb2RlKiBub2RlLCBOb2Rl
KiBicmFuY2hOb2RlLCBib29sIGludmVydCkKIHsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gYnJh
bmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJy
YW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOworICAgIEJhc2ljQmxvY2sqIHRha2VuID0g
YnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJh
bmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwogCiAgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlv
biB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8gSWYgdGFrZW4gaXMgbmV4
dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRp
b24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkp
IHsKICAgICAgICAgaW52ZXJ0ID0gIWludmVydDsKLSAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0
YWtlbjsKKyAgICAgICAgQmFzaWNCbG9jayogdG1wID0gdGFrZW47CiAgICAgICAgIHRha2VuID0g
bm90VGFrZW47CiAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAgIH0KQEAgLTE0NDUsOCArMTQ0
NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RUb09iamUKIAogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1YWxp
dHkoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCwgTm9kZSogYnJhbmNoTm9kZSkKIHsK
LSAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0g
ICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgp
OworICAgIEJhc2ljQmxvY2sqIHRha2VuID0gYnJhbmNoTm9kZS0+dGFrZW5CbG9jaygpOworICAg
IEJhc2ljQmxvY2sqIG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9jaygpOwogICAg
IAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBsZWZ0Q2hpbGQpOwogICAgIEpT
VmFsdWVPcGVyYW5kIG9wMih0aGlzLCByaWdodENoaWxkLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24pOwpAQCAtMTczNyw3ICsxNzM3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxv
Z2ljYWxOb3QoTgogICAgIH0KIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9y
T3RoZXJCcmFuY2goRWRnZSBub2RlVXNlLCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5v
dFRha2VuKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRn
ZSBub2RlVXNlLCBCYXNpY0Jsb2NrKiB0YWtlbiwgQmFzaWNCbG9jayogbm90VGFrZW4pCiB7CiAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZVVzZSwgTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAgLTE3OTQsOCArMTc5
NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKIAogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBub2RlKQogewotICAgIEJsb2NrSW5kZXgg
dGFrZW4gPSBub2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2Vu
ID0gbm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBu
b2RlLT50YWtlbkJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBub2RlLT5ub3RU
YWtlbkJsb2NrKCk7CiAKICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewog
ICAgIGNhc2UgQm9vbGVhblVzZTogewpAQCAtMTgwNCw3ICsxODA0LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogCiAgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0
QmxvY2soKSkgewogICAgICAgICAgICAgY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Olplcm87
Ci0gICAgICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAgICAgICAgICAgQmFzaWNC
bG9jayogdG1wID0gdGFrZW47CiAgICAgICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwogICAgICAg
ICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgICAgIH0KQEAgLTE4MjgsNyArMTgyOCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm8KICAgICAgICAgICAgIAogICAg
ICAgICAgICAgaWYgKHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgICAgICAgICAgaW52
ZXJ0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRtcCA9IHRha2VuOwogICAgICAgICAgICAgICAgIHRh
a2VuID0gbm90VGFrZW47CiAgICAgICAgICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgICAg
ICAgICB9CkBAIC0zMjE2LDggKzMyMTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBERkc6Okp1bXA6IHsKLSAgICAgICAgQmxv
Y2tJbmRleCB0YWtlbiA9IG5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgICAgICBqdW1wKHRh
a2VuKTsKKyAgICAgICAganVtcChub2RlLT50YWtlbkJsb2NrKCkpOwogICAgICAgICBub1Jlc3Vs
dChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTI0MDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zODQsMTIgKzM4NCwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZU5vblBlCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZl
UGVlcGhvbGVCcmFuY2hOdWxsKEVkZ2Ugb3BlcmFuZCwgTm9kZSogYnJhbmNoTm9kZSwgYm9vbCBp
bnZlcnQpCiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJ
bmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJs
b2NrSW5kZXgoKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxv
Y2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxv
Y2soKTsKICAgICAKICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgaW52
ZXJ0ID0gIWludmVydDsKLSAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAg
QmFzaWNCbG9jayogdG1wID0gdGFrZW47CiAgICAgICAgIHRha2VuID0gbm90VGFrZW47CiAgICAg
ICAgIG5vdFRha2VuID0gdG1wOwogICAgIH0KQEAgLTQ0Myw3ICs0NDMsNyBAQCBib29sIFNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhCiB7CiAgICAgdW5zaWduZWQgYnJhbmNoSW5k
ZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICBpZiAoYnJhbmNoSW5kZXhJ
bkJsb2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5n
cmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxvY2spOworICAgICAg
ICBOb2RlKiBicmFuY2hOb2RlID0gbV9ibG9jay0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKIAog
ICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAg
ICAgICAgIApAQCAtNDY0LDggKzQ2NCw4IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1
bGF0aXZlQ29tcGEKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9s
ZUJyYW5jaChOb2RlKiBub2RlLCBOb2RlKiBicmFuY2hOb2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24p
CiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRleCgp
OwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5k
ZXgoKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsK
KyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsK
IAogICAgIEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY2FsbFJlc3VsdENvbmRpdGlvbiA9
IEpJVENvbXBpbGVyOjpOb25aZXJvOwogCkBAIC00NzQsNyArNDc0LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaAogICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2so
KSkgewogICAgICAgICBjb25kID0gSklUQ29tcGlsZXI6OmludmVydChjb25kKTsKICAgICAgICAg
Y2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpaZXJvOwotICAgICAgICBCbG9ja0lu
ZGV4IHRtcCA9IHRha2VuOworICAgICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsKICAgICAg
ICAgdGFrZW4gPSBub3RUYWtlbjsKICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAgfQpAQCAt
NTI2LDcgKzUyNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGgK
IAogICAgIGp1bXAobm90VGFrZW4pOwogCi0gICAgbV9pbmRleEluQmxvY2sgPSBtX2ppdC5ncmFw
aCgpLm1fYmxvY2tzW21fYmxvY2tdLT5zaXplKCkgLSAxOworICAgIG1faW5kZXhJbkJsb2NrID0g
bV9ibG9jay0+c2l6ZSgpIC0gMTsKICAgICBtX2N1cnJlbnROb2RlID0gYnJhbmNoTm9kZTsKIH0K
IApAQCAtNjA3LDE0ICs2MDcsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVOb25QZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3Ry
aWN0RXEoTm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9kZSwgYm9vbCBpbnZlcnQpCiB7Ci0gICAg
QmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJs
b2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAg
ICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKKyAgICBCYXNp
Y0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKIAogICAgIC8v
IFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgog
ICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52
ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCiAgICAgaWYg
KHRha2VuID09IG5leHRCbG9jaygpKSB7CiAgICAgICAgIGludmVydCA9ICFpbnZlcnQ7Ci0gICAg
ICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CisgICAgICAgIEJhc2ljQmxvY2sqIHRtcCA9IHRh
a2VuOwogICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwogICAgICAgICBub3RUYWtlbiA9IHRtcDsK
ICAgICB9CkBAIC0xNDY2LDggKzE0NjYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0VG9PYmplCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVj
dFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQs
IE5vZGUqIGJyYW5jaE5vZGUpCiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUt
PnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2Rl
LT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5v
ZGUtPnRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5vZGUt
Pm5vdFRha2VuQmxvY2soKTsKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhp
cywgbGVmdENoaWxkKTsKICAgICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgcmlnaHRDaGlsZCwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKQEAgLTE3NjQsNyArMTc2NCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICB9CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKEVkZ2Ugbm9kZVVzZSwgQmxvY2tJbmRl
eCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRP
YmplY3RPck90aGVyQnJhbmNoKEVkZ2Ugbm9kZVVzZSwgQmFzaWNCbG9jayogdGFrZW4sIEJhc2lj
QmxvY2sqIG5vdFRha2VuKQogewogICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVV
c2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CkBAIC0xODE3LDggKzE4MTcsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2Jq
ZWN0T3JPdGhlckJyCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm9k
ZSkKIHsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0g
ICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOworICAg
IEJhc2ljQmxvY2sqIHRha2VuID0gbm9kZS0+dGFrZW5CbG9jaygpOworICAgIEJhc2ljQmxvY2sq
IG5vdFRha2VuID0gbm9kZS0+bm90VGFrZW5CbG9jaygpOwogICAgIAogICAgIHN3aXRjaCAobm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOiB7CkBA
IC0xODMzLDcgKzE4MzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUq
IG5vCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkg
ewogICAgICAgICAgICAgICAgIGludmVydCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgQmxvY2tJ
bmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiB0bXAgPSB0YWtl
bjsKICAgICAgICAgICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwogICAgICAgICAgICAgICAgIG5v
dFRha2VuID0gdG1wOwogICAgICAgICAgICAgfQpAQCAtMTg2Myw3ICsxODYzLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBubwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGlmICh0YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICAgICAgICAg
ICAgICBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6WmVybzsKLSAgICAgICAgICAgICAgICAg
ICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9j
ayogdG1wID0gdGFrZW47CiAgICAgICAgICAgICAgICAgICAgIHRha2VuID0gbm90VGFrZW47CiAg
ICAgICAgICAgICAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAgICAgICAgICAgICAgIH0KQEAg
LTMxNjAsOCArMzE2MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICB9CiAKICAgICBjYXNlIERGRzo6SnVtcDogewotICAgICAgICBCbG9ja0luZGV4IHRh
a2VuID0gbm9kZS0+dGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgICAgIGp1bXAodGFrZW4pOworICAg
ICAgICBqdW1wKG5vZGUtPnRha2VuQmxvY2soKSk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTUyNDA2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyNCw3ICsyMjQsNyBAQCBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50KiBTcGVjdWxhdGl2ZUpJ
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb252ZXJ0TGFzdE9TUkV4aXRUb0ZvcndhcmQoY29uc3Qg
VmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKIHsKICAgICBtX2ppdC5qaXRDb2RlKCktPmxh
c3RPU1JFeGl0KCkuY29udmVydFRvRm9yd2FyZCgKLSAgICAgICAgbV9qaXQuZ3JhcGgoKS5tX2Js
b2Nrc1ttX2Jsb2NrXS5nZXQoKSwgbV9jdXJyZW50Tm9kZSwgbV9pbmRleEluQmxvY2ssIHZhbHVl
UmVjb3ZlcnkpOworICAgICAgICBtX2Jsb2NrLCBtX2N1cnJlbnROb2RlLCBtX2luZGV4SW5CbG9j
aywgdmFsdWVSZWNvdmVyeSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwg
Tm9kZSogbm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKQEAgLTk5Myw3ICs5OTMsNyBAQCBib29sIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBhCiB7CiAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJ
bkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICBpZiAoYnJhbmNoSW5kZXhJbkJs
b2NrICE9IFVJTlRfTUFYKSB7Ci0gICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFw
aCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRleEluQmxvY2spOworICAgICAgICBO
b2RlKiBicmFuY2hOb2RlID0gbV9ibG9jay0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKIAogICAg
ICAgICBBU1NFUlQobm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOwogICAgICAgICAKQEAg
LTEwMTQsNyArMTAxNCw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlU3Ry
aWMKIHsKICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJy
YW5jaCgpOwogICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKLSAgICAg
ICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0
KGJyYW5jaEluZGV4SW5CbG9jayk7CisgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBtX2Jsb2Nr
LT5hdChicmFuY2hJbmRleEluQmxvY2spOwogCiAgICAgICAgIEFTU0VSVChub2RlLT5hZGp1c3Rl
ZFJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgIApAQCAtMTM3OSw4ICsxMzc5LDggQEAgRlBSVGVt
cG9yYXJ5OjpGUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSQogCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2goTm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9k
ZSwgSklUQ29tcGlsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24pCiB7Ci0gICAgQmxvY2tJ
bmRleCB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5k
ZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCYXNp
Y0Jsb2NrKiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2Nr
KiBub3RUYWtlbiA9IGJyYW5jaE5vZGUtPm5vdFRha2VuQmxvY2soKTsKICAgICAKICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwpAQCAtMTM5MSwxNCAr
MTM5MSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVEb3ViCiAKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUqIG5v
ZGUsIE5vZGUqIGJyYW5jaE5vZGUpCiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5v
ZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hO
b2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCYXNpY0Jsb2NrKiB0YWtlbiA9IGJyYW5j
aE5vZGUtPnRha2VuQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBub3RUYWtlbiA9IGJyYW5jaE5v
ZGUtPm5vdFRha2VuQmxvY2soKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpFcXVhbDsKICAgICAKICAgICBpZiAo
dGFrZW4gPT0gbmV4dEJsb2NrKCkpIHsKICAgICAgICAgY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsOwotICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAgICAgICBC
YXNpY0Jsb2NrKiB0bXAgPSB0YWtlbjsKICAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKICAgICAg
ICAgbm90VGFrZW4gPSB0bXA7CiAgICAgfQpAQCAtMTQ2OSwxNCArMTQ2OSwxNCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2goTm9kZSogbm9kZSwgTm9kZSogYnJhbmNoTm9k
ZSwgSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewotICAgIEJs
b2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBCbG9j
a0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAg
QmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CiAKICAgICAvLyBU
aGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRoZSB0YWtlbiBibG9jay4KICAg
ICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0aCBub3RUYWtlbiAmIGludmVy
dCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLgogICAgIGlmICh0
YWtlbiA9PSBuZXh0QmxvY2soKSkgewogICAgICAgICBjb25kaXRpb24gPSBKSVRDb21waWxlcjo6
aW52ZXJ0KGNvbmRpdGlvbik7Ci0gICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CisgICAg
ICAgIEJhc2ljQmxvY2sqIHRtcCA9IHRha2VuOwogICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwog
ICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICB9CkBAIC0xNTA0LDcgKzE1MDQsNyBAQCBib29s
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVCcmFuCiAgICAgLy8gRnVzZWQgY29tcGFy
ZSAmIGJyYW5jaC4KICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVw
SG9sZUJyYW5jaCgpOwogICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsK
LSAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9j
a10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CisgICAgICAgIE5vZGUqIGJyYW5jaE5vZGUgPSBt
X2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOwogCiAgICAgICAgIC8vIGRldGVjdFBlZXBI
b2xlQnJhbmNoIGN1cnJlbnRseSBvbmx5IHBlcm1pdHMgdGhlIGJyYW5jaCB0byBiZSB0aGUgdmVy
eSBuZXh0IG5vZGUsCiAgICAgICAgIC8vIHNvIGNhbiBiZSBubyBpbnRlcnZlbmluZyBub2RlcyB0
byBhbHNvIHJlZmVyZW5jZSB0aGUgY29tcGFyZS4gCkBAIC0xNjI0LDE0ICsxNjI0LDE2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmJhaWwoKQogICAgIGNsZWFyR2VuZXJhdGlvbkluZm8oKTsKIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJiBibG9jaykKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQogewogICAgIEFTU0VSVChtX2Nv
bXBpbGVPa2F5KTsKICAgICAKLSAgICBpZiAoIWJsb2NrLmlzUmVhY2hhYmxlKQorICAgIGlmICgh
bV9ibG9jaykKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmICghYmxvY2suY2ZhSGFzVmlz
aXRlZCkgeworICAgIEFTU0VSVChtX2Jsb2NrLT5pc1JlYWNoYWJsZSk7CisgICAgCisgICAgaWYg
KCFtX2Jsb2NrLT5jZmFIYXNWaXNpdGVkKSB7CiAgICAgICAgIC8vIERvbid0IGdlbmVyYXRlIGNv
ZGUgZm9yIGJhc2ljIGJsb2NrcyB0aGF0IGFyZSB1bnJlYWNoYWJsZSBhY2NvcmRpbmcgdG8gQ0ZB
LgogICAgICAgICAvLyBCdXQgdG8gYmUgc3VyZSB0aGF0IG5vYm9keSBoYXMgZ2VuZXJhdGVkIGEg
anVtcCB0byB0aGlzIGJsb2NrLCBkcm9wIGluIGEKICAgICAgICAgLy8gYnJlYWtwb2ludCBoZXJl
LgpAQCAtMTYzOSwyMCArMTY0MSwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJh
c2ljQmxvY2smCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2ppdC5ibG9ja0hlYWRz
KClbbV9ibG9ja10gPSBtX2ppdC5sYWJlbCgpOworICAgIG1faml0LmJsb2NrSGVhZHMoKVttX2Js
b2NrLT5pbmRleF0gPSBtX2ppdC5sYWJlbCgpOwogI2lmIERGR19FTkFCTEUoSklUX0JSRUFLX09O
X0VWRVJZX0JMT0NLKQogICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICNlbmRpZgogICAgIAogI2lm
IERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBkYXRhTG9nRigiU2V0dGluZyB1cCBzdGF0
ZSBmb3IgYmxvY2sgIyV1OiAiLCBtX2Jsb2NrKTsKKyAgICBkYXRhTG9nKCJTZXR0aW5nIHVwIHN0
YXRlIGZvciBibG9jayAiLCAqbV9ibG9jaywgIjogIik7CiAjZW5kaWYKICAgICAKICAgICBtX3N0
cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnJlc2V0KCkpOwogICAgIAogICAgIG1f
aml0LmppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7CiAKLSAgICBBU1NFUlQobV9hcmd1bWVu
dHMuc2l6ZSgpID09IGJsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsK
KyAgICBBU1NFUlQobV9hcmd1bWVudHMuc2l6ZSgpID09IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJn
dW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFZhbHVlU291cmNlIHZhbHVlU291cmNlID0g
VmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwogICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IHZh
bHVlU291cmNlOwpAQCAtMTY2MCwxMSArMTY2MiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKEJhc2ljQmxvY2smCiAgICAgfQogICAgIAogICAgIG1fc3RhdGUucmVzZXQoKTsKLSAg
ICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jaygmYmxvY2spOworICAgIG1fc3RhdGUuYmVnaW5CYXNp
Y0Jsb2NrKG1fYmxvY2spOwogICAgIAotICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5zaXplKCkgPT0g
YmxvY2sudmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOworICAgIEFTU0VSVChtX3Zh
cmlhYmxlcy5zaXplKCkgPT0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxz
KCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKTsK
KyAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKTsK
ICAgICAgICAgVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2U7CiAgICAgICAgIGlmICghbm9kZSkKICAg
ICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKQEAgLTE2
OTAsOCArMTY5Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYK
ICAgICBkYXRhTG9nRigiXG4iKTsKICNlbmRpZgogCi0gICAgZm9yIChtX2luZGV4SW5CbG9jayA9
IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2suc2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7Ci0g
ICAgICAgIG1fY3VycmVudE5vZGUgPSBibG9ja1ttX2luZGV4SW5CbG9ja107CisgICAgZm9yICht
X2luZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgbV9ibG9jay0+c2l6ZSgpOyArK21f
aW5kZXhJbkJsb2NrKSB7CisgICAgICAgIG1fY3VycmVudE5vZGUgPSBtX2Jsb2NrLT5hdChtX2lu
ZGV4SW5CbG9jayk7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBtYXkgaGF2ZSBoaXMgYSBjb250
cmFkaWN0aW9uIHRoYXQgdGhlIENGQSB3YXMgYXdhcmUgb2YgYnV0IHRoYXQgdGhlIEpJVAogICAg
ICAgICAvLyBkaWRuJ3QgY2F1c2UgZGlyZWN0bHkuCkBAIC0xODcxLDExICsxODczLDEwIEBAIGJv
b2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogICAgIGNoZWNrQXJndW1lbnRUeXBlcygpOwog
CiAgICAgQVNTRVJUKCFtX2N1cnJlbnROb2RlKTsKLSAgICBmb3IgKG1fYmxvY2sgPSAwOyBtX2Js
b2NrIDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7ICsrbV9ibG9jaykgewotICAgICAg
ICBtX2ppdC5zZXRGb3JCbG9jayhtX2Jsb2NrKTsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLmdldCgpOwotICAgICAgICBpZiAoYmxv
Y2spCi0gICAgICAgICAgICBjb21waWxlKCpibG9jayk7CisgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgoKS5udW1CbG9ja3MoKTsgKyti
bG9ja0luZGV4KSB7CisgICAgICAgIG1faml0LnNldEZvckJsb2NrSW5kZXgoYmxvY2tJbmRleCk7
CisgICAgICAgIG1fYmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJsb2NrKGJsb2NrSW5kZXgpOworICAg
ICAgICBjb21waWxlQ3VycmVudEJsb2NrKCk7CiAgICAgfQogICAgIGxpbmtCcmFuY2hlcygpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtMTg4Myw4ICsxODg0LDggQEAgYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSgpCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNyZWF0ZU9TUkVudHJpZXMoKQog
ewotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1faml0
LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwor
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1faml0Lmdy
YXBoKCkubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1faml0LmdyYXBoKCkuYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIGlmICghYmxv
Y2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJn
ZXQpCkBAIC0xODk5LDggKzE5MDAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjcmVhdGVPU1JF
bnRyaWVzKCkKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtPU1JFbnRyaWVzKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpCiB7CiAgICAgdW5zaWduZWQgb3NyRW50cnlJbmRleCA9IDA7Ci0gICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgoKS5t
X2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgoKS5udW1C
bG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9q
aXQuZ3JhcGgoKS5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKQEAgLTM2
NjMsMTYgKzM2NjQsMTYgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxRm9y
QwogICAgIAogICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xl
QnJhbmNoKCk7CiAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewotICAg
ICAgICBOb2RlKiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+
YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKLSAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5j
aE5vZGUtPnRha2VuQmxvY2tJbmRleCgpOwotICAgICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0g
YnJhbmNoTm9kZS0+bm90VGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgIE5vZGUqIGJyYW5jaE5v
ZGUgPSBtX2Jsb2NrLT5hdChicmFuY2hJbmRleEluQmxvY2spOworICAgICAgICBCYXNpY0Jsb2Nr
KiB0YWtlbiA9IGJyYW5jaE5vZGUtPnRha2VuQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayog
bm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2NrKCk7CiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpF
cXVhbDsKICAgICAgICAgCiAgICAgICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBi
cmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgogICAgICAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBz
d2l0Y2ggdGFrZW4gd2l0aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBz
byB3ZSBjYW4gZmFsbCB0aHJvdWdoLgogICAgICAgICBpZiAodGFrZW4gPT0gbmV4dEJsb2NrKCkp
IHsKICAgICAgICAgICAgIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbDsKLSAg
ICAgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiB0bXAgPSB0YWtlbjsKICAgICAgICAgICAgIHRha2VuID0gbm90VGFrZW47CiAgICAgICAgICAg
ICBub3RUYWtlbiA9IHRtcDsKICAgICAgICAgfQpAQCAtMzczNSw3ICszNzM2LDcgQEAgYm9vbCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgIGNhc2UgSW50MzJVc2U6IHsK
ICAgICAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFu
Y2goKTsKICAgICAgICAgaWYgKGJyYW5jaEluZGV4SW5CbG9jayAhPSBVSU5UX01BWCkgewotICAg
ICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9j
a10tPmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBOb2RlKiBicmFuY2hOb2Rl
ID0gbV9ibG9jay0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGNvbXBpbGVQ
ZWVwSG9sZUludGVnZXJCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsKTsKICAgICAgICAgICAgIHVzZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICB1c2Uo
bm9kZS0+Y2hpbGQyKCkpOwpAQCAtMzc1MCw3ICszNzUxLDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVN0cmljdEVxKE5vZAogICAgIGNhc2UgTnVtYmVyVXNlOiB7CiAgICAgICAgIHVu
c2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAg
ICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAgIE5v
ZGUqIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFu
Y2hJbmRleEluQmxvY2spOworICAgICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1fYmxvY2st
PmF0KGJyYW5jaEluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVEb3Vi
bGVCcmFuY2gobm9kZSwgYnJhbmNoTm9kZSwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKTsK
ICAgICAgICAgICAgIHVzZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICB1c2Uobm9kZS0+
Y2hpbGQyKCkpOwpAQCAtMzc3NSw3ICszNzc2LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVN0cmljdEVxKE5vZAogICAgIGNhc2UgT2JqZWN0VXNlOiB7CiAgICAgICAgIHVuc2lnbmVk
IGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CiAgICAgICAgIGlm
IChicmFuY2hJbmRleEluQmxvY2sgIT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAgIE5vZGUqIGJy
YW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChicmFuY2hJbmRl
eEluQmxvY2spOworICAgICAgICAgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1fYmxvY2stPmF0KGJy
YW5jaEluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVh
bGl0eShub2RlLCBicmFuY2hOb2RlKTsKICAgICAgICAgICAgIHVzZShub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgICAgICB1c2Uobm9kZS0+Y2hpbGQyKCkpOwpAQCAtNDEzMCwxNiArNDEzMSwxNiBA
QCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyhOCiAgICAgdW5zaWduZWQg
YnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKICAgICBpZiAoYnJh
bmNoSW5kZXhJbkJsb2NrID09IFVJTlRfTUFYKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Tm9kZSogYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KGJy
YW5jaEluZGV4SW5CbG9jayk7CisgICAgTm9kZSogYnJhbmNoTm9kZSA9IG1fYmxvY2stPmF0KGJy
YW5jaEluZGV4SW5CbG9jayk7CiAgICAgQVNTRVJUKG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSA9
PSAxKTsKIAotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2NrSW5k
ZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS0+bm90VGFrZW5CbG9j
a0luZGV4KCk7CisgICAgQmFzaWNCbG9jayogdGFrZW4gPSBicmFuY2hOb2RlLT50YWtlbkJsb2Nr
KCk7CisgICAgQmFzaWNCbG9jayogbm90VGFrZW4gPSBicmFuY2hOb2RlLT5ub3RUYWtlbkJsb2Nr
KCk7CiAgICAgCiAgICAgYm9vbCBpbnZlcnQgPSBmYWxzZTsKICAgICBpZiAodGFrZW4gPT0gbmV4
dEJsb2NrKCkpIHsKICAgICAgICAgaW52ZXJ0ID0gdHJ1ZTsKLSAgICAgICAgQmxvY2tJbmRleCB0
bXAgPSB0YWtlbjsKKyAgICAgICAgQmFzaWNCbG9jayogdG1wID0gdGFrZW47CiAgICAgICAgIHRh
a2VuID0gbm90VGFrZW47CiAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAgIH0KQEAgLTUxNzYs
NyArNTE3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2goTm9kZSogbm8KICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
OjphZGRCcmFuY2goY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wLCBCbG9ja0lu
ZGV4IGRlc3RpbmF0aW9uKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6YWRkQnJhbmNoKGNvbnN0IE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcCwgQmFzaWNCbG9jayogZGVzdGluYXRpb24pCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0ganVtcC5qdW1wcygpLnNpemUoKTsgaS0tOykKICAgICAg
ICAgYWRkQnJhbmNoKGp1bXAuanVtcHMoKVtpXSwgZGVzdGluYXRpb24pOwpAQCAtNTE4Niw3ICs1
MTg3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua0JyYW5jaGVzKCkKIHsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYnJhbmNoZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQnJh
bmNoUmVjb3JkJiBicmFuY2ggPSBtX2JyYW5jaGVzW2ldOwotICAgICAgICBicmFuY2guanVtcC5s
aW5rVG8obV9qaXQuYmxvY2tIZWFkcygpW2JyYW5jaC5kZXN0aW5hdGlvbl0sICZtX2ppdCk7Cisg
ICAgICAgIGJyYW5jaC5qdW1wLmxpbmtUbyhtX2ppdC5ibG9ja0hlYWRzKClbYnJhbmNoLmRlc3Rp
bmF0aW9uLT5pbmRleF0sICZtX2ppdCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNTI0MDYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExOSwxMiArMTE5LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGNyZWF0ZU9TUkVu
dHJpZXMoKTsKICAgICB2b2lkIGxpbmtPU1JFbnRyaWVzKExpbmtCdWZmZXImKTsKIAotICAgIEJs
b2NrSW5kZXggbmV4dEJsb2NrKCkKKyAgICBCYXNpY0Jsb2NrKiBuZXh0QmxvY2soKQogICAgIHsK
LSAgICAgICAgZm9yIChCbG9ja0luZGV4IHJlc3VsdCA9IG1fYmxvY2sgKyAxOyA7IHJlc3VsdCsr
KSB7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID49IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6
ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBOb0Jsb2NrOwotICAgICAgICAgICAgaWYgKG1f
aml0LmdyYXBoKCkubV9ibG9ja3NbcmVzdWx0XSkKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IHJl
c3VsdEluZGV4ID0gbV9ibG9jay0+aW5kZXggKyAxOyA7IHJlc3VsdEluZGV4KyspIHsKKyAgICAg
ICAgICAgIGlmIChyZXN1bHRJbmRleCA+PSBtX2ppdC5ncmFwaCgpLm51bUJsb2NrcygpKQorICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgaWYgKEJhc2ljQmxvY2sqIHJlc3Vs
dCA9IG1faml0LmdyYXBoKCkuYmxvY2socmVzdWx0SW5kZXgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDQsNyArMzQ0LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgY29tcGlsZShOb2RlKik7CiAgICAgdm9pZCBub3RpY2VPU1JCaXJ0aChOb2Rl
Kik7CiAgICAgdm9pZCBiYWlsKCk7Ci0gICAgdm9pZCBjb21waWxlKEJhc2ljQmxvY2smKTsKKyAg
ICB2b2lkIGNvbXBpbGVDdXJyZW50QmxvY2soKTsKIAogICAgIHZvaWQgY2hlY2tBcmd1bWVudFR5
cGVzKCk7CiAKQEAgLTcwNCwxOCArNzA0LDE2IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRo
ZSBpbmRleCBvZiB0aGUgYnJhbmNoIG5vZGUgaWYgcGVlcGhvbGUgaXMgb2theSwgVUlOVF9NQVgg
b3RoZXJ3aXNlLgogICAgIHVuc2lnbmVkIGRldGVjdFBlZXBIb2xlQnJhbmNoKCkKICAgICB7Ci0g
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2Nr
XS5nZXQoKTsKLQogICAgICAgICAvLyBDaGVjayB0aGF0IG5vIGludGVydmVuaW5nIG5vZGVzIHdp
bGwgYmUgZ2VuZXJhdGVkLgotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleElu
QmxvY2sgKyAxOyBpbmRleCA8IGJsb2NrLT5zaXplKCkgLSAxOyArK2luZGV4KSB7Ci0gICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4KTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IG1faW5kZXhJbkJsb2NrICsgMTsgaW5kZXggPCBtX2Jsb2NrLT5zaXplKCkgLSAx
OyArK2luZGV4KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ibG9jay0+YXQoaW5kZXgp
OwogICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFVJTlRfTUFYOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhl
IGxhc3ROb2RlIGlzIGEgYnJhbmNoIG9uIHRoaXMgbm9kZS4KLSAgICAgICAgTm9kZSogbGFzdE5v
ZGUgPSBibG9jay0+bGFzdCgpOwotICAgICAgICByZXR1cm4gbGFzdE5vZGUtPm9wKCkgPT0gQnJh
bmNoICYmIGxhc3ROb2RlLT5jaGlsZDEoKSA9PSBtX2N1cnJlbnROb2RlID8gYmxvY2stPnNpemUo
KSAtIDEgOiBVSU5UX01BWDsKKyAgICAgICAgTm9kZSogbGFzdE5vZGUgPSBtX2Jsb2NrLT5sYXN0
KCk7CisgICAgICAgIHJldHVybiBsYXN0Tm9kZS0+b3AoKSA9PSBCcmFuY2ggJiYgbGFzdE5vZGUt
PmNoaWxkMSgpID09IG1fY3VycmVudE5vZGUgPyBtX2Jsb2NrLT5zaXplKCkgLSAxIDogVUlOVF9N
QVg7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZU1vdkhpbnQoTm9kZSopOwpAQCAtMTcz
OCw3NCArMTczNiw3NCBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAgICAgCi0gICAgdm9pZCBi
cmFuY2hEb3VibGUoSklUQ29tcGlsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kLCBGUFJSZWcgbGVm
dCwgRlBSUmVnIHJpZ2h0LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAgIHZvaWQgYnJhbmNo
RG91YmxlKEpJVENvbXBpbGVyOjpEb3VibGVDb25kaXRpb24gY29uZCwgRlBSUmVnIGxlZnQsIEZQ
UlJlZyByaWdodCwgQmFzaWNCbG9jayogZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICByZXR1
cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaERvdWJsZShjb25kLCBsZWZ0LCByaWdodCksIGRlc3Rp
bmF0aW9uKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBicmFuY2hEb3VibGVOb25aZXJvKEZQUlJl
ZyB2YWx1ZSwgRlBSUmVnIHNjcmF0Y2gsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgdm9p
ZCBicmFuY2hEb3VibGVOb25aZXJvKEZQUlJlZyB2YWx1ZSwgRlBSUmVnIHNjcmF0Y2gsIEJhc2lj
QmxvY2sqIGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2pp
dC5icmFuY2hEb3VibGVOb25aZXJvKHZhbHVlLCBzY3JhdGNoKSwgZGVzdGluYXRpb24pOwogICAg
IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotICAgIHZvaWQg
YnJhbmNoMzIoSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgVCBsZWZ0LCBV
IHJpZ2h0LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAgIHZvaWQgYnJhbmNoMzIoSklUQ29t
cGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgVCBsZWZ0LCBVIHJpZ2h0LCBCYXNpY0Js
b2NrKiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQu
YnJhbmNoMzIoY29uZCwgbGVmdCwgcmlnaHQpLCBkZXN0aW5hdGlvbik7CiAgICAgfQogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci0gICAgdm9pZCBicmFuY2hUZXN0
MzIoSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBVIG1hc2ssIEJs
b2NrSW5kZXggZGVzdGluYXRpb24pCisgICAgdm9pZCBicmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6
OlJlc3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBVIG1hc2ssIEJhc2ljQmxvY2sqIGRlc3Rp
bmF0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0
MzIoY29uZCwgdmFsdWUsIG1hc2spLCBkZXN0aW5hdGlvbik7CiAgICAgfQogICAgIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBicmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6OlJl
c3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAg
IHZvaWQgYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCwgVCB2
YWx1ZSwgQmFzaWNCbG9jayogZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICByZXR1cm4gYWRk
QnJhbmNoKG1faml0LmJyYW5jaFRlc3QzMihjb25kLCB2YWx1ZSksIGRlc3RpbmF0aW9uKTsKICAg
ICB9CiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPgotICAgIHZvaWQgYnJhbmNoNjQoSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25k
aXRpb24gY29uZCwgVCBsZWZ0LCBVIHJpZ2h0LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAg
IHZvaWQgYnJhbmNoNjQoSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgVCBs
ZWZ0LCBVIHJpZ2h0LCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoNjQoY29uZCwgbGVmdCwgcmlnaHQpLCBkZXN0aW5h
dGlvbik7CiAgICAgfQogI2VuZGlmCiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4KLSAgICB2b2lkIGJyYW5jaDgoSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRp
b24gY29uZCwgVCBsZWZ0LCBVIHJpZ2h0LCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAgIHZv
aWQgYnJhbmNoOChKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBUIGxlZnQs
IFUgcmlnaHQsIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGFkZEJyYW5jaChtX2ppdC5icmFuY2g4KGNvbmQsIGxlZnQsIHJpZ2h0KSwgZGVzdGluYXRpb24p
OwogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotICAg
IHZvaWQgYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFQg
bGVmdCwgVSByaWdodCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB2b2lkIGJyYW5jaFB0
cihKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBUIGxlZnQsIFUgcmlnaHQs
IEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkZEJyYW5j
aChtX2ppdC5icmFuY2hQdHIoY29uZCwgbGVmdCwgcmlnaHQpLCBkZXN0aW5hdGlvbik7CiAgICAg
fQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci0gICAgdm9pZCBi
cmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCwgVCB2YWx1ZSwg
VSBtYXNrLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAgIHZvaWQgYnJhbmNoVGVzdFB0cihK
SVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQsIFQgdmFsdWUsIFUgbWFzaywgQmFzaWNC
bG9jayogZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0
LmJyYW5jaFRlc3RQdHIoY29uZCwgdmFsdWUsIG1hc2spLCBkZXN0aW5hdGlvbik7CiAgICAgfQog
ICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBicmFuY2hUZXN0UHRyKEpJ
VENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCwgVCB2YWx1ZSwgQmxvY2tJbmRleCBkZXN0
aW5hdGlvbikKKyAgICB2b2lkIGJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6OlJlc3VsdENvbmRp
dGlvbiBjb25kLCBUIHZhbHVlLCBCYXNpY0Jsb2NrKiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAg
ICAgIHJldHVybiBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdFB0cihjb25kLCB2YWx1ZSksIGRl
c3RpbmF0aW9uKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4KLSAgICB2b2lkIGJyYW5jaFRlc3Q4KEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24g
Y29uZCwgVCB2YWx1ZSwgVSBtYXNrLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQorICAgIHZvaWQg
YnJhbmNoVGVzdDgoSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kLCBUIHZhbHVlLCBV
IG1hc2ssIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
ZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0OChjb25kLCB2YWx1ZSwgbWFzayksIGRlc3RpbmF0aW9u
KTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIGJyYW5j
aFRlc3Q4KEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCwgVCB2YWx1ZSwgQmxvY2tJ
bmRleCBkZXN0aW5hdGlvbikKKyAgICB2b2lkIGJyYW5jaFRlc3Q4KEpJVENvbXBpbGVyOjpSZXN1
bHRDb25kaXRpb24gY29uZCwgVCB2YWx1ZSwgQmFzaWNCbG9jayogZGVzdGluYXRpb24pCiAgICAg
ewogICAgICAgICByZXR1cm4gYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3Q4KGNvbmQsIHZhbHVl
KSwgZGVzdGluYXRpb24pOwogICAgIH0KQEAgLTE4MTQsNyArMTgxMiw3IEBAIHB1YmxpYzoKICAg
ICAgICAgQXRGYWxsVGhyb3VnaFBvaW50LAogICAgICAgICBGb3JjZUp1bXAKICAgICB9OwotICAg
IHZvaWQganVtcChCbG9ja0luZGV4IGRlc3RpbmF0aW9uLCBGYWxsVGhyb3VnaE1vZGUgZmFsbFRo
cm91Z2hNb2RlID0gQXRGYWxsVGhyb3VnaFBvaW50KQorICAgIHZvaWQganVtcChCYXNpY0Jsb2Nr
KiBkZXN0aW5hdGlvbiwgRmFsbFRocm91Z2hNb2RlIGZhbGxUaHJvdWdoTW9kZSA9IEF0RmFsbFRo
cm91Z2hQb2ludCkKICAgICB7CiAgICAgICAgIGlmIChkZXN0aW5hdGlvbiA9PSBuZXh0QmxvY2so
KQogICAgICAgICAgICAgJiYgZmFsbFRocm91Z2hNb2RlID09IEF0RmFsbFRocm91Z2hQb2ludCkK
QEAgLTE4MjIsMTkgKzE4MjAsMTQgQEAgcHVibGljOgogICAgICAgICBhZGRCcmFuY2gobV9qaXQu
anVtcCgpLCBkZXN0aW5hdGlvbik7CiAgICAgfQogICAgIAotICAgIHZvaWQgYWRkQnJhbmNoKGNv
bnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBqdW1wLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQor
ICAgIHZvaWQgYWRkQnJhbmNoKGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBqdW1wLCBCYXNp
Y0Jsb2NrKiBkZXN0aW5hdGlvbikKICAgICB7CiAgICAgICAgIG1fYnJhbmNoZXMuYXBwZW5kKEJy
YW5jaFJlY29yZChqdW1wLCBkZXN0aW5hdGlvbikpOwogICAgIH0KLSAgICB2b2lkIGFkZEJyYW5j
aChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXAsIEJsb2NrSW5kZXggZGVzdGlu
YXRpb24pOworICAgIHZvaWQgYWRkQnJhbmNoKGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCYganVtcCwgQmFzaWNCbG9jayogZGVzdGluYXRpb24pOwogCiAgICAgdm9pZCBsaW5rQnJhbmNo
ZXMoKTsKIAotICAgIEJhc2ljQmxvY2sqIGJsb2NrKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLmdldCgpOwotICAgIH0KLQogI2lmbmRlZiBO
REVCVUcKICAgICB2b2lkIGR1bXAoY29uc3QgY2hhciogbGFiZWwgPSAwKTsKICNlbmRpZgpAQCAt
MTg3MiwxMyArMTg2NSwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlTG9naWNhbE5vdChO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlU3RyaW5nRXF1YWxpdHkoTm9kZSopOwogICAgIHZvaWQg
Y29tcGlsZVN0cmluZ0lkZW50RXF1YWxpdHkoTm9kZSopOwotICAgIHZvaWQgZW1pdE9iamVjdE9y
T3RoZXJCcmFuY2goRWRnZSB2YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RU
YWtlbik7CisgICAgdm9pZCBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChFZGdlIHZhbHVlLCBCYXNp
Y0Jsb2NrKiB0YWtlbiwgQmFzaWNCbG9jayogbm90VGFrZW4pOwogICAgIHZvaWQgZW1pdEJyYW5j
aChOb2RlKik7CiAgICAgCiAgICAgc3RydWN0IFN0cmluZ1N3aXRjaENhc2UgewogICAgICAgICBT
dHJpbmdTd2l0Y2hDYXNlKCkgeyB9CiAgICAgICAgIAotICAgICAgICBTdHJpbmdTd2l0Y2hDYXNl
KFN0cmluZ0ltcGwqIHN0cmluZywgQmxvY2tJbmRleCB0YXJnZXQpCisgICAgICAgIFN0cmluZ1N3
aXRjaENhc2UoU3RyaW5nSW1wbCogc3RyaW5nLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCiAgICAgICAg
ICAgICA6IHN0cmluZyhzdHJpbmcpCiAgICAgICAgICAgICAsIHRhcmdldCh0YXJnZXQpCiAgICAg
ICAgIHsKQEAgLTE4ODcsNyArMTg4MCw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBvcGVyYXRv
cjwoY29uc3QgU3RyaW5nU3dpdGNoQ2FzZSYgb3RoZXIpIGNvbnN0OwogICAgICAgICAKICAgICAg
ICAgU3RyaW5nSW1wbCogc3RyaW5nOwotICAgICAgICBCbG9ja0luZGV4IHRhcmdldDsKKyAgICAg
ICAgQmFzaWNCbG9jayogdGFyZ2V0OwogICAgIH07CiAgICAgCiAgICAgdm9pZCBlbWl0U3dpdGNo
SW50SnVtcChTd2l0Y2hEYXRhKiwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCk7CkBAIC0y
MTUyLDcgKzIxNDUsNyBAQCBwdWJsaWM6CiAgICAgSklUQ29tcGlsZXImIG1faml0OwogCiAgICAg
Ly8gVGhlIGN1cnJlbnQgbm9kZSBiZWluZyBnZW5lcmF0ZWQuCi0gICAgQmxvY2tJbmRleCBtX2Js
b2NrOworICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsK
ICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBtX3NwZWN1bGF0aW9uRGlyZWN0aW9uOwogICAgIGJv
b2wgbV9jYW5FeGl0OwpAQCAtMjE2NSwxNCArMjE1OCwxNCBAQCBwdWJsaWM6CiAgICAgVmVjdG9y
PE1hY3JvQXNzZW1ibGVyOjpMYWJlbD4gbV9vc3JFbnRyeUhlYWRzOwogICAgIAogICAgIHN0cnVj
dCBCcmFuY2hSZWNvcmQgewotICAgICAgICBCcmFuY2hSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6Okp1
bXAganVtcCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICAgICAgQnJhbmNoUmVjb3JkKE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGp1bXAsIEJhc2ljQmxvY2sqIGRlc3RpbmF0aW9uKQogICAgICAg
ICAgICAgOiBqdW1wKGp1bXApCiAgICAgICAgICAgICAsIGRlc3RpbmF0aW9uKGRlc3RpbmF0aW9u
KQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBq
dW1wOwotICAgICAgICBCbG9ja0luZGV4IGRlc3RpbmF0aW9uOworICAgICAgICBCYXNpY0Jsb2Nr
KiBkZXN0aW5hdGlvbjsKICAgICB9OwogICAgIFZlY3RvcjxCcmFuY2hSZWNvcmQsIDg+IG1fYnJh
bmNoZXM7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9p
c3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTUyNDA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTA0LDggKzEwNCw4IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBQbGFjZSBDaGVj
a1N0cnVjdHVyZSdzIGF0IFNldExvY2FsIHNpdGVzLgogICAgICAgICBJbnNlcnRpb25TZXQgaW5z
ZXJ0aW9uU2V0KG1fZ3JhcGgpOwotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7
Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJ
bmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAg
ICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNp
emUoKTsgKytpbmRleEluQmxvY2spIHsKQEAgLTIxNyw4ICsyMTcsOCBAQCBwcml2YXRlOgogICAg
IC8vIGNoZWNrcy4gRm9yIG5vdywgb25seSBjb25zaWRlciBtb25vbW9ycGhpYyBzdHJ1Y3R1cmUg
Y2hlY2tzIChvbmUgc3RydWN0dXJlKS4KICAgICB2b2lkIGlkZW50aWZ5UmVkdW5kYW50U3RydWN0
dXJlQ2hlY2tzKCkKICAgICB7ICAgIAotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4
KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAg
ICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2st
PnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKQEAgLTMyMSw4ICszMjEsOCBAQCBwcml2YXRlOgog
ICAgICAgICAKICAgICB2b2lkIGlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MoKQogICAgIHsK
LSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2Nr
KSB7CkBAIC00NTEsOCArNDUxLDggQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VHlwZUNoZWNrPgogICAgIHZvaWQgZGlzYWJsZUhvaXN0aW5nQWNyb3NzT1NSRW50cmllcygpCiAg
ICAgewotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Cisg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3Jh
cGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9j
aykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEFTU0VSVChibG9jay0+
aXNSZWFjaGFibGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNh
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1VuaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI0MDYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OCw4ICs0OCw4IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV91bmlmaWNhdGlv
blN0YXRlID09IExvY2FsbHlVbmlmaWVkKTsKICAgICAgICAgCiAgICAgICAgIC8vIEVuc3VyZSB0
aGF0IGFsbCBQaGkgZnVuY3Rpb25zIGFyZSB1bmlmaWVkLgotICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7
Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJ
bmRleF0uZ2V0KCk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFw
aC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9j
aykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEFTU0VSVChibG9jay0+
aXNSZWFjaGFibGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0
ZS5jcHAJKHJldmlzaW9uIDE1MjQwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NiwyMiArNzYsMjIgQEAgcHVibGljOgog
ICAgICAgICAvLyBpbiByZWxlYXNlIGJ1aWxkcy4KICAgICAgICAgCiAgICAgICAgIC8vIFZhbGlk
YXRlIHRoYXQgYWxsIGxvY2FsIHZhcmlhYmxlcyBhdCB0aGUgaGVhZCBvZiB0aGUgcm9vdCBibG9j
ayBhcmUgZGVhZC4KLSAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IG1fZ3JhcGgubV9ibG9ja3Nb
MF0uZ2V0KCk7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBtX2dyYXBoLmJsb2NrKDApOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcm9vdC0+dmFyaWFibGVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCk7ICsraSkKICAgICAgICAgICAgIFZfRVFVQUwoKHN0YXRpY19jYXN0PFZp
cnR1YWxSZWdpc3Rlcj4oaSksIDApLCBzdGF0aWNfY2FzdDxOb2RlKj4oMCksIHJvb3QtPnZhcmlh
Ymxlc0F0SGVhZC5sb2NhbChpKSk7CiAgICAgICAgIAogICAgICAgICAvLyBWYWxpZGF0ZSByZWYg
Y291bnRzIGFuZCB1c2VzLgogICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4gbXlSZWZD
b3VudHM7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
KyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9n
cmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJs
b2NrIHx8ICFibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2RlcygpOyArK2kp
CiAgICAgICAgICAgICAgICAgbXlSZWZDb3VudHMuYWRkKGJsb2NrLT5ub2RlKGkpLCAwKTsKICAg
ICAgICAgfQogICAgICAgICBIYXNoU2V0PE5vZGUqPiBhY2NlcHRhYmxlTm9kZXM7Ci0gICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9i
bG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3Mo
KTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrIHx8ICFibG9jay0+
aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5udW1Ob2RlcygpOyArK2kpIHsKQEAgLTE1Nyw4ICsx
NTcsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2Nr
IHx8ICFibG9jay0+aXNSZWFjaGFibGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAKQEAgLTIyNSwxNCArMjI1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhlcmUgbXVzdCBleGlzdCBhIHByZWRlY2Vzc29yIGJsb2NrIHRoYXQgaGFzIHRoaXMg
bm9kZSBpbmRleCBpbgogICAgICAgICAgICAgICAgICAgICAvLyBpdHMgdGFpbCB2YXJpYWJsZXMu
CiAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGJsb2NrLT5tX3ByZWRlY2Vzc29ycy5zaXpl
KCk7ICsraykgewotICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogcHJldkJsb2Nr
ID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9jay0+bV9wcmVkZWNlc3NvcnNba11dLmdldCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKEJsb2NrLCBibG9jay0+bV9wcmVkZWNlc3Nv
cnNba10pLCBwcmV2QmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKEJs
b2NrLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10pLCBwcmV2QmxvY2stPmlzUmVhY2hhYmxlKTsK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGJsb2NrLT5wcmVk
ZWNlc3NvcnMuc2l6ZSgpOyArK2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHByZXZCbG9jayA9IGJsb2NrLT5wcmVkZWNlc3NvcnNba107CisgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgoYmxvY2stPnByZWRlY2Vzc29yc1trXSksIHByZXZCbG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoYmxvY2stPnByZWRlY2Vzc29yc1trXSks
IHByZXZCbG9jay0+aXNSZWFjaGFibGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSog
cHJldk5vZGUgPSBwcmV2QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKGxvY2FsKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBQaGkgdGhhdCBpcyBub3QgcmVm
ZXJyaW5nIHRvICp0aGlzKiBibG9jayB0aGVuIGFsbCBwcmVkZWNlc3NvcnMKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIG11c3QgaGF2ZSB0aGF0IGxvY2FsIGF2YWlsYWJsZS4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2tJbmRleCwgQmxvY2ssIGJsb2Nr
LT5tX3ByZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChsb2NhbCwgYmxvY2ssIGJsb2NrLT5wcmVkZWNlc3NvcnNba10pLCBwcmV2Tm9k
ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByZXZOb2RlLT5vcCgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBGbHVzaDoKQEAgLTI0MywxMSArMjQzLDExIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+bV9wcmVkZWNl
c3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9jYWwsIGJsb2NrLT5tX3ByZWRlY2Vz
c29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2NhbCwg
YmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNldExvY2FsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gTW92SGludAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IE1vdkhpbnRBbmRDaGVjawpAQCAtMjU5LDcgKzI1
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMg
cG9pbnQgaXQgY2Fubm90IHJlZmVyIGludG8gdGhpcyBibG9jay4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9k
ZSksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9k
ZSksICFwcmV2QmxvY2stPmlzSW5CbG9jayhlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobm9kZSwgZWRnZSksIGZvdW5kKTsKQEAgLTI3NCwxNyArMjc0LDE3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oYXJndW1lbnRUb09wZXJh
bmQoaSkpLCBibG9ja0luZGV4KSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSkg
fHwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKS0+aGFzVmFyaWFibGVBY2Nlc3NE
YXRhKCkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVn
aXN0ZXI+KGFyZ3VtZW50VG9PcGVyYW5kKGkpKSwgYmxvY2spLCAhYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpLT5o
YXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9m
b3JtID09IFRocmVhZGVkQ1BTKQotICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihhcmd1bWVudFRvT3BlcmFuZChpKSksIGJsb2NrSW5kZXgp
LCAhYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpKSB8fCBibG9jay0+dmFyaWFibGVz
QXRUYWlsLmFyZ3VtZW50KGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGFyZ3VtZW50
VG9PcGVyYW5kKGkpKSwgYmxvY2spLCAhYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChp
KSB8fCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGkpLT5oYXNWYXJpYWJsZUFjY2Vz
c0RhdGEoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZ2V0TG9jYWxQb3Np
dGlvbnMuYXJndW1lbnQoaSkgPSBub3RTZXQ7CiAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3Np
dGlvbnMuYXJndW1lbnQoaSkgPSBub3RTZXQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2Nh
bHMoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1
YWxSZWdpc3Rlcj4oaSksIGJsb2NrSW5kZXgpLCAhYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5sb2Nh
bChpKSB8fCBibG9jay0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpLT5oYXNWYXJpYWJsZUFjY2Vz
c0RhdGEoKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxS
ZWdpc3Rlcj4oaSksIGJsb2NrKSwgIWJsb2NrLT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkgfHwg
YmxvY2stPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkp
OwogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykKLSAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
aSksIGJsb2NrSW5kZXgpLCAhYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpKSB8fCBibG9j
ay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGkpLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KGkpLCBibG9jayksICFibG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGkpIHx8IGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwubG9jYWwoaSktPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKIAogICAg
ICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLmxvY2FsKGkpID0gbm90U2V0OwogICAgICAg
ICAgICAgICAgIHNldExvY2FsUG9zaXRpb25zLmxvY2FsKGkpID0gbm90U2V0OwpAQCAtMzI0LDcg
KzMyNCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFteVJlZkNvdW50cy5n
ZXQobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKQotICAgICAgICAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrSW5kZXgpLCBnZXRMb2NhbFBvc2l0aW9ucy5v
cGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZSwgYmxvY2spLCBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpID09IG5vdFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGdldExvY2FsUG9zaXRp
b25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgpAQCAtMzQ2LDExICszNDYsMTEgQEAg
cHVibGljOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CiAgICAg
ICAgICAgICAgICAgY2hlY2tPcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICBibG9ja0luZGV4
LCBnZXRMb2NhbFBvc2l0aW9ucywgc2V0TG9jYWxQb3NpdGlvbnMsIGFyZ3VtZW50VG9PcGVyYW5k
KGkpKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2ssIGdldExvY2FsUG9zaXRpb25zLCBzZXRM
b2NhbFBvc2l0aW9ucywgYXJndW1lbnRUb09wZXJhbmQoaSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCk7ICsraSkgewogICAgICAgICAgICAgICAgIGNoZWNrT3BlcmFuZCgKLSAg
ICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgZ2V0TG9jYWxQb3NpdGlvbnMsIHNldExvY2Fs
UG9zaXRpb25zLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2ssIGdldExvY2FsUG9zaXRp
b25zLCBzZXRMb2NhbFBvc2l0aW9ucywgaSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CkBAIC0zNjAsNyArMzYwLDcgQEAgcHJpdmF0ZToKICAgICBHcmFwaER1bXBNb2RlIG1fZ3Jh
cGhEdW1wTW9kZTsKICAgICAKICAgICB2b2lkIGNoZWNrT3BlcmFuZCgKLSAgICAgICAgQmxvY2tJ
bmRleCBibG9ja0luZGV4LCBPcGVyYW5kczxzaXplX3Q+JiBnZXRMb2NhbFBvc2l0aW9ucywKKyAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2ssIE9wZXJhbmRzPHNpemVfdD4mIGdldExvY2FsUG9zaXRp
b25zLAogICAgICAgICBPcGVyYW5kczxzaXplX3Q+JiBzZXRMb2NhbFBvc2l0aW9ucywgaW50IG9w
ZXJhbmQpCiAgICAgewogICAgICAgICBpZiAoZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVy
YW5kKSA9PSBub3RTZXQpCkBAIC0zNjgsMTIgKzM2OCwxMCBAQCBwcml2YXRlOgogICAgICAgICBp
ZiAoc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVyYW5kKSA9PSBub3RTZXQpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIAogICAgICAgICBWQUxJREFU
RSgKICAgICAgICAgICAgIChibG9jay0+YXQoZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChvcGVy
YW5kKSksCiAgICAgICAgICAgICAgYmxvY2stPmF0KHNldExvY2FsUG9zaXRpb25zLm9wZXJhbmQo
b3BlcmFuZCkpLAotICAgICAgICAgICAgIGJsb2NrSW5kZXgpLAorICAgICAgICAgICAgIGJsb2Nr
KSwKICAgICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQob3BlcmFuZCkgPCBzZXRM
b2NhbFBvc2l0aW9ucy5vcGVyYW5kKG9wZXJhbmQpKTsKICAgICB9CiAgICAgCkBAIC0zODIsMTAg
KzM4MCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGRhdGFMb2dGKCJAJXUiLCBub2RlLT5pbmRleCgp
KTsKICAgICB9CiAgICAgCi0gICAgZW51bSBCbG9ja1RhZyB7IEJsb2NrIH07Ci0gICAgdm9pZCBy
ZXBvcnRWYWxpZGF0aW9uQ29udGV4dChCbG9ja1RhZywgQmxvY2tJbmRleCBibG9ja0luZGV4KQor
ICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQoQmFzaWNCbG9jayogYmxvY2spCiAgICAg
ewotICAgICAgICBkYXRhTG9nRigiQmxvY2sgIyV1IiwgYmxvY2tJbmRleCk7CisgICAgICAgIGRh
dGFMb2coIkJsb2NrICIsICpibG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFs
aWRhdGlvbkNvbnRleHQoTm9kZSogbm9kZSwgRWRnZSBlZGdlKQpAQCAtMzkzLDM5ICszOTAsMzcg
QEAgcHJpdmF0ZToKICAgICAgICAgZGF0YUxvZyhub2RlLCAiIC0+ICIsIGVkZ2UpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250ZXh0KFZpcnR1YWxSZWdpc3RlciBs
b2NhbCwgQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNv
bnRleHQoVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0g
ICAgICAgIGRhdGFMb2dGKCJyJWQgaW4gQmxvY2sgIyV1IiwgbG9jYWwsIGJsb2NrSW5kZXgpOwor
ICAgICAgICBkYXRhTG9nKCJyIiwgc3RhdGljX2Nhc3Q8aW50Pihsb2NhbCksICIgaW4gQmxvY2sg
IiwgKmJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4
dCgKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCbG9ja0luZGV4IHNvdXJjZUJsb2Nr
SW5kZXgsIEJsb2NrVGFnLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uQmxvY2tJbmRleCkKKyAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgQmFzaWNC
bG9jayogZGVzdGluYXRpb25CbG9jaykKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJyJWQgaW4g
QmxvY2sgIyV1IC0+ICMldSIsIGxvY2FsLCBzb3VyY2VCbG9ja0luZGV4LCBkZXN0aW5hdGlvbkJs
b2NrSW5kZXgpOworICAgICAgICBkYXRhTG9nKCJyIiwgc3RhdGljX2Nhc3Q8aW50Pihsb2NhbCks
ICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrLCAiIC0+ICIsICpkZXN0aW5hdGlvbkJsb2NrKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCbG9ja0luZGV4IHNvdXJjZUJsb2NrSW5kZXgsIE5vZGUq
IHByZXZOb2RlKQorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sqIHNv
dXJjZUJsb2NrLCBOb2RlKiBwcmV2Tm9kZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2dGKCJAJXUg
Zm9yIHIlZCBpbiBCbG9jayAjJXUiLCBwcmV2Tm9kZS0+aW5kZXgoKSwgbG9jYWwsIHNvdXJjZUJs
b2NrSW5kZXgpOworICAgICAgICBkYXRhTG9nKHByZXZOb2RlLCAiIGZvciByIiwgc3RhdGljX2Nh
c3Q8aW50Pihsb2NhbCksICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrKTsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAgTm9kZSogbm9kZSwg
QmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRleHQo
Tm9kZSogbm9kZSwgQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBkYXRhTG9nRigi
QCV1IGluIEJsb2NrICMldSIsIG5vZGUtPmluZGV4KCksIGJsb2NrSW5kZXgpOworICAgICAgICBk
YXRhTG9nKG5vZGUsICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAgTm9kZSogbm9kZSwgTm9kZSogbm9k
ZTIsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB2b2lkIHJlcG9ydFZhbGlkYXRpb25Db250
ZXh0KE5vZGUqIG5vZGUsIE5vZGUqIG5vZGUyLCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0g
ICAgICAgIGRhdGFMb2dGKCJAJXUgYW5kIEAldSBpbiBCbG9jayAjJXUiLCBub2RlLT5pbmRleCgp
LCBub2RlMi0+aW5kZXgoKSwgYmxvY2tJbmRleCk7CisgICAgICAgIGRhdGFMb2cobm9kZSwgIiBh
bmQgIiwgbm9kZTIsICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAgTm9kZSogbm9kZSwgQmxvY2tJbmRl
eCBibG9ja0luZGV4LCBOb2RlKiBleHBlY3RlZE5vZGUsIEVkZ2UgaW5jb21pbmdFZGdlKQorICAg
ICAgICBOb2RlKiBub2RlLCBCYXNpY0Jsb2NrKiBibG9jaywgTm9kZSogZXhwZWN0ZWROb2RlLCBF
ZGdlIGluY29taW5nRWRnZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2cobm9kZSwgIiBpbiBCbG9j
ayAjIiwgYmxvY2tJbmRleCwgIiwgc2VhcmNoaW5nIGZvciAiLCBleHBlY3RlZE5vZGUsICIgZnJv
bSAiLCBpbmNvbWluZ0VkZ2UpOworICAgICAgICBkYXRhTG9nKG5vZGUsICIgaW4gQmxvY2sgIiwg
KmJsb2NrLCAiLCBzZWFyY2hpbmcgZm9yICIsIGV4cGVjdGVkTm9kZSwgIiBmcm9tICIsIGluY29t
aW5nRWRnZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZHVtcEdyYXBoSWZBcHByb3ByaWF0ZSgp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTI0MDYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDggQEAgcHVibGljOgogI2lmIERG
R19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgYm9vbCBuZWVkc05l
d0xpbmUgPSBmYWxzZTsKICNlbmRpZgotICAgICAgICBmb3IgKHNpemVfdCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsK
LSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0lu
ZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5k
ZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAg
IGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAo
IWJsb2NrLT5pc1JlYWNoYWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuY3BwCShyZXZpc2lvbiAxNTI0MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDcgKzEzNSw4IEBAIHZv
aWQgV29ya2xpc3Q6OnJlbW92ZUFsbFJlYWR5UGxhbnNGb3JWTSgKICAgICAgICAgaWYgKCFwbGFu
LT5pc0NvbXBpbGVkKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG15UmVhZHlQbGFu
cy5hcHBlbmQocGxhbik7Ci0gICAgICAgIG1fcmVhZHlQbGFuc1tpLS1dID0gbV9yZWFkeVBsYW5z
LnRha2VMYXN0KCk7CisgICAgICAgIG1fcmVhZHlQbGFuc1tpLS1dID0gbV9yZWFkeVBsYW5zLmxh
c3QoKTsKKyAgICAgICAgbV9yZWFkeVBsYW5zLnJlbW92ZUxhc3QoKTsKICAgICAgICAgbV9wbGFu
cy5yZW1vdmUocGxhbi0+a2V5KCkpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE1MjQwNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc0LDggKzE3NCw4IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkK
IAogYm9vbCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkKIHsKLSAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IGdyYXBoLm1fYmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleC0tOykgewotICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgp
OworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gZ3JhcGgubnVtQmxvY2tzKCk7IGJs
b2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBncmFwaC5ibG9jayhi
bG9ja0luZGV4KTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTI0MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTEgKzYxLDEx
IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Z0bFN0YXRlKHN0YXRlKQogICAgICAgICAsIG1faGVh
cHMoc3RhdGUuY29udGV4dCkKICAgICAgICAgLCBtX291dChzdGF0ZS5jb250ZXh0KQotICAgICAg
ICAsIG1fbG9jYWxzQm9vbGVhbihPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLm1fYmxvY2tzWzBd
LT52YXJpYWJsZXNBdEhlYWQpCi0gICAgICAgICwgbV9sb2NhbHMzMihPcGVyYW5kc0xpa2UsIHN0
YXRlLmdyYXBoLm1fYmxvY2tzWzBdLT52YXJpYWJsZXNBdEhlYWQpCi0gICAgICAgICwgbV9sb2Nh
bHM2NChPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLm1fYmxvY2tzWzBdLT52YXJpYWJsZXNBdEhl
YWQpCi0gICAgICAgICwgbV9sb2NhbHNEb3VibGUoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5t
X2Jsb2Nrc1swXS0+dmFyaWFibGVzQXRIZWFkKQotICAgICAgICAsIG1fdmFsdWVTb3VyY2VzKE9w
ZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKKyAg
ICAgICAgLCBtX2xvY2Fsc0Jvb2xlYW4oT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9jaygw
KS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1fbG9jYWxzMzIoT3BlcmFuZHNMaWtlLCBz
dGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1fbG9jYWxz
NjQoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQor
ICAgICAgICAsIG1fbG9jYWxzRG91YmxlKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGguYmxvY2so
MCktPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAgICAgLCBtX3ZhbHVlU291cmNlcyhPcGVyYW5kc0xp
a2UsIHN0YXRlLmdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpCiAgICAgICAgICwgbV9s
YXN0U2V0T3BlcmFuZChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQogICAgICAgICAs
IG1fZXhpdFRodW5rR2VuZXJhdG9yKHN0YXRlKQogICAgICAgICAsIG1fc3RhdGUoc3RhdGUuZ3Jh
cGgpCkBAIC05OSwyMyArOTksMjMgQEAgcHVibGljOgogICAgICAgICBtX3RhZ1R5cGVOdW1iZXIg
PSBtX291dC5jb25zdEludDY0KFRhZ1R5cGVOdW1iZXIpOwogICAgICAgICBtX3RhZ01hc2sgPSBt
X291dC5jb25zdEludDY0KFRhZ01hc2spOwogICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7
ICsrYmxvY2tJbmRleCkgewotICAgICAgICAgICAgbV9oaWdoQmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsK
KyAgICAgICAgICAgIG1faGlnaEJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAg
ICAgICAgICAgIGlmICghbV9oaWdoQmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBtX2Jsb2Nrcy5hZGQobV9oaWdoQmxvY2ssIEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiQmxvY2sgIyIsIGJsb2NrSW5kZXgpKSk7CisgICAgICAgICAgICBtX2Jsb2Nrcy5hZGQobV9o
aWdoQmxvY2ssIEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQmxvY2sgIiwgKm1faGlnaEJsb2NrKSkp
OwogICAgICAgICAgICAgYWRkRmx1c2hlZExvY2FsT3BSb290cygpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBjbG9zZU92ZXJGbHVzaGVkTG9jYWxPcHMoKTsKICAgICAgICAgCi0gICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG1fYXJndW1lbnRDaGVja3MsIGxvd0Jsb2NrKDApKTsKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obV9hcmd1bWVudENoZWNrcywgbG93QmxvY2sobV9ncmFwaC5ibG9j
aygwKSkpOwogCiAgICAgICAgIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMoKTsKICAgICAgICAg
Ci0gICAgICAgIG1fb3V0Lmp1bXAobG93QmxvY2soMCkpOworICAgICAgICBtX291dC5qdW1wKGxv
d0Jsb2NrKG1fZ3JhcGguYmxvY2soMCkpKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
OyArK2Jsb2NrSW5kZXgpCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkKICAgICAgICAg
ICAgIGNvbXBpbGVCbG9jayhibG9ja0luZGV4KTsKICAgICAgICAgCiAgICAgICAgIC8vIEFuZCBu
b3cgY29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIGJsb2NrLgpAQCAtMjE0LDE1ICsyMTQsMTUg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVCbG9jayhCbG9ja0luZGV4IGJsb2Nr
SW5kZXgpCiAgICAgewotICAgICAgICBtX2hpZ2hCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7CisgICAgICAgIG1faGlnaEJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKICAgICAgICAgaWYgKCFtX2hpZ2hCbG9jaykKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxvd0Jsb2NrID0gbV9ibG9ja3MuZ2V0KG1f
aGlnaEJsb2NrKTsKICAgICAgICAgCiAgICAgICAgIG1fbmV4dEhpZ2hCbG9jayA9IDA7Ci0gICAg
ICAgIGZvciAoQmxvY2tJbmRleCBuZXh0QmxvY2tJbmRleCA9IGJsb2NrSW5kZXggKyAxOyBuZXh0
QmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK25leHRCbG9ja0luZGV4KSB7
Ci0gICAgICAgICAgICBtX25leHRIaWdoQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW25leHRCbG9j
a0luZGV4XS5nZXQoKTsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IG5leHRCbG9ja0luZGV4ID0g
YmxvY2tJbmRleCArIDE7IG5leHRCbG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytu
ZXh0QmxvY2tJbmRleCkgeworICAgICAgICAgICAgbV9uZXh0SGlnaEJsb2NrID0gbV9ncmFwaC5i
bG9jayhuZXh0QmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAobV9uZXh0SGlnaEJsb2NrKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNTgyLDE1ICsxNTgyLDE1IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlSnVtcCgpCiAgICAgewotICAgICAgICBt
X291dC5qdW1wKGxvd0Jsb2NrKG1fbm9kZS0+dGFrZW5CbG9ja0luZGV4KCkpKTsKKyAgICAgICAg
bV9vdXQuanVtcChsb3dCbG9jayhtX25vZGUtPnRha2VuQmxvY2soKSkpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGNvbXBpbGVCcmFuY2goKQogICAgIHsKICAgICAgICAgbV9vdXQuYnJhbmNoKAog
ICAgICAgICAgICAgYm9vbGlmeShtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgIGxvd0Js
b2NrKG1fbm9kZS0+dGFrZW5CbG9ja0luZGV4KCkpLAotICAgICAgICAgICAgbG93QmxvY2sobV9u
b2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKSkpOworICAgICAgICAgICAgbG93QmxvY2sobV9ub2Rl
LT50YWtlbkJsb2NrKCkpLAorICAgICAgICAgICAgbG93QmxvY2sobV9ub2RlLT5ub3RUYWtlbkJs
b2NrKCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlU3dpdGNoKCkKQEAgLTI0NTQs
OSArMjQ1NCw5IEBAIHByaXZhdGU6CiAgICAgICAgIHVzZShlZGdlKTsKICAgICB9CiAgICAgCi0g
ICAgTEJhc2ljQmxvY2sgbG93QmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIExCYXNp
Y0Jsb2NrIGxvd0Jsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fYmxvY2tzLmdldChtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpKTsKKyAgICAg
ICAgcmV0dXJuIG1fYmxvY2tzLmdldChibG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgaW5p
dGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKCkK
</data>
<flag name="review"
          id="227769"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>