<?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>86905</bug_id>
          
          <creation_ts>2012-05-18 15:03:29 -0700</creation_ts>
          <short_desc>DFG CFA should record if a node can OSR exit</short_desc>
          <delta_ts>2012-05-24 06:14:57 -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>87385</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>628121</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-18 15:03:29 -0700</bug_when>
    <thetext>This will allow for easier understanding of backward flow, after CFA runs, which should in turn make it easier to implement redundant store elimination.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628124</commentid>
    <comment_count>1</comment_count>
      <attachid>142795</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-18 15:05:47 -0700</bug_when>
    <thetext>Created attachment 142795
it begins

This is a work in progress and will take a while to get right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628303</commentid>
    <comment_count>2</comment_count>
      <attachid>142835</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-18 17:59:20 -0700</bug_when>
    <thetext>Created attachment 142835
it&apos;s starting to do things

But it doesn&apos;t completely work yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628543</commentid>
    <comment_count>3</comment_count>
      <attachid>142892</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-19 21:38:45 -0700</bug_when>
    <thetext>Created attachment 142892
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628555</commentid>
    <comment_count>4</comment_count>
      <attachid>142895</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-20 00:35:28 -0700</bug_when>
    <thetext>Created attachment 142895
the patch

Found a few more places where we had unnecessary speculation checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628578</commentid>
    <comment_count>5</comment_count>
      <attachid>142895</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-05-20 06:08:37 -0700</bug_when>
    <thetext>Comment on attachment 142895
the patch

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

I&apos;m too tired to actually finish this review (and i&apos;m concerned about my ability to follow some of it right now), so i&apos;ll finish up/re-review later today.  I only got about half way through and it mostly looks fine, aside from your attempts to save columns ;p

I think it might be worth waiting until you&apos;ve got the dfgopt branch merged completely to trunk, as I think we&apos;ve dropped ByteArray from the tree, so there&apos;s a bit of code that will just disappear from this patch.

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:441
&gt; +            speculateInt32Binary(
&gt; +                node, !nodeCanTruncateInteger(node.arithNodeFlags()));

one line we don&apos;t have an 80 column limit :P

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:473
&gt; +            speculateInt32Binary(
&gt; +                node, !nodeCanTruncateInteger(node.arithNodeFlags()));

and again

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:514
&gt; +            speculateInt32Binary(
&gt; +                node,
&gt; +                !nodeCanTruncateInteger(node.arithNodeFlags())
&gt; +                || !nodeCanIgnoreNegativeZero(node.arithNodeFlags()));

