<?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>221668</bug_id>
          
          <creation_ts>2021-02-10 02:54:47 -0800</creation_ts>
          <short_desc>[JSC] Simplify excludedSet handling in object rest expression</short_desc>
          <delta_ts>2024-09-18 12:25:22 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=279863</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ashvayka</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1727486</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-10 02:54:47 -0800</bug_when>
    <thetext>[JSC] Simplify excludedSet handling in object rest expression</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727487</commentid>
    <comment_count>1</comment_count>
      <attachid>419832</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-10 02:55:00 -0800</bug_when>
    <thetext>Created attachment 419832
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727488</commentid>
    <comment_count>2</comment_count>
      <attachid>419833</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-10 02:57:27 -0800</bug_when>
    <thetext>Created attachment 419833
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727489</commentid>
    <comment_count>3</comment_count>
      <attachid>419834</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-10 03:00:51 -0800</bug_when>
    <thetext>Created attachment 419834
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727719</commentid>
    <comment_count>4</comment_count>
      <attachid>419891</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-10 12:43:28 -0800</bug_when>
    <thetext>Created attachment 419891
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1727737</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-10 13:29:30 -0800</bug_when>
    <thetext>This should be definitely good for memory :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728916</commentid>
    <comment_count>6</comment_count>
      <attachid>420217</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-13 01:00:32 -0800</bug_when>
    <thetext>Created attachment 420217
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728921</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-13 02:59:44 -0800</bug_when>
    <thetext>Ah, failure is due to the test (and because copy-data-properties become faster by this patch possibly). Fixing it separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728922</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-13 03:00:03 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #7)
&gt; Ah, failure is due to the test (and because copy-data-properties become
&gt; faster by this patch possibly). Fixing it separately.

&lt;https://commits.webkit.org/234068@main&gt; for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728923</commentid>
    <comment_count>9</comment_count>
      <attachid>420219</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-13 03:01:45 -0800</bug_when>
    <thetext>Created attachment 420219
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729105</commentid>
    <comment_count>10</comment_count>
      <attachid>420219</attachid>
    <who name="Caio Lima">ticaiolima</who>
    <bug_when>2021-02-15 03:08:16 -0800</bug_when>
    <thetext>Comment on attachment 420219
Patch

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

Informal r+. This patch is really good. Does it impact any other benchmark?

&gt; Source/JavaScriptCore/ChangeLog:13
&gt; +        need to call Set#add in JS side.

Very nice!

&gt; Source/JavaScriptCore/ChangeLog:18
&gt; +        side-effect free if the input is number or string.

It would be nice have in the ChangeLog the microbenchmark results.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:5620
&gt; +    // This must be non-tail-call because of @copyDataProperties&apos;s assumption.

It would be nice to state this assumption here. For instance, it&apos;s not clear to me which assumption you are talking about.

&gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:-904
&gt; -                continue;

Great that this allows move this check back to `forEachProperty`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1729407</commentid>
    <comment_count>11</comment_count>
      <attachid>420219</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-02-15 15:03:43 -0800</bug_when>
    <thetext>Comment on attachment 420219
Patch

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

This is a thing of beauty, r=me.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:5616
&gt; +    CallArguments args(generator, nullptr, 1);

-1 bytecode op, nice.

&gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:875
&gt; +                auto propertyName = callFrame-&gt;uncheckedArgument(index).toPropertyKey(globalObject);

nit: Can we have a comment saying &quot;this isn&apos;t observable since ObjectPatternNode::bindValue() also performs ToPropertyKey&quot;?

&gt; JSTests/ChangeLog:8
&gt; +        * microbenchmarks/object-rest-computed-destructuring.js: Added.

nit: Stating microbenchmark progression would be nice for future ChangeLog readers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1730215</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-02-17 02:55:13 -0800</bug_when>
    <thetext>&lt;rdar://problem/74427713&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731265</commentid>
    <comment_count>13</comment_count>
      <attachid>420219</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-19 01:23:29 -0800</bug_when>
    <thetext>Comment on attachment 420219
Patch

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

&gt;&gt; Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp:875
&gt;&gt; +                auto propertyName = callFrame-&gt;uncheckedArgument(index).toPropertyKey(globalObject);
&gt; 
&gt; nit: Can we have a comment saying &quot;this isn&apos;t observable since ObjectPatternNode::bindValue() also performs ToPropertyKey&quot;?

Yeah, added :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731266</commentid>
    <comment_count>14</comment_count>
      <attachid>420219</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-19 01:23:52 -0800</bug_when>
    <thetext>Comment on attachment 420219
Patch

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

&gt;&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:5620
&gt;&gt; +    // This must be non-tail-call because of @copyDataProperties&apos;s assumption.
&gt; 
&gt; It would be nice to state this assumption here. For instance, it&apos;s not clear to me which assumption you are talking about.

Yup, added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731270</commentid>
    <comment_count>15</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-19 01:36:35 -0800</bug_when>
    <thetext>Yeah, this is showing 2x perf boost.

                                               ToT                     Patched

object-rest-computed-destructuring       62.9960+-6.5072     ^     30.2157+-1.1420        ^ definitely 2.0849x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1731277</commentid>
    <comment_count>16</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-02-19 01:44:22 -0800</bug_when>
    <thetext>Committed r273135 (234332@main): &lt;https://commits.webkit.org/234332@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419832</attachid>
            <date>2021-02-10 02:55:00 -0800</date>
            <delta_ts>2021-02-10 03:10:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221668-20210210025459.patch</filename>
            <type>text/plain</type>
            <size>31070</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNjM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
MTM0YTFmMmZmMGY5ZDM5MDU5YmZmNDA2ZjNlMjJlZDNlZDEwMTk0Li41MDJiZjIyNTBlOTgyNzhl
YWVlZmJkMzAwMTFlNjg0NDFhMmE0OWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAyMS0wMi0xMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFNpbXBsaWZ5IGV4Y2x1ZGVkU2V0IGhhbmRsaW5nIGluIG9iamVj
dCByZXN0IGV4cHJlc3Npb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMTY2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3Rh
bnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRJZGVudGlmaWVyU2V0cyk6Cisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmNvbnN0YW50SWRlbnRpZmllclNldHMp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRkU2V0Q29uc3Rh
bnQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6Ok9iamVjdFBhdHRlcm5Ob2RlOjpiaW5kVmFsdWUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpPYmplY3RTcHJlYWRFeHByZXNzaW9uTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk6OmVuY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5OjpkZWNvZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorCiAyMDIxLTAy
LTA5ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10g
QysrIGl0ZXJhdGlvbiBzaG91bGQgc3VwcG9ydCBmYXN0IGl0ZXJhdG9yIHByb3RvY29sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDA2MmRmYWMy
ZTQ5ZWYwOWU4Y2E5YmQ4Yzk2ZDZjNTRiNjZiMGUyN2IuLjVlYTBjYWU4YjVmODBmNDdhOTk0M2I5
YmM5ODMyZmE1M2I5NDJiMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCkBAIC00MjIsOSArNDIyLDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsK
ICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPmhhc1JhcmVEYXRhKCkpIHsKICAgICAgICAgY3Jl
YXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwogCi0gICAgICAgIHNldENvbnN0YW50SWRlbnRpZmll
clNldFJlZ2lzdGVycyh2bSwgdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50SWRlbnRpZmllclNl
dHMoKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwot
CiAgICAgICAgIGlmIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZF
eGNlcHRpb25IYW5kbGVycygpKSB7CiAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykgewpAQCAtODkwLDI4ICs4ODcsNiBAQCBDb2RlQmxvY2s6On5D
b2RlQmxvY2soKQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpz
ZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mIHZtLCBjb25zdCBSZWZDb3VudGVk
QXJyYXk8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpCi17Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKLQotICAgIGZvciAoY29uc3QgYXV0
byYgZW50cnkgOiBjb25zdGFudHMpIHsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllclNldCYgc2V0
ID0gZW50cnkuZmlyc3Q7Ci0KLSAgICAgICAgU3RydWN0dXJlKiBzZXRTdHJ1Y3R1cmUgPSBnbG9i
YWxPYmplY3QtPnNldFN0cnVjdHVyZSgpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwotICAgICAgICBKU1NldCoganNTZXQgPSBKU1NldDo6Y3JlYXRlKGdsb2Jh
bE9iamVjdCwgdm0sIHNldFN0cnVjdHVyZSwgc2V0LnNpemUoKSk7Ci0gICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0KLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBz
ZXRFbnRyeSA6IHNldCkgewotICAgICAgICAgICAgSlNTdHJpbmcqIGpzU3RyaW5nID0ganNPd25l
ZFN0cmluZyh2bSwgc2V0RW50cnkuZ2V0KCkpOyAKLSAgICAgICAgICAgIGpzU2V0LT5hZGQoZ2xv
YmFsT2JqZWN0LCBqc1N0cmluZyk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwotICAgICAgICB9Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbZW50
cnkuc2Vjb25kXS5zZXQodm0sIHRoaXMsIGpzU2V0KTsKLSAgICB9Ci19Ci0KIHZvaWQgQ29kZUJs
b2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJy
aWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTY3Jp
cHRFeGVjdXRhYmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggZGZjZTdl
NGYzMDVlMGRjY2Q5Y2YxMTQxODg4MjFjMDMzMTdjMjNkYi4uMDI2OGZjYWY2Y2ZlMzQ0NTQ5NjQ3
ZjExMmU4YmMxNDE4MDY3NDc2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaApAQCAtOTUzLDggKzk1Myw2IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBK
U0NlbGwgewogCiAgICAgdm9pZCB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENv
dW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxl
cywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpOwogCi0gICAgdm9pZCBzZXRD
b25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8
Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpOwotCiAgICAgdm9pZCBzZXRD
b25zdGFudFJlZ2lzdGVycyhjb25zdCBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPFVua25v
d24+PiYgY29uc3RhbnRzLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTY3JpcHRFeGVjdXRh
YmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpOwogCiAgICAgdm9pZCByZXBsYWNlQ29uc3RhbnQoVmly
dHVhbFJlZ2lzdGVyIHJlZywgSlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggMWY1MWVjZTVkNmY4NmQ3
MDk1MTFiNGE0YzE4MmM2NGNiZmExODNiZi4uOWFjZGI0YzVmMjU5ZTI2Yjc4MDllNGE0MWM4ZTFj
ZTNiZDNlZDVhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgKQEAgLTc0LDcgKzc0LDYgQEAgdHlwZWRlZiB1bnNpZ25lZCBVbmxp
bmtlZEFycmF5UHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRBcnJheUFsbG9jYXRp
b25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZE9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZExMSW50Q2FsbExpbmtJbmZvOwotdXNpbmcg
Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnkgPSBzdGQ6OnBhaXI8SWRlbnRpZmllclNldCwgdW5z
aWduZWQ+OwogCiBzdHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUgewogICAgIHN0cnVjdCBP
ZmZzZXRMb2NhdGlvbiB7CkBAIC0xNjIsNyArMTYxLDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxv
Y2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyBy
ZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIAogICAgIHVuc2ln
bmVkIG51bWJlck9mQ29uc3RhbnRJZGVudGlmaWVyU2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmFy
ZURhdGEgPyBtX3JhcmVEYXRhLT5tX2NvbnN0YW50SWRlbnRpZmllclNldHMuc2l6ZSgpIDogMDsg
fQotICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4m
IGNvbnN0YW50SWRlbnRpZmllclNldHMoKSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1f
cmFyZURhdGEtPm1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsgfQorICAgIGNvbnN0IFJlZkNvdW50
ZWRBcnJheTxJZGVudGlmaWVyU2V0PiYgY29uc3RhbnRJZGVudGlmaWVyU2V0cygpIHsgQVNTRVJU
KG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRz
OyB9CiAKICAgICAvLyBKdW1wcwogICAgIHNpemVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29u
c3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5zaXplKCk7IH0KQEAgLTQxMSw3ICs0MTAsNyBAQCBj
bGFzcyBVbmxpbmtlZENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICBIYXNoTWFw
PHVuc2lnbmVkLCBUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+IG1fdHlwZVByb2ZpbGVySW5m
b01hcDsKICAgICAgICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+
IG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7CiAgICAgICAgIFJlZkNvdW50
ZWRBcnJheTxCaXRWZWN0b3I+IG1fYml0VmVjdG9yczsKLSAgICAgICAgUmVmQ291bnRlZEFycmF5
PENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7Cisg
ICAgICAgIFJlZkNvdW50ZWRBcnJheTxJZGVudGlmaWVyU2V0PiBtX2NvbnN0YW50SWRlbnRpZmll
clNldHM7CiAKICAgICAgICAgdW5zaWduZWQgbV9uZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciA6
IDE7CiAgICAgICAgIHVuc2lnbmVkIG1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgOiAxOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3IuaAppbmRleCA5NGM2ODcwZTk5NGMyYmY1Yzk4MmNlOTUyZTRjNTM0YmRj
OTZiNDg4Li40ODM4MDUxYzg4OTk4YmMxNWFlMmMzYmQ0NWZmN2JmMWI4ZTJlYjIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3IuaApAQCAtMTExLDE0ICsxMTEsMTMgQEAgY2xhc3MgVW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3IgewogICAgIH0KIAogICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRJ
ZGVudGlmaWVyU2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0cy5z
aXplKCk7IH0KLSAgICBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBj
b25zdGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1cm4gbV9jb25zdGFudElkZW50aWZpZXJTZXRz
OyB9Ci0gICAgdm9pZCBhZGRTZXRDb25zdGFudChJZGVudGlmaWVyU2V0JiBzZXQpCisgICAgY29u
c3QgVmVjdG9yPElkZW50aWZpZXJTZXQ+JiBjb25zdGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1
cm4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOyB9CisgICAgdW5zaWduZWQgYWRkU2V0Q29uc3Rh
bnQoSWRlbnRpZmllclNldCYmIHNldCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3ZtLmhlYXAu
aXNEZWZlcnJlZCgpKTsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lz
dGVycy5zaXplKCk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFy
cmllcjxVbmtub3duPigpKTsKLSAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwotICAgICAgICBt
X2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5kKENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5
KHNldCwgcmVzdWx0KSk7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRJZGVu
dGlmaWVyU2V0cy5zaXplKCk7CisgICAgICAgIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0cy5hcHBl
bmQoV1RGTW92ZShzZXQpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBj
b25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFu
dEluZGV4KCldOyB9CkBAIC0yMTAsNyArMjA5LDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tH
ZW5lcmF0b3IgewogICAgIEhhc2hNYXA8dW5zaWduZWQsIFVubGlua2VkQ29kZUJsb2NrOjpSYXJl
RGF0YTo6VHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlPiBtX3R5cGVQcm9maWxlckluZm9NYXA7
CiAgICAgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IG1fb3BQcm9maWxlQ29udHJv
bEZsb3dCeXRlY29kZU9mZnNldHM7CiAgICAgVmVjdG9yPEJpdFZlY3Rvcj4gbV9iaXRWZWN0b3Jz
OwotICAgIFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50
aWZpZXJTZXRzOworICAgIFZlY3RvcjxJZGVudGlmaWVyU2V0PiBtX2NvbnN0YW50SWRlbnRpZmll
clNldHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggNGU1
NzE5ZWY4MjU4ZjNiMjlmZTYwZDc2ZGIyMDJkMmY5YjI4YTU3ZS4uZTQzYzRjZDc0YzczNmQ2NGY2
NzU1OTczN2MwNDEyZTRkNGM2MDMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTE4NDAsMjUgKzE4
NDAsMTAgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVy
SUQqIGRzdCwgSlNWYWx1ZSB2LCBTb3VyY2VDb2RlUmUKICAgICByZXR1cm4gY29uc3RhbnRJRDsK
IH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQq
IGRzdCwgSWRlbnRpZmllclNldCYgc2V0KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSWRlbnRpZmllclNldCYmIHNldCkKIHsKLSAgICBp
ZiAobV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRJZGVudGlmaWVyU2V0cygpKSB7Ci0gICAg
ICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX2NvZGVCbG9jay0+Y29uc3RhbnRJZGVudGlm
aWVyU2V0cygpKSB7Ci0gICAgICAgICAgICBpZiAoZW50cnkuZmlyc3QgIT0gc2V0KQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gJm1f
Y29uc3RhbnRQb29sUmVnaXN0ZXJzW2VudHJ5LnNlY29uZF07Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgdW5zaWduZWQgaW5kZXggPSBhZGRDb25zdGFudEluZGV4KCk7Ci0gICAgbV9jb2Rl
QmxvY2stPmFkZFNldENvbnN0YW50KHNldCk7Ci0gICAgUmVnaXN0ZXJJRCogbV9zZXRSZWdpc3Rl
ciA9ICZtX2NvbnN0YW50UG9vbFJlZ2lzdGVyc1tpbmRleF07Ci0gICAgCi0gICAgaWYgKGRzdCkK
LSAgICAgICAgcmV0dXJuIG1vdmUoZHN0LCBtX3NldFJlZ2lzdGVyKTsKLSAgICAKLSAgICByZXR1
cm4gbV9zZXRSZWdpc3RlcjsKKyAgICB1bnNpZ25lZCBzZXRJbmRleCA9IG1fY29kZUJsb2NrLT5h
ZGRTZXRDb25zdGFudChXVEZNb3ZlKHNldCkpOworICAgIHJldHVybiBlbWl0TG9hZChkc3QsIGpz
TnVtYmVyKHNldEluZGV4KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExvb2tVcFZhcktpbmRG
dW5jdG9yPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCmluZGV4IGJiZmI1NjgxOThmNDQ0NTU3ZGEzMTMzYzI5NjYzY2Q0
MjAxZTdiZTUuLmJkOGQ3YTVkMTBiYWQ0YTg0MjhhNGZiNzVkNzA3MDgwYWEzYTA5MDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKQEAgLTcwNSw3ICs3MDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29sKTsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSlNWYWx1ZSwgU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSWRlbnRpZmllclNl
dCYgZXhjbHVkZWRMaXN0KTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJ
RCogZHN0LCBJZGVudGlmaWVyU2V0JiYgZXhjbHVkZWRMaXN0KTsKIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVbmFyeU9wLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8VW5hcnlPcDo6
b3Bjb2RlSUQgIT0gb3BfbmVnYXRlPj4KICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFVuYXJ5T3Ao
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggNGMwOGEzM2QzZjg3
YmI0MmJlM2Y4ZjZjZGJhNWZhMDM3MDA3OGU1Zi4uNTMxY2E1MWYyYTliMWZlOWNmNDYwOWU2NTRh
MDZhYzVmMTZmMDNlMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtNTI5OSwxMTMgKzUyOTksMTA3IEBAIHZvaWQgT2Jq
ZWN0UGF0dGVybk5vZGU6OmJpbmRWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiByaHMpCiB7CiAgICAgZ2VuZXJhdG9yLmVtaXRSZXF1aXJlT2JqZWN0Q29lcmNp
YmxlKHJocywgIlJpZ2h0IHNpZGUgb2YgYXNzaWdubWVudCBjYW5ub3QgYmUgZGVzdHJ1Y3R1cmVk
Il9zKTsKIAotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNsdWRlZExpc3Q7Ci0gICAgSWRlbnRp
ZmllclNldCBleGNsdWRlZFNldDsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYWRkTWV0aG9kOwot
ICAgIGlmIChtX2NvbnRhaW5zUmVzdEVsZW1lbnQgJiYgbV9jb250YWluc0NvbXB1dGVkUHJvcGVy
dHkpIHsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNldENvbnN0cnVjdG9yID0gZ2VuZXJh
dG9yLm1vdmVMaW5rVGltZUNvbnN0YW50KG51bGxwdHIsIExpbmtUaW1lQ29uc3RhbnQ6OlNldCk7
Ci0KLSAgICAgICAgQ2FsbEFyZ3VtZW50cyBhcmdzKGdlbmVyYXRvciwgbnVsbHB0ciwgMCk7Ci0g
ICAgICAgIGV4Y2x1ZGVkTGlzdCA9IGdlbmVyYXRvci5lbWl0Q29uc3RydWN0KGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKSwgc2V0Q29uc3RydWN0b3IuZ2V0KCksIHNldENvbnN0cnVjdG9yLmdldCgp
LCBOb0V4cGVjdGVkRnVuY3Rpb24sIGFyZ3MsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSk7Ci0KLSAgICAgICAgYWRkTWV0aG9kID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgZXhjbHVkZWRMaXN0LmdldCgpLCBnZW5lcmF0b3IucHJvcGVy
dHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmFkZFByaXZhdGVOYW1lKCkpOwotICAgIH0KLQogICAg
IEJ5dGVjb2RlR2VuZXJhdG9yOjpQcmVzZXJ2ZWRURFpTdGFjayBwcmVzZXJ2ZWRURFpTdGFjazsK
ICAgICBnZW5lcmF0b3IucHJlc2VydmVURFpTdGFjayhwcmVzZXJ2ZWRURFpTdGFjayk7CiAKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGFyZ2V0UGF0dGVybnMuc2l6ZSgpOyBpKyspIHsK
LSAgICAgICAgY29uc3QgYXV0byYgdGFyZ2V0ID0gbV90YXJnZXRQYXR0ZXJuc1tpXTsKLSAgICAg
ICAgaWYgKHRhcmdldC5iaW5kaW5nVHlwZSA9PSBCaW5kaW5nVHlwZTo6RWxlbWVudCkgewotICAg
ICAgICAgICAgLy8gSWYgdGhlIGRlc3RydWN0dXJpbmcgYmVjb21lcyBnZXRfYnlfaWQgYW5kIG1v
diwgdGhlbiB3ZSBzaG91bGQgc3RvcmUgcmVzdWx0cyBkaXJlY3RseSB0byB0aGUgbG9jYWwncyBi
aW5kaW5nLgotICAgICAgICAgICAgLy8gRnJvbQotICAgICAgICAgICAgLy8gICAgIGdldF9ieV9p
ZCAgICAgICAgICBkc3Q6bG9jMTAsIGJhc2U6bG9jOSwgcHJvcGVydHk6MAotICAgICAgICAgICAg
Ly8gICAgIG1vdiAgICAgICAgICAgICAgICBkc3Q6bG9jNiwgc3JjOmxvYzEwCi0gICAgICAgICAg
ICAvLyBUbwotICAgICAgICAgICAgLy8gICAgIGdldF9ieV9pZCAgICAgICAgICBkc3Q6bG9jNiwg
YmFzZTpsb2M5LCBwcm9wZXJ0eTowCi0gICAgICAgICAgICBhdXRvIHdyaXRhYmxlRGlyZWN0Qmlu
ZGluZ0lmUG9zc2libGUgPSBbJl0oKSAtPiBSZWdpc3RlcklEKiB7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhlIGZvbGxvd2luZyBwYXR0ZXJuIGlzIHBvc3NpYmxlLiBJbiB0aGF0IGNhc2UsIGFmdGVy
IHNldHRpbmcgfGRhdGF8IGxvY2FsIHZhcmlhYmxlLCB3ZSBuZWVkIHRvIHN0b3JlIHByb3BlcnR5
IG5hbWUgaW50byB0aGUgc2V0LgotICAgICAgICAgICAgICAgIC8vIFNvLCBvbGQgcHJvcGVydHkg
bmFtZSB8ZGF0YXwgcmVzdWx0IG11c3QgYmUga2VwdCBiZWZvcmUgc2V0dGluZyBpdCBpbnRvIHxk
YXRhfC4KLSAgICAgICAgICAgICAgICAvLyAgICAgKHsgW2RhdGFdOiBkYXRhLCAuLi5vYmogfSA9
IG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29udGFpbnNSZXN0RWxlbWVudCAmJiBt
X2NvbnRhaW5zQ29tcHV0ZWRQcm9wZXJ0eSAmJiB0YXJnZXQucHJvcGVydHlFeHByZXNzaW9uKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAvLyBk
ZWZhdWx0IHZhbHVlIGNhbiBpbmNsdWRlIGEgcmVmZXJlbmNlIHRvIGxvY2FsIHZhcmlhYmxlLiBT
byBmaWxsaW5nIHZhbHVlIHRvIGEgbG9jYWwgdmFyaWFibGUgY2FuIGRpZmZlciByZXN1bHQuCi0g
ICAgICAgICAgICAgICAgLy8gV2UgZ2l2ZSB1cCBmYXN0IHBhdGggaWYgZGVmYXVsdCB2YWx1ZSBp
bmNsdWRlcyBub24gY29uc3RhbnQuCi0gICAgICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsCi0g
ICAgICAgICAgICAgICAgLy8gICAgICh7IGRhdGEgPSBkYXRhIH0gPSBvYmplY3QpOwotICAgICAg
ICAgICAgICAgIGlmICh0YXJnZXQuZGVmYXVsdFZhbHVlICYmICF0YXJnZXQuZGVmYXVsdFZhbHVl
LT5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgICAgIHJldHVybiB0YXJnZXQucGF0dGVybi0+d3JpdGFibGVEaXJlY3RCaW5kaW5n
SWZQb3NzaWJsZShnZW5lcmF0b3IpOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgYXV0
byBmaW5pc2hEaXJlY3RCaW5kaW5nQXNzaWdubWVudCA9IFsmXSgpIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQod3JpdGFibGVEaXJlY3RCaW5kaW5nSWZQb3NzaWJsZSgpKTsKLSAgICAgICAgICAg
ICAgICB0YXJnZXQucGF0dGVybi0+ZmluaXNoRGlyZWN0QmluZGluZ0Fzc2lnbm1lbnQoZ2VuZXJh
dG9yKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0
ZW1wOwotICAgICAgICAgICAgUmVnaXN0ZXJJRCogZGlyZWN0QmluZGluZyA9IHdyaXRhYmxlRGly
ZWN0QmluZGluZ0lmUG9zc2libGUoKTsKLSAgICAgICAgICAgIGlmIChkaXJlY3RCaW5kaW5nKQot
ICAgICAgICAgICAgICAgIHRlbXAgPSBkaXJlY3RCaW5kaW5nOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHRlbXAgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0KLSAgICAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWU7Ci0gICAgICAgICAgICBpZiAo
IXRhcmdldC5wcm9wZXJ0eUV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgICAgICBPcHRpb25hbDx1
aW50MzJfdD4gb3B0aW9uYWxJbmRleCA9IHBhcnNlSW5kZXgodGFyZ2V0LnByb3BlcnR5TmFtZSk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25hbEluZGV4KQotICAgICAgICAgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQodGVtcC5nZXQoKSwgcmhzLCB0YXJnZXQucHJvcGVydHlO
YW1lKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHByb3BlcnR5SW5kZXggPSBnZW5lcmF0b3IuZW1pdExvYWQobnVsbHB0ciwg
anNOdW1iZXIob3B0aW9uYWxJbmRleC52YWx1ZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0R2V0QnlWYWwodGVtcC5nZXQoKSwgcmhzLCBwcm9wZXJ0eUluZGV4LmdldCgp
KTsKKyAgICB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBuZXdPYmplY3Q7CisgICAgICAg
IElkZW50aWZpZXJTZXQgZXhjbHVkZWRTZXQ7CisgICAgICAgIE9wdGlvbmFsPENhbGxBcmd1bWVu
dHM+IGFyZ3M7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ29tcHV0ZWRQcm9wZXJ0aWVzID0g
MDsKKyAgICAgICAgdW5zaWduZWQgaW5kZXhJbkFyZ3VtZW50cyA9IDI7CisgICAgICAgIGlmICht
X2NvbnRhaW5zUmVzdEVsZW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChtX2NvbnRhaW5zQ29tcHV0
ZWRQcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDog
bV90YXJnZXRQYXR0ZXJucykgeworICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmJpbmRp
bmdUeXBlID09IEJpbmRpbmdUeXBlOjpFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodGFyZ2V0LnByb3BlcnR5RXhwcmVzc2lvbikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICArK251bWJlck9mQ29tcHV0ZWRQcm9wZXJ0aWVzOworICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JQcm9wZXJ0eSh0YXJnZXQucHJv
cGVydHlFeHByZXNzaW9uKTsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5VmFs
KHRlbXAuZ2V0KCksIHJocywgcHJvcGVydHlOYW1lLmdldCgpKTsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG5ld09iamVjdCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAg
ICAgIGFyZ3MuZW1wbGFjZShnZW5lcmF0b3IsIG51bGxwdHIsIGluZGV4SW5Bcmd1bWVudHMgKyBu
dW1iZXJPZkNvbXB1dGVkUHJvcGVydGllcyk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KG1fY29udGFpbnNSZXN0RWxlbWVudCkgewotICAgICAgICAgICAgICAgIGlmIChtX2NvbnRhaW5z
Q29tcHV0ZWRQcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LnByb3Bl
cnR5RXhwcmVzc2lvbikKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RhcmdldFBh
dHRlcm5zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiB0YXJnZXQgPSBt
X3RhcmdldFBhdHRlcm5zW2ldOworICAgICAgICAgICAgaWYgKHRhcmdldC5iaW5kaW5nVHlwZSA9
PSBCaW5kaW5nVHlwZTo6RWxlbWVudCkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBkZXN0
cnVjdHVyaW5nIGJlY29tZXMgZ2V0X2J5X2lkIGFuZCBtb3YsIHRoZW4gd2Ugc2hvdWxkIHN0b3Jl
IHJlc3VsdHMgZGlyZWN0bHkgdG8gdGhlIGxvY2FsJ3MgYmluZGluZy4KKyAgICAgICAgICAgICAg
ICAvLyBGcm9tCisgICAgICAgICAgICAgICAgLy8gICAgIGdldF9ieV9pZCAgICAgICAgICBkc3Q6
bG9jMTAsIGJhc2U6bG9jOSwgcHJvcGVydHk6MAorICAgICAgICAgICAgICAgIC8vICAgICBtb3Yg
ICAgICAgICAgICAgICAgZHN0OmxvYzYsIHNyYzpsb2MxMAorICAgICAgICAgICAgICAgIC8vIFRv
CisgICAgICAgICAgICAgICAgLy8gICAgIGdldF9ieV9pZCAgICAgICAgICBkc3Q6bG9jNiwgYmFz
ZTpsb2M5LCBwcm9wZXJ0eTowCisgICAgICAgICAgICAgICAgYXV0byB3cml0YWJsZURpcmVjdEJp
bmRpbmdJZlBvc3NpYmxlID0gWyZdKCkgLT4gUmVnaXN0ZXJJRCogeworICAgICAgICAgICAgICAg
ICAgICAvLyBUaGUgZm9sbG93aW5nIHBhdHRlcm4gaXMgcG9zc2libGUuIEluIHRoYXQgY2FzZSwg
YWZ0ZXIgc2V0dGluZyB8ZGF0YXwgbG9jYWwgdmFyaWFibGUsIHdlIG5lZWQgdG8gc3RvcmUgcHJv
cGVydHkgbmFtZSBpbnRvIHRoZSBzZXQuCisgICAgICAgICAgICAgICAgICAgIC8vIFNvLCBvbGQg
cHJvcGVydHkgbmFtZSB8ZGF0YXwgcmVzdWx0IG11c3QgYmUga2VwdCBiZWZvcmUgc2V0dGluZyBp
dCBpbnRvIHxkYXRhfC4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICh7IFtkYXRhXTogZGF0
YSwgLi4ub2JqIH0gPSBvYmplY3QpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9jb250YWlu
c1Jlc3RFbGVtZW50ICYmIG1fY29udGFpbnNDb21wdXRlZFByb3BlcnR5ICYmIHRhcmdldC5wcm9w
ZXJ0eUV4cHJlc3Npb24pCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBjYW4gaW5jbHVkZSBhIHJlZmVy
ZW5jZSB0byBsb2NhbCB2YXJpYWJsZS4gU28gZmlsbGluZyB2YWx1ZSB0byBhIGxvY2FsIHZhcmlh
YmxlIGNhbiBkaWZmZXIgcmVzdWx0LgorICAgICAgICAgICAgICAgICAgICAvLyBXZSBnaXZlIHVw
IGZhc3QgcGF0aCBpZiBkZWZhdWx0IHZhbHVlIGluY2x1ZGVzIG5vbiBjb25zdGFudC4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsCisgICAgICAgICAgICAgICAgICAgIC8vICAg
ICAoeyBkYXRhID0gZGF0YSB9ID0gb2JqZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRh
cmdldC5kZWZhdWx0VmFsdWUgJiYgIXRhcmdldC5kZWZhdWx0VmFsdWUtPmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGFyZ2V0LnBhdHRlcm4tPndyaXRhYmxlRGlyZWN0QmluZGluZ0lmUG9zc2li
bGUoZ2VuZXJhdG9yKTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgYXV0
byBmaW5pc2hEaXJlY3RCaW5kaW5nQXNzaWdubWVudCA9IFsmXSgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKHdyaXRhYmxlRGlyZWN0QmluZGluZ0lmUG9zc2libGUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHRhcmdldC5wYXR0ZXJuLT5maW5pc2hEaXJlY3RCaW5kaW5nQXNzaWdubWVu
dChnZW5lcmF0b3IpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gdGVtcDsKKyAgICAgICAgICAgICAgICBSZWdpc3RlcklEKiBkaXJlY3RC
aW5kaW5nID0gd3JpdGFibGVEaXJlY3RCaW5kaW5nSWZQb3NzaWJsZSgpOworICAgICAgICAgICAg
ICAgIGlmIChkaXJlY3RCaW5kaW5nKQorICAgICAgICAgICAgICAgICAgICB0ZW1wID0gZGlyZWN0
QmluZGluZzsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRlbXAg
PSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisKKyAgICAgICAgICAgICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcHJvcGVydHlOYW1lOworICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0LnByb3Bl
cnR5RXhwcmVzc2lvbikgeworICAgICAgICAgICAgICAgICAgICBPcHRpb25hbDx1aW50MzJfdD4g
b3B0aW9uYWxJbmRleCA9IHBhcnNlSW5kZXgodGFyZ2V0LnByb3BlcnR5TmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghb3B0aW9uYWxJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0R2V0QnlJZCh0ZW1wLmdldCgpLCByaHMsIHRhcmdldC5wcm9wZXJ0eU5h
bWUpOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eUluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKG51
bGxwdHIsIGpzTnVtYmVyKG9wdGlvbmFsSW5kZXgudmFsdWUoKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbCh0ZW1wLmdldCgpLCByaHMsIHByb3BlcnR5
SW5kZXguZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIG1fY29udGFpbnNDb21w
dXRlZFByb3BlcnR5IGFuZCB0YXJnZXQucHJvcGVydHlFeHByZXNzaW9uIHJlbGF0aW9uc2hpcC4K
KyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9y
UHJvcGVydHkoYXJncy0+YXJndW1lbnRSZWdpc3RlcihpbmRleEluQXJndW1lbnRzKyspLCB0YXJn
ZXQucHJvcGVydHlFeHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRHZXRCeVZhbCh0ZW1wLmdldCgpLCByaHMsIHByb3BlcnR5TmFtZS5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKG1fY29udGFpbnNSZXN0RWxlbWVudCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAobV9jb250YWluc0NvbXB1dGVkUHJvcGVydHkgJiYg
dGFyZ2V0LnByb3BlcnR5RXhwcmVzc2lvbikKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5TmFtZSA9IGdlbmVyYXRvci5lbWl0VG9Qcm9wZXJ0eUtleShnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKHByb3BlcnR5TmFtZS5nZXQoKSksIHByb3BlcnR5TmFtZS5nZXQoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9
IGdlbmVyYXRvci5lbWl0TG9hZChudWxscHRyLCB0YXJnZXQucHJvcGVydHlOYW1lKTsKLQotICAg
ICAgICAgICAgICAgICAgICBDYWxsQXJndW1lbnRzIGFyZ3MoZ2VuZXJhdG9yLCBudWxscHRyLCAx
KTsKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy50aGlzUmVnaXN0ZXIo
KSwgZXhjbHVkZWRMaXN0LmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLm1v
dmUoYXJncy5hcmd1bWVudFJlZ2lzdGVyKDApLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOwotICAgICAg
ICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCBhZGRNZXRob2QuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncywgZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOwotICAgICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBleGNsdWRlZFNldC5hZGQodGFyZ2V0LnBy
b3BlcnR5TmFtZS5pbXBsKCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgZXhjbHVkZWRTZXQuYWRkKHRhcmdldC5wcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh0YXJnZXQuZGVmYXVsdFZhbHVlKQotICAgICAg
ICAgICAgICAgIGFzc2lnbkRlZmF1bHRWYWx1ZUlmVW5kZWZpbmVkKGdlbmVyYXRvciwgdGVtcC5n
ZXQoKSwgdGFyZ2V0LmRlZmF1bHRWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0QmluZGlu
ZykKLSAgICAgICAgICAgICAgICBmaW5pc2hEaXJlY3RCaW5kaW5nQXNzaWdubWVudCgpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRhcmdldC5wYXR0ZXJuLT5iaW5kVmFsdWUo
Z2VuZXJhdG9yLCB0ZW1wLmdldCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFT
U0VSVCh0YXJnZXQuYmluZGluZ1R5cGUgPT0gQmluZGluZ1R5cGU6OlJlc3RFbGVtZW50KTsKLSAg
ICAgICAgICAgIEFTU0VSVChpID09IG1fdGFyZ2V0UGF0dGVybnMuc2l6ZSgpIC0gMSk7Ci0gICAg
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbmV3T2JqZWN0ID0gZ2VuZXJhdG9yLmVtaXROZXdP
YmplY3QoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gbG9hZCBhbmQgY2FsbCBAY29weURhdGFQcm9wZXJ0aWVzCi0gICAgICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gY29weURhdGFQcm9wZXJ0aWVzID0gZ2VuZXJhdG9yLm1vdmVMaW5rVGlt
ZUNvbnN0YW50KG51bGxwdHIsIExpbmtUaW1lQ29uc3RhbnQ6OmNvcHlEYXRhUHJvcGVydGllcyk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIENhbGxBcmd1bWVudHMgYXJncyhnZW5lcmF0b3Is
IG51bGxwdHIsIDMpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGFyZ3MudGhpc1Jl
Z2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJn
cy5hcmd1bWVudFJlZ2lzdGVyKDApLCBuZXdPYmplY3QuZ2V0KCkpOwotICAgICAgICAgICAgZ2Vu
ZXJhdG9yLm1vdmUoYXJncy5hcmd1bWVudFJlZ2lzdGVyKDEpLCByaHMpOwotICAgICAgICAgICAg
aWYgKG1fY29udGFpbnNDb21wdXRlZFByb3BlcnR5KQotICAgICAgICAgICAgICAgIGdlbmVyYXRv
ci5tb3ZlKGFyZ3MuYXJndW1lbnRSZWdpc3RlcigyKSwgZXhjbHVkZWRMaXN0LmdldCgpKTsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNs
dWRlZFNldFJlZyA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCks
IGV4Y2x1ZGVkU2V0KTsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IubW92ZShhcmdzLmFyZ3Vt
ZW50UmVnaXN0ZXIoMiksIGV4Y2x1ZGVkU2V0UmVnLmdldCgpKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAodGFyZ2V0LmRlZmF1bHRWYWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgYXNzaWduRGVmYXVsdFZhbHVlSWZVbmRlZmluZWQoZ2VuZXJhdG9yLCB0ZW1wLmdldCgpLCB0
YXJnZXQuZGVmYXVsdFZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoZGlyZWN0QmluZGluZykK
KyAgICAgICAgICAgICAgICAgICAgZmluaXNoRGlyZWN0QmluZGluZ0Fzc2lnbm1lbnQoKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXR0ZXJuLT5i
aW5kVmFsdWUoZ2VuZXJhdG9yLCB0ZW1wLmdldCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKHRhcmdldC5iaW5kaW5nVHlwZSA9PSBCaW5kaW5nVHlwZTo6
UmVzdEVsZW1lbnQpOworICAgICAgICAgICAgICAgIEFTU0VSVChpID09IG1fdGFyZ2V0UGF0dGVy
bnMuc2l6ZSgpIC0gMSk7CiAKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIGNvcHlEYXRhUHJvcGVydGllcy5nZXQoKSwgTm9FeHBlY3RlZEZ1
bmN0aW9uLCBhcmdzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2Fi
bGVDYWxsOjpObyk7Ci0gICAgICAgICAgICB0YXJnZXQucGF0dGVybi0+YmluZFZhbHVlKGdlbmVy
YXRvciwgbmV3T2JqZWN0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5l
d09iamVjdChuZXdPYmplY3QuZ2V0KCkpOworCisgICAgICAgICAgICAgICAgLy8gbG9hZCBhbmQg
Y2FsbCBAY29weURhdGFQcm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGNvcHlEYXRhUHJvcGVydGllcyA9IGdlbmVyYXRvci5tb3ZlTGlua1RpbWVDb25zdGFudChu
dWxscHRyLCBMaW5rVGltZUNvbnN0YW50Ojpjb3B5RGF0YVByb3BlcnRpZXMpOworCisgICAgICAg
ICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy0+dGhpc1JlZ2lzdGVyKCksIG5ld09iamVjdC5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy0+YXJndW1lbnRSZWdp
c3RlcigwKSwgcmhzKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoYXJncy0+
YXJndW1lbnRSZWdpc3RlcigxKSwgV1RGTW92ZShleGNsdWRlZFNldCkpOworICAgICAgICAgICAg
ICAgIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGNvcHlEYXRh
UHJvcGVydGllcy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBhcmdzLnZhbHVlKCksIGRpdm90
KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKKyAgICAg
ICAgICAgICAgICB0YXJnZXQucGF0dGVybi0+YmluZFZhbHVlKGdlbmVyYXRvciwgbmV3T2JqZWN0
LmdldCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtNTYxNiwxMCAr
NTYxMCw5IEBAIFJlZ2lzdGVySUQqIE9iamVjdFNwcmVhZEV4cHJlc3Npb25Ob2RlOjplbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvCiAgICAgCiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGNvcHlEYXRhUHJvcGVydGllcyA9IGdlbmVyYXRvci5tb3ZlTGlua1RpbWVDb25zdGFu
dChudWxscHRyLCBMaW5rVGltZUNvbnN0YW50Ojpjb3B5RGF0YVByb3BlcnRpZXMpOwogICAgIAot
ICAgIENhbGxBcmd1bWVudHMgYXJncyhnZW5lcmF0b3IsIG51bGxwdHIsIDIpOwotICAgIGdlbmVy
YXRvci5lbWl0TG9hZChhcmdzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICBn
ZW5lcmF0b3IubW92ZShhcmdzLmFyZ3VtZW50UmVnaXN0ZXIoMCksIGRzdCk7Ci0gICAgZ2VuZXJh
dG9yLm1vdmUoYXJncy5hcmd1bWVudFJlZ2lzdGVyKDEpLCBzcmMuZ2V0KCkpOworICAgIENhbGxB
cmd1bWVudHMgYXJncyhnZW5lcmF0b3IsIG51bGxwdHIsIDEpOworICAgIGdlbmVyYXRvci5tb3Zl
KGFyZ3MudGhpc1JlZ2lzdGVyKCksIGRzdCk7CisgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy5hcmd1
bWVudFJlZ2lzdGVyKDApLCBzcmMuZ2V0KCkpOwogICAgIAogICAgIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGNvcHlEYXRhUHJvcGVydGllcy5nZXQoKSwgTm9F
eHBlY3RlZEZ1bmN0aW9uLCBhcmdzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCks
IERlYnVnZ2FibGVDYWxsOjpObyk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWRUeXBlcy5jcHAKaW5kZXggZTMwMjRkODdhODU4NzljYzc5NzcwNDM3NjdlNWYx
N2Y5ZjUzNjc4MS4uZWQyMjkxZjM1Zjc1ZmJiYTYyNjMyOGRkMDBkZTIxNDRhNWQ5YzQ5MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApAQCAtOTYy
LDI1ICs5NjIsNiBAQCBjbGFzcyBDYWNoZWRIYXNoU2V0IDogcHVibGljIENhY2hlZE9iamVjdDxI
YXNoU2V0PFNvdXJjZVR5cGU8VD4sIEhhc2hBcmc+PiB7CiAgICAgQ2FjaGVkVmVjdG9yPFQ+IG1f
ZW50cmllczsKIH07CiAKLWNsYXNzIENhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5IDog
cHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiB7
Ci1wdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29uc3Rh
bnRJZGVudGlmaWVyU2V0RW50cnkmIGVudHJ5KQotICAgIHsKLSAgICAgICAgbV9jb25zdGFudCA9
IGVudHJ5LnNlY29uZDsKLSAgICAgICAgbV9zZXQuZW5jb2RlKGVuY29kZXIsIGVudHJ5LmZpcnN0
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDb25zdGFudElk
ZW50aWZpZXJTZXRFbnRyeSYgZW50cnkpIGNvbnN0Ci0gICAgewotICAgICAgICBlbnRyeS5zZWNv
bmQgPSBtX2NvbnN0YW50OwotICAgICAgICBtX3NldC5kZWNvZGUoZGVjb2RlciwgZW50cnkuZmly
c3QpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX2NvbnN0YW50OwotICAgIENh
Y2hlZEhhc2hTZXQ8Q2FjaGVkUmVmUHRyPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPiwgSWRlbnRp
ZmllclJlcEhhc2g+IG1fc2V0OwotfTsKLQogY2xhc3MgQ2FjaGVkQ29kZUJsb2NrUmFyZURhdGEg
OiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YT4gewogcHVi
bGljOgogICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkQ29k
ZUJsb2NrOjpSYXJlRGF0YSYgcmFyZURhdGEpCkBAIC0xMDIxLDcgKzEwMDIsNyBAQCBjbGFzcyBD
YWNoZWRDb2RlQmxvY2tSYXJlRGF0YSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VW5saW5rZWRDb2Rl
QmxvY2s6OlJhcmVEYXRhPgogICAgIENhY2hlZEhhc2hNYXA8dW5zaWduZWQsIFVubGlua2VkQ29k
ZUJsb2NrOjpSYXJlRGF0YTo6VHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlPiBtX3R5cGVQcm9m
aWxlckluZm9NYXA7CiAgICAgQ2FjaGVkVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+
IG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7CiAgICAgQ2FjaGVkVmVjdG9y
PENhY2hlZEJpdFZlY3Rvcj4gbV9iaXRWZWN0b3JzOwotICAgIENhY2hlZFZlY3RvcjxDYWNoZWRD
b25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOworICAg
IENhY2hlZFZlY3RvcjxDYWNoZWRIYXNoU2V0PENhY2hlZFJlZlB0cjxDYWNoZWRVbmlxdWVkU3Ry
aW5nSW1wbD4sIElkZW50aWZpZXJSZXBIYXNoPj4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOwog
ICAgIHVuc2lnbmVkIG1fbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgOiAxOwogICAgIHVuc2ln
bmVkIG1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgOiAxOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcApp
bmRleCA0MDIxZmM3ZTBhZGFmN2EwYTllMGVmNmNmZDIyNTgzOGI1YmY4NzgzLi4wYjE4NzIxYzIx
OGI1M2YzZDMyY2Q1ODEwMjIxZTM3MjdjM2ZkYWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCkBAIC04
NDAsMjggKzg0MCw0NyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVuY0NvcHlE
YXRhUHJvcGVydGllcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKLSAgICBKU0ZpbmFsT2JqZWN0KiB0YXJnZXQgPSBqc0Nhc3Q8SlNGaW5hbE9iamVjdCo+
KGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIEpTRmluYWxPYmplY3QqIHRh
cmdldCA9IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAg
ICAgQVNTRVJUKHRhcmdldC0+aXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKHZtKSk7CiAKLSAgICBKU1Zh
bHVlIHNvdXJjZVZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAgICBK
U1ZhbHVlIHNvdXJjZVZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAg
ICBpZiAoc291cmNlVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0YXJnZXQpOwogCiAgICAgSlNPYmplY3QqIHNvdXJjZSA9IHNvdXJjZVZhbHVlLnRvT2Jq
ZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKIAotICAg
IEpTU2V0KiBleGNsdWRlZFNldCA9IG51bGxwdHI7Ci0gICAgaWYgKGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpID4gMikKLSAgICAgICAgZXhjbHVkZWRTZXQgPSBqc0Nhc3Q8SlNTZXQqPihjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKKyAgICBVbmxpbmtlZENvZGVCbG9jayogdW5s
aW5rZWRDb2RlQmxvY2sgPSBudWxscHRyOworICAgIGNvbnN0IElkZW50aWZpZXJTZXQqIGV4Y2x1
ZGVkU2V0ID0gbnVsbHB0cjsKKyAgICBPcHRpb25hbDxJZGVudGlmaWVyU2V0PiBuZXdseUNyZWF0
ZWRTZXQ7CisgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpID4gMSkgeworICAgICAg
ICBpbnQzMl90IHNldEluZGV4ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKS5hc0lu
dDMyQXNBbnlJbnQoKTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFt
ZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CisgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNhbGxlckZyYW1lLT5jb2RlT3JpZ2luKCk7CisgICAg
ICAgIGlmIChjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCkpCisgICAg
ICAgICAgICBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOworICAgICAgICBBU1NFUlQoY29k
ZUJsb2NrKTsKKyAgICAgICAgdW5saW5rZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnVubGlua2Vk
Q29kZUJsb2NrKCk7CisgICAgICAgIGV4Y2x1ZGVkU2V0ID0gJnVubGlua2VkQ29kZUJsb2NrLT5j
b25zdGFudElkZW50aWZpZXJTZXRzKClbc2V0SW5kZXhdOworICAgICAgICBpZiAoY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkgPiAyKSB7CisgICAgICAgICAgICBuZXdseUNyZWF0ZWRTZXQuZW1w
bGFjZSgqZXhjbHVkZWRTZXQpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDI7
IGluZGV4IDwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7ICsraW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
aW5kZXgpLnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIG5ld2x5Q3JlYXRl
ZFNldC0+YWRkKHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZXhjbHVkZWRTZXQgPSAmbmV3bHlDcmVhdGVkU2V0LnZhbHVlKCk7CisgICAgICAgIH0KKyAg
ICB9CiAKLSAgICBhdXRvIGlzUHJvcGVydHlOYW1lRXhjbHVkZWQgPSBbJl0gKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIC0+IGJvb2wgewor
ICAgIGF1dG8gaXNQcm9wZXJ0eU5hbWVFeGNsdWRlZCA9IFsmXSAoUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSkgLT4gYm9vbCB7CiAgICAgICAgIEFTU0VSVCghcHJvcGVydHlOYW1lLmlzUHJpdmF0
ZU5hbWUoKSk7CiAgICAgICAgIGlmICghZXhjbHVkZWRTZXQpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgSlNWYWx1ZSBwcm9wZXJ0eU5hbWVWYWx1ZSA9IGlkZW50aWZpZXJU
b0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkp
OwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgIHJl
dHVybiBleGNsdWRlZFNldC0+aGFzKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lVmFsdWUpOwor
ICAgICAgICByZXR1cm4gZXhjbHVkZWRTZXQtPmNvbnRhaW5zKHByb3BlcnR5TmFtZS51aWQoKSk7
CiAgICAgfTsKIAogICAgIGlmICghc291cmNlLT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCh2bSkp
IHsKQEAgLTg5OCw4ICs5MTcsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVu
Y0NvcHlEYXRhUHJvcGVydGllcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBwdXQgcHJvcGVydGllcyBpbiBhIGJhdGNoaW5nIG1hbm5l
ciB0byBhY2NlbGVyYXRlIENvcHlEYXRhUHJvcGVydGllcyBtb3JlLgogICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTM1OAotICAgICAgICAg
ICAgYm9vbCBleGNsdWRlZCA9IGlzUHJvcGVydHlOYW1lRXhjbHVkZWQoZ2xvYmFsT2JqZWN0LCBw
cm9wZXJ0aWVzW2ldLmdldCgpKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CisgICAgICAgICAgICBib29sIGV4Y2x1ZGVkID0gaXNQcm9wZXJ0eU5hbWVFeGNs
dWRlZChwcm9wZXJ0aWVzW2ldLmdldCgpKTsKICAgICAgICAgICAgIGlmIChleGNsdWRlZCkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHRhcmdldC0+cHV0RGlyZWN0KHZt
LCBwcm9wZXJ0aWVzW2ldLmdldCgpLCB2YWx1ZXMuYXQoaSkpOwpAQCAtOTEwLDggKzkyOCw3IEBA
IEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihnbG9iYWxGdW5jQ29weURhdGFQcm9wZXJ0aWVzLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwcm9wZXJ0eU5hbWUgOiBwcm9w
ZXJ0eU5hbWVzKSB7Ci0gICAgICAgICAgICBib29sIGV4Y2x1ZGVkID0gaXNQcm9wZXJ0eU5hbWVF
eGNsdWRlZChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgYm9vbCBleGNsdWRlZCA9IGlz
UHJvcGVydHlOYW1lRXhjbHVkZWQocHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIGlmIChleGNs
dWRlZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtOTM1LDcgKzk1Miw4IEBAIEpT
Q19ERUZJTkVfSE9TVF9GVU5DVElPTihnbG9iYWxGdW5jQ29weURhdGFQcm9wZXJ0aWVzLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKHVu
bGlua2VkQ29kZUJsb2NrKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRhcmdldCk7CiB9
CiAKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihnbG9iYWxGdW5jRGF0ZVRpbWVGb3JtYXQsIChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCmRpZmYg
LS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDQ0MWZm
MTQyNzUzMzk1ODdkMTQwMWYyMTg5MDQzZjdmM2EzYTliZjcuLmE1YzU1ZDZiOTM0ZWEwMzc1YjJj
OWY1NTAzMjA0MTIyOTg1Yjc0NWUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjEtMDItMTAgIFl1c3VrZSBT
dXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBTaW1wbGlmeSBleGNs
dWRlZFNldCBoYW5kbGluZyBpbiBvYmplY3QgcmVzdCBleHByZXNzaW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE2NjgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9vYmpl
Y3QtcmVzdC1jb21wdXRlZC1kZXN0cnVjdHVyaW5nLmpzOiBBZGRlZC4KKwogMjAyMS0wMi0wOSAg
WXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEMrKyBp
dGVyYXRpb24gc2hvdWxkIHN1cHBvcnQgZmFzdCBpdGVyYXRvciBwcm90b2NvbApkaWZmIC0tZ2l0
IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvb2JqZWN0LXJlc3QtY29tcHV0ZWQtZGVzdHJ1Y3R1
cmluZy5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVjdC1yZXN0LWNvbXB1dGVkLWRl
c3RydWN0dXJpbmcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjM0OWQ5M2Q3MmMzNmNlMTY0ZGZiZTAyOTQ4YjNm
ODMzYWFlMWNkMAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL29i
amVjdC1yZXN0LWNvbXB1dGVkLWRlc3RydWN0dXJpbmcuanMKQEAgLTAsMCArMSwxMiBAQAorKGZ1
bmN0aW9uKGtleTEsIGtleTIsIGtleTMpIHsKKyAgICB2YXIgb2JqID0geyBhOiAwLCBiOiAwLCBj
OiAwLCBkOiAxLCBlOiAwLCBmOiAwLCBnOiAwLCBoOiAwLCBpOiAwLCBqOiAwIH07CisgICAgdmFy
IGFjYyA9IDA7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgaSsrKSB7CisgICAgICAg
IHZhciB7IFtrZXkxXTogYSwgW2tleTJdOiBiLCBba2V5M106IGMsIC4uLnJlc3QgfSA9IG9iajsK
KyAgICAgICAgYWNjICs9IHJlc3QuZDsKKyAgICB9CisKKyAgICBpZiAoYWNjICE9PSAxZTUpCisg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiEiKTsKK30pKCdhJywgJ2InLCAn
YycpOwo=
</data>
<flag name="commit-queue"
          id="438182"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419833</attachid>
            <date>2021-02-10 02:57:27 -0800</date>
            <delta_ts>2021-02-10 03:12:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221668-20210210025726.patch</filename>
            <type>text/plain</type>
            <size>31534</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNjM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
MTM0YTFmMmZmMGY5ZDM5MDU5YmZmNDA2ZjNlMjJlZDNlZDEwMTk0Li41MDJiZjIyNTBlOTgyNzhl
YWVlZmJkMzAwMTFlNjg0NDFhMmE0OWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAyMS0wMi0xMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFNpbXBsaWZ5IGV4Y2x1ZGVkU2V0IGhhbmRsaW5nIGluIG9iamVj
dCByZXN0IGV4cHJlc3Npb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMTY2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3Rh
bnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRJZGVudGlmaWVyU2V0cyk6Cisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmNvbnN0YW50SWRlbnRpZmllclNldHMp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRkU2V0Q29uc3Rh
bnQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6Ok9iamVjdFBhdHRlcm5Ob2RlOjpiaW5kVmFsdWUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpPYmplY3RTcHJlYWRFeHByZXNzaW9uTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk6OmVuY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5OjpkZWNvZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorCiAyMDIxLTAy
LTA5ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10g
QysrIGl0ZXJhdGlvbiBzaG91bGQgc3VwcG9ydCBmYXN0IGl0ZXJhdG9yIHByb3RvY29sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDA2MmRmYWMy
ZTQ5ZWYwOWU4Y2E5YmQ4Yzk2ZDZjNTRiNjZiMGUyN2IuLjVlYTBjYWU4YjVmODBmNDdhOTk0M2I5
YmM5ODMyZmE1M2I5NDJiMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCkBAIC00MjIsOSArNDIyLDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsK
ICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPmhhc1JhcmVEYXRhKCkpIHsKICAgICAgICAgY3Jl
YXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwogCi0gICAgICAgIHNldENvbnN0YW50SWRlbnRpZmll
clNldFJlZ2lzdGVycyh2bSwgdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50SWRlbnRpZmllclNl
dHMoKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwot
CiAgICAgICAgIGlmIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZF
eGNlcHRpb25IYW5kbGVycygpKSB7CiAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykgewpAQCAtODkwLDI4ICs4ODcsNiBAQCBDb2RlQmxvY2s6On5D
b2RlQmxvY2soKQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpz
ZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mIHZtLCBjb25zdCBSZWZDb3VudGVk
QXJyYXk8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpCi17Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKLQotICAgIGZvciAoY29uc3QgYXV0
byYgZW50cnkgOiBjb25zdGFudHMpIHsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllclNldCYgc2V0
ID0gZW50cnkuZmlyc3Q7Ci0KLSAgICAgICAgU3RydWN0dXJlKiBzZXRTdHJ1Y3R1cmUgPSBnbG9i
YWxPYmplY3QtPnNldFN0cnVjdHVyZSgpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwotICAgICAgICBKU1NldCoganNTZXQgPSBKU1NldDo6Y3JlYXRlKGdsb2Jh
bE9iamVjdCwgdm0sIHNldFN0cnVjdHVyZSwgc2V0LnNpemUoKSk7Ci0gICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0KLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBz
ZXRFbnRyeSA6IHNldCkgewotICAgICAgICAgICAgSlNTdHJpbmcqIGpzU3RyaW5nID0ganNPd25l
ZFN0cmluZyh2bSwgc2V0RW50cnkuZ2V0KCkpOyAKLSAgICAgICAgICAgIGpzU2V0LT5hZGQoZ2xv
YmFsT2JqZWN0LCBqc1N0cmluZyk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwotICAgICAgICB9Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbZW50
cnkuc2Vjb25kXS5zZXQodm0sIHRoaXMsIGpzU2V0KTsKLSAgICB9Ci19Ci0KIHZvaWQgQ29kZUJs
b2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJy
aWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTY3Jp
cHRFeGVjdXRhYmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggZGZjZTdl
NGYzMDVlMGRjY2Q5Y2YxMTQxODg4MjFjMDMzMTdjMjNkYi4uMDI2OGZjYWY2Y2ZlMzQ0NTQ5NjQ3
ZjExMmU4YmMxNDE4MDY3NDc2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaApAQCAtOTUzLDggKzk1Myw2IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBK
U0NlbGwgewogCiAgICAgdm9pZCB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENv
dW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxl
cywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpOwogCi0gICAgdm9pZCBzZXRD
b25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8
Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpOwotCiAgICAgdm9pZCBzZXRD
b25zdGFudFJlZ2lzdGVycyhjb25zdCBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPFVua25v
d24+PiYgY29uc3RhbnRzLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTY3JpcHRFeGVjdXRh
YmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpOwogCiAgICAgdm9pZCByZXBsYWNlQ29uc3RhbnQoVmly
dHVhbFJlZ2lzdGVyIHJlZywgSlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggMWY1MWVjZTVkNmY4NmQ3
MDk1MTFiNGE0YzE4MmM2NGNiZmExODNiZi4uOWFjZGI0YzVmMjU5ZTI2Yjc4MDllNGE0MWM4ZTFj
ZTNiZDNlZDVhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgKQEAgLTc0LDcgKzc0LDYgQEAgdHlwZWRlZiB1bnNpZ25lZCBVbmxp
bmtlZEFycmF5UHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRBcnJheUFsbG9jYXRp
b25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZE9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZExMSW50Q2FsbExpbmtJbmZvOwotdXNpbmcg
Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnkgPSBzdGQ6OnBhaXI8SWRlbnRpZmllclNldCwgdW5z
aWduZWQ+OwogCiBzdHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUgewogICAgIHN0cnVjdCBP
ZmZzZXRMb2NhdGlvbiB7CkBAIC0xNjIsNyArMTYxLDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxv
Y2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyBy
ZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIAogICAgIHVuc2ln
bmVkIG51bWJlck9mQ29uc3RhbnRJZGVudGlmaWVyU2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmFy
ZURhdGEgPyBtX3JhcmVEYXRhLT5tX2NvbnN0YW50SWRlbnRpZmllclNldHMuc2l6ZSgpIDogMDsg
fQotICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4m
IGNvbnN0YW50SWRlbnRpZmllclNldHMoKSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1f
cmFyZURhdGEtPm1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsgfQorICAgIGNvbnN0IFJlZkNvdW50
ZWRBcnJheTxJZGVudGlmaWVyU2V0PiYgY29uc3RhbnRJZGVudGlmaWVyU2V0cygpIHsgQVNTRVJU
KG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRz
OyB9CiAKICAgICAvLyBKdW1wcwogICAgIHNpemVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29u
c3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5zaXplKCk7IH0KQEAgLTQxMSw3ICs0MTAsNyBAQCBj
bGFzcyBVbmxpbmtlZENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICBIYXNoTWFw
PHVuc2lnbmVkLCBUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+IG1fdHlwZVByb2ZpbGVySW5m
b01hcDsKICAgICAgICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+
IG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7CiAgICAgICAgIFJlZkNvdW50
ZWRBcnJheTxCaXRWZWN0b3I+IG1fYml0VmVjdG9yczsKLSAgICAgICAgUmVmQ291bnRlZEFycmF5
PENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7Cisg
ICAgICAgIFJlZkNvdW50ZWRBcnJheTxJZGVudGlmaWVyU2V0PiBtX2NvbnN0YW50SWRlbnRpZmll
clNldHM7CiAKICAgICAgICAgdW5zaWduZWQgbV9uZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciA6
IDE7CiAgICAgICAgIHVuc2lnbmVkIG1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgOiAxOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3IuaAppbmRleCA5NGM2ODcwZTk5NGMyYmY1Yzk4MmNlOTUyZTRjNTM0YmRj
OTZiNDg4Li40ODM4MDUxYzg4OTk4YmMxNWFlMmMzYmQ0NWZmN2JmMWI4ZTJlYjIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3IuaApAQCAtMTExLDE0ICsxMTEsMTMgQEAgY2xhc3MgVW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3IgewogICAgIH0KIAogICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRJ
ZGVudGlmaWVyU2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0cy5z
aXplKCk7IH0KLSAgICBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBj
b25zdGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1cm4gbV9jb25zdGFudElkZW50aWZpZXJTZXRz
OyB9Ci0gICAgdm9pZCBhZGRTZXRDb25zdGFudChJZGVudGlmaWVyU2V0JiBzZXQpCisgICAgY29u
c3QgVmVjdG9yPElkZW50aWZpZXJTZXQ+JiBjb25zdGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1
cm4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOyB9CisgICAgdW5zaWduZWQgYWRkU2V0Q29uc3Rh
bnQoSWRlbnRpZmllclNldCYmIHNldCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3ZtLmhlYXAu
aXNEZWZlcnJlZCgpKTsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lz
dGVycy5zaXplKCk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFy
cmllcjxVbmtub3duPigpKTsKLSAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwotICAgICAgICBt
X2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5kKENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5
KHNldCwgcmVzdWx0KSk7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRJZGVu
dGlmaWVyU2V0cy5zaXplKCk7CisgICAgICAgIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0cy5hcHBl
bmQoV1RGTW92ZShzZXQpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBj
b25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFu
dEluZGV4KCldOyB9CkBAIC0yMTAsNyArMjA5LDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tH
ZW5lcmF0b3IgewogICAgIEhhc2hNYXA8dW5zaWduZWQsIFVubGlua2VkQ29kZUJsb2NrOjpSYXJl
RGF0YTo6VHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlPiBtX3R5cGVQcm9maWxlckluZm9NYXA7
CiAgICAgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IG1fb3BQcm9maWxlQ29udHJv
bEZsb3dCeXRlY29kZU9mZnNldHM7CiAgICAgVmVjdG9yPEJpdFZlY3Rvcj4gbV9iaXRWZWN0b3Jz
OwotICAgIFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50
aWZpZXJTZXRzOworICAgIFZlY3RvcjxJZGVudGlmaWVyU2V0PiBtX2NvbnN0YW50SWRlbnRpZmll
clNldHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggNGU1
NzE5ZWY4MjU4ZjNiMjlmZTYwZDc2ZGIyMDJkMmY5YjI4YTU3ZS4uZTQzYzRjZDc0YzczNmQ2NGY2
NzU1OTczN2MwNDEyZTRkNGM2MDMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTE4NDAsMjUgKzE4
NDAsMTAgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVy
SUQqIGRzdCwgSlNWYWx1ZSB2LCBTb3VyY2VDb2RlUmUKICAgICByZXR1cm4gY29uc3RhbnRJRDsK
IH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQq
IGRzdCwgSWRlbnRpZmllclNldCYgc2V0KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSWRlbnRpZmllclNldCYmIHNldCkKIHsKLSAgICBp
ZiAobV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRJZGVudGlmaWVyU2V0cygpKSB7Ci0gICAg
ICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX2NvZGVCbG9jay0+Y29uc3RhbnRJZGVudGlm
aWVyU2V0cygpKSB7Ci0gICAgICAgICAgICBpZiAoZW50cnkuZmlyc3QgIT0gc2V0KQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gJm1f
Y29uc3RhbnRQb29sUmVnaXN0ZXJzW2VudHJ5LnNlY29uZF07Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgdW5zaWduZWQgaW5kZXggPSBhZGRDb25zdGFudEluZGV4KCk7Ci0gICAgbV9jb2Rl
QmxvY2stPmFkZFNldENvbnN0YW50KHNldCk7Ci0gICAgUmVnaXN0ZXJJRCogbV9zZXRSZWdpc3Rl
ciA9ICZtX2NvbnN0YW50UG9vbFJlZ2lzdGVyc1tpbmRleF07Ci0gICAgCi0gICAgaWYgKGRzdCkK
LSAgICAgICAgcmV0dXJuIG1vdmUoZHN0LCBtX3NldFJlZ2lzdGVyKTsKLSAgICAKLSAgICByZXR1
cm4gbV9zZXRSZWdpc3RlcjsKKyAgICB1bnNpZ25lZCBzZXRJbmRleCA9IG1fY29kZUJsb2NrLT5h
ZGRTZXRDb25zdGFudChXVEZNb3ZlKHNldCkpOworICAgIHJldHVybiBlbWl0TG9hZChkc3QsIGpz
TnVtYmVyKHNldEluZGV4KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExvb2tVcFZhcktpbmRG
dW5jdG9yPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCmluZGV4IGJiZmI1NjgxOThmNDQ0NTU3ZGEzMTMzYzI5NjYzY2Q0
MjAxZTdiZTUuLmJkOGQ3YTVkMTBiYWQ0YTg0MjhhNGZiNzVkNzA3MDgwYWEzYTA5MDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKQEAgLTcwNSw3ICs3MDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29sKTsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSlNWYWx1ZSwgU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSWRlbnRpZmllclNl
dCYgZXhjbHVkZWRMaXN0KTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJ
RCogZHN0LCBJZGVudGlmaWVyU2V0JiYgZXhjbHVkZWRMaXN0KTsKIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVbmFyeU9wLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8VW5hcnlPcDo6
b3Bjb2RlSUQgIT0gb3BfbmVnYXRlPj4KICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFVuYXJ5T3Ao
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggNGMwOGEzM2QzZjg3
YmI0MmJlM2Y4ZjZjZGJhNWZhMDM3MDA3OGU1Zi4uNTMxY2E1MWYyYTliMWZlOWNmNDYwOWU2NTRh
MDZhYzVmMTZmMDNlMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtNTI5OSwxMTMgKzUyOTksMTA3IEBAIHZvaWQgT2Jq
ZWN0UGF0dGVybk5vZGU6OmJpbmRWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiByaHMpCiB7CiAgICAgZ2VuZXJhdG9yLmVtaXRSZXF1aXJlT2JqZWN0Q29lcmNp
YmxlKHJocywgIlJpZ2h0IHNpZGUgb2YgYXNzaWdubWVudCBjYW5ub3QgYmUgZGVzdHJ1Y3R1cmVk
Il9zKTsKIAotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNsdWRlZExpc3Q7Ci0gICAgSWRlbnRp
ZmllclNldCBleGNsdWRlZFNldDsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYWRkTWV0aG9kOwot
ICAgIGlmIChtX2NvbnRhaW5zUmVzdEVsZW1lbnQgJiYgbV9jb250YWluc0NvbXB1dGVkUHJvcGVy
dHkpIHsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNldENvbnN0cnVjdG9yID0gZ2VuZXJh
dG9yLm1vdmVMaW5rVGltZUNvbnN0YW50KG51bGxwdHIsIExpbmtUaW1lQ29uc3RhbnQ6OlNldCk7
Ci0KLSAgICAgICAgQ2FsbEFyZ3VtZW50cyBhcmdzKGdlbmVyYXRvciwgbnVsbHB0ciwgMCk7Ci0g
ICAgICAgIGV4Y2x1ZGVkTGlzdCA9IGdlbmVyYXRvci5lbWl0Q29uc3RydWN0KGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKSwgc2V0Q29uc3RydWN0b3IuZ2V0KCksIHNldENvbnN0cnVjdG9yLmdldCgp
LCBOb0V4cGVjdGVkRnVuY3Rpb24sIGFyZ3MsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSk7Ci0KLSAgICAgICAgYWRkTWV0aG9kID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgZXhjbHVkZWRMaXN0LmdldCgpLCBnZW5lcmF0b3IucHJvcGVy
dHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmFkZFByaXZhdGVOYW1lKCkpOwotICAgIH0KLQogICAg
IEJ5dGVjb2RlR2VuZXJhdG9yOjpQcmVzZXJ2ZWRURFpTdGFjayBwcmVzZXJ2ZWRURFpTdGFjazsK
ICAgICBnZW5lcmF0b3IucHJlc2VydmVURFpTdGFjayhwcmVzZXJ2ZWRURFpTdGFjayk7CiAKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGFyZ2V0UGF0dGVybnMuc2l6ZSgpOyBpKyspIHsK
LSAgICAgICAgY29uc3QgYXV0byYgdGFyZ2V0ID0gbV90YXJnZXRQYXR0ZXJuc1tpXTsKLSAgICAg
ICAgaWYgKHRhcmdldC5iaW5kaW5nVHlwZSA9PSBCaW5kaW5nVHlwZTo6RWxlbWVudCkgewotICAg
ICAgICAgICAgLy8gSWYgdGhlIGRlc3RydWN0dXJpbmcgYmVjb21lcyBnZXRfYnlfaWQgYW5kIG1v
diwgdGhlbiB3ZSBzaG91bGQgc3RvcmUgcmVzdWx0cyBkaXJlY3RseSB0byB0aGUgbG9jYWwncyBi
aW5kaW5nLgotICAgICAgICAgICAgLy8gRnJvbQotICAgICAgICAgICAgLy8gICAgIGdldF9ieV9p
ZCAgICAgICAgICBkc3Q6bG9jMTAsIGJhc2U6bG9jOSwgcHJvcGVydHk6MAotICAgICAgICAgICAg
Ly8gICAgIG1vdiAgICAgICAgICAgICAgICBkc3Q6bG9jNiwgc3JjOmxvYzEwCi0gICAgICAgICAg
ICAvLyBUbwotICAgICAgICAgICAgLy8gICAgIGdldF9ieV9pZCAgICAgICAgICBkc3Q6bG9jNiwg
YmFzZTpsb2M5LCBwcm9wZXJ0eTowCi0gICAgICAgICAgICBhdXRvIHdyaXRhYmxlRGlyZWN0Qmlu
ZGluZ0lmUG9zc2libGUgPSBbJl0oKSAtPiBSZWdpc3RlcklEKiB7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhlIGZvbGxvd2luZyBwYXR0ZXJuIGlzIHBvc3NpYmxlLiBJbiB0aGF0IGNhc2UsIGFmdGVy
IHNldHRpbmcgfGRhdGF8IGxvY2FsIHZhcmlhYmxlLCB3ZSBuZWVkIHRvIHN0b3JlIHByb3BlcnR5
IG5hbWUgaW50byB0aGUgc2V0LgotICAgICAgICAgICAgICAgIC8vIFNvLCBvbGQgcHJvcGVydHkg
bmFtZSB8ZGF0YXwgcmVzdWx0IG11c3QgYmUga2VwdCBiZWZvcmUgc2V0dGluZyBpdCBpbnRvIHxk
YXRhfC4KLSAgICAgICAgICAgICAgICAvLyAgICAgKHsgW2RhdGFdOiBkYXRhLCAuLi5vYmogfSA9
IG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29udGFpbnNSZXN0RWxlbWVudCAmJiBt
X2NvbnRhaW5zQ29tcHV0ZWRQcm9wZXJ0eSAmJiB0YXJnZXQucHJvcGVydHlFeHByZXNzaW9uKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAvLyBk
ZWZhdWx0IHZhbHVlIGNhbiBpbmNsdWRlIGEgcmVmZXJlbmNlIHRvIGxvY2FsIHZhcmlhYmxlLiBT
byBmaWxsaW5nIHZhbHVlIHRvIGEgbG9jYWwgdmFyaWFibGUgY2FuIGRpZmZlciByZXN1bHQuCi0g
ICAgICAgICAgICAgICAgLy8gV2UgZ2l2ZSB1cCBmYXN0IHBhdGggaWYgZGVmYXVsdCB2YWx1ZSBp
bmNsdWRlcyBub24gY29uc3RhbnQuCi0gICAgICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsCi0g
ICAgICAgICAgICAgICAgLy8gICAgICh7IGRhdGEgPSBkYXRhIH0gPSBvYmplY3QpOwotICAgICAg
ICAgICAgICAgIGlmICh0YXJnZXQuZGVmYXVsdFZhbHVlICYmICF0YXJnZXQuZGVmYXVsdFZhbHVl
LT5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgICAgIHJldHVybiB0YXJnZXQucGF0dGVybi0+d3JpdGFibGVEaXJlY3RCaW5kaW5n
SWZQb3NzaWJsZShnZW5lcmF0b3IpOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgYXV0
byBmaW5pc2hEaXJlY3RCaW5kaW5nQXNzaWdubWVudCA9IFsmXSgpIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQod3JpdGFibGVEaXJlY3RCaW5kaW5nSWZQb3NzaWJsZSgpKTsKLSAgICAgICAgICAg
ICAgICB0YXJnZXQucGF0dGVybi0+ZmluaXNoRGlyZWN0QmluZGluZ0Fzc2lnbm1lbnQoZ2VuZXJh
dG9yKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0
ZW1wOwotICAgICAgICAgICAgUmVnaXN0ZXJJRCogZGlyZWN0QmluZGluZyA9IHdyaXRhYmxlRGly
ZWN0QmluZGluZ0lmUG9zc2libGUoKTsKLSAgICAgICAgICAgIGlmIChkaXJlY3RCaW5kaW5nKQot
ICAgICAgICAgICAgICAgIHRlbXAgPSBkaXJlY3RCaW5kaW5nOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHRlbXAgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0KLSAgICAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWU7Ci0gICAgICAgICAgICBpZiAo
IXRhcmdldC5wcm9wZXJ0eUV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgICAgICBPcHRpb25hbDx1
aW50MzJfdD4gb3B0aW9uYWxJbmRleCA9IHBhcnNlSW5kZXgodGFyZ2V0LnByb3BlcnR5TmFtZSk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25hbEluZGV4KQotICAgICAgICAgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQodGVtcC5nZXQoKSwgcmhzLCB0YXJnZXQucHJvcGVydHlO
YW1lKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHByb3BlcnR5SW5kZXggPSBnZW5lcmF0b3IuZW1pdExvYWQobnVsbHB0ciwg
anNOdW1iZXIob3B0aW9uYWxJbmRleC52YWx1ZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0R2V0QnlWYWwodGVtcC5nZXQoKSwgcmhzLCBwcm9wZXJ0eUluZGV4LmdldCgp
KTsKKyAgICB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBuZXdPYmplY3Q7CisgICAgICAg
IElkZW50aWZpZXJTZXQgZXhjbHVkZWRTZXQ7CisgICAgICAgIE9wdGlvbmFsPENhbGxBcmd1bWVu
dHM+IGFyZ3M7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ29tcHV0ZWRQcm9wZXJ0aWVzID0g
MDsKKyAgICAgICAgdW5zaWduZWQgaW5kZXhJbkFyZ3VtZW50cyA9IDI7CisgICAgICAgIGlmICht
X2NvbnRhaW5zUmVzdEVsZW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChtX2NvbnRhaW5zQ29tcHV0
ZWRQcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDog
bV90YXJnZXRQYXR0ZXJucykgeworICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmJpbmRp
bmdUeXBlID09IEJpbmRpbmdUeXBlOjpFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodGFyZ2V0LnByb3BlcnR5RXhwcmVzc2lvbikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICArK251bWJlck9mQ29tcHV0ZWRQcm9wZXJ0aWVzOworICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JQcm9wZXJ0eSh0YXJnZXQucHJv
cGVydHlFeHByZXNzaW9uKTsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5VmFs
KHRlbXAuZ2V0KCksIHJocywgcHJvcGVydHlOYW1lLmdldCgpKTsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG5ld09iamVjdCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAg
ICAgIGFyZ3MuZW1wbGFjZShnZW5lcmF0b3IsIG51bGxwdHIsIGluZGV4SW5Bcmd1bWVudHMgKyBu
dW1iZXJPZkNvbXB1dGVkUHJvcGVydGllcyk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KG1fY29udGFpbnNSZXN0RWxlbWVudCkgewotICAgICAgICAgICAgICAgIGlmIChtX2NvbnRhaW5z
Q29tcHV0ZWRQcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LnByb3Bl
cnR5RXhwcmVzc2lvbikKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RhcmdldFBh
dHRlcm5zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiB0YXJnZXQgPSBt
X3RhcmdldFBhdHRlcm5zW2ldOworICAgICAgICAgICAgaWYgKHRhcmdldC5iaW5kaW5nVHlwZSA9
PSBCaW5kaW5nVHlwZTo6RWxlbWVudCkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBkZXN0
cnVjdHVyaW5nIGJlY29tZXMgZ2V0X2J5X2lkIGFuZCBtb3YsIHRoZW4gd2Ugc2hvdWxkIHN0b3Jl
IHJlc3VsdHMgZGlyZWN0bHkgdG8gdGhlIGxvY2FsJ3MgYmluZGluZy4KKyAgICAgICAgICAgICAg
ICAvLyBGcm9tCisgICAgICAgICAgICAgICAgLy8gICAgIGdldF9ieV9pZCAgICAgICAgICBkc3Q6
bG9jMTAsIGJhc2U6bG9jOSwgcHJvcGVydHk6MAorICAgICAgICAgICAgICAgIC8vICAgICBtb3Yg
ICAgICAgICAgICAgICAgZHN0OmxvYzYsIHNyYzpsb2MxMAorICAgICAgICAgICAgICAgIC8vIFRv
CisgICAgICAgICAgICAgICAgLy8gICAgIGdldF9ieV9pZCAgICAgICAgICBkc3Q6bG9jNiwgYmFz
ZTpsb2M5LCBwcm9wZXJ0eTowCisgICAgICAgICAgICAgICAgYXV0byB3cml0YWJsZURpcmVjdEJp
bmRpbmdJZlBvc3NpYmxlID0gWyZdKCkgLT4gUmVnaXN0ZXJJRCogeworICAgICAgICAgICAgICAg
ICAgICAvLyBUaGUgZm9sbG93aW5nIHBhdHRlcm4gaXMgcG9zc2libGUuIEluIHRoYXQgY2FzZSwg
YWZ0ZXIgc2V0dGluZyB8ZGF0YXwgbG9jYWwgdmFyaWFibGUsIHdlIG5lZWQgdG8gc3RvcmUgcHJv
cGVydHkgbmFtZSBpbnRvIHRoZSBzZXQuCisgICAgICAgICAgICAgICAgICAgIC8vIFNvLCBvbGQg
cHJvcGVydHkgbmFtZSB8ZGF0YXwgcmVzdWx0IG11c3QgYmUga2VwdCBiZWZvcmUgc2V0dGluZyBp
dCBpbnRvIHxkYXRhfC4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICh7IFtkYXRhXTogZGF0
YSwgLi4ub2JqIH0gPSBvYmplY3QpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9jb250YWlu
c1Jlc3RFbGVtZW50ICYmIG1fY29udGFpbnNDb21wdXRlZFByb3BlcnR5ICYmIHRhcmdldC5wcm9w
ZXJ0eUV4cHJlc3Npb24pCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBjYW4gaW5jbHVkZSBhIHJlZmVy
ZW5jZSB0byBsb2NhbCB2YXJpYWJsZS4gU28gZmlsbGluZyB2YWx1ZSB0byBhIGxvY2FsIHZhcmlh
YmxlIGNhbiBkaWZmZXIgcmVzdWx0LgorICAgICAgICAgICAgICAgICAgICAvLyBXZSBnaXZlIHVw
IGZhc3QgcGF0aCBpZiBkZWZhdWx0IHZhbHVlIGluY2x1ZGVzIG5vbiBjb25zdGFudC4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsCisgICAgICAgICAgICAgICAgICAgIC8vICAg
ICAoeyBkYXRhID0gZGF0YSB9ID0gb2JqZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRh
cmdldC5kZWZhdWx0VmFsdWUgJiYgIXRhcmdldC5kZWZhdWx0VmFsdWUtPmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGFyZ2V0LnBhdHRlcm4tPndyaXRhYmxlRGlyZWN0QmluZGluZ0lmUG9zc2li
bGUoZ2VuZXJhdG9yKTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgYXV0
byBmaW5pc2hEaXJlY3RCaW5kaW5nQXNzaWdubWVudCA9IFsmXSgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKHdyaXRhYmxlRGlyZWN0QmluZGluZ0lmUG9zc2libGUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHRhcmdldC5wYXR0ZXJuLT5maW5pc2hEaXJlY3RCaW5kaW5nQXNzaWdubWVu
dChnZW5lcmF0b3IpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gdGVtcDsKKyAgICAgICAgICAgICAgICBSZWdpc3RlcklEKiBkaXJlY3RC
aW5kaW5nID0gd3JpdGFibGVEaXJlY3RCaW5kaW5nSWZQb3NzaWJsZSgpOworICAgICAgICAgICAg
ICAgIGlmIChkaXJlY3RCaW5kaW5nKQorICAgICAgICAgICAgICAgICAgICB0ZW1wID0gZGlyZWN0
QmluZGluZzsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRlbXAg
PSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisKKyAgICAgICAgICAgICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcHJvcGVydHlOYW1lOworICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0LnByb3Bl
cnR5RXhwcmVzc2lvbikgeworICAgICAgICAgICAgICAgICAgICBPcHRpb25hbDx1aW50MzJfdD4g
b3B0aW9uYWxJbmRleCA9IHBhcnNlSW5kZXgodGFyZ2V0LnByb3BlcnR5TmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghb3B0aW9uYWxJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0R2V0QnlJZCh0ZW1wLmdldCgpLCByaHMsIHRhcmdldC5wcm9wZXJ0eU5h
bWUpOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eUluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKG51
bGxwdHIsIGpzTnVtYmVyKG9wdGlvbmFsSW5kZXgudmFsdWUoKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbCh0ZW1wLmdldCgpLCByaHMsIHByb3BlcnR5
SW5kZXguZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIG1fY29udGFpbnNDb21w
dXRlZFByb3BlcnR5IGFuZCB0YXJnZXQucHJvcGVydHlFeHByZXNzaW9uIHJlbGF0aW9uc2hpcC4K
KyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9y
UHJvcGVydHkoYXJncy0+YXJndW1lbnRSZWdpc3RlcihpbmRleEluQXJndW1lbnRzKyspLCB0YXJn
ZXQucHJvcGVydHlFeHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRHZXRCeVZhbCh0ZW1wLmdldCgpLCByaHMsIHByb3BlcnR5TmFtZS5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKG1fY29udGFpbnNSZXN0RWxlbWVudCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAobV9jb250YWluc0NvbXB1dGVkUHJvcGVydHkgJiYg
dGFyZ2V0LnByb3BlcnR5RXhwcmVzc2lvbikKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5TmFtZSA9IGdlbmVyYXRvci5lbWl0VG9Qcm9wZXJ0eUtleShnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKHByb3BlcnR5TmFtZS5nZXQoKSksIHByb3BlcnR5TmFtZS5nZXQoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9
IGdlbmVyYXRvci5lbWl0TG9hZChudWxscHRyLCB0YXJnZXQucHJvcGVydHlOYW1lKTsKLQotICAg
ICAgICAgICAgICAgICAgICBDYWxsQXJndW1lbnRzIGFyZ3MoZ2VuZXJhdG9yLCBudWxscHRyLCAx
KTsKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy50aGlzUmVnaXN0ZXIo
KSwgZXhjbHVkZWRMaXN0LmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLm1v
dmUoYXJncy5hcmd1bWVudFJlZ2lzdGVyKDApLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOwotICAgICAg
ICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCBhZGRNZXRob2QuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncywgZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOwotICAgICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBleGNsdWRlZFNldC5hZGQodGFyZ2V0LnBy
b3BlcnR5TmFtZS5pbXBsKCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgZXhjbHVkZWRTZXQuYWRkKHRhcmdldC5wcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh0YXJnZXQuZGVmYXVsdFZhbHVlKQotICAgICAg
ICAgICAgICAgIGFzc2lnbkRlZmF1bHRWYWx1ZUlmVW5kZWZpbmVkKGdlbmVyYXRvciwgdGVtcC5n
ZXQoKSwgdGFyZ2V0LmRlZmF1bHRWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0QmluZGlu
ZykKLSAgICAgICAgICAgICAgICBmaW5pc2hEaXJlY3RCaW5kaW5nQXNzaWdubWVudCgpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRhcmdldC5wYXR0ZXJuLT5iaW5kVmFsdWUo
Z2VuZXJhdG9yLCB0ZW1wLmdldCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFT
U0VSVCh0YXJnZXQuYmluZGluZ1R5cGUgPT0gQmluZGluZ1R5cGU6OlJlc3RFbGVtZW50KTsKLSAg
ICAgICAgICAgIEFTU0VSVChpID09IG1fdGFyZ2V0UGF0dGVybnMuc2l6ZSgpIC0gMSk7Ci0gICAg
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbmV3T2JqZWN0ID0gZ2VuZXJhdG9yLmVtaXROZXdP
YmplY3QoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gbG9hZCBhbmQgY2FsbCBAY29weURhdGFQcm9wZXJ0aWVzCi0gICAgICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gY29weURhdGFQcm9wZXJ0aWVzID0gZ2VuZXJhdG9yLm1vdmVMaW5rVGlt
ZUNvbnN0YW50KG51bGxwdHIsIExpbmtUaW1lQ29uc3RhbnQ6OmNvcHlEYXRhUHJvcGVydGllcyk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIENhbGxBcmd1bWVudHMgYXJncyhnZW5lcmF0b3Is
IG51bGxwdHIsIDMpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGFyZ3MudGhpc1Jl
Z2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJn
cy5hcmd1bWVudFJlZ2lzdGVyKDApLCBuZXdPYmplY3QuZ2V0KCkpOwotICAgICAgICAgICAgZ2Vu
ZXJhdG9yLm1vdmUoYXJncy5hcmd1bWVudFJlZ2lzdGVyKDEpLCByaHMpOwotICAgICAgICAgICAg
aWYgKG1fY29udGFpbnNDb21wdXRlZFByb3BlcnR5KQotICAgICAgICAgICAgICAgIGdlbmVyYXRv
ci5tb3ZlKGFyZ3MuYXJndW1lbnRSZWdpc3RlcigyKSwgZXhjbHVkZWRMaXN0LmdldCgpKTsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNs
dWRlZFNldFJlZyA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCks
IGV4Y2x1ZGVkU2V0KTsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IubW92ZShhcmdzLmFyZ3Vt
ZW50UmVnaXN0ZXIoMiksIGV4Y2x1ZGVkU2V0UmVnLmdldCgpKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAodGFyZ2V0LmRlZmF1bHRWYWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgYXNzaWduRGVmYXVsdFZhbHVlSWZVbmRlZmluZWQoZ2VuZXJhdG9yLCB0ZW1wLmdldCgpLCB0
YXJnZXQuZGVmYXVsdFZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoZGlyZWN0QmluZGluZykK
KyAgICAgICAgICAgICAgICAgICAgZmluaXNoRGlyZWN0QmluZGluZ0Fzc2lnbm1lbnQoKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXR0ZXJuLT5i
aW5kVmFsdWUoZ2VuZXJhdG9yLCB0ZW1wLmdldCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKHRhcmdldC5iaW5kaW5nVHlwZSA9PSBCaW5kaW5nVHlwZTo6
UmVzdEVsZW1lbnQpOworICAgICAgICAgICAgICAgIEFTU0VSVChpID09IG1fdGFyZ2V0UGF0dGVy
bnMuc2l6ZSgpIC0gMSk7CiAKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIGNvcHlEYXRhUHJvcGVydGllcy5nZXQoKSwgTm9FeHBlY3RlZEZ1
bmN0aW9uLCBhcmdzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2Fi
bGVDYWxsOjpObyk7Ci0gICAgICAgICAgICB0YXJnZXQucGF0dGVybi0+YmluZFZhbHVlKGdlbmVy
YXRvciwgbmV3T2JqZWN0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5l
d09iamVjdChuZXdPYmplY3QuZ2V0KCkpOworCisgICAgICAgICAgICAgICAgLy8gbG9hZCBhbmQg
Y2FsbCBAY29weURhdGFQcm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGNvcHlEYXRhUHJvcGVydGllcyA9IGdlbmVyYXRvci5tb3ZlTGlua1RpbWVDb25zdGFudChu
dWxscHRyLCBMaW5rVGltZUNvbnN0YW50Ojpjb3B5RGF0YVByb3BlcnRpZXMpOworCisgICAgICAg
ICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy0+dGhpc1JlZ2lzdGVyKCksIG5ld09iamVjdC5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy0+YXJndW1lbnRSZWdp
c3RlcigwKSwgcmhzKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoYXJncy0+
YXJndW1lbnRSZWdpc3RlcigxKSwgV1RGTW92ZShleGNsdWRlZFNldCkpOworICAgICAgICAgICAg
ICAgIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGNvcHlEYXRh
UHJvcGVydGllcy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBhcmdzLnZhbHVlKCksIGRpdm90
KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKKyAgICAg
ICAgICAgICAgICB0YXJnZXQucGF0dGVybi0+YmluZFZhbHVlKGdlbmVyYXRvciwgbmV3T2JqZWN0
LmdldCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtNTYxNiwxMCAr
NTYxMCw5IEBAIFJlZ2lzdGVySUQqIE9iamVjdFNwcmVhZEV4cHJlc3Npb25Ob2RlOjplbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvCiAgICAgCiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGNvcHlEYXRhUHJvcGVydGllcyA9IGdlbmVyYXRvci5tb3ZlTGlua1RpbWVDb25zdGFu
dChudWxscHRyLCBMaW5rVGltZUNvbnN0YW50Ojpjb3B5RGF0YVByb3BlcnRpZXMpOwogICAgIAot
ICAgIENhbGxBcmd1bWVudHMgYXJncyhnZW5lcmF0b3IsIG51bGxwdHIsIDIpOwotICAgIGdlbmVy
YXRvci5lbWl0TG9hZChhcmdzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICBn
ZW5lcmF0b3IubW92ZShhcmdzLmFyZ3VtZW50UmVnaXN0ZXIoMCksIGRzdCk7Ci0gICAgZ2VuZXJh
dG9yLm1vdmUoYXJncy5hcmd1bWVudFJlZ2lzdGVyKDEpLCBzcmMuZ2V0KCkpOworICAgIENhbGxB
cmd1bWVudHMgYXJncyhnZW5lcmF0b3IsIG51bGxwdHIsIDEpOworICAgIGdlbmVyYXRvci5tb3Zl
KGFyZ3MudGhpc1JlZ2lzdGVyKCksIGRzdCk7CisgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy5hcmd1
bWVudFJlZ2lzdGVyKDApLCBzcmMuZ2V0KCkpOwogICAgIAogICAgIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGNvcHlEYXRhUHJvcGVydGllcy5nZXQoKSwgTm9F
eHBlY3RlZEZ1bmN0aW9uLCBhcmdzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCks
IERlYnVnZ2FibGVDYWxsOjpObyk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWRUeXBlcy5jcHAKaW5kZXggZTMwMjRkODdhODU4NzljYzc5NzcwNDM3NjdlNWYx
N2Y5ZjUzNjc4MS4uZWQyMjkxZjM1Zjc1ZmJiYTYyNjMyOGRkMDBkZTIxNDRhNWQ5YzQ5MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApAQCAtOTYy
LDI1ICs5NjIsNiBAQCBjbGFzcyBDYWNoZWRIYXNoU2V0IDogcHVibGljIENhY2hlZE9iamVjdDxI
YXNoU2V0PFNvdXJjZVR5cGU8VD4sIEhhc2hBcmc+PiB7CiAgICAgQ2FjaGVkVmVjdG9yPFQ+IG1f
ZW50cmllczsKIH07CiAKLWNsYXNzIENhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5IDog
cHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiB7
Ci1wdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29uc3Rh
bnRJZGVudGlmaWVyU2V0RW50cnkmIGVudHJ5KQotICAgIHsKLSAgICAgICAgbV9jb25zdGFudCA9
IGVudHJ5LnNlY29uZDsKLSAgICAgICAgbV9zZXQuZW5jb2RlKGVuY29kZXIsIGVudHJ5LmZpcnN0
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDb25zdGFudElk
ZW50aWZpZXJTZXRFbnRyeSYgZW50cnkpIGNvbnN0Ci0gICAgewotICAgICAgICBlbnRyeS5zZWNv
bmQgPSBtX2NvbnN0YW50OwotICAgICAgICBtX3NldC5kZWNvZGUoZGVjb2RlciwgZW50cnkuZmly
c3QpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX2NvbnN0YW50OwotICAgIENh
Y2hlZEhhc2hTZXQ8Q2FjaGVkUmVmUHRyPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPiwgSWRlbnRp
ZmllclJlcEhhc2g+IG1fc2V0OwotfTsKLQogY2xhc3MgQ2FjaGVkQ29kZUJsb2NrUmFyZURhdGEg
OiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YT4gewogcHVi
bGljOgogICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkQ29k
ZUJsb2NrOjpSYXJlRGF0YSYgcmFyZURhdGEpCkBAIC0xMDIxLDcgKzEwMDIsNyBAQCBjbGFzcyBD
YWNoZWRDb2RlQmxvY2tSYXJlRGF0YSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VW5saW5rZWRDb2Rl
QmxvY2s6OlJhcmVEYXRhPgogICAgIENhY2hlZEhhc2hNYXA8dW5zaWduZWQsIFVubGlua2VkQ29k
ZUJsb2NrOjpSYXJlRGF0YTo6VHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlPiBtX3R5cGVQcm9m
aWxlckluZm9NYXA7CiAgICAgQ2FjaGVkVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+
IG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7CiAgICAgQ2FjaGVkVmVjdG9y
PENhY2hlZEJpdFZlY3Rvcj4gbV9iaXRWZWN0b3JzOwotICAgIENhY2hlZFZlY3RvcjxDYWNoZWRD
b25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOworICAg
IENhY2hlZFZlY3RvcjxDYWNoZWRIYXNoU2V0PENhY2hlZFJlZlB0cjxDYWNoZWRVbmlxdWVkU3Ry
aW5nSW1wbD4sIElkZW50aWZpZXJSZXBIYXNoPj4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOwog
ICAgIHVuc2lnbmVkIG1fbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgOiAxOwogICAgIHVuc2ln
bmVkIG1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgOiAxOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcApp
bmRleCA0MDIxZmM3ZTBhZGFmN2EwYTllMGVmNmNmZDIyNTgzOGI1YmY4NzgzLi4zYmM1YjZkMDdm
OGQ1Y2Q5YmU4YzJkZTQxZDhkZGRhOGZmOWRjNDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCkBAIC04
NDAsMjggKzg0MCw0NyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVuY0NvcHlE
YXRhUHJvcGVydGllcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKLSAgICBKU0ZpbmFsT2JqZWN0KiB0YXJnZXQgPSBqc0Nhc3Q8SlNGaW5hbE9iamVjdCo+
KGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIEpTRmluYWxPYmplY3QqIHRh
cmdldCA9IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAg
ICAgQVNTRVJUKHRhcmdldC0+aXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKHZtKSk7CiAKLSAgICBKU1Zh
bHVlIHNvdXJjZVZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAgICBK
U1ZhbHVlIHNvdXJjZVZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAg
ICBpZiAoc291cmNlVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSh0YXJnZXQpOwogCiAgICAgSlNPYmplY3QqIHNvdXJjZSA9IHNvdXJjZVZhbHVlLnRvT2Jq
ZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKIAotICAg
IEpTU2V0KiBleGNsdWRlZFNldCA9IG51bGxwdHI7Ci0gICAgaWYgKGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpID4gMikKLSAgICAgICAgZXhjbHVkZWRTZXQgPSBqc0Nhc3Q8SlNTZXQqPihjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKKyAgICBVbmxpbmtlZENvZGVCbG9jayogdW5s
aW5rZWRDb2RlQmxvY2sgPSBudWxscHRyOworICAgIGNvbnN0IElkZW50aWZpZXJTZXQqIGV4Y2x1
ZGVkU2V0ID0gbnVsbHB0cjsKKyAgICBPcHRpb25hbDxJZGVudGlmaWVyU2V0PiBuZXdseUNyZWF0
ZWRTZXQ7CisgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpID4gMSkgeworICAgICAg
ICBpbnQzMl90IHNldEluZGV4ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKS5hc0lu
dDMyQXNBbnlJbnQoKTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFt
ZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CisgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNhbGxlckZyYW1lLT5jb2RlT3JpZ2luKCk7CisgICAg
ICAgIGlmIChjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCkpCisgICAg
ICAgICAgICBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOworICAgICAgICBBU1NFUlQoY29k
ZUJsb2NrKTsKKyAgICAgICAgdW5saW5rZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnVubGlua2Vk
Q29kZUJsb2NrKCk7CisgICAgICAgIGV4Y2x1ZGVkU2V0ID0gJnVubGlua2VkQ29kZUJsb2NrLT5j
b25zdGFudElkZW50aWZpZXJTZXRzKClbc2V0SW5kZXhdOworICAgICAgICBpZiAoY2FsbEZyYW1l
LT5hcmd1bWVudENvdW50KCkgPiAyKSB7CisgICAgICAgICAgICBuZXdseUNyZWF0ZWRTZXQuZW1w
bGFjZSgqZXhjbHVkZWRTZXQpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDI7
IGluZGV4IDwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7ICsraW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQo
aW5kZXgpLnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIG5ld2x5Q3JlYXRl
ZFNldC0+YWRkKHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZXhjbHVkZWRTZXQgPSAmbmV3bHlDcmVhdGVkU2V0LnZhbHVlKCk7CisgICAgICAgIH0KKyAg
ICB9CiAKLSAgICBhdXRvIGlzUHJvcGVydHlOYW1lRXhjbHVkZWQgPSBbJl0gKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIC0+IGJvb2wgewor
ICAgIGF1dG8gaXNQcm9wZXJ0eU5hbWVFeGNsdWRlZCA9IFsmXSAoUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSkgLT4gYm9vbCB7CiAgICAgICAgIEFTU0VSVCghcHJvcGVydHlOYW1lLmlzUHJpdmF0
ZU5hbWUoKSk7CiAgICAgICAgIGlmICghZXhjbHVkZWRTZXQpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgSlNWYWx1ZSBwcm9wZXJ0eU5hbWVWYWx1ZSA9IGlkZW50aWZpZXJU
b0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSkp
OwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgIHJl
dHVybiBleGNsdWRlZFNldC0+aGFzKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lVmFsdWUpOwor
ICAgICAgICByZXR1cm4gZXhjbHVkZWRTZXQtPmNvbnRhaW5zKHByb3BlcnR5TmFtZS51aWQoKSk7
CiAgICAgfTsKIAogICAgIGlmICghc291cmNlLT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCh2bSkp
IHsKQEAgLTg4OCw2ICs5MDcsOSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVu
Y0NvcHlEYXRhUHJvcGVydGllcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgICAgICAg
ICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICAgICAgICAgIGlmIChpc1Byb3BlcnR5
TmFtZUV4Y2x1ZGVkKHByb3BlcnR5TmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisKICAgICAgICAgICAgIHByb3BlcnRpZXMuYXBwZW5kKGVudHJ5LmtleSk7CiAgICAgICAgICAg
ICB2YWx1ZXMuYXBwZW5kV2l0aENyYXNoT25PdmVyZmxvdyhzb3VyY2UtPmdldERpcmVjdChlbnRy
eS5vZmZzZXQpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtODk4LDEwICs5MjAsNiBA
QCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVuY0NvcHlEYXRhUHJvcGVydGllcywg
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHByb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3Vs
ZCBwdXQgcHJvcGVydGllcyBpbiBhIGJhdGNoaW5nIG1hbm5lciB0byBhY2NlbGVyYXRlIENvcHlE
YXRhUHJvcGVydGllcyBtb3JlLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE4NTM1OAotICAgICAgICAgICAgYm9vbCBleGNsdWRlZCA9IGlz
UHJvcGVydHlOYW1lRXhjbHVkZWQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0aWVzW2ldLmdldCgpKTsK
LSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAg
ICBpZiAoZXhjbHVkZWQpCi0gICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB0
YXJnZXQtPnB1dERpcmVjdCh2bSwgcHJvcGVydGllc1tpXS5nZXQoKSwgdmFsdWVzLmF0KGkpKTsK
ICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC05MTAsOSArOTI4LDcgQEAgSlNDX0RFRklORV9I
T1NUX0ZVTkNUSU9OKGdsb2JhbEZ1bmNDb3B5RGF0YVByb3BlcnRpZXMsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2IKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAog
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHByb3BlcnR5TmFtZSA6IHByb3BlcnR5TmFtZXMpIHsK
LSAgICAgICAgICAgIGJvb2wgZXhjbHVkZWQgPSBpc1Byb3BlcnR5TmFtZUV4Y2x1ZGVkKGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICBpZiAoZXhjbHVkZWQpCisgICAgICAgICAgICBpZiAo
aXNQcm9wZXJ0eU5hbWVFeGNsdWRlZChwcm9wZXJ0eU5hbWUpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChzb3VyY2UsIFByb3BlcnR5
U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CkBAIC05MzUsNyArOTUx
LDggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGdsb2JhbEZ1bmNDb3B5RGF0YVByb3BlcnRp
ZXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICAgICAgfQogICAgIH0KIAotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUodW5saW5rZWRDb2RlQmxvY2spOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGFy
Z2V0KTsKIH0KIAogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGdsb2JhbEZ1bmNEYXRlVGltZUZv
cm1hdCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KSkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggNDQxZmYxNDI3NTMzOTU4N2QxNDAxZjIxODkwNDNmN2YzYTNhOWJmNy4uYTVjNTVkNmI5MzRl
YTAzNzViMmM5ZjU1MDMyMDQxMjI5ODViNzQ1ZSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMS0wMi0xMCAg
WXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtKU0NdIFNpbXBs
aWZ5IGV4Y2x1ZGVkU2V0IGhhbmRsaW5nIGluIG9iamVjdCByZXN0IGV4cHJlc3Npb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTY2OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWljcm9iZW5jaG1h
cmtzL29iamVjdC1yZXN0LWNvbXB1dGVkLWRlc3RydWN0dXJpbmcuanM6IEFkZGVkLgorCiAyMDIx
LTAyLTA5ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pT
Q10gQysrIGl0ZXJhdGlvbiBzaG91bGQgc3VwcG9ydCBmYXN0IGl0ZXJhdG9yIHByb3RvY29sCmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9vYmplY3QtcmVzdC1jb21wdXRlZC1k
ZXN0cnVjdHVyaW5nLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvb2JqZWN0LXJlc3QtY29t
cHV0ZWQtZGVzdHJ1Y3R1cmluZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MzQ5ZDkzZDcyYzM2Y2UxNjRkZmJl
MDI5NDhiM2Y4MzNhYWUxY2QwCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNo
bWFya3Mvb2JqZWN0LXJlc3QtY29tcHV0ZWQtZGVzdHJ1Y3R1cmluZy5qcwpAQCAtMCwwICsxLDEy
IEBACisoZnVuY3Rpb24oa2V5MSwga2V5Miwga2V5MykgeworICAgIHZhciBvYmogPSB7IGE6IDAs
IGI6IDAsIGM6IDAsIGQ6IDEsIGU6IDAsIGY6IDAsIGc6IDAsIGg6IDAsIGk6IDAsIGo6IDAgfTsK
KyAgICB2YXIgYWNjID0gMDsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyBpKyspIHsK
KyAgICAgICAgdmFyIHsgW2tleTFdOiBhLCBba2V5Ml06IGIsIFtrZXkzXTogYywgLi4ucmVzdCB9
ID0gb2JqOworICAgICAgICBhY2MgKz0gcmVzdC5kOworICAgIH0KKworICAgIGlmIChhY2MgIT09
IDFlNSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uISIpOworfSkoJ2En
LCAnYicsICdjJyk7Cg==
</data>
<flag name="commit-queue"
          id="438183"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419834</attachid>
            <date>2021-02-10 03:00:51 -0800</date>
            <delta_ts>2021-02-10 12:43:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221668-20210210030049.patch</filename>
            <type>text/plain</type>
            <size>31729</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNjM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
MTM0YTFmMmZmMGY5ZDM5MDU5YmZmNDA2ZjNlMjJlZDNlZDEwMTk0Li41MDJiZjIyNTBlOTgyNzhl
YWVlZmJkMzAwMTFlNjg0NDFhMmE0OWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAyMS0wMi0xMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFNpbXBsaWZ5IGV4Y2x1ZGVkU2V0IGhhbmRsaW5nIGluIG9iamVj
dCByZXN0IGV4cHJlc3Npb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMTY2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3Rh
bnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRJZGVudGlmaWVyU2V0cyk6Cisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmNvbnN0YW50SWRlbnRpZmllclNldHMp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRkU2V0Q29uc3Rh
bnQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6Ok9iamVjdFBhdHRlcm5Ob2RlOjpiaW5kVmFsdWUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpPYmplY3RTcHJlYWRFeHByZXNzaW9uTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk6OmVuY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5OjpkZWNvZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorCiAyMDIxLTAy
LTA5ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10g
QysrIGl0ZXJhdGlvbiBzaG91bGQgc3VwcG9ydCBmYXN0IGl0ZXJhdG9yIHByb3RvY29sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDA2MmRmYWMy
ZTQ5ZWYwOWU4Y2E5YmQ4Yzk2ZDZjNTRiNjZiMGUyN2IuLjVlYTBjYWU4YjVmODBmNDdhOTk0M2I5
YmM5ODMyZmE1M2I5NDJiMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCkBAIC00MjIsOSArNDIyLDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsK
ICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPmhhc1JhcmVEYXRhKCkpIHsKICAgICAgICAgY3Jl
YXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwogCi0gICAgICAgIHNldENvbnN0YW50SWRlbnRpZmll
clNldFJlZ2lzdGVycyh2bSwgdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50SWRlbnRpZmllclNl
dHMoKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwot
CiAgICAgICAgIGlmIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZF
eGNlcHRpb25IYW5kbGVycygpKSB7CiAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykgewpAQCAtODkwLDI4ICs4ODcsNiBAQCBDb2RlQmxvY2s6On5D
b2RlQmxvY2soKQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpz
ZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mIHZtLCBjb25zdCBSZWZDb3VudGVk
QXJyYXk8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpCi17Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKLQotICAgIGZvciAoY29uc3QgYXV0
byYgZW50cnkgOiBjb25zdGFudHMpIHsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllclNldCYgc2V0
ID0gZW50cnkuZmlyc3Q7Ci0KLSAgICAgICAgU3RydWN0dXJlKiBzZXRTdHJ1Y3R1cmUgPSBnbG9i
YWxPYmplY3QtPnNldFN0cnVjdHVyZSgpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwotICAgICAgICBKU1NldCoganNTZXQgPSBKU1NldDo6Y3JlYXRlKGdsb2Jh
bE9iamVjdCwgdm0sIHNldFN0cnVjdHVyZSwgc2V0LnNpemUoKSk7Ci0gICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0KLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBz
ZXRFbnRyeSA6IHNldCkgewotICAgICAgICAgICAgSlNTdHJpbmcqIGpzU3RyaW5nID0ganNPd25l
ZFN0cmluZyh2bSwgc2V0RW50cnkuZ2V0KCkpOyAKLSAgICAgICAgICAgIGpzU2V0LT5hZGQoZ2xv
YmFsT2JqZWN0LCBqc1N0cmluZyk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwotICAgICAgICB9Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbZW50
cnkuc2Vjb25kXS5zZXQodm0sIHRoaXMsIGpzU2V0KTsKLSAgICB9Ci19Ci0KIHZvaWQgQ29kZUJs
b2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJy
aWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTY3Jp
cHRFeGVjdXRhYmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggZGZjZTdl
NGYzMDVlMGRjY2Q5Y2YxMTQxODg4MjFjMDMzMTdjMjNkYi4uMDI2OGZjYWY2Y2ZlMzQ0NTQ5NjQ3
ZjExMmU4YmMxNDE4MDY3NDc2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaApAQCAtOTUzLDggKzk1Myw2IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBK
U0NlbGwgewogCiAgICAgdm9pZCB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENv
dW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxl
cywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpOwogCi0gICAgdm9pZCBzZXRD
b25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8
Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpOwotCiAgICAgdm9pZCBzZXRD
b25zdGFudFJlZ2lzdGVycyhjb25zdCBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPFVua25v
d24+PiYgY29uc3RhbnRzLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTY3JpcHRFeGVjdXRh
YmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpOwogCiAgICAgdm9pZCByZXBsYWNlQ29uc3RhbnQoVmly
dHVhbFJlZ2lzdGVyIHJlZywgSlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggMWY1MWVjZTVkNmY4NmQ3
MDk1MTFiNGE0YzE4MmM2NGNiZmExODNiZi4uOWFjZGI0YzVmMjU5ZTI2Yjc4MDllNGE0MWM4ZTFj
ZTNiZDNlZDVhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgKQEAgLTc0LDcgKzc0LDYgQEAgdHlwZWRlZiB1bnNpZ25lZCBVbmxp
bmtlZEFycmF5UHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRBcnJheUFsbG9jYXRp
b25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZE9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZExMSW50Q2FsbExpbmtJbmZvOwotdXNpbmcg
Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnkgPSBzdGQ6OnBhaXI8SWRlbnRpZmllclNldCwgdW5z
aWduZWQ+OwogCiBzdHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUgewogICAgIHN0cnVjdCBP
ZmZzZXRMb2NhdGlvbiB7CkBAIC0xNjIsNyArMTYxLDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxv
Y2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyBy
ZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIAogICAgIHVuc2ln
bmVkIG51bWJlck9mQ29uc3RhbnRJZGVudGlmaWVyU2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmFy
ZURhdGEgPyBtX3JhcmVEYXRhLT5tX2NvbnN0YW50SWRlbnRpZmllclNldHMuc2l6ZSgpIDogMDsg
fQotICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4m
IGNvbnN0YW50SWRlbnRpZmllclNldHMoKSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1f
cmFyZURhdGEtPm1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsgfQorICAgIGNvbnN0IFJlZkNvdW50
ZWRBcnJheTxJZGVudGlmaWVyU2V0PiYgY29uc3RhbnRJZGVudGlmaWVyU2V0cygpIHsgQVNTRVJU
KG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRz
OyB9CiAKICAgICAvLyBKdW1wcwogICAgIHNpemVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29u
c3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5zaXplKCk7IH0KQEAgLTQxMSw3ICs0MTAsNyBAQCBj
bGFzcyBVbmxpbmtlZENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICBIYXNoTWFw
PHVuc2lnbmVkLCBUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+IG1fdHlwZVByb2ZpbGVySW5m
b01hcDsKICAgICAgICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+
IG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7CiAgICAgICAgIFJlZkNvdW50
ZWRBcnJheTxCaXRWZWN0b3I+IG1fYml0VmVjdG9yczsKLSAgICAgICAgUmVmQ291bnRlZEFycmF5
PENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7Cisg
ICAgICAgIFJlZkNvdW50ZWRBcnJheTxJZGVudGlmaWVyU2V0PiBtX2NvbnN0YW50SWRlbnRpZmll
clNldHM7CiAKICAgICAgICAgdW5zaWduZWQgbV9uZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciA6
IDE7CiAgICAgICAgIHVuc2lnbmVkIG1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgOiAxOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3IuaAppbmRleCA5NGM2ODcwZTk5NGMyYmY1Yzk4MmNlOTUyZTRjNTM0YmRj
OTZiNDg4Li40ODM4MDUxYzg4OTk4YmMxNWFlMmMzYmQ0NWZmN2JmMWI4ZTJlYjIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3IuaApAQCAtMTExLDE0ICsxMTEsMTMgQEAgY2xhc3MgVW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3IgewogICAgIH0KIAogICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRJ
ZGVudGlmaWVyU2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0cy5z
aXplKCk7IH0KLSAgICBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBj
b25zdGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1cm4gbV9jb25zdGFudElkZW50aWZpZXJTZXRz
OyB9Ci0gICAgdm9pZCBhZGRTZXRDb25zdGFudChJZGVudGlmaWVyU2V0JiBzZXQpCisgICAgY29u
c3QgVmVjdG9yPElkZW50aWZpZXJTZXQ+JiBjb25zdGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1
cm4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOyB9CisgICAgdW5zaWduZWQgYWRkU2V0Q29uc3Rh
bnQoSWRlbnRpZmllclNldCYmIHNldCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3ZtLmhlYXAu
aXNEZWZlcnJlZCgpKTsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lz
dGVycy5zaXplKCk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFy
cmllcjxVbmtub3duPigpKTsKLSAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwotICAgICAgICBt
X2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5kKENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5
KHNldCwgcmVzdWx0KSk7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRJZGVu
dGlmaWVyU2V0cy5zaXplKCk7CisgICAgICAgIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0cy5hcHBl
bmQoV1RGTW92ZShzZXQpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBj
b25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFu
dEluZGV4KCldOyB9CkBAIC0yMTAsNyArMjA5LDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tH
ZW5lcmF0b3IgewogICAgIEhhc2hNYXA8dW5zaWduZWQsIFVubGlua2VkQ29kZUJsb2NrOjpSYXJl
RGF0YTo6VHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlPiBtX3R5cGVQcm9maWxlckluZm9NYXA7
CiAgICAgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IG1fb3BQcm9maWxlQ29udHJv
bEZsb3dCeXRlY29kZU9mZnNldHM7CiAgICAgVmVjdG9yPEJpdFZlY3Rvcj4gbV9iaXRWZWN0b3Jz
OwotICAgIFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50
aWZpZXJTZXRzOworICAgIFZlY3RvcjxJZGVudGlmaWVyU2V0PiBtX2NvbnN0YW50SWRlbnRpZmll
clNldHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggNGU1
NzE5ZWY4MjU4ZjNiMjlmZTYwZDc2ZGIyMDJkMmY5YjI4YTU3ZS4uZTQzYzRjZDc0YzczNmQ2NGY2
NzU1OTczN2MwNDEyZTRkNGM2MDMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTE4NDAsMjUgKzE4
NDAsMTAgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVy
SUQqIGRzdCwgSlNWYWx1ZSB2LCBTb3VyY2VDb2RlUmUKICAgICByZXR1cm4gY29uc3RhbnRJRDsK
IH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQq
IGRzdCwgSWRlbnRpZmllclNldCYgc2V0KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSWRlbnRpZmllclNldCYmIHNldCkKIHsKLSAgICBp
ZiAobV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRJZGVudGlmaWVyU2V0cygpKSB7Ci0gICAg
ICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX2NvZGVCbG9jay0+Y29uc3RhbnRJZGVudGlm
aWVyU2V0cygpKSB7Ci0gICAgICAgICAgICBpZiAoZW50cnkuZmlyc3QgIT0gc2V0KQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gJm1f
Y29uc3RhbnRQb29sUmVnaXN0ZXJzW2VudHJ5LnNlY29uZF07Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgdW5zaWduZWQgaW5kZXggPSBhZGRDb25zdGFudEluZGV4KCk7Ci0gICAgbV9jb2Rl
QmxvY2stPmFkZFNldENvbnN0YW50KHNldCk7Ci0gICAgUmVnaXN0ZXJJRCogbV9zZXRSZWdpc3Rl
ciA9ICZtX2NvbnN0YW50UG9vbFJlZ2lzdGVyc1tpbmRleF07Ci0gICAgCi0gICAgaWYgKGRzdCkK
LSAgICAgICAgcmV0dXJuIG1vdmUoZHN0LCBtX3NldFJlZ2lzdGVyKTsKLSAgICAKLSAgICByZXR1
cm4gbV9zZXRSZWdpc3RlcjsKKyAgICB1bnNpZ25lZCBzZXRJbmRleCA9IG1fY29kZUJsb2NrLT5h
ZGRTZXRDb25zdGFudChXVEZNb3ZlKHNldCkpOworICAgIHJldHVybiBlbWl0TG9hZChkc3QsIGpz
TnVtYmVyKHNldEluZGV4KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExvb2tVcFZhcktpbmRG
dW5jdG9yPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCmluZGV4IGJiZmI1NjgxOThmNDQ0NTU3ZGEzMTMzYzI5NjYzY2Q0
MjAxZTdiZTUuLmJkOGQ3YTVkMTBiYWQ0YTg0MjhhNGZiNzVkNzA3MDgwYWEzYTA5MDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKQEAgLTcwNSw3ICs3MDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29sKTsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSlNWYWx1ZSwgU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSWRlbnRpZmllclNl
dCYgZXhjbHVkZWRMaXN0KTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJ
RCogZHN0LCBJZGVudGlmaWVyU2V0JiYgZXhjbHVkZWRMaXN0KTsKIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVbmFyeU9wLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8VW5hcnlPcDo6
b3Bjb2RlSUQgIT0gb3BfbmVnYXRlPj4KICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFVuYXJ5T3Ao
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggNGMwOGEzM2QzZjg3
YmI0MmJlM2Y4ZjZjZGJhNWZhMDM3MDA3OGU1Zi4uNTMxY2E1MWYyYTliMWZlOWNmNDYwOWU2NTRh
MDZhYzVmMTZmMDNlMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtNTI5OSwxMTMgKzUyOTksMTA3IEBAIHZvaWQgT2Jq
ZWN0UGF0dGVybk5vZGU6OmJpbmRWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiByaHMpCiB7CiAgICAgZ2VuZXJhdG9yLmVtaXRSZXF1aXJlT2JqZWN0Q29lcmNp
YmxlKHJocywgIlJpZ2h0IHNpZGUgb2YgYXNzaWdubWVudCBjYW5ub3QgYmUgZGVzdHJ1Y3R1cmVk
Il9zKTsKIAotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNsdWRlZExpc3Q7Ci0gICAgSWRlbnRp
ZmllclNldCBleGNsdWRlZFNldDsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYWRkTWV0aG9kOwot
ICAgIGlmIChtX2NvbnRhaW5zUmVzdEVsZW1lbnQgJiYgbV9jb250YWluc0NvbXB1dGVkUHJvcGVy
dHkpIHsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNldENvbnN0cnVjdG9yID0gZ2VuZXJh
dG9yLm1vdmVMaW5rVGltZUNvbnN0YW50KG51bGxwdHIsIExpbmtUaW1lQ29uc3RhbnQ6OlNldCk7
Ci0KLSAgICAgICAgQ2FsbEFyZ3VtZW50cyBhcmdzKGdlbmVyYXRvciwgbnVsbHB0ciwgMCk7Ci0g
ICAgICAgIGV4Y2x1ZGVkTGlzdCA9IGdlbmVyYXRvci5lbWl0Q29uc3RydWN0KGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKSwgc2V0Q29uc3RydWN0b3IuZ2V0KCksIHNldENvbnN0cnVjdG9yLmdldCgp
LCBOb0V4cGVjdGVkRnVuY3Rpb24sIGFyZ3MsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSk7Ci0KLSAgICAgICAgYWRkTWV0aG9kID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgZXhjbHVkZWRMaXN0LmdldCgpLCBnZW5lcmF0b3IucHJvcGVy
dHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmFkZFByaXZhdGVOYW1lKCkpOwotICAgIH0KLQogICAg
IEJ5dGVjb2RlR2VuZXJhdG9yOjpQcmVzZXJ2ZWRURFpTdGFjayBwcmVzZXJ2ZWRURFpTdGFjazsK
ICAgICBnZW5lcmF0b3IucHJlc2VydmVURFpTdGFjayhwcmVzZXJ2ZWRURFpTdGFjayk7CiAKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGFyZ2V0UGF0dGVybnMuc2l6ZSgpOyBpKyspIHsK
LSAgICAgICAgY29uc3QgYXV0byYgdGFyZ2V0ID0gbV90YXJnZXRQYXR0ZXJuc1tpXTsKLSAgICAg
ICAgaWYgKHRhcmdldC5iaW5kaW5nVHlwZSA9PSBCaW5kaW5nVHlwZTo6RWxlbWVudCkgewotICAg
ICAgICAgICAgLy8gSWYgdGhlIGRlc3RydWN0dXJpbmcgYmVjb21lcyBnZXRfYnlfaWQgYW5kIG1v
diwgdGhlbiB3ZSBzaG91bGQgc3RvcmUgcmVzdWx0cyBkaXJlY3RseSB0byB0aGUgbG9jYWwncyBi
aW5kaW5nLgotICAgICAgICAgICAgLy8gRnJvbQotICAgICAgICAgICAgLy8gICAgIGdldF9ieV9p
ZCAgICAgICAgICBkc3Q6bG9jMTAsIGJhc2U6bG9jOSwgcHJvcGVydHk6MAotICAgICAgICAgICAg
Ly8gICAgIG1vdiAgICAgICAgICAgICAgICBkc3Q6bG9jNiwgc3JjOmxvYzEwCi0gICAgICAgICAg
ICAvLyBUbwotICAgICAgICAgICAgLy8gICAgIGdldF9ieV9pZCAgICAgICAgICBkc3Q6bG9jNiwg
YmFzZTpsb2M5LCBwcm9wZXJ0eTowCi0gICAgICAgICAgICBhdXRvIHdyaXRhYmxlRGlyZWN0Qmlu
ZGluZ0lmUG9zc2libGUgPSBbJl0oKSAtPiBSZWdpc3RlcklEKiB7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhlIGZvbGxvd2luZyBwYXR0ZXJuIGlzIHBvc3NpYmxlLiBJbiB0aGF0IGNhc2UsIGFmdGVy
IHNldHRpbmcgfGRhdGF8IGxvY2FsIHZhcmlhYmxlLCB3ZSBuZWVkIHRvIHN0b3JlIHByb3BlcnR5
IG5hbWUgaW50byB0aGUgc2V0LgotICAgICAgICAgICAgICAgIC8vIFNvLCBvbGQgcHJvcGVydHkg
bmFtZSB8ZGF0YXwgcmVzdWx0IG11c3QgYmUga2VwdCBiZWZvcmUgc2V0dGluZyBpdCBpbnRvIHxk
YXRhfC4KLSAgICAgICAgICAgICAgICAvLyAgICAgKHsgW2RhdGFdOiBkYXRhLCAuLi5vYmogfSA9
IG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29udGFpbnNSZXN0RWxlbWVudCAmJiBt
X2NvbnRhaW5zQ29tcHV0ZWRQcm9wZXJ0eSAmJiB0YXJnZXQucHJvcGVydHlFeHByZXNzaW9uKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAvLyBk
ZWZhdWx0IHZhbHVlIGNhbiBpbmNsdWRlIGEgcmVmZXJlbmNlIHRvIGxvY2FsIHZhcmlhYmxlLiBT
byBmaWxsaW5nIHZhbHVlIHRvIGEgbG9jYWwgdmFyaWFibGUgY2FuIGRpZmZlciByZXN1bHQuCi0g
ICAgICAgICAgICAgICAgLy8gV2UgZ2l2ZSB1cCBmYXN0IHBhdGggaWYgZGVmYXVsdCB2YWx1ZSBp
bmNsdWRlcyBub24gY29uc3RhbnQuCi0gICAgICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsCi0g
ICAgICAgICAgICAgICAgLy8gICAgICh7IGRhdGEgPSBkYXRhIH0gPSBvYmplY3QpOwotICAgICAg
ICAgICAgICAgIGlmICh0YXJnZXQuZGVmYXVsdFZhbHVlICYmICF0YXJnZXQuZGVmYXVsdFZhbHVl
LT5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgICAgIHJldHVybiB0YXJnZXQucGF0dGVybi0+d3JpdGFibGVEaXJlY3RCaW5kaW5n
SWZQb3NzaWJsZShnZW5lcmF0b3IpOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgYXV0
byBmaW5pc2hEaXJlY3RCaW5kaW5nQXNzaWdubWVudCA9IFsmXSgpIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQod3JpdGFibGVEaXJlY3RCaW5kaW5nSWZQb3NzaWJsZSgpKTsKLSAgICAgICAgICAg
ICAgICB0YXJnZXQucGF0dGVybi0+ZmluaXNoRGlyZWN0QmluZGluZ0Fzc2lnbm1lbnQoZ2VuZXJh
dG9yKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0
ZW1wOwotICAgICAgICAgICAgUmVnaXN0ZXJJRCogZGlyZWN0QmluZGluZyA9IHdyaXRhYmxlRGly
ZWN0QmluZGluZ0lmUG9zc2libGUoKTsKLSAgICAgICAgICAgIGlmIChkaXJlY3RCaW5kaW5nKQot
ICAgICAgICAgICAgICAgIHRlbXAgPSBkaXJlY3RCaW5kaW5nOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHRlbXAgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0KLSAgICAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWU7Ci0gICAgICAgICAgICBpZiAo
IXRhcmdldC5wcm9wZXJ0eUV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgICAgICBPcHRpb25hbDx1
aW50MzJfdD4gb3B0aW9uYWxJbmRleCA9IHBhcnNlSW5kZXgodGFyZ2V0LnByb3BlcnR5TmFtZSk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25hbEluZGV4KQotICAgICAgICAgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQodGVtcC5nZXQoKSwgcmhzLCB0YXJnZXQucHJvcGVydHlO
YW1lKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHByb3BlcnR5SW5kZXggPSBnZW5lcmF0b3IuZW1pdExvYWQobnVsbHB0ciwg
anNOdW1iZXIob3B0aW9uYWxJbmRleC52YWx1ZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0R2V0QnlWYWwodGVtcC5nZXQoKSwgcmhzLCBwcm9wZXJ0eUluZGV4LmdldCgp
KTsKKyAgICB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBuZXdPYmplY3Q7CisgICAgICAg
IElkZW50aWZpZXJTZXQgZXhjbHVkZWRTZXQ7CisgICAgICAgIE9wdGlvbmFsPENhbGxBcmd1bWVu
dHM+IGFyZ3M7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ29tcHV0ZWRQcm9wZXJ0aWVzID0g
MDsKKyAgICAgICAgdW5zaWduZWQgaW5kZXhJbkFyZ3VtZW50cyA9IDI7CisgICAgICAgIGlmICht
X2NvbnRhaW5zUmVzdEVsZW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChtX2NvbnRhaW5zQ29tcHV0
ZWRQcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDog
bV90YXJnZXRQYXR0ZXJucykgeworICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmJpbmRp
bmdUeXBlID09IEJpbmRpbmdUeXBlOjpFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodGFyZ2V0LnByb3BlcnR5RXhwcmVzc2lvbikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICArK251bWJlck9mQ29tcHV0ZWRQcm9wZXJ0aWVzOworICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JQcm9wZXJ0eSh0YXJnZXQucHJv
cGVydHlFeHByZXNzaW9uKTsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5VmFs
KHRlbXAuZ2V0KCksIHJocywgcHJvcGVydHlOYW1lLmdldCgpKTsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG5ld09iamVjdCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAg
ICAgIGFyZ3MuZW1wbGFjZShnZW5lcmF0b3IsIG51bGxwdHIsIGluZGV4SW5Bcmd1bWVudHMgKyBu
dW1iZXJPZkNvbXB1dGVkUHJvcGVydGllcyk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KG1fY29udGFpbnNSZXN0RWxlbWVudCkgewotICAgICAgICAgICAgICAgIGlmIChtX2NvbnRhaW5z
Q29tcHV0ZWRQcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LnByb3Bl
cnR5RXhwcmVzc2lvbikKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RhcmdldFBh
dHRlcm5zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiB0YXJnZXQgPSBt
X3RhcmdldFBhdHRlcm5zW2ldOworICAgICAgICAgICAgaWYgKHRhcmdldC5iaW5kaW5nVHlwZSA9
PSBCaW5kaW5nVHlwZTo6RWxlbWVudCkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBkZXN0
cnVjdHVyaW5nIGJlY29tZXMgZ2V0X2J5X2lkIGFuZCBtb3YsIHRoZW4gd2Ugc2hvdWxkIHN0b3Jl
IHJlc3VsdHMgZGlyZWN0bHkgdG8gdGhlIGxvY2FsJ3MgYmluZGluZy4KKyAgICAgICAgICAgICAg
ICAvLyBGcm9tCisgICAgICAgICAgICAgICAgLy8gICAgIGdldF9ieV9pZCAgICAgICAgICBkc3Q6
bG9jMTAsIGJhc2U6bG9jOSwgcHJvcGVydHk6MAorICAgICAgICAgICAgICAgIC8vICAgICBtb3Yg
ICAgICAgICAgICAgICAgZHN0OmxvYzYsIHNyYzpsb2MxMAorICAgICAgICAgICAgICAgIC8vIFRv
CisgICAgICAgICAgICAgICAgLy8gICAgIGdldF9ieV9pZCAgICAgICAgICBkc3Q6bG9jNiwgYmFz
ZTpsb2M5LCBwcm9wZXJ0eTowCisgICAgICAgICAgICAgICAgYXV0byB3cml0YWJsZURpcmVjdEJp
bmRpbmdJZlBvc3NpYmxlID0gWyZdKCkgLT4gUmVnaXN0ZXJJRCogeworICAgICAgICAgICAgICAg
ICAgICAvLyBUaGUgZm9sbG93aW5nIHBhdHRlcm4gaXMgcG9zc2libGUuIEluIHRoYXQgY2FzZSwg
YWZ0ZXIgc2V0dGluZyB8ZGF0YXwgbG9jYWwgdmFyaWFibGUsIHdlIG5lZWQgdG8gc3RvcmUgcHJv
cGVydHkgbmFtZSBpbnRvIHRoZSBzZXQuCisgICAgICAgICAgICAgICAgICAgIC8vIFNvLCBvbGQg
cHJvcGVydHkgbmFtZSB8ZGF0YXwgcmVzdWx0IG11c3QgYmUga2VwdCBiZWZvcmUgc2V0dGluZyBp
dCBpbnRvIHxkYXRhfC4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICh7IFtkYXRhXTogZGF0
YSwgLi4ub2JqIH0gPSBvYmplY3QpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9jb250YWlu
c1Jlc3RFbGVtZW50ICYmIG1fY29udGFpbnNDb21wdXRlZFByb3BlcnR5ICYmIHRhcmdldC5wcm9w
ZXJ0eUV4cHJlc3Npb24pCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBjYW4gaW5jbHVkZSBhIHJlZmVy
ZW5jZSB0byBsb2NhbCB2YXJpYWJsZS4gU28gZmlsbGluZyB2YWx1ZSB0byBhIGxvY2FsIHZhcmlh
YmxlIGNhbiBkaWZmZXIgcmVzdWx0LgorICAgICAgICAgICAgICAgICAgICAvLyBXZSBnaXZlIHVw
IGZhc3QgcGF0aCBpZiBkZWZhdWx0IHZhbHVlIGluY2x1ZGVzIG5vbiBjb25zdGFudC4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsCisgICAgICAgICAgICAgICAgICAgIC8vICAg
ICAoeyBkYXRhID0gZGF0YSB9ID0gb2JqZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRh
cmdldC5kZWZhdWx0VmFsdWUgJiYgIXRhcmdldC5kZWZhdWx0VmFsdWUtPmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdGFyZ2V0LnBhdHRlcm4tPndyaXRhYmxlRGlyZWN0QmluZGluZ0lmUG9zc2li
bGUoZ2VuZXJhdG9yKTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgYXV0
byBmaW5pc2hEaXJlY3RCaW5kaW5nQXNzaWdubWVudCA9IFsmXSgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKHdyaXRhYmxlRGlyZWN0QmluZGluZ0lmUG9zc2libGUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHRhcmdldC5wYXR0ZXJuLT5maW5pc2hEaXJlY3RCaW5kaW5nQXNzaWdubWVu
dChnZW5lcmF0b3IpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gdGVtcDsKKyAgICAgICAgICAgICAgICBSZWdpc3RlcklEKiBkaXJlY3RC
aW5kaW5nID0gd3JpdGFibGVEaXJlY3RCaW5kaW5nSWZQb3NzaWJsZSgpOworICAgICAgICAgICAg
ICAgIGlmIChkaXJlY3RCaW5kaW5nKQorICAgICAgICAgICAgICAgICAgICB0ZW1wID0gZGlyZWN0
QmluZGluZzsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRlbXAg
PSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisKKyAgICAgICAgICAgICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcHJvcGVydHlOYW1lOworICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0LnByb3Bl
cnR5RXhwcmVzc2lvbikgeworICAgICAgICAgICAgICAgICAgICBPcHRpb25hbDx1aW50MzJfdD4g
b3B0aW9uYWxJbmRleCA9IHBhcnNlSW5kZXgodGFyZ2V0LnByb3BlcnR5TmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghb3B0aW9uYWxJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0R2V0QnlJZCh0ZW1wLmdldCgpLCByaHMsIHRhcmdldC5wcm9wZXJ0eU5h
bWUpOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eUluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKG51
bGxwdHIsIGpzTnVtYmVyKG9wdGlvbmFsSW5kZXgudmFsdWUoKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbCh0ZW1wLmdldCgpLCByaHMsIHByb3BlcnR5
SW5kZXguZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIG1fY29udGFpbnNDb21w
dXRlZFByb3BlcnR5IGFuZCB0YXJnZXQucHJvcGVydHlFeHByZXNzaW9uIHJlbGF0aW9uc2hpcC4K
KyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9y
UHJvcGVydHkoYXJncy0+YXJndW1lbnRSZWdpc3RlcihpbmRleEluQXJndW1lbnRzKyspLCB0YXJn
ZXQucHJvcGVydHlFeHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRHZXRCeVZhbCh0ZW1wLmdldCgpLCByaHMsIHByb3BlcnR5TmFtZS5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKG1fY29udGFpbnNSZXN0RWxlbWVudCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAobV9jb250YWluc0NvbXB1dGVkUHJvcGVydHkgJiYg
dGFyZ2V0LnByb3BlcnR5RXhwcmVzc2lvbikKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5TmFtZSA9IGdlbmVyYXRvci5lbWl0VG9Qcm9wZXJ0eUtleShnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKHByb3BlcnR5TmFtZS5nZXQoKSksIHByb3BlcnR5TmFtZS5nZXQoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9
IGdlbmVyYXRvci5lbWl0TG9hZChudWxscHRyLCB0YXJnZXQucHJvcGVydHlOYW1lKTsKLQotICAg
ICAgICAgICAgICAgICAgICBDYWxsQXJndW1lbnRzIGFyZ3MoZ2VuZXJhdG9yLCBudWxscHRyLCAx
KTsKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy50aGlzUmVnaXN0ZXIo
KSwgZXhjbHVkZWRMaXN0LmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLm1v
dmUoYXJncy5hcmd1bWVudFJlZ2lzdGVyKDApLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOwotICAgICAg
ICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCBhZGRNZXRob2QuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncywgZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOwotICAgICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBleGNsdWRlZFNldC5hZGQodGFyZ2V0LnBy
b3BlcnR5TmFtZS5pbXBsKCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgZXhjbHVkZWRTZXQuYWRkKHRhcmdldC5wcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh0YXJnZXQuZGVmYXVsdFZhbHVlKQotICAgICAg
ICAgICAgICAgIGFzc2lnbkRlZmF1bHRWYWx1ZUlmVW5kZWZpbmVkKGdlbmVyYXRvciwgdGVtcC5n
ZXQoKSwgdGFyZ2V0LmRlZmF1bHRWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0QmluZGlu
ZykKLSAgICAgICAgICAgICAgICBmaW5pc2hEaXJlY3RCaW5kaW5nQXNzaWdubWVudCgpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRhcmdldC5wYXR0ZXJuLT5iaW5kVmFsdWUo
Z2VuZXJhdG9yLCB0ZW1wLmdldCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFT
U0VSVCh0YXJnZXQuYmluZGluZ1R5cGUgPT0gQmluZGluZ1R5cGU6OlJlc3RFbGVtZW50KTsKLSAg
ICAgICAgICAgIEFTU0VSVChpID09IG1fdGFyZ2V0UGF0dGVybnMuc2l6ZSgpIC0gMSk7Ci0gICAg
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbmV3T2JqZWN0ID0gZ2VuZXJhdG9yLmVtaXROZXdP
YmplY3QoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gbG9hZCBhbmQgY2FsbCBAY29weURhdGFQcm9wZXJ0aWVzCi0gICAgICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gY29weURhdGFQcm9wZXJ0aWVzID0gZ2VuZXJhdG9yLm1vdmVMaW5rVGlt
ZUNvbnN0YW50KG51bGxwdHIsIExpbmtUaW1lQ29uc3RhbnQ6OmNvcHlEYXRhUHJvcGVydGllcyk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIENhbGxBcmd1bWVudHMgYXJncyhnZW5lcmF0b3Is
IG51bGxwdHIsIDMpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGFyZ3MudGhpc1Jl
Z2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJn
cy5hcmd1bWVudFJlZ2lzdGVyKDApLCBuZXdPYmplY3QuZ2V0KCkpOwotICAgICAgICAgICAgZ2Vu
ZXJhdG9yLm1vdmUoYXJncy5hcmd1bWVudFJlZ2lzdGVyKDEpLCByaHMpOwotICAgICAgICAgICAg
aWYgKG1fY29udGFpbnNDb21wdXRlZFByb3BlcnR5KQotICAgICAgICAgICAgICAgIGdlbmVyYXRv
ci5tb3ZlKGFyZ3MuYXJndW1lbnRSZWdpc3RlcigyKSwgZXhjbHVkZWRMaXN0LmdldCgpKTsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNs
dWRlZFNldFJlZyA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCks
IGV4Y2x1ZGVkU2V0KTsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IubW92ZShhcmdzLmFyZ3Vt
ZW50UmVnaXN0ZXIoMiksIGV4Y2x1ZGVkU2V0UmVnLmdldCgpKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAodGFyZ2V0LmRlZmF1bHRWYWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgYXNzaWduRGVmYXVsdFZhbHVlSWZVbmRlZmluZWQoZ2VuZXJhdG9yLCB0ZW1wLmdldCgpLCB0
YXJnZXQuZGVmYXVsdFZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoZGlyZWN0QmluZGluZykK
KyAgICAgICAgICAgICAgICAgICAgZmluaXNoRGlyZWN0QmluZGluZ0Fzc2lnbm1lbnQoKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXR0ZXJuLT5i
aW5kVmFsdWUoZ2VuZXJhdG9yLCB0ZW1wLmdldCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKHRhcmdldC5iaW5kaW5nVHlwZSA9PSBCaW5kaW5nVHlwZTo6
UmVzdEVsZW1lbnQpOworICAgICAgICAgICAgICAgIEFTU0VSVChpID09IG1fdGFyZ2V0UGF0dGVy
bnMuc2l6ZSgpIC0gMSk7CiAKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIGNvcHlEYXRhUHJvcGVydGllcy5nZXQoKSwgTm9FeHBlY3RlZEZ1
bmN0aW9uLCBhcmdzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2Fi
bGVDYWxsOjpObyk7Ci0gICAgICAgICAgICB0YXJnZXQucGF0dGVybi0+YmluZFZhbHVlKGdlbmVy
YXRvciwgbmV3T2JqZWN0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5l
d09iamVjdChuZXdPYmplY3QuZ2V0KCkpOworCisgICAgICAgICAgICAgICAgLy8gbG9hZCBhbmQg
Y2FsbCBAY29weURhdGFQcm9wZXJ0aWVzCisgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGNvcHlEYXRhUHJvcGVydGllcyA9IGdlbmVyYXRvci5tb3ZlTGlua1RpbWVDb25zdGFudChu
dWxscHRyLCBMaW5rVGltZUNvbnN0YW50Ojpjb3B5RGF0YVByb3BlcnRpZXMpOworCisgICAgICAg
ICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy0+dGhpc1JlZ2lzdGVyKCksIG5ld09iamVjdC5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy0+YXJndW1lbnRSZWdp
c3RlcigwKSwgcmhzKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoYXJncy0+
YXJndW1lbnRSZWdpc3RlcigxKSwgV1RGTW92ZShleGNsdWRlZFNldCkpOworICAgICAgICAgICAg
ICAgIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGNvcHlEYXRh
UHJvcGVydGllcy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBhcmdzLnZhbHVlKCksIGRpdm90
KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKKyAgICAg
ICAgICAgICAgICB0YXJnZXQucGF0dGVybi0+YmluZFZhbHVlKGdlbmVyYXRvciwgbmV3T2JqZWN0
LmdldCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtNTYxNiwxMCAr
NTYxMCw5IEBAIFJlZ2lzdGVySUQqIE9iamVjdFNwcmVhZEV4cHJlc3Npb25Ob2RlOjplbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvCiAgICAgCiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGNvcHlEYXRhUHJvcGVydGllcyA9IGdlbmVyYXRvci5tb3ZlTGlua1RpbWVDb25zdGFu
dChudWxscHRyLCBMaW5rVGltZUNvbnN0YW50Ojpjb3B5RGF0YVByb3BlcnRpZXMpOwogICAgIAot
ICAgIENhbGxBcmd1bWVudHMgYXJncyhnZW5lcmF0b3IsIG51bGxwdHIsIDIpOwotICAgIGdlbmVy
YXRvci5lbWl0TG9hZChhcmdzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICBn
ZW5lcmF0b3IubW92ZShhcmdzLmFyZ3VtZW50UmVnaXN0ZXIoMCksIGRzdCk7Ci0gICAgZ2VuZXJh
dG9yLm1vdmUoYXJncy5hcmd1bWVudFJlZ2lzdGVyKDEpLCBzcmMuZ2V0KCkpOworICAgIENhbGxB
cmd1bWVudHMgYXJncyhnZW5lcmF0b3IsIG51bGxwdHIsIDEpOworICAgIGdlbmVyYXRvci5tb3Zl
KGFyZ3MudGhpc1JlZ2lzdGVyKCksIGRzdCk7CisgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy5hcmd1
bWVudFJlZ2lzdGVyKDApLCBzcmMuZ2V0KCkpOwogICAgIAogICAgIGdlbmVyYXRvci5lbWl0Q2Fs
bChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGNvcHlEYXRhUHJvcGVydGllcy5nZXQoKSwgTm9F
eHBlY3RlZEZ1bmN0aW9uLCBhcmdzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCks
IERlYnVnZ2FibGVDYWxsOjpObyk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWRUeXBlcy5jcHAKaW5kZXggZTMwMjRkODdhODU4NzljYzc5NzcwNDM3NjdlNWYx
N2Y5ZjUzNjc4MS4uZWQyMjkxZjM1Zjc1ZmJiYTYyNjMyOGRkMDBkZTIxNDRhNWQ5YzQ5MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApAQCAtOTYy
LDI1ICs5NjIsNiBAQCBjbGFzcyBDYWNoZWRIYXNoU2V0IDogcHVibGljIENhY2hlZE9iamVjdDxI
YXNoU2V0PFNvdXJjZVR5cGU8VD4sIEhhc2hBcmc+PiB7CiAgICAgQ2FjaGVkVmVjdG9yPFQ+IG1f
ZW50cmllczsKIH07CiAKLWNsYXNzIENhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5IDog
cHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiB7
Ci1wdWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29uc3Rh
bnRJZGVudGlmaWVyU2V0RW50cnkmIGVudHJ5KQotICAgIHsKLSAgICAgICAgbV9jb25zdGFudCA9
IGVudHJ5LnNlY29uZDsKLSAgICAgICAgbV9zZXQuZW5jb2RlKGVuY29kZXIsIGVudHJ5LmZpcnN0
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDb25zdGFudElk
ZW50aWZpZXJTZXRFbnRyeSYgZW50cnkpIGNvbnN0Ci0gICAgewotICAgICAgICBlbnRyeS5zZWNv
bmQgPSBtX2NvbnN0YW50OwotICAgICAgICBtX3NldC5kZWNvZGUoZGVjb2RlciwgZW50cnkuZmly
c3QpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX2NvbnN0YW50OwotICAgIENh
Y2hlZEhhc2hTZXQ8Q2FjaGVkUmVmUHRyPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPiwgSWRlbnRp
ZmllclJlcEhhc2g+IG1fc2V0OwotfTsKLQogY2xhc3MgQ2FjaGVkQ29kZUJsb2NrUmFyZURhdGEg
OiBwdWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YT4gewogcHVi
bGljOgogICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkQ29k
ZUJsb2NrOjpSYXJlRGF0YSYgcmFyZURhdGEpCkBAIC0xMDIxLDcgKzEwMDIsNyBAQCBjbGFzcyBD
YWNoZWRDb2RlQmxvY2tSYXJlRGF0YSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VW5saW5rZWRDb2Rl
QmxvY2s6OlJhcmVEYXRhPgogICAgIENhY2hlZEhhc2hNYXA8dW5zaWduZWQsIFVubGlua2VkQ29k
ZUJsb2NrOjpSYXJlRGF0YTo6VHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlPiBtX3R5cGVQcm9m
aWxlckluZm9NYXA7CiAgICAgQ2FjaGVkVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+
IG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7CiAgICAgQ2FjaGVkVmVjdG9y
PENhY2hlZEJpdFZlY3Rvcj4gbV9iaXRWZWN0b3JzOwotICAgIENhY2hlZFZlY3RvcjxDYWNoZWRD
b25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOworICAg
IENhY2hlZFZlY3RvcjxDYWNoZWRIYXNoU2V0PENhY2hlZFJlZlB0cjxDYWNoZWRVbmlxdWVkU3Ry
aW5nSW1wbD4sIElkZW50aWZpZXJSZXBIYXNoPj4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOwog
ICAgIHVuc2lnbmVkIG1fbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgOiAxOwogICAgIHVuc2ln
bmVkIG1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgOiAxOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcApp
bmRleCA0MDIxZmM3ZTBhZGFmN2EwYTllMGVmNmNmZDIyNTgzOGI1YmY4NzgzLi40YjVmZmNiMGMy
OWMzOTFjMWE1Yjc5ZTllMmZmZWNhNTIzYWI4NGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCkBAIC0y
Nyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJJbmRpcmVj
dEV2YWxFeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lLmgiCiAjaW5jbHVk
ZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJJbnRsRGF0ZVRpbWVGb3JtYXQuaCIKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCkBAIC04NDAsMjggKzg0MSw0NyBAQCBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oZ2xvYmFsRnVuY0NvcHlEYXRhUHJvcGVydGllcywgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYgogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBKU0ZpbmFsT2JqZWN0KiB0YXJnZXQg
PSBqc0Nhc3Q8SlNGaW5hbE9iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OworICAgIEpTRmluYWxPYmplY3QqIHRhcmdldCA9IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2Fs
bEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgQVNTRVJUKHRhcmdldC0+aXNTdHJ1Y3R1cmVFeHRl
bnNpYmxlKHZtKSk7CiAKLSAgICBKU1ZhbHVlIHNvdXJjZVZhbHVlID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgxKTsKKyAgICBKU1ZhbHVlIHNvdXJjZVZhbHVlID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBpZiAoc291cmNlVmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0YXJnZXQpOwogCiAgICAgSlNPYmplY3QqIHNv
dXJjZSA9IHNvdXJjZVZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgc2NvcGUuYXNz
ZXJ0Tm9FeGNlcHRpb24oKTsKIAotICAgIEpTU2V0KiBleGNsdWRlZFNldCA9IG51bGxwdHI7Ci0g
ICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpID4gMikKLSAgICAgICAgZXhjbHVkZWRT
ZXQgPSBqc0Nhc3Q8SlNTZXQqPihjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKKyAg
ICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSBudWxscHRyOworICAgIGNv
bnN0IElkZW50aWZpZXJTZXQqIGV4Y2x1ZGVkU2V0ID0gbnVsbHB0cjsKKyAgICBPcHRpb25hbDxJ
ZGVudGlmaWVyU2V0PiBuZXdseUNyZWF0ZWRTZXQ7CisgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1l
bnRDb3VudCgpID4gMSkgeworICAgICAgICBpbnQzMl90IHNldEluZGV4ID0gY2FsbEZyYW1lLT51
bmNoZWNrZWRBcmd1bWVudCgxKS5hc0ludDMyQXNBbnlJbnQoKTsKKyAgICAgICAgQ2FsbEZyYW1l
KiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2s7CisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNhbGxlckZy
YW1lLT5jb2RlT3JpZ2luKCk7CisgICAgICAgIGlmIChjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKCkpCisgICAgICAgICAgICBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVC
bG9ja0ZvcklubGluZUNhbGxGcmFtZShjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgY29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9j
aygpOworICAgICAgICBBU1NFUlQoY29kZUJsb2NrKTsKKyAgICAgICAgdW5saW5rZWRDb2RlQmxv
Y2sgPSBjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CisgICAgICAgIGV4Y2x1ZGVkU2V0
ID0gJnVubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudElkZW50aWZpZXJTZXRzKClbc2V0SW5kZXhd
OworICAgICAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPiAyKSB7CisgICAgICAg
ICAgICBuZXdseUNyZWF0ZWRTZXQuZW1wbGFjZSgqZXhjbHVkZWRTZXQpOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDI7IGluZGV4IDwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50
KCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaW5kZXgpLnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAg
ICAgICAgICAgICAgIG5ld2x5Q3JlYXRlZFNldC0+YWRkKHByb3BlcnR5TmFtZS5pbXBsKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhjbHVkZWRTZXQgPSAmbmV3bHlDcmVhdGVkU2V0
LnZhbHVlKCk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBhdXRvIGlzUHJvcGVydHlOYW1lRXhj
bHVkZWQgPSBbJl0gKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpIC0+IGJvb2wgeworICAgIGF1dG8gaXNQcm9wZXJ0eU5hbWVFeGNsdWRlZCA9
IFsmXSAoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgLT4gYm9vbCB7CiAgICAgICAgIEFTU0VS
VCghcHJvcGVydHlOYW1lLmlzUHJpdmF0ZU5hbWUoKSk7CiAgICAgICAgIGlmICghZXhjbHVkZWRT
ZXQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgSlNWYWx1ZSBwcm9wZXJ0
eU5hbWVWYWx1ZSA9IGlkZW50aWZpZXJUb0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQo
dm0sIHByb3BlcnR5TmFtZS51aWQoKSkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBmYWxzZSk7Ci0gICAgICAgIHJldHVybiBleGNsdWRlZFNldC0+aGFzKGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lVmFsdWUpOworICAgICAgICByZXR1cm4gZXhjbHVkZWRTZXQtPmNvbnRh
aW5zKHByb3BlcnR5TmFtZS51aWQoKSk7CiAgICAgfTsKIAogICAgIGlmICghc291cmNlLT5zdGF0
aWNQcm9wZXJ0aWVzUmVpZmllZCh2bSkpIHsKQEAgLTg4OCw2ICs5MDgsOSBAQCBKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVuY0NvcHlEYXRhUHJvcGVydGllcywgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYgogICAgICAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAg
ICAgICAgICAgIGlmIChpc1Byb3BlcnR5TmFtZUV4Y2x1ZGVkKHByb3BlcnR5TmFtZSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICAgICAgICAgIHByb3BlcnRpZXMuYXBwZW5k
KGVudHJ5LmtleSk7CiAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kV2l0aENyYXNoT25PdmVyZmxv
dyhzb3VyY2UtPmdldERpcmVjdChlbnRyeS5vZmZzZXQpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtODk4LDEwICs5MjEsNiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZ2xvYmFs
RnVuY0NvcHlEYXRhUHJvcGVydGllcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBwdXQgcHJvcGVydGllcyBpbiBhIGJhdGNoaW5nIG1h
bm5lciB0byBhY2NlbGVyYXRlIENvcHlEYXRhUHJvcGVydGllcyBtb3JlLgogICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTM1OAotICAgICAg
ICAgICAgYm9vbCBleGNsdWRlZCA9IGlzUHJvcGVydHlOYW1lRXhjbHVkZWQoZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0aWVzW2ldLmdldCgpKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICBpZiAoZXhjbHVkZWQpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB0YXJnZXQtPnB1dERpcmVjdCh2bSwgcHJvcGVydGllc1tp
XS5nZXQoKSwgdmFsdWVzLmF0KGkpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC05MTAs
OSArOTI5LDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGdsb2JhbEZ1bmNDb3B5RGF0YVBy
b3BlcnRpZXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHByb3BlcnR5
TmFtZSA6IHByb3BlcnR5TmFtZXMpIHsKLSAgICAgICAgICAgIGJvb2wgZXhjbHVkZWQgPSBpc1By
b3BlcnR5TmFtZUV4Y2x1ZGVkKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICBpZiAoZXhj
bHVkZWQpCisgICAgICAgICAgICBpZiAoaXNQcm9wZXJ0eU5hbWVFeGNsdWRlZChwcm9wZXJ0eU5h
bWUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBQcm9wZXJ0eVNs
b3Qgc2xvdChzb3VyY2UsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Q
cm9wZXJ0eSk7CkBAIC05MzUsNyArOTUyLDggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGds
b2JhbEZ1bmNDb3B5RGF0YVByb3BlcnRpZXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAg
ICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUodW5saW5rZWRDb2RlQmxvY2spOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUodGFyZ2V0KTsKIH0KIAogSlNDX0RFRklORV9IT1NUX0ZVTkNU
SU9OKGdsb2JhbEZ1bmNEYXRlVGltZUZvcm1hdCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKSkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9n
IGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDQxZmYxNDI3NTMzOTU4N2QxNDAxZjIxODkwNDNm
N2YzYTNhOWJmNy4uYTVjNTVkNmI5MzRlYTAzNzViMmM5ZjU1MDMyMDQxMjI5ODViNzQ1ZSAxMDA2
NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMS0wMi0xMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFNpbXBsaWZ5IGV4Y2x1ZGVkU2V0IGhhbmRsaW5nIGluIG9iamVj
dCByZXN0IGV4cHJlc3Npb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMTY2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL29iamVjdC1yZXN0LWNvbXB1dGVkLWRlc3RydWN0
dXJpbmcuanM6IEFkZGVkLgorCiAyMDIxLTAyLTA5ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBh
cHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gQysrIGl0ZXJhdGlvbiBzaG91bGQgc3VwcG9ydCBm
YXN0IGl0ZXJhdG9yIHByb3RvY29sCmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9vYmplY3QtcmVzdC1jb21wdXRlZC1kZXN0cnVjdHVyaW5nLmpzIGIvSlNUZXN0cy9taWNyb2Jl
bmNobWFya3Mvb2JqZWN0LXJlc3QtY29tcHV0ZWQtZGVzdHJ1Y3R1cmluZy5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42MzQ5ZDkzZDcyYzM2Y2UxNjRkZmJlMDI5NDhiM2Y4MzNhYWUxY2QwCi0tLSAvZGV2L251bGwK
KysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvb2JqZWN0LXJlc3QtY29tcHV0ZWQtZGVzdHJ1
Y3R1cmluZy5qcwpAQCAtMCwwICsxLDEyIEBACisoZnVuY3Rpb24oa2V5MSwga2V5Miwga2V5Mykg
eworICAgIHZhciBvYmogPSB7IGE6IDAsIGI6IDAsIGM6IDAsIGQ6IDEsIGU6IDAsIGY6IDAsIGc6
IDAsIGg6IDAsIGk6IDAsIGo6IDAgfTsKKyAgICB2YXIgYWNjID0gMDsKKworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMWU1OyBpKyspIHsKKyAgICAgICAgdmFyIHsgW2tleTFdOiBhLCBba2V5Ml06
IGIsIFtrZXkzXTogYywgLi4ucmVzdCB9ID0gb2JqOworICAgICAgICBhY2MgKz0gcmVzdC5kOwor
ICAgIH0KKworICAgIGlmIChhY2MgIT09IDFlNSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJC
YWQgYXNzZXJ0aW9uISIpOworfSkoJ2EnLCAnYicsICdjJyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419891</attachid>
            <date>2021-02-10 12:43:28 -0800</date>
            <delta_ts>2021-02-13 01:00:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221668-20210210124327.patch</filename>
            <type>text/plain</type>
            <size>31882</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNjM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
MTM0YTFmMmZmMGY5ZDM5MDU5YmZmNDA2ZjNlMjJlZDNlZDEwMTk0Li41MDJiZjIyNTBlOTgyNzhl
YWVlZmJkMzAwMTFlNjg0NDFhMmE0OWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAyMS0wMi0xMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFNpbXBsaWZ5IGV4Y2x1ZGVkU2V0IGhhbmRsaW5nIGluIG9iamVj
dCByZXN0IGV4cHJlc3Npb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMTY2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0Q29uc3Rh
bnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRJZGVudGlmaWVyU2V0cyk6Cisg
ICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaDoKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmNvbnN0YW50SWRlbnRpZmllclNldHMp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRkU2V0Q29uc3Rh
bnQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6Ok9iamVjdFBhdHRlcm5Ob2RlOjpiaW5kVmFsdWUg
Y29uc3QpOgorICAgICAgICAoSlNDOjpPYmplY3RTcHJlYWRFeHByZXNzaW9uTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk6OmVuY29kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5OjpkZWNvZGUgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorCiAyMDIxLTAy
LTA5ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10g
QysrIGl0ZXJhdGlvbiBzaG91bGQgc3VwcG9ydCBmYXN0IGl0ZXJhdG9yIHByb3RvY29sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDA2MmRmYWMy
ZTQ5ZWYwOWU4Y2E5YmQ4Yzk2ZDZjNTRiNjZiMGUyN2IuLjVlYTBjYWU4YjVmODBmNDdhOTk0M2I5
YmM5ODMyZmE1M2I5NDJiMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCkBAIC00MjIsOSArNDIyLDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsK
ICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPmhhc1JhcmVEYXRhKCkpIHsKICAgICAgICAgY3Jl
YXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwogCi0gICAgICAgIHNldENvbnN0YW50SWRlbnRpZmll
clNldFJlZ2lzdGVycyh2bSwgdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50SWRlbnRpZmllclNl
dHMoKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwot
CiAgICAgICAgIGlmIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZF
eGNlcHRpb25IYW5kbGVycygpKSB7CiAgICAgICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlv
bkhhbmRsZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykgewpAQCAtODkwLDI4ICs4ODcsNiBAQCBDb2RlQmxvY2s6On5D
b2RlQmxvY2soKQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKLXZvaWQgQ29kZUJsb2NrOjpz
ZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mIHZtLCBjb25zdCBSZWZDb3VudGVk
QXJyYXk8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpCi17Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKLQotICAgIGZvciAoY29uc3QgYXV0
byYgZW50cnkgOiBjb25zdGFudHMpIHsKLSAgICAgICAgY29uc3QgSWRlbnRpZmllclNldCYgc2V0
ID0gZW50cnkuZmlyc3Q7Ci0KLSAgICAgICAgU3RydWN0dXJlKiBzZXRTdHJ1Y3R1cmUgPSBnbG9i
YWxPYmplY3QtPnNldFN0cnVjdHVyZSgpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwotICAgICAgICBKU1NldCoganNTZXQgPSBKU1NldDo6Y3JlYXRlKGdsb2Jh
bE9iamVjdCwgdm0sIHNldFN0cnVjdHVyZSwgc2V0LnNpemUoKSk7Ci0gICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0KLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBz
ZXRFbnRyeSA6IHNldCkgewotICAgICAgICAgICAgSlNTdHJpbmcqIGpzU3RyaW5nID0ganNPd25l
ZFN0cmluZyh2bSwgc2V0RW50cnkuZ2V0KCkpOyAKLSAgICAgICAgICAgIGpzU2V0LT5hZGQoZ2xv
YmFsT2JqZWN0LCBqc1N0cmluZyk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB2b2lkKCkpOwotICAgICAgICB9Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbZW50
cnkuc2Vjb25kXS5zZXQodm0sIHRoaXMsIGpzU2V0KTsKLSAgICB9Ci19Ci0KIHZvaWQgQ29kZUJs
b2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJy
aWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTY3Jp
cHRFeGVjdXRhYmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpCiB7CiAgICAgVk0mIHZtID0gKm1fdm07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggZGZjZTdl
NGYzMDVlMGRjY2Q5Y2YxMTQxODg4MjFjMDMzMTdjMjNkYi4uMDI2OGZjYWY2Y2ZlMzQ0NTQ5NjQ3
ZjExMmU4YmMxNDE4MDY3NDc2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaApAQCAtOTUzLDggKzk1Myw2IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBK
U0NlbGwgewogCiAgICAgdm9pZCB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENv
dW50TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxl
cywgdW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpOwogCi0gICAgdm9pZCBzZXRD
b25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8
Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpOwotCiAgICAgdm9pZCBzZXRD
b25zdGFudFJlZ2lzdGVycyhjb25zdCBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPFVua25v
d24+PiYgY29uc3RhbnRzLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTY3JpcHRFeGVjdXRh
YmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpOwogCiAgICAgdm9pZCByZXBsYWNlQ29uc3RhbnQoVmly
dHVhbFJlZ2lzdGVyIHJlZywgSlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggMWY1MWVjZTVkNmY4NmQ3
MDk1MTFiNGE0YzE4MmM2NGNiZmExODNiZi4uOWFjZGI0YzVmMjU5ZTI2Yjc4MDllNGE0MWM4ZTFj
ZTNiZDNlZDVhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgKQEAgLTc0LDcgKzc0LDYgQEAgdHlwZWRlZiB1bnNpZ25lZCBVbmxp
bmtlZEFycmF5UHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRBcnJheUFsbG9jYXRp
b25Qcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZE9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlOwogdHlwZWRlZiB1bnNpZ25lZCBVbmxpbmtlZExMSW50Q2FsbExpbmtJbmZvOwotdXNpbmcg
Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnkgPSBzdGQ6OnBhaXI8SWRlbnRpZmllclNldCwgdW5z
aWduZWQ+OwogCiBzdHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUgewogICAgIHN0cnVjdCBP
ZmZzZXRMb2NhdGlvbiB7CkBAIC0xNjIsNyArMTYxLDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxv
Y2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8U291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyBy
ZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIAogICAgIHVuc2ln
bmVkIG51bWJlck9mQ29uc3RhbnRJZGVudGlmaWVyU2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmFy
ZURhdGEgPyBtX3JhcmVEYXRhLT5tX2NvbnN0YW50SWRlbnRpZmllclNldHMuc2l6ZSgpIDogMDsg
fQotICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4m
IGNvbnN0YW50SWRlbnRpZmllclNldHMoKSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1f
cmFyZURhdGEtPm1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsgfQorICAgIGNvbnN0IFJlZkNvdW50
ZWRBcnJheTxJZGVudGlmaWVyU2V0PiYgY29uc3RhbnRJZGVudGlmaWVyU2V0cygpIHsgQVNTRVJU
KG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRz
OyB9CiAKICAgICAvLyBKdW1wcwogICAgIHNpemVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29u
c3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5zaXplKCk7IH0KQEAgLTQxMSw3ICs0MTAsNyBAQCBj
bGFzcyBVbmxpbmtlZENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgICAgICBIYXNoTWFw
PHVuc2lnbmVkLCBUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+IG1fdHlwZVByb2ZpbGVySW5m
b01hcDsKICAgICAgICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+
IG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7CiAgICAgICAgIFJlZkNvdW50
ZWRBcnJheTxCaXRWZWN0b3I+IG1fYml0VmVjdG9yczsKLSAgICAgICAgUmVmQ291bnRlZEFycmF5
PENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7Cisg
ICAgICAgIFJlZkNvdW50ZWRBcnJheTxJZGVudGlmaWVyU2V0PiBtX2NvbnN0YW50SWRlbnRpZmll
clNldHM7CiAKICAgICAgICAgdW5zaWduZWQgbV9uZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciA6
IDE7CiAgICAgICAgIHVuc2lnbmVkIG1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgOiAxOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3IuaAppbmRleCA5NGM2ODcwZTk5NGMyYmY1Yzk4MmNlOTUyZTRjNTM0YmRj
OTZiNDg4Li40ODM4MDUxYzg4OTk4YmMxNWFlMmMzYmQ0NWZmN2JmMWI4ZTJlYjIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3IuaApAQCAtMTExLDE0ICsxMTEsMTMgQEAgY2xhc3MgVW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3IgewogICAgIH0KIAogICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRJ
ZGVudGlmaWVyU2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0cy5z
aXplKCk7IH0KLSAgICBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBj
b25zdGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1cm4gbV9jb25zdGFudElkZW50aWZpZXJTZXRz
OyB9Ci0gICAgdm9pZCBhZGRTZXRDb25zdGFudChJZGVudGlmaWVyU2V0JiBzZXQpCisgICAgY29u
c3QgVmVjdG9yPElkZW50aWZpZXJTZXQ+JiBjb25zdGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1
cm4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOyB9CisgICAgdW5zaWduZWQgYWRkU2V0Q29uc3Rh
bnQoSWRlbnRpZmllclNldCYmIHNldCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3ZtLmhlYXAu
aXNEZWZlcnJlZCgpKTsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lz
dGVycy5zaXplKCk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFy
cmllcjxVbmtub3duPigpKTsKLSAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwotICAgICAgICBt
X2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5kKENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5
KHNldCwgcmVzdWx0KSk7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRJZGVu
dGlmaWVyU2V0cy5zaXplKCk7CisgICAgICAgIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0cy5hcHBl
bmQoV1RGTW92ZShzZXQpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBj
b25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFu
dEluZGV4KCldOyB9CkBAIC0yMTAsNyArMjA5LDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tH
ZW5lcmF0b3IgewogICAgIEhhc2hNYXA8dW5zaWduZWQsIFVubGlua2VkQ29kZUJsb2NrOjpSYXJl
RGF0YTo6VHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlPiBtX3R5cGVQcm9maWxlckluZm9NYXA7
CiAgICAgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IG1fb3BQcm9maWxlQ29udHJv
bEZsb3dCeXRlY29kZU9mZnNldHM7CiAgICAgVmVjdG9yPEJpdFZlY3Rvcj4gbV9iaXRWZWN0b3Jz
OwotICAgIFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50
aWZpZXJTZXRzOworICAgIFZlY3RvcjxJZGVudGlmaWVyU2V0PiBtX2NvbnN0YW50SWRlbnRpZmll
clNldHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggNGU1
NzE5ZWY4MjU4ZjNiMjlmZTYwZDc2ZGIyMDJkMmY5YjI4YTU3ZS4uZTQzYzRjZDc0YzczNmQ2NGY2
NzU1OTczN2MwNDEyZTRkNGM2MDMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTE4NDAsMjUgKzE4
NDAsMTAgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVy
SUQqIGRzdCwgSlNWYWx1ZSB2LCBTb3VyY2VDb2RlUmUKICAgICByZXR1cm4gY29uc3RhbnRJRDsK
IH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQq
IGRzdCwgSWRlbnRpZmllclNldCYgc2V0KQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSWRlbnRpZmllclNldCYmIHNldCkKIHsKLSAgICBp
ZiAobV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRJZGVudGlmaWVyU2V0cygpKSB7Ci0gICAg
ICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX2NvZGVCbG9jay0+Y29uc3RhbnRJZGVudGlm
aWVyU2V0cygpKSB7Ci0gICAgICAgICAgICBpZiAoZW50cnkuZmlyc3QgIT0gc2V0KQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gJm1f
Y29uc3RhbnRQb29sUmVnaXN0ZXJzW2VudHJ5LnNlY29uZF07Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgdW5zaWduZWQgaW5kZXggPSBhZGRDb25zdGFudEluZGV4KCk7Ci0gICAgbV9jb2Rl
QmxvY2stPmFkZFNldENvbnN0YW50KHNldCk7Ci0gICAgUmVnaXN0ZXJJRCogbV9zZXRSZWdpc3Rl
ciA9ICZtX2NvbnN0YW50UG9vbFJlZ2lzdGVyc1tpbmRleF07Ci0gICAgCi0gICAgaWYgKGRzdCkK
LSAgICAgICAgcmV0dXJuIG1vdmUoZHN0LCBtX3NldFJlZ2lzdGVyKTsKLSAgICAKLSAgICByZXR1
cm4gbV9zZXRSZWdpc3RlcjsKKyAgICB1bnNpZ25lZCBzZXRJbmRleCA9IG1fY29kZUJsb2NrLT5h
ZGRTZXRDb25zdGFudChXVEZNb3ZlKHNldCkpOworICAgIHJldHVybiBlbWl0TG9hZChkc3QsIGpz
TnVtYmVyKHNldEluZGV4KSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIExvb2tVcFZhcktpbmRG
dW5jdG9yPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCmluZGV4IGJiZmI1NjgxOThmNDQ0NTU3ZGEzMTMzYzI5NjYzY2Q0
MjAxZTdiZTUuLmJkOGQ3YTVkMTBiYWQ0YTg0MjhhNGZiNzVkNzA3MDgwYWEzYTA5MDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKQEAgLTcwNSw3ICs3MDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBib29sKTsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSlNWYWx1ZSwgU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSWRlbnRpZmllclNl
dCYgZXhjbHVkZWRMaXN0KTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJ
RCogZHN0LCBJZGVudGlmaWVyU2V0JiYgZXhjbHVkZWRMaXN0KTsKIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVbmFyeU9wLCB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8VW5hcnlPcDo6
b3Bjb2RlSUQgIT0gb3BfbmVnYXRlPj4KICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFVuYXJ5T3Ao
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5kZXggNGMwOGEzM2QzZjg3
YmI0MmJlM2Y4ZjZjZGJhNWZhMDM3MDA3OGU1Zi4uYmQ2YjAxMTZlNzExMjQxNGJmNTQ0ZmM5ZGFh
OTlkZDAzMjI4MjkxNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtNTI5OSwxMTMgKzUyOTksMTA3IEBAIHZvaWQgT2Jq
ZWN0UGF0dGVybk5vZGU6OmJpbmRWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiByaHMpCiB7CiAgICAgZ2VuZXJhdG9yLmVtaXRSZXF1aXJlT2JqZWN0Q29lcmNp
YmxlKHJocywgIlJpZ2h0IHNpZGUgb2YgYXNzaWdubWVudCBjYW5ub3QgYmUgZGVzdHJ1Y3R1cmVk
Il9zKTsKIAotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNsdWRlZExpc3Q7Ci0gICAgSWRlbnRp
ZmllclNldCBleGNsdWRlZFNldDsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYWRkTWV0aG9kOwot
ICAgIGlmIChtX2NvbnRhaW5zUmVzdEVsZW1lbnQgJiYgbV9jb250YWluc0NvbXB1dGVkUHJvcGVy
dHkpIHsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNldENvbnN0cnVjdG9yID0gZ2VuZXJh
dG9yLm1vdmVMaW5rVGltZUNvbnN0YW50KG51bGxwdHIsIExpbmtUaW1lQ29uc3RhbnQ6OlNldCk7
Ci0KLSAgICAgICAgQ2FsbEFyZ3VtZW50cyBhcmdzKGdlbmVyYXRvciwgbnVsbHB0ciwgMCk7Ci0g
ICAgICAgIGV4Y2x1ZGVkTGlzdCA9IGdlbmVyYXRvci5lbWl0Q29uc3RydWN0KGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKSwgc2V0Q29uc3RydWN0b3IuZ2V0KCksIHNldENvbnN0cnVjdG9yLmdldCgp
LCBOb0V4cGVjdGVkRnVuY3Rpb24sIGFyZ3MsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSk7Ci0KLSAgICAgICAgYWRkTWV0aG9kID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgZXhjbHVkZWRMaXN0LmdldCgpLCBnZW5lcmF0b3IucHJvcGVy
dHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmFkZFByaXZhdGVOYW1lKCkpOwotICAgIH0KLQogICAg
IEJ5dGVjb2RlR2VuZXJhdG9yOjpQcmVzZXJ2ZWRURFpTdGFjayBwcmVzZXJ2ZWRURFpTdGFjazsK
ICAgICBnZW5lcmF0b3IucHJlc2VydmVURFpTdGFjayhwcmVzZXJ2ZWRURFpTdGFjayk7CiAKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGFyZ2V0UGF0dGVybnMuc2l6ZSgpOyBpKyspIHsK
LSAgICAgICAgY29uc3QgYXV0byYgdGFyZ2V0ID0gbV90YXJnZXRQYXR0ZXJuc1tpXTsKLSAgICAg
ICAgaWYgKHRhcmdldC5iaW5kaW5nVHlwZSA9PSBCaW5kaW5nVHlwZTo6RWxlbWVudCkgewotICAg
ICAgICAgICAgLy8gSWYgdGhlIGRlc3RydWN0dXJpbmcgYmVjb21lcyBnZXRfYnlfaWQgYW5kIG1v
diwgdGhlbiB3ZSBzaG91bGQgc3RvcmUgcmVzdWx0cyBkaXJlY3RseSB0byB0aGUgbG9jYWwncyBi
aW5kaW5nLgotICAgICAgICAgICAgLy8gRnJvbQotICAgICAgICAgICAgLy8gICAgIGdldF9ieV9p
ZCAgICAgICAgICBkc3Q6bG9jMTAsIGJhc2U6bG9jOSwgcHJvcGVydHk6MAotICAgICAgICAgICAg
Ly8gICAgIG1vdiAgICAgICAgICAgICAgICBkc3Q6bG9jNiwgc3JjOmxvYzEwCi0gICAgICAgICAg
ICAvLyBUbwotICAgICAgICAgICAgLy8gICAgIGdldF9ieV9pZCAgICAgICAgICBkc3Q6bG9jNiwg
YmFzZTpsb2M5LCBwcm9wZXJ0eTowCi0gICAgICAgICAgICBhdXRvIHdyaXRhYmxlRGlyZWN0Qmlu
ZGluZ0lmUG9zc2libGUgPSBbJl0oKSAtPiBSZWdpc3RlcklEKiB7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhlIGZvbGxvd2luZyBwYXR0ZXJuIGlzIHBvc3NpYmxlLiBJbiB0aGF0IGNhc2UsIGFmdGVy
IHNldHRpbmcgfGRhdGF8IGxvY2FsIHZhcmlhYmxlLCB3ZSBuZWVkIHRvIHN0b3JlIHByb3BlcnR5
IG5hbWUgaW50byB0aGUgc2V0LgotICAgICAgICAgICAgICAgIC8vIFNvLCBvbGQgcHJvcGVydHkg
bmFtZSB8ZGF0YXwgcmVzdWx0IG11c3QgYmUga2VwdCBiZWZvcmUgc2V0dGluZyBpdCBpbnRvIHxk
YXRhfC4KLSAgICAgICAgICAgICAgICAvLyAgICAgKHsgW2RhdGFdOiBkYXRhLCAuLi5vYmogfSA9
IG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29udGFpbnNSZXN0RWxlbWVudCAmJiBt
X2NvbnRhaW5zQ29tcHV0ZWRQcm9wZXJ0eSAmJiB0YXJnZXQucHJvcGVydHlFeHByZXNzaW9uKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAvLyBk
ZWZhdWx0IHZhbHVlIGNhbiBpbmNsdWRlIGEgcmVmZXJlbmNlIHRvIGxvY2FsIHZhcmlhYmxlLiBT
byBmaWxsaW5nIHZhbHVlIHRvIGEgbG9jYWwgdmFyaWFibGUgY2FuIGRpZmZlciByZXN1bHQuCi0g
ICAgICAgICAgICAgICAgLy8gV2UgZ2l2ZSB1cCBmYXN0IHBhdGggaWYgZGVmYXVsdCB2YWx1ZSBp
bmNsdWRlcyBub24gY29uc3RhbnQuCi0gICAgICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGUsCi0g
ICAgICAgICAgICAgICAgLy8gICAgICh7IGRhdGEgPSBkYXRhIH0gPSBvYmplY3QpOwotICAgICAg
ICAgICAgICAgIGlmICh0YXJnZXQuZGVmYXVsdFZhbHVlICYmICF0YXJnZXQuZGVmYXVsdFZhbHVl
LT5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgICAgIHJldHVybiB0YXJnZXQucGF0dGVybi0+d3JpdGFibGVEaXJlY3RCaW5kaW5n
SWZQb3NzaWJsZShnZW5lcmF0b3IpOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgYXV0
byBmaW5pc2hEaXJlY3RCaW5kaW5nQXNzaWdubWVudCA9IFsmXSgpIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQod3JpdGFibGVEaXJlY3RCaW5kaW5nSWZQb3NzaWJsZSgpKTsKLSAgICAgICAgICAg
ICAgICB0YXJnZXQucGF0dGVybi0+ZmluaXNoRGlyZWN0QmluZGluZ0Fzc2lnbm1lbnQoZ2VuZXJh
dG9yKTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0
ZW1wOwotICAgICAgICAgICAgUmVnaXN0ZXJJRCogZGlyZWN0QmluZGluZyA9IHdyaXRhYmxlRGly
ZWN0QmluZGluZ0lmUG9zc2libGUoKTsKLSAgICAgICAgICAgIGlmIChkaXJlY3RCaW5kaW5nKQot
ICAgICAgICAgICAgICAgIHRlbXAgPSBkaXJlY3RCaW5kaW5nOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHRlbXAgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0KLSAgICAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWU7Ci0gICAgICAgICAgICBpZiAo
IXRhcmdldC5wcm9wZXJ0eUV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgICAgICBPcHRpb25hbDx1
aW50MzJfdD4gb3B0aW9uYWxJbmRleCA9IHBhcnNlSW5kZXgodGFyZ2V0LnByb3BlcnR5TmFtZSk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25hbEluZGV4KQotICAgICAgICAgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQodGVtcC5nZXQoKSwgcmhzLCB0YXJnZXQucHJvcGVydHlO
YW1lKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHByb3BlcnR5SW5kZXggPSBnZW5lcmF0b3IuZW1pdExvYWQobnVsbHB0ciwg
anNOdW1iZXIob3B0aW9uYWxJbmRleC52YWx1ZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0R2V0QnlWYWwodGVtcC5nZXQoKSwgcmhzLCBwcm9wZXJ0eUluZGV4LmdldCgp
KTsKKyAgICB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBuZXdPYmplY3Q7CisgICAgICAg
IElkZW50aWZpZXJTZXQgZXhjbHVkZWRTZXQ7CisgICAgICAgIE9wdGlvbmFsPENhbGxBcmd1bWVu
dHM+IGFyZ3M7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ29tcHV0ZWRQcm9wZXJ0aWVzID0g
MDsKKyAgICAgICAgdW5zaWduZWQgaW5kZXhJbkFyZ3VtZW50cyA9IDI7CisgICAgICAgIGlmICht
X2NvbnRhaW5zUmVzdEVsZW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChtX2NvbnRhaW5zQ29tcHV0
ZWRQcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdGFyZ2V0IDog
bV90YXJnZXRQYXR0ZXJucykgeworICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmJpbmRp
bmdUeXBlID09IEJpbmRpbmdUeXBlOjpFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodGFyZ2V0LnByb3BlcnR5RXhwcmVzc2lvbikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICArK251bWJlck9mQ29tcHV0ZWRQcm9wZXJ0aWVzOworICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JQcm9wZXJ0eSh0YXJnZXQucHJv
cGVydHlFeHByZXNzaW9uKTsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5VmFs
KHRlbXAuZ2V0KCksIHJocywgcHJvcGVydHlOYW1lLmdldCgpKTsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG5ld09iamVjdCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAg
ICAgIGFyZ3MuZW1wbGFjZShnZW5lcmF0b3IsIG51bGxwdHIsIGluZGV4SW5Bcmd1bWVudHMgKyBu
dW1iZXJPZkNvbXB1dGVkUHJvcGVydGllcyk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KG1fY29udGFpbnNSZXN0RWxlbWVudCkgewotICAgICAgICAgICAgICAgIGlmIChtX2NvbnRhaW5z
Q29tcHV0ZWRQcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LnByb3Bl
cnR5RXhwcmVzc2lvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IGdl
bmVyYXRvci5lbWl0VG9Qcm9wZXJ0eUtleShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKHByb3Bl
cnR5TmFtZS5nZXQoKSksIHByb3BlcnR5TmFtZS5nZXQoKSk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV90YXJnZXRQYXR0ZXJucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAg
Y29uc3QgYXV0byYgdGFyZ2V0ID0gbV90YXJnZXRQYXR0ZXJuc1tpXTsKKyAgICAgICAgICAgIGlm
ICh0YXJnZXQuYmluZGluZ1R5cGUgPT0gQmluZGluZ1R5cGU6OkVsZW1lbnQpIHsKKyAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgZGVzdHJ1Y3R1cmluZyBiZWNvbWVzIGdldF9ieV9pZCBhbmQgbW92
LCB0aGVuIHdlIHNob3VsZCBzdG9yZSByZXN1bHRzIGRpcmVjdGx5IHRvIHRoZSBsb2NhbCdzIGJp
bmRpbmcuCisgICAgICAgICAgICAgICAgLy8gRnJvbQorICAgICAgICAgICAgICAgIC8vICAgICBn
ZXRfYnlfaWQgICAgICAgICAgZHN0OmxvYzEwLCBiYXNlOmxvYzksIHByb3BlcnR5OjAKKyAgICAg
ICAgICAgICAgICAvLyAgICAgbW92ICAgICAgICAgICAgICAgIGRzdDpsb2M2LCBzcmM6bG9jMTAK
KyAgICAgICAgICAgICAgICAvLyBUbworICAgICAgICAgICAgICAgIC8vICAgICBnZXRfYnlfaWQg
ICAgICAgICAgZHN0OmxvYzYsIGJhc2U6bG9jOSwgcHJvcGVydHk6MAorICAgICAgICAgICAgICAg
IGF1dG8gd3JpdGFibGVEaXJlY3RCaW5kaW5nSWZQb3NzaWJsZSA9IFsmXSgpIC0+IFJlZ2lzdGVy
SUQqIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBwYXR0ZXJuIGlzIHBv
c3NpYmxlLiBJbiB0aGF0IGNhc2UsIGFmdGVyIHNldHRpbmcgfGRhdGF8IGxvY2FsIHZhcmlhYmxl
LCB3ZSBuZWVkIHRvIHN0b3JlIHByb3BlcnR5IG5hbWUgaW50byB0aGUgc2V0LgorICAgICAgICAg
ICAgICAgICAgICAvLyBTbywgb2xkIHByb3BlcnR5IG5hbWUgfGRhdGF8IHJlc3VsdCBtdXN0IGJl
IGtlcHQgYmVmb3JlIHNldHRpbmcgaXQgaW50byB8ZGF0YXwuCisgICAgICAgICAgICAgICAgICAg
IC8vICAgICAoeyBbZGF0YV06IGRhdGEsIC4uLm9iaiB9ID0gb2JqZWN0KTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fY29udGFpbnNSZXN0RWxlbWVudCAmJiBtX2NvbnRhaW5zQ29tcHV0ZWRQ
cm9wZXJ0eSAmJiB0YXJnZXQucHJvcGVydHlFeHByZXNzaW9uKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdmFs
dWUgY2FuIGluY2x1ZGUgYSByZWZlcmVuY2UgdG8gbG9jYWwgdmFyaWFibGUuIFNvIGZpbGxpbmcg
dmFsdWUgdG8gYSBsb2NhbCB2YXJpYWJsZSBjYW4gZGlmZmVyIHJlc3VsdC4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgZ2l2ZSB1cCBmYXN0IHBhdGggaWYgZGVmYXVsdCB2YWx1ZSBpbmNsdWRl
cyBub24gY29uc3RhbnQuCisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBleGFtcGxlLAorICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgKHsgZGF0YSA9IGRhdGEgfSA9IG9iamVjdCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuZGVmYXVsdFZhbHVlICYmICF0YXJnZXQuZGVmYXVs
dFZhbHVlLT5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5wYXR0ZXJuLT53cml0YWJs
ZURpcmVjdEJpbmRpbmdJZlBvc3NpYmxlKGdlbmVyYXRvcik7CisgICAgICAgICAgICAgICAgfTsK
KworICAgICAgICAgICAgICAgIGF1dG8gZmluaXNoRGlyZWN0QmluZGluZ0Fzc2lnbm1lbnQgPSBb
Jl0oKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh3cml0YWJsZURpcmVjdEJpbmRpbmdJ
ZlBvc3NpYmxlKCkpOworICAgICAgICAgICAgICAgICAgICB0YXJnZXQucGF0dGVybi0+ZmluaXNo
RGlyZWN0QmluZGluZ0Fzc2lnbm1lbnQoZ2VuZXJhdG9yKTsKKyAgICAgICAgICAgICAgICB9Owor
CisgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXA7CisgICAgICAgICAgICAg
ICAgUmVnaXN0ZXJJRCogZGlyZWN0QmluZGluZyA9IHdyaXRhYmxlRGlyZWN0QmluZGluZ0lmUG9z
c2libGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoZGlyZWN0QmluZGluZykKKyAgICAgICAgICAg
ICAgICAgICAgdGVtcCA9IGRpcmVjdEJpbmRpbmc7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICB0ZW1wID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworCisgICAg
ICAgICAgICAgICAgaWYgKCF0YXJnZXQucHJvcGVydHlFeHByZXNzaW9uKSB7CisgICAgICAgICAg
ICAgICAgICAgIE9wdGlvbmFsPHVpbnQzMl90PiBvcHRpb25hbEluZGV4ID0gcGFyc2VJbmRleCh0
YXJnZXQucHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25hbElu
ZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKHRlbXAu
Z2V0KCksIHJocywgdGFyZ2V0LnByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5
SW5kZXggPSBnZW5lcmF0b3IuZW1pdExvYWQobnVsbHB0ciwganNOdW1iZXIob3B0aW9uYWxJbmRl
eC52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5
VmFsKHRlbXAuZ2V0KCksIHJocywgcHJvcGVydHlJbmRleC5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY29udGFpbnNSZXN0RWxlbWVudCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVkU2V0LmFkZCh0YXJnZXQucHJvcGVydHlO
YW1lLmltcGwoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1fY29udGFpbnNSZXN0RWxlbWVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5TmFtZSA9IGFyZ3MtPmFyZ3VtZW50UmVnaXN0ZXIoaW5kZXhJbkFyZ3VtZW50cysrKTsKICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lID0gZ2VuZXJhdG9yLmVtaXRMb2FkKG51bGxwdHIsIHRhcmdldC5wcm9wZXJ0eU5hbWUpOwot
Ci0gICAgICAgICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgYXJncyhnZW5lcmF0b3IsIG51bGxw
dHIsIDEpOwotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IubW92ZShhcmdzLnRoaXNSZWdp
c3RlcigpLCBleGNsdWRlZExpc3QuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0
b3IubW92ZShhcmdzLmFyZ3VtZW50UmVnaXN0ZXIoMCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCksIGFkZE1ldGhvZC5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBhcmdzLCBkaXZvdCgp
LCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpObyk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVkU2V0LmFkZCh0YXJn
ZXQucHJvcGVydHlOYW1lLmltcGwoKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAg
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvclByb3BlcnR5
KHByb3BlcnR5TmFtZS5nZXQoKSwgdGFyZ2V0LnByb3BlcnR5RXhwcmVzc2lvbik7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChtX2NvbnRhaW5zUmVzdEVsZW1lbnQpCisgICAgICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IuZW1pdFRvUHJvcGVydHlLZXkoZ2VuZXJh
dG9yLnRlbXBEZXN0aW5hdGlvbihwcm9wZXJ0eU5hbWUuZ2V0KCkpLCBwcm9wZXJ0eU5hbWUuZ2V0
KCkpOworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKHRlbXAuZ2V0
KCksIHJocywgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGlmICh0YXJnZXQuZGVmYXVsdFZhbHVlKQotICAgICAgICAgICAgICAgIGFzc2lnbkRl
ZmF1bHRWYWx1ZUlmVW5kZWZpbmVkKGdlbmVyYXRvciwgdGVtcC5nZXQoKSwgdGFyZ2V0LmRlZmF1
bHRWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoZGlyZWN0QmluZGluZykKLSAgICAgICAgICAgICAg
ICBmaW5pc2hEaXJlY3RCaW5kaW5nQXNzaWdubWVudCgpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHRhcmdldC5wYXR0ZXJuLT5iaW5kVmFsdWUoZ2VuZXJhdG9yLCB0ZW1wLmdl
dCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCh0YXJnZXQuYmluZGlu
Z1R5cGUgPT0gQmluZGluZ1R5cGU6OlJlc3RFbGVtZW50KTsKLSAgICAgICAgICAgIEFTU0VSVChp
ID09IG1fdGFyZ2V0UGF0dGVybnMuc2l6ZSgpIC0gMSk7Ci0gICAgICAgICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gbmV3T2JqZWN0ID0gZ2VuZXJhdG9yLmVtaXROZXdPYmplY3QoZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gbG9hZCBhbmQgY2Fs
bCBAY29weURhdGFQcm9wZXJ0aWVzCi0gICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gY29w
eURhdGFQcm9wZXJ0aWVzID0gZ2VuZXJhdG9yLm1vdmVMaW5rVGltZUNvbnN0YW50KG51bGxwdHIs
IExpbmtUaW1lQ29uc3RhbnQ6OmNvcHlEYXRhUHJvcGVydGllcyk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIENhbGxBcmd1bWVudHMgYXJncyhnZW5lcmF0b3IsIG51bGxwdHIsIDMpOwotICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGFyZ3MudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZp
bmVkKCkpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy5hcmd1bWVudFJlZ2lzdGVy
KDApLCBuZXdPYmplY3QuZ2V0KCkpOwotICAgICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy5h
cmd1bWVudFJlZ2lzdGVyKDEpLCByaHMpOwotICAgICAgICAgICAgaWYgKG1fY29udGFpbnNDb21w
dXRlZFByb3BlcnR5KQotICAgICAgICAgICAgICAgIGdlbmVyYXRvci5tb3ZlKGFyZ3MuYXJndW1l
bnRSZWdpc3RlcigyKSwgZXhjbHVkZWRMaXN0LmdldCgpKTsKLSAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBleGNsdWRlZFNldFJlZyA9IGdlbmVy
YXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGV4Y2x1ZGVkU2V0KTsKLSAg
ICAgICAgICAgICAgICBnZW5lcmF0b3IubW92ZShhcmdzLmFyZ3VtZW50UmVnaXN0ZXIoMiksIGV4
Y2x1ZGVkU2V0UmVnLmdldCgpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
dGFyZ2V0LmRlZmF1bHRWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgYXNzaWduRGVmYXVsdFZh
bHVlSWZVbmRlZmluZWQoZ2VuZXJhdG9yLCB0ZW1wLmdldCgpLCB0YXJnZXQuZGVmYXVsdFZhbHVl
KTsKKyAgICAgICAgICAgICAgICBpZiAoZGlyZWN0QmluZGluZykKKyAgICAgICAgICAgICAgICAg
ICAgZmluaXNoRGlyZWN0QmluZGluZ0Fzc2lnbm1lbnQoKTsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wYXR0ZXJuLT5iaW5kVmFsdWUoZ2VuZXJhdG9y
LCB0ZW1wLmdldCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKHRhcmdldC5iaW5kaW5nVHlwZSA9PSBCaW5kaW5nVHlwZTo6UmVzdEVsZW1lbnQpOworICAg
ICAgICAgICAgICAgIEFTU0VSVChpID09IG1fdGFyZ2V0UGF0dGVybnMuc2l6ZSgpIC0gMSk7CiAK
LSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCks
IGNvcHlEYXRhUHJvcGVydGllcy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBhcmdzLCBkaXZv
dCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpObyk7Ci0gICAg
ICAgICAgICB0YXJnZXQucGF0dGVybi0+YmluZFZhbHVlKGdlbmVyYXRvciwgbmV3T2JqZWN0Lmdl
dCgpKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5ld09iamVjdChuZXdPYmplY3Qu
Z2V0KCkpOworCisgICAgICAgICAgICAgICAgLy8gbG9hZCBhbmQgY2FsbCBAY29weURhdGFQcm9w
ZXJ0aWVzCisgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGNvcHlEYXRhUHJvcGVy
dGllcyA9IGdlbmVyYXRvci5tb3ZlTGlua1RpbWVDb25zdGFudChudWxscHRyLCBMaW5rVGltZUNv
bnN0YW50Ojpjb3B5RGF0YVByb3BlcnRpZXMpOworCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9y
Lm1vdmUoYXJncy0+dGhpc1JlZ2lzdGVyKCksIG5ld09iamVjdC5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy0+YXJndW1lbnRSZWdpc3RlcigwKSwgcmhzKTsKKyAg
ICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoYXJncy0+YXJndW1lbnRSZWdpc3Rlcigx
KSwgV1RGTW92ZShleGNsdWRlZFNldCkpOworICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
Q2FsbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGNvcHlEYXRhUHJvcGVydGllcy5nZXQoKSwg
Tm9FeHBlY3RlZEZ1bmN0aW9uLCBhcmdzLnZhbHVlKCksIGRpdm90KCksIGRpdm90U3RhcnQoKSwg
ZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKKyAgICAgICAgICAgICAgICB0YXJnZXQu
cGF0dGVybi0+YmluZFZhbHVlKGdlbmVyYXRvciwgbmV3T2JqZWN0LmdldCgpKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtNTYxNiwxMCArNTYxMCw5IEBAIFJlZ2lzdGVy
SUQqIE9iamVjdFNwcmVhZEV4cHJlc3Npb25Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvCiAgICAgCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGNvcHlEYXRhUHJv
cGVydGllcyA9IGdlbmVyYXRvci5tb3ZlTGlua1RpbWVDb25zdGFudChudWxscHRyLCBMaW5rVGlt
ZUNvbnN0YW50Ojpjb3B5RGF0YVByb3BlcnRpZXMpOwogICAgIAotICAgIENhbGxBcmd1bWVudHMg
YXJncyhnZW5lcmF0b3IsIG51bGxwdHIsIDIpOwotICAgIGdlbmVyYXRvci5lbWl0TG9hZChhcmdz
LnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICBnZW5lcmF0b3IubW92ZShhcmdz
LmFyZ3VtZW50UmVnaXN0ZXIoMCksIGRzdCk7Ci0gICAgZ2VuZXJhdG9yLm1vdmUoYXJncy5hcmd1
bWVudFJlZ2lzdGVyKDEpLCBzcmMuZ2V0KCkpOworICAgIENhbGxBcmd1bWVudHMgYXJncyhnZW5l
cmF0b3IsIG51bGxwdHIsIDEpOworICAgIGdlbmVyYXRvci5tb3ZlKGFyZ3MudGhpc1JlZ2lzdGVy
KCksIGRzdCk7CisgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy5hcmd1bWVudFJlZ2lzdGVyKDApLCBz
cmMuZ2V0KCkpOwogICAgIAogICAgIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIGNvcHlEYXRhUHJvcGVydGllcy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBh
cmdzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpO
byk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNo
ZWRUeXBlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5j
cHAKaW5kZXggZTMwMjRkODdhODU4NzljYzc5NzcwNDM3NjdlNWYxN2Y5ZjUzNjc4MS4uZWQyMjkx
ZjM1Zjc1ZmJiYTYyNjMyOGRkMDBkZTIxNDRhNWQ5YzQ5MiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApAQCAtOTYyLDI1ICs5NjIsNiBAQCBjbGFz
cyBDYWNoZWRIYXNoU2V0IDogcHVibGljIENhY2hlZE9iamVjdDxIYXNoU2V0PFNvdXJjZVR5cGU8
VD4sIEhhc2hBcmc+PiB7CiAgICAgQ2FjaGVkVmVjdG9yPFQ+IG1fZW50cmllczsKIH07CiAKLWNs
YXNzIENhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5IDogcHVibGljIFZhcmlhYmxlTGVu
Z3RoT2JqZWN0PENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiB7Ci1wdWJsaWM6Ci0gICAgdm9p
ZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50
cnkmIGVudHJ5KQotICAgIHsKLSAgICAgICAgbV9jb25zdGFudCA9IGVudHJ5LnNlY29uZDsKLSAg
ICAgICAgbV9zZXQuZW5jb2RlKGVuY29kZXIsIGVudHJ5LmZpcnN0KTsKLSAgICB9Ci0KLSAgICB2
b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSYg
ZW50cnkpIGNvbnN0Ci0gICAgewotICAgICAgICBlbnRyeS5zZWNvbmQgPSBtX2NvbnN0YW50Owot
ICAgICAgICBtX3NldC5kZWNvZGUoZGVjb2RlciwgZW50cnkuZmlyc3QpOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICB1bnNpZ25lZCBtX2NvbnN0YW50OwotICAgIENhY2hlZEhhc2hTZXQ8Q2FjaGVk
UmVmUHRyPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPiwgSWRlbnRpZmllclJlcEhhc2g+IG1fc2V0
OwotfTsKLQogY2xhc3MgQ2FjaGVkQ29kZUJsb2NrUmFyZURhdGEgOiBwdWJsaWMgQ2FjaGVkT2Jq
ZWN0PFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YT4gewogcHVibGljOgogICAgIHZvaWQgZW5j
b2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YSYg
cmFyZURhdGEpCkBAIC0xMDIxLDcgKzEwMDIsNyBAQCBjbGFzcyBDYWNoZWRDb2RlQmxvY2tSYXJl
RGF0YSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VW5saW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhPgog
ICAgIENhY2hlZEhhc2hNYXA8dW5zaWduZWQsIFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YTo6
VHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlPiBtX3R5cGVQcm9maWxlckluZm9NYXA7CiAgICAg
Q2FjaGVkVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IG1fb3BQcm9maWxlQ29udHJv
bEZsb3dCeXRlY29kZU9mZnNldHM7CiAgICAgQ2FjaGVkVmVjdG9yPENhY2hlZEJpdFZlY3Rvcj4g
bV9iaXRWZWN0b3JzOwotICAgIENhY2hlZFZlY3RvcjxDYWNoZWRDb25zdGFudElkZW50aWZpZXJT
ZXRFbnRyeT4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOworICAgIENhY2hlZFZlY3RvcjxDYWNo
ZWRIYXNoU2V0PENhY2hlZFJlZlB0cjxDYWNoZWRVbmlxdWVkU3RyaW5nSW1wbD4sIElkZW50aWZp
ZXJSZXBIYXNoPj4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOwogICAgIHVuc2lnbmVkIG1fbmVl
ZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgOiAxOwogICAgIHVuc2lnbmVkIG1fcHJpdmF0ZUJyYW5k
UmVxdWlyZW1lbnQgOiAxOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAppbmRleCA0MDIxZmM3ZTBhZGFm
N2EwYTllMGVmNmNmZDIyNTgzOGI1YmY4NzgzLi40YjVmZmNiMGMyOWMzOTFjMWE1Yjc5ZTllMmZm
ZWNhNTIzYWI4NGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAKICNp
bmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJJbmRpcmVjdEV2YWxFeGVjdXRhYmxlLmgi
CisjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIK
ICNpbmNsdWRlICJJbnRsRGF0ZVRpbWVGb3JtYXQuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CkBAIC04NDAsMjggKzg0MSw0NyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVu
Y0NvcHlEYXRhUHJvcGVydGllcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKLSAgICBKU0ZpbmFsT2JqZWN0KiB0YXJnZXQgPSBqc0Nhc3Q8SlNGaW5hbE9i
amVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIEpTRmluYWxPYmpl
Y3QqIHRhcmdldCA9IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2FsbEZyYW1lLT50aGlzVmFsdWUo
KSk7CiAgICAgQVNTRVJUKHRhcmdldC0+aXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKHZtKSk7CiAKLSAg
ICBKU1ZhbHVlIHNvdXJjZVZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsK
KyAgICBKU1ZhbHVlIHNvdXJjZVZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgw
KTsKICAgICBpZiAoc291cmNlVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZSh0YXJnZXQpOwogCiAgICAgSlNPYmplY3QqIHNvdXJjZSA9IHNvdXJjZVZhbHVl
LnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
IAotICAgIEpTU2V0KiBleGNsdWRlZFNldCA9IG51bGxwdHI7Ci0gICAgaWYgKGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpID4gMikKLSAgICAgICAgZXhjbHVkZWRTZXQgPSBqc0Nhc3Q8SlNTZXQq
PihjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKKyAgICBVbmxpbmtlZENvZGVCbG9j
ayogdW5saW5rZWRDb2RlQmxvY2sgPSBudWxscHRyOworICAgIGNvbnN0IElkZW50aWZpZXJTZXQq
IGV4Y2x1ZGVkU2V0ID0gbnVsbHB0cjsKKyAgICBPcHRpb25hbDxJZGVudGlmaWVyU2V0PiBuZXds
eUNyZWF0ZWRTZXQ7CisgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpID4gMSkgewor
ICAgICAgICBpbnQzMl90IHNldEluZGV4ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgx
KS5hc0ludDMyQXNBbnlJbnQoKTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNh
bGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7Cisg
ICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNhbGxlckZyYW1lLT5jb2RlT3JpZ2luKCk7
CisgICAgICAgIGlmIChjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCkp
CisgICAgICAgICAgICBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxG
cmFtZShjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOworICAgICAgICBBU1NF
UlQoY29kZUJsb2NrKTsKKyAgICAgICAgdW5saW5rZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnVu
bGlua2VkQ29kZUJsb2NrKCk7CisgICAgICAgIGV4Y2x1ZGVkU2V0ID0gJnVubGlua2VkQ29kZUJs
b2NrLT5jb25zdGFudElkZW50aWZpZXJTZXRzKClbc2V0SW5kZXhdOworICAgICAgICBpZiAoY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkgPiAyKSB7CisgICAgICAgICAgICBuZXdseUNyZWF0ZWRT
ZXQuZW1wbGFjZSgqZXhjbHVkZWRTZXQpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDI7IGluZGV4IDwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7ICsraW5kZXgpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQoaW5kZXgpLnRvUHJvcGVydHlLZXkoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIG5ld2x5
Q3JlYXRlZFNldC0+YWRkKHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZXhjbHVkZWRTZXQgPSAmbmV3bHlDcmVhdGVkU2V0LnZhbHVlKCk7CisgICAgICAg
IH0KKyAgICB9CiAKLSAgICBhdXRvIGlzUHJvcGVydHlOYW1lRXhjbHVkZWQgPSBbJl0gKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIC0+IGJv
b2wgeworICAgIGF1dG8gaXNQcm9wZXJ0eU5hbWVFeGNsdWRlZCA9IFsmXSAoUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkgLT4gYm9vbCB7CiAgICAgICAgIEFTU0VSVCghcHJvcGVydHlOYW1lLmlz
UHJpdmF0ZU5hbWUoKSk7CiAgICAgICAgIGlmICghZXhjbHVkZWRTZXQpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgSlNWYWx1ZSBwcm9wZXJ0eU5hbWVWYWx1ZSA9IGlkZW50
aWZpZXJUb0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51
aWQoKSkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAg
ICAgIHJldHVybiBleGNsdWRlZFNldC0+aGFzKGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lVmFs
dWUpOworICAgICAgICByZXR1cm4gZXhjbHVkZWRTZXQtPmNvbnRhaW5zKHByb3BlcnR5TmFtZS51
aWQoKSk7CiAgICAgfTsKIAogICAgIGlmICghc291cmNlLT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmll
ZCh2bSkpIHsKQEAgLTg4OCw2ICs5MDgsOSBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZ2xv
YmFsRnVuY0NvcHlEYXRhUHJvcGVydGllcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAg
ICAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICAgICAgICAgIGlmIChpc1By
b3BlcnR5TmFtZUV4Y2x1ZGVkKHByb3BlcnR5TmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisKICAgICAgICAgICAgIHByb3BlcnRpZXMuYXBwZW5kKGVudHJ5LmtleSk7CiAgICAg
ICAgICAgICB2YWx1ZXMuYXBwZW5kV2l0aENyYXNoT25PdmVyZmxvdyhzb3VyY2UtPmdldERpcmVj
dChlbnRyeS5vZmZzZXQpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtODk4LDEwICs5
MjEsNiBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVuY0NvcHlEYXRhUHJvcGVy
dGllcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHByb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBX
ZSBjb3VsZCBwdXQgcHJvcGVydGllcyBpbiBhIGJhdGNoaW5nIG1hbm5lciB0byBhY2NlbGVyYXRl
IENvcHlEYXRhUHJvcGVydGllcyBtb3JlLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTM1OAotICAgICAgICAgICAgYm9vbCBleGNsdWRl
ZCA9IGlzUHJvcGVydHlOYW1lRXhjbHVkZWQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0aWVzW2ldLmdl
dCgpKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAg
ICAgICAgICBpZiAoZXhjbHVkZWQpCi0gICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB0YXJnZXQtPnB1dERpcmVjdCh2bSwgcHJvcGVydGllc1tpXS5nZXQoKSwgdmFsdWVzLmF0
KGkpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC05MTAsOSArOTI5LDcgQEAgSlNDX0RF
RklORV9IT1NUX0ZVTkNUSU9OKGdsb2JhbEZ1bmNDb3B5RGF0YVByb3BlcnRpZXMsIChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2IKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKIAogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHByb3BlcnR5TmFtZSA6IHByb3BlcnR5TmFt
ZXMpIHsKLSAgICAgICAgICAgIGJvb2wgZXhjbHVkZWQgPSBpc1Byb3BlcnR5TmFtZUV4Y2x1ZGVk
KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICBpZiAoZXhjbHVkZWQpCisgICAgICAgICAg
ICBpZiAoaXNQcm9wZXJ0eU5hbWVFeGNsdWRlZChwcm9wZXJ0eU5hbWUpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChzb3VyY2UsIFBy
b3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CkBAIC05MzUs
NyArOTUyLDggQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGdsb2JhbEZ1bmNDb3B5RGF0YVBy
b3BlcnRpZXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICAgICAgfQogICAgIH0KIAot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgZW5zdXJlU3Rp
bGxBbGl2ZUhlcmUodW5saW5rZWRDb2RlQmxvY2spOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUodGFyZ2V0KTsKIH0KIAogSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGdsb2JhbEZ1bmNEYXRl
VGltZUZvcm1hdCwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2Fs
bEZyYW1lKSkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggNDQxZmYxNDI3NTMzOTU4N2QxNDAxZjIxODkwNDNmN2YzYTNhOWJmNy4uYTVjNTVk
NmI5MzRlYTAzNzViMmM5ZjU1MDMyMDQxMjI5ODViNzQ1ZSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMS0w
Mi0xMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgorCisgICAgICAgIFtKU0Nd
IFNpbXBsaWZ5IGV4Y2x1ZGVkU2V0IGhhbmRsaW5nIGluIG9iamVjdCByZXN0IGV4cHJlc3Npb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTY2OAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWljcm9i
ZW5jaG1hcmtzL29iamVjdC1yZXN0LWNvbXB1dGVkLWRlc3RydWN0dXJpbmcuanM6IEFkZGVkLgor
CiAyMDIxLTAyLTA5ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAg
ICAgW0pTQ10gQysrIGl0ZXJhdGlvbiBzaG91bGQgc3VwcG9ydCBmYXN0IGl0ZXJhdG9yIHByb3Rv
Y29sCmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9vYmplY3QtcmVzdC1jb21w
dXRlZC1kZXN0cnVjdHVyaW5nLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvb2JqZWN0LXJl
c3QtY29tcHV0ZWQtZGVzdHJ1Y3R1cmluZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MzQ5ZDkzZDcyYzM2Y2Ux
NjRkZmJlMDI5NDhiM2Y4MzNhYWUxY2QwCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9taWNy
b2JlbmNobWFya3Mvb2JqZWN0LXJlc3QtY29tcHV0ZWQtZGVzdHJ1Y3R1cmluZy5qcwpAQCAtMCww
ICsxLDEyIEBACisoZnVuY3Rpb24oa2V5MSwga2V5Miwga2V5MykgeworICAgIHZhciBvYmogPSB7
IGE6IDAsIGI6IDAsIGM6IDAsIGQ6IDEsIGU6IDAsIGY6IDAsIGc6IDAsIGg6IDAsIGk6IDAsIGo6
IDAgfTsKKyAgICB2YXIgYWNjID0gMDsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyBp
KyspIHsKKyAgICAgICAgdmFyIHsgW2tleTFdOiBhLCBba2V5Ml06IGIsIFtrZXkzXTogYywgLi4u
cmVzdCB9ID0gb2JqOworICAgICAgICBhY2MgKz0gcmVzdC5kOworICAgIH0KKworICAgIGlmIChh
Y2MgIT09IDFlNSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uISIpOwor
fSkoJ2EnLCAnYicsICdjJyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420217</attachid>
            <date>2021-02-13 01:00:32 -0800</date>
            <delta_ts>2021-02-13 03:01:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221668-20210213010031.patch</filename>
            <type>text/plain</type>
            <size>34944</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyODMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
OGI3MmNmN2RkYzEyNWMyNzg2NmU1MDkzOGFmNDcyM2YzYjZjODdlLi4wODI5YmJiYzFlNDU0ZGMx
ZjgyZmU0YTdlZmQwYWIzMTMwZjYyYzY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAyMS0wMi0xMyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFNpbXBsaWZ5IGV4Y2x1ZGVkU2V0IGhhbmRsaW5nIGluIG9iamVj
dCByZXN0IGV4cHJlc3Npb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMTY2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggc2ltcGxpZmllcyBPYmplY3QgcmVzdC9zcHJlYWQgYnkgYXZv
aWRpbmcgdXNlIG9mIEpTU2V0LgorICAgICAgICBJbnN0ZWFkLCB3ZSBzdG9yZSBJZGVudGlmaWVy
U2V0IGludG8gVW5saW5rZWRDb2RlQmxvY2sncyB2ZWN0b3IgYW5kCisgICAgICAgIGFjY2VzcyB0
aGlzIGRpcmVjdGx5IHRocm91Z2ggSlMgY29uc3RhbnQgbnVtYmVyLgorICAgICAgICBBbmQgZm9y
IGFkZGl0aW9uYWwgcHJvcGVydGllcywgd2UgY29sbGVjdCBpdCBkdXJpbmcgZGVzdHJ1Y3R1cmlu
ZywKKyAgICAgICAgYW5kIHBhc3MgaXQgdG8gQGNvcHlEYXRhUHJvcGVydGllcyBhcyBhbiBhcmd1
bWVudCBzbyB0aGF0IHdlIGRvIG5vdAorICAgICAgICBuZWVkIHRvIGNhbGwgU2V0I2FkZCBpbiBK
UyBzaWRlLgorCisgICAgICAgIFdlIGFsc28gY2hlY2sgKGlzTnVtYmVyKCkgfHwgaXNTdHJpbmcp
IGNvbmRpdGlvbnMgZm9yIHByb3BlcnRpZXMgdG8KKyAgICAgICAgYXZvaWQgY2FsbGluZyBUb1By
b3BlcnR5S2V5IGZvciBjb25zdGFudCBjYXNlLiBUaGlzIGlzIE9LIHNpbmNlIHdlCisgICAgICAg
IHdpbGwgY2FsbCBUb1Byb3BlcnR5S2V5IGluc2lkZSBAY29weURhdGFQcm9wZXJ0aWVzLCBhbmQg
dGhpcyBpcworICAgICAgICBzaWRlLWVmZmVjdCBmcmVlIGlmIHRoZSBpbnB1dCBpcyBudW1iZXIg
b3Igc3RyaW5nLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6c2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAg
KiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRJZGVudGlm
aWVyU2V0cyk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3Iu
aDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmNvbnN0YW50SWRl
bnRpZmllclNldHMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6
YWRkU2V0Q29uc3RhbnQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCk6CisgICAg
ICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6Ok9iamVjdFBhdHRlcm5Ob2Rl
OjpiaW5kVmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpPYmplY3RTcHJlYWRFeHByZXNzaW9u
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk6OmVuY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5
OjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZXRDYWxsZXJDb2RlQmxvY2spOgorICAg
ICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorCiAyMDIxLTAyLTEyICBNYXJr
IExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgYHNsb3RWaXNpdG9y
YCB2YXJpYWJsZXMgdG8gYHZpc2l0b3JgLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAppbmRleCAwOGJlNGMxODUyZDlkN2M0Yjg3OThiNjc4MmJkMjA0YWY1
NDVlZjJlLi5hZGUzNGRmOWY4N2YyMjM4ZThiNjUxYjIzNjZlYmRjNTQwZGQ0NGMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtNDIyLDkgKzQy
Miw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgaWYgKHVubGlua2VkQ29kZUJsb2Nr
LT5oYXNSYXJlRGF0YSgpKSB7CiAgICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsK
IAotICAgICAgICBzZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnModm0sIHVubGlua2Vk
Q29kZUJsb2NrLT5jb25zdGFudElkZW50aWZpZXJTZXRzKCkpOwotICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKLQogICAgICAgICBpZiAoc2l6ZV90IGNvdW50
ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSkgewogICAg
ICAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5yZXNpemVUb0ZpdChjb3Vu
dCk7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKQEAg
LTg5MCwyOCArODg3LDYgQEAgQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQogfQogCi12b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVn
aXN0ZXJzKFZNJiB2bSwgY29uc3QgUmVmQ291bnRlZEFycmF5PENvbnN0YW50SWRlbnRpZmllclNl
dEVudHJ5PiYgY29uc3RhbnRzKQotewotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9nbG9iYWxPYmpl
Y3QuZ2V0KCk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogY29uc3RhbnRzKSB7Ci0g
ICAgICAgIGNvbnN0IElkZW50aWZpZXJTZXQmIHNldCA9IGVudHJ5LmZpcnN0OwotCi0gICAgICAg
IFN0cnVjdHVyZSogc2V0U3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5zZXRTdHJ1Y3R1cmUoKTsK
LSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICAgICAgSlNT
ZXQqIGpzU2V0ID0gSlNTZXQ6OmNyZWF0ZShnbG9iYWxPYmplY3QsIHZtLCBzZXRTdHJ1Y3R1cmUs
IHNldC5zaXplKCkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkp
OwotCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgc2V0RW50cnkgOiBzZXQpIHsKLSAgICAgICAg
ICAgIEpTU3RyaW5nKiBqc1N0cmluZyA9IGpzT3duZWRTdHJpbmcodm0sIHNldEVudHJ5LmdldCgp
KTsgCi0gICAgICAgICAgICBqc1NldC0+YWRkKGdsb2JhbE9iamVjdCwganNTdHJpbmcpOwotICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICAgICAgfQot
ICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2VudHJ5LnNlY29uZF0uc2V0KHZtLCB0aGlzLCBq
c1NldCk7Ci0gICAgfQotfQotCiB2b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMo
Y29uc3QgUmVmQ291bnRlZEFycmF5PFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywg
Y29uc3QgUmVmQ291bnRlZEFycmF5PFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiwgU2NyaXB0RXhlY3V0YWJsZSogdG9wTGV2ZWxFeGVj
dXRhYmxlKQogewogICAgIFZNJiB2bSA9ICptX3ZtOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IGRmY2U3ZTRmMzA1ZTBkY2NkOWNmMTE0MTg4ODIxYzAz
MzE3YzIzZGIuLjAyNjhmY2FmNmNmZTM0NDU0OTY0N2YxMTJlOGJjMTQxODA2NzQ3NjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTk1Myw4ICs5NTMs
NiBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIHZvaWQgdXBkYXRl
QWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKHVuc2lnbmVkJiBudW1i
ZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBs
ZXNJblByb2ZpbGVzKTsKIAotICAgIHZvaWQgc2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0
ZXJzKFZNJiwgY29uc3QgUmVmQ291bnRlZEFycmF5PENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5
PiYgY29uc3RhbnRzKTsKLQogICAgIHZvaWQgc2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgUmVm
Q291bnRlZEFycmF5PFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgUmVm
Q291bnRlZEFycmF5PFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbiwgU2NyaXB0RXhlY3V0YWJsZSogdG9wTGV2ZWxFeGVjdXRhYmxlKTsK
IAogICAgIHZvaWQgcmVwbGFjZUNvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcsIEpTVmFsdWUg
dmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oCmluZGV4IDFmNTFlY2U1ZDZmODZkNzA5NTExYjRhNGMxODJjNjRjYmZhMTgzYmYu
LjlhY2RiNGM1ZjI1OWUyNmI3ODA5ZTRhNDFjOGUxY2UzYmQzZWQ1YTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCkBAIC03NCw3
ICs3NCw2IEBAIHR5cGVkZWYgdW5zaWduZWQgVW5saW5rZWRBcnJheVByb2ZpbGU7CiB0eXBlZGVm
IHVuc2lnbmVkIFVubGlua2VkQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKIHR5cGVkZWYgdW5zaWdu
ZWQgVW5saW5rZWRPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKIHR5cGVkZWYgdW5zaWduZWQgVW5s
aW5rZWRMTEludENhbGxMaW5rSW5mbzsKLXVzaW5nIENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5
ID0gc3RkOjpwYWlyPElkZW50aWZpZXJTZXQsIHVuc2lnbmVkPjsKIAogc3RydWN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlIHsKICAgICBzdHJ1Y3QgT2Zmc2V0TG9jYXRpb24gewpAQCAtMTYyLDcg
KzE2MSw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAg
Y29uc3QgUmVmQ291bnRlZEFycmF5PFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uOyB9CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZkNvbnN0YW50SWRlbnRp
ZmllclNldHMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9jb25z
dGFudElkZW50aWZpZXJTZXRzLnNpemUoKSA6IDA7IH0KLSAgICBjb25zdCBSZWZDb3VudGVkQXJy
YXk8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudElkZW50aWZpZXJTZXRzKCkg
eyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2NvbnN0YW50SWRlbnRp
ZmllclNldHM7IH0KKyAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8SWRlbnRpZmllclNldD4mIGNv
bnN0YW50SWRlbnRpZmllclNldHMoKSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFy
ZURhdGEtPm1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsgfQogCiAgICAgLy8gSnVtcHMKICAgICBz
aXplX3QgbnVtYmVyT2ZKdW1wVGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMu
c2l6ZSgpOyB9CkBAIC00MTEsNyArNDEwLDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2sgOiBw
dWJsaWMgSlNDZWxsIHsKICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgVHlwZVByb2ZpbGVyRXhw
cmVzc2lvblJhbmdlPiBtX3R5cGVQcm9maWxlckluZm9NYXA7CiAgICAgICAgIFJlZkNvdW50ZWRB
cnJheTxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBtX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0
ZWNvZGVPZmZzZXRzOwogICAgICAgICBSZWZDb3VudGVkQXJyYXk8Qml0VmVjdG9yPiBtX2JpdFZl
Y3RvcnM7Ci0gICAgICAgIFJlZkNvdW50ZWRBcnJheTxDb25zdGFudElkZW50aWZpZXJTZXRFbnRy
eT4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOworICAgICAgICBSZWZDb3VudGVkQXJyYXk8SWRl
bnRpZmllclNldD4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOwogCiAgICAgICAgIHVuc2lnbmVk
IG1fbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgOiAxOwogICAgICAgICB1bnNpZ25lZCBtX3By
aXZhdGVCcmFuZFJlcXVpcmVtZW50IDogMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgKaW5kZXggOTRj
Njg3MGU5OTRjMmJmNWM5ODJjZTk1MmU0YzUzNGJkYzk2YjQ4OC4uNDgzODA1MWM4ODk5OGJjMTVh
ZTJjM2JkNDVmZjdiZjFiOGUyZWIyMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgKQEAgLTExMSwx
NCArMTExLDEzIEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yIHsKICAgICB9CiAK
ICAgICB1bnNpZ25lZCBudW1iZXJPZkNvbnN0YW50SWRlbnRpZmllclNldHMoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuc2l6ZSgpOyB9Ci0gICAgY29uc3QgVmVjdG9y
PENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiYgY29uc3RhbnRJZGVudGlmaWVyU2V0cygpIHsg
cmV0dXJuIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsgfQotICAgIHZvaWQgYWRkU2V0Q29uc3Rh
bnQoSWRlbnRpZmllclNldCYgc2V0KQorICAgIGNvbnN0IFZlY3RvcjxJZGVudGlmaWVyU2V0PiYg
Y29uc3RhbnRJZGVudGlmaWVyU2V0cygpIHsgcmV0dXJuIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0
czsgfQorICAgIHVuc2lnbmVkIGFkZFNldENvbnN0YW50KElkZW50aWZpZXJTZXQmJiBzZXQpCiAg
ICAgewogICAgICAgICBBU1NFUlQobV92bS5oZWFwLmlzRGVmZXJyZWQoKSk7Ci0gICAgICAgIHVu
c2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwotICAgICAgICBtX2Nv
bnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7Ci0gICAgICAg
IG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb246Ok90aGVyKTsKLSAgICAgICAgbV9jb25zdGFudElkZW50aWZpZXJTZXRzLmFw
cGVuZChDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeShzZXQsIHJlc3VsdCkpOworICAgICAgICB1
bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuc2l6ZSgpOworICAgICAg
ICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5kKFdURk1vdmUoc2V0KSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+
JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQpAQCAtMjEwLDcgKzIw
OSw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yIHsKICAgICBIYXNoTWFwPHVu
c2lnbmVkLCBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJlc3Np
b25SYW5nZT4gbV90eXBlUHJvZmlsZXJJbmZvTWFwOwogICAgIFZlY3RvcjxJbnN0cnVjdGlvblN0
cmVhbTo6T2Zmc2V0PiBtX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzOwogICAg
IFZlY3RvcjxCaXRWZWN0b3I+IG1fYml0VmVjdG9yczsKLSAgICBWZWN0b3I8Q29uc3RhbnRJZGVu
dGlmaWVyU2V0RW50cnk+IG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsKKyAgICBWZWN0b3I8SWRl
bnRpZmllclNldD4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDRlNTcxOWVmODI1OGYzYjI5ZmU2MGQ3NmRiMjAy
ZDJmOWIyOGE1N2UuLmU0M2M0Y2Q3NGM3MzZkNjRmNjc1NTk3MzdjMDQxMmU0ZDRjNjAzMjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCkBAIC0xODQwLDI1ICsxODQwLDEwIEBAIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIEpTVmFsdWUgdiwgU291cmNl
Q29kZVJlCiAgICAgcmV0dXJuIGNvbnN0YW50SUQ7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIElkZW50aWZpZXJTZXQmIHNldCkK
K1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChSZWdpc3RlcklEKiBkc3Qs
IElkZW50aWZpZXJTZXQmJiBzZXQpCiB7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZkNv
bnN0YW50SWRlbnRpZmllclNldHMoKSkgewotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5
IDogbV9jb2RlQmxvY2stPmNvbnN0YW50SWRlbnRpZmllclNldHMoKSkgewotICAgICAgICAgICAg
aWYgKGVudHJ5LmZpcnN0ICE9IHNldCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgcmV0dXJuICZtX2NvbnN0YW50UG9vbFJlZ2lzdGVyc1tlbnRy
eS5zZWNvbmRdOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIGluZGV4ID0g
YWRkQ29uc3RhbnRJbmRleCgpOwotICAgIG1fY29kZUJsb2NrLT5hZGRTZXRDb25zdGFudChzZXQp
OwotICAgIFJlZ2lzdGVySUQqIG1fc2V0UmVnaXN0ZXIgPSAmbV9jb25zdGFudFBvb2xSZWdpc3Rl
cnNbaW5kZXhdOwotICAgIAotICAgIGlmIChkc3QpCi0gICAgICAgIHJldHVybiBtb3ZlKGRzdCwg
bV9zZXRSZWdpc3Rlcik7Ci0gICAgCi0gICAgcmV0dXJuIG1fc2V0UmVnaXN0ZXI7CisgICAgdW5z
aWduZWQgc2V0SW5kZXggPSBtX2NvZGVCbG9jay0+YWRkU2V0Q29uc3RhbnQoV1RGTW92ZShzZXQp
KTsKKyAgICByZXR1cm4gZW1pdExvYWQoZHN0LCBqc051bWJlcihzZXRJbmRleCkpOwogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBMb29rVXBWYXJLaW5kRnVuY3Rvcj4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCBi
YmZiNTY4MTk4ZjQ0NDU1N2RhMzEzM2MyOTY2M2NkNDIwMWU3YmU1Li5iZDhkN2E1ZDEwYmFkNGE4
NDI4YTRmYjc1ZDcwNzA4MGFhM2EwOTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC03MDUsNyArNzA1LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVy
SUQqIGRzdCwgYm9vbCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQq
IGRzdCwgY29uc3QgSWRlbnRpZmllciYpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChS
ZWdpc3RlcklEKiBkc3QsIEpTVmFsdWUsIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IFNvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9h
ZChSZWdpc3RlcklEKiBkc3QsIElkZW50aWZpZXJTZXQmIGV4Y2x1ZGVkTGlzdCk7CisgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgSWRlbnRpZmllclNldCYmIGV4
Y2x1ZGVkTGlzdCk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVW5hcnlPcCwgdHlwZW5h
bWUgPSBzdGQ6OmVuYWJsZV9pZl90PFVuYXJ5T3A6Om9wY29kZUlEICE9IG9wX25lZ2F0ZT4+CiAg
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRVbmFyeU9wKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogc3JjKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rl
c0NvZGVnZW4uY3BwCmluZGV4IDRjMDhhMzNkM2Y4N2JiNDJiZTNmOGY2Y2RiYTVmYTAzNzAwNzhl
NWYuLmQ1ZjczZjNhMmQ2MDliZTRkYzIwYzZjYTM1ZjVlOTcyZWM4MzhkNjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAg
LTUyOTksMTEzICs1Mjk5LDExMCBAQCB2b2lkIE9iamVjdFBhdHRlcm5Ob2RlOjpiaW5kVmFsdWUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogcmhzKQogewogICAgIGdl
bmVyYXRvci5lbWl0UmVxdWlyZU9iamVjdENvZXJjaWJsZShyaHMsICJSaWdodCBzaWRlIG9mIGFz
c2lnbm1lbnQgY2Fubm90IGJlIGRlc3RydWN0dXJlZCJfcyk7CiAKLSAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gZXhjbHVkZWRMaXN0OwotICAgIElkZW50aWZpZXJTZXQgZXhjbHVkZWRTZXQ7Ci0gICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGFkZE1ldGhvZDsKLSAgICBpZiAobV9jb250YWluc1Jlc3RFbGVt
ZW50ICYmIG1fY29udGFpbnNDb21wdXRlZFByb3BlcnR5KSB7Ci0gICAgICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBzZXRDb25zdHJ1Y3RvciA9IGdlbmVyYXRvci5tb3ZlTGlua1RpbWVDb25zdGFudChu
dWxscHRyLCBMaW5rVGltZUNvbnN0YW50OjpTZXQpOwotCi0gICAgICAgIENhbGxBcmd1bWVudHMg
YXJncyhnZW5lcmF0b3IsIG51bGxwdHIsIDApOwotICAgICAgICBleGNsdWRlZExpc3QgPSBnZW5l
cmF0b3IuZW1pdENvbnN0cnVjdChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNldENvbnN0cnVj
dG9yLmdldCgpLCBzZXRDb25zdHJ1Y3Rvci5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBhcmdz
LCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotCi0gICAgICAgIGFkZE1ldGhv
ZCA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGV4Y2x1
ZGVkTGlzdC5nZXQoKSwgZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS5h
ZGRQcml2YXRlTmFtZSgpKTsKLSAgICB9Ci0KICAgICBCeXRlY29kZUdlbmVyYXRvcjo6UHJlc2Vy
dmVkVERaU3RhY2sgcHJlc2VydmVkVERaU3RhY2s7CiAgICAgZ2VuZXJhdG9yLnByZXNlcnZlVERa
U3RhY2socHJlc2VydmVkVERaU3RhY2spOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3RhcmdldFBhdHRlcm5zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IGF1dG8mIHRhcmdl
dCA9IG1fdGFyZ2V0UGF0dGVybnNbaV07Ci0gICAgICAgIGlmICh0YXJnZXQuYmluZGluZ1R5cGUg
PT0gQmluZGluZ1R5cGU6OkVsZW1lbnQpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBkZXN0cnVj
dHVyaW5nIGJlY29tZXMgZ2V0X2J5X2lkIGFuZCBtb3YsIHRoZW4gd2Ugc2hvdWxkIHN0b3JlIHJl
c3VsdHMgZGlyZWN0bHkgdG8gdGhlIGxvY2FsJ3MgYmluZGluZy4KLSAgICAgICAgICAgIC8vIEZy
b20KLSAgICAgICAgICAgIC8vICAgICBnZXRfYnlfaWQgICAgICAgICAgZHN0OmxvYzEwLCBiYXNl
OmxvYzksIHByb3BlcnR5OjAKLSAgICAgICAgICAgIC8vICAgICBtb3YgICAgICAgICAgICAgICAg
ZHN0OmxvYzYsIHNyYzpsb2MxMAotICAgICAgICAgICAgLy8gVG8KLSAgICAgICAgICAgIC8vICAg
ICBnZXRfYnlfaWQgICAgICAgICAgZHN0OmxvYzYsIGJhc2U6bG9jOSwgcHJvcGVydHk6MAotICAg
ICAgICAgICAgYXV0byB3cml0YWJsZURpcmVjdEJpbmRpbmdJZlBvc3NpYmxlID0gWyZdKCkgLT4g
UmVnaXN0ZXJJRCogewotICAgICAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgcGF0dGVybiBp
cyBwb3NzaWJsZS4gSW4gdGhhdCBjYXNlLCBhZnRlciBzZXR0aW5nIHxkYXRhfCBsb2NhbCB2YXJp
YWJsZSwgd2UgbmVlZCB0byBzdG9yZSBwcm9wZXJ0eSBuYW1lIGludG8gdGhlIHNldC4KLSAgICAg
ICAgICAgICAgICAvLyBTbywgb2xkIHByb3BlcnR5IG5hbWUgfGRhdGF8IHJlc3VsdCBtdXN0IGJl
IGtlcHQgYmVmb3JlIHNldHRpbmcgaXQgaW50byB8ZGF0YXwuCi0gICAgICAgICAgICAgICAgLy8g
ICAgICh7IFtkYXRhXTogZGF0YSwgLi4ub2JqIH0gPSBvYmplY3QpOwotICAgICAgICAgICAgICAg
IGlmIChtX2NvbnRhaW5zUmVzdEVsZW1lbnQgJiYgbV9jb250YWluc0NvbXB1dGVkUHJvcGVydHkg
JiYgdGFyZ2V0LnByb3BlcnR5RXhwcmVzc2lvbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBjYW4gaW5jbHVkZSBh
IHJlZmVyZW5jZSB0byBsb2NhbCB2YXJpYWJsZS4gU28gZmlsbGluZyB2YWx1ZSB0byBhIGxvY2Fs
IHZhcmlhYmxlIGNhbiBkaWZmZXIgcmVzdWx0LgotICAgICAgICAgICAgICAgIC8vIFdlIGdpdmUg
dXAgZmFzdCBwYXRoIGlmIGRlZmF1bHQgdmFsdWUgaW5jbHVkZXMgbm9uIGNvbnN0YW50LgotICAg
ICAgICAgICAgICAgIC8vIEZvciBleGFtcGxlLAotICAgICAgICAgICAgICAgIC8vICAgICAoeyBk
YXRhID0gZGF0YSB9ID0gb2JqZWN0KTsKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmRlZmF1
bHRWYWx1ZSAmJiAhdGFyZ2V0LmRlZmF1bHRWYWx1ZS0+aXNDb25zdGFudCgpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0
LnBhdHRlcm4tPndyaXRhYmxlRGlyZWN0QmluZGluZ0lmUG9zc2libGUoZ2VuZXJhdG9yKTsKLSAg
ICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGF1dG8gZmluaXNoRGlyZWN0QmluZGluZ0Fzc2ln
bm1lbnQgPSBbJl0oKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHdyaXRhYmxlRGlyZWN0Qmlu
ZGluZ0lmUG9zc2libGUoKSk7Ci0gICAgICAgICAgICAgICAgdGFyZ2V0LnBhdHRlcm4tPmZpbmlz
aERpcmVjdEJpbmRpbmdBc3NpZ25tZW50KGdlbmVyYXRvcik7Ci0gICAgICAgICAgICB9OwotCi0g
ICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcDsKLSAgICAgICAgICAgIFJlZ2lzdGVy
SUQqIGRpcmVjdEJpbmRpbmcgPSB3cml0YWJsZURpcmVjdEJpbmRpbmdJZlBvc3NpYmxlKCk7Ci0g
ICAgICAgICAgICBpZiAoZGlyZWN0QmluZGluZykKLSAgICAgICAgICAgICAgICB0ZW1wID0gZGly
ZWN0QmluZGluZzsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0ZW1wID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotCi0gICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
cHJvcGVydHlOYW1lOwotICAgICAgICAgICAgaWYgKCF0YXJnZXQucHJvcGVydHlFeHByZXNzaW9u
KSB7Ci0gICAgICAgICAgICAgICAgT3B0aW9uYWw8dWludDMyX3Q+IG9wdGlvbmFsSW5kZXggPSBw
YXJzZUluZGV4KHRhcmdldC5wcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAgIGlmICghb3B0
aW9uYWxJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKHRl
bXAuZ2V0KCksIHJocywgdGFyZ2V0LnByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eUluZGV4
ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKG51bGxwdHIsIGpzTnVtYmVyKG9wdGlvbmFsSW5kZXgudmFs
dWUoKSkpOwotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKHRlbXAu
Z2V0KCksIHJocywgcHJvcGVydHlJbmRleC5nZXQoKSk7CisgICAgeworICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gbmV3T2JqZWN0OworICAgICAgICBJZGVudGlmaWVyU2V0IGV4Y2x1ZGVkU2V0
OworICAgICAgICBPcHRpb25hbDxDYWxsQXJndW1lbnRzPiBhcmdzOworICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZkNvbXB1dGVkUHJvcGVydGllcyA9IDA7CisgICAgICAgIHVuc2lnbmVkIGluZGV4
SW5Bcmd1bWVudHMgPSAyOworICAgICAgICBpZiAobV9jb250YWluc1Jlc3RFbGVtZW50KSB7Cisg
ICAgICAgICAgICBpZiAobV9jb250YWluc0NvbXB1dGVkUHJvcGVydHkpIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKGNvbnN0IGF1dG8mIHRhcmdldCA6IG1fdGFyZ2V0UGF0dGVybnMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRhcmdldC5iaW5kaW5nVHlwZSA9PSBCaW5kaW5nVHlwZTo6RWxl
bWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC5wcm9wZXJ0eUV4cHJl
c3Npb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytudW1iZXJPZkNvbXB1dGVkUHJv
cGVydGllczsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9y
LmVtaXROb2RlRm9yUHJvcGVydHkodGFyZ2V0LnByb3BlcnR5RXhwcmVzc2lvbik7Ci0gICAgICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbCh0ZW1wLmdldCgpLCByaHMsIHByb3BlcnR5
TmFtZS5nZXQoKSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBuZXdPYmplY3QgPSBnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgICAgICBhcmdzLmVtcGxhY2UoZ2VuZXJhdG9y
LCBudWxscHRyLCBpbmRleEluQXJndW1lbnRzICsgbnVtYmVyT2ZDb21wdXRlZFByb3BlcnRpZXMp
OworICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChtX2NvbnRhaW5zUmVzdEVsZW1lbnQpIHsK
LSAgICAgICAgICAgICAgICBpZiAobV9jb250YWluc0NvbXB1dGVkUHJvcGVydHkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHRhcmdldC5wcm9wZXJ0eUV4cHJlc3Npb24pCi0gICAgICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IuZW1pdFRvUHJvcGVydHlLZXko
Z2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihwcm9wZXJ0eU5hbWUuZ2V0KCkpLCBwcm9wZXJ0eU5h
bWUuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IuZW1pdExvYWQobnVsbHB0ciwgdGFyZ2V0LnBy
b3BlcnR5TmFtZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQ2FsbEFyZ3VtZW50cyBhcmdzKGdl
bmVyYXRvciwgbnVsbHB0ciwgMSk7Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5tb3Zl
KGFyZ3MudGhpc1JlZ2lzdGVyKCksIGV4Y2x1ZGVkTGlzdC5nZXQoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGdlbmVyYXRvci5tb3ZlKGFyZ3MuYXJndW1lbnRSZWdpc3RlcigwKSwgcHJvcGVydHlO
YW1lLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgYWRkTWV0aG9kLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24s
IGFyZ3MsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6
Ok5vKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZXhjbHVk
ZWRTZXQuYWRkKHRhcmdldC5wcm9wZXJ0eU5hbWUuaW1wbCgpKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RhcmdldFBhdHRlcm5zLnNpemUoKTsgaSsr
KSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiB0YXJnZXQgPSBtX3RhcmdldFBhdHRlcm5zW2ld
OworICAgICAgICAgICAgaWYgKHRhcmdldC5iaW5kaW5nVHlwZSA9PSBCaW5kaW5nVHlwZTo6RWxl
bWVudCkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBkZXN0cnVjdHVyaW5nIGJlY29tZXMg
Z2V0X2J5X2lkIGFuZCBtb3YsIHRoZW4gd2Ugc2hvdWxkIHN0b3JlIHJlc3VsdHMgZGlyZWN0bHkg
dG8gdGhlIGxvY2FsJ3MgYmluZGluZy4KKyAgICAgICAgICAgICAgICAvLyBGcm9tCisgICAgICAg
ICAgICAgICAgLy8gICAgIGdldF9ieV9pZCAgICAgICAgICBkc3Q6bG9jMTAsIGJhc2U6bG9jOSwg
cHJvcGVydHk6MAorICAgICAgICAgICAgICAgIC8vICAgICBtb3YgICAgICAgICAgICAgICAgZHN0
OmxvYzYsIHNyYzpsb2MxMAorICAgICAgICAgICAgICAgIC8vIFRvCisgICAgICAgICAgICAgICAg
Ly8gICAgIGdldF9ieV9pZCAgICAgICAgICBkc3Q6bG9jNiwgYmFzZTpsb2M5LCBwcm9wZXJ0eTow
CisgICAgICAgICAgICAgICAgYXV0byB3cml0YWJsZURpcmVjdEJpbmRpbmdJZlBvc3NpYmxlID0g
WyZdKCkgLT4gUmVnaXN0ZXJJRCogeworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZm9sbG93
aW5nIHBhdHRlcm4gaXMgcG9zc2libGUuIEluIHRoYXQgY2FzZSwgYWZ0ZXIgc2V0dGluZyB8ZGF0
YXwgbG9jYWwgdmFyaWFibGUsIHdlIG5lZWQgdG8gc3RvcmUgcHJvcGVydHkgbmFtZSBpbnRvIHRo
ZSBzZXQuCisgICAgICAgICAgICAgICAgICAgIC8vIFNvLCBvbGQgcHJvcGVydHkgbmFtZSB8ZGF0
YXwgcmVzdWx0IG11c3QgYmUga2VwdCBiZWZvcmUgc2V0dGluZyBpdCBpbnRvIHxkYXRhfC4KKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICh7IFtkYXRhXTogZGF0YSwgLi4ub2JqIH0gPSBvYmpl
Y3QpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9jb250YWluc1Jlc3RFbGVtZW50ICYmIG1f
Y29udGFpbnNDb21wdXRlZFByb3BlcnR5ICYmIHRhcmdldC5wcm9wZXJ0eUV4cHJlc3Npb24pCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gZGVmYXVsdCB2YWx1ZSBjYW4gaW5jbHVkZSBhIHJlZmVyZW5jZSB0byBsb2NhbCB2YXJp
YWJsZS4gU28gZmlsbGluZyB2YWx1ZSB0byBhIGxvY2FsIHZhcmlhYmxlIGNhbiBkaWZmZXIgcmVz
dWx0LgorICAgICAgICAgICAgICAgICAgICAvLyBXZSBnaXZlIHVwIGZhc3QgcGF0aCBpZiBkZWZh
dWx0IHZhbHVlIGluY2x1ZGVzIG5vbiBjb25zdGFudC4KKyAgICAgICAgICAgICAgICAgICAgLy8g
Rm9yIGV4YW1wbGUsCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAoeyBkYXRhID0gZGF0YSB9
ID0gb2JqZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC5kZWZhdWx0VmFsdWUg
JiYgIXRhcmdldC5kZWZhdWx0VmFsdWUtPmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0
LnBhdHRlcm4tPndyaXRhYmxlRGlyZWN0QmluZGluZ0lmUG9zc2libGUoZ2VuZXJhdG9yKTsKKyAg
ICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgYXV0byBmaW5pc2hEaXJlY3RCaW5k
aW5nQXNzaWdubWVudCA9IFsmXSgpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHdyaXRh
YmxlRGlyZWN0QmluZGluZ0lmUG9zc2libGUoKSk7CisgICAgICAgICAgICAgICAgICAgIHRhcmdl
dC5wYXR0ZXJuLT5maW5pc2hEaXJlY3RCaW5kaW5nQXNzaWdubWVudChnZW5lcmF0b3IpOworICAg
ICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVt
cDsKKyAgICAgICAgICAgICAgICBSZWdpc3RlcklEKiBkaXJlY3RCaW5kaW5nID0gd3JpdGFibGVE
aXJlY3RCaW5kaW5nSWZQb3NzaWJsZSgpOworICAgICAgICAgICAgICAgIGlmIChkaXJlY3RCaW5k
aW5nKQorICAgICAgICAgICAgICAgICAgICB0ZW1wID0gZGlyZWN0QmluZGluZzsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXRhcmdldC5wcm9wZXJ0eUV4cHJlc3Np
b24pIHsKKyAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWw8dWludDMyX3Q+IG9wdGlvbmFsSW5k
ZXggPSBwYXJzZUluZGV4KHRhcmdldC5wcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoIW9wdGlvbmFsSW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEdldEJ5SWQodGVtcC5nZXQoKSwgcmhzLCB0YXJnZXQucHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcHJvcGVydHlJbmRleCA9IGdlbmVyYXRvci5lbWl0TG9hZChudWxscHRyLCBqc051
bWJlcihvcHRpb25hbEluZGV4LnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0R2V0QnlWYWwodGVtcC5nZXQoKSwgcmhzLCBwcm9wZXJ0eUluZGV4LmdldCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobV9jb250
YWluc1Jlc3RFbGVtZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZWRTZXQuYWRk
KHRhcmdldC5wcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lOworICAg
ICAgICAgICAgICAgICAgICBpZiAobV9jb250YWluc1Jlc3RFbGVtZW50KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JQcm9wZXJ0
eShhcmdzLT5hcmd1bWVudFJlZ2lzdGVyKGluZGV4SW5Bcmd1bWVudHMrKyksIHRhcmdldC5wcm9w
ZXJ0eUV4cHJlc3Npb24pOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVG9Qcm9wZXJ0eUtl
eShOdW1iZXIgfCBTdHJpbmcpIGRvZXMgbm90IGhhdmUgc2lkZS1lZmZlY3QuCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBBbmQgQGNvcHlEYXRhUHJvcGVydGllcyBwZXJmb3JtcyBUb1Byb3Bl
cnR5S2V5IGludGVybmFsbHkuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbmQgZm9yIE51
bWJlciBjYXNlLCBwYXNzaW5nIGl0IHRvIEdldEJ5VmFsIGlzIGJldHRlciBmb3IgcGVyZm9ybWFu
Y2UuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRhcmdldC5wcm9wZXJ0eUV4cHJlc3Np
b24tPmlzTnVtYmVyKCkgfHwgIXRhcmdldC5wcm9wZXJ0eUV4cHJlc3Npb24tPmlzU3RyaW5nKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLmVt
aXRUb1Byb3BlcnR5S2V5KHByb3BlcnR5TmFtZS5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWUgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JQcm9wZXJ0eSh0YXJnZXQucHJvcGVydHlF
eHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbCh0
ZW1wLmdldCgpLCByaHMsIHByb3BlcnR5TmFtZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAodGFyZ2V0LmRlZmF1bHRWYWx1ZSkKLSAgICAgICAgICAgICAgICBh
c3NpZ25EZWZhdWx0VmFsdWVJZlVuZGVmaW5lZChnZW5lcmF0b3IsIHRlbXAuZ2V0KCksIHRhcmdl
dC5kZWZhdWx0VmFsdWUpOwotICAgICAgICAgICAgaWYgKGRpcmVjdEJpbmRpbmcpCi0gICAgICAg
ICAgICAgICAgZmluaXNoRGlyZWN0QmluZGluZ0Fzc2lnbm1lbnQoKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICB0YXJnZXQucGF0dGVybi0+YmluZFZhbHVlKGdlbmVyYXRvciwg
dGVtcC5nZXQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQodGFyZ2V0
LmJpbmRpbmdUeXBlID09IEJpbmRpbmdUeXBlOjpSZXN0RWxlbWVudCk7Ci0gICAgICAgICAgICBB
U1NFUlQoaSA9PSBtX3RhcmdldFBhdHRlcm5zLnNpemUoKSAtIDEpOwotICAgICAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IG5ld09iamVjdCA9IGdlbmVyYXRvci5lbWl0TmV3T2JqZWN0KGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIGxvYWQg
YW5kIGNhbGwgQGNvcHlEYXRhUHJvcGVydGllcwotICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGNvcHlEYXRhUHJvcGVydGllcyA9IGdlbmVyYXRvci5tb3ZlTGlua1RpbWVDb25zdGFudChu
dWxscHRyLCBMaW5rVGltZUNvbnN0YW50Ojpjb3B5RGF0YVByb3BlcnRpZXMpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBDYWxsQXJndW1lbnRzIGFyZ3MoZ2VuZXJhdG9yLCBudWxscHRyLCAz
KTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChhcmdzLnRoaXNSZWdpc3RlcigpLCBq
c1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5tb3ZlKGFyZ3MuYXJndW1lbnRS
ZWdpc3RlcigwKSwgbmV3T2JqZWN0LmdldCgpKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5tb3Zl
KGFyZ3MuYXJndW1lbnRSZWdpc3RlcigxKSwgcmhzKTsKLSAgICAgICAgICAgIGlmIChtX2NvbnRh
aW5zQ29tcHV0ZWRQcm9wZXJ0eSkKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IubW92ZShhcmdz
LmFyZ3VtZW50UmVnaXN0ZXIoMiksIGV4Y2x1ZGVkTGlzdC5nZXQoKSk7Ci0gICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjbHVkZWRTZXRSZWcg
PSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBleGNsdWRlZFNl
dCk7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy5hcmd1bWVudFJlZ2lzdGVy
KDIpLCBleGNsdWRlZFNldFJlZy5nZXQoKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKHRhcmdldC5kZWZhdWx0VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGFzc2lnbkRl
ZmF1bHRWYWx1ZUlmVW5kZWZpbmVkKGdlbmVyYXRvciwgdGVtcC5nZXQoKSwgdGFyZ2V0LmRlZmF1
bHRWYWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKGRpcmVjdEJpbmRpbmcpCisgICAgICAgICAg
ICAgICAgICAgIGZpbmlzaERpcmVjdEJpbmRpbmdBc3NpZ25tZW50KCk7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0YXJnZXQucGF0dGVybi0+YmluZFZhbHVlKGdl
bmVyYXRvciwgdGVtcC5nZXQoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIEFTU0VSVCh0YXJnZXQuYmluZGluZ1R5cGUgPT0gQmluZGluZ1R5cGU6OlJlc3RFbGVtZW50
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaSA9PSBtX3RhcmdldFBhdHRlcm5zLnNpemUoKSAt
IDEpOwogCi0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCBjb3B5RGF0YVByb3BlcnRpZXMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJn
cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8p
OwotICAgICAgICAgICAgdGFyZ2V0LnBhdHRlcm4tPmJpbmRWYWx1ZShnZW5lcmF0b3IsIG5ld09i
amVjdC5nZXQoKSk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXROZXdPYmplY3QobmV3
T2JqZWN0LmdldCgpKTsKKworICAgICAgICAgICAgICAgIC8vIGxvYWQgYW5kIGNhbGwgQGNvcHlE
YXRhUHJvcGVydGllcworICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBjb3B5RGF0
YVByb3BlcnRpZXMgPSBnZW5lcmF0b3IubW92ZUxpbmtUaW1lQ29uc3RhbnQobnVsbHB0ciwgTGlu
a1RpbWVDb25zdGFudDo6Y29weURhdGFQcm9wZXJ0aWVzKTsKKworICAgICAgICAgICAgICAgIC8v
IFRoaXMgbXVzdCBiZSBub24tdGFpbC1jYWxsIGJlY2F1c2Ugb2YgQGNvcHlEYXRhUHJvcGVydGll
cydzIGFzc3VtcHRpb24uCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy0+dGhp
c1JlZ2lzdGVyKCksIG5ld09iamVjdC5nZXQoKSk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9y
Lm1vdmUoYXJncy0+YXJndW1lbnRSZWdpc3RlcigwKSwgcmhzKTsKKyAgICAgICAgICAgICAgICBn
ZW5lcmF0b3IuZW1pdExvYWQoYXJncy0+YXJndW1lbnRSZWdpc3RlcigxKSwgV1RGTW92ZShleGNs
dWRlZFNldCkpOworICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGNvcHlEYXRhUHJvcGVydGllcy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0
aW9uLCBhcmdzLnZhbHVlKCksIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVi
dWdnYWJsZUNhbGw6Ok5vKTsKKyAgICAgICAgICAgICAgICB0YXJnZXQucGF0dGVybi0+YmluZFZh
bHVlKGdlbmVyYXRvciwgbmV3T2JqZWN0LmdldCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KIApAQCAtNTYxNiwxMSArNTYxMywxMSBAQCBSZWdpc3RlcklEKiBPYmplY3RTcHJl
YWRFeHByZXNzaW9uTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
bwogICAgIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBjb3B5RGF0YVByb3BlcnRpZXMgPSBnZW5l
cmF0b3IubW92ZUxpbmtUaW1lQ29uc3RhbnQobnVsbHB0ciwgTGlua1RpbWVDb25zdGFudDo6Y29w
eURhdGFQcm9wZXJ0aWVzKTsKICAgICAKLSAgICBDYWxsQXJndW1lbnRzIGFyZ3MoZ2VuZXJhdG9y
LCBudWxscHRyLCAyKTsKLSAgICBnZW5lcmF0b3IuZW1pdExvYWQoYXJncy50aGlzUmVnaXN0ZXIo
KSwganNVbmRlZmluZWQoKSk7Ci0gICAgZ2VuZXJhdG9yLm1vdmUoYXJncy5hcmd1bWVudFJlZ2lz
dGVyKDApLCBkc3QpOwotICAgIGdlbmVyYXRvci5tb3ZlKGFyZ3MuYXJndW1lbnRSZWdpc3Rlcigx
KSwgc3JjLmdldCgpKTsKKyAgICBDYWxsQXJndW1lbnRzIGFyZ3MoZ2VuZXJhdG9yLCBudWxscHRy
LCAxKTsKKyAgICBnZW5lcmF0b3IubW92ZShhcmdzLnRoaXNSZWdpc3RlcigpLCBkc3QpOworICAg
IGdlbmVyYXRvci5tb3ZlKGFyZ3MuYXJndW1lbnRSZWdpc3RlcigwKSwgc3JjLmdldCgpKTsKICAg
ICAKKyAgICAvLyBUaGlzIG11c3QgYmUgbm9uLXRhaWwtY2FsbCBiZWNhdXNlIG9mIEBjb3B5RGF0
YVByb3BlcnRpZXMncyBhc3N1bXB0aW9uLgogICAgIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIGNvcHlEYXRhUHJvcGVydGllcy5nZXQoKSwgTm9FeHBlY3RlZEZ1
bmN0aW9uLCBhcmdzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2Fi
bGVDYWxsOjpObyk7CiAgICAgCiAgICAgcmV0dXJuIGRzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAppbmRleCBlMzAyNGQ4N2E4NTg3OWNjNzk3NzA0
Mzc2N2U1ZjE3ZjlmNTM2NzgxLi5lZDIyOTFmMzVmNzVmYmJhNjI2MzI4ZGQwMGRlMjE0NGE1ZDlj
NDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBl
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3Bw
CkBAIC05NjIsMjUgKzk2Miw2IEBAIGNsYXNzIENhY2hlZEhhc2hTZXQgOiBwdWJsaWMgQ2FjaGVk
T2JqZWN0PEhhc2hTZXQ8U291cmNlVHlwZTxUPiwgSGFzaEFyZz4+IHsKICAgICBDYWNoZWRWZWN0
b3I8VD4gbV9lbnRyaWVzOwogfTsKIAotY2xhc3MgQ2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0
RW50cnkgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8Q29uc3RhbnRJZGVudGlmaWVyU2V0
RW50cnk+IHsKLXB1YmxpYzoKLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSYgZW50cnkpCi0gICAgewotICAgICAgICBtX2Nv
bnN0YW50ID0gZW50cnkuc2Vjb25kOwotICAgICAgICBtX3NldC5lbmNvZGUoZW5jb2RlciwgZW50
cnkuZmlyc3QpOwotICAgIH0KLQotICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIENv
bnN0YW50SWRlbnRpZmllclNldEVudHJ5JiBlbnRyeSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGVu
dHJ5LnNlY29uZCA9IG1fY29uc3RhbnQ7Ci0gICAgICAgIG1fc2V0LmRlY29kZShkZWNvZGVyLCBl
bnRyeS5maXJzdCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHVuc2lnbmVkIG1fY29uc3RhbnQ7
Ci0gICAgQ2FjaGVkSGFzaFNldDxDYWNoZWRSZWZQdHI8Q2FjaGVkVW5pcXVlZFN0cmluZ0ltcGw+
LCBJZGVudGlmaWVyUmVwSGFzaD4gbV9zZXQ7Ci19OwotCiBjbGFzcyBDYWNoZWRDb2RlQmxvY2tS
YXJlRGF0YSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VW5saW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRh
PiB7CiBwdWJsaWM6CiAgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVW5s
aW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhJiByYXJlRGF0YSkKQEAgLTEwMjEsNyArMTAwMiw3IEBA
IGNsYXNzIENhY2hlZENvZGVCbG9ja1JhcmVEYXRhIDogcHVibGljIENhY2hlZE9iamVjdDxVbmxp
bmtlZENvZGVCbG9jazo6UmFyZURhdGE+CiAgICAgQ2FjaGVkSGFzaE1hcDx1bnNpZ25lZCwgVW5s
aW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhOjpUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+IG1f
dHlwZVByb2ZpbGVySW5mb01hcDsKICAgICBDYWNoZWRWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06
Ok9mZnNldD4gbV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0czsKICAgICBDYWNo
ZWRWZWN0b3I8Q2FjaGVkQml0VmVjdG9yPiBtX2JpdFZlY3RvcnM7Ci0gICAgQ2FjaGVkVmVjdG9y
PENhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiBtX2NvbnN0YW50SWRlbnRpZmllclNl
dHM7CisgICAgQ2FjaGVkVmVjdG9yPENhY2hlZEhhc2hTZXQ8Q2FjaGVkUmVmUHRyPENhY2hlZFVu
aXF1ZWRTdHJpbmdJbXBsPiwgSWRlbnRpZmllclJlcEhhc2g+PiBtX2NvbnN0YW50SWRlbnRpZmll
clNldHM7CiAgICAgdW5zaWduZWQgbV9uZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciA6IDE7CiAg
ICAgdW5zaWduZWQgbV9wcml2YXRlQnJhbmRSZXF1aXJlbWVudCA6IDE7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlv
bnMuY3BwCmluZGV4IDQwMjFmYzdlMGFkYWY3YTBhOWUwZWY2Y2ZkMjI1ODM4YjViZjg3ODMuLjIw
YmFlZGVjODE0YzFiZGI0Mzc3ZmI3YTRmYzYwZDNkM2Y1OWQ3MmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5j
cHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUg
IkluZGlyZWN0RXZhbEV4ZWN1dGFibGUuaCIKKyNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWUuaCIK
ICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkludGxEYXRlVGltZUZvcm1hdC5o
IgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKQEAgLTgzNCwzNCArODM1LDU2IEBAIHN0YXRpYyBi
b29sIGNhblBlcmZvcm1GYXN0UHJvcGVydHlFbnVtZXJhdGlvbkZvckNvcHlEYXRhUHJvcGVydGll
cyhTdHJ1Y3R1cmUqIHN0CiAgICAgcmV0dXJuIHRydWU7CiB9OwogCitzdGF0aWMgQ29kZUJsb2Nr
KiBnZXRDYWxsZXJDb2RlQmxvY2soQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgQ2FsbEZy
YW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4gPSBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpOworICAgIGlmIChjb2Rl
T3JpZ2luICYmIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCkpCisgICAgICAgIHJldHVybiBi
YXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSgpKTsKKyAgICByZXR1cm4gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOworfQorCiAvLyBo
dHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNvcHlkYXRhcHJvcGVydGllcwogSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGdsb2JhbEZ1bmNDb3B5RGF0YVByb3BlcnRpZXMsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAotICAgIEpTRmluYWxPYmplY3QqIHRhcmdldCA9IGpzQ2FzdDxKU0ZpbmFsT2Jq
ZWN0Kj4oY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgSlNGaW5hbE9iamVj
dCogdGFyZ2V0ID0ganNDYXN0PEpTRmluYWxPYmplY3QqPihjYWxsRnJhbWUtPnRoaXNWYWx1ZSgp
KTsKICAgICBBU1NFUlQodGFyZ2V0LT5pc1N0cnVjdHVyZUV4dGVuc2libGUodm0pKTsKIAotICAg
IEpTVmFsdWUgc291cmNlVmFsdWUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpOwor
ICAgIEpTVmFsdWUgc291cmNlVmFsdWUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
OwogICAgIGlmIChzb3VyY2VWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRhcmdldCk7CiAKICAgICBKU09iamVjdCogc291cmNlID0gc291cmNlVmFsdWUu
dG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwog
Ci0gICAgSlNTZXQqIGV4Y2x1ZGVkU2V0ID0gbnVsbHB0cjsKLSAgICBpZiAoY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCkgPiAyKQotICAgICAgICBleGNsdWRlZFNldCA9IGpzQ2FzdDxKU1NldCo+
KGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMikpOworICAgIFVubGlua2VkQ29kZUJsb2Nr
KiB1bmxpbmtlZENvZGVCbG9jayA9IG51bGxwdHI7CisgICAgY29uc3QgSWRlbnRpZmllclNldCog
ZXhjbHVkZWRTZXQgPSBudWxscHRyOworICAgIE9wdGlvbmFsPElkZW50aWZpZXJTZXQ+IG5ld2x5
Q3JlYXRlZFNldDsKKyAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPiAxKSB7Cisg
ICAgICAgIGludDMyX3Qgc2V0SW5kZXggPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LmFzVUludDMyQXNBbnlJbnQoKTsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBnZXRD
YWxsZXJDb2RlQmxvY2soY2FsbEZyYW1lKTsKKyAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7Cisg
ICAgICAgIHVubGlua2VkQ29kZUJsb2NrID0gY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygp
OworICAgICAgICBleGNsdWRlZFNldCA9ICZ1bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRJZGVu
dGlmaWVyU2V0cygpW3NldEluZGV4XTsKKyAgICAgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpID4gMikgeworICAgICAgICAgICAgbmV3bHlDcmVhdGVkU2V0LmVtcGxhY2UoKmV4Y2x1
ZGVkU2V0KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAyOyBpbmRleCA8IGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGluZGV4KS50b1By
b3BlcnR5S2V5KGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICBuZXdseUNyZWF0ZWRTZXQtPmFkZChw
cm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGV4Y2x1ZGVk
U2V0ID0gJm5ld2x5Q3JlYXRlZFNldC52YWx1ZSgpOworICAgICAgICB9CisgICAgfQogCi0gICAg
YXV0byBpc1Byb3BlcnR5TmFtZUV4Y2x1ZGVkID0gWyZdIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSAtPiBib29sIHsKKyAgICBhdXRvIGlz
UHJvcGVydHlOYW1lRXhjbHVkZWQgPSBbJl0gKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIC0+
IGJvb2wgewogICAgICAgICBBU1NFUlQoIXByb3BlcnR5TmFtZS5pc1ByaXZhdGVOYW1lKCkpOwog
ICAgICAgICBpZiAoIWV4Y2x1ZGVkU2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIEpTVmFsdWUgcHJvcGVydHlOYW1lVmFsdWUgPSBpZGVudGlmaWVyVG9KU1ZhbHVlKHZt
LCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKTsKLSAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAgICByZXR1cm4gZXhjbHVk
ZWRTZXQtPmhhcyhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZVZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIGV4Y2x1ZGVkU2V0LT5jb250YWlucyhwcm9wZXJ0eU5hbWUudWlkKCkpOwogICAgIH07CiAK
ICAgICBpZiAoIXNvdXJjZS0+c3RhdGljUHJvcGVydGllc1JlaWZpZWQodm0pKSB7CkBAIC04ODgs
NiArOTExLDkgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGdsb2JhbEZ1bmNDb3B5RGF0YVBy
b3BlcnRpZXMsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICAgICAgICAgIGlmIChlbnRy
eS5hdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKQogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogCisgICAgICAgICAgICBpZiAoaXNQcm9wZXJ0eU5hbWVFeGNsdWRl
ZChwcm9wZXJ0eU5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgICAg
ICAgICBwcm9wZXJ0aWVzLmFwcGVuZChlbnRyeS5rZXkpOwogICAgICAgICAgICAgdmFsdWVzLmFw
cGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3coc291cmNlLT5nZXREaXJlY3QoZW50cnkub2Zmc2V0KSk7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg5OCwxMCArOTI0LDYgQEAgSlNDX0RFRklO
RV9IT1NUX0ZVTkNUSU9OKGdsb2JhbEZ1bmNDb3B5RGF0YVByb3BlcnRpZXMsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2IKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9wZXJ0aWVz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgcHV0IHByb3Bl
cnRpZXMgaW4gYSBiYXRjaGluZyBtYW5uZXIgdG8gYWNjZWxlcmF0ZSBDb3B5RGF0YVByb3BlcnRp
ZXMgbW9yZS4KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xODUzNTgKLSAgICAgICAgICAgIGJvb2wgZXhjbHVkZWQgPSBpc1Byb3BlcnR5TmFt
ZUV4Y2x1ZGVkKGdsb2JhbE9iamVjdCwgcHJvcGVydGllc1tpXS5nZXQoKSk7Ci0gICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgaWYgKGV4Y2x1
ZGVkKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgdGFyZ2V0LT5wdXRE
aXJlY3Qodm0sIHByb3BlcnRpZXNbaV0uZ2V0KCksIHZhbHVlcy5hdChpKSk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewpAQCAtOTEwLDkgKzkzMiw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElP
TihnbG9iYWxGdW5jQ29weURhdGFQcm9wZXJ0aWVzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBwcm9wZXJ0eU5hbWUgOiBwcm9wZXJ0eU5hbWVzKSB7Ci0gICAgICAgICAg
ICBib29sIGV4Y2x1ZGVkID0gaXNQcm9wZXJ0eU5hbWVFeGNsdWRlZChnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwotICAgICAgICAgICAgaWYgKGV4Y2x1ZGVkKQorICAgICAgICAgICAgaWYgKGlzUHJvcGVydHlO
YW1lRXhjbHVkZWQocHJvcGVydHlOYW1lKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAog
ICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qoc291cmNlLCBQcm9wZXJ0eVNsb3Q6OkludGVy
bmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpOwpAQCAtOTM1LDcgKzk1NSw4IEBAIEpTQ19E
RUZJTkVfSE9TVF9GVU5DVElPTihnbG9iYWxGdW5jQ29weURhdGFQcm9wZXJ0aWVzLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKHVubGlu
a2VkQ29kZUJsb2NrKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRhcmdldCk7CiB9CiAK
IEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihnbG9iYWxGdW5jRGF0ZVRpbWVGb3JtYXQsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdkZGM1MzA3
YzAzMDkyNDZmOThjNGQyYzJkMTM4Nzc0YjVkZDEzNzguLjFiODFmY2UzMzA0Mjg1NDc2NmE1OGM1
MTNmNmJjZjdiZjMyZjZhN2YgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pT
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjEtMDItMTMgIFl1c3VrZSBTdXp1
a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBTaW1wbGlmeSBleGNsdWRl
ZFNldCBoYW5kbGluZyBpbiBvYmplY3QgcmVzdCBleHByZXNzaW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE2NjgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9vYmplY3Qt
cmVzdC1jb21wdXRlZC1kZXN0cnVjdHVyaW5nLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3Mv
b2JqZWN0LXJlc3QtY29tcHV0ZWQtaW5saW5lZC1udW1iZXJzLmpzOiBBZGRlZC4KKyAgICAgICAg
KGlubmVyKToKKyAgICAgICAgKG91dGVyKToKKyAgICAgICAgKiBzdHJlc3Mvb2JqZWN0LXJlc3Qt
Y29tcHV0ZWQtaW5saW5lZC5qczogQWRkZWQuCisgICAgICAgIChpbm5lcik6CisgICAgICAgIChv
dXRlcik6CisKIDIwMjEtMDItMTEgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwu
Y29tPgogCiAgICAgICAgIFNldEludGVncml0eUxldmVsIHNob3VsZCBjYWxsIFtbRGVmaW5lT3du
UHJvcGVydHldXSB3aXRoIHBhcnRpYWwgZGVzY3JpcHRvcgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9t
aWNyb2JlbmNobWFya3Mvb2JqZWN0LXJlc3QtY29tcHV0ZWQtZGVzdHJ1Y3R1cmluZy5qcyBiL0pT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVjdC1yZXN0LWNvbXB1dGVkLWRlc3RydWN0dXJpbmcu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNjM0OWQ5M2Q3MmMzNmNlMTY0ZGZiZTAyOTQ4YjNmODMzYWFlMWNkMAot
LS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVjdC1yZXN0LWNv
bXB1dGVkLWRlc3RydWN0dXJpbmcuanMKQEAgLTAsMCArMSwxMiBAQAorKGZ1bmN0aW9uKGtleTEs
IGtleTIsIGtleTMpIHsKKyAgICB2YXIgb2JqID0geyBhOiAwLCBiOiAwLCBjOiAwLCBkOiAxLCBl
OiAwLCBmOiAwLCBnOiAwLCBoOiAwLCBpOiAwLCBqOiAwIH07CisgICAgdmFyIGFjYyA9IDA7CisK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgaSsrKSB7CisgICAgICAgIHZhciB7IFtrZXkx
XTogYSwgW2tleTJdOiBiLCBba2V5M106IGMsIC4uLnJlc3QgfSA9IG9iajsKKyAgICAgICAgYWNj
ICs9IHJlc3QuZDsKKyAgICB9CisKKyAgICBpZiAoYWNjICE9PSAxZTUpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcigiQmFkIGFzc2VydGlvbiEiKTsKK30pKCdhJywgJ2InLCAnYycpOwpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9zdHJlc3Mvb2JqZWN0LXJlc3QtY29tcHV0ZWQtaW5saW5lZC1udW1iZXJz
LmpzIGIvSlNUZXN0cy9zdHJlc3Mvb2JqZWN0LXJlc3QtY29tcHV0ZWQtaW5saW5lZC1udW1iZXJz
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjBkOGZiYzE2YjYxMTliNTU0YjI1ZWY3ZWY3MWJkZjM1NGQxNDljN2IK
LS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9vYmplY3QtcmVzdC1jb21wdXRlZC1p
bmxpbmVkLW51bWJlcnMuanMKQEAgLTAsMCArMSwxNyBAQAorZnVuY3Rpb24gaW5uZXIob2JqZWN0
LCBrZXkxKQoreworICAgIHZhciB7IFtrZXkxXTogYSwgWzNdOiBiLCAuLi5yZXN0IH0gPSBvYmpl
Y3Q7CisgICAgcmV0dXJuIHJlc3QuZCArIGEgKyBiOworfQorCitmdW5jdGlvbiBvdXRlcihvYmpl
Y3QpCit7CisgICAgaWYgKGlubmVyKG9iamVjdCwgJ2EnKSAhPT0gMykKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uISIpOworfQorbm9JbmxpbmUob3V0ZXIpOworCit2YXIg
b2JqZWN0ID0geyBhOiAxLCBiOiAwLCBjOiAwLCBkOiAxLCBlOiAwLCBmOiAwLCBnOiAwLCBoOiAw
LCBpOiAwLCBqOiAwLCBbM106IDEgfTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCA1ZTM7IGkrKykK
KyAgICBvdXRlcihvYmplY3QpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvb2JqZWN0LXJl
c3QtY29tcHV0ZWQtaW5saW5lZC5qcyBiL0pTVGVzdHMvc3RyZXNzL29iamVjdC1yZXN0LWNvbXB1
dGVkLWlubGluZWQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDk4OTNkZWUwYjBmODk1N2FkMDhmZjMxN2Q0Mzlk
MmUxNTRiM2E0YwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL29iamVjdC1yZXN0
LWNvbXB1dGVkLWlubGluZWQuanMKQEAgLTAsMCArMSwxNyBAQAorZnVuY3Rpb24gaW5uZXIob2Jq
ZWN0LCBrZXkxKQoreworICAgIHZhciB7IFtrZXkxXTogYSwgLi4ucmVzdCB9ID0gb2JqZWN0Owor
ICAgIHJldHVybiByZXN0LmQgKyBhOworfQorCitmdW5jdGlvbiBvdXRlcihvYmplY3QpCit7Cisg
ICAgaWYgKGlubmVyKG9iamVjdCwgJ2EnKSAhPT0gMikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJCYWQgYXNzZXJ0aW9uISIpOworfQorbm9JbmxpbmUob3V0ZXIpOworCit2YXIgb2JqZWN0ID0g
eyBhOiAxLCBiOiAwLCBjOiAwLCBkOiAxLCBlOiAwLCBmOiAwLCBnOiAwLCBoOiAwLCBpOiAwLCBq
OiAwIH07CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyBpKyspCisgICAgb3V0ZXIob2JqZWN0
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420219</attachid>
            <date>2021-02-13 03:01:45 -0800</date>
            <delta_ts>2021-02-15 15:03:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221668-20210213030144.patch</filename>
            <type>text/plain</type>
            <size>34928</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
Zjk1OGIzYTQ4ZjNkM2Q5MmJmNGIwN2NlM2ZlNDQ3Y2NlYzZhY2E3Li4wNmZlYmM3N2M5MmZmOWMy
MGU2MTQzYWI1YzFmY2I4NzYwNGE2NjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAyMS0wMi0xMyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFNpbXBsaWZ5IGV4Y2x1ZGVkU2V0IGhhbmRsaW5nIGluIG9iamVj
dCByZXN0IGV4cHJlc3Npb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMTY2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggc2ltcGxpZmllcyBPYmplY3QgcmVzdC9zcHJlYWQgYnkgYXZv
aWRpbmcgdXNlIG9mIEpTU2V0LgorICAgICAgICBJbnN0ZWFkLCB3ZSBzdG9yZSBJZGVudGlmaWVy
U2V0IGludG8gVW5saW5rZWRDb2RlQmxvY2sncyB2ZWN0b3IgYW5kCisgICAgICAgIGFjY2VzcyB0
aGlzIGRpcmVjdGx5IHRocm91Z2ggSlMgY29uc3RhbnQgbnVtYmVyLgorICAgICAgICBBbmQgZm9y
IGFkZGl0aW9uYWwgcHJvcGVydGllcywgd2UgY29sbGVjdCBpdCBkdXJpbmcgZGVzdHJ1Y3R1cmlu
ZywKKyAgICAgICAgYW5kIHBhc3MgaXQgdG8gQGNvcHlEYXRhUHJvcGVydGllcyBhcyBhbiBhcmd1
bWVudCBzbyB0aGF0IHdlIGRvIG5vdAorICAgICAgICBuZWVkIHRvIGNhbGwgU2V0I2FkZCBpbiBK
UyBzaWRlLgorCisgICAgICAgIFdlIGFsc28gY2hlY2sgKGlzTnVtYmVyKCkgfHwgaXNTdHJpbmcp
IGNvbmRpdGlvbnMgZm9yIHByb3BlcnRpZXMgdG8KKyAgICAgICAgYXZvaWQgY2FsbGluZyBUb1By
b3BlcnR5S2V5IGZvciBjb25zdGFudCBjYXNlLiBUaGlzIGlzIE9LIHNpbmNlIHdlCisgICAgICAg
IHdpbGwgY2FsbCBUb1Byb3BlcnR5S2V5IGluc2lkZSBAY29weURhdGFQcm9wZXJ0aWVzLCBhbmQg
dGhpcyBpcworICAgICAgICBzaWRlLWVmZmVjdCBmcmVlIGlmIHRoZSBpbnB1dCBpcyBudW1iZXIg
b3Igc3RyaW5nLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6c2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAg
KiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRJZGVudGlm
aWVyU2V0cyk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3Iu
aDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmNvbnN0YW50SWRl
bnRpZmllclNldHMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6
YWRkU2V0Q29uc3RhbnQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZCk6CisgICAg
ICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6Ok9iamVjdFBhdHRlcm5Ob2Rl
OjpiaW5kVmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpPYmplY3RTcHJlYWRFeHByZXNzaW9u
Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBydW50aW1lL0NhY2hlZFR5cGVzLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FjaGVkQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk6OmVuY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5
OjpkZWNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZXRDYWxsZXJDb2RlQmxvY2spOgorICAg
ICAgICAoSlNDOjpKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04pOgorCiAyMDIxLTAyLTEyICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gRW5hYmxlIEpJ
VENhZ2Ugb24gbWFjT1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKaW5kZXggMDhiZTRjMTg1MmQ5ZDdjNGI4Nzk4YjY3ODJiZDIwNGFmNTQ1ZWYyZS4uYWRl
MzRkZjlmODdmMjIzOGU4YjY1MWIyMzY2ZWJkYzU0MGRkNDRjMSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTQyMiw5ICs0MjIsNiBAQCBib29s
IENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25l
ckV4ZWN1dGFibGUsIFVubGluawogICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+aGFzUmFyZURh
dGEoKSkgewogICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CiAKLSAgICAgICAg
c2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKHZtLCB1bmxpbmtlZENvZGVCbG9jay0+
Y29uc3RhbnRJZGVudGlmaWVyU2V0cygpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0
aHJvd1Njb3BlLCBmYWxzZSk7Ci0KICAgICAgICAgaWYgKHNpemVfdCBjb3VudCA9IHVubGlua2Vk
Q29kZUJsb2NrLT5udW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkpIHsKICAgICAgICAgICAgIG1f
cmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMucmVzaXplVG9GaXQoY291bnQpOwogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CkBAIC04OTAsMjggKzg4
Nyw2IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0K
IAotdm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhWTSYg
dm0sIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4mIGNv
bnN0YW50cykKLXsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOwot
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IGNvbnN0YW50cykgewotICAgICAgICBjb25z
dCBJZGVudGlmaWVyU2V0JiBzZXQgPSBlbnRyeS5maXJzdDsKLQotICAgICAgICBTdHJ1Y3R1cmUq
IHNldFN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+c2V0U3RydWN0dXJlKCk7Ci0gICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgIEpTU2V0KiBqc1NldCA9
IEpTU2V0OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCB2bSwgc2V0U3RydWN0dXJlLCBzZXQuc2l6ZSgp
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLQotICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHNldEVudHJ5IDogc2V0KSB7Ci0gICAgICAgICAgICBKU1N0cmlu
ZyoganNTdHJpbmcgPSBqc093bmVkU3RyaW5nKHZtLCBzZXRFbnRyeS5nZXQoKSk7IAotICAgICAg
ICAgICAganNTZXQtPmFkZChnbG9iYWxPYmplY3QsIGpzU3RyaW5nKTsKLSAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9j
b25zdGFudFJlZ2lzdGVyc1tlbnRyeS5zZWNvbmRdLnNldCh2bSwgdGhpcywganNTZXQpOwotICAg
IH0KLX0KLQogdm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFJlZkNv
dW50ZWRBcnJheTxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IFJlZkNv
dW50ZWRBcnJheTxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSkKIHsK
ICAgICBWTSYgdm0gPSAqbV92bTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAppbmRleCBkZmNlN2U0ZjMwNWUwZGNjZDljZjExNDE4ODgyMWMwMzMxN2MyM2RiLi4w
MjY4ZmNhZjZjZmUzNDQ1NDk2NDdmMTEyZThiYzE0MTgwNjc0NzY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC05NTMsOCArOTUzLDYgQEAgY2xhc3Mg
Q29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICB2b2lkIHVwZGF0ZUFsbFZhbHVlUHJv
ZmlsZVByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyh1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9u
QXJndW1lbnRWYWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxl
cyk7CiAKLSAgICB2b2lkIHNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhWTSYsIGNv
bnN0IFJlZkNvdW50ZWRBcnJheTxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50
cyk7Ci0KICAgICB2b2lkIHNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFJlZkNvdW50ZWRBcnJh
eTxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IFJlZkNvdW50ZWRBcnJh
eTxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSk7CiAKICAgICB2b2lk
IHJlcGxhY2VDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBKU1ZhbHVlIHZhbHVlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaApp
bmRleCAxZjUxZWNlNWQ2Zjg2ZDcwOTUxMWI0YTRjMTgyYzY0Y2JmYTE4M2JmLi45YWNkYjRjNWYy
NTllMjZiNzgwOWU0YTQxYzhlMWNlM2JkM2VkNWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaApAQCAtNzQsNyArNzQsNiBAQCB0
eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkQXJyYXlQcm9maWxlOwogdHlwZWRlZiB1bnNpZ25lZCBV
bmxpbmtlZEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2Vk
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7CiB0eXBlZGVmIHVuc2lnbmVkIFVubGlua2VkTExJbnRD
YWxsTGlua0luZm87Ci11c2luZyBDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeSA9IHN0ZDo6cGFp
cjxJZGVudGlmaWVyU2V0LCB1bnNpZ25lZD47CiAKIHN0cnVjdCBVbmxpbmtlZFN0cmluZ0p1bXBU
YWJsZSB7CiAgICAgc3RydWN0IE9mZnNldExvY2F0aW9uIHsKQEAgLTE2Miw3ICsxNjEsNyBAQCBj
bGFzcyBVbmxpbmtlZENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIGNvbnN0IFJlZkNv
dW50ZWRBcnJheTxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRh
dGlvbjsgfQogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFudElkZW50aWZpZXJTZXRzKCkg
Y29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fY29uc3RhbnRJZGVudGlm
aWVyU2V0cy5zaXplKCkgOiAwOyB9Ci0gICAgY29uc3QgUmVmQ291bnRlZEFycmF5PENvbnN0YW50
SWRlbnRpZmllclNldEVudHJ5PiYgY29uc3RhbnRJZGVudGlmaWVyU2V0cygpIHsgQVNTRVJUKG1f
cmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRzOyB9
CisgICAgY29uc3QgUmVmQ291bnRlZEFycmF5PElkZW50aWZpZXJTZXQ+JiBjb25zdGFudElkZW50
aWZpZXJTZXRzKCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2Nv
bnN0YW50SWRlbnRpZmllclNldHM7IH0KIAogICAgIC8vIEp1bXBzCiAgICAgc2l6ZV90IG51bWJl
ck9mSnVtcFRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzLnNpemUoKTsgfQpA
QCAtNDExLDcgKzQxMCw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrIDogcHVibGljIEpTQ2Vs
bCB7CiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5n
ZT4gbV90eXBlUHJvZmlsZXJJbmZvTWFwOwogICAgICAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1
Y3Rpb25TdHJlYW06Ok9mZnNldD4gbV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0
czsKICAgICAgICAgUmVmQ291bnRlZEFycmF5PEJpdFZlY3Rvcj4gbV9iaXRWZWN0b3JzOwotICAg
ICAgICBSZWZDb3VudGVkQXJyYXk8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+IG1fY29uc3Rh
bnRJZGVudGlmaWVyU2V0czsKKyAgICAgICAgUmVmQ291bnRlZEFycmF5PElkZW50aWZpZXJTZXQ+
IG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsKIAogICAgICAgICB1bnNpZ25lZCBtX25lZWRzQ2xh
c3NGaWVsZEluaXRpYWxpemVyIDogMTsKICAgICAgICAgdW5zaWduZWQgbV9wcml2YXRlQnJhbmRS
ZXF1aXJlbWVudCA6IDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCmluZGV4IDk0YzY4NzBlOTk0YzJi
ZjVjOTgyY2U5NTJlNGM1MzRiZGM5NmI0ODguLjQ4MzgwNTFjODg5OThiYzE1YWUyYzNiZDQ1ZmY3
YmYxYjhlMmViMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCkBAIC0xMTEsMTQgKzExMSwxMyBA
QCBjbGFzcyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciB7CiAgICAgfQogCiAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZDb25zdGFudElkZW50aWZpZXJTZXRzKCkgY29uc3QgeyByZXR1cm4gbV9jb25z
dGFudElkZW50aWZpZXJTZXRzLnNpemUoKTsgfQotICAgIGNvbnN0IFZlY3RvcjxDb25zdGFudElk
ZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50SWRlbnRpZmllclNldHMoKSB7IHJldHVybiBtX2Nv
bnN0YW50SWRlbnRpZmllclNldHM7IH0KLSAgICB2b2lkIGFkZFNldENvbnN0YW50KElkZW50aWZp
ZXJTZXQmIHNldCkKKyAgICBjb25zdCBWZWN0b3I8SWRlbnRpZmllclNldD4mIGNvbnN0YW50SWRl
bnRpZmllclNldHMoKSB7IHJldHVybiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7IH0KKyAgICB1
bnNpZ25lZCBhZGRTZXRDb25zdGFudChJZGVudGlmaWVyU2V0JiYgc2V0KQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fdm0uaGVhcC5pc0RlZmVycmVkKCkpOwotICAgICAgICB1bnNpZ25lZCByZXN1
bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lz
dGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOwotICAgICAgICBtX2NvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OjpPdGhlcik7Ci0gICAgICAgIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0cy5hcHBlbmQoQ29uc3Rh
bnRJZGVudGlmaWVyU2V0RW50cnkoc2V0LCByZXN1bHQpKTsKKyAgICAgICAgdW5zaWduZWQgcmVz
dWx0ID0gbV9jb25zdGFudElkZW50aWZpZXJTZXRzLnNpemUoKTsKKyAgICAgICAgbV9jb25zdGFu
dElkZW50aWZpZXJTZXRzLmFwcGVuZChXVEZNb3ZlKHNldCkpOworICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAogICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVn
aXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KQEAgLTIxMCw3ICsyMDksNyBAQCBjbGFz
cyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciB7CiAgICAgSGFzaE1hcDx1bnNpZ25lZCwgVW5s
aW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhOjpUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+IG1f
dHlwZVByb2ZpbGVySW5mb01hcDsKICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNl
dD4gbV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0czsKICAgICBWZWN0b3I8Qml0
VmVjdG9yPiBtX2JpdFZlY3RvcnM7Ci0gICAgVmVjdG9yPENvbnN0YW50SWRlbnRpZmllclNldEVu
dHJ5PiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7CisgICAgVmVjdG9yPElkZW50aWZpZXJTZXQ+
IG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAppbmRleCA0ZTU3MTllZjgyNThmM2IyOWZlNjBkNzZkYjIwMmQyZjliMjhhNTdl
Li5lNDNjNGNkNzRjNzM2ZDY0ZjY3NTU5NzM3YzA0MTJlNGQ0YzYwMzIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcApAQCAtMTg0MCwyNSArMTg0MCwxMCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBKU1ZhbHVlIHYsIFNvdXJjZUNvZGVSZQogICAg
IHJldHVybiBjb25zdGFudElEOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBJZGVudGlmaWVyU2V0JiBzZXQpCitSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWQoUmVnaXN0ZXJJRCogZHN0LCBJZGVudGlmaWVy
U2V0JiYgc2V0KQogewotICAgIGlmIChtX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudElkZW50
aWZpZXJTZXRzKCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IG1fY29kZUJs
b2NrLT5jb25zdGFudElkZW50aWZpZXJTZXRzKCkpIHsKLSAgICAgICAgICAgIGlmIChlbnRyeS5m
aXJzdCAhPSBzZXQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHJldHVybiAmbV9jb25zdGFudFBvb2xSZWdpc3RlcnNbZW50cnkuc2Vjb25kXTsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBpbmRleCA9IGFkZENvbnN0YW50
SW5kZXgoKTsKLSAgICBtX2NvZGVCbG9jay0+YWRkU2V0Q29uc3RhbnQoc2V0KTsKLSAgICBSZWdp
c3RlcklEKiBtX3NldFJlZ2lzdGVyID0gJm1fY29uc3RhbnRQb29sUmVnaXN0ZXJzW2luZGV4XTsK
LSAgICAKLSAgICBpZiAoZHN0KQotICAgICAgICByZXR1cm4gbW92ZShkc3QsIG1fc2V0UmVnaXN0
ZXIpOwotICAgIAotICAgIHJldHVybiBtX3NldFJlZ2lzdGVyOworICAgIHVuc2lnbmVkIHNldElu
ZGV4ID0gbV9jb2RlQmxvY2stPmFkZFNldENvbnN0YW50KFdURk1vdmUoc2V0KSk7CisgICAgcmV0
dXJuIGVtaXRMb2FkKGRzdCwganNOdW1iZXIoc2V0SW5kZXgpKTsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgTG9va1VwVmFyS2luZEZ1bmN0b3I+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggYmJmYjU2ODE5OGY0
NDQ1NTdkYTMxMzNjMjk2NjNjZDQyMDFlN2JlNS4uYmQ4ZDdhNWQxMGJhZDRhODQyOGE0ZmI3NWQ3
MDcwODBhYTNhMDkwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtNzA1LDcgKzcwNSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGJv
b2wpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGNvbnN0
IElkZW50aWZpZXImKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJRCog
ZHN0LCBKU1ZhbHVlLCBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb246Ok90aGVyKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0ZXJJ
RCogZHN0LCBJZGVudGlmaWVyU2V0JiBleGNsdWRlZExpc3QpOworICAgICAgICBSZWdpc3RlcklE
KiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIElkZW50aWZpZXJTZXQmJiBleGNsdWRlZExpc3Qp
OwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFVuYXJ5T3AsIHR5cGVuYW1lID0gc3RkOjpl
bmFibGVfaWZfdDxVbmFyeU9wOjpvcGNvZGVJRCAhPSBvcF9uZWdhdGU+PgogICAgICAgICBSZWdp
c3RlcklEKiBlbWl0VW5hcnlPcChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cAppbmRleCA0YzA4YTMzZDNmODdiYjQyYmUzZjhmNmNkYmE1ZmEwMzcwMDc4ZTVmLi5kNWY3M2Yz
YTJkNjA5YmU0ZGMyMGM2Y2EzNWY1ZTk3MmVjODM4ZDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC01Mjk5LDExMyAr
NTI5OSwxMTAgQEAgdm9pZCBPYmplY3RQYXR0ZXJuTm9kZTo6YmluZFZhbHVlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIHJocykKIHsKICAgICBnZW5lcmF0b3IuZW1p
dFJlcXVpcmVPYmplY3RDb2VyY2libGUocmhzLCAiUmlnaHQgc2lkZSBvZiBhc3NpZ25tZW50IGNh
bm5vdCBiZSBkZXN0cnVjdHVyZWQiX3MpOwogCi0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4Y2x1
ZGVkTGlzdDsKLSAgICBJZGVudGlmaWVyU2V0IGV4Y2x1ZGVkU2V0OwotICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBhZGRNZXRob2Q7Ci0gICAgaWYgKG1fY29udGFpbnNSZXN0RWxlbWVudCAmJiBtX2Nv
bnRhaW5zQ29tcHV0ZWRQcm9wZXJ0eSkgewotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2V0
Q29uc3RydWN0b3IgPSBnZW5lcmF0b3IubW92ZUxpbmtUaW1lQ29uc3RhbnQobnVsbHB0ciwgTGlu
a1RpbWVDb25zdGFudDo6U2V0KTsKLQotICAgICAgICBDYWxsQXJndW1lbnRzIGFyZ3MoZ2VuZXJh
dG9yLCBudWxscHRyLCAwKTsKLSAgICAgICAgZXhjbHVkZWRMaXN0ID0gZ2VuZXJhdG9yLmVtaXRD
b25zdHJ1Y3QoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzZXRDb25zdHJ1Y3Rvci5nZXQoKSwg
c2V0Q29uc3RydWN0b3IuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncywgZGl2b3QoKSwg
ZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLQotICAgICAgICBhZGRNZXRob2QgPSBnZW5lcmF0
b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBleGNsdWRlZExpc3QuZ2V0
KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkuYWRkUHJpdmF0ZU5h
bWUoKSk7Ci0gICAgfQotCiAgICAgQnl0ZWNvZGVHZW5lcmF0b3I6OlByZXNlcnZlZFREWlN0YWNr
IHByZXNlcnZlZFREWlN0YWNrOwogICAgIGdlbmVyYXRvci5wcmVzZXJ2ZVREWlN0YWNrKHByZXNl
cnZlZFREWlN0YWNrKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90YXJnZXRQYXR0
ZXJucy5zaXplKCk7IGkrKykgewotICAgICAgICBjb25zdCBhdXRvJiB0YXJnZXQgPSBtX3Rhcmdl
dFBhdHRlcm5zW2ldOwotICAgICAgICBpZiAodGFyZ2V0LmJpbmRpbmdUeXBlID09IEJpbmRpbmdU
eXBlOjpFbGVtZW50KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgZGVzdHJ1Y3R1cmluZyBiZWNv
bWVzIGdldF9ieV9pZCBhbmQgbW92LCB0aGVuIHdlIHNob3VsZCBzdG9yZSByZXN1bHRzIGRpcmVj
dGx5IHRvIHRoZSBsb2NhbCdzIGJpbmRpbmcuCi0gICAgICAgICAgICAvLyBGcm9tCi0gICAgICAg
ICAgICAvLyAgICAgZ2V0X2J5X2lkICAgICAgICAgIGRzdDpsb2MxMCwgYmFzZTpsb2M5LCBwcm9w
ZXJ0eTowCi0gICAgICAgICAgICAvLyAgICAgbW92ICAgICAgICAgICAgICAgIGRzdDpsb2M2LCBz
cmM6bG9jMTAKLSAgICAgICAgICAgIC8vIFRvCi0gICAgICAgICAgICAvLyAgICAgZ2V0X2J5X2lk
ICAgICAgICAgIGRzdDpsb2M2LCBiYXNlOmxvYzksIHByb3BlcnR5OjAKLSAgICAgICAgICAgIGF1
dG8gd3JpdGFibGVEaXJlY3RCaW5kaW5nSWZQb3NzaWJsZSA9IFsmXSgpIC0+IFJlZ2lzdGVySUQq
IHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgZm9sbG93aW5nIHBhdHRlcm4gaXMgcG9zc2libGUu
IEluIHRoYXQgY2FzZSwgYWZ0ZXIgc2V0dGluZyB8ZGF0YXwgbG9jYWwgdmFyaWFibGUsIHdlIG5l
ZWQgdG8gc3RvcmUgcHJvcGVydHkgbmFtZSBpbnRvIHRoZSBzZXQuCi0gICAgICAgICAgICAgICAg
Ly8gU28sIG9sZCBwcm9wZXJ0eSBuYW1lIHxkYXRhfCByZXN1bHQgbXVzdCBiZSBrZXB0IGJlZm9y
ZSBzZXR0aW5nIGl0IGludG8gfGRhdGF8LgotICAgICAgICAgICAgICAgIC8vICAgICAoeyBbZGF0
YV06IGRhdGEsIC4uLm9iaiB9ID0gb2JqZWN0KTsKLSAgICAgICAgICAgICAgICBpZiAobV9jb250
YWluc1Jlc3RFbGVtZW50ICYmIG1fY29udGFpbnNDb21wdXRlZFByb3BlcnR5ICYmIHRhcmdldC5w
cm9wZXJ0eUV4cHJlc3Npb24pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgY2FuIGluY2x1ZGUgYSByZWZlcmVuY2Ug
dG8gbG9jYWwgdmFyaWFibGUuIFNvIGZpbGxpbmcgdmFsdWUgdG8gYSBsb2NhbCB2YXJpYWJsZSBj
YW4gZGlmZmVyIHJlc3VsdC4KLSAgICAgICAgICAgICAgICAvLyBXZSBnaXZlIHVwIGZhc3QgcGF0
aCBpZiBkZWZhdWx0IHZhbHVlIGluY2x1ZGVzIG5vbiBjb25zdGFudC4KLSAgICAgICAgICAgICAg
ICAvLyBGb3IgZXhhbXBsZSwKLSAgICAgICAgICAgICAgICAvLyAgICAgKHsgZGF0YSA9IGRhdGEg
fSA9IG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRhcmdldC5kZWZhdWx0VmFsdWUgJiYg
IXRhcmdldC5kZWZhdWx0VmFsdWUtPmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5wYXR0ZXJuLT53
cml0YWJsZURpcmVjdEJpbmRpbmdJZlBvc3NpYmxlKGdlbmVyYXRvcik7Ci0gICAgICAgICAgICB9
OwotCi0gICAgICAgICAgICBhdXRvIGZpbmlzaERpcmVjdEJpbmRpbmdBc3NpZ25tZW50ID0gWyZd
KCkgewotICAgICAgICAgICAgICAgIEFTU0VSVCh3cml0YWJsZURpcmVjdEJpbmRpbmdJZlBvc3Np
YmxlKCkpOwotICAgICAgICAgICAgICAgIHRhcmdldC5wYXR0ZXJuLT5maW5pc2hEaXJlY3RCaW5k
aW5nQXNzaWdubWVudChnZW5lcmF0b3IpOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXA7Ci0gICAgICAgICAgICBSZWdpc3RlcklEKiBkaXJlY3RC
aW5kaW5nID0gd3JpdGFibGVEaXJlY3RCaW5kaW5nSWZQb3NzaWJsZSgpOwotICAgICAgICAgICAg
aWYgKGRpcmVjdEJpbmRpbmcpCi0gICAgICAgICAgICAgICAgdGVtcCA9IGRpcmVjdEJpbmRpbmc7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGVtcCA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKLQotICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFt
ZTsKLSAgICAgICAgICAgIGlmICghdGFyZ2V0LnByb3BlcnR5RXhwcmVzc2lvbikgewotICAgICAg
ICAgICAgICAgIE9wdGlvbmFsPHVpbnQzMl90PiBvcHRpb25hbEluZGV4ID0gcGFyc2VJbmRleCh0
YXJnZXQucHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbmFsSW5kZXgp
Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QnlJZCh0ZW1wLmdldCgpLCBy
aHMsIHRhcmdldC5wcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlJbmRleCA9IGdlbmVyYXRv
ci5lbWl0TG9hZChudWxscHRyLCBqc051bWJlcihvcHRpb25hbEluZGV4LnZhbHVlKCkpKTsKLSAg
ICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbCh0ZW1wLmdldCgpLCByaHMs
IHByb3BlcnR5SW5kZXguZ2V0KCkpOworICAgIHsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IG5ld09iamVjdDsKKyAgICAgICAgSWRlbnRpZmllclNldCBleGNsdWRlZFNldDsKKyAgICAgICAg
T3B0aW9uYWw8Q2FsbEFyZ3VtZW50cz4gYXJnczsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZD
b21wdXRlZFByb3BlcnRpZXMgPSAwOworICAgICAgICB1bnNpZ25lZCBpbmRleEluQXJndW1lbnRz
ID0gMjsKKyAgICAgICAgaWYgKG1fY29udGFpbnNSZXN0RWxlbWVudCkgeworICAgICAgICAgICAg
aWYgKG1fY29udGFpbnNDb21wdXRlZFByb3BlcnR5KSB7CisgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBhdXRvJiB0YXJnZXQgOiBtX3RhcmdldFBhdHRlcm5zKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh0YXJnZXQuYmluZGluZ1R5cGUgPT0gQmluZGluZ1R5cGU6OkVsZW1lbnQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQucHJvcGVydHlFeHByZXNzaW9uKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICsrbnVtYmVyT2ZDb21wdXRlZFByb3BlcnRpZXM7Cisg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZv
clByb3BlcnR5KHRhcmdldC5wcm9wZXJ0eUV4cHJlc3Npb24pOwotICAgICAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0R2V0QnlWYWwodGVtcC5nZXQoKSwgcmhzLCBwcm9wZXJ0eU5hbWUuZ2V0KCkp
OwogICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV3T2JqZWN0ID0gZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpOworICAgICAgICAgICAgYXJncy5lbXBsYWNlKGdlbmVyYXRvciwgbnVsbHB0ciwg
aW5kZXhJbkFyZ3VtZW50cyArIG51bWJlck9mQ29tcHV0ZWRQcm9wZXJ0aWVzKTsKKyAgICAgICAg
fQogCi0gICAgICAgICAgICBpZiAobV9jb250YWluc1Jlc3RFbGVtZW50KSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1fY29udGFpbnNDb21wdXRlZFByb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICh0YXJnZXQucHJvcGVydHlFeHByZXNzaW9uKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLmVtaXRUb1Byb3BlcnR5S2V5KGdlbmVyYXRvci50
ZW1wRGVzdGluYXRpb24ocHJvcGVydHlOYW1lLmdldCgpKSwgcHJvcGVydHlOYW1lLmdldCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlOYW1lID0gZ2VuZXJhdG9yLmVtaXRMb2FkKG51bGxwdHIsIHRhcmdldC5wcm9wZXJ0eU5hbWUp
OwotCi0gICAgICAgICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgYXJncyhnZW5lcmF0b3IsIG51
bGxwdHIsIDEpOwotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IubW92ZShhcmdzLnRoaXNS
ZWdpc3RlcigpLCBleGNsdWRlZExpc3QuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBnZW5l
cmF0b3IubW92ZShhcmdzLmFyZ3VtZW50UmVnaXN0ZXIoMCksIHByb3BlcnR5TmFtZS5nZXQoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIGFkZE1ldGhvZC5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBhcmdzLCBkaXZv
dCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpObyk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVkU2V0LmFkZCh0
YXJnZXQucHJvcGVydHlOYW1lLmltcGwoKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV90YXJnZXRQYXR0ZXJucy5zaXplKCk7IGkrKykgeworICAgICAg
ICAgICAgY29uc3QgYXV0byYgdGFyZ2V0ID0gbV90YXJnZXRQYXR0ZXJuc1tpXTsKKyAgICAgICAg
ICAgIGlmICh0YXJnZXQuYmluZGluZ1R5cGUgPT0gQmluZGluZ1R5cGU6OkVsZW1lbnQpIHsKKyAg
ICAgICAgICAgICAgICAvLyBJZiB0aGUgZGVzdHJ1Y3R1cmluZyBiZWNvbWVzIGdldF9ieV9pZCBh
bmQgbW92LCB0aGVuIHdlIHNob3VsZCBzdG9yZSByZXN1bHRzIGRpcmVjdGx5IHRvIHRoZSBsb2Nh
bCdzIGJpbmRpbmcuCisgICAgICAgICAgICAgICAgLy8gRnJvbQorICAgICAgICAgICAgICAgIC8v
ICAgICBnZXRfYnlfaWQgICAgICAgICAgZHN0OmxvYzEwLCBiYXNlOmxvYzksIHByb3BlcnR5OjAK
KyAgICAgICAgICAgICAgICAvLyAgICAgbW92ICAgICAgICAgICAgICAgIGRzdDpsb2M2LCBzcmM6
bG9jMTAKKyAgICAgICAgICAgICAgICAvLyBUbworICAgICAgICAgICAgICAgIC8vICAgICBnZXRf
YnlfaWQgICAgICAgICAgZHN0OmxvYzYsIGJhc2U6bG9jOSwgcHJvcGVydHk6MAorICAgICAgICAg
ICAgICAgIGF1dG8gd3JpdGFibGVEaXJlY3RCaW5kaW5nSWZQb3NzaWJsZSA9IFsmXSgpIC0+IFJl
Z2lzdGVySUQqIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBwYXR0ZXJu
IGlzIHBvc3NpYmxlLiBJbiB0aGF0IGNhc2UsIGFmdGVyIHNldHRpbmcgfGRhdGF8IGxvY2FsIHZh
cmlhYmxlLCB3ZSBuZWVkIHRvIHN0b3JlIHByb3BlcnR5IG5hbWUgaW50byB0aGUgc2V0LgorICAg
ICAgICAgICAgICAgICAgICAvLyBTbywgb2xkIHByb3BlcnR5IG5hbWUgfGRhdGF8IHJlc3VsdCBt
dXN0IGJlIGtlcHQgYmVmb3JlIHNldHRpbmcgaXQgaW50byB8ZGF0YXwuCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAoeyBbZGF0YV06IGRhdGEsIC4uLm9iaiB9ID0gb2JqZWN0KTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fY29udGFpbnNSZXN0RWxlbWVudCAmJiBtX2NvbnRhaW5zQ29t
cHV0ZWRQcm9wZXJ0eSAmJiB0YXJnZXQucHJvcGVydHlFeHByZXNzaW9uKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1
bHQgdmFsdWUgY2FuIGluY2x1ZGUgYSByZWZlcmVuY2UgdG8gbG9jYWwgdmFyaWFibGUuIFNvIGZp
bGxpbmcgdmFsdWUgdG8gYSBsb2NhbCB2YXJpYWJsZSBjYW4gZGlmZmVyIHJlc3VsdC4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgZ2l2ZSB1cCBmYXN0IHBhdGggaWYgZGVmYXVsdCB2YWx1ZSBp
bmNsdWRlcyBub24gY29uc3RhbnQuCisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBleGFtcGxl
LAorICAgICAgICAgICAgICAgICAgICAvLyAgICAgKHsgZGF0YSA9IGRhdGEgfSA9IG9iamVjdCk7
CisgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuZGVmYXVsdFZhbHVlICYmICF0YXJnZXQu
ZGVmYXVsdFZhbHVlLT5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5wYXR0ZXJuLT53
cml0YWJsZURpcmVjdEJpbmRpbmdJZlBvc3NpYmxlKGdlbmVyYXRvcik7CisgICAgICAgICAgICAg
ICAgfTsKKworICAgICAgICAgICAgICAgIGF1dG8gZmluaXNoRGlyZWN0QmluZGluZ0Fzc2lnbm1l
bnQgPSBbJl0oKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh3cml0YWJsZURpcmVjdEJp
bmRpbmdJZlBvc3NpYmxlKCkpOworICAgICAgICAgICAgICAgICAgICB0YXJnZXQucGF0dGVybi0+
ZmluaXNoRGlyZWN0QmluZGluZ0Fzc2lnbm1lbnQoZ2VuZXJhdG9yKTsKKyAgICAgICAgICAgICAg
ICB9OworCisgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXA7CisgICAgICAg
ICAgICAgICAgUmVnaXN0ZXJJRCogZGlyZWN0QmluZGluZyA9IHdyaXRhYmxlRGlyZWN0QmluZGlu
Z0lmUG9zc2libGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoZGlyZWN0QmluZGluZykKKyAgICAg
ICAgICAgICAgICAgICAgdGVtcCA9IGRpcmVjdEJpbmRpbmc7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICB0ZW1wID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwor
CisgICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQucHJvcGVydHlFeHByZXNzaW9uKSB7CisgICAg
ICAgICAgICAgICAgICAgIE9wdGlvbmFsPHVpbnQzMl90PiBvcHRpb25hbEluZGV4ID0gcGFyc2VJ
bmRleCh0YXJnZXQucHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRp
b25hbEluZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlk
KHRlbXAuZ2V0KCksIHJocywgdGFyZ2V0LnByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHBy
b3BlcnR5SW5kZXggPSBnZW5lcmF0b3IuZW1pdExvYWQobnVsbHB0ciwganNOdW1iZXIob3B0aW9u
YWxJbmRleC52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dEdldEJ5VmFsKHRlbXAuZ2V0KCksIHJocywgcHJvcGVydHlJbmRleC5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY29udGFpbnNSZXN0RWxl
bWVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVkU2V0LmFkZCh0YXJnZXQucHJv
cGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fY29udGFpbnNSZXN0RWxlbWVudCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yUHJvcGVydHkoYXJncy0+YXJn
dW1lbnRSZWdpc3RlcihpbmRleEluQXJndW1lbnRzKyspLCB0YXJnZXQucHJvcGVydHlFeHByZXNz
aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvUHJvcGVydHlLZXkoTnVtYmVyIHwg
U3RyaW5nKSBkb2VzIG5vdCBoYXZlIHNpZGUtZWZmZWN0LgorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQW5kIEBjb3B5RGF0YVByb3BlcnRpZXMgcGVyZm9ybXMgVG9Qcm9wZXJ0eUtleSBpbnRl
cm5hbGx5LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5kIGZvciBOdW1iZXIgY2FzZSwg
cGFzc2luZyBpdCB0byBHZXRCeVZhbCBpcyBiZXR0ZXIgZm9yIHBlcmZvcm1hbmNlLgorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQucHJvcGVydHlFeHByZXNzaW9uLT5pc051bWJl
cigpIHx8ICF0YXJnZXQucHJvcGVydHlFeHByZXNzaW9uLT5pc1N0cmluZygpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5lbWl0VG9Qcm9wZXJ0
eUtleShwcm9wZXJ0eU5hbWUuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0g
Z2VuZXJhdG9yLmVtaXROb2RlRm9yUHJvcGVydHkodGFyZ2V0LnByb3BlcnR5RXhwcmVzc2lvbik7
CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0QnlWYWwodGVtcC5nZXQoKSwg
cmhzLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKHRhcmdldC5kZWZhdWx0VmFsdWUpCi0gICAgICAgICAgICAgICAgYXNzaWduRGVmYXVs
dFZhbHVlSWZVbmRlZmluZWQoZ2VuZXJhdG9yLCB0ZW1wLmdldCgpLCB0YXJnZXQuZGVmYXVsdFZh
bHVlKTsKLSAgICAgICAgICAgIGlmIChkaXJlY3RCaW5kaW5nKQotICAgICAgICAgICAgICAgIGZp
bmlzaERpcmVjdEJpbmRpbmdBc3NpZ25tZW50KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgdGFyZ2V0LnBhdHRlcm4tPmJpbmRWYWx1ZShnZW5lcmF0b3IsIHRlbXAuZ2V0KCkp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHRhcmdldC5iaW5kaW5nVHlw
ZSA9PSBCaW5kaW5nVHlwZTo6UmVzdEVsZW1lbnQpOwotICAgICAgICAgICAgQVNTRVJUKGkgPT0g
bV90YXJnZXRQYXR0ZXJucy5zaXplKCkgLSAxKTsKLSAgICAgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBuZXdPYmplY3QgPSBnZW5lcmF0b3IuZW1pdE5ld09iamVjdChnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBsb2FkIGFuZCBjYWxsIEBj
b3B5RGF0YVByb3BlcnRpZXMKLSAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBjb3B5RGF0
YVByb3BlcnRpZXMgPSBnZW5lcmF0b3IubW92ZUxpbmtUaW1lQ29uc3RhbnQobnVsbHB0ciwgTGlu
a1RpbWVDb25zdGFudDo6Y29weURhdGFQcm9wZXJ0aWVzKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgQ2FsbEFyZ3VtZW50cyBhcmdzKGdlbmVyYXRvciwgbnVsbHB0ciwgMyk7Ci0gICAgICAg
ICAgICBnZW5lcmF0b3IuZW1pdExvYWQoYXJncy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQo
KSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IubW92ZShhcmdzLmFyZ3VtZW50UmVnaXN0ZXIoMCks
IG5ld09iamVjdC5nZXQoKSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IubW92ZShhcmdzLmFyZ3Vt
ZW50UmVnaXN0ZXIoMSksIHJocyk7Ci0gICAgICAgICAgICBpZiAobV9jb250YWluc0NvbXB1dGVk
UHJvcGVydHkpCi0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLm1vdmUoYXJncy5hcmd1bWVudFJl
Z2lzdGVyKDIpLCBleGNsdWRlZExpc3QuZ2V0KCkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4Y2x1ZGVkU2V0UmVnID0gZ2VuZXJhdG9y
LmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgZXhjbHVkZWRTZXQpOwotICAgICAg
ICAgICAgICAgIGdlbmVyYXRvci5tb3ZlKGFyZ3MuYXJndW1lbnRSZWdpc3RlcigyKSwgZXhjbHVk
ZWRTZXRSZWcuZ2V0KCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0YXJn
ZXQuZGVmYXVsdFZhbHVlKQorICAgICAgICAgICAgICAgICAgICBhc3NpZ25EZWZhdWx0VmFsdWVJ
ZlVuZGVmaW5lZChnZW5lcmF0b3IsIHRlbXAuZ2V0KCksIHRhcmdldC5kZWZhdWx0VmFsdWUpOwor
ICAgICAgICAgICAgICAgIGlmIChkaXJlY3RCaW5kaW5nKQorICAgICAgICAgICAgICAgICAgICBm
aW5pc2hEaXJlY3RCaW5kaW5nQXNzaWdubWVudCgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgdGFyZ2V0LnBhdHRlcm4tPmJpbmRWYWx1ZShnZW5lcmF0b3IsIHRl
bXAuZ2V0KCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
dGFyZ2V0LmJpbmRpbmdUeXBlID09IEJpbmRpbmdUeXBlOjpSZXN0RWxlbWVudCk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKGkgPT0gbV90YXJnZXRQYXR0ZXJucy5zaXplKCkgLSAxKTsKIAotICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgY29w
eURhdGFQcm9wZXJ0aWVzLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGFyZ3MsIGRpdm90KCks
IGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKLSAgICAgICAg
ICAgIHRhcmdldC5wYXR0ZXJuLT5iaW5kVmFsdWUoZ2VuZXJhdG9yLCBuZXdPYmplY3QuZ2V0KCkp
OworICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TmV3T2JqZWN0KG5ld09iamVjdC5nZXQo
KSk7CisKKyAgICAgICAgICAgICAgICAvLyBsb2FkIGFuZCBjYWxsIEBjb3B5RGF0YVByb3BlcnRp
ZXMKKyAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gY29weURhdGFQcm9wZXJ0aWVz
ID0gZ2VuZXJhdG9yLm1vdmVMaW5rVGltZUNvbnN0YW50KG51bGxwdHIsIExpbmtUaW1lQ29uc3Rh
bnQ6OmNvcHlEYXRhUHJvcGVydGllcyk7CisKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG11c3Qg
YmUgbm9uLXRhaWwtY2FsbCBiZWNhdXNlIG9mIEBjb3B5RGF0YVByb3BlcnRpZXMncyBhc3N1bXB0
aW9uLgorICAgICAgICAgICAgICAgIGdlbmVyYXRvci5tb3ZlKGFyZ3MtPnRoaXNSZWdpc3Rlcigp
LCBuZXdPYmplY3QuZ2V0KCkpOworICAgICAgICAgICAgICAgIGdlbmVyYXRvci5tb3ZlKGFyZ3Mt
PmFyZ3VtZW50UmVnaXN0ZXIoMCksIHJocyk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRMb2FkKGFyZ3MtPmFyZ3VtZW50UmVnaXN0ZXIoMSksIFdURk1vdmUoZXhjbHVkZWRTZXQpKTsK
KyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpLCBjb3B5RGF0YVByb3BlcnRpZXMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncy52
YWx1ZSgpLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxs
OjpObyk7CisgICAgICAgICAgICAgICAgdGFyZ2V0LnBhdHRlcm4tPmJpbmRWYWx1ZShnZW5lcmF0
b3IsIG5ld09iamVjdC5nZXQoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTU2MTYsMTEgKzU2MTMsMTEgQEAgUmVnaXN0ZXJJRCogT2JqZWN0U3ByZWFkRXhwcmVzc2lv
bk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG8KICAgICAKICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gY29weURhdGFQcm9wZXJ0aWVzID0gZ2VuZXJhdG9yLm1vdmVM
aW5rVGltZUNvbnN0YW50KG51bGxwdHIsIExpbmtUaW1lQ29uc3RhbnQ6OmNvcHlEYXRhUHJvcGVy
dGllcyk7CiAgICAgCi0gICAgQ2FsbEFyZ3VtZW50cyBhcmdzKGdlbmVyYXRvciwgbnVsbHB0ciwg
Mik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGFyZ3MudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZp
bmVkKCkpOwotICAgIGdlbmVyYXRvci5tb3ZlKGFyZ3MuYXJndW1lbnRSZWdpc3RlcigwKSwgZHN0
KTsKLSAgICBnZW5lcmF0b3IubW92ZShhcmdzLmFyZ3VtZW50UmVnaXN0ZXIoMSksIHNyYy5nZXQo
KSk7CisgICAgQ2FsbEFyZ3VtZW50cyBhcmdzKGdlbmVyYXRvciwgbnVsbHB0ciwgMSk7CisgICAg
Z2VuZXJhdG9yLm1vdmUoYXJncy50aGlzUmVnaXN0ZXIoKSwgZHN0KTsKKyAgICBnZW5lcmF0b3Iu
bW92ZShhcmdzLmFyZ3VtZW50UmVnaXN0ZXIoMCksIHNyYy5nZXQoKSk7CiAgICAgCisgICAgLy8g
VGhpcyBtdXN0IGJlIG5vbi10YWlsLWNhbGwgYmVjYXVzZSBvZiBAY29weURhdGFQcm9wZXJ0aWVz
J3MgYXNzdW1wdGlvbi4KICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCBjb3B5RGF0YVByb3BlcnRpZXMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJn
cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8p
OwogICAgIAogICAgIHJldHVybiBkc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWNoZWRUeXBlcy5jcHAKaW5kZXggZTMwMjRkODdhODU4NzljYzc5NzcwNDM3NjdlNWYxN2Y5
ZjUzNjc4MS4uZWQyMjkxZjM1Zjc1ZmJiYTYyNjMyOGRkMDBkZTIxNDRhNWQ5YzQ5MiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApAQCAtOTYyLDI1
ICs5NjIsNiBAQCBjbGFzcyBDYWNoZWRIYXNoU2V0IDogcHVibGljIENhY2hlZE9iamVjdDxIYXNo
U2V0PFNvdXJjZVR5cGU8VD4sIEhhc2hBcmc+PiB7CiAgICAgQ2FjaGVkVmVjdG9yPFQ+IG1fZW50
cmllczsKIH07CiAKLWNsYXNzIENhY2hlZENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5IDogcHVi
bGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiB7Ci1w
dWJsaWM6Ci0gICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ29uc3RhbnRJ
ZGVudGlmaWVyU2V0RW50cnkmIGVudHJ5KQotICAgIHsKLSAgICAgICAgbV9jb25zdGFudCA9IGVu
dHJ5LnNlY29uZDsKLSAgICAgICAgbV9zZXQuZW5jb2RlKGVuY29kZXIsIGVudHJ5LmZpcnN0KTsK
LSAgICB9Ci0KLSAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDb25zdGFudElkZW50
aWZpZXJTZXRFbnRyeSYgZW50cnkpIGNvbnN0Ci0gICAgewotICAgICAgICBlbnRyeS5zZWNvbmQg
PSBtX2NvbnN0YW50OwotICAgICAgICBtX3NldC5kZWNvZGUoZGVjb2RlciwgZW50cnkuZmlyc3Qp
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX2NvbnN0YW50OwotICAgIENhY2hl
ZEhhc2hTZXQ8Q2FjaGVkUmVmUHRyPENhY2hlZFVuaXF1ZWRTdHJpbmdJbXBsPiwgSWRlbnRpZmll
clJlcEhhc2g+IG1fc2V0OwotfTsKLQogY2xhc3MgQ2FjaGVkQ29kZUJsb2NrUmFyZURhdGEgOiBw
dWJsaWMgQ2FjaGVkT2JqZWN0PFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YT4gewogcHVibGlj
OgogICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFVubGlua2VkQ29kZUJs
b2NrOjpSYXJlRGF0YSYgcmFyZURhdGEpCkBAIC0xMDIxLDcgKzEwMDIsNyBAQCBjbGFzcyBDYWNo
ZWRDb2RlQmxvY2tSYXJlRGF0YSA6IHB1YmxpYyBDYWNoZWRPYmplY3Q8VW5saW5rZWRDb2RlQmxv
Y2s6OlJhcmVEYXRhPgogICAgIENhY2hlZEhhc2hNYXA8dW5zaWduZWQsIFVubGlua2VkQ29kZUJs
b2NrOjpSYXJlRGF0YTo6VHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlPiBtX3R5cGVQcm9maWxl
ckluZm9NYXA7CiAgICAgQ2FjaGVkVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IG1f
b3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7CiAgICAgQ2FjaGVkVmVjdG9yPENh
Y2hlZEJpdFZlY3Rvcj4gbV9iaXRWZWN0b3JzOwotICAgIENhY2hlZFZlY3RvcjxDYWNoZWRDb25z
dGFudElkZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOworICAgIENh
Y2hlZFZlY3RvcjxDYWNoZWRIYXNoU2V0PENhY2hlZFJlZlB0cjxDYWNoZWRVbmlxdWVkU3RyaW5n
SW1wbD4sIElkZW50aWZpZXJSZXBIYXNoPj4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOwogICAg
IHVuc2lnbmVkIG1fbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgOiAxOwogICAgIHVuc2lnbmVk
IG1fcHJpdmF0ZUJyYW5kUmVxdWlyZW1lbnQgOiAxOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAppbmRl
eCA0MDIxZmM3ZTBhZGFmN2EwYTllMGVmNmNmZDIyNTgzOGI1YmY4NzgzLi4yMGJhZWRlYzgxNGMx
YmRiNDM3N2ZiN2E0ZmM2MGQzZDNmNTlkNzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJJbmRpcmVjdEV2
YWxFeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAi
SW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJJbnRsRGF0ZVRpbWVGb3JtYXQuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCkBAIC04MzQsMzQgKzgzNSw1NiBAQCBzdGF0aWMgYm9vbCBjYW5QZXJm
b3JtRmFzdFByb3BlcnR5RW51bWVyYXRpb25Gb3JDb3B5RGF0YVByb3BlcnRpZXMoU3RydWN0dXJl
KiBzdAogICAgIHJldHVybiB0cnVlOwogfTsKIAorc3RhdGljIENvZGVCbG9jayogZ2V0Q2FsbGVy
Q29kZUJsb2NrKENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIENhbGxGcmFtZSogY2FsbGVy
RnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luID0gY2FsbGVyRnJhbWUtPmNvZGVPcmlnaW4oKTsKKyAgICBpZiAoY29kZU9yaWdpbiAmJiBj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSgpKQorICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2Rl
QmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKSk7Cisg
ICAgcmV0dXJuIGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKK30KKwogLy8gaHR0cHM6Ly90YzM5
LmVzL2VjbWEyNjIvI3NlYy1jb3B5ZGF0YXByb3BlcnRpZXMKIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihnbG9iYWxGdW5jQ29weURhdGFQcm9wZXJ0aWVzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAK
LSAgICBKU0ZpbmFsT2JqZWN0KiB0YXJnZXQgPSBqc0Nhc3Q8SlNGaW5hbE9iamVjdCo+KGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIEpTRmluYWxPYmplY3QqIHRhcmdldCA9
IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgQVNT
RVJUKHRhcmdldC0+aXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKHZtKSk7CiAKLSAgICBKU1ZhbHVlIHNv
dXJjZVZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKTsKKyAgICBKU1ZhbHVl
IHNvdXJjZVZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKICAgICBpZiAo
c291cmNlVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0
YXJnZXQpOwogCiAgICAgSlNPYmplY3QqIHNvdXJjZSA9IHNvdXJjZVZhbHVlLnRvT2JqZWN0KGds
b2JhbE9iamVjdCk7CiAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKIAotICAgIEpTU2V0
KiBleGNsdWRlZFNldCA9IG51bGxwdHI7Ci0gICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpID4gMikKLSAgICAgICAgZXhjbHVkZWRTZXQgPSBqc0Nhc3Q8SlNTZXQqPihjYWxsRnJhbWUt
PnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKKyAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRD
b2RlQmxvY2sgPSBudWxscHRyOworICAgIGNvbnN0IElkZW50aWZpZXJTZXQqIGV4Y2x1ZGVkU2V0
ID0gbnVsbHB0cjsKKyAgICBPcHRpb25hbDxJZGVudGlmaWVyU2V0PiBuZXdseUNyZWF0ZWRTZXQ7
CisgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpID4gMSkgeworICAgICAgICBpbnQz
Ml90IHNldEluZGV4ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgxKS5hc1VJbnQzMkFz
QW55SW50KCk7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZ2V0Q2FsbGVyQ29kZUJs
b2NrKGNhbGxGcmFtZSk7CisgICAgICAgIEFTU0VSVChjb2RlQmxvY2spOworICAgICAgICB1bmxp
bmtlZENvZGVCbG9jayA9IGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKKyAgICAgICAg
ZXhjbHVkZWRTZXQgPSAmdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50SWRlbnRpZmllclNldHMo
KVtzZXRJbmRleF07CisgICAgICAgIGlmIChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA+IDIp
IHsKKyAgICAgICAgICAgIG5ld2x5Q3JlYXRlZFNldC5lbXBsYWNlKCpleGNsdWRlZFNldCk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMjsgaW5kZXggPCBjYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnQoKTsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudChpbmRleCkudG9Qcm9wZXJ0eUtleShn
bG9iYWxPYmplY3QpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisgICAgICAgICAgICAgICAgbmV3bHlDcmVhdGVkU2V0LT5hZGQocHJvcGVydHlOYW1l
LmltcGwoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBleGNsdWRlZFNldCA9ICZuZXds
eUNyZWF0ZWRTZXQudmFsdWUoKTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIGF1dG8gaXNQcm9w
ZXJ0eU5hbWVFeGNsdWRlZCA9IFsmXSAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkgLT4gYm9vbCB7CisgICAgYXV0byBpc1Byb3BlcnR5TmFt
ZUV4Y2x1ZGVkID0gWyZdIChQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSAtPiBib29sIHsKICAg
ICAgICAgQVNTRVJUKCFwcm9wZXJ0eU5hbWUuaXNQcml2YXRlTmFtZSgpKTsKICAgICAgICAgaWYg
KCFleGNsdWRlZFNldCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBKU1Zh
bHVlIHByb3BlcnR5TmFtZVZhbHVlID0gaWRlbnRpZmllclRvSlNWYWx1ZSh2bSwgSWRlbnRpZmll
cjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGV4Y2x1ZGVkU2V0LT5oYXMo
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWVWYWx1ZSk7CisgICAgICAgIHJldHVybiBleGNsdWRl
ZFNldC0+Y29udGFpbnMocHJvcGVydHlOYW1lLnVpZCgpKTsKICAgICB9OwogCiAgICAgaWYgKCFz
b3VyY2UtPnN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKHZtKSkgewpAQCAtODg4LDYgKzkxMSw5IEBA
IEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihnbG9iYWxGdW5jQ29weURhdGFQcm9wZXJ0aWVzLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgICAgICAgICBpZiAoZW50cnkuYXR0cmlidXRl
cyAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKIAorICAgICAgICAgICAgaWYgKGlzUHJvcGVydHlOYW1lRXhjbHVkZWQocHJvcGVydHlO
YW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgICAgICAgICAgcHJvcGVy
dGllcy5hcHBlbmQoZW50cnkua2V5KTsKICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmRXaXRoQ3Jh
c2hPbk92ZXJmbG93KHNvdXJjZS0+Z2V0RGlyZWN0KGVudHJ5Lm9mZnNldCkpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC04OTgsMTAgKzkyNCw2IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5D
VElPTihnbG9iYWxGdW5jQ29weURhdGFQcm9wZXJ0aWVzLCAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvcGVydGllcy5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHB1dCBwcm9wZXJ0aWVzIGluIGEg
YmF0Y2hpbmcgbWFubmVyIHRvIGFjY2VsZXJhdGUgQ29weURhdGFQcm9wZXJ0aWVzIG1vcmUuCiAg
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1
MzU4Ci0gICAgICAgICAgICBib29sIGV4Y2x1ZGVkID0gaXNQcm9wZXJ0eU5hbWVFeGNsdWRlZChn
bG9iYWxPYmplY3QsIHByb3BlcnRpZXNbaV0uZ2V0KCkpOwotICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgIGlmIChleGNsdWRlZCkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHRhcmdldC0+cHV0RGlyZWN0KHZtLCBw
cm9wZXJ0aWVzW2ldLmdldCgpLCB2YWx1ZXMuYXQoaSkpOwogICAgICAgICB9CiAgICAgfSBlbHNl
IHsKQEAgLTkxMCw5ICs5MzIsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVu
Y0NvcHlEYXRhUHJvcGVydGllcywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgICAgIGZvciAoY29uc3QgYXV0
byYgcHJvcGVydHlOYW1lIDogcHJvcGVydHlOYW1lcykgewotICAgICAgICAgICAgYm9vbCBleGNs
dWRlZCA9IGlzUHJvcGVydHlOYW1lRXhjbHVkZWQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUp
OwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAg
ICAgIGlmIChleGNsdWRlZCkKKyAgICAgICAgICAgIGlmIChpc1Byb3BlcnR5TmFtZUV4Y2x1ZGVk
KHByb3BlcnR5TmFtZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAg
IFByb3BlcnR5U2xvdCBzbG90KHNvdXJjZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5
cGU6OkdldE93blByb3BlcnR5KTsKQEAgLTkzNSw3ICs5NTUsOCBAQCBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04oZ2xvYmFsRnVuY0NvcHlEYXRhUHJvcGVydGllcywgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYgogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZSh1bmxpbmtlZENvZGVCbG9j
ayk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0YXJnZXQpOwogfQogCiBKU0NfREVGSU5F
X0hPU1RfRlVOQ1RJT04oZ2xvYmFsRnVuY0RhdGVUaW1lRm9ybWF0LCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpKQpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA0MjhiOThhMTk3OGIxYzk5NzIx
M2VmNTM4ODU3YWJhNzg4NWY2MTVjLi5lMDEwZjBkZGVlYmU1NmZjODM4OWNkZDlkMmU5MGE0MmQ2
NmIwNWVhIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTAyLTEzICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CisKKyAgICAgICAgW0pTQ10gU2ltcGxpZnkgZXhjbHVkZWRTZXQgaGFuZGxp
bmcgaW4gb2JqZWN0IHJlc3QgZXhwcmVzc2lvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxNjY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3Mvb2JqZWN0LXJlc3QtY29tcHV0
ZWQtZGVzdHJ1Y3R1cmluZy5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL29iamVjdC1yZXN0
LWNvbXB1dGVkLWlubGluZWQtbnVtYmVycy5qczogQWRkZWQuCisgICAgICAgIChpbm5lcik6Cisg
ICAgICAgIChvdXRlcik6CisgICAgICAgICogc3RyZXNzL29iamVjdC1yZXN0LWNvbXB1dGVkLWlu
bGluZWQuanM6IEFkZGVkLgorICAgICAgICAoaW5uZXIpOgorICAgICAgICAob3V0ZXIpOgorCiAy
MDIxLTAyLTEzICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgZml4IHN0cmVzcy9jb3B5LWRhdGEtcHJvcGVydGllcy1mYXN0LXBhdGguanMg
b2NjYXNpb25hbCBmYWlsdXJlCmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9v
YmplY3QtcmVzdC1jb21wdXRlZC1kZXN0cnVjdHVyaW5nLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNo
bWFya3Mvb2JqZWN0LXJlc3QtY29tcHV0ZWQtZGVzdHJ1Y3R1cmluZy5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
MzQ5ZDkzZDcyYzM2Y2UxNjRkZmJlMDI5NDhiM2Y4MzNhYWUxY2QwCi0tLSAvZGV2L251bGwKKysr
IGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvb2JqZWN0LXJlc3QtY29tcHV0ZWQtZGVzdHJ1Y3R1
cmluZy5qcwpAQCAtMCwwICsxLDEyIEBACisoZnVuY3Rpb24oa2V5MSwga2V5Miwga2V5Mykgewor
ICAgIHZhciBvYmogPSB7IGE6IDAsIGI6IDAsIGM6IDAsIGQ6IDEsIGU6IDAsIGY6IDAsIGc6IDAs
IGg6IDAsIGk6IDAsIGo6IDAgfTsKKyAgICB2YXIgYWNjID0gMDsKKworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMWU1OyBpKyspIHsKKyAgICAgICAgdmFyIHsgW2tleTFdOiBhLCBba2V5Ml06IGIs
IFtrZXkzXTogYywgLi4ucmVzdCB9ID0gb2JqOworICAgICAgICBhY2MgKz0gcmVzdC5kOworICAg
IH0KKworICAgIGlmIChhY2MgIT09IDFlNSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQg
YXNzZXJ0aW9uISIpOworfSkoJ2EnLCAnYicsICdjJyk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0
cmVzcy9vYmplY3QtcmVzdC1jb21wdXRlZC1pbmxpbmVkLW51bWJlcnMuanMgYi9KU1Rlc3RzL3N0
cmVzcy9vYmplY3QtcmVzdC1jb21wdXRlZC1pbmxpbmVkLW51bWJlcnMuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MGQ4ZmJjMTZiNjExOWI1NTRiMjVlZjdlZjcxYmRmMzU0ZDE0OWM3YgotLS0gL2Rldi9udWxsCisr
KyBiL0pTVGVzdHMvc3RyZXNzL29iamVjdC1yZXN0LWNvbXB1dGVkLWlubGluZWQtbnVtYmVycy5q
cwpAQCAtMCwwICsxLDE3IEBACitmdW5jdGlvbiBpbm5lcihvYmplY3QsIGtleTEpCit7CisgICAg
dmFyIHsgW2tleTFdOiBhLCBbM106IGIsIC4uLnJlc3QgfSA9IG9iamVjdDsKKyAgICByZXR1cm4g
cmVzdC5kICsgYSArIGI7Cit9CisKK2Z1bmN0aW9uIG91dGVyKG9iamVjdCkKK3sKKyAgICBpZiAo
aW5uZXIob2JqZWN0LCAnYScpICE9PSAzKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBh
c3NlcnRpb24hIik7Cit9Citub0lubGluZShvdXRlcik7CisKK3ZhciBvYmplY3QgPSB7IGE6IDEs
IGI6IDAsIGM6IDAsIGQ6IDEsIGU6IDAsIGY6IDAsIGc6IDAsIGg6IDAsIGk6IDAsIGo6IDAsIFsz
XTogMSB9OworCitmb3IgKHZhciBpID0gMDsgaSA8IDVlMzsgaSsrKQorICAgIG91dGVyKG9iamVj
dCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9vYmplY3QtcmVzdC1jb21wdXRlZC1pbmxp
bmVkLmpzIGIvSlNUZXN0cy9zdHJlc3Mvb2JqZWN0LXJlc3QtY29tcHV0ZWQtaW5saW5lZC5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40OTg5M2RlZTBiMGY4OTU3YWQwOGZmMzE3ZDQzOWQyZTE1NGIzYTRjCi0tLSAv
ZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3Mvb2JqZWN0LXJlc3QtY29tcHV0ZWQtaW5saW5l
ZC5qcwpAQCAtMCwwICsxLDE3IEBACitmdW5jdGlvbiBpbm5lcihvYmplY3QsIGtleTEpCit7Cisg
ICAgdmFyIHsgW2tleTFdOiBhLCAuLi5yZXN0IH0gPSBvYmplY3Q7CisgICAgcmV0dXJuIHJlc3Qu
ZCArIGE7Cit9CisKK2Z1bmN0aW9uIG91dGVyKG9iamVjdCkKK3sKKyAgICBpZiAoaW5uZXIob2Jq
ZWN0LCAnYScpICE9PSAyKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24h
Iik7Cit9Citub0lubGluZShvdXRlcik7CisKK3ZhciBvYmplY3QgPSB7IGE6IDEsIGI6IDAsIGM6
IDAsIGQ6IDEsIGU6IDAsIGY6IDAsIGc6IDAsIGg6IDAsIGk6IDAsIGo6IDAgfTsKKworZm9yICh2
YXIgaSA9IDA7IGkgPCAxZTQ7IGkrKykKKyAgICBvdXRlcihvYmplY3QpOwo=
</data>
<flag name="review"
          id="438664"
          type_id="1"
          status="+"
          setter="ashvayka"
    />
          </attachment>
      

    </bug>

</bugzilla>