see how bad this is at one line.  I&apos;d prefer a single line, but this may be excessive

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:555
&gt; +        if (Node::shouldSpeculateInteger(
&gt; +                m_graph[node.child1()], m_graph[node.child2()])
&gt; +            &amp;&amp; node.canSpeculateInteger()) {

one line

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:575
&gt; +        if (m_graph[node.child1()].shouldSpeculateInteger()
&gt; +            &amp;&amp; node.canSpeculateInteger()) {
&gt; +            speculateInt32Unary(node, true);

one line.  Are you doing this out of some desire to punish me?  What did i ever do to you? :-(

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:797
&gt; +        if (Node::shouldSpeculateInteger(
&gt; +                m_graph[node.child1()], m_graph[node.child2()])) {

one line

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:802
&gt; +        if (Node::shouldSpeculateNumber(
&gt; +                m_graph[node.child1()], m_graph[node.child2()])) {

one line

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:807
&gt; +        if (Node::shouldSpeculateFinalObject(
&gt; +                m_graph[node.child1()], m_graph[node.child2()])) {

one line

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:810
&gt; +                !isFinalObjectPrediction(forNode(node.child1()).m_type)
&gt; +                || !isFinalObjectPrediction(forNode(node.child2()).m_type));

i&apos;d prefer one line here i think

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:819
&gt; +        if (Node::shouldSpeculateArray(
&gt; +                m_graph[node.child1()], m_graph[node.child2()])) {
&gt; +            node.setCanExit(
&gt; +                !isArrayPrediction(forNode(node.child1()).m_type)
&gt; +                || !isArrayPrediction(forNode(node.child2()).m_type));

less lines, moar columns!!!

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:1065
&gt; +        node.setCanExit(
&gt; +            !isCellPrediction(forNode(node.child1()).m_type)
&gt; +            || !isCellPrediction(forNode(node.child2()).m_type));

and again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630505</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-22 10:18:54 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/117931</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632447</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-23 23:24:16 -0700</bug_when>
    <thetext>Merged in http://trac.webkit.org/changeset/118325</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142795</attachid>
            <date>2012-05-18 15:05:47 -0700</date>
            <delta_ts>2012-05-18 17:59:20 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>recordosrexit_patch_1.diff</filename>
            <type>text/plain</type>
            <size>26959</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3NjM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBA
CisyMDEyLTA1LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIENGQSBzaG91bGQgcmVjb3JkIGlmIGEgbm9kZSBjYW4gT1NSIGV4aXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2OTA1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dy
ZXNzLgorCisgICAgICAgICogYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6aXNBbnlQcmVkaWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFN0YXRlOjpzcGVjdWxhdGVJbnQzMlVuYXJ5KToKKyAgICAgICAgKEFic3RyYWN0
U3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnNwZWN1bGF0ZU51bWJl
clVuYXJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpzcGVjdWxhdGVCb29s
ZWFuVW5hcnkpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnNwZWN1bGF0ZUlu
dDMyQmluYXJ5KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Om1lcmdlRmxhZ3MpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmZpbHRlckZsYWdz
KToKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldENhbkV4aXQp
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNhbkV4aXQpOgorICAgICAgICAqIGRmZy9ERkdO
b2RlRmxhZ3MuaDoKKyAgICAgICAgKERGRyk6CisKIDIwMTItMDUtMTcgIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYSB0eXBvIHRoYXQgR2VvZmYgbm90aWNl
ZCBidXQgdGhhdCBJIGZvcmdvdCB0byBmaXggaW4gdGhlIGxhc3QgY29tbWl0LgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCShyZXZpc2lv
biAxMTc2MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3MiwxMiBAQCBzdGF0aWMgY29uc3QgUHJlZGlj
dGVkVHlwZSBGaXhlZEluZGV4ZWRTCiAKIHR5cGVkZWYgYm9vbCAoKlByZWRpY3Rpb25DaGVja2Vy
KShQcmVkaWN0ZWRUeXBlKTsKIAorLy8gRHVtbXkgcHJlZGljdGlvbiBjaGVja2VyLCBvbmx5IHVz
ZWZ1bCBpZiBzb21lb25lIGluc2lzdHMgb24gcmVxdWlyaW5nIGEgcHJlZGljdGlvbiBjaGVja2Vy
LgoraW5saW5lIGJvb2wgaXNBbnlQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUpCit7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKIGlubGluZSBib29sIGlzQ2VsbFByZWRpY3Rpb24oUHJlZGljdGVkVHlw
ZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gISEodmFsdWUgJiBQcmVkaWN0Q2VsbCkgJiYgISh2YWx1
ZSAmIH5QcmVkaWN0Q2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDExNzYxMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Niw0
MSArMjY2LDU3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBXZWFrSlNDb25zdGFudDogewogICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4
KSk7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgaWYgKG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwor
ICAgICAgICBib29sIGNhbkV4aXQgPSBmYWxzZTsKKyAgICAgICAgY2FuRXhpdCB8PSB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKSA9PSBQcmVkaWN0Tm9uZTsKKyAgICAgICAgaWYgKHZh
cmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpID0gbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3ZhcmlhYmxlcy5vcGVyYW5k
KHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7CisgICAgICAgICAgICBpZiAodmFsdWUuaXND
bGVhcigpKQorICAgICAgICAgICAgICAgIGNhbkV4aXQgfD0gdHJ1ZTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KSA9IHZhbHVlOworICAgICAgICB9CisgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChjYW5FeGl0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNl
IEdldExvY2FsVW5saW5rZWQ6IHsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3Ao
KTsKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIGlmIChub2RlLnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgIGlmIChub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgp
KSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVt
YmVyKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwogICAgICAgICAg
ICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpLnNldChQcmVkaWN0RG91YmxlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBQcmVkaWN0
ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1bWVu
dEF3YXJlUHJlZGljdGlvbigpOwogICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGlj
dGVkVHlwZSkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0SW50MzIpOwotICAgICAgICBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRU
eXBlKSkKKyAgICAgICAgICAgIHNwZWN1YWx0ZUludDMyVW5hcnkobm9kZSk7CisgICAgICAgIGVs
c2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CisgICAgICAgICAgICBu
b2RlLnNldENhbkV4aXQoIWlzQXJyYXlQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0QXJyYXkpOwotICAgICAgICBlbHNlIGlmIChpc0J5dGVBcnJheVByZWRpY3Rpb24ocHJlZGlj
dGVkVHlwZSkpCisgICAgICAgIH0gZWxzZSBpZiAoaXNCeXRlQXJyYXlQcmVkaWN0aW9uKHByZWRp
Y3RlZFR5cGUpKSB7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzQnl0ZUFycmF5UHJl
ZGljdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEJ5dGVBcnJheSk7Ci0gICAgICAgIGVs
c2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpCi0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgIH0g
ZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgCiAgICAgICAgIG1fdmFyaWFibGVzLm9w
ZXJhbmQobm9kZS5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtMzA5LDYgKzMyNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICAvLyBBc3NlcnQgdGhhdCB0
aGUgc3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNldC4KICAgICAgICAgQVNTRVJUKCFtX2Js
b2NrLT52YWx1ZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpLmlzQ2xlYXIoKSk7CisgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgY2FzZSBCaXRBbmQ6CkBAIC0zNDUsMTAgKzM2MiwxMCBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1
ZTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0SW50MzIpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0
SW50MzIpOworICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlKTsKICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICBicmVhazsKICAgICB9
CkBAIC0zNTksMTIgKzM3NiwxNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgICAgICAgICBBU1NFUlQoY2hpbGQuaXNJbnQzMigpKTsKICAgICAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoSlNWYWx1ZShjaGlsZC5hc1VJbnQzMigpKSk7CiAgICAg
ICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAo
IW5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICBpZiAoIW5vZGUuY2FuU3BlY3Vs
YXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRp
Y3REb3VibGUpOwotICAgICAgICBlbHNlCisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOworICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApAQCAtMzc2LDE0ICsz
OTcsMTcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoSlNWYWx1
ZShKU0M6OnRvSW50MzIoY2hpbGQuYXNEb3VibGUoKSkpKTsKICAgICAgICAgICAgIG1fZm91bmRD
b25zdGFudHMgPSB0cnVlOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBzcGVjdWxhdGVJ
bnQzMlVuYXJ5KG5vZGUpOwogICAgICAgICBlbHNlIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCld
LnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJV
bmFyeShub2RlKTsKICAgICAgICAgZWxzZSBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91
bGRTcGVjdWxhdGVCb29sZWFuKCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5h
cnkobm9kZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQz
Mik7CiAgICAgICAgIGJyZWFrOwpAQCAtMzk0LDkgKzQxOCwxMCBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051
bWJlcigpKSB7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KEpTVmFsdWUoSlNW
YWx1ZTo6RW5jb2RlQXNEb3VibGUsIGNoaWxkLmFzTnVtYmVyKCkpKTsKICAgICAgICAgICAgIG1f
Zm91bmRDb25zdGFudHMgPSB0cnVlOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBzcGVjdWxhdGVOdW1iZXJV
bmFyeShub2RlKTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91Ymxl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDA4LDI3ICs0MzMsMjkgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAobGVmdCAmJiByaWdo
dCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChKU1ZhbHVlKGxlZnQuYXNOdW1iZXIoKSArIHJpZ2h0LmFz
TnVtYmVyKCkpKTsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOworICAgICAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkp
IHsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQz
Mik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50
MzIpOworICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCisgICAgICAgICAgICAgICAg
bm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSk7CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
TnVtYmVyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKSB7
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVy
KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3ROdW1i
ZXIpOworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwogICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gVmFsdWVBZGQpIHsKICAg
ICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RTdHJpbmcgfCBQcmVkaWN0SW50MzIgfCBQcmVk
aWN0TnVtYmVyKTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAvLyBXZSBkb24ndCBoYW5kbGUgdGhpcyB5
ZXQuIDotKAogICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAgLTQzOCwx
NiArNDY1LDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVt
YmVyKCkpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoSlNWYWx1ZShsZWZ0
LmFzTnVtYmVyKCkgLSByaWdodC5hc051bWJlcigpKSk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29u
c3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAobV9ncmFwaC5hZGRTaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmlu
YXJ5KAorICAgICAgICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUu
YXJpdGhOb2RlRmxhZ3MoKSkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQ
cmVkaWN0SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7Ci0gICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBzcGVjdWxh
dGVOdW1iZXJCaW5hcnkobm9kZSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJl
ZGljdERvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ1NywxNCArNDg0LDE2IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgaWYgKGNo
aWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoSlNWYWx1ZSgtY2hpbGQuYXNOdW1iZXIoKSkpOwogICAgICAgICAgICAgbV9mb3VuZENv
bnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZ3JhcGgubmVnYXRlU2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMy
VW5hcnkoCisgICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9k
ZS5hcml0aE5vZGVGbGFncygpKSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KFByZWRpY3RJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgc3Bl
Y3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
UHJlZGljdERvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ3NSwxNiArNTA0LDE4
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgaWYg
KGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoSlNWYWx1ZShsZWZ0LmFzTnVtYmVy
KCkgKiByaWdodC5hc051bWJlcigpKSk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0g
dHJ1ZTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0SW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0
ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyQmluYXJ5KAorICAg
ICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgIW5vZGVDYW5UcnVuY2F0ZUludGVn
ZXIobm9kZS5hcml0aE5vZGVGbGFncygpKQorICAgICAgICAgICAgICAgIHx8ICFub2RlQ2FuSWdu
b3JlTmVnYXRpdmVaZXJvKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpOwogICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51
bWJlcik7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3ROdW1i
ZXIpOworICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7CiAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTUxNiwxNiArNTQ3LDE3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IG1fZm91bmRDb25zdGFudHMgPSB0cnVlOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZh
bHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9k
ZS5jaGlsZDIoKV0pICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwotICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAg
aWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoCisgICAgICAgICAgICAgICAgbV9ncmFw
aFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkKKyAgICAgICAgICAgICYm
IG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVJbnQz
MkJpbmFyeShub2RlLCB0cnVlKTsgLy8gZm9yY2luZyBjYW4tZXhpdCwgd2hpY2ggaXMgYSBiaXQg
b24gdGhlIGNvbnNlcnZhdGl2ZSBzaWRlLgogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7Ci0gICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBz
cGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoUHJlZGljdERvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTUzNSwxNCArNTY3
LDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
aWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoSlNWYWx1ZShmYWJzKGNoaWxkLmFzTnVtYmVyKCkpKSk7CiAgICAgICAgICAg
ICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgJiYgbm9kZS5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKQorICAgICAgICAgICAgJiYgbm9kZS5jYW5TcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSwgdHJ1ZSk7
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9k
ZSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KQEAgLTU1Miw5ICs1ODYsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1i
ZXIoKSkgewogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChKU1ZhbHVlKHNxcnQo
Y2hpbGQuYXNOdW1iZXIoKSkpKTsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVl
OworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRp
Y3ROdW1iZXIpOworICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtNTYzLDE5ICs1OTgsMjYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChjaGlsZENvbnN0KSB7CiAgICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KGpzQm9vbGVhbighY2hpbGRDb25zdC50b0Jvb2xlYW4oKSkp
OworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XTsKICAgICAgICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24oY2hpbGQucHJlZGljdGlvbigpKSkK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RCb29sZWFu
KTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90
aGVyKCkpCisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7CisgICAgICAg
IGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKSB7Cisg
ICAgICAgICAgICBub2RlLnNldENhbkV4aXQoCisgICAgICAgICAgICAgICAgIWlzRmluYWxPYmpl
Y3RPck90aGVyUHJlZGljdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0
IHwgUHJlZGljdE90aGVyKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRl
QXJyYXlPck90aGVyKCkpCisgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRl
QXJyYXlPck90aGVyKCkpIHsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAg
ICAgICAgICAhaXNBcnJheU9yT3RoZXJQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0QXJyYXkgfCBQcmVkaWN0T3RoZXIpOwotICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7CiAg
ICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAg
ICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChQcmVkaWN0Qm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU4Niw2ICs2Mjgs
NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBJ
c1N0cmluZzoKICAgICBjYXNlIElzT2JqZWN0OgogICAgIGNhc2UgSXNGdW5jdGlvbjogeworICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQpIHsKICAgICAg
ICAgICAgIGJvb2wgZm91bmRDb25zdGFudCA9IHRydWU7CkBAIC02NDgsNiArNjkxLDcgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7
CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgCkBAIC02NTYsNDcgKzcwMCw3MCBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIE5vZGUmIGxlZnQgPSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldOwogICAgICAgICBOb2RlJiByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDIoKV07CiAgICAgICAgIFByZWRpY3RlZFR5cGUgZmlsdGVyOwotICAgICAgICBpZiAoTm9kZTo6
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihsZWZ0LCByaWdodCkpCisgICAgICAgIFByZWRpY3Rpb25D
aGVja2VyIGNoZWNrZXI7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KGxlZnQsIHJpZ2h0KSkgewogICAgICAgICAgICAgZmlsdGVyID0gUHJlZGljdEludDMyOwotICAg
ICAgICBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobGVmdCwgcmlnaHQpKQor
ICAgICAgICAgICAgY2hlY2tlciA9IGlzSW50MzJQcmVkaWN0aW9uOworICAgICAgICB9IGVsc2Ug
aWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihsZWZ0LCByaWdodCkpIHsKICAgICAgICAg
ICAgIGZpbHRlciA9IFByZWRpY3ROdW1iZXI7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUub3AoKSA9
PSBDb21wYXJlRXEpIHsKKyAgICAgICAgICAgIGNoZWNrZXIgPSBpc051bWJlclByZWRpY3Rpb247
CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCgpID09IENvbXBhcmVFcSkgewogICAgICAgICAg
ICAgaWYgKChtX2dyYXBoLmlzQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKQogICAgICAg
ICAgICAgICAgICAmJiBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5k
ZXgoKSkuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgfHwgKG1fZ3JhcGguaXNDb25zdGFudChu
b2RlLmNoaWxkMigpLmluZGV4KCkpCiAgICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgudmFs
dWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKS5pc051bGwoKSkpIHsKICAgICAg
ICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyB3b24ndCBjbG9iYmVyIHRoZSB3b3JsZC4g
QnV0IHRoYXQncyBhbGwgd2Uga25vdy4KKyAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QobGVm
dCwgcmlnaHQpKQorICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2Jq
ZWN0KGxlZnQsIHJpZ2h0KSkgewogICAgICAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RGaW5h
bE9iamVjdDsKLSAgICAgICAgICAgIGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFycmF5
KGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICBjaGVja2VyID0gaXNGaW5hbE9iamVjdFBy
ZWRpY3Rpb247CisgICAgICAgICAgICB9IGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFy
cmF5KGxlZnQsIHJpZ2h0KSkgewogICAgICAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RBcnJh
eTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGxlZnQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3Qo
KSAmJiByaWdodC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkgeworICAgICAg
ICAgICAgICAgIGNoZWNrZXIgPSBpc0FycmF5UHJlZGljdGlvbjsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAobGVmdC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpICYmIHJpZ2h0LnNob3VsZFNw
ZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKSB7CisgICAgICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KAorICAgICAgICAgICAgICAgICAgICAhaXNGaW5hbE9iamVjdFByZWRpY3Rpb24oZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICAgICAgICAgIHx8ICFpc0Zp
bmFsT2JqZWN0T3JPdGhlclByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUp
KTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0
RmluYWxPYmplY3QpOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFByZWRpY3RGaW5hbE9iamVjdCB8IFByZWRpY3RPdGhlcik7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0LnNob3VsZFNwZWN1bGF0ZUZpbmFs
T2JqZWN0KCkgJiYgbGVmdC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkgewor
ICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgICAgICAgICAgICAgIWlz
RmluYWxPYmplY3RPck90aGVyUHJlZGljdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkKKyAgICAgICAgICAgICAgICAgICAgfHwgIWlzRmluYWxPYmplY3RQcmVkaWN0aW9uKGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSk7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0IHwgUHJlZGljdE90aGVyKTsKICAg
ICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0RmluYWxP
YmplY3QpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSBlbHNlIGlmIChs
ZWZ0LnNob3VsZFNwZWN1bGF0ZUFycmF5KCkgJiYgcmlnaHQuc2hvdWxkU3BlY3VsYXRlQXJyYXlP
ck90aGVyKCkpIHsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0RmluYWxPYmplY3QpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDIoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCB8IFByZWRpY3RPdGhlcik7CisgICAgICAg
ICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAgICAgICAgICAgICAgICAhaXNBcnJheVBy
ZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICAgICAg
ICAgIHx8ICFpc0FycmF5T3JPdGhlclByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMigpKS5t
X3R5cGUpKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQ
cmVkaWN0QXJyYXkpOworICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFByZWRpY3RBcnJheSB8IFByZWRpY3RPdGhlcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0LnNob3VsZFNwZWN1bGF0ZUFycmF5KCkgJiYg
bGVmdC5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkgewotICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCB8IFByZWRpY3RP
dGhlcik7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJl
ZGljdEZpbmFsT2JqZWN0KTsKKyAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoCisgICAg
ICAgICAgICAgICAgICAgICFpc0FycmF5T3JPdGhlclByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICAgICAgICAgIHx8ICFpc0FycmF5UHJlZGljdGlv
bihmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpOworICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSB8IFByZWRpY3RPdGhlcik7Cisg
ICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEFycmF5
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgZmlsdGVyID0gUHJlZGljdFRvcDsKKyAgICAgICAgICAgICAgICBjaGVja2VyID0g
aXNBbnlQcmVkaWN0aW9uOwogICAgICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4
SW5CbG9jayk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBm
aWx0ZXIgPSBQcmVkaWN0VG9wOworICAgICAgICAgICAgY2hlY2tlciA9IGlzQW55UHJlZGljdGlv
bjsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAg
IH0KKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAgICAgICAgIWNoZWNrZXIoZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICB8fCAhY2hlY2tlcihmb3JOb2Rl
KG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihmaWx0ZXIpOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihm
aWx0ZXIpOwogICAgICAgICBicmVhazsKQEAgLTcwOCw5ICs3NzUsNTMgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAobGVmdCAmJiByaWdodCAm
JiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChqc0Jvb2xlYW4obGVmdC5hc051bWJlcigpID09IHJpZ2h0LmFz
TnVtYmVyKCkpKTsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOworICAgICAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEJvb2xlYW4pOworICAg
ICAgICBpZiAobV9ncmFwaC5pc0pTQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpKSkgewor
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9k
ZS5jaGlsZDEoKS5pbmRleCgpKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSAm
JiAhdmFsdWUuaXNTdHJpbmcoKSkgeworICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG1fZ3JhcGguaXNKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkp
IHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50
KG5vZGUuY2hpbGQyKCkuaW5kZXgoKSk7CisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVy
KCkgJiYgIXZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKAorICAgICAgICAg
ICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKSB7
CisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIo
CisgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNo
aWxkMigpXSkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlckJpbmFyeShub2RlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVj
dWxhdGVGaW5hbE9iamVjdCgKKyAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCld
LCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkgeworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KAorICAgICAgICAgICAgICAgICFpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbihmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkKKyAgICAgICAgICAgICAgICB8fCAhaXNGaW5hbE9iamVjdFByZWRp
Y3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCk7CisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0RmluYWxPYmplY3QpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1
bGF0ZUFycmF5KAorICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3Jh
cGhbbm9kZS5jaGlsZDIoKV0pKSB7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoCisgICAg
ICAgICAgICAgICAgIWlzQXJyYXlQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKQorICAgICAgICAgICAgICAgIHx8ICFpc0FycmF5UHJlZGljdGlvbihmb3JOb2RlKG5vZGUu
Y2hpbGQyKCkpLm1fdHlwZSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdEFycmF5KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIApAQCAtNzE4LDYgKzgyOSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdFN0
cmluZyk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQz
Mik7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAg
ICAgLy8gRklYTUUKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRl
LmgJKHJldmlzaW9uIDExNzYxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNiArMjE0LDUwIEBAIHByaXZhdGU6
CiAgICAgCiAgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3MoQWJzdHJh
Y3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIHNvdXJjZSwgTm9kZUluZGV4IGRl
c3RpbmF0aW9uTm9kZUluZGV4LCBOb2RlSW5kZXggc291cmNlTm9kZUluZGV4KTsKICAgICAKKyAg
ICB2b2lkIHNwZWN1bGF0ZUludDMyVW5hcnkoTm9kZSYgbm9kZSwgYm9vbCBmb3JjZUNhbkV4aXQg
PSBmYWxzZSkKKyAgICB7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBub2RlLnNldENhbkV4aXQoZm9yY2VDYW5FeGl0
IHx8ICFpc0ludDMyUHJlZGljdGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOworICAgICAgICBjaGls
ZFZhbHVlLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1
bGF0ZU51bWJlclVuYXJ5KE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBBYnN0cmFjdFZhbHVl
JiBjaGlsZFZhbHVlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KCFpc051bWJlclByZWRpY3Rpb24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKKyAgICAgICAg
Y2hpbGRWYWx1ZS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgfQorICAgIAorICAgIHZvaWQg
c3BlY3VsYXRlQm9vbGVhblVuYXJ5KE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBBYnN0cmFj
dFZhbHVlJiBjaGlsZFZhbHVlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KCFpc0Jvb2xlYW5QcmVkaWN0aW9uKGNoaWxkVmFsdWUubV90eXBlKSk7Cisg
ICAgICAgIGNoaWxkVmFsdWUuZmlsdGVyKFByZWRpY3RCb29sZWFuKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBzcGVjdWxhdGVJbnQzMkJpbmFyeShOb2RlJiBub2RlLCBib29sIGZvcmNlQ2FuRXhp
dCA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVl
MiA9IGZvck5vZGUobm9kZS5jaGlsZDIoKSk7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAg
ICAgICAgICAgIGZvcmNlQ2FuRXhpdAorICAgICAgICAgICAgfHwgIWlzSW50MzJQcmVkaWN0aW9u
KGNoaWxkVmFsdWUxLm1fdHlwZSkKKyAgICAgICAgICAgIHx8ICFpc0ludDMyUHJlZGljdGlvbihj
aGlsZFZhbHVlMi5tX3R5cGUpKTsKKyAgICAgICAgY2hpbGRWYWx1ZTEuZmlsdGVyKFByZWRpY3RJ
bnQzMik7CisgICAgICAgIGNoaWxkVmFsdWUyLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZU51bWJlclVuYXJ5KE5vZGUmIG5vZGUpCisgICAgewor
ICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUyID0gZm9yTm9kZShub2RlLmNo
aWxkMigpKTsKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAgICAgICAgIWlzTnVtYmVy
UHJlZGljdGlvbihjaGlsZFZhbHVlMS5tX3R5cGUpCisgICAgICAgICAgICB8fCAhaXNOdW1iZXJQ
cmVkaWN0aW9uKGNoaWxkVmFsdWUyLm1fdHlwZSkpOworICAgICAgICBjaGlsZFZhbHVlMS5maWx0
ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGNoaWxkVmFsdWUyLmZpbHRlcihQcmVkaWN0TnVt
YmVyKTsKKyAgICB9CisgICAgCiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBHcmFw
aCYgbV9ncmFwaDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShy
ZXZpc2lvbiAxMTc2MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQ0LDYgKzE0NCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAKICAg
ICBib29sIG1lcmdlRmxhZ3MoTm9kZUZsYWdzIGZsYWdzKQogICAgIHsKKyAgICAgICAgQVNTRVJU
KCEoZmxhZ3MgJiBOb2RlRG9lc05vdEV4aXQpKTsKICAgICAgICAgTm9kZUZsYWdzIG5ld0ZsYWdz
ID0gbV9mbGFncyB8IGZsYWdzOwogICAgICAgICBpZiAobmV3RmxhZ3MgPT0gbV9mbGFncykKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE1Myw2ICsxNTQsNyBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgCiAgICAgYm9vbCBmaWx0ZXJGbGFncyhOb2RlRmxhZ3MgZmxhZ3MpCiAgICAgeworICAg
ICAgICBBU1NFUlQoZmxhZ3MgJiBOb2RlRG9lc05vdEV4aXQpOwogICAgICAgICBOb2RlRmxhZ3Mg
bmV3RmxhZ3MgPSBtX2ZsYWdzICYgZmxhZ3M7CiAgICAgICAgIGlmIChuZXdGbGFncyA9PSBtX2Zs
YWdzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTc1LDcgKzE3NywyMCBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgewogICAgICAgICByZXR1cm4gbV9mbGFncyAmIE5vZGVNdXN0R2VuZXJh
dGU7CiAgICAgfQotCisgICAgCisgICAgdm9pZCBzZXRDYW5FeGl0KGJvb2wgZXhpdHMpCisgICAg
eworICAgICAgICBpZiAoZXhpdHMpCisgICAgICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlRG9lc05v
dEV4aXQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZmxhZ3MgfD0gTm9kZURvZXNOb3RF
eGl0OworICAgIH0KKyAgICAKKyAgICBib29sIGNhbkV4aXQoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuICEobV9mbGFncyAmIE5vZGVEb2VzTm90RXhpdCk7CisgICAgfQorICAgIAogICAgIGJvb2wg
aXNDb25zdGFudCgpCiAgICAgewogICAgICAgICByZXR1cm4gb3AoKSA9PSBKU0NvbnN0YW50OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCShyZXZpc2lvbiAx
MTc2MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw2ICs1OSw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKICNkZWZpbmUgTm9kZVVzZWRBc1ZhbHVlICAgICAgICAgICAoTm9kZVVzZWRBc051bWJlciB8
IE5vZGVOZWVkc05lZ1plcm8pCiAjZGVmaW5lIE5vZGVVc2VkQXNJbnQgICAgICAgICAgICAweDEw
MDAgLy8gVGhlIHJlc3VsdCBvZiB0aGlzIGNvbXB1dGF0aW9uIGlzIGtub3duIHRvIGJlIHVzZWQg
aW4gYSBjb250ZXh0IHRoYXQgcHJlZmVycywgYnV0IGRvZXMgbm90IHJlcXVpcmUsIGludGVnZXIg
dmFsdWVzLgogCisjZGVmaW5lIE5vZGVEb2VzTm90RXhpdCAgICAgICAgICAweDIwMDAgLy8gVGhp
cyBmbGFnIGlzIG5lZ2F0ZWQgdG8gbWFrZSBpdCBuYXR1cmFsIGZvciB0aGUgZGVmYXVsdCB0byBi
ZSB0aGF0IGEgbm9kZSBkb2VzIGV4aXQuCisKIHR5cGVkZWYgdWludDE2X3QgTm9kZUZsYWdzOwog
CiBzdGF0aWMgaW5saW5lIGJvb2wgbm9kZVVzZWRBc051bWJlcihOb2RlRmxhZ3MgZmxhZ3MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142835</attachid>
            <date>2012-05-18 17:59:20 -0700</date>
            <delta_ts>2012-05-19 21:38:45 -0700</delta_ts>
            <desc>it&apos;s starting to do things</desc>
            <filename>recordosrexit_patch_2.diff</filename>
            <type>text/plain</type>
            <size>49239</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3NjYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBA
CisyMDEyLTA1LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIENGQSBzaG91bGQgcmVjb3JkIGlmIGEgbm9kZSBjYW4gT1NSIGV4aXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2OTA1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dy
ZXNzLgorCisgICAgICAgICogYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oOgorICAgICAgICAoSlND
KToKKyAgICAgICAgKEpTQzo6aXNBbnlQcmVkaWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFN0YXRlOjpzcGVjdWxhdGVJbnQzMlVuYXJ5KToKKyAgICAgICAgKEFic3RyYWN0
U3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnNwZWN1bGF0ZU51bWJl
clVuYXJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpzcGVjdWxhdGVCb29s
ZWFuVW5hcnkpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnNwZWN1bGF0ZUlu
dDMyQmluYXJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpzcGVjdWxhdGVO
dW1iZXJCaW5hcnkpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6bWVyZ2VGbGFncyk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6ZmlsdGVyRmxh
Z3MpOgorICAgICAgICAoTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2V0Q2FuRXhp
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y2FuRXhpdCk6CisgICAgICAgICogZGZnL0RG
R05vZGVGbGFncy5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2
ZUpJVCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRU
eXBlcyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKToK
KyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
CiAyMDEyLTA1LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAg
Rml4IGEgdHlwbyB0aGF0IEdlb2ZmIG5vdGljZWQgYnV0IHRoYXQgSSBmb3Jnb3QgdG8gZml4IGlu
IHRoZSBsYXN0IGNvbW1pdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
cmVkaWN0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ByZWRpY3RlZFR5cGUuaAkocmV2aXNpb24gMTE3NjEzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiAr
NzIsMTIgQEAgc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgRml4ZWRJbmRleGVkUwogCiB0eXBl
ZGVmIGJvb2wgKCpQcmVkaWN0aW9uQ2hlY2tlcikoUHJlZGljdGVkVHlwZSk7CiAKKy8vIER1bW15
IHByZWRpY3Rpb24gY2hlY2tlciwgb25seSB1c2VmdWwgaWYgc29tZW9uZSBpbnNpc3RzIG9uIHJl
cXVpcmluZyBhIHByZWRpY3Rpb24gY2hlY2tlci4KK2lubGluZSBib29sIGlzQW55UHJlZGljdGlv
bihQcmVkaWN0ZWRUeXBlKQoreworICAgIHJldHVybiB0cnVlOworfQorCiBpbmxpbmUgYm9vbCBp
c0NlbGxQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCiB7CiAgICAgcmV0dXJuICEhKHZh
bHVlICYgUHJlZGljdENlbGwpICYmICEodmFsdWUgJiB+UHJlZGljdENlbGwpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lv
biAxMTc2MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNDEgKzI2Niw1NyBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2Ug
V2Vha0pTQ29uc3RhbnQ6IHsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2dyYXBo
LnZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkpOworICAgICAgICBub2RlLnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIEdl
dExvY2FsOiB7Ci0gICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1
cmVkKCkpCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0g
bm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgYm9vbCBjYW5FeGl0ID0gZmFsc2U7
CisgICAgICAgIGNhbkV4aXQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0aW9uKCkgPT0g
UHJlZGljdE5vbmU7CisgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQo
KSkKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KSA9IG1fdmFyaWFibGVzLm9wZXJhbmQo
bm9kZS5sb2NhbCgpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVl
IHZhbHVlID0gbV92YXJpYWJsZXMub3BlcmFuZCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkp
OworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKKyAgICAgICAgICAgICAgICBjYW5F
eGl0IHw9IHRydWU7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkgPSB2YWx1ZTsKKyAg
ICAgICAgfQorICAgICAgICBub2RlLnNldENhbkV4aXQoY2FuRXhpdCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOiB7CiAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2Nh
bDogewotICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgp
KQorICAgICAgICBpZiAobm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKSB7
CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewotICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgICAgICBzcGVjdWxhdGVO
dW1iZXJVbmFyeShub2RlKTsKICAgICAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5s
b2NhbCgpKS5zZXQoUHJlZGljdERvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKICAgICAgICAg
aWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKQotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKLSAgICAgICAgZWxzZSBpZiAo
aXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVJ
bnQzMlVuYXJ5KG5vZGUpOworICAgICAgICBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVk
aWN0ZWRUeXBlKSkgeworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0FycmF5UHJlZGlj
dGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5KTsKLSAgICAgICAgZWxzZSBpZiAo
aXNCeXRlQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICB9IGVsc2UgaWYg
KGlzQnl0ZUFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgeworICAgICAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KCFpc0J5dGVBcnJheVByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFBy
ZWRpY3RCeXRlQXJyYXkpOwotICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHBy
ZWRpY3RlZFR5cGUpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
UHJlZGljdEJvb2xlYW4pOworICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24o
cHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAg
ICAgIAogICAgICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBicmVhazsKQEAgLTMwOSw2ICszMjUsNyBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBTZXRBcmd1bWVu
dDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVl
biBzZXQuCiAgICAgICAgIEFTU0VSVCghbV9ibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9k
ZS5sb2NhbCgpKS5pc0NsZWFyKCkpOworICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQml0QW5kOgpAQCAtMzQ1LDEw
ICszNjIsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKLSAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgc3BlY3VsYXRlSW50
MzJCaW5hcnkobm9kZSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdElu
dDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzU5LDEyICszNzYsMTYgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgQVNTRVJUKGNo
aWxkLmlzSW50MzIoKSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KEpTVmFs
dWUoY2hpbGQuYXNVSW50MzIoKSkpOwogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRy
dWU7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkK
KyAgICAgICAgaWYgKCFub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKLSAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgICAgICAKQEAgLTM3NiwxNCArMzk3LDE3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KEpTVmFsdWUoSlNDOjp0b0ludDMyKGNoaWxkLmFzRG91Ymxl
KCkpKSk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50
MzIpOworICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKICAgICAgICAgZWxz
ZSBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOwor
ICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UgaWYg
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEJvb2xlYW4pOworICAg
ICAgICAgICAgc3BlY3VsYXRlQm9vbGVhblVuYXJ5KG5vZGUpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAKICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICBicmVhazsKQEAgLTM5NCw5
ICs0MTgsMTAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICBpZiAoY2hpbGQgJiYgY2hpbGQuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBjaGlsZC5h
c051bWJlcigpKSk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVy
KTsKKyAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7CiAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTQwOCwyNyArNDMzLDI5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0
LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoSlNWYWx1
ZShsZWZ0LmFzTnVtYmVyKCkgKyByaWdodC5hc051bWJlcigpKSk7CiAgICAgICAgICAgICBtX2Zv
dW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAobV9ncmFwaC5hZGRT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUlu
dDMyQmluYXJ5KAorICAgICAgICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2Vy
KG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihtX2dyYXBoW25vZGUuY2hpbGQxKCld
LCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkgewotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51
bWJlckJpbmFyeShub2RlKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJl
ZGljdERvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAo
bm9kZS5vcCgpID09IFZhbHVlQWRkKSB7CiAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhp
bmRleEluQmxvY2spOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0
U3RyaW5nIHwgUHJlZGljdEludDMyIHwgUHJlZGljdE51bWJlcik7CisgICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgLy8gV2UgZG9uJ3QgaGFuZGxlIHRoaXMgeWV0LiA6LSgKICAgICAgICAgbV9pc1ZhbGlkID0g
ZmFsc2U7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAgICAgCkBAIC00MzgsMTYgKzQ2NSwxNiBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxl
ZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KEpTVmFsdWUobGVmdC5hc051bWJlcigpIC0gcmlnaHQuYXNOdW1iZXIo
KSkpOwogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBu
b2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKG1fZ3JhcGguYWRkU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewotICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKLSAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7Cisg
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeSgKKyAgICAgICAgICAgICAgICBub2RlLCAh
bm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKTsKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFBy
ZWRpY3ROdW1iZXIpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVk
aWN0TnVtYmVyKTsKKyAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwogICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC00NTcsMTQgKzQ4NCwxNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KEpTVmFsdWUoLWNoaWxkLmFzTnVtYmVy
KCkpKTsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOworICAgICAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChtX2dyYXBoLm5lZ2F0ZVNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZSkpIHsK
LSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7
CisgICAgICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KAorICAgICAgICAgICAgICAgIG5vZGUs
ICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpOwogICAgICAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
UHJlZGljdE51bWJlcik7CisgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwogICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOwogICAgICAgICBicmVh
azsKICAgICB9CkBAIC00NzUsMTYgKzUwNCwxOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1i
ZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KEpTVmFsdWUobGVmdC5hc051bWJlcigpICogcmlnaHQuYXNOdW1iZXIoKSkpOwogICAg
ICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBub2RlLnNldENh
bkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewotICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAg
ICBzcGVjdWxhdGVJbnQzMkJpbmFyeSgKKyAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAg
ICAgICAgICFub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkKKyAg
ICAgICAgICAgICAgICB8fCAhbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLmFyaXRoTm9k
ZUZsYWdzKCkpKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdElu
dDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOwotICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgc3BlY3VsYXRlTnVtYmVy
QmluYXJ5KG5vZGUpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3Vi
bGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC01MTYsMTYgKzU0NywxNyBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihtX2dyYXBo
W25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSAmJiBub2RlLmNhblNwZWN1
bGF0ZUludGVnZXIoKSkgewotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoUHJlZGljdEludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKAorICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9k
ZS5jaGlsZDIoKV0pCisgICAgICAgICAgICAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkg
eworICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkobm9kZSwgdHJ1ZSk7IC8vIGZvcmNp
bmcgY2FuLWV4aXQsIHdoaWNoIGlzIGEgYml0IG9uIHRoZSBjb25zZXJ2YXRpdmUgc2lkZS4KICAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3ROdW1iZXIpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOwog
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC01MzUsMTQgKzU2NywxNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmIChjaGlsZCAmJiBjaGlsZC5pc051bWJlcigp
KSB7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KEpTVmFsdWUoZmFicyhjaGls
ZC5hc051bWJlcigpKSkpOwogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7Cisg
ICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBp
ZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkKKyAgICAg
ICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBzcGVj
dWxhdGVJbnQzMlVuYXJ5KG5vZGUsIHRydWUpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAg
ICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFByZWRpY3REb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC01NTIsOSAr
NTg2LDEwIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAg
ICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoSlNWYWx1ZShzcXJ0KGNoaWxkLmFzTnVtYmVyKCkpKSk7CiAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgc3BlY3VsYXRl
TnVtYmVyVW5hcnkobm9kZSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGlj
dERvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU2MywxOSArNTk4LDI2IEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgSlNWYWx1ZSBj
aGlsZENvbnN0ID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAo
Y2hpbGRDb25zdCkgewogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChqc0Jvb2xl
YW4oIWNoaWxkQ29uc3QudG9Cb29sZWFuKCkpKTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBOb2RlJiBj
aGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07CiAgICAgICAgIGlmIChpc0Jvb2xlYW5QcmVk
aWN0aW9uKGNoaWxkLnByZWRpY3Rpb24oKSkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0Qm9vbGVhbik7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLnNo
b3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKQorICAgICAgICAgICAgc3BlY3VsYXRl
Qm9vbGVhblVuYXJ5KG5vZGUpOworICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxh
dGVGaW5hbE9iamVjdE9yT3RoZXIoKSkgeworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAor
ICAgICAgICAgICAgICAgICFpc0ZpbmFsT2JqZWN0T3JPdGhlclByZWRpY3Rpb24oZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCB8IFByZWRpY3RPdGhlcik7Ci0gICAgICAgIGVs
c2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKQorICAgICAgICB9IGVs
c2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKSB7CisgICAgICAgICAg
ICBub2RlLnNldENhbkV4aXQoCisgICAgICAgICAgICAgICAgIWlzQXJyYXlPck90aGVyUHJlZGlj
dGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5IHwgUHJlZGljdE90aGVyKTsKLSAg
ICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQotICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAg
fSBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBz
cGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwogICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRT
cGVjdWxhdGVOdW1iZXIoKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9k
ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEJvb2xlYW4pOwogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC01ODYsNiArNjI4LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgSXNTdHJpbmc6CiAgICAgY2FzZSBJc09iamVjdDoK
ICAgICBjYXNlIElzRnVuY3Rpb246IHsKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsK
ICAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkudmFsdWUoKTsK
ICAgICAgICAgaWYgKGNoaWxkKSB7CiAgICAgICAgICAgICBib29sIGZvdW5kQ29uc3RhbnQgPSB0
cnVlOwpAQCAtNjQ4LDYgKzY5MSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjU2
LDQ3ICs3MDAsNzAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICBOb2RlJiBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKICAgICAgICAgTm9k
ZSYgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldOwogICAgICAgICBQcmVkaWN0ZWRUeXBl
IGZpbHRlcjsKLSAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobGVmdCwg
cmlnaHQpKQorICAgICAgICBQcmVkaWN0aW9uQ2hlY2tlciBjaGVja2VyOworICAgICAgICBpZiAo
Tm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihsZWZ0LCByaWdodCkpIHsKICAgICAgICAgICAg
IGZpbHRlciA9IFByZWRpY3RJbnQzMjsKLSAgICAgICAgZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIGNoZWNrZXIgPSBpc0ludDMy
UHJlZGljdGlvbjsKKyAgICAgICAgfSBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1i
ZXIobGVmdCwgcmlnaHQpKSB7CiAgICAgICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0TnVtYmVyOwot
ICAgICAgICBlbHNlIGlmIChub2RlLm9wKCkgPT0gQ29tcGFyZUVxKSB7CisgICAgICAgICAgICBj
aGVja2VyID0gaXNOdW1iZXJQcmVkaWN0aW9uOworICAgICAgICB9IGVsc2UgaWYgKG5vZGUub3Ao
KSA9PSBDb21wYXJlRXEpIHsKICAgICAgICAgICAgIGlmICgobV9ncmFwaC5pc0NvbnN0YW50KG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSkKICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC52YWx1ZU9m
SlNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpLmlzTnVsbCgpKQogICAgICAgICAgICAg
ICAgIHx8IChtX2dyYXBoLmlzQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKQogICAgICAg
ICAgICAgICAgICAgICAmJiBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQyKCku
aW5kZXgoKSkuaXNOdWxsKCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRo
aXMgd29uJ3QgY2xvYmJlciB0aGUgd29ybGQuIEJ1dCB0aGF0J3MgYWxsIHdlIGtub3cuCisgICAg
ICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIGlmIChO
b2RlOjpzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChsZWZ0LCByaWdodCkpIHsKICAgICAgICAg
ICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0RmluYWxPYmplY3Q7Ci0gICAgICAgICAgICBlbHNlIGlm
IChOb2RlOjpzaG91bGRTcGVjdWxhdGVBcnJheShsZWZ0LCByaWdodCkpCisgICAgICAgICAgICAg
ICAgY2hlY2tlciA9IGlzRmluYWxPYmplY3RQcmVkaWN0aW9uOworICAgICAgICAgICAgfSBlbHNl
IGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVBcnJheShsZWZ0LCByaWdodCkpIHsKICAgICAgICAg
ICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0QXJyYXk7Ci0gICAgICAgICAgICBlbHNlIGlmIChsZWZ0
LnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkgJiYgcmlnaHQuc2hvdWxkU3BlY3VsYXRlRmlu
YWxPYmplY3RPck90aGVyKCkpIHsKKyAgICAgICAgICAgICAgICBjaGVja2VyID0gaXNBcnJheVBy
ZWRpY3Rpb247CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQuc2hvdWxkU3BlY3VsYXRlRmlu
YWxPYmplY3QoKSAmJiByaWdodC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkg
eworICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgICAgICAgICAgICAg
IWlzRmluYWxPYmplY3RQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKQor
ICAgICAgICAgICAgICAgICAgICB8fCAhaXNGaW5hbE9iamVjdE9yT3RoZXJQcmVkaWN0aW9uKGZv
ck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSk7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0KTsKICAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0RmluYWxPYmplY3QgfCBQcmVk
aWN0T3RoZXIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSBlbHNlIGlm
IChyaWdodC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpICYmIGxlZnQuc2hvdWxkU3BlY3Vs
YXRlRmluYWxPYmplY3RPck90aGVyKCkpIHsKKyAgICAgICAgICAgICAgICBub2RlLnNldENhbkV4
aXQoCisgICAgICAgICAgICAgICAgICAgICFpc0ZpbmFsT2JqZWN0T3JPdGhlclByZWRpY3Rpb24o
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICAgICAgICAgIHx8ICFp
c0ZpbmFsT2JqZWN0UHJlZGljdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpOwog
ICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RGaW5h
bE9iamVjdCB8IFByZWRpY3RPdGhlcik7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMigpKS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0KTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC5zaG91bGRTcGVjdWxhdGVBcnJheSgpICYm
IHJpZ2h0LnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKSB7Ci0gICAgICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0KTsKLSAgICAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0RmluYWxPYmpl
Y3QgfCBQcmVkaWN0T3RoZXIpOworICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAg
ICAgICAgICAgICAgICAgICAgIWlzQXJyYXlQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKQorICAgICAgICAgICAgICAgICAgICB8fCAhaXNBcnJheU9yT3RoZXJQcmVkaWN0
aW9uKGZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSk7CisgICAgICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5KTsKKyAgICAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkgfCBQcmVkaWN0T3Ro
ZXIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdo
dC5zaG91bGRTcGVjdWxhdGVBcnJheSgpICYmIGxlZnQuc2hvdWxkU3BlY3VsYXRlQXJyYXlPck90
aGVyKCkpIHsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQ
cmVkaWN0RmluYWxPYmplY3QgfCBQcmVkaWN0T3RoZXIpOwotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCk7CisgICAgICAgICAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAgICAgICAgICAgICAgICAhaXNBcnJheU9yT3Ro
ZXJQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKQorICAgICAgICAgICAg
ICAgICAgICB8fCAhaXNBcnJheVByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5
cGUpKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0QXJyYXkgfCBQcmVkaWN0T3RoZXIpOworICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RUb3A7
CisgICAgICAgICAgICAgICAgY2hlY2tlciA9IGlzQW55UHJlZGljdGlvbjsKICAgICAgICAgICAg
ICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgZmlsdGVyID0gUHJlZGljdFRvcDsKKyAgICAgICAg
ICAgIGNoZWNrZXIgPSBpc0FueVByZWRpY3Rpb247CiAgICAgICAgICAgICBjbG9iYmVyU3RydWN0
dXJlcyhpbmRleEluQmxvY2spOwogICAgICAgICB9CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgK
KyAgICAgICAgICAgICFjaGVja2VyKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKQorICAg
ICAgICAgICAgfHwgIWNoZWNrZXIoZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKTsKICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoZmlsdGVyKTsKICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoZmlsdGVyKTsKICAgICAgICAgYnJlYWs7CkBAIC03
MDgsMjUgKzc3NSw3MiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5p
c051bWJlcigpKSB7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KGpzQm9vbGVh
bihsZWZ0LmFzTnVtYmVyKCkgPT0gcmlnaHQuYXNOdW1iZXIoKSkpOwogICAgICAgICAgICAgbV9m
b3VuZENvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFu
dChub2RlLmNoaWxkMSgpLmluZGV4KCkpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
bV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlLmNoaWxkMSgpLmluZGV4KCkpOworICAgICAg
ICAgICAgaWYgKCF2YWx1ZS5pc051bWJlcigpICYmICF2YWx1ZS5pc1N0cmluZygpKSB7CisgICAg
ICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobV9ncmFwaC5pc0pTQ29u
c3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKTsKKyAg
ICAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSAmJiAhdmFsdWUuaXNTdHJpbmcoKSkgewor
ICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoCisgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgp
XSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMy
QmluYXJ5KG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcigKKyAgICAgICAgICAgICAgICBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkgeworICAgICAgICAgICAgc3Bl
Y3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KAorICAgICAgICAg
ICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKSB7
CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoCisgICAgICAgICAgICAgICAgIWlzRmluYWxP
YmplY3RQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKQorICAgICAgICAg
ICAgICAgIHx8ICFpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQyKCkp
Lm1fdHlwZSkpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJl
ZGljdEZpbmFsT2JqZWN0KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFByZWRpY3RGaW5hbE9iamVjdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlQXJyYXkoCisgICAgICAgICAgICAgICAg
bV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpIHsKKyAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgICAgICAgICAhaXNBcnJheVByZWRpY3Rp
b24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICAgICAgfHwgIWlz
QXJyYXlQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSk7CisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEFycmF5KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTdHJpbmdDaGFyQ29k
ZUF0OgorICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RTdHJpbmcpOwogICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFByZWRpY3RJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNl
IFN0cmluZ0NoYXJBdDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0U3RyaW5nKTsKICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChQcmVkaWN0U3RyaW5nKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICBjYXNlIEdldEJ5VmFsOiB7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVl
KTsKICAgICAgICAgaWYgKCFub2RlLnByZWRpY3Rpb24oKSB8fCAhbV9ncmFwaFtub2RlLmNoaWxk
MSgpXS5wcmVkaWN0aW9uKCkgfHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigp
KSB7CiAgICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtODIxLDYgKzkzNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFs
aWFzOiB7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgaWYgKCFtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMigp
XS5wcmVkaWN0aW9uKCkpIHsKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC05MzIsMjMgKzEwNDcsMjkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgQXJyYXlQ
dXNoOgorICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CiAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoUHJlZGljdE51bWJlcik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgY2FzZSBBcnJheVBvcDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOwogICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6CisgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgICAgICFpc0NlbGxQcmVkaWN0aW9uKGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKQorICAgICAgICAgICAgfHwgIWlzQ2VsbFByZWRpY3Rpb24oZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKTsKICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkp
LmZpbHRlcihQcmVkaWN0Q2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9w
KCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBKdW1wOgorICAgICAg
ICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgQnJhbmNoOiB7CkBAIC05NTksNiArMTA4MCw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBtX2JyYW5jaERpcmVjdGlv
biA9IFRha2VUcnVlOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIG1fYnJhbmNo
RGlyZWN0aW9uID0gVGFrZUZhbHNlOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiBUaGUg
YWJvdmUgaGFuZGxlcyB0aGUgdHJpdmlhbCBjYXNlcyBvZiBzcGFyc2UgY29uZGl0aW9uYWwKQEAg
LTk3MCwyMyArMTA5MiwzNCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgIC8vICAgIHRoZSBicmFuY2guCiAgICAgICAgIE5vZGUmIGNoaWxkID0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXTsKICAgICAgICAgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUJv
b2xlYW4oKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRp
Y3RCb29sZWFuKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlRmluYWxP
YmplY3RPck90aGVyKCkpCisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9kZSk7
CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhl
cigpKSB7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoCisgICAgICAgICAgICAgICAgIWlz
RmluYWxPYmplY3RPck90aGVyUHJlZGljdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEZp
bmFsT2JqZWN0IHwgUHJlZGljdE90aGVyKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxk
U3BlY3VsYXRlQXJyYXlPck90aGVyKCkpCisgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQuc2hvdWxk
U3BlY3VsYXRlQXJyYXlPck90aGVyKCkpIHsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgK
KyAgICAgICAgICAgICAgICAhaXNBcnJheU9yT3RoZXJQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihQcmVkaWN0QXJyYXkgfCBQcmVkaWN0T3RoZXIpOwotICAgICAgICBlbHNlIGlmIChjaGls
ZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnko
bm9kZSk7CiAgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQot
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7
CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgbV9icmFuY2hEaXJl
Y3Rpb24gPSBUYWtlQm90aDsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCiAg
ICAgY2FzZSBSZXR1cm46CisgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICAgICAgCiAgICAgY2FzZSBU
aHJvdzoKICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CiAgICAgICAgIG1faXNWYWxpZCA9
IGZhbHNlOworICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgY2FzZSBUb1ByaW1pdGl2ZTogewpAQCAtOTk0LDEyICsxMTI3LDEz
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgaWYg
KGNoaWxkQ29uc3QgJiYgY2hpbGRDb25zdC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KGNoaWxkQ29uc3QpOwogICAgICAgICAgICAgbV9mb3VuZENvbnN0
YW50cyA9IHRydWU7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIE5vZGUmIGNoaWxkID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKICAgICAgICAgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkgewotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
UHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTAxMywyMCArMTE0NywyNCBAQCBib29sIEFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICB0eXBlIHw9IFByZWRp
Y3RTdHJpbmc7CiAgICAgICAgIH0KICAgICAgICAgZGVzdGluYXRpb24uc2V0KHR5cGUpOworICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgICAgICAKICAgICBjYXNlIFN0ckNhdDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OyAvLyBCZWNhdXNlIG9mIGV4Y2VwdGlvbnMhCiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoUHJlZGljdFN0cmluZyk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2Fz
ZSBOZXdBcnJheToKICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgorICAgICAgICBub2RlLnNldENh
bkV4aXQodHJ1ZSk7IC8vIEJlY2F1c2Ugb2YgZXhjZXB0aW9ucz8gSXQgcHJvYmFibHkgY2FuJ3Qg
dGhyb3csIGJ1dCBpdCdzIGJldHRlciB0byBiZSBzYWZlLgogICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUoKSk7
CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAogICAgIGNhc2UgTmV3UmVnZXhwOgorICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1
ZSk7IC8vIEJlY2F1c2UgdG8gZXhjZXB0aW9ucyEKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKICAg
ICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwpAQCAtMTA0MSw5
ICsxMTc5LDEyIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgICAgIC8vIG9iamVjdCwgc28gdGhlcmUncyBub3RoaW5nIHRvIGRvLiBJIGRvbid0IHRo
aW5rIHRoaXMgY2FzZSB3aWxsCiAgICAgICAgICAgICAvLyBiZSBoaXQsIGJ1dCB0aGVuIGFnYWlu
LCB5b3UgbmV2ZXIga25vdy4KICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOworICAg
ICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIAorICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAg
IAogICAgICAgICBpZiAoaXNPdGhlclByZWRpY3Rpb24oY2hpbGQucHJlZGljdGlvbigpKSkgewog
ICAgICAgICAgICAgc291cmNlLmZpbHRlcihQcmVkaWN0T3RoZXIpOwogICAgICAgICAgICAgZGVz
dGluYXRpb24uc2V0KFByZWRpY3RPYmplY3RPdGhlcik7CkBAIC0xMDY1LDYgKzEyMDYsOCBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIE5vZGUmIGNo
aWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291
cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVz
dGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7CisgICAgICAgIAorICAgICAgICBub2RlLnNl
dENhbkV4aXQodHJ1ZSk7IC8vIEV4Y2VwdGlvbnM/CiAgICAgICAgICAgICAKICAgICAgICAgaWYg
KGNoaWxkLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkpCiAgICAgICAgICAgICBzb3VyY2Uu
ZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCk7CkBAIC0xMDc0LDE2ICsxMjE3LDE5IEBAIGJvb2wg
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAgICAgICAgICAgICAK
ICAgICBjYXNlIE5ld09iamVjdDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOyAvLyBF
eGNlcHRpb25zPwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKSk7
CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAg
ICAgCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICBub2RlLnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fZ3JhcGgubV9nbG9iYWxE
YXRhLmFjdGl2YXRpb25TdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVz
ID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQXJndW1l
bnRzOgorICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2lu
KS0+YXJndW1lbnRzU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1
ZTsKICAgICAgICAgYnJlYWs7CkBAIC0xMDkxLDYgKzEyMzcsNyBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjoKICAg
ICBjYXNlIFRlYXJPZmZBcmd1bWVudHM6CiAgICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0
ZWQ6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIC8vIERvZXMgbm90
aGluZyB0aGF0IGlzIHVzZXItdmlzaWJsZS4KICAgICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAt
MTEwMSwxMiArMTI0OCwxNSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgIC8vIFdlIHBlcmZvcm0gZnVydGhlciBvcHRpbWl6YXRpb25zIG9uIHRoaXMg
bGF0ZXIgb24uCiAgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KGpzTnVtYmVyKG5vZGUuY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7CisgICAgICAgICAg
ICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
KyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFByZWRpY3RJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNl
IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OyAvLyBFeGNlcHRpb25zIQogICAgICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFs
bCBzdHJ1Y3R1cmVzIGlmIHRoZSBhcmd1bWVudHMgb2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAg
ICAvLyBpbnN0YWxsZWQgb24gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KICAgICAgICAgY2xvYmJlclN0
cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKQEAgLTExMTYsNiArMTI2Niw3IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAog
ICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgorICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1
ZSk7CiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4ZWN1dGFibGUgZG9lcyBub3QgZXNj
YXBlIGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6ZQogICAgICAgICAvLyB0aGUgYXJn
dW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBlbmRzIHVwIGJlaW5nIGZ1cnRoZXIgb3B0aW1p
emVkIGJ5IHRoZQogICAgICAgICAvLyBBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLgpAQCAt
MTEyNCw2ICsxMjc1LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZAogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxT
YWZlOgorICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8vIEV4Y2VwdGlvbnMhCiAgICAg
ICAgIC8vIFRoaXMgcG90ZW50aWFsbHkgY2xvYmJlcnMgYWxsIHN0cnVjdHVyZXMgaWYgdGhlIHBy
b3BlcnR5IHdlJ3JlIGFjY2Vzc2luZyBoYXMKICAgICAgICAgLy8gYSBnZXR0ZXIuIFdlIGRvbid0
IHNwZWN1bGF0ZSBhZ2FpbnN0IHRoaXMuCiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4
SW5CbG9jayk7CkBAIC0xMTM2LDI3ICsxMjg4LDMzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIE5ld0Z1bmN0aW9uOgogICAgIGNhc2UgTmV3RnVu
Y3Rpb25FeHByZXNzaW9uOgogICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgorICAgICAgICBu
b2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+ZnVuY3Rpb25TdHJ1
Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldENhbGxlZToK
KyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChQcmVkaWN0RnVuY3Rpb24pOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgR2V0U2NvcGVDaGFpbjoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsK
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0Q2VsbE90aGVyKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEdldFNjb3BlZFZhcjoKKyAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VU
b3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dFNjb3BlZFZh
cjoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgY2xvYmJlclN0cnVj
dHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBj
YXNlIEdldEJ5SWQ6CiAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CisgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCh0cnVlKTsgLy8gRXhjZXB0aW9ucyEKICAgICAgICAgaWYgKCFub2RlLnByZWRpY3Rpb24o
KSkgewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTExNjgsNzcgKzEzMjYsOTcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0QXJyYXlM
ZW5ndGg6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5KTsKICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0
QXJndW1lbnRzTGVuZ3RoOgorICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcmd1bWVudHMpOwogICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBHZXRTdHJpbmdMZW5ndGg6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNT
dHJpbmdQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RTdHJpbmcpOwogICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAKICAgICBjYXNlIEdldEJ5dGVBcnJheUxlbmd0aDoKKyAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KCFpc0J5dGVBcnJheVByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KTsKICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEJ5dGVBcnJh
eSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBHZXRJbnQ4QXJyYXlMZW5ndGg6CisgICAgICAgIG5vZGUuc2V0
Q2FuRXhpdCghaXNJbnQ4QXJyYXlQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQ4
QXJyYXkpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0SW50MTZBcnJheUxlbmd0aDoKKyAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KCFpc0ludDE2QXJyYXlQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRp
Y3RJbnQxNkFycmF5KTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50
MzIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEludDMyQXJyYXlMZW5ndGg6CisgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNJbnQzMkFycmF5UHJlZGljdGlvbihmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0SW50MzJBcnJheSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJl
ZGljdEludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRVaW50OEFycmF5TGVuZ3Ro
OgorICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzVWludDhBcnJheVByZWRpY3Rpb24oZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoUHJlZGljdFVpbnQ4QXJyYXkpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFByZWRpY3RJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0VWludDhDbGFt
cGVkQXJyYXlMZW5ndGg6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50OENsYW1wZWRB
cnJheVByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdFVpbnQ4Q2xhbXBlZEFycmF5KTsK
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEdldFVpbnQxNkFycmF5TGVuZ3RoOgorICAgICAgICBub2RlLnNldENh
bkV4aXQoIWlzVWludDE2QXJyYXlQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RVaW50
MTZBcnJheSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRVaW50MzJBcnJheUxlbmd0aDoKKyAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQzMkFycmF5UHJlZGljdGlvbihmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkpOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQ
cmVkaWN0VWludDMyQXJyYXkpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRp
Y3RJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0RmxvYXQzMkFycmF5TGVuZ3Ro
OgorICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzRmxvYXQzMkFycmF5UHJlZGljdGlvbihmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0RmxvYXQzMkFycmF5KTsKICAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEZsb2F0
NjRBcnJheUxlbmd0aDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc0Zsb2F0NjRBcnJheVBy
ZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEZsb2F0NjRBcnJheSk7CiAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKLSAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmU6IHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSk7CisgICAgICAgIHZhbHVlLmZpbHRlcihub2RlLnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHZhbHVlICE9IGZvck5vZGUobm9kZS5jaGlsZDEoKSkpOwogICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1Y3R1cmUg
c2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCi0gICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKG5vZGUuc3RydWN0dXJlU2V0KCkpOworICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpID0gdmFsdWU7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVl
OwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dFN0cnVj
dHVyZToKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgY2xvYmJlclN0
cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5z
ZXQobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CiAgICAgICAg
IG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldFBy
b3BlcnR5U3RvcmFnZToKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOwogICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuY2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4K
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Cisg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGllcywgYnV0IHRoaXMgaXMgKGFsbW9z
dCkgYWx3YXlzIGZvbGxvd2VkIGJ5IEdldEJ5VmFsLCB3aGljaCBkb2VzIGV4aXQuIFNvIG5vIHBv
aW50IGluIHRyeWluZyB0byBiZSBtb3JlIHByZWNpc2UuCiAgICAgICAgIFByZWRpY3RlZFR5cGUg
YmFzZVByZWRpY3Rpb24gPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKICAg
ICAgICAgaWYgKCEoYmFzZVByZWRpY3Rpb24gJiBQcmVkaWN0SW50MzIpICYmIGJhc2VQcmVkaWN0
aW9uKSB7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKQEAgLTEzMDks
MzggKzE0ODcsNDYgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICBicmVhazsgCiAgICAgfQogICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3RDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgY2FzZSBDaGVja0Z1bmN0aW9uOgorICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7IC8v
IExpZXMhIFdlIGNhbiBkbyBiZXR0ZXIuCiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFByZWRpY3RGdW5jdGlvbik7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgYWJs
ZSB0byBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSBrbm93IHdoYXQgdGhlIGZ1bmN0aW9uIGlz
LgogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0QnlJZDoKICAgICBj
YXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsgLy8gRXhj
ZXB0aW9ucyEKICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENl
bGwpOwogICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0R2xvYmFsVmFyOgorICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgp
OwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0R2xvYmFsVmFyOgor
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KHRydWUpOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2Vs
bCk7CiAgICAgICAgIC8vIFNhZGx5LCB3ZSBkb24ndCBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3
ZSd2ZSBkb25lIENoZWNrSGFzSW5zdGFuY2UKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIEluc3RhbmNlT2Y6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAg
ICAgICAgLy8gQWdhaW4sIHNhZGx5LCB3ZSBkb24ndCBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3
ZSd2ZSBkb25lIEluc3RhbmNlT2YKICAgICAgICAgaWYgKCEobV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5wcmVkaWN0aW9uKCkgJiB+UHJlZGljdENlbGwpICYmICEoZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUgJiB+UHJlZGljdENlbGwpKQogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOwpAQCAtMTM1MCw5ICsxNTM2LDExIEBAIGJvb2wgQWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNhc2Ug
UGhpOgogICAgIGNhc2UgRmx1c2g6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBCcmVha3BvaW50OgorICAgICAg
ICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgQ2FsbDoKQEAgLTEzNjEsMTcgKzE1NDksMjAgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgUmVzb2x2ZUJhc2U6CiAgICAgY2FzZSBS
ZXNvbHZlQmFzZVN0cmljdFB1dDoKICAgICBjYXNlIFJlc29sdmVHbG9iYWw6CisgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdCh0cnVlKTsgLy8gRXhjZXB0aW9ucyEKICAgICAgICAgY2xvYmJlclN0cnVj
dHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3Ao
KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoK
KyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBtX2lzVmFsaWQgPSBmYWxz
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFBoYW50b206CiAgICAg
Y2FzZSBJbmxpbmVTdGFydDoKICAgICBjYXNlIE5vcDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTGFzdE5vZGVUeXBl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJ
KHJldmlzaW9uIDExNzYxMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNiArMjE0LDUwIEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3MoQWJzdHJhY3RW
YWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIHNvdXJjZSwgTm9kZUluZGV4IGRlc3Rp
bmF0aW9uTm9kZUluZGV4LCBOb2RlSW5kZXggc291cmNlTm9kZUluZGV4KTsKICAgICAKKyAgICB2
b2lkIHNwZWN1bGF0ZUludDMyVW5hcnkoTm9kZSYgbm9kZSwgYm9vbCBmb3JjZUNhbkV4aXQgPSBm
YWxzZSkKKyAgICB7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpOworICAgICAgICBub2RlLnNldENhbkV4aXQoZm9yY2VDYW5FeGl0IHx8
ICFpc0ludDMyUHJlZGljdGlvbihjaGlsZFZhbHVlLm1fdHlwZSkpOworICAgICAgICBjaGlsZFZh
bHVlLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0
ZU51bWJlclVuYXJ5KE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBBYnN0cmFjdFZhbHVlJiBj
aGlsZFZhbHVlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KCFpc051bWJlclByZWRpY3Rpb24oY2hpbGRWYWx1ZS5tX3R5cGUpKTsKKyAgICAgICAgY2hp
bGRWYWx1ZS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgfQorICAgIAorICAgIHZvaWQgc3Bl
Y3VsYXRlQm9vbGVhblVuYXJ5KE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBBYnN0cmFjdFZh
bHVlJiBjaGlsZFZhbHVlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KCFpc0Jvb2xlYW5QcmVkaWN0aW9uKGNoaWxkVmFsdWUubV90eXBlKSk7CisgICAg
ICAgIGNoaWxkVmFsdWUuZmlsdGVyKFByZWRpY3RCb29sZWFuKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzcGVjdWxhdGVJbnQzMkJpbmFyeShOb2RlJiBub2RlLCBib29sIGZvcmNlQ2FuRXhpdCA9
IGZhbHNlKQorICAgIHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9
IGZvck5vZGUobm9kZS5jaGlsZDIoKSk7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAg
ICAgICAgIGZvcmNlQ2FuRXhpdAorICAgICAgICAgICAgfHwgIWlzSW50MzJQcmVkaWN0aW9uKGNo
aWxkVmFsdWUxLm1fdHlwZSkKKyAgICAgICAgICAgIHx8ICFpc0ludDMyUHJlZGljdGlvbihjaGls
ZFZhbHVlMi5tX3R5cGUpKTsKKyAgICAgICAgY2hpbGRWYWx1ZTEuZmlsdGVyKFByZWRpY3RJbnQz
Mik7CisgICAgICAgIGNoaWxkVmFsdWUyLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNwZWN1bGF0ZU51bWJlckJpbmFyeShOb2RlJiBub2RlKQorICAgIHsKKyAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgY2hpbGRWYWx1ZTEgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
OworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMiA9IGZvck5vZGUobm9kZS5jaGls
ZDIoKSk7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgICAgICFpc051bWJlclBy
ZWRpY3Rpb24oY2hpbGRWYWx1ZTEubV90eXBlKQorICAgICAgICAgICAgfHwgIWlzTnVtYmVyUHJl
ZGljdGlvbihjaGlsZFZhbHVlMi5tX3R5cGUpKTsKKyAgICAgICAgY2hpbGRWYWx1ZTEuZmlsdGVy
KFByZWRpY3ROdW1iZXIpOworICAgICAgICBjaGlsZFZhbHVlMi5maWx0ZXIoUHJlZGljdE51bWJl
cik7CisgICAgfQorICAgIAogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgR3JhcGgm
IG1fZ3JhcGg7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2
aXNpb24gMTE3NjEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0NCw2ICsxNDQsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAg
Ym9vbCBtZXJnZUZsYWdzKE5vZGVGbGFncyBmbGFncykKICAgICB7CisgICAgICAgIEFTU0VSVCgh
KGZsYWdzICYgTm9kZURvZXNOb3RFeGl0KSk7CiAgICAgICAgIE5vZGVGbGFncyBuZXdGbGFncyA9
IG1fZmxhZ3MgfCBmbGFnczsKICAgICAgICAgaWYgKG5ld0ZsYWdzID09IG1fZmxhZ3MpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTMsNiArMTU0LDcgQEAgc3RydWN0IE5vZGUgewog
ICAgIAogICAgIGJvb2wgZmlsdGVyRmxhZ3MoTm9kZUZsYWdzIGZsYWdzKQogICAgIHsKKyAgICAg
ICAgQVNTRVJUKGZsYWdzICYgTm9kZURvZXNOb3RFeGl0KTsKICAgICAgICAgTm9kZUZsYWdzIG5l
d0ZsYWdzID0gbV9mbGFncyAmIGZsYWdzOwogICAgICAgICBpZiAobmV3RmxhZ3MgPT0gbV9mbGFn
cykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3NSw3ICsxNzcsMjAgQEAgc3RydWN0
IE5vZGUgewogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBOb2RlTXVzdEdlbmVyYXRl
OwogICAgIH0KLQorICAgIAorICAgIHZvaWQgc2V0Q2FuRXhpdChib29sIGV4aXRzKQorICAgIHsK
KyAgICAgICAgaWYgKGV4aXRzKQorICAgICAgICAgICAgbV9mbGFncyAmPSB+Tm9kZURvZXNOb3RF
eGl0OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2ZsYWdzIHw9IE5vZGVEb2VzTm90RXhp
dDsKKyAgICB9CisgICAgCisgICAgYm9vbCBjYW5FeGl0KCkKKyAgICB7CisgICAgICAgIHJldHVy
biAhKG1fZmxhZ3MgJiBOb2RlRG9lc05vdEV4aXQpOworICAgIH0KKyAgICAKICAgICBib29sIGlz
Q29uc3RhbnQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gSlNDb25zdGFudDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkocmV2aXNpb24gMTE3
NjEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksNiArNTksOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAjZGVmaW5lIE5vZGVVc2VkQXNWYWx1ZSAgICAgICAgICAgKE5vZGVVc2VkQXNOdW1iZXIgfCBO
b2RlTmVlZHNOZWdaZXJvKQogI2RlZmluZSBOb2RlVXNlZEFzSW50ICAgICAgICAgICAgMHgxMDAw
IC8vIFRoZSByZXN1bHQgb2YgdGhpcyBjb21wdXRhdGlvbiBpcyBrbm93biB0byBiZSB1c2VkIGlu
IGEgY29udGV4dCB0aGF0IHByZWZlcnMsIGJ1dCBkb2VzIG5vdCByZXF1aXJlLCBpbnRlZ2VyIHZh
bHVlcy4KIAorI2RlZmluZSBOb2RlRG9lc05vdEV4aXQgICAgICAgICAgMHgyMDAwIC8vIFRoaXMg
ZmxhZyBpcyBuZWdhdGVkIHRvIG1ha2UgaXQgbmF0dXJhbCBmb3IgdGhlIGRlZmF1bHQgdG8gYmUg
dGhhdCBhIG5vZGUgZG9lcyBleGl0LgorCiB0eXBlZGVmIHVpbnQxNl90IE5vZGVGbGFnczsKIAog
c3RhdGljIGlubGluZSBib29sIG5vZGVVc2VkQXNOdW1iZXIoTm9kZUZsYWdzIGZsYWdzKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiAxMTc2MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUzLDcgKzM0NTMsOSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7Ci0gICAgICAgIGlmIChtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihub2RlLnN0cnVjdHVy
ZVNldCgpKSkgeworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpOworICAgICAgICB2YWx1ZS5maWx0ZXIobm9kZS5zdHJ1Y3R1cmVTZXQo
KSk7CisgICAgICAgIGlmICh2YWx1ZSA9PSBtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkp
IHsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTE3NjEzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYg
KzQ2LDcgQEAgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJVENvbXBpbAogICAgICwg
bV92YXJpYWJsZXMoaml0LmdyYXBoKCkubV9sb2NhbFZhcnMpCiAgICAgLCBtX2xhc3RTZXRPcGVy
YW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCiAgICAgLCBtX3N0YXRlKG1faml0
LmdyYXBoKCkpCisgICAgLCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKGZhbHNlKQogewogfQog
CkBAIC0xMTE2LDYgKzExMTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2lj
QmxvY2smCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoKQogewogICAg
IEFTU0VSVCghbV9jb21waWxlSW5kZXgpOworICAgIG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMg
PSB0cnVlOwogICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IENvZGVPcmlnaW4oMCk7CiAKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQpAQCAtMTI3Niw2
ICsxMjc4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKAogICAg
ICAgICB9IAogI2VuZGlmCiAgICAgfQorICAgIG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgPSBm
YWxzZTsKIH0KIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMTc2
MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxMzcsMjEgKzIxMzcsMjUgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NF
UlQoYXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5
cGVzKTsKICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChr
aW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGVGb3Iobm9kZUluZGV4KSwganVtcFRvRmFpbCwgdGhpcykpOwogICAgIH0KICAgICB2b2lk
IHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291
cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCiAgICAg
eworICAgICAgICBBU1NFUlQoYXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQoKSB8fCBtX2lzQ2hl
Y2tpbmdBcmd1bWVudFR5cGVzKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1Zh
bHVlU291cmNlLCBub2RlVXNlLmluZGV4KCksIGp1bXBUb0ZhaWwpOwogICAgIH0KICAgICAvLyBB
ZGQgYSBzZXQgb2Ygc3BlY3VsYXRpb24gY2hlY2tzIHdpdGhvdXQgYWRkaXRpb25hbCByZWNvdmVy
eS4KICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJj
ZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QmIGp1bXBzVG9GYWlsKQogICAgIHsKKyAgICAgICAgQVNTRVJUKGF0KG1fY29tcGlsZUlu
ZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7CiAgICAgICAgIFZl
Y3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcCwgMTY+IEp1bXBWZWN0b3IgPSBqdW1wc1RvRmFpbC5q
dW1wcygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgSnVtcFZlY3Rvci5zaXpl
KCk7ICsraSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJj
ZSwgbm9kZUluZGV4LCBKdW1wVmVjdG9yW2ldKTsKICAgICB9CiAgICAgdm9pZCBzcGVjdWxhdGlv
bkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBu
b2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKQogICAgIHsKKyAg
ICAgICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5n
QXJndW1lbnRUeXBlcyk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNv
dXJjZSwgbm9kZVVzZS5pbmRleCgpLCBqdW1wc1RvRmFpbCk7CiAgICAgfQogICAgIC8vIEFkZCBh
IHNwZWN1bGF0aW9uIGNoZWNrIHdpdGggYWRkaXRpb25hbCByZWNvdmVyeS4KQEAgLTIxNTksMTUg
KzIxNjMsMTggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQog
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQoYXQobV9jb21waWxlSW5kZXgpLmNh
bkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKICAgICAgICAgbV9qaXQuY29k
ZUJsb2NrKCktPmFwcGVuZFNwZWN1bGF0aW9uUmVjb3ZlcnkocmVjb3ZlcnkpOwogICAgICAgICBt
X2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3Vy
Y2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlSW5k
ZXgpLCBqdW1wVG9GYWlsLCB0aGlzLCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxh
dGlvblJlY292ZXJpZXMoKSkpOwogICAgIH0KICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3Zlcnkm
IHJlY292ZXJ5KQogICAgIHsKKyAgICAgICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5F
eGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7CiAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5pbmRleCgpLCBqdW1wVG9GYWlsLCBy
ZWNvdmVyeSk7CiAgICAgfQogICAgIHZvaWQgZm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2soRXhpdEtp
bmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2
YWx1ZVJlY292ZXJ5KQogICAgIHsKKyAgICAgICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5j
YW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7CiAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBqdW1wVG9GYWlsKTsKICAg
ICAgICAgCiAgICAgICAgIE5vZGUmIHNldExvY2FsID0gYXQobV9qaXQuZ3JhcGgoKS5tX2Jsb2Nr
c1ttX2Jsb2NrXS0+YXQobV9pbmRleEluQmxvY2sgKyAxKSk7CkBAIC0yMTg2LDYgKzIxOTMsNyBA
QCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIHdoZW4gd2Ugc3RhdGljYWxseSBkZXRlcm1pbmUgdGhh
dCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KICAgICB2b2lkIHRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBOb2RlSW5k
ZXggbm9kZUluZGV4KQogICAgIHsKKyAgICAgICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5j
YW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7CiAjaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQogICAgICAgICBkYXRhTG9nKCJTcGVjdWxhdGl2ZUpJVCB3YXMgdGVybWlu
YXRlZC5cbiIpOwogI2VuZGlmCkBAIC0yMTk2LDYgKzIyMDQsNyBAQCBwdWJsaWM6CiAgICAgfQog
ICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNW
YWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIEVkZ2Ugbm9kZVVzZSkKICAgICB7CisgICAgICAgIEFTU0VS
VChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlw
ZXMpOwogICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihraW5kLCBqc1ZhbHVl
UmVncywgbm9kZVVzZS5pbmRleCgpKTsKICAgICB9CiAgICAgCkBAIC0yMjcxLDYgKzIyODAsOCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOwogICAgIAorICAgIGJv
b2wgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlczsKKyAgICAKICAgICBWZWN0b3I8U2xvd1BhdGhH
ZW5lcmF0b3IqLCA4PiBtX3Nsb3dQYXRoR2VuZXJhdG9yczsgLy8gZG9lc24ndCB1c2UgT3duUHRy
PD4gYmVjYXVzZSBJIGRvbid0IHdhbnQgdG8gaW5jbHVkZSBERkdTbG93UGF0aEdlbmVyYXRvci5o
CiAgICAgVmVjdG9yPFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4+IG1fcGxhbnM7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142892</attachid>
            <date>2012-05-19 21:38:45 -0700</date>
            <delta_ts>2012-05-20 00:35:28 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>recordosrexit_patch_3.diff</filename>
            <type>text/plain</type>
            <size>60175</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3NzA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDEyLTA1LTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIENGQSBzaG91bGQgcmVjb3JkIGlmIGEgbm9kZSBjYW4gT1NSIGV4aXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2OTA1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRzIGEgTm9kZUZs
YWcgdGhhdCBkZW5vdGVzIG5vZGVzIHRoYXQgYXJlIGtub3duIHRvIG5vdCBoYXZlIE9TUiBleGl0
cy4KKyAgICAgICAgVGhpcyBvdWdodCB0byBhaWQgYW55IGJhY2t3YXJkcyBhbmFseXNlcyB0aGF0
IG5lZWQgdG8ga25ldyB3aGVuIGEKKyAgICAgICAgYmFja3dhcmQgZmxvdyBtZXJnZSBtaWdodCBo
YXBwZW4gZHVlIHRvIGEgc2lkZSBleGl0LgorICAgICAgICAKKyAgICAgICAgQWxzbyBhZGRlZCBh
c3NlcnRpb25zIGludG8gc3BlY3VsYXRpb25DaGVjaygpIHRoYXQgZW5zdXJlIHRoYXQgd2UgZGlk
IG5vdAorICAgICAgICBtYXJrIGEgbm9kZSBhcyBub24tZXhpdGluZyBhbmQgdGhlbiBwcm9tcHRs
eSBjb21waWxlIGluIGFuIGV4aXQuIFRoaXMKKyAgICAgICAgaGVscGVkIGNhdGNoIHNvbWUgbWlu
b3IgYnVncyB3aGVyZSB3ZSB3ZXJlIGRvaW5nIHVubmVjZXNzYXJ5IHNwZWN1bGF0aW9uCisgICAg
ICAgIGNoZWNrcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBwZXJmLW5ldXRyYWwgY2hh
bmdlLiBUaGUgc3BlY3VsYXRpb24gY2hlY2tzIHRoYXQgdGhpcyByZW1vdmVzCisgICAgICAgIHdl
cmUgbm90IG9uIGhvdCBwYXRocyBvZiBtYWpvciBiZW5jaG1hcmtzLgorCisgICAgICAgICogYnl0
ZWNvZGUvUHJlZGljdGVkVHlwZS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aXNB
bnlQcmVkaWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R0Fic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpzcGVj
dWxhdGVJbnQzMlVuYXJ5KToKKyAgICAgICAgKEFic3RyYWN0U3RhdGUpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0U3RhdGU6OnNwZWN1bGF0ZU51bWJlclVuYXJ5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFN0YXRlOjpzcGVjdWxhdGVCb29sZWFuVW5hcnkpOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnNwZWN1bGF0ZUludDMyQmluYXJ5KToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpzcGVjdWxhdGVOdW1iZXJCaW5hcnkpOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bWVyZ2VGbGFncyk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6ZmlsdGVyRmxhZ3MpOgorICAgICAgICAoTm9kZSk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2V0Q2FuRXhpdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6Y2FuRXhpdCk6CisgICAgICAgICogZGZnL0RGR05vZGVGbGFncy5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6bm9kZUZsYWdzQXNTdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
RmxhZ3MuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMy
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24pOgorICAg
ICAgICAoU3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUludEludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTItMDUtMTcgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYSB0eXBvIHRoYXQg
R2VvZmYgbm90aWNlZCBidXQgdGhhdCBJIGZvcmdvdCB0byBmaXggaW4gdGhlIGxhc3QgY29tbWl0
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlw
ZS5oCShyZXZpc2lvbiAxMTc3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHJlZGljdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3MiwxMiBAQCBzdGF0aWMg
Y29uc3QgUHJlZGljdGVkVHlwZSBGaXhlZEluZGV4ZWRTCiAKIHR5cGVkZWYgYm9vbCAoKlByZWRp
Y3Rpb25DaGVja2VyKShQcmVkaWN0ZWRUeXBlKTsKIAorLy8gRHVtbXkgcHJlZGljdGlvbiBjaGVj
a2VyLCBvbmx5IHVzZWZ1bCBpZiBzb21lb25lIGluc2lzdHMgb24gcmVxdWlyaW5nIGEgcHJlZGlj
dGlvbiBjaGVja2VyLgoraW5saW5lIGJvb2wgaXNBbnlQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUp
Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGlubGluZSBib29sIGlzQ2VsbFByZWRpY3Rpb24o
UHJlZGljdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gISEodmFsdWUgJiBQcmVkaWN0Q2Vs
bCkgJiYgISh2YWx1ZSAmIH5QcmVkaWN0Q2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDExNzcwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2Niw0MSArMjY2LDU3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBXZWFrSlNDb25zdGFudDog
ewogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fZ3JhcGgudmFsdWVPZkpTQ29uc3Rh
bnQobm9kZUluZGV4KSk7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAg
ICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOworICAgICAgICBib29sIGNhbkV4aXQgPSBmYWxzZTsKKyAgICAgICAgY2FuRXhp
dCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKSA9PSBQcmVkaWN0Tm9uZTsKKyAg
ICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpID0gbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3Zhcmlh
Ymxlcy5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7CisgICAgICAgICAgICBp
ZiAodmFsdWUuaXNDbGVhcigpKQorICAgICAgICAgICAgICAgIGNhbkV4aXQgfD0gdHJ1ZTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KSA9IHZhbHVlOworICAgICAgICB9CisgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChjYW5FeGl0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6IHsKICAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAgIGlm
IChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgIGlmIChu
b2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURv
dWJsZUZvcm1hdCgpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUp
OwogICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpLnNldChQcmVk
aWN0RG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwogICAgICAgICBpZiAoaXNJbnQzMlByZWRp
Y3Rpb24ocHJlZGljdGVkVHlwZSkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihQcmVkaWN0SW50MzIpOwotICAgICAgICBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlv
bihwcmVkaWN0ZWRUeXBlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9kZSk7
CisgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7Cisg
ICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzQXJyYXlQcmVkaWN0aW9uKGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihQcmVkaWN0QXJyYXkpOwotICAgICAgICBlbHNlIGlmIChpc0J5dGVBcnJheVByZWRp
Y3Rpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgIH0gZWxzZSBpZiAoaXNCeXRlQXJyYXlQcmVk
aWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlz
Qnl0ZUFycmF5UHJlZGljdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEJ5dGVBcnJheSk7
Ci0gICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpCi0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Qm9vbGVhbik7
CisgICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgCiAgICAgICAgIG1f
dmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7
CiAgICAgICAgIGJyZWFrOwpAQCAtMzA5LDYgKzMyNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICAvLyBB
c3NlcnQgdGhhdCB0aGUgc3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNldC4KICAgICAgICAg
QVNTRVJUKCFtX2Jsb2NrLT52YWx1ZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpLmlzQ2xl
YXIoKSk7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CkBAIC0zNDUsMTAgKzM2MiwxMCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2ZvdW5kQ29u
c3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihQcmVkaWN0SW50MzIpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlKTsK
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC0zNTksMTIgKzM3NiwxNiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBBU1NFUlQoY2hpbGQuaXNJbnQzMigpKTsK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoSlNWYWx1ZShjaGlsZC5hc1VJbnQz
MigpKSk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBpZiAoIW5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICBpZiAoIW5v
ZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFByZWRpY3REb3VibGUpOwotICAgICAgICBlbHNlCisgICAgICAgICAgICBub2RlLnNl
dENhbkV4aXQoZmFsc2UpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KHRydWUpOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIApA
QCAtMzc2LDE0ICszOTcsMTcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoSlNWYWx1ZShKU0M6OnRvSW50MzIoY2hpbGQuYXNEb3VibGUoKSkpKTsKICAgICAgICAg
ICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAg
ICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwogICAgICAgICBlbHNlIGlmIChtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgICAgICBzcGVj
dWxhdGVOdW1iZXJVbmFyeShub2RlKTsKICAgICAgICAgZWxzZSBpZiAobV9ncmFwaFtub2RlLmNo
aWxkMSgpXS5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgICAgICBzcGVjdWxh
dGVCb29sZWFuVW5hcnkobm9kZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5vZGUuc2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KFByZWRpY3RJbnQzMik7CiAgICAgICAgIGJyZWFrOwpAQCAtMzk0LDkgKzQxOCwxMCBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmIChjaGlsZCAm
JiBjaGlsZC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIGNoaWxkLmFzTnVtYmVyKCkpKTsKICAg
ICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOworICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBzcGVj
dWxhdGVOdW1iZXJVbmFyeShub2RlKTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQ
cmVkaWN0RG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDA4LDI3ICs0MzMsMjkg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAo
bGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkgewog
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChKU1ZhbHVlKGxlZnQuYXNOdW1iZXIo
KSArIHJpZ2h0LmFzTnVtYmVyKCkpKTsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0
cnVlOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFByZWRpY3RJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCisgICAg
ICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVG
bGFncygpKSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQz
Mik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlTnVtYmVyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5j
aGlsZDIoKV0pKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQ
cmVkaWN0TnVtYmVyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVy
KFByZWRpY3ROdW1iZXIpOworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5vZGUp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gVmFs
dWVBZGQpIHsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RTdHJpbmcgfCBQcmVkaWN0
SW50MzIgfCBQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAvLyBXZSBkb24ndCBo
YW5kbGUgdGhpcyB5ZXQuIDotKAogICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTQzOCwxNiArNDY1LDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmQKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYm
IHJpZ2h0LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
SlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgLSByaWdodC5hc051bWJlcigpKSk7CiAgICAgICAgICAg
ICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAobV9ncmFw
aC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZUludDMyQmluYXJ5KAorICAgICAgICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNhdGVJ
bnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpOwogICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7Ci0g
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAg
ICAgICBzcGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7CiAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ1Nywx
NCArNDg0LDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAg
ICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoSlNWYWx1ZSgtY2hpbGQuYXNOdW1iZXIoKSkpOwogICAgICAgICAg
ICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fZ3Jh
cGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZUludDMyVW5hcnkoCisgICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0
ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsK
KyAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7CiAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ3
NSwxNiArNTA0LDE4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0Lmlz
TnVtYmVyKCkpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoSlNWYWx1ZShs
ZWZ0LmFzTnVtYmVyKCkgKiByaWdodC5hc051bWJlcigpKSk7CiAgICAgICAgICAgICBtX2ZvdW5k
Q29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAobV9ncmFwaC5tdWxTaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMy
QmluYXJ5KAorICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgIW5vZGVDYW5U
cnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKQorICAgICAgICAgICAgICAgIHx8
ICFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpOwogICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoUHJlZGljdE51bWJlcik7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVy
KFByZWRpY3ROdW1iZXIpOworICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7CiAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTUxNiwxNiArNTQ3LDE3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOworICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0s
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIp
OwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMy
KTsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoCisgICAgICAgICAg
ICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkKKyAg
ICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBz
cGVjdWxhdGVJbnQzMkJpbmFyeShub2RlLCB0cnVlKTsgLy8gZm9yY2luZyBjYW4tZXhpdCwgd2hp
Y2ggaXMgYSBiaXQgb24gdGhlIGNvbnNlcnZhdGl2ZSBzaWRlLgogICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJl
cik7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIp
OworICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7CiAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTUzNSwxNCArNTY3LDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoSlNWYWx1ZShmYWJzKGNoaWxkLmFzTnVtYmVyKCkpKSk7
CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIG5vZGUu
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgJiYg
bm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKQorICAgICAgICAgICAgJiYgbm9kZS5j
YW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnko
bm9kZSwgdHJ1ZSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJ
bnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgc3BlY3VsYXRlTnVt
YmVyVW5hcnkobm9kZSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERv
dWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU1Miw5ICs1ODYsMTAgQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAoY2hpbGQgJiYg
Y2hpbGQuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChK
U1ZhbHVlKHNxcnQoY2hpbGQuYXNOdW1iZXIoKSkpKTsKICAgICAgICAgICAgIG1fZm91bmRDb25z
dGFudHMgPSB0cnVlOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2Rl
KTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtNTYzLDE5ICs1OTgsMjYgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChjaGlsZENvbnN0KSB7CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KGpzQm9vbGVhbighY2hpbGRDb25zdC50
b0Jvb2xlYW4oKSkpOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXTsKICAgICAgICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24oY2hpbGQucHJl
ZGljdGlvbigpKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFBy
ZWRpY3RCb29sZWFuKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlRmlu
YWxPYmplY3RPck90aGVyKCkpCisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnkobm9k
ZSk7CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JP
dGhlcigpKSB7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoCisgICAgICAgICAgICAgICAg
IWlzRmluYWxPYmplY3RPck90aGVyUHJlZGljdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGlj
dEZpbmFsT2JqZWN0IHwgUHJlZGljdE90aGVyKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hv
dWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkpCisgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQuc2hv
dWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkpIHsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dCgKKyAgICAgICAgICAgICAgICAhaXNBcnJheU9yT3RoZXJQcmVkaWN0aW9uKGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihQcmVkaWN0QXJyYXkgfCBQcmVkaWN0T3RoZXIpOwotICAgICAgICBlbHNlIGlmIChj
aGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICB9IGVsc2UgaWYgKGNoaWxk
LnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5h
cnkobm9kZSk7CiAgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU51bWJlcigp
KQotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJl
cik7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChQcmVkaWN0Qm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTU4Niw2ICs2MjgsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgY2FzZSBJc1N0cmluZzoKICAgICBjYXNlIElzT2JqZWN0OgogICAgIGNhc2UgSXNGdW5j
dGlvbjogeworICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBKU1ZhbHVl
IGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hp
bGQpIHsKICAgICAgICAgICAgIGJvb2wgZm91bmRDb25zdGFudCA9IHRydWU7CkBAIC02NDgsNiAr
NjkxLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9mb3VuZENvbnN0
YW50cyA9IHRydWU7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC02NTYsNDcgKzcwMCw3MCBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIE5vZGUmIGxl
ZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwogICAgICAgICBOb2RlJiByaWdodCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDIoKV07CiAgICAgICAgIFByZWRpY3RlZFR5cGUgZmlsdGVyOwotICAgICAg
ICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihsZWZ0LCByaWdodCkpCisgICAgICAg
IFByZWRpY3Rpb25DaGVja2VyIGNoZWNrZXI7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkgewogICAgICAgICAgICAgZmlsdGVyID0gUHJlZGlj
dEludDMyOwotICAgICAgICBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobGVm
dCwgcmlnaHQpKQorICAgICAgICAgICAgY2hlY2tlciA9IGlzSW50MzJQcmVkaWN0aW9uOworICAg
ICAgICB9IGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihsZWZ0LCByaWdodCkp
IHsKICAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3ROdW1iZXI7Ci0gICAgICAgIGVsc2UgaWYg
KG5vZGUub3AoKSA9PSBDb21wYXJlRXEpIHsKKyAgICAgICAgICAgIGNoZWNrZXIgPSBpc051bWJl
clByZWRpY3Rpb247CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCgpID09IENvbXBhcmVFcSkg
ewogICAgICAgICAgICAgaWYgKChtX2dyYXBoLmlzQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5pbmRl
eCgpKQogICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUu
Y2hpbGQxKCkuaW5kZXgoKSkuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgfHwgKG1fZ3JhcGgu
aXNDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpCiAgICAgICAgICAgICAgICAgICAgICYm
IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKS5pc051bGwo
KSkpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyB3b24ndCBjbG9iYmVy
IHRoZSB3b3JsZC4gQnV0IHRoYXQncyBhbGwgd2Uga25vdy4KKyAgICAgICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlRmlu
YWxPYmplY3QobGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1
bGF0ZUZpbmFsT2JqZWN0KGxlZnQsIHJpZ2h0KSkgewogICAgICAgICAgICAgICAgIGZpbHRlciA9
IFByZWRpY3RGaW5hbE9iamVjdDsKLSAgICAgICAgICAgIGVsc2UgaWYgKE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZUFycmF5KGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICBjaGVja2VyID0gaXNG
aW5hbE9iamVjdFByZWRpY3Rpb247CisgICAgICAgICAgICB9IGVsc2UgaWYgKE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZUFycmF5KGxlZnQsIHJpZ2h0KSkgewogICAgICAgICAgICAgICAgIGZpbHRlciA9
IFByZWRpY3RBcnJheTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGxlZnQuc2hvdWxkU3BlY3VsYXRl
RmluYWxPYmplY3QoKSAmJiByaWdodC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIo
KSkgeworICAgICAgICAgICAgICAgIGNoZWNrZXIgPSBpc0FycmF5UHJlZGljdGlvbjsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAobGVmdC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpICYmIHJp
Z2h0LnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKSB7CisgICAgICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAgICAgICAgICAgICAgICAhaXNGaW5hbE9iamVjdFBy
ZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICAgICAg
ICAgIHx8ICFpc0ZpbmFsT2JqZWN0T3JPdGhlclByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxk
MigpKS5tX3R5cGUpKTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihQcmVkaWN0RmluYWxPYmplY3QpOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCB8IFByZWRpY3RPdGhlcik7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0LnNob3VsZFNw
ZWN1bGF0ZUZpbmFsT2JqZWN0KCkgJiYgbGVmdC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9y
T3RoZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgICAg
ICAgICAgICAgIWlzRmluYWxPYmplY3RPck90aGVyUHJlZGljdGlvbihmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgfHwgIWlzRmluYWxPYmplY3RQcmVk
aWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSk7CiAgICAgICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0IHwgUHJlZGlj
dE90aGVyKTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQ
cmVkaWN0RmluYWxPYmplY3QpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fSBlbHNlIGlmIChsZWZ0LnNob3VsZFNwZWN1bGF0ZUFycmF5KCkgJiYgcmlnaHQuc2hvdWxkU3Bl
Y3VsYXRlQXJyYXlPck90aGVyKCkpIHsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0RmluYWxPYmplY3QpOwotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCB8IFByZWRpY3RPdGhl
cik7CisgICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAgICAgICAgICAgICAg
ICAhaXNBcnJheVByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCisgICAg
ICAgICAgICAgICAgICAgIHx8ICFpc0FycmF5T3JPdGhlclByZWRpY3Rpb24oZm9yTm9kZShub2Rl
LmNoaWxkMigpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFByZWRpY3RBcnJheSB8IFByZWRpY3RPdGhlcik7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0LnNob3VsZFNwZWN1bGF0
ZUFycmF5KCkgJiYgbGVmdC5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkgewotICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVj
dCB8IFByZWRpY3RPdGhlcik7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigp
KS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0KTsKKyAgICAgICAgICAgICAgICBub2RlLnNldENh
bkV4aXQoCisgICAgICAgICAgICAgICAgICAgICFpc0FycmF5T3JPdGhlclByZWRpY3Rpb24oZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICAgICAgICAgIHx8ICFpc0Fy
cmF5UHJlZGljdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpOworICAgICAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSB8IFByZWRp
Y3RPdGhlcik7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
UHJlZGljdEFycmF5KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgZmlsdGVyID0gUHJlZGljdFRvcDsKKyAgICAgICAgICAgICAg
ICBjaGVja2VyID0gaXNBbnlQcmVkaWN0aW9uOwogICAgICAgICAgICAgICAgIGNsb2JiZXJTdHJ1
Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0VG9wOworICAgICAgICAgICAgY2hlY2tlciA9IGlz
QW55UHJlZGljdGlvbjsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9j
ayk7CiAgICAgICAgIH0KKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAgICAgICAgIWNo
ZWNrZXIoZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICB8fCAhY2hl
Y2tlcihmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpOwogICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihmaWx0ZXIpOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihmaWx0ZXIpOwogICAgICAgICBicmVhazsKQEAgLTcwOCwyNSArNzc1LDcyIEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgaWYgKGxl
ZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoanNCb29sZWFuKGxlZnQuYXNOdW1iZXIo
KSA9PSByaWdodC5hc051bWJlcigpKSk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0g
dHJ1ZTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RC
b29sZWFuKTsKKyAgICAgICAgaWYgKG1fZ3JhcGguaXNKU0NvbnN0YW50KG5vZGUuY2hpbGQxKCku
aW5kZXgoKSkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZK
U0NvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgICAgICBpZiAoIXZhbHVl
LmlzTnVtYmVyKCkgJiYgIXZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFudChub2RlLmNoaWxk
MigpLmluZGV4KCkpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1
ZU9mSlNDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpOworICAgICAgICAgICAgaWYgKCF2
YWx1ZS5pc051bWJlcigpICYmICF2YWx1ZS5pc1N0cmluZygpKSB7CisgICAgICAgICAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigKKyAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkobm9kZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKAorICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1f
Z3JhcGhbbm9kZS5jaGlsZDIoKV0pKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5h
cnkobm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoCisgICAgICAgICAgICAgICAgbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpIHsKKyAgICAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgICAgICAgICAhaXNGaW5hbE9iamVjdFByZWRpY3Rpb24o
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICAgICAgfHwgIWlzRmlu
YWxPYmplY3RQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSk7CisgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0RmluYWxPYmplY3Qp
OworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEZpbmFs
T2JqZWN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChOb2Rl
OjpzaG91bGRTcGVjdWxhdGVBcnJheSgKKyAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkgeworICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KAorICAgICAgICAgICAgICAgICFpc0FycmF5UHJlZGljdGlvbihmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkKKyAgICAgICAgICAgICAgICB8fCAhaXNBcnJheVByZWRpY3Rpb24o
Zm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoUHJlZGljdFN0cmluZyk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVy
KFByZWRpY3RJbnQzMik7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdElu
dDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckF0Ogor
ICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFByZWRpY3RTdHJpbmcpOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KFByZWRpY3RTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2Ug
R2V0QnlWYWw6IHsKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBpZiAo
IW5vZGUucHJlZGljdGlvbigpIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24o
KSB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpIHsKICAgICAgICAgICAg
IG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC04MjEsNiArOTM1LDcg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAg
CiAgICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ucHJlZGljdGlvbigpIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkg
ewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTkzMiwyMyArMTA0NywyOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBBcnJheVB1c2g6CisgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoUHJlZGljdEFycmF5KTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0
TnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEFycmF5UG9w
OgorICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBSZWdF
eHBFeGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAor
ICAgICAgICAgICAgIWlzQ2VsbFByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpCisgICAgICAgICAgICB8fCAhaXNDZWxsUHJlZGljdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLm1fdHlwZSkpOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0Q2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RD
ZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEp1bXA6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBCcmFuY2g6
IHsKQEAgLTk1OSw2ICsxMDgwLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICAgICAgICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gVGFrZVRydWU7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBUYWtl
RmFsc2U7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IFRoZSBhYm92ZSBoYW5kbGVzIHRo
ZSB0cml2aWFsIGNhc2VzIG9mIHNwYXJzZSBjb25kaXRpb25hbApAQCAtOTcwLDIzICsxMDkyLDM0
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgLy8g
ICAgdGhlIGJyYW5jaC4KICAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldOwogICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEJvb2xlYW4pOwotICAg
ICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKKyAgICAgICAgZWxzZSBp
ZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90aGVyKCkpIHsKKyAgICAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgICAgICAgICAhaXNGaW5hbE9iamVjdE9yT3Ro
ZXJQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0RmluYWxPYmplY3QgfCBQcmVk
aWN0T3RoZXIpOwotICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVBcnJheU9y
T3RoZXIoKSkKKyAgICAgICAgfSBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVBcnJheU9y
T3RoZXIoKSkgeworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAgICAgICAgICAg
ICFpc0FycmF5T3JPdGhlclByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJh
eSB8IFByZWRpY3RPdGhlcik7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFBy
ZWRpY3RJbnQzMik7CisgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKICAgICAgICAg
ZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBtX2JyYW5jaERpcmVjdGlvbiA9IFRha2VCb3Ro
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFJldHVybjoK
KyAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxz
ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAgICBjYXNlIFRocm93OgogICAgIGNhc2Ug
VGhyb3dSZWZlcmVuY2VFcnJvcjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICBjYXNlIFRvUHJpbWl0aXZlOiB7CkBAIC05OTQsMTIgKzExMjcsMTMgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAoY2hpbGRDb25zdCAmJiBj
aGlsZENvbnN0LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoY2hpbGRDb25zdCk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAg
ICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldOwogICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7Ci0g
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwor
ICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC0xMDEzLDIwICsxMTQ3LDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIHR5cGUgfD0gUHJlZGljdFN0cmluZzsKICAgICAg
ICAgfQogICAgICAgICBkZXN0aW5hdGlvbi5zZXQodHlwZSk7CisgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNh
c2UgU3RyQ2F0OgorICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAogICAgIGNhc2UgTmV3QXJyYXk6CiAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlKCkpOwogICAg
ICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKICAgICBjYXNlIE5ld1JlZ2V4cDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsK
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7
CiAgICAgICAgIGJyZWFrOwpAQCAtMTA0MSw5ICsxMTc5LDEyIEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIC8vIG9iamVjdCwgc28gdGhlcmUn
cyBub3RoaW5nIHRvIGRvLiBJIGRvbid0IHRoaW5rIHRoaXMgY2FzZSB3aWxsCiAgICAgICAgICAg
ICAvLyBiZSBoaXQsIGJ1dCB0aGVuIGFnYWluLCB5b3UgbmV2ZXIga25vdy4KICAgICAgICAgICAg
IGRlc3RpbmF0aW9uID0gc291cmNlOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBub2Rl
LnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIAogICAgICAgICBpZiAoaXNPdGhlclByZWRpY3Rp
b24oY2hpbGQucHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAgc291cmNlLmZpbHRlcihQcmVk
aWN0T3RoZXIpOwogICAgICAgICAgICAgZGVzdGluYXRpb24uc2V0KFByZWRpY3RPYmplY3RPdGhl
cik7CkBAIC0xMDY1LDYgKzEyMDYsMTEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07
CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7
CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlSW5kZXgp
OworICAgICAgICAKKyAgICAgICAgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0
KCkpCisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzRmluYWxPYmplY3RQcmVkaWN0aW9u
KHNvdXJjZS5tX3R5cGUpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KCFpc0NlbGxQcmVkaWN0aW9uKHNvdXJjZS5tX3R5cGUpKTsKICAgICAgICAgICAgIAogICAg
ICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkKICAgICAgICAgICAg
IHNvdXJjZS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0KTsKQEAgLTEwNzQsMjUgKzEyMjAsMzIg
QEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIH0KICAgICAg
ICAgICAgIAogICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAg
ICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2Up
OwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fZ3JhcGgubV9nbG9iYWxEYXRhLmFj
dGl2YXRpb25TdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1
ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgor
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+YXJn
dW1lbnRzU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CiAgICAg
Y2FzZSBUZWFyT2ZmQXJndW1lbnRzOgotICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVk
OgorICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAvLyBEb2VzIG5vdGhp
bmcgdGhhdCBpcyB1c2VyLXZpc2libGUuCiAgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDaGVj
a0FyZ3VtZW50c05vdENyZWF0ZWQ6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGg6CiAg
ICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4ZWN1dGFibGUgZG9lcyBub3QgZXNjYXBlIGl0
cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6ZQpAQCAtMTEwMSwxMiArMTI1NCwxNSBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIC8vIFdlIHBl
cmZvcm0gZnVydGhlciBvcHRpbWl6YXRpb25zIG9uIHRoaXMgbGF0ZXIgb24uCiAgICAgICAgIGlm
IChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KGpzTnVtYmVyKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KHRydWUpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3Ro
U2FmZToKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgLy8gVGhpcyBw
b3RlbnRpYWxseSBjbG9iYmVycyBhbGwgc3RydWN0dXJlcyBpZiB0aGUgYXJndW1lbnRzIG9iamVj
dCBoYWQgYSBnZXR0ZXIKICAgICAgICAgLy8gaW5zdGFsbGVkIG9uIHRoZSBsZW5ndGggcHJvcGVy
dHkuCiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CkBAIC0xMTE2LDYg
KzEyNzIsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKKyAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBl
eGVjdXRhYmxlIGRvZXMgbm90IGVzY2FwZSBpdHMgYXJndW1lbnRzLCBzbyB3ZSBjYW4gb3B0aW1p
emUKICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgZW5kcyB1
cCBiZWluZyBmdXJ0aGVyIG9wdGltaXplZCBieSB0aGUKICAgICAgICAgLy8gQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS4KQEAgLTExMjQsNiArMTI4MSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNh
c2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZToKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgLy8gVGhpcyBwb3RlbnRpYWxseSBjbG9iYmVycyBhbGwgc3RydWN0dXJlcyBp
ZiB0aGUgcHJvcGVydHkgd2UncmUgYWNjZXNzaW5nIGhhcwogICAgICAgICAvLyBhIGdldHRlci4g
V2UgZG9uJ3Qgc3BlY3VsYXRlIGFnYWluc3QgdGhpcy4KICAgICAgICAgY2xvYmJlclN0cnVjdHVy
ZXMoaW5kZXhJbkJsb2NrKTsKQEAgLTExMzYsMjcgKzEyOTQsMzMgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgY2Fz
ZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6Cisg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5mdW5j
dGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0
Q2FsbGVlOgorICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFByZWRpY3RGdW5jdGlvbik7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgY2FzZSBHZXRTY29wZUNoYWluOgorICAgICAgICBub2RlLnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RDZWxsT3RoZXIp
OwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0U2NvcGVkVmFyOgor
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0
U2NvcGVkVmFyOgorICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBjbG9i
YmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgIGNhc2UgR2V0QnlJZDoKICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKKyAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBpZiAoIW5vZGUucHJlZGljdGlvbigpKSB7CiAg
ICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTE2
OCw3NyArMTMzMiw5NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoK
KyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFByZWRpY3RJbnQzMik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRBcmd1bWVu
dHNMZW5ndGg6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFyZ3VtZW50cyk7CiAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIEdldFN0cmluZ0xlbmd0aDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1N0cmluZ1By
ZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdFN0cmluZyk7CiAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAog
ICAgIGNhc2UgR2V0Qnl0ZUFycmF5TGVuZ3RoOgorICAgICAgICBub2RlLnNldENhbkV4aXQoIWlz
Qnl0ZUFycmF5UHJlZGljdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Qnl0ZUFycmF5KTsKICAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEdldEludDhBcnJheUxlbmd0aDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KCFpc0ludDhBcnJheVByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsK
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDhBcnJheSk7
CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBHZXRJbnQxNkFycmF5TGVuZ3RoOgorICAgICAgICBub2RlLnNldENh
bkV4aXQoIWlzSW50MTZBcnJheVByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKTsKICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDE2
QXJyYXkpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0SW50MzJBcnJheUxlbmd0aDoKKyAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KCFpc0ludDMyQXJyYXlQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRp
Y3RJbnQzMkFycmF5KTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50
MzIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldFVpbnQ4QXJyYXlMZW5ndGg6CisgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50OEFycmF5UHJlZGljdGlvbihmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0VWludDhBcnJheSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJl
ZGljdEludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRVaW50OENsYW1wZWRBcnJh
eUxlbmd0aDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQ4Q2xhbXBlZEFycmF5UHJl
ZGljdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0VWludDhDbGFtcGVkQXJyYXkpOwogICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgR2V0VWludDE2QXJyYXlMZW5ndGg6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgh
aXNVaW50MTZBcnJheVByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsK
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdFVpbnQxNkFycmF5
KTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEdldFVpbnQzMkFycmF5TGVuZ3RoOgorICAgICAgICBub2RlLnNl
dENhbkV4aXQoIWlzVWludDMyQXJyYXlQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RV
aW50MzJBcnJheSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMy
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRGbG9hdDMyQXJyYXlMZW5ndGg6CisgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNGbG9hdDMyQXJyYXlQcmVkaWN0aW9uKGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3RGbG9hdDMyQXJyYXkpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KFByZWRpY3RJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0RmxvYXQ2NEFycmF5
TGVuZ3RoOgorICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzRmxvYXQ2NEFycmF5UHJlZGljdGlv
bihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0RmxvYXQ2NEFycmF5KTsKICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAotICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewor
ICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgdmFsdWUuZmlsdGVyKG5vZGUuc3RydWN0dXJlU2V0KCkpOworICAgICAgICBub2RlLnNl
dENhbkV4aXQodmFsdWUgIT0gZm9yTm9kZShub2RlLmNoaWxkMSgpKSk7CiAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBwcm9wYWdhdGUgdGhlIHN0cnVjdHVyZSBzZXRzIG9m
IGNvbnN0YW50cyAoaS5lLiBwcm90b3R5cGVzKS4KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIobm9kZS5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkgPSB2YWx1ZTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAg
ICAgIGJyZWFrOworICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgor
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBjbG9iYmVyU3RydWN0dXJl
cyhpbmRleEluQmxvY2spOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnNldChub2Rl
LnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKICAgICAgICAgbV9oYXZl
U3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0UHJvcGVydHlT
dG9yYWdlOgorICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyAoYWxtb3N0KSBhbHdh
eXMgZm9sbG93ZWQgYnkgR2V0QnlWYWwsIHdoaWNoIGRvZXMgZXhpdC4gU28gbm8gcG9pbnQgaW4g
dHJ5aW5nIHRvIGJlIG1vcmUgcHJlY2lzZS4KICAgICAgICAgUHJlZGljdGVkVHlwZSBiYXNlUHJl
ZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOwogICAgICAgICBp
ZiAoIShiYXNlUHJlZGljdGlvbiAmIFByZWRpY3RJbnQzMikgJiYgYmFzZVByZWRpY3Rpb24pIHsK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwpAQCAtMTMwOSwzOCArMTQ5
Myw0NiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAg
IGJyZWFrOyAKICAgICB9CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJl
ZGljdENlbGwpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3RDZWxsKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IENoZWNrRnVuY3Rpb246CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGllcyEg
V2UgY2FuIGRvIGJldHRlci4KICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
UHJlZGljdEZ1bmN0aW9uKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBiZSBhYmxlIHRvIHBy
b3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlIGtub3cgd2hhdCB0aGUgZnVuY3Rpb24gaXMuCiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRCeUlkOgogICAgIGNhc2UgUHV0
QnlJZERpcmVjdDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CiAgICAgICAgIGNsb2JiZXJT
dHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgY2FzZSBHZXRHbG9iYWxWYXI6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDaGVja0hh
c0luc3RhbmNlOgorICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKICAgICAgICAgLy8gU2FkbHks
IHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgQ2hlY2tIYXNJbnN0
YW5jZQogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgSW5zdGFuY2VPZjoK
KyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAvLyBBZ2Fpbiwgc2FkbHks
IHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgSW5zdGFuY2VPZgog
ICAgICAgICBpZiAoIShtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSAmIH5QcmVk
aWN0Q2VsbCkgJiYgIShmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSAmIH5QcmVkaWN0Q2Vs
bCkpCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2Vs
bCk7CkBAIC0xMzUwLDkgKzE1NDIsMTEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgCiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBGbHVzaDoK
KyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICBjYXNlIEJyZWFrcG9pbnQ6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDYWxsOgpAQCAtMTM2
MSwxNyArMTU1NSwyMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgY2FzZSBSZXNvbHZlQmFzZToKICAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0Ogog
ICAgIGNhc2UgUmVzb2x2ZUdsb2JhbDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgRm9yY2VPU1JFeGl0OgorICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CiAgICAg
ICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgUGhhbnRvbToKICAgICBjYXNlIElubGluZVN0YXJ0OgogICAgIGNhc2UgTm9wOgorICAg
ICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgY2FzZSBMYXN0Tm9kZVR5cGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTE3NzA0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw2ICsy
MTQsNTAgQEAgcHJpdmF0ZToKICAgICAKICAgICBzdGF0aWMgYm9vbCBtZXJnZVZhcmlhYmxlQmV0
d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291
cmNlLCBOb2RlSW5kZXggZGVzdGluYXRpb25Ob2RlSW5kZXgsIE5vZGVJbmRleCBzb3VyY2VOb2Rl
SW5kZXgpOwogICAgIAorICAgIHZvaWQgc3BlY3VsYXRlSW50MzJVbmFyeShOb2RlJiBub2RlLCBi
b29sIGZvcmNlQ2FuRXhpdCA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
Y2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmb3JjZUNhbkV4aXQgfHwgIWlzSW50MzJQcmVkaWN0aW9uKGNoaWxkVmFsdWUubV90eXBl
KSk7CisgICAgICAgIGNoaWxkVmFsdWUuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgfQorICAg
IAorICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyVW5hcnkoTm9kZSYgbm9kZSkKKyAgICB7CisgICAg
ICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzTnVtYmVyUHJlZGljdGlvbihjaGlsZFZhbHVlLm1f
dHlwZSkpOworICAgICAgICBjaGlsZFZhbHVlLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuVW5hcnkoTm9kZSYgbm9kZSkKKyAgICB7
CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpOworICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzQm9vbGVhblByZWRpY3Rpb24oY2hpbGRW
YWx1ZS5tX3R5cGUpKTsKKyAgICAgICAgY2hpbGRWYWx1ZS5maWx0ZXIoUHJlZGljdEJvb2xlYW4p
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUludDMyQmluYXJ5KE5vZGUmIG5vZGUs
IGJvb2wgZm9yY2VDYW5FeGl0ID0gZmFsc2UpCisgICAgeworICAgICAgICBBYnN0cmFjdFZhbHVl
JiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0
VmFsdWUmIGNoaWxkVmFsdWUyID0gZm9yTm9kZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KAorICAgICAgICAgICAgZm9yY2VDYW5FeGl0CisgICAgICAgICAgICB8fCAh
aXNJbnQzMlByZWRpY3Rpb24oY2hpbGRWYWx1ZTEubV90eXBlKQorICAgICAgICAgICAgfHwgIWlz
SW50MzJQcmVkaWN0aW9uKGNoaWxkVmFsdWUyLm1fdHlwZSkpOworICAgICAgICBjaGlsZFZhbHVl
MS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgY2hpbGRWYWx1ZTIuZmlsdGVyKFByZWRp
Y3RJbnQzMik7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KE5v
ZGUmIG5vZGUpCisgICAgeworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9IGZv
ck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUy
ID0gZm9yTm9kZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAg
ICAgICAgICAgIWlzTnVtYmVyUHJlZGljdGlvbihjaGlsZFZhbHVlMS5tX3R5cGUpCisgICAgICAg
ICAgICB8fCAhaXNOdW1iZXJQcmVkaWN0aW9uKGNoaWxkVmFsdWUyLm1fdHlwZSkpOworICAgICAg
ICBjaGlsZFZhbHVlMS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGNoaWxkVmFsdWUy
LmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICB9CisgICAgCiAgICAgQ29kZUJsb2NrKiBtX2Nv
ZGVCbG9jazsKICAgICBHcmFwaCYgbV9ncmFwaDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxMTc3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDYgKzE0NCw3IEBAIHN0cnVj
dCBOb2RlIHsKICAgICAKICAgICBib29sIG1lcmdlRmxhZ3MoTm9kZUZsYWdzIGZsYWdzKQogICAg
IHsKKyAgICAgICAgQVNTRVJUKCEoZmxhZ3MgJiBOb2RlRG9lc05vdEV4aXQpKTsKICAgICAgICAg
Tm9kZUZsYWdzIG5ld0ZsYWdzID0gbV9mbGFncyB8IGZsYWdzOwogICAgICAgICBpZiAobmV3Rmxh
Z3MgPT0gbV9mbGFncykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE1Myw2ICsxNTQs
NyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBmaWx0ZXJGbGFncyhOb2RlRmxhZ3Mg
ZmxhZ3MpCiAgICAgeworICAgICAgICBBU1NFUlQoZmxhZ3MgJiBOb2RlRG9lc05vdEV4aXQpOwog
ICAgICAgICBOb2RlRmxhZ3MgbmV3RmxhZ3MgPSBtX2ZsYWdzICYgZmxhZ3M7CiAgICAgICAgIGlm
IChuZXdGbGFncyA9PSBtX2ZsYWdzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTc1
LDcgKzE3NywyMCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICByZXR1cm4gbV9mbGFn
cyAmIE5vZGVNdXN0R2VuZXJhdGU7CiAgICAgfQotCisgICAgCisgICAgdm9pZCBzZXRDYW5FeGl0
KGJvb2wgZXhpdHMpCisgICAgeworICAgICAgICBpZiAoZXhpdHMpCisgICAgICAgICAgICBtX2Zs
YWdzICY9IH5Ob2RlRG9lc05vdEV4aXQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZmxh
Z3MgfD0gTm9kZURvZXNOb3RFeGl0OworICAgIH0KKyAgICAKKyAgICBib29sIGNhbkV4aXQoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuICEobV9mbGFncyAmIE5vZGVEb2VzTm90RXhpdCk7CisgICAg
fQorICAgIAogICAgIGJvb2wgaXNDb25zdGFudCgpCiAgICAgewogICAgICAgICByZXR1cm4gb3Ao
KSA9PSBKU0NvbnN0YW50OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
RmxhZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZUZsYWdzLmNwcAkocmV2aXNpb24gMTE3NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlRmxhZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNiArMTMwLDEzIEBAIGNv
bnN0IGNoYXIqIG5vZGVGbGFnc0FzU3RyaW5nKE5vZGVGbGFncyAKICAgICAgICAgaGFzUHJpbnRl
ZCA9IHRydWU7CiAgICAgfQogICAgIAorICAgIGlmICghKGZsYWdzICYgTm9kZURvZXNOb3RFeGl0
KSkgeworICAgICAgICBpZiAoaGFzUHJpbnRlZCkKKyAgICAgICAgICAgIHB0ci5zdHJjYXQoInwi
KTsKKyAgICAgICAgcHRyLnN0cmNhdCgiQ2FuRXhpdCIpOworICAgICAgICBoYXNQcmludGVkID0g
dHJ1ZTsKKyAgICB9CisgICAgCiAgICAgKnB0cisrID0gMDsKICAgICAKICAgICByZXR1cm4gZGVz
Y3JpcHRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmgJ
KHJldmlzaW9uIDExNzcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZs
YWdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDggQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogI2RlZmluZSBOb2RlVXNlZEFzVmFsdWUgICAgICAgICAgIChOb2RlVXNl
ZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybykKICNkZWZpbmUgTm9kZVVzZWRBc0ludCAgICAg
ICAgICAgIDB4MTAwMCAvLyBUaGUgcmVzdWx0IG9mIHRoaXMgY29tcHV0YXRpb24gaXMga25vd24g
dG8gYmUgdXNlZCBpbiBhIGNvbnRleHQgdGhhdCBwcmVmZXJzLCBidXQgZG9lcyBub3QgcmVxdWly
ZSwgaW50ZWdlciB2YWx1ZXMuCiAKKyNkZWZpbmUgTm9kZURvZXNOb3RFeGl0ICAgICAgICAgIDB4
MjAwMCAvLyBUaGlzIGZsYWcgaXMgbmVnYXRlZCB0byBtYWtlIGl0IG5hdHVyYWwgZm9yIHRoZSBk
ZWZhdWx0IHRvIGJlIHRoYXQgYSBub2RlIGRvZXMgZXhpdC4KKwogdHlwZWRlZiB1aW50MTZfdCBO
b2RlRmxhZ3M7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBub2RlVXNlZEFzTnVtYmVyKE5vZGVGbGFn
cyBmbGFncykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTE3NzA0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA1Niw2ICsxMDU2LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
SW50SQogICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKICAgICB9CiAKKyAgICBQcmVkaWN0ZWRU
eXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZUluZGV4KS5tX3R5cGU7CiAgICAgTm9kZSYg
bm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBt
X2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CkBAIC0xMDc3LDcgKzEwNzgsNyBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgIEFTU0VSVCgo
c3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHx8IHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRJ
bnRlZ2VyKTsKIAogICAgICAgICAvLyBJZiB3ZSBrbm93IHRoaXMgd2FzIHNwaWxsZWQgYXMgYW4g
aW50ZWdlciB3ZSBjYW4gZmlsbCB3aXRob3V0IGNoZWNraW5nLgotICAgICAgICBpZiAoc3BpbGxG
b3JtYXQgIT0gRGF0YUZvcm1hdEpTSW50ZWdlciAmJiBzcGlsbEZvcm1hdCAhPSBEYXRhRm9ybWF0
SW50ZWdlcikKKyAgICAgICAgaWYgKCFpc0ludDMyUHJlZGljdGlvbih0eXBlKSkKICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZShKSVRDb21waWxlcjo6
YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lz
dGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwogCiAgICAgICAgIEdQUlJl
ZyBncHIgPSBhbGxvY2F0ZSgpOwpAQCAtMTA5NSw3ICsxMDk2LDcgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IGlu
Zm8ucGF5bG9hZEdQUigpOwogICAgICAgICBtX2dwcnMubG9jayh0YWdHUFIpOwogICAgICAgICBt
X2dwcnMubG9jayhwYXlsb2FkR1BSKTsKLSAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQo
KSAhPSBEYXRhRm9ybWF0SlNJbnRlZ2VyKSAKKyAgICAgICAgaWYgKCFpc0ludDMyUHJlZGljdGlv
bih0eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFn
KSkpOwogICAgICAgICBtX2dwcnMudW5sb2NrKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxl
YXNlKHRhZ0dQUik7CkBAIC0xMTUxLDYgKzExNTIsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgIHJldHVybiBmcHJBbGxvY2F0ZSgpOwogICAgIH0K
IAorICAgIFByZWRpY3RlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlSW5kZXgpLm1f
dHlwZTsKICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0
aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKQEAgLTEx
ODgsNyArMTE5MCw4IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIK
IAogICAgICAgICAgICAgaWYgKHNwaWxsRm9ybWF0ICE9IERhdGFGb3JtYXRKU0ludGVnZXIgJiYg
c3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdEludGVnZXIpIHsKICAgICAgICAgICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlcikpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyUHJl
ZGljdGlvbih0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rl
cikpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6Okxvd2VzdFRhZykpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGZwcik7CiAgICAgICAgICAg
ICAgICAgaGFzVW5ib3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsKIApAQCAtMTIyMSw3ICsxMjI0
LDggQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICBp
ZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0ludGVnZXIpIHsKICAgICAg
ICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIp
LCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAg
IGlmICghaXNOdW1iZXJQcmVkaWN0aW9uKHR5cGUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZUlu
ZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0YWdHUFIs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CiAgICAgICAgICAgICB1bmJveERv
dWJsZSh0YWdHUFIsIHBheWxvYWRHUFIsIGZwciwgc2NyYXRjaC5mcHIoKSk7CiAgICAgICAgICAg
ICBoYXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwogICAgICAgICAgICAgaXNJbnRlZ2Vy
LmxpbmsoJm1faml0KTsKQEAgLTEyODEsNiArMTI4NSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgfQog
CisgICAgUHJlZGljdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGVJbmRleCkubV90
eXBlOwogICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRp
b25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwpAQCAtMTI5
OSw3ICsxMzA0LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAog
ICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKChpbmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9y
bWF0SlMpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Q2VsbCk7Ci0gICAgICAg
IGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdEpTQ2VsbCAmJiBpbmZvLnNwaWxs
Rm9ybWF0KCkgIT0gRGF0YUZvcm1hdENlbGwpCisgICAgICAgIGlmICghaXNDZWxsUHJlZGljdGlv
bih0eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNv
dXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgbm9kZUluZGV4
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0
YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7
CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICBtX2ppdC5sb2FkMzIo
SklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKQEAgLTEzMjAs
NyArMTMyNSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAg
ICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBpbmZvLnBheWxvYWRHUFIoKTsKICAgICAgICAgbV9n
cHJzLmxvY2sodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLmxvY2socGF5bG9hZEdQUik7Ci0gICAg
ICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdEpTQ2VsbCkKKyAgICAgICAg
aWYgKCFpc0NlbGxQcmVkaWN0aW9uKHR5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlSW5kZXgsIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgbV9ncHJzLnVubG9jayh0YWdHUFIpOwog
ICAgICAgICBtX2dwcnMucmVsZWFzZSh0YWdHUFIpOwpAQCAtMzQ0OSw3ICszNDU0LDkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmU6IHsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKG5vZGUuc3RydWN0dXJlU2V0KCkpKSB7CisgICAg
ICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSk7
CisgICAgICAgIHZhbHVlLmZpbHRlcihub2RlLnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgaWYg
KHZhbHVlID09IG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkgewogICAgICAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMTE3NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyOCw2ICsxMDI4LDcg
QEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogI2lmIERGR19FTkFC
TEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nKCJTcGVjSW50QCVkICAgIiwgbm9kZUluZGV4
KTsKICNlbmRpZgorICAgIFByZWRpY3RlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2Rl
SW5kZXgpLm1fdHlwZTsKICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVy
XTsKQEAgLTEwODUsNyArMTA4Niw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUludEkKICAgICAgICAgLy8gQ2hlY2sgdGhlIHZhbHVlIGlzIGFuIGludGVnZXIuCiAgICAg
ICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhncHIpOwot
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJ
bmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgaWYgKCFpc0ludDMyUHJlZGljdGlv
bih0eXBlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93
LCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAgICAgICAgIC8vIElmICFzdHJp
Y3Qgd2UncmUgZG9uZSwgcmV0dXJuLgogICAgICAgICBpZiAoIXN0cmljdCkgewpAQCAtMTE3Myw2
ICsxMTc1LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogI2lm
IERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nKCJTcGVjRG91YmxlQCVkICAg
Iiwgbm9kZUluZGV4KTsKICNlbmRpZgorICAgIFByZWRpY3RlZFR5cGUgdHlwZSA9IG1fc3RhdGUu
Zm9yTm9kZShub2RlSW5kZXgpLm1fdHlwZTsKICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVn
aXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmly
dHVhbFJlZ2lzdGVyXTsKQEAgLTEyNTcsNyArMTI2MCw4IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZURvdWIKIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVn
ZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1
ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKIAotICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGpzVmFsdWVHcHIpLCBub2RlSW5kZXgsIG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICBpZiAoIWlzTnVtYmVyUHJlZGlj
dGlvbih0eXBlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3MoanNWYWx1ZUdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KSk7CiAKICAgICAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdlIGhhdmUgYSBkb3VibGUg
ZW5jb2RlZCBhcyBhIEpTVmFsdWUKICAgICAgICAgbV9qaXQubW92ZShqc1ZhbHVlR3ByLCB0ZW1w
R3ByKTsKQEAgLTM0NTMsNyArMzQ1Nyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmU6IHsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3N0cnVj
dHVyZS5pc1N1YnNldE9mKG5vZGUuc3RydWN0dXJlU2V0KCkpKSB7CisgICAgICAgIEFic3RyYWN0
VmFsdWUgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIHZh
bHVlLmZpbHRlcihub2RlLnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgaWYgKHZhbHVlID09IG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkgewogICAgICAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lv
biAxMTc3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBTcGVjdWxhdGl2ZUpJVDo6U3Bl
Y3VsYXRpdmVKSVQoSklUQ29tcGlsCiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgoKS5tX2xv
Y2FsVmFycykKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKSkKICAgICAsIG1fc3RhdGUobV9qaXQuZ3JhcGgoKSkKKyAgICAsIG1faXNDaGVja2lu
Z0FyZ3VtZW50VHlwZXMoZmFsc2UpCiB7CiB9CiAKQEAgLTExMTYsNiArMTExNyw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNoZWNrQXJndW1lbnRUeXBlcygpCiB7CiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7Cisg
ICAgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyA9IHRydWU7CiAgICAgbV9jb2RlT3JpZ2luRm9y
T1NSID0gQ29kZU9yaWdpbigwKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1
bWVudHMuc2l6ZSgpOyArK2kpCkBAIC0xMjc2LDYgKzEyNzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiAgICAgICAgIH0gCiAjZW5kaWYKICAgICB9CisgICAg
bV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyA9IGZhbHNlOwogfQogCiBib29sIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKCkKQEAgLTE2NTcsNyArMTY2MCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYWx1ZVRvSW50MzIKIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJ
bnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGdw
ciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKIAotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLmNoaWxkMSgpLmluZGV4
KCksIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGdwciwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAgICBpZiAoIWlzTnVtYmVyUHJl
ZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGUu
Y2hpbGQxKCkuaW5kZXgoKSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKIAogICAgICAgICAgICAg
Ly8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdlIGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpT
VmFsdWUKICAgICAgICAgICAgIG1faml0Lm1vdmUoZ3ByLCByZXN1bHRHcHIpOwpAQCAtMTY5Myw3
ICsxNjk3LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlVG9JbnQzMgogCiAg
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZykpOwogCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLmNoaWxkMSgpLmluZGV4KCksIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHRhZ0dQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzTnVt
YmVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAg
ICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0
YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLmNoaWxkMSgpLmluZGV4KCksIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6Okxvd2VzdFRhZykpKTsKIAogICAgICAgICAgICAgICAgIHVuYm94RG91YmxlKHRhZ0dQUiwg
cGF5bG9hZEdQUiwgZnByLCBzY3JhdGNoLmZwcigpKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTE3NzA0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTM3LDIxICsyMTM3LDI1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmICgh
bV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKGF0KG1f
Y29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7CiAg
ICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNW
YWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9y
KG5vZGVJbmRleCksIGp1bXBUb0ZhaWwsIHRoaXMpKTsKICAgICB9CiAgICAgdm9pZCBzcGVjdWxh
dGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRn
ZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQogICAgIHsKKyAgICAg
ICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJn
dW1lbnRUeXBlcyk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJj
ZSwgbm9kZVVzZS5pbmRleCgpLCBqdW1wVG9GYWlsKTsKICAgICB9CiAgICAgLy8gQWRkIGEgc2V0
IG9mIHNwZWN1bGF0aW9uIGNoZWNrcyB3aXRob3V0IGFkZGl0aW9uYWwgcmVjb3ZlcnkuCiAgICAg
dm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1
ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBq
dW1wc1RvRmFpbCkKICAgICB7CisgICAgICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2Fu
RXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOwogICAgICAgICBWZWN0b3I8TWFj
cm9Bc3NlbWJsZXI6Okp1bXAsIDE2PiBKdW1wVmVjdG9yID0ganVtcHNUb0ZhaWwuanVtcHMoKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEp1bXBWZWN0b3Iuc2l6ZSgpOyArK2kp
CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVJ
bmRleCwgSnVtcFZlY3RvcltpXSk7CiAgICAgfQogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhF
eGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCkKICAgICB7CisgICAgICAgIEFT
U0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5v
ZGVVc2UuaW5kZXgoKSwganVtcHNUb0ZhaWwpOwogICAgIH0KICAgICAvLyBBZGQgYSBzcGVjdWxh
dGlvbiBjaGVjayB3aXRoIGFkZGl0aW9uYWwgcmVjb3ZlcnkuCkBAIC0yMTU5LDE1ICsyMTYzLDE4
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkg
fHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7CiAgICAgICAgIG1faml0LmNvZGVCbG9jaygp
LT5hcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KHJlY292ZXJ5KTsKICAgICAgICAgbV9qaXQuY29k
ZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2pp
dC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4KSwganVt
cFRvRmFpbCwgdGhpcywgbV9qaXQuY29kZUJsb2NrKCktPm51bWJlck9mU3BlY3VsYXRpb25SZWNv
dmVyaWVzKCkpKTsKICAgICB9CiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVy
eSkKICAgICB7CisgICAgICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8
IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGtp
bmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2UuaW5kZXgoKSwganVtcFRvRmFpbCwgcmVjb3Zlcnkp
OwogICAgIH0KICAgICB2b2lkIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQs
IEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9B
c3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNv
dmVyeSkKICAgICB7CisgICAgICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgp
IHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVJbmRleCwganVtcFRvRmFpbCk7CiAgICAgICAgIAog
ICAgICAgICBOb2RlJiBzZXRMb2NhbCA9IGF0KG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9j
a10tPmF0KG1faW5kZXhJbkJsb2NrICsgMSkpOwpAQCAtMjE4Niw2ICsyMTkzLDcgQEAgcHVibGlj
OgogICAgIC8vIENhbGxlZCB3aGVuIHdlIHN0YXRpY2FsbHkgZGV0ZXJtaW5lIHRoYXQgYSBzcGVj
dWxhdGlvbiB3aWxsIGZhaWwuCiAgICAgdm9pZCB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZUluZGV4IG5vZGVJ
bmRleCkKICAgICB7CisgICAgICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgp
IHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVS
Qk9TRSkKICAgICAgICAgZGF0YUxvZygiU3BlY3VsYXRpdmVKSVQgd2FzIHRlcm1pbmF0ZWQuXG4i
KTsKICNlbmRpZgpAQCAtMjE5Niw2ICsyMjA0LDcgQEAgcHVibGljOgogICAgIH0KICAgICB2b2lk
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdz
IGpzVmFsdWVSZWdzLCBFZGdlIG5vZGVVc2UpCiAgICAgeworICAgICAgICBBU1NFUlQoYXQobV9j
b21waWxlSW5kZXgpLmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKTsKICAg
ICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oa2luZCwganNWYWx1ZVJlZ3MsIG5v
ZGVVc2UuaW5kZXgoKSk7CiAgICAgfQogICAgIApAQCAtMjI3MSw2ICsyMjgwLDggQEAgcHVibGlj
OgogICAgIAogICAgIEFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKICAgICAKKyAgICBib29sIG1faXND
aGVja2luZ0FyZ3VtZW50VHlwZXM7CisgICAgCiAgICAgVmVjdG9yPFNsb3dQYXRoR2VuZXJhdG9y
KiwgOD4gbV9zbG93UGF0aEdlbmVyYXRvcnM7IC8vIGRvZXNuJ3QgdXNlIE93blB0cjw+IGJlY2F1
c2UgSSBkb24ndCB3YW50IHRvIGluY2x1ZGUgREZHU2xvd1BhdGhHZW5lcmF0b3IuaAogICAgIFZl
Y3RvcjxTaWxlbnRSZWdpc3RlclNhdmVQbGFuPiBtX3BsYW5zOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142895</attachid>
            <date>2012-05-20 00:35:28 -0700</date>
            <delta_ts>2012-05-21 13:50:25 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>recordosrexit_patch_4.diff</filename>
            <type>text/plain</type>
            <size>65368</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3NzA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDEyLTA1LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIENGQSBzaG91bGQgcmVjb3JkIGlmIGEgbm9kZSBjYW4gT1NSIGV4aXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2OTA1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRzIGEgTm9kZUZs
YWcgdGhhdCBkZW5vdGVzIG5vZGVzIHRoYXQgYXJlIGtub3duIHRvIG5vdCBoYXZlIE9TUiBleGl0
cy4KKyAgICAgICAgVGhpcyBvdWdodCB0byBhaWQgYW55IGJhY2t3YXJkcyBhbmFseXNlcyB0aGF0
IG5lZWQgdG8ga25ldyB3aGVuIGEKKyAgICAgICAgYmFja3dhcmQgZmxvdyBtZXJnZSBtaWdodCBo
YXBwZW4gZHVlIHRvIGEgc2lkZSBleGl0LgorICAgICAgICAKKyAgICAgICAgQWxzbyBhZGRlZCBh
c3NlcnRpb25zIGludG8gc3BlY3VsYXRpb25DaGVjaygpIHRoYXQgZW5zdXJlIHRoYXQgd2UgZGlk
IG5vdAorICAgICAgICBtYXJrIGEgbm9kZSBhcyBub24tZXhpdGluZyBhbmQgdGhlbiBwcm9tcHRs
eSBjb21waWxlIGluIGFuIGV4aXQuIFRoaXMKKyAgICAgICAgaGVscGVkIGNhdGNoIHNvbWUgbWlu
b3IgYnVncyB3aGVyZSB3ZSB3ZXJlIGRvaW5nIHVubmVjZXNzYXJ5IHNwZWN1bGF0aW9uCisgICAg
ICAgIGNoZWNrcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBwZXJmLW5ldXRyYWwgY2hh
bmdlLiBUaGUgc3BlY3VsYXRpb24gY2hlY2tzIHRoYXQgdGhpcyByZW1vdmVzCisgICAgICAgIHdl
cmUgbm90IG9uIGhvdCBwYXRocyBvZiBtYWpvciBiZW5jaG1hcmtzLgorCisgICAgICAgICogYnl0
ZWNvZGUvUHJlZGljdGVkVHlwZS5oOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6aXNB
bnlQcmVkaWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R0Fic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpzcGVj
dWxhdGVJbnQzMlVuYXJ5KToKKyAgICAgICAgKEFic3RyYWN0U3RhdGUpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0U3RhdGU6OnNwZWN1bGF0ZU51bWJlclVuYXJ5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFN0YXRlOjpzcGVjdWxhdGVCb29sZWFuVW5hcnkpOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnNwZWN1bGF0ZUludDMyQmluYXJ5KToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpzcGVjdWxhdGVOdW1iZXJCaW5hcnkpOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bWVyZ2VGbGFncyk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6ZmlsdGVyRmxhZ3MpOgorICAgICAgICAoTm9kZSk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2V0Q2FuRXhpdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6Y2FuRXhpdCk6CisgICAgICAgICogZGZnL0RGR05vZGVGbGFncy5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6bm9kZUZsYWdzQXNTdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
RmxhZ3MuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVUb0ludDMy
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24pOgorICAg
ICAgICAoU3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUludEludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTItMDUtMTcg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYSB0eXBvIHRo
YXQgR2VvZmYgbm90aWNlZCBidXQgdGhhdCBJIGZvcmdvdCB0byBmaXggaW4gdGhlIGxhc3QgY29t
bWl0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVk
VHlwZS5oCShyZXZpc2lvbiAxMTc3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHJlZGljdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3MiwxMiBAQCBzdGF0
aWMgY29uc3QgUHJlZGljdGVkVHlwZSBGaXhlZEluZGV4ZWRTCiAKIHR5cGVkZWYgYm9vbCAoKlBy
ZWRpY3Rpb25DaGVja2VyKShQcmVkaWN0ZWRUeXBlKTsKIAorLy8gRHVtbXkgcHJlZGljdGlvbiBj
aGVja2VyLCBvbmx5IHVzZWZ1bCBpZiBzb21lb25lIGluc2lzdHMgb24gcmVxdWlyaW5nIGEgcHJl
ZGljdGlvbiBjaGVja2VyLgoraW5saW5lIGJvb2wgaXNBbnlQcmVkaWN0aW9uKFByZWRpY3RlZFR5
cGUpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGlubGluZSBib29sIGlzQ2VsbFByZWRpY3Rp
b24oUHJlZGljdGVkVHlwZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gISEodmFsdWUgJiBQcmVkaWN0
Q2VsbCkgJiYgISh2YWx1ZSAmIH5QcmVkaWN0Q2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDExNzcwNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2Niw0MSArMjY2LDU3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBXZWFrSlNDb25zdGFu
dDogewogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fZ3JhcGgudmFsdWVPZkpTQ29u
c3RhbnQobm9kZUluZGV4KSk7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAg
ICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKKyAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpOworICAgICAgICBib29sIGNhbkV4aXQgPSBmYWxzZTsKKyAgICAgICAgY2Fu
RXhpdCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKSA9PSBQcmVkaWN0Tm9uZTsK
KyAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQogICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpID0gbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3Zh
cmlhYmxlcy5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7CisgICAgICAgICAg
ICBpZiAodmFsdWUuaXNDbGVhcigpKQorICAgICAgICAgICAgICAgIGNhbkV4aXQgfD0gdHJ1ZTsK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KSA9IHZhbHVlOworICAgICAgICB9CisgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChjYW5FeGl0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6IHsKICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7Ci0gICAgICAg
IGlmIChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCisgICAgICAgIGlm
IChub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgaWYgKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVz
ZURvdWJsZUZvcm1hdCgpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5v
ZGUpOwogICAgICAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpLnNldChQ
cmVkaWN0RG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwogICAgICAgICBpZiAoaXNJbnQzMlBy
ZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwotICAgICAgICBlbHNlIGlmIChpc0FycmF5UHJlZGlj
dGlvbihwcmVkaWN0ZWRUeXBlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5hcnkobm9k
ZSk7CisgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7
CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzQXJyYXlQcmVkaWN0aW9uKGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOwotICAgICAgICBlbHNlIGlmIChpc0J5dGVBcnJheVBy
ZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgIH0gZWxzZSBpZiAoaXNCeXRlQXJyYXlQ
cmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQo
IWlzQnl0ZUFycmF5UHJlZGljdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwog
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEJ5dGVBcnJh
eSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkp
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Qm9vbGVh
bik7CisgICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBl
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgCiAgICAgICAg
IG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzA5LDYgKzMyNSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICAv
LyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNldC4KICAgICAg
ICAgQVNTRVJUKCFtX2Jsb2NrLT52YWx1ZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpLmlz
Q2xlYXIoKSk7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCiAgICAgY2FzZSBCaXRBbmQ6CkBAIC0zNDUsMTAgKzM2MiwxMCBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2ZvdW5k
Q29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkp
LmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2Rl
KTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC0zNTksMTIgKzM3NiwxNiBAQCBib29sIEFic3RyYWN0U3RhdGU6
OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICBBU1NFUlQoY2hpbGQuaXNJbnQzMigp
KTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoSlNWYWx1ZShjaGlsZC5hc1VJ
bnQzMigpKSk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBpZiAoIW5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICBpZiAo
IW5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFByZWRpY3REb3VibGUpOwotICAgICAgICBlbHNlCisgICAgICAgICAgICBub2Rl
LnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KHRydWUpOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAg
IApAQCAtMzc2LDE0ICszOTcsMTcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoSlNWYWx1ZShKU0M6OnRvSW50MzIoY2hpbGQuYXNEb3VibGUoKSkpKTsKICAgICAg
ICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOworICAgICAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmICht
X2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAg
ICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwogICAgICAgICBlbHNlIGlmIChtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgICAgICBz
cGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKICAgICAgICAgZWxzZSBpZiAobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVCb29sZWFuKCkpCi0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgICAgICBzcGVj
dWxhdGVCb29sZWFuVW5hcnkobm9kZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5vZGUu
c2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFByZWRpY3RJbnQzMik7CiAgICAgICAgIGJyZWFrOwpAQCAtMzk0LDkgKzQxOCwxMCBAQCBi
b29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGlmIChjaGls
ZCAmJiBjaGlsZC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIGNoaWxkLmFzTnVtYmVyKCkpKTsK
ICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOworICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBz
cGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChQcmVkaWN0RG91YmxlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDA4LDI3ICs0MzMs
MjkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBp
ZiAobGVmdCAmJiByaWdodCAmJiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkg
ewogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChKU1ZhbHVlKGxlZnQuYXNOdW1i
ZXIoKSArIHJpZ2h0LmFzTnVtYmVyKCkpKTsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMg
PSB0cnVlOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChtX2dyYXBoLmFkZFNob3VsZFNwZWN1bGF0
ZUludGVnZXIobm9kZSkpIHsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3RJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkoCisg
ICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5v
ZGVGbGFncygpKSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJ
bnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAoTm9kZTo6
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9k
ZS5jaGlsZDIoKV0pKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0TnVtYmVyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICAgICAgc3BlY3VsYXRlTnVtYmVyQmluYXJ5KG5v
ZGUpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChub2RlLm9wKCkgPT0g
VmFsdWVBZGQpIHsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RTdHJpbmcgfCBQcmVk
aWN0SW50MzIgfCBQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAvLyBXZSBkb24n
dCBoYW5kbGUgdGhpcyB5ZXQuIDotKAogICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
ICAgICAKQEAgLTQzOCwxNiArNDY1LDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigp
ICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgLSByaWdodC5hc051bWJlcigpKSk7CiAgICAgICAg
ICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAobV9n
cmFwaC5hZGRTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZUludDMyQmluYXJ5KAorICAgICAgICAgICAgICAgIG5vZGUsICFub2RlQ2FuVHJ1bmNh
dGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpOwogICAgICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7
Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOwor
ICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7CiAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ1
NywxNCArNDg0LDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQK
ICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoSlNWYWx1ZSgtY2hpbGQuYXNOdW1iZXIoKSkpOwogICAgICAg
ICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1f
Z3JhcGgubmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewotICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZUludDMyVW5hcnkoCisgICAgICAgICAgICAgICAgbm9kZSwgIW5vZGVDYW5UcnVu
Y2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSk7CiAgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVy
KTsKKyAgICAgICAgc3BlY3VsYXRlTnVtYmVyVW5hcnkobm9kZSk7CiAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTQ3NSwxNiArNTA0LDE4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0
LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoSlNWYWx1
ZShsZWZ0LmFzTnVtYmVyKCkgKiByaWdodC5hc051bWJlcigpKSk7CiAgICAgICAgICAgICBtX2Zv
dW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAobV9ncmFwaC5tdWxT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUlu
dDMyQmluYXJ5KAorICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgIW5vZGVD
YW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKQorICAgICAgICAgICAgICAg
IHx8ICFub2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpOwog
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdE51bWJlcik7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7
CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTUxNiwxNiArNTQ3LDE3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOworICAgICAgICAgICAgbm9k
ZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigp
KSB7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50
MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdElu
dDMyKTsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoCisgICAgICAg
ICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkK
KyAgICAgICAgICAgICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAg
ICBzcGVjdWxhdGVJbnQzMkJpbmFyeShub2RlLCB0cnVlKTsgLy8gZm9yY2luZyBjYW4tZXhpdCwg
d2hpY2ggaXMgYSBiaXQgb24gdGhlIGNvbnNlcnZhdGl2ZSBzaWRlLgogICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51
bWJlcik7Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3ROdW1i
ZXIpOworICAgICAgICBzcGVjdWxhdGVOdW1iZXJCaW5hcnkobm9kZSk7CiAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTUzNSwxNCArNTY3LDE2IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLmlzTnVtYmVyKCkpIHsKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoSlNWYWx1ZShmYWJzKGNoaWxkLmFzTnVtYmVyKCkp
KSk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIG5v
ZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkg
JiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGlmIChtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKQorICAgICAgICAgICAgJiYgbm9k
ZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMyVW5h
cnkobm9kZSwgdHJ1ZSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRp
Y3RJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgc3BlY3VsYXRl
TnVtYmVyVW5hcnkobm9kZSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGlj
dERvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU1Miw5ICs1ODYsMTAgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAoY2hpbGQg
JiYgY2hpbGQuaXNOdW1iZXIoKSkgewogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChKU1ZhbHVlKHNxcnQoY2hpbGQuYXNOdW1iZXIoKSkpKTsKICAgICAgICAgICAgIG1fZm91bmRD
b25zdGFudHMgPSB0cnVlOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShu
b2RlKTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNTYzLDE5ICs1OTgsMjYgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3QgPSBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7CiAgICAgICAgIGlmIChjaGlsZENvbnN0KSB7
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KGpzQm9vbGVhbighY2hpbGRDb25z
dC50b0Jvb2xlYW4oKSkpOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXTsKICAgICAgICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24oY2hpbGQu
cHJlZGljdGlvbigpKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFByZWRpY3RCb29sZWFuKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRl
RmluYWxPYmplY3RPck90aGVyKCkpCisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuVW5hcnko
bm9kZSk7CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0
T3JPdGhlcigpKSB7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoCisgICAgICAgICAgICAg
ICAgIWlzRmluYWxPYmplY3RPck90aGVyUHJlZGljdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJl
ZGljdEZpbmFsT2JqZWN0IHwgUHJlZGljdE90aGVyKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQu
c2hvdWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkpCisgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQu
c2hvdWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkpIHsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdCgKKyAgICAgICAgICAgICAgICAhaXNBcnJheU9yT3RoZXJQcmVkaWN0aW9uKGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0QXJyYXkgfCBQcmVkaWN0T3RoZXIpOwotICAgICAgICBlbHNlIGlm
IChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCi0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICB9IGVsc2UgaWYgKGNo
aWxkLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUludDMy
VW5hcnkobm9kZSk7CiAgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU51bWJl
cigpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51
bWJlcik7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJVbmFyeShub2RlKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChQcmVkaWN0Qm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTU4Niw2ICs2MjgsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgY2FzZSBJc1N0cmluZzoKICAgICBjYXNlIElzT2JqZWN0OgogICAgIGNhc2UgSXNG
dW5jdGlvbjogeworICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBKU1Zh
bHVlIGNoaWxkID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAo
Y2hpbGQpIHsKICAgICAgICAgICAgIGJvb2wgZm91bmRDb25zdGFudCA9IHRydWU7CkBAIC02NDgs
NiArNjkxLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9mb3VuZENv
bnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC02NTYsNDcgKzcwMCw3MCBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIE5vZGUm
IGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwogICAgICAgICBOb2RlJiByaWdodCA9IG1f
Z3JhcGhbbm9kZS5jaGlsZDIoKV07CiAgICAgICAgIFByZWRpY3RlZFR5cGUgZmlsdGVyOwotICAg
ICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihsZWZ0LCByaWdodCkpCisgICAg
ICAgIFByZWRpY3Rpb25DaGVja2VyIGNoZWNrZXI7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkgewogICAgICAgICAgICAgZmlsdGVyID0gUHJl
ZGljdEludDMyOwotICAgICAgICBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIo
bGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgY2hlY2tlciA9IGlzSW50MzJQcmVkaWN0aW9uOwor
ICAgICAgICB9IGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihsZWZ0LCByaWdo
dCkpIHsKICAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3ROdW1iZXI7Ci0gICAgICAgIGVsc2Ug
aWYgKG5vZGUub3AoKSA9PSBDb21wYXJlRXEpIHsKKyAgICAgICAgICAgIGNoZWNrZXIgPSBpc051
bWJlclByZWRpY3Rpb247CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCgpID09IENvbXBhcmVF
cSkgewogICAgICAgICAgICAgaWYgKChtX2dyYXBoLmlzQ29uc3RhbnQobm9kZS5jaGlsZDEoKS5p
bmRleCgpKQogICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKSkuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgfHwgKG1fZ3Jh
cGguaXNDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpCiAgICAgICAgICAgICAgICAgICAg
ICYmIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZS5jaGlsZDIoKS5pbmRleCgpKS5pc051
bGwoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyB3b24ndCBjbG9i
YmVyIHRoZSB3b3JsZC4gQnV0IHRoYXQncyBhbGwgd2Uga25vdy4KKyAgICAgICAgICAgICAgICBu
b2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
RmluYWxPYmplY3QobGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZUZpbmFsT2JqZWN0KGxlZnQsIHJpZ2h0KSkgewogICAgICAgICAgICAgICAgIGZpbHRl
ciA9IFByZWRpY3RGaW5hbE9iamVjdDsKLSAgICAgICAgICAgIGVsc2UgaWYgKE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZUFycmF5KGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICBjaGVja2VyID0g
aXNGaW5hbE9iamVjdFByZWRpY3Rpb247CisgICAgICAgICAgICB9IGVsc2UgaWYgKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZUFycmF5KGxlZnQsIHJpZ2h0KSkgewogICAgICAgICAgICAgICAgIGZpbHRl
ciA9IFByZWRpY3RBcnJheTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGxlZnQuc2hvdWxkU3BlY3Vs
YXRlRmluYWxPYmplY3QoKSAmJiByaWdodC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3Ro
ZXIoKSkgeworICAgICAgICAgICAgICAgIGNoZWNrZXIgPSBpc0FycmF5UHJlZGljdGlvbjsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpICYm
IHJpZ2h0LnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKSB7CisgICAgICAgICAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAgICAgICAgICAgICAgICAhaXNGaW5hbE9iamVj
dFByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICAg
ICAgICAgIHx8ICFpc0ZpbmFsT2JqZWN0T3JPdGhlclByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNo
aWxkMigpKS5tX3R5cGUpKTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihQcmVkaWN0RmluYWxPYmplY3QpOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCB8IFByZWRpY3RPdGhlcik7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0LnNob3Vs
ZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkgJiYgbGVmdC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVj
dE9yT3RoZXIoKSkgeworICAgICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAg
ICAgICAgICAgICAgIWlzRmluYWxPYmplY3RPck90aGVyUHJlZGljdGlvbihmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgfHwgIWlzRmluYWxPYmplY3RQ
cmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSk7CiAgICAgICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0IHwgUHJl
ZGljdE90aGVyKTsKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihQcmVkaWN0RmluYWxPYmplY3QpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfSBlbHNlIGlmIChsZWZ0LnNob3VsZFNwZWN1bGF0ZUFycmF5KCkgJiYgcmlnaHQuc2hvdWxk
U3BlY3VsYXRlQXJyYXlPck90aGVyKCkpIHsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0RmluYWxPYmplY3QpOwotICAgICAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCB8IFByZWRpY3RP
dGhlcik7CisgICAgICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAgICAgICAgICAg
ICAgICAhaXNBcnJheVByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCisg
ICAgICAgICAgICAgICAgICAgIHx8ICFpc0FycmF5T3JPdGhlclByZWRpY3Rpb24oZm9yTm9kZShu
b2RlLmNoaWxkMigpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RBcnJheSB8IFByZWRpY3RPdGhlcik7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0LnNob3VsZFNwZWN1
bGF0ZUFycmF5KCkgJiYgbGVmdC5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkgewotICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9i
amVjdCB8IFByZWRpY3RPdGhlcik7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MigpKS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0KTsKKyAgICAgICAgICAgICAgICBub2RlLnNl
dENhbkV4aXQoCisgICAgICAgICAgICAgICAgICAgICFpc0FycmF5T3JPdGhlclByZWRpY3Rpb24o
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICAgICAgICAgIHx8ICFp
c0FycmF5UHJlZGljdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpOworICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSB8IFBy
ZWRpY3RPdGhlcik7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0
ZXIoUHJlZGljdEFycmF5KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgZmlsdGVyID0gUHJlZGljdFRvcDsKKyAgICAgICAgICAg
ICAgICBjaGVja2VyID0gaXNBbnlQcmVkaWN0aW9uOwogICAgICAgICAgICAgICAgIGNsb2JiZXJT
dHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0VG9wOworICAgICAgICAgICAgY2hlY2tlciA9
IGlzQW55UHJlZGljdGlvbjsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5C
bG9jayk7CiAgICAgICAgIH0KKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAgICAgICAg
IWNoZWNrZXIoZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICB8fCAh
Y2hlY2tlcihmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpOwogICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihmaWx0ZXIpOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQyKCkpLmZpbHRlcihmaWx0ZXIpOwogICAgICAgICBicmVhazsKQEAgLTcwOCwyNSArNzc1LDcy
IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgaWYg
KGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoanNCb29sZWFuKGxlZnQuYXNOdW1i
ZXIoKSA9PSByaWdodC5hc051bWJlcigpKSk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gdHJ1ZTsKKyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRp
Y3RCb29sZWFuKTsKKyAgICAgICAgaWYgKG1fZ3JhcGguaXNKU0NvbnN0YW50KG5vZGUuY2hpbGQx
KCkuaW5kZXgoKSkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVl
T2ZKU0NvbnN0YW50KG5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgICAgICBpZiAoIXZh
bHVlLmlzTnVtYmVyKCkgJiYgIXZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBu
b2RlLnNldENhbkV4aXQoZmFsc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChtX2dyYXBoLmlzSlNDb25zdGFudChub2RlLmNo
aWxkMigpLmluZGV4KCkpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52
YWx1ZU9mSlNDb25zdGFudChub2RlLmNoaWxkMigpLmluZGV4KCkpOworICAgICAgICAgICAgaWYg
KCF2YWx1ZS5pc051bWJlcigpICYmICF2YWx1ZS5pc1N0cmluZygpKSB7CisgICAgICAgICAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigKKyAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25v
ZGUuY2hpbGQyKCldKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJCaW5hcnkobm9kZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlTnVtYmVyKAorICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0s
IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKSB7CisgICAgICAgICAgICBzcGVjdWxhdGVOdW1iZXJC
aW5hcnkobm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAo
Tm9kZTo6c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoCisgICAgICAgICAgICAgICAgbV9ncmFw
aFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpIHsKKyAgICAgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgICAgICAgICAhaXNGaW5hbE9iamVjdFByZWRpY3Rp
b24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpCisgICAgICAgICAgICAgICAgfHwgIWlz
RmluYWxPYmplY3RQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSk7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0RmluYWxPYmpl
Y3QpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEZp
bmFsT2JqZWN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChO
b2RlOjpzaG91bGRTcGVjdWxhdGVBcnJheSgKKyAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkgeworICAgICAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KAorICAgICAgICAgICAgICAgICFpc0FycmF5UHJlZGljdGlvbihmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkKKyAgICAgICAgICAgICAgICB8fCAhaXNBcnJheVByZWRpY3Rp
b24oZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdFN0cmluZyk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFByZWRpY3RJbnQzMik7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGlj
dEludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgU3RyaW5nQ2hhckF0
OgorICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFByZWRpY3RTdHJpbmcpOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFByZWRpY3RTdHJpbmcpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNh
c2UgR2V0QnlWYWw6IHsKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBp
ZiAoIW5vZGUucHJlZGljdGlvbigpIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rp
b24oKSB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpIHsKICAgICAgICAg
ICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC04MjEsNiArOTM1
LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAg
ICAgCiAgICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ucHJlZGljdGlvbigpIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24o
KSkgewogICAgICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTkzMiwyMyArMTA0NywyOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWdu
ZWQgaW5kCiAgICAgfQogICAgICAgICAgICAgCiAgICAgY2FzZSBBcnJheVB1c2g6CisgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdEFycmF5KTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVk
aWN0TnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEFycmF5
UG9wOgorICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CiAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBS
ZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0
KAorICAgICAgICAgICAgIWlzQ2VsbFByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpCisgICAgICAgICAgICB8fCAhaXNDZWxsUHJlZGljdGlvbihmb3JOb2RlKG5vZGUuY2hp
bGQyKCkpLm1fdHlwZSkpOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQ
cmVkaWN0Q2VsbCk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRp
Y3RDZWxsKTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEp1bXA6CisgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBCcmFu
Y2g6IHsKQEAgLTk1OSw2ICsxMDgwLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgICAgIG1fYnJhbmNoRGlyZWN0aW9uID0gVGFrZVRydWU7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBU
YWtlRmFsc2U7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IFRoZSBhYm92ZSBoYW5kbGVz
IHRoZSB0cml2aWFsIGNhc2VzIG9mIHNwYXJzZSBjb25kaXRpb25hbApAQCAtOTcwLDIzICsxMDky
LDM0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAg
Ly8gICAgdGhlIGJyYW5jaC4KICAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldOwogICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKQotICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEJvb2xlYW4pOwot
ICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIo
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFyeShub2RlKTsKKyAgICAgICAgZWxz
ZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90aGVyKCkpIHsKKyAgICAg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdCgKKyAgICAgICAgICAgICAgICAhaXNGaW5hbE9iamVjdE9y
T3RoZXJQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0RmluYWxPYmplY3QgfCBQ
cmVkaWN0T3RoZXIpOwotICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVBcnJh
eU9yT3RoZXIoKSkKKyAgICAgICAgfSBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVBcnJh
eU9yT3RoZXIoKSkgeworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAorICAgICAgICAgICAg
ICAgICFpc0FycmF5T3JPdGhlclByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RB
cnJheSB8IFByZWRpY3RPdGhlcik7Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFByZWRpY3RJbnQzMik7CisgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRl
SW50ZWdlcigpKQorICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKICAgICAg
ICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBu
b2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBtX2JyYW5jaERpcmVjdGlvbiA9IFRha2VC
b3RoOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFJldHVy
bjoKKyAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAgICBjYXNlIFRocm93OgogICAgIGNh
c2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKICAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIFRvUHJpbWl0aXZlOiB7CkBAIC05OTQsMTIgKzExMjcsMTMgQEAgYm9vbCBBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBpZiAoY2hpbGRDb25zdCAm
JiBjaGlsZENvbnN0LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoY2hpbGRDb25zdCk7CiAgICAgICAgICAgICBtX2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsK
KyAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldOwogICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIp
OworICAgICAgICAgICAgc3BlY3VsYXRlSW50MzJVbmFyeShub2RlKTsKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC0xMDEzLDIwICsxMTQ3LDI0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIHR5cGUgfD0gUHJlZGljdFN0cmluZzsKICAg
ICAgICAgfQogICAgICAgICBkZXN0aW5hdGlvbi5zZXQodHlwZSk7CisgICAgICAgIG5vZGUuc2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgICAgIAogICAg
IGNhc2UgU3RyQ2F0OgorICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RTdHJpbmcpOwogICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgIGNhc2UgTmV3QXJyYXk6CiAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoK
KyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlKCkpOwog
ICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICBjYXNlIE5ld1JlZ2V4cDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRy
dWU7CiAgICAgICAgIGJyZWFrOwpAQCAtMTA0MSw5ICsxMTc5LDEyIEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIC8vIG9iamVjdCwgc28gdGhl
cmUncyBub3RoaW5nIHRvIGRvLiBJIGRvbid0IHRoaW5rIHRoaXMgY2FzZSB3aWxsCiAgICAgICAg
ICAgICAvLyBiZSBoaXQsIGJ1dCB0aGVuIGFnYWluLCB5b3UgbmV2ZXIga25vdy4KICAgICAgICAg
ICAgIGRlc3RpbmF0aW9uID0gc291cmNlOworICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZh
bHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBu
b2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIAogICAgICAgICBpZiAoaXNPdGhlclByZWRp
Y3Rpb24oY2hpbGQucHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAgc291cmNlLmZpbHRlcihQ
cmVkaWN0T3RoZXIpOwogICAgICAgICAgICAgZGVzdGluYXRpb24uc2V0KFByZWRpY3RPYmplY3RP
dGhlcik7CkBAIC0xMDY1LDYgKzEyMDYsMTEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV07CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGlsZDEo
KSk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlSW5k
ZXgpOworICAgICAgICAKKyAgICAgICAgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2Jq
ZWN0KCkpCisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzRmluYWxPYmplY3RQcmVkaWN0
aW9uKHNvdXJjZS5tX3R5cGUpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KCFpc0NlbGxQcmVkaWN0aW9uKHNvdXJjZS5tX3R5cGUpKTsKICAgICAgICAgICAgIAog
ICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkKICAgICAgICAg
ICAgIHNvdXJjZS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0KTsKQEAgLTEwNzQsMjUgKzEyMjAs
MzIgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIH0KICAg
ICAgICAgICAgIAogICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBub2RlLnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKSk7CiAg
ICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICBub2RlLnNldENhbkV4aXQoZmFs
c2UpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fZ3JhcGgubV9nbG9iYWxEYXRh
LmFjdGl2YXRpb25TdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0g
dHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRz
OgorICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKS0+
YXJndW1lbnRzU3RydWN0dXJlKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsK
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CiAg
ICAgY2FzZSBUZWFyT2ZmQXJndW1lbnRzOgotICAgIGNhc2UgQ2hlY2tBcmd1bWVudHNOb3RDcmVh
dGVkOgorICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAvLyBEb2VzIG5v
dGhpbmcgdGhhdCBpcyB1c2VyLXZpc2libGUuCiAgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBD
aGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGg6
CiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4ZWN1dGFibGUgZG9lcyBub3QgZXNjYXBl
IGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6ZQpAQCAtMTEwMSwxMiArMTI1NCwxNSBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIC8vIFdl
IHBlcmZvcm0gZnVydGhlciBvcHRpbWl6YXRpb25zIG9uIHRoaXMgbGF0ZXIgb24uCiAgICAgICAg
IGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KGpzTnVtYmVyKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7CisgICAgICAgICAgICBub2RlLnNldENhbkV4aXQo
ZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgbm9kZS5zZXRD
YW5FeGl0KHRydWUpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQz
Mik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVu
Z3RoU2FmZToKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgLy8gVGhp
cyBwb3RlbnRpYWxseSBjbG9iYmVycyBhbGwgc3RydWN0dXJlcyBpZiB0aGUgYXJndW1lbnRzIG9i
amVjdCBoYWQgYSBnZXR0ZXIKICAgICAgICAgLy8gaW5zdGFsbGVkIG9uIHRoZSBsZW5ndGggcHJv
cGVydHkuCiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CkBAIC0xMTE2
LDYgKzEyNzIsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKKyAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhp
cyBleGVjdXRhYmxlIGRvZXMgbm90IGVzY2FwZSBpdHMgYXJndW1lbnRzLCBzbyB3ZSBjYW4gb3B0
aW1pemUKICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgZW5k
cyB1cCBiZWluZyBmdXJ0aGVyIG9wdGltaXplZCBieSB0aGUKICAgICAgICAgLy8gQXJndW1lbnRz
U2ltcGxpZmljYXRpb25QaGFzZS4KQEAgLTExMjQsNiArMTI4MSw3IEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAg
IGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZToKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZh
bHNlKTsKICAgICAgICAgLy8gVGhpcyBwb3RlbnRpYWxseSBjbG9iYmVycyBhbGwgc3RydWN0dXJl
cyBpZiB0aGUgcHJvcGVydHkgd2UncmUgYWNjZXNzaW5nIGhhcwogICAgICAgICAvLyBhIGdldHRl
ci4gV2UgZG9uJ3Qgc3BlY3VsYXRlIGFnYWluc3QgdGhpcy4KICAgICAgICAgY2xvYmJlclN0cnVj
dHVyZXMoaW5kZXhJbkJsb2NrKTsKQEAgLTExMzYsMjcgKzEyOTQsMzMgQEAgYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAg
Y2FzZSBOZXdGdW5jdGlvbkV4cHJlc3Npb246CiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6
CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5m
dW5jdGlvblN0cnVjdHVyZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2Ug
R2V0Q2FsbGVlOgorICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RGdW5jdGlvbik7CiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBHZXRTY29wZUNoYWluOgorICAgICAgICBub2RlLnNldENhbkV4
aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RDZWxsT3Ro
ZXIpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0U2NvcGVkVmFy
OgorICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2Ug
UHV0U2NvcGVkVmFyOgorICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBj
bG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgIGNhc2UgR2V0QnlJZDoKICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKKyAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBpZiAoIW5vZGUucHJlZGljdGlvbigpKSB7
CiAgICAgICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTE2OCw3NyArMTMzMiw5NyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRBcnJheUxlbmd0
aDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFByZWRpY3RJbnQzMik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRBcmd1
bWVudHNMZW5ndGg6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFyZ3VtZW50cyk7CiAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKICAgICAgICAgYnJlYWs7CiAKICAg
ICBjYXNlIEdldFN0cmluZ0xlbmd0aDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1N0cmlu
Z1ByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdFN0cmluZyk7CiAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAogICAgIGNhc2UgR2V0Qnl0ZUFycmF5TGVuZ3RoOgorICAgICAgICBub2RlLnNldENhbkV4aXQo
IWlzQnl0ZUFycmF5UHJlZGljdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwog
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Qnl0ZUFycmF5KTsK
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEdldEludDhBcnJheUxlbmd0aDoKKyAgICAgICAgbm9kZS5zZXRDYW5F
eGl0KCFpc0ludDhBcnJheVByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KTsKICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDhBcnJh
eSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBHZXRJbnQxNkFycmF5TGVuZ3RoOgorICAgICAgICBub2RlLnNl
dENhbkV4aXQoIWlzSW50MTZBcnJheVByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKTsKICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdElu
dDE2QXJyYXkpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0SW50MzJBcnJheUxlbmd0aDoKKyAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KCFpc0ludDMyQXJyYXlQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFBy
ZWRpY3RJbnQzMkFycmF5KTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0
SW50MzIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldFVpbnQ4QXJyYXlMZW5ndGg6Cisg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNVaW50OEFycmF5UHJlZGljdGlvbihmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihQcmVkaWN0VWludDhBcnJheSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
UHJlZGljdEludDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRVaW50OENsYW1wZWRB
cnJheUxlbmd0aDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KCFpc1VpbnQ4Q2xhbXBlZEFycmF5
UHJlZGljdGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0VWludDhDbGFtcGVkQXJyYXkpOwogICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgR2V0VWludDE2QXJyYXlMZW5ndGg6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhp
dCghaXNVaW50MTZBcnJheVByZWRpY3Rpb24oZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KTsKICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdFVpbnQxNkFy
cmF5KTsKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEdldFVpbnQzMkFycmF5TGVuZ3RoOgorICAgICAgICBub2Rl
LnNldENhbkV4aXQoIWlzVWludDMyQXJyYXlQcmVkaWN0aW9uKGZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRp
Y3RVaW50MzJBcnJheSk7CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdElu
dDMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHZXRGbG9hdDMyQXJyYXlMZW5ndGg6Cisg
ICAgICAgIG5vZGUuc2V0Q2FuRXhpdCghaXNGbG9hdDMyQXJyYXlQcmVkaWN0aW9uKGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFByZWRpY3RGbG9hdDMyQXJyYXkpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFByZWRpY3RJbnQzMik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0RmxvYXQ2NEFy
cmF5TGVuZ3RoOgorICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzRmxvYXQ2NEFycmF5UHJlZGlj
dGlvbihmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0RmxvYXQ2NEFycmF5KTsKICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwogICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAotICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgY2FzZSBDaGVja1N0cnVjdHVyZTog
eworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgdmFsdWUuZmlsdGVyKG5vZGUuc3RydWN0dXJlU2V0KCkpOworICAgICAgICBub2Rl
LnNldENhbkV4aXQodmFsdWUgIT0gZm9yTm9kZShub2RlLmNoaWxkMSgpKSk7CiAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBwcm9wYWdhdGUgdGhlIHN0cnVjdHVyZSBzZXRz
IG9mIGNvbnN0YW50cyAoaS5lLiBwcm90b3R5cGVzKS4KLSAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIobm9kZS5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkgPSB2YWx1ZTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAg
ICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJl
OgorICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBjbG9iYmVyU3RydWN0
dXJlcyhpbmRleEluQmxvY2spOwogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnNldChu
b2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKICAgICAgICAgbV9o
YXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0UHJvcGVy
dHlTdG9yYWdlOgorICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CiAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAg
ICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzLCBidXQgdGhpcyBpcyAoYWxtb3N0KSBh
bHdheXMgZm9sbG93ZWQgYnkgR2V0QnlWYWwsIHdoaWNoIGRvZXMgZXhpdC4gU28gbm8gcG9pbnQg
aW4gdHJ5aW5nIHRvIGJlIG1vcmUgcHJlY2lzZS4KICAgICAgICAgUHJlZGljdGVkVHlwZSBiYXNl
UHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOwogICAgICAg
ICBpZiAoIShiYXNlUHJlZGljdGlvbiAmIFByZWRpY3RJbnQzMikgJiYgYmFzZVByZWRpY3Rpb24p
IHsKICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOwpAQCAtMTMwOSwzOCAr
MTQ5Myw0NiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAg
ICAgIGJyZWFrOyAKICAgICB9CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgbm9kZS5z
ZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
UHJlZGljdENlbGwpOwogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgICAg
IG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFByZWRpY3RDZWxsKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBj
YXNlIENoZWNrRnVuY3Rpb246CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGll
cyEgV2UgY2FuIGRvIGJldHRlci4KICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoUHJlZGljdEZ1bmN0aW9uKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCBiZSBhYmxlIHRv
IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlIGtub3cgd2hhdCB0aGUgZnVuY3Rpb24gaXMuCiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRCeUlkOgogICAgIGNhc2Ug
UHV0QnlJZERpcmVjdDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CiAgICAgICAgIGNsb2Ji
ZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7
CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CisgICAgICAgIG5vZGUuc2V0Q2Fu
RXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDaGVj
a0hhc0luc3RhbmNlOgorICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKICAgICAgICAgLy8gU2Fk
bHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgQ2hlY2tIYXNJ
bnN0YW5jZQogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgSW5zdGFuY2VP
ZjoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICAvLyBBZ2Fpbiwgc2Fk
bHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgSW5zdGFuY2VP
ZgogICAgICAgICBpZiAoIShtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSAmIH5Q
cmVkaWN0Q2VsbCkgJiYgIShmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSAmIH5QcmVkaWN0
Q2VsbCkpCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0
Q2VsbCk7CkBAIC0xMzUwLDkgKzE1NDIsMTEgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRl
KHVuc2lnbmVkIGluZAogICAgICAgICAgICAgCiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBGbHVz
aDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIEJyZWFrcG9pbnQ6CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChm
YWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBDYWxsOgpAQCAt
MTM2MSwxNyArMTU1NSwyMCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgY2FzZSBSZXNvbHZlQmFzZToKICAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0
OgogICAgIGNhc2UgUmVzb2x2ZUdsb2JhbDoKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUp
OwogICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwogICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgRm9yY2VPU1JFeGl0OgorICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CiAg
ICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIElubGluZVN0YXJ0OgogICAgIGNhc2UgTm9wOgor
ICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTE3NzA0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw2
ICsyMTQsNTAgQEAgcHJpdmF0ZToKICAgICAKICAgICBzdGF0aWMgYm9vbCBtZXJnZVZhcmlhYmxl
QmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYg
c291cmNlLCBOb2RlSW5kZXggZGVzdGluYXRpb25Ob2RlSW5kZXgsIE5vZGVJbmRleCBzb3VyY2VO
b2RlSW5kZXgpOwogICAgIAorICAgIHZvaWQgc3BlY3VsYXRlSW50MzJVbmFyeShOb2RlJiBub2Rl
LCBib29sIGZvcmNlQ2FuRXhpdCA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgY2hpbGRWYWx1ZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIG5vZGUuc2V0
Q2FuRXhpdChmb3JjZUNhbkV4aXQgfHwgIWlzSW50MzJQcmVkaWN0aW9uKGNoaWxkVmFsdWUubV90
eXBlKSk7CisgICAgICAgIGNoaWxkVmFsdWUuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyVW5hcnkoTm9kZSYgbm9kZSkKKyAgICB7Cisg
ICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
OworICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzTnVtYmVyUHJlZGljdGlvbihjaGlsZFZhbHVl
Lm1fdHlwZSkpOworICAgICAgICBjaGlsZFZhbHVlLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuVW5hcnkoTm9kZSYgbm9kZSkKKyAg
ICB7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFsdWUgPSBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpOworICAgICAgICBub2RlLnNldENhbkV4aXQoIWlzQm9vbGVhblByZWRpY3Rpb24oY2hp
bGRWYWx1ZS5tX3R5cGUpKTsKKyAgICAgICAgY2hpbGRWYWx1ZS5maWx0ZXIoUHJlZGljdEJvb2xl
YW4pOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUludDMyQmluYXJ5KE5vZGUmIG5v
ZGUsIGJvb2wgZm9yY2VDYW5FeGl0ID0gZmFsc2UpCisgICAgeworICAgICAgICBBYnN0cmFjdFZh
bHVlJiBjaGlsZFZhbHVlMSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3Ry
YWN0VmFsdWUmIGNoaWxkVmFsdWUyID0gZm9yTm9kZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAg
bm9kZS5zZXRDYW5FeGl0KAorICAgICAgICAgICAgZm9yY2VDYW5FeGl0CisgICAgICAgICAgICB8
fCAhaXNJbnQzMlByZWRpY3Rpb24oY2hpbGRWYWx1ZTEubV90eXBlKQorICAgICAgICAgICAgfHwg
IWlzSW50MzJQcmVkaWN0aW9uKGNoaWxkVmFsdWUyLm1fdHlwZSkpOworICAgICAgICBjaGlsZFZh
bHVlMS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgY2hpbGRWYWx1ZTIuZmlsdGVyKFBy
ZWRpY3RJbnQzMik7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyQmluYXJ5
KE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBBYnN0cmFjdFZhbHVlJiBjaGlsZFZhbHVlMSA9
IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGNoaWxkVmFs
dWUyID0gZm9yTm9kZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgbm9kZS5zZXRDYW5FeGl0KAor
ICAgICAgICAgICAgIWlzTnVtYmVyUHJlZGljdGlvbihjaGlsZFZhbHVlMS5tX3R5cGUpCisgICAg
ICAgICAgICB8fCAhaXNOdW1iZXJQcmVkaWN0aW9uKGNoaWxkVmFsdWUyLm1fdHlwZSkpOworICAg
ICAgICBjaGlsZFZhbHVlMS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGNoaWxkVmFs
dWUyLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICB9CisgICAgCiAgICAgQ29kZUJsb2NrKiBt
X2NvZGVCbG9jazsKICAgICBHcmFwaCYgbV9ncmFwaDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxMTc3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDYgKzE0NCw3IEBAIHN0
cnVjdCBOb2RlIHsKICAgICAKICAgICBib29sIG1lcmdlRmxhZ3MoTm9kZUZsYWdzIGZsYWdzKQog
ICAgIHsKKyAgICAgICAgQVNTRVJUKCEoZmxhZ3MgJiBOb2RlRG9lc05vdEV4aXQpKTsKICAgICAg
ICAgTm9kZUZsYWdzIG5ld0ZsYWdzID0gbV9mbGFncyB8IGZsYWdzOwogICAgICAgICBpZiAobmV3
RmxhZ3MgPT0gbV9mbGFncykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE1Myw2ICsx
NTQsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBmaWx0ZXJGbGFncyhOb2RlRmxh
Z3MgZmxhZ3MpCiAgICAgeworICAgICAgICBBU1NFUlQoZmxhZ3MgJiBOb2RlRG9lc05vdEV4aXQp
OwogICAgICAgICBOb2RlRmxhZ3MgbmV3RmxhZ3MgPSBtX2ZsYWdzICYgZmxhZ3M7CiAgICAgICAg
IGlmIChuZXdGbGFncyA9PSBtX2ZsYWdzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTc1LDcgKzE3NywyMCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICByZXR1cm4gbV9m
bGFncyAmIE5vZGVNdXN0R2VuZXJhdGU7CiAgICAgfQotCisgICAgCisgICAgdm9pZCBzZXRDYW5F
eGl0KGJvb2wgZXhpdHMpCisgICAgeworICAgICAgICBpZiAoZXhpdHMpCisgICAgICAgICAgICBt
X2ZsYWdzICY9IH5Ob2RlRG9lc05vdEV4aXQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
ZmxhZ3MgfD0gTm9kZURvZXNOb3RFeGl0OworICAgIH0KKyAgICAKKyAgICBib29sIGNhbkV4aXQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICEobV9mbGFncyAmIE5vZGVEb2VzTm90RXhpdCk7Cisg
ICAgfQorICAgIAogICAgIGJvb2wgaXNDb25zdGFudCgpCiAgICAgewogICAgICAgICByZXR1cm4g
b3AoKSA9PSBKU0NvbnN0YW50OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlRmxhZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZUZsYWdzLmNwcAkocmV2aXNpb24gMTE3NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlRmxhZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNiArMTMwLDEzIEBA
IGNvbnN0IGNoYXIqIG5vZGVGbGFnc0FzU3RyaW5nKE5vZGVGbGFncyAKICAgICAgICAgaGFzUHJp
bnRlZCA9IHRydWU7CiAgICAgfQogICAgIAorICAgIGlmICghKGZsYWdzICYgTm9kZURvZXNOb3RF
eGl0KSkgeworICAgICAgICBpZiAoaGFzUHJpbnRlZCkKKyAgICAgICAgICAgIHB0ci5zdHJjYXQo
InwiKTsKKyAgICAgICAgcHRyLnN0cmNhdCgiQ2FuRXhpdCIpOworICAgICAgICBoYXNQcmludGVk
ID0gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAgKnB0cisrID0gMDsKICAgICAKICAgICByZXR1cm4g
ZGVzY3JpcHRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFn
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdz
LmgJKHJldmlzaW9uIDExNzcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZUZsYWdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDggQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogI2RlZmluZSBOb2RlVXNlZEFzVmFsdWUgICAgICAgICAgIChOb2Rl
VXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybykKICNkZWZpbmUgTm9kZVVzZWRBc0ludCAg
ICAgICAgICAgIDB4MTAwMCAvLyBUaGUgcmVzdWx0IG9mIHRoaXMgY29tcHV0YXRpb24gaXMga25v
d24gdG8gYmUgdXNlZCBpbiBhIGNvbnRleHQgdGhhdCBwcmVmZXJzLCBidXQgZG9lcyBub3QgcmVx
dWlyZSwgaW50ZWdlciB2YWx1ZXMuCiAKKyNkZWZpbmUgTm9kZURvZXNOb3RFeGl0ICAgICAgICAg
IDB4MjAwMCAvLyBUaGlzIGZsYWcgaXMgbmVnYXRlZCB0byBtYWtlIGl0IG5hdHVyYWwgZm9yIHRo
ZSBkZWZhdWx0IHRvIGJlIHRoYXQgYSBub2RlIGRvZXMgZXhpdC4KKwogdHlwZWRlZiB1aW50MTZf
dCBOb2RlRmxhZ3M7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBub2RlVXNlZEFzTnVtYmVyKE5vZGVG
bGFncyBmbGFncykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTE3NzA0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA1Niw2ICsxMDU2LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlSW50SQogICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKICAgICB9CiAKKyAgICBQcmVkaWN0
ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUobm9kZUluZGV4KS5tX3R5cGU7CiAgICAgTm9k
ZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CkBAIC0xMDc3LDcgKzEwNzgsNyBA
QCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgIEFTU0VS
VCgoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHx8IHNwaWxsRm9ybWF0ID09IERhdGFGb3Jt
YXRJbnRlZ2VyKTsKIAogICAgICAgICAvLyBJZiB3ZSBrbm93IHRoaXMgd2FzIHNwaWxsZWQgYXMg
YW4gaW50ZWdlciB3ZSBjYW4gZmlsbCB3aXRob3V0IGNoZWNraW5nLgotICAgICAgICBpZiAoc3Bp
bGxGb3JtYXQgIT0gRGF0YUZvcm1hdEpTSW50ZWdlciAmJiBzcGlsbEZvcm1hdCAhPSBEYXRhRm9y
bWF0SW50ZWdlcikKKyAgICAgICAgaWYgKCFpc0ludDMyUHJlZGljdGlvbih0eXBlKSkKICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZShKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJl
Z2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwogCiAgICAgICAgIEdQ
UlJlZyBncHIgPSBhbGxvY2F0ZSgpOwpAQCAtMTA5NSw3ICsxMDk2LDcgQEAgR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiA9
IGluZm8ucGF5bG9hZEdQUigpOwogICAgICAgICBtX2dwcnMubG9jayh0YWdHUFIpOwogICAgICAg
ICBtX2dwcnMubG9jayhwYXlsb2FkR1BSKTsKLSAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKSAhPSBEYXRhRm9ybWF0SlNJbnRlZ2VyKSAKKyAgICAgICAgaWYgKCFpc0ludDMyUHJlZGlj
dGlvbih0eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMy
VGFnKSkpOwogICAgICAgICBtX2dwcnMudW5sb2NrKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5y
ZWxlYXNlKHRhZ0dQUik7CkBAIC0xMTUxLDYgKzExNTIsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgIHJldHVybiBmcHJBbGxvY2F0ZSgpOwogICAg
IH0KIAorICAgIFByZWRpY3RlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlSW5kZXgp
Lm1fdHlwZTsKICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5l
cmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKQEAg
LTExODgsNyArMTE5MCw4IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURv
dWIKIAogICAgICAgICAgICAgaWYgKHNwaWxsRm9ybWF0ICE9IERhdGFGb3JtYXRKU0ludGVnZXIg
JiYgc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdEludGVnZXIpIHsKICAgICAgICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxS
ZWdpc3RlcikpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVy
UHJlZGljdGlvbih0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlcikpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91Ymxl
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGZwcik7CiAgICAgICAg
ICAgICAgICAgaGFzVW5ib3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsKIApAQCAtMTIyMSw3ICsx
MjI0LDggQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAg
ICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0ludGVnZXIpIHsKICAg
ICAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRH
UFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAg
ICAgIGlmICghaXNOdW1iZXJQcmVkaWN0aW9uKHR5cGUpKQorICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9k
ZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0YWdH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CiAgICAgICAgICAgICB1bmJv
eERvdWJsZSh0YWdHUFIsIHBheWxvYWRHUFIsIGZwciwgc2NyYXRjaC5mcHIoKSk7CiAgICAgICAg
ICAgICBoYXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwogICAgICAgICAgICAgaXNJbnRl
Z2VyLmxpbmsoJm1faml0KTsKQEAgLTEyODEsNiArMTI4NSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAg
fQogCisgICAgUHJlZGljdGVkVHlwZSB0eXBlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGVJbmRleCku
bV90eXBlOwogICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVy
YXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwpAQCAt
MTI5OSw3ICsxMzA0LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2Vs
bAogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKChpbmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRh
Rm9ybWF0SlMpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Q2VsbCk7Ci0gICAg
ICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdEpTQ2VsbCAmJiBpbmZvLnNw
aWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdENlbGwpCisgICAgICAgIGlmICghaXNDZWxsUHJlZGlj
dGlvbih0eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgbm9kZUlu
ZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVy
Ojp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
KSk7CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKQEAgLTEz
MjAsNyArMTMyNSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwK
ICAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBpbmZvLnBheWxvYWRHUFIoKTsKICAgICAgICAg
bV9ncHJzLmxvY2sodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLmxvY2socGF5bG9hZEdQUik7Ci0g
ICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdEpTQ2VsbCkKKyAgICAg
ICAgaWYgKCFpc0NlbGxQcmVkaWN0aW9uKHR5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlSW5kZXgs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgbV9ncHJzLnVubG9jayh0YWdHUFIp
OwogICAgICAgICBtX2dwcnMucmVsZWFzZSh0YWdHUFIpOwpAQCAtMTM0Nyw4ICsxMzUyLDkgQEAg
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbihOb2RlSW5kZXggbm9kZUluZGV4KQogewogI2lm
IERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgZGF0YUxvZygiU3BlY0Jvb2xAJWQgICAi
LCBub2RlSW5kZXgpOworICAgIGRhdGFMb2coIlNwZWNCb29sQCVkICAgIiwgbm9kZUluZGV4KTsK
ICNlbmRpZgorICAgIFByZWRpY3RlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlSW5k
ZXgpLm1fdHlwZTsKICAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwog
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3Rl
cigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFs
UmVnaXN0ZXJdOwpAQCAtMTM3Myw3ICsxMzc5LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlQm9vbAogCiAgICAgICAgIEFTU0VSVCgoaW5mby5zcGlsbEZvcm1hdCgpICYg
RGF0YUZvcm1hdEpTKSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEJvb2xlYW4p
OwogCi0gICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdEpTQm9vbGVh
biAmJiBpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdEJvb2xlYW4pCisgICAgICAgIGlm
ICghaXNCb29sZWFuUHJlZGljdGlvbih0eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFs
UmVnaXN0ZXIpKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkJvb2xlYW5UYWcpKSk7CiAKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRl
KCk7CkBAIC0xMzk1LDcgKzE0MDEsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVCb29sCiAgICAgICAgIEdQUlJlZyBwYXlsb2FkR1BSID0gaW5mby5wYXlsb2FkR1BSKCk7
CiAgICAgICAgIG1fZ3Bycy5sb2NrKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5sb2NrKHBheWxv
YWRHUFIpOwotICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXRK
U0Jvb2xlYW4pCisgICAgICAgIGlmICghaXNCb29sZWFuUHJlZGljdGlvbih0eXBlKSkKICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXls
b2FkR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKSk7CiAKICAgICAg
ICAgbV9ncHJzLnVubG9jayh0YWdHUFIpOwpAQCAtMzQ0OSw3ICszNDU1LDkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQ2hlY2tT
dHJ1Y3R1cmU6IHsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3N0cnVjdHVyZS5pc1N1YnNldE9mKG5vZGUuc3RydWN0dXJlU2V0KCkpKSB7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIHZhbHVlLmZpbHRlcihub2RlLnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgaWYgKHZhbHVl
ID09IG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkgewogICAgICAgICAgICAgbm9SZXN1
bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkocmV2aXNpb24gMTE3NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyOCw2ICsxMDI4LDcgQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogI2lmIERGR19FTkFCTEUoREVC
VUdfVkVSQk9TRSkKICAgICBkYXRhTG9nKCJTcGVjSW50QCVkICAgIiwgbm9kZUluZGV4KTsKICNl
bmRpZgorICAgIFByZWRpY3RlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlSW5kZXgp
Lm1fdHlwZTsKICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5l
cmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKQEAg
LTEwODUsNyArMTA4Niw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUlu
dEkKICAgICAgICAgLy8gQ2hlY2sgdGhlIHZhbHVlIGlzIGFuIGludGVnZXIuCiAgICAgICAgIEdQ
UlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhncHIpOwotICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgaWYgKCFpc0ludDMyUHJlZGljdGlvbih0eXBl
KSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3By
KSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAgICAgICAgIC8vIElmICFzdHJpY3Qgd2Un
cmUgZG9uZSwgcmV0dXJuLgogICAgICAgICBpZiAoIXN0cmljdCkgewpAQCAtMTE3Myw2ICsxMTc1
LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogI2lmIERGR19F
TkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nKCJTcGVjRG91YmxlQCVkICAgIiwgbm9k
ZUluZGV4KTsKICNlbmRpZgorICAgIFByZWRpY3RlZFR5cGUgdHlwZSA9IG1fc3RhdGUuZm9yTm9k
ZShub2RlSW5kZXgpLm1fdHlwZTsKICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIo
KTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJl
Z2lzdGVyXTsKQEAgLTEyNTcsNyArMTI2MCw4IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZURvdWIKIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKIAotICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGpzVmFsdWVHcHIpLCBub2RlSW5kZXgsIG1faml0LmJy
YW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICBpZiAoIWlzTnVtYmVyUHJlZGljdGlvbih0
eXBlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
anNWYWx1ZUdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAK
ICAgICAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdlIGhhdmUgYSBkb3VibGUgZW5jb2Rl
ZCBhcyBhIEpTVmFsdWUKICAgICAgICAgbV9qaXQubW92ZShqc1ZhbHVlR3ByLCB0ZW1wR3ByKTsK
QEAgLTEzMjQsNiArMTMyOCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUNlbGwKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxvZygiU3BlY0Nl
bGxAJWQgICAiLCBub2RlSW5kZXgpOwogI2VuZGlmCisgICAgUHJlZGljdGVkVHlwZSB0eXBlID0g
bV9zdGF0ZS5mb3JOb2RlKG5vZGVJbmRleCkubV90eXBlOwogICAgIE5vZGUmIG5vZGUgPSBhdChu
b2RlSW5kZXgpOwogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZp
cnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9u
SW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwpAQCAtMTM1Myw3ICsxMzU4LDcgQEAgR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENv
bXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAKICAgICAgICAgaW5m
by5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKUyk7Ci0gICAgICAgIGlmIChpbmZvLnNwaWxs
Rm9ybWF0KCkgIT0gRGF0YUZvcm1hdEpTQ2VsbCkKKyAgICAgICAgaWYgKCFpc0NlbGxQcmVkaWN0
aW9uKHR5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
UmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CiAgICAgICAgIGluZm8u
ZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAgcmV0dXJuIGdwcjsK
QEAgLTEzNjksNyArMTM3NCw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUNlbGwKICAgICBjYXNlIERhdGFGb3JtYXRKUzogewogICAgICAgICBHUFJSZWcgZ3ByID0gaW5m
by5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKLSAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRl
c3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKSk7CisgICAgICAgIGlmICghaXNDZWxsUHJlZGljdGlvbih0eXBlKSkKKyAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3RlcikpOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZv
cm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQpAQCAtMTM5Nyw2ICsxNDAz
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogI2lmIERGR19F
TkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nKCJTcGVjQm9vbEAlZCAgICIsIG5vZGVJ
bmRleCk7CiAjZW5kaWYKKyAgICBQcmVkaWN0ZWRUeXBlIHR5cGUgPSBtX3N0YXRlLmZvck5vZGUo
bm9kZUluZGV4KS5tX3R5cGU7CiAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7
CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdp
c3Rlcl07CkBAIC0xNDI2LDcgKzE0MzMsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVCb29sCiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKIAogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdw
ciwgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRh
Rm9ybWF0SlNCb29sZWFuKSB7CisgICAgICAgIGlmICghaXNCb29sZWFuUHJlZGljdGlvbih0eXBl
KSkgewogICAgICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hl
Y2ssIGdwciwgSW52YWxpZEdQUlJlZykpOwogICAgICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CkBAIC0xNDQ1
LDkgKzE0NTIsMTEgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAog
ICAgIGNhc2UgRGF0YUZvcm1hdEpTOiB7CiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigp
OwogICAgICAgICBtX2dwcnMubG9jayhncHIpOwotICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKLSAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xl
YW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpKTsKLSAgICAgICAgbV9qaXQu
eG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdw
cik7CisgICAgICAgIGlmICghaXNCb29sZWFuUHJlZGljdGlvbih0eXBlKSkgeworICAgICAgICAg
ICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZh
bHNlKSksIGdwcik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSks
IFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxp
ZEdQUlJlZykpOworICAgICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CisgICAgICAgIH0KICAgICAgICAgaW5m
by5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm4g
Z3ByOwogICAgIH0KQEAgLTM0NTMsNyArMzQ2Miw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ2hlY2tT
dHJ1Y3R1cmU6IHsKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3N0cnVjdHVyZS5pc1N1YnNldE9mKG5vZGUuc3RydWN0dXJlU2V0KCkpKSB7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIHZhbHVlLmZpbHRlcihub2RlLnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgaWYgKHZhbHVl
ID09IG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkgewogICAgICAgICAgICAgbm9SZXN1
bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiAxMTc3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBTcGVjdWxhdGl2ZUpJ
VDo6U3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsCiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgo
KS5tX2xvY2FsVmFycykKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKSkKICAgICAsIG1fc3RhdGUobV9qaXQuZ3JhcGgoKSkKKyAgICAsIG1faXND
aGVja2luZ0FyZ3VtZW50VHlwZXMoZmFsc2UpCiB7CiB9CiAKQEAgLTExMTYsNiArMTExNyw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygpCiB7CiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRl
eCk7CisgICAgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyA9IHRydWU7CiAgICAgbV9jb2RlT3Jp
Z2luRm9yT1NSID0gQ29kZU9yaWdpbigwKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCkBAIC0xMjc2LDYgKzEyNzgsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiAgICAgICAgIH0gCiAjZW5kaWYKICAgICB9
CisgICAgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyA9IGZhbHNlOwogfQogCiBib29sIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKCkKQEAgLTE2NTcsNyArMTY2MCw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIKIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKIAotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlLmNoaWxkMSgp
LmluZGV4KCksIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGdwciwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAgICBpZiAoIWlzTnVt
YmVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciks
IG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKIAogICAgICAg
ICAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdlIGhhdmUgYSBkb3VibGUgZW5jb2RlZCBh
cyBhIEpTVmFsdWUKICAgICAgICAgICAgIG1faml0Lm1vdmUoZ3ByLCByZXN1bHRHcHIpOwpAQCAt
MTY5Myw3ICsxNjk3LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlVG9JbnQz
MgogCiAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZykpOwogCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLmNoaWxkMSgpLmluZGV4
KCksIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHRhZ0dQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWlzTnVtYmVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
UmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlLmNoaWxkMSgpLmluZGV4KCksIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKIAogICAgICAgICAgICAgICAgIHVuYm94RG91YmxlKHRh
Z0dQUiwgcGF5bG9hZEdQUiwgZnByLCBzY3JhdGNoLmZwcigpKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTE3NzA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTM3LDIxICsyMTM3LDI1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJU
KGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBl
cyk7CiAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2lu
ZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlRm9yKG5vZGVJbmRleCksIGp1bXBUb0ZhaWwsIHRoaXMpKTsKICAgICB9CiAgICAgdm9pZCBz
cGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJj
ZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQogICAgIHsK
KyAgICAgICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNr
aW5nQXJndW1lbnRUeXBlcyk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1
ZVNvdXJjZSwgbm9kZVVzZS5pbmRleCgpLCBqdW1wVG9GYWlsKTsKICAgICB9CiAgICAgLy8gQWRk
IGEgc2V0IG9mIHNwZWN1bGF0aW9uIGNoZWNrcyB3aXRob3V0IGFkZGl0aW9uYWwgcmVjb3Zlcnku
CiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2Ug
anNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0JiBqdW1wc1RvRmFpbCkKICAgICB7CisgICAgICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRl
eCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOwogICAgICAgICBWZWN0
b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXAsIDE2PiBKdW1wVmVjdG9yID0ganVtcHNUb0ZhaWwuanVt
cHMoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEp1bXBWZWN0b3Iuc2l6ZSgp
OyArK2kpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2Us
IG5vZGVJbmRleCwgSnVtcFZlY3RvcltpXSk7CiAgICAgfQogICAgIHZvaWQgc3BlY3VsYXRpb25D
aGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9k
ZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCkKICAgICB7CisgICAg
ICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3Vy
Y2UsIG5vZGVVc2UuaW5kZXgoKSwganVtcHNUb0ZhaWwpOwogICAgIH0KICAgICAvLyBBZGQgYSBz
cGVjdWxhdGlvbiBjaGVjayB3aXRoIGFkZGl0aW9uYWwgcmVjb3ZlcnkuCkBAIC0yMTU5LDE1ICsy
MTYzLDE4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKGF0KG1fY29tcGlsZUluZGV4KS5jYW5F
eGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7CiAgICAgICAgIG1faml0LmNvZGVC
bG9jaygpLT5hcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KHJlY292ZXJ5KTsKICAgICAgICAgbV9q
aXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNl
LCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4
KSwganVtcFRvRmFpbCwgdGhpcywgbV9qaXQuY29kZUJsb2NrKCktPm51bWJlck9mU3BlY3VsYXRp
b25SZWNvdmVyaWVzKCkpKTsKICAgICB9CiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRL
aW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiBy
ZWNvdmVyeSkKICAgICB7CisgICAgICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2FuRXhp
dCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOwogICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2UuaW5kZXgoKSwganVtcFRvRmFpbCwgcmVj
b3ZlcnkpOwogICAgIH0KICAgICB2b2lkIGZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFs
dWVSZWNvdmVyeSkKICAgICB7CisgICAgICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2Fu
RXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOwogICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVJbmRleCwganVtcFRvRmFpbCk7CiAgICAg
ICAgIAogICAgICAgICBOb2RlJiBzZXRMb2NhbCA9IGF0KG1faml0LmdyYXBoKCkubV9ibG9ja3Nb
bV9ibG9ja10tPmF0KG1faW5kZXhJbkJsb2NrICsgMSkpOwpAQCAtMjE4Niw2ICsyMTkzLDcgQEAg
cHVibGljOgogICAgIC8vIENhbGxlZCB3aGVuIHdlIHN0YXRpY2FsbHkgZGV0ZXJtaW5lIHRoYXQg
YSBzcGVjdWxhdGlvbiB3aWxsIGZhaWwuCiAgICAgdm9pZCB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4
ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZUluZGV4
IG5vZGVJbmRleCkKICAgICB7CisgICAgICAgIEFTU0VSVChhdChtX2NvbXBpbGVJbmRleCkuY2Fu
RXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOwogI2lmIERGR19FTkFCTEUoREVC
VUdfVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZygiU3BlY3VsYXRpdmVKSVQgd2FzIHRlcm1pbmF0
ZWQuXG4iKTsKICNlbmRpZgpAQCAtMjE5Niw2ICsyMjA0LDcgQEAgcHVibGljOgogICAgIH0KICAg
ICB2b2lkIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpTVmFs
dWVSZWdzIGpzVmFsdWVSZWdzLCBFZGdlIG5vZGVVc2UpCiAgICAgeworICAgICAgICBBU1NFUlQo
YXQobV9jb21waWxlSW5kZXgpLmNhbkV4aXQoKSB8fCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
KTsKICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oa2luZCwganNWYWx1ZVJl
Z3MsIG5vZGVVc2UuaW5kZXgoKSk7CiAgICAgfQogICAgIApAQCAtMjI3MSw2ICsyMjgwLDggQEAg
cHVibGljOgogICAgIAogICAgIEFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKICAgICAKKyAgICBib29s
IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXM7CisgICAgCiAgICAgVmVjdG9yPFNsb3dQYXRoR2Vu
ZXJhdG9yKiwgOD4gbV9zbG93UGF0aEdlbmVyYXRvcnM7IC8vIGRvZXNuJ3QgdXNlIE93blB0cjw+
IGJlY2F1c2UgSSBkb24ndCB3YW50IHRvIGluY2x1ZGUgREZHU2xvd1BhdGhHZW5lcmF0b3IuaAog
ICAgIFZlY3RvcjxTaWxlbnRSZWdpc3RlclNhdmVQbGFuPiBtX3BsYW5zOwogCg==
</data>
<flag name="review"
          id="149320"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>