<?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>60052</bug_id>
          
          <creation_ts>2011-05-03 12:36:47 -0700</creation_ts>
          <short_desc>Split out layoutRunsAndFloats from layoutInlineChildren</short_desc>
          <delta_ts>2011-05-03 15:11:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>36921</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>jamesr</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>397265</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-03 12:36:47 -0700</bug_when>
    <thetext>Split out layoutRunsAndFloats from layoutInlineChildren</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397266</commentid>
    <comment_count>1</comment_count>
      <attachid>92106</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-03 12:37:47 -0700</bug_when>
    <thetext>Created attachment 92106
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397267</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-03 12:38:06 -0700</bug_when>
    <thetext>The goal here was to move the smallest amount of code possible towards re-building James&apos; patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397278</commentid>
    <comment_count>3</comment_count>
      <attachid>92106</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-03 12:51:50 -0700</bug_when>
    <thetext>Comment on attachment 92106
Patch

OK.  This causes 
fast/repaint/line-flow-with-floats-9.html to fail.  I suspect that its due to the re-ordering of the determineStartPosition call relative to the repaintUsingContainer code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397279</commentid>
    <comment_count>4</comment_count>
      <attachid>92106</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-03 12:55:05 -0700</bug_when>
    <thetext>Comment on attachment 92106
Patch

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

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:750
&gt; +    0 : determineEndPosition(startLine, floats, floatIndex, cleanLineStart, cleanLineBidiStatus, endLineLogicalTop);

Nit: Indent here.

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:779
&gt; +            if (!lastObject-&gt;isBR())
&gt; +                lastObject = lastRootBox()-&gt;firstLeafChild()-&gt;renderer();
&gt; +            if (lastObject-&gt;isBR()) {

Can we combine these if statements?

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1100
&gt; -        RootInlineBox* startLine = determineStartPosition(firstLine, fullLayout, previousLineBrokeCleanly, resolver, floats, floatIndex,
&gt; -                                                          useRepaintBounds, repaintLogicalTop, repaintLogicalBottom);
&gt; -
&gt;          if (fullLayout &amp;&amp; hasInlineChild &amp;&amp; !selfNeedsLayout()) {

Should it matter that we call determineStartPosition after setting the layout dirty?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397367</commentid>
    <comment_count>5</comment_count>
      <attachid>92124</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-03 14:03:44 -0700</bug_when>
    <thetext>Created attachment 92124
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397404</commentid>
    <comment_count>6</comment_count>
      <attachid>92135</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-03 14:47:44 -0700</bug_when>
    <thetext>Created attachment 92135
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397416</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-03 14:56:19 -0700</bug_when>
    <thetext>Attachment 92135 did not pass style-queue:

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

Source/WebCore/rendering/RenderBlockLineLayout.cpp:769:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/rendering/RenderBlockLineLayout.cpp:775:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/rendering/RenderBlockLineLayout.cpp:785:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/rendering/RenderBlockLineLayout.cpp:1092:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 4 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397431</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-03 15:11:57 -0700</bug_when>
    <thetext>Committed r85668: &lt;http://trac.webkit.org/changeset/85668&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92106</attachid>
            <date>2011-05-03 12:37:47 -0700</date>
            <delta_ts>2011-05-03 14:03:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60052-20110503123745.patch</filename>
            <type>text/plain</type>
            <size>36798</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU2MjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhYjRjYjhlOTUyMTdiYTQ2
MjQ1ZWIwMzVhMDc3YWE1NTE0NzdmODBjLi4xYzdmZDRjZWQ5Y2M0OGI3ODE0YWJmOTdkMDA5YzVj
MjdmZTJmMzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDUtMDMgIEVyaWMg
U2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFNwbGl0IG91dCBsYXlvdXRSdW5zQW5kRmxvYXRzIGZyb20gbGF5
b3V0SW5saW5lQ2hpbGRyZW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYwMDUyCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBqdXN0IHJlZmFjdG9yaW5n
IGNvZGUgaGVyZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKToKKwogMjAxMS0wNS0wMyAgRGF2aWQg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5z
dGVpbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggNWE1YjliMzVm
MjI4NGZjODYxMDZhNzAzZTBmZjJkZjY2NzEyYjExMC4uZTRiNGQ3NTFlZTFiM2NmYjlmYjMwN2Jh
MTBjOGQzM2ZkNTY1NTQ2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgK
QEAgLTcwMiw2ICs3MDIsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0Q29sbGFwc2VkQm90dG9t
TWFyZ2luKGNvbnN0IE1hcmdpbkluZm8mKTsKICAgICAvLyBFbmQgaGVscGVyIGZ1bmN0aW9ucyBh
bmQgc3RydWN0cyB1c2VkIGJ5IGxheW91dEJsb2NrQ2hpbGRyZW4uCiAKKyAgICAvLyBIZWxwZXIg
ZnVuY3Rpb24gZm9yIGxheW91dElubGluZUNoaWxkcmVuKCkKKyAgICB2b2lkIGxheW91dFJ1bnNB
bmRGbG9hdHMoYm9vbCBmdWxsTGF5b3V0LCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mLCBpbnQmIHJl
cGFpbnRUb3AsIGludCYgcmVwYWludEJvdHRvbSk7CisKICAgICAvLyBQYWdpbmF0aW9uIHJvdXRp
bmVzLgogICAgIGludCBuZXh0UGFnZUxvZ2ljYWxUb3AoaW50IGxvZ2ljYWxPZmZzZXQpIGNvbnN0
OyAvLyBSZXR1cm5zIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBmb2xsb3dpbmcgbG9naWNhbE9m
ZnNldC4KICAgICBpbnQgYXBwbHlCZWZvcmVCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBpbnQgbG9n
aWNhbE9mZnNldCk7IC8vIElmIHRoZSBjaGlsZCBoYXMgYSBiZWZvcmUgYnJlYWssIHRoZW4gcmV0
dXJuIGEgbmV3IHlQb3MgdGhhdCBzaGlmdHMgdG8gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlL2Nv
bHVtbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xp
bmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxh
eW91dC5jcHAKaW5kZXggMzQ4YTFhNDE3YzE1ODg4ODFlN2Y1Zjg3MTA3NmUwMzYzMjljNjQwMS4u
MmZlMTUwNDE0ZDc5ODg5ZTRlNWYzYTViYzEzYzg4NzAzODk4MDE4YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKQEAgLTcyNSwx
MCArNzI1LDMxNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphcHBlbmRGbG9hdGluZ09iamVjdFRvTGFz
dExpbmUoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KQogICAgIGxhc3RSb290Qm94KCkt
PmFwcGVuZEZsb2F0KGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpKTsKIH0KIAotdm9pZCBSZW5k
ZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQm
IHJlcGFpbnRMb2dpY2FsVG9wLCBpbnQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKQordm9pZCBSZW5k
ZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0cyhib29sIGZ1bGxMYXlvdXQsIFZlY3RvcjxGbG9h
dFdpdGhSZWN0PiYgZmxvYXRzLCBpbnQmIHJlcGFpbnRMb2dpY2FsVG9wLCBpbnQmIHJlcGFpbnRM
b2dpY2FsQm90dG9tKQogeworICAgIC8vIFdlIHdhbnQgdG8gc2tpcCBhaGVhZCB0byB0aGUgZmly
c3QgZGlydHkgbGluZQorICAgIElubGluZUJpZGlSZXNvbHZlciByZXNvbHZlcjsKKyAgICB1bnNp
Z25lZCBmbG9hdEluZGV4OworICAgIGJvb2wgZmlyc3RMaW5lID0gdHJ1ZTsKKyAgICBib29sIHBy
ZXZpb3VzTGluZUJyb2tlQ2xlYW5seSA9IHRydWU7CiAgICAgYm9vbCB1c2VSZXBhaW50Qm91bmRz
ID0gZmFsc2U7CisKKyAgICBSb290SW5saW5lQm94KiBzdGFydExpbmUgPSBkZXRlcm1pbmVTdGFy
dFBvc2l0aW9uKGZpcnN0TGluZSwgZnVsbExheW91dCwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5
LCByZXNvbHZlciwgZmxvYXRzLCBmbG9hdEluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVwYWludEJvdW5kcywgcmVwYWludExv
Z2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKKworICAgIEZsb2F0aW5nT2JqZWN0KiBs
YXN0RmxvYXQgPSAobV9mbG9hdGluZ09iamVjdHMgJiYgIW1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KS5pc0VtcHR5KCkpID8gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmxhc3QoKSA6IDA7CisKKyAg
ICBMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50U3RhdGUgPSByZXNvbHZlci5taWRwb2lu
dFN0YXRlKCk7CisgICAgCisgICAgLy8gV2UgYWxzbyBmaW5kIHRoZSBmaXJzdCBjbGVhbiBsaW5l
IGFuZCBleHRyYWN0IHRoZXNlIGxpbmVzLiBXZSB3aWxsIGFkZCB0aGVtIGJhY2sKKyAgICAvLyBp
ZiB3ZSBkZXRlcm1pbmUgdGhhdCB3ZSdyZSBhYmxlIHRvIHN5bmNocm9uaXplIGFmdGVyIGhhbmRs
aW5nIGFsbCBvdXIgZGlydHkgbGluZXMuCisgICAgSW5saW5lSXRlcmF0b3IgY2xlYW5MaW5lU3Rh
cnQ7CisgICAgQmlkaVN0YXR1cyBjbGVhbkxpbmVCaWRpU3RhdHVzOworICAgIGludCBlbmRMaW5l
TG9naWNhbFRvcCA9IDA7CisgICAgUm9vdElubGluZUJveCogZW5kTGluZSA9IChmdWxsTGF5b3V0
IHx8ICFzdGFydExpbmUpID8gCisgICAgMCA6IGRldGVybWluZUVuZFBvc2l0aW9uKHN0YXJ0TGlu
ZSwgZmxvYXRzLCBmbG9hdEluZGV4LCBjbGVhbkxpbmVTdGFydCwgY2xlYW5MaW5lQmlkaVN0YXR1
cywgZW5kTGluZUxvZ2ljYWxUb3ApOworICAgIAorICAgIGlmIChzdGFydExpbmUpIHsKKyAgICAg
ICAgaWYgKCF1c2VSZXBhaW50Qm91bmRzKSB7CisgICAgICAgICAgICB1c2VSZXBhaW50Qm91bmRz
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJlcGFpbnRMb2dpY2FsVG9wID0gbG9naWNhbEhlaWdodCgp
OworICAgICAgICAgICAgcmVwYWludExvZ2ljYWxCb3R0b20gPSBsb2dpY2FsSGVpZ2h0KCk7Cisg
ICAgICAgIH0KKyAgICAgICAgUmVuZGVyQXJlbmEqIGFyZW5hID0gcmVuZGVyQXJlbmEoKTsKKyAg
ICAgICAgUm9vdElubGluZUJveCogYm94ID0gc3RhcnRMaW5lOworICAgICAgICB3aGlsZSAoYm94
KSB7CisgICAgICAgICAgICByZXBhaW50TG9naWNhbFRvcCA9IG1pbihyZXBhaW50TG9naWNhbFRv
cCwgYm94LT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3coKSk7CisgICAgICAgICAgICByZXBhaW50
TG9naWNhbEJvdHRvbSA9IG1heChyZXBhaW50TG9naWNhbEJvdHRvbSwgYm94LT5sb2dpY2FsQm90
dG9tVmlzdWFsT3ZlcmZsb3coKSk7CisgICAgICAgICAgICBSb290SW5saW5lQm94KiBuZXh0ID0g
Ym94LT5uZXh0Um9vdEJveCgpOworICAgICAgICAgICAgYm94LT5kZWxldGVMaW5lKGFyZW5hKTsK
KyAgICAgICAgICAgIGJveCA9IG5leHQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgSW5s
aW5lSXRlcmF0b3IgZW5kID0gcmVzb2x2ZXIucG9zaXRpb24oKTsKKyAgICAKKyAgICBpZiAoIWZ1
bGxMYXlvdXQgJiYgbGFzdFJvb3RCb3goKSAmJiBsYXN0Um9vdEJveCgpLT5lbmRzV2l0aEJyZWFr
KCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGxhc3QgbGluZSBiZWZvcmUgdGhlIHN0YXJ0IGxpbmUg
ZW5kcyB3aXRoIGEgbGluZSBicmVhayB0aGF0IGNsZWFyIGZsb2F0cywKKyAgICAgICAgLy8gYWRq
dXN0IHRoZSBoZWlnaHQgYWNjb3JkaW5nbHkuCisgICAgICAgIC8vIEEgbGluZSBicmVhayBjYW4g
YmUgZWl0aGVyIHRoZSBmaXJzdCBvciB0aGUgbGFzdCBvYmplY3Qgb24gYSBsaW5lLCBkZXBlbmRp
bmcgb24gaXRzIGRpcmVjdGlvbi4KKyAgICAgICAgaWYgKElubGluZUJveCogbGFzdExlYWZDaGls
ZCA9IGxhc3RSb290Qm94KCktPmxhc3RMZWFmQ2hpbGQoKSkgeworICAgICAgICAgICAgUmVuZGVy
T2JqZWN0KiBsYXN0T2JqZWN0ID0gbGFzdExlYWZDaGlsZC0+cmVuZGVyZXIoKTsKKyAgICAgICAg
ICAgIGlmICghbGFzdE9iamVjdC0+aXNCUigpKQorICAgICAgICAgICAgICAgIGxhc3RPYmplY3Qg
PSBsYXN0Um9vdEJveCgpLT5maXJzdExlYWZDaGlsZCgpLT5yZW5kZXJlcigpOworICAgICAgICAg
ICAgaWYgKGxhc3RPYmplY3QtPmlzQlIoKSkgeworICAgICAgICAgICAgICAgIEVDbGVhciBjbGVh
ciA9IGxhc3RPYmplY3QtPnN0eWxlKCktPmNsZWFyKCk7CisgICAgICAgICAgICAgICAgaWYgKGNs
ZWFyICE9IENOT05FKQorICAgICAgICAgICAgICAgICAgICBuZXdMaW5lKGNsZWFyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIGVuZExpbmVNYXRjaGVk
ID0gZmFsc2U7CisgICAgYm9vbCBjaGVja0ZvckVuZExpbmVNYXRjaCA9IGVuZExpbmU7CisgICAg
Ym9vbCBjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSA9IGZhbHNlOworICAgIAorICAgIGJvb2wg
aXNMaW5lRW1wdHkgPSB0cnVlOworICAgIGJvb2wgcGFnaW5hdGVkID0gdmlldygpLT5sYXlvdXRT
dGF0ZSgpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+aXNQYWdpbmF0ZWQoKTsKKyAgICAKKyAg
ICBMaW5lQnJlYWtJdGVyYXRvckluZm8gbGluZUJyZWFrSXRlcmF0b3JJbmZvOworICAgIFZlcnRp
Y2FsUG9zaXRpb25DYWNoZSB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGU7CisgICAgCisgICAgd2hpbGUg
KCFlbmQuYXRFbmQoKSkgeworICAgICAgICAvLyBGSVhNRTogSXMgdGhpcyBjaGVjayBuZWNlc3Nh
cnkgYmVmb3JlIHRoZSBmaXJzdCBpdGVyYXRpb24gb3IgY2FuIGl0IGJlIG1vdmVkIHRvIHRoZSBl
bmQ/CisgICAgICAgIGlmIChjaGVja0ZvckVuZExpbmVNYXRjaCAmJiAoZW5kTGluZU1hdGNoZWQg
PSBtYXRjaGVkRW5kTGluZShyZXNvbHZlciwgY2xlYW5MaW5lU3RhcnQsIGNsZWFuTGluZUJpZGlT
dGF0dXMsIGVuZExpbmUsIGVuZExpbmVMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRvbSwg
cmVwYWludExvZ2ljYWxUb3ApKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAg
ICAgbGluZU1pZHBvaW50U3RhdGUucmVzZXQoKTsKKyAgICAgICAgCisgICAgICAgIGlzTGluZUVt
cHR5ID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIEVDbGVhciBjbGVhciA9IENOT05FOworICAg
ICAgICBib29sIGh5cGhlbmF0ZWQ7CisgICAgICAgIFZlY3RvcjxSZW5kZXJCb3gqPiBwb3NpdGlv
bmVkT2JqZWN0czsKKyAgICAgICAgCisgICAgICAgIElubGluZUl0ZXJhdG9yIG9sZEVuZCA9IGVu
ZDsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUgPSAo
bV9mbG9hdGluZ09iamVjdHMgJiYgIW1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5pc0VtcHR5KCkp
ID8gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmxhc3QoKSA6IDA7CisgICAgICAgIGVuZCA9IGZp
bmROZXh0TGluZUJyZWFrKHJlc29sdmVyLCBmaXJzdExpbmUsIGlzTGluZUVtcHR5LCBsaW5lQnJl
YWtJdGVyYXRvckluZm8sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSwgaHlwaGVuYXRlZCwgJmNs
ZWFyLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBwb3NpdGlvbmVkT2JqZWN0cyk7CisgICAg
ICAgIGlmIChyZXNvbHZlci5wb3NpdGlvbigpLmF0RW5kKCkpIHsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGRuJ3QgYmUgY3JlYXRpbmcgYW55IHJ1bnMgaW4gZmluZE5leHRMaW5lQnJl
YWsgdG8gYmVnaW4gd2l0aCEKKyAgICAgICAgICAgIC8vIE9uY2UgQmlkaVJ1bkxpc3QgaXMgc2Vw
YXJhdGVkIGZyb20gQmlkaVJlc29sdmVyIHRoaXMgd2lsbCBub3QgYmUgbmVlZGVkLgorICAgICAg
ICAgICAgcmVzb2x2ZXIucnVucygpLmRlbGV0ZVJ1bnMoKTsKKyAgICAgICAgICAgIHJlc29sdmVy
Lm1hcmtDdXJyZW50UnVuRW1wdHkoKTsgLy8gRklYTUU6IFRoaXMgY2FuIHByb2JhYmx5IGJlIHJl
cGxhY2VkIGJ5IGFuIEFTU0VSVCAob3IganVzdCByZW1vdmVkKS4KKyAgICAgICAgICAgIGNoZWNr
Rm9yRmxvYXRzRnJvbUxhc3RMaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIEFTU0VSVChlbmQgIT0gcmVzb2x2ZXIucG9zaXRpb24oKSk7CisgICAgICAg
IAorICAgICAgICBpZiAoaXNMaW5lRW1wdHkpIHsKKyAgICAgICAgICAgIGlmIChsYXN0Um9vdEJv
eCgpKQorICAgICAgICAgICAgICAgIGxhc3RSb290Qm94KCktPnNldExpbmVCcmVha0luZm8oZW5k
Lm1fb2JqLCBlbmQubV9wb3MsIHJlc29sdmVyLnN0YXR1cygpKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFZpc3VhbERpcmVjdGlvbk92ZXJyaWRlIG92ZXJyaWRlID0gKHN0eWxlKCkt
PnZpc3VhbGx5T3JkZXJlZCgpID8gKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IFZpc3Vh
bExlZnRUb1JpZ2h0T3ZlcnJpZGUgOiBWaXN1YWxSaWdodFRvTGVmdE92ZXJyaWRlKSA6IE5vVmlz
dWFsT3ZlcnJpZGUpOworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgb3duZXJzaGlwIGlzIHJl
dmVyc2VkLiBXZSBzaG91bGQgb3duIHRoZSBCaWRpUnVuTGlzdCBhbmQgcGFzcyBpdCB0byBjcmVh
dGVCaWRpUnVuc0ZvckxpbmUuCisgICAgICAgICAgICBCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlk
aVJ1bnMgPSByZXNvbHZlci5ydW5zKCk7CisgICAgICAgICAgICByZXNvbHZlci5jcmVhdGVCaWRp
UnVuc0ZvckxpbmUoZW5kLCBvdmVycmlkZSwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KTsKKyAg
ICAgICAgICAgIEFTU0VSVChyZXNvbHZlci5wb3NpdGlvbigpID09IGVuZCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4gPSAhcHJldmlvdXNMaW5l
QnJva2VDbGVhbmx5ID8gaGFuZGxlVHJhaWxpbmdTcGFjZXMoYmlkaVJ1bnMsIHJlc29sdmVyLmNv
bnRleHQoKSkgOiAwOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBOb3cgdGhhdCB0aGUg
cnVucyBoYXZlIGJlZW4gb3JkZXJlZCwgd2UgY3JlYXRlIHRoZSBsaW5lIGJveGVzLgorICAgICAg
ICAgICAgLy8gQXQgdGhlIHNhbWUgdGltZSB3ZSBmaWd1cmUgb3V0IHdoZXJlIGJvcmRlci9wYWRk
aW5nL21hcmdpbiBzaG91bGQgYmUgYXBwbGllZCBmb3IKKyAgICAgICAgICAgIC8vIGlubGluZSBm
bG93IGJveGVzLgorICAgICAgICAgICAgCisgICAgICAgICAgICBSb290SW5saW5lQm94KiBsaW5l
Qm94ID0gMDsKKyAgICAgICAgICAgIGludCBvbGRMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdo
dCgpOworICAgICAgICAgICAgaWYgKGJpZGlSdW5zLnJ1bkNvdW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoaHlwaGVuYXRlZCkKKyAgICAgICAgICAgICAgICAgICAgYmlkaVJ1bnMubG9naWNh
bGx5TGFzdFJ1bigpLT5tX2hhc0h5cGhlbiA9IHRydWU7CisgICAgICAgICAgICAgICAgbGluZUJv
eCA9IGNvbnN0cnVjdExpbmUoYmlkaVJ1bnMsIGZpcnN0TGluZSwgIWVuZC5tX29iaik7CisgICAg
ICAgICAgICAgICAgaWYgKGxpbmVCb3gpIHsKKyAgICAgICAgICAgICAgICAgICAgbGluZUJveC0+
c2V0RW5kc1dpdGhCcmVhayhwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpOworICAgICAgICAgICAg
ICAgICAgICAKKyNpZiBFTkFCTEUoU1ZHKQorICAgICAgICAgICAgICAgICAgICBib29sIGlzU1ZH
Um9vdElubGluZUJveCA9IGxpbmVCb3gtPmlzU1ZHUm9vdElubGluZUJveCgpOworI2Vsc2UKKyAg
ICAgICAgICAgICAgICAgICAgYm9vbCBpc1NWR1Jvb3RJbmxpbmVCb3ggPSBmYWxzZTsKKyNlbmRp
ZgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgR2x5cGhPdmVyZmxv
d0FuZEZhbGxiYWNrRm9udHNNYXAgdGV4dEJveERhdGFNYXA7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAvLyBOb3cgd2UgcG9zaXRpb24gYWxsIG9mIG91ciB0ZXh0
IHJ1bnMgaG9yaXpvbnRhbGx5LgorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU1ZHUm9vdElu
bGluZUJveCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Q
b3NpdGlvbnNGb3JMaW5lKGxpbmVCb3gsIGZpcnN0TGluZSwgYmlkaVJ1bnMuZmlyc3RSdW4oKSwg
dHJhaWxpbmdTcGFjZVJ1biwgZW5kLmF0RW5kKCksIHRleHRCb3hEYXRhTWFwLCB2ZXJ0aWNhbFBv
c2l0aW9uQ2FjaGUpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
Ly8gTm93IHBvc2l0aW9uIG91ciB0ZXh0IHJ1bnMgdmVydGljYWxseS4KKyAgICAgICAgICAgICAg
ICAgICAgY29tcHV0ZUJsb2NrRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZShsaW5lQm94LCBiaWRp
UnVucy5maXJzdFJ1bigpLCB0ZXh0Qm94RGF0YU1hcCwgdmVydGljYWxQb3NpdGlvbkNhY2hlKTsK
KyAgICAgICAgICAgICAgICAgICAgCisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgICAgICAgICAg
ICAgLy8gU1ZHIHRleHQgbGF5b3V0IGNvZGUgY29tcHV0ZXMgdmVydGljYWwgJiBob3Jpem9udGFs
IHBvc2l0aW9ucyBvbiBpdHMgb3duLgorICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQg
d2Ugc3RpbGwgbmVlZCB0byBleGVjdXRlIGNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uc0ZvckxpbmUo
KSBhcworICAgICAgICAgICAgICAgICAgICAvLyBpdCBjYWxscyBJbmxpbmVUZXh0Qm94Ojpwb3Np
dGlvbkxpbmVCb3goKSwgd2hpY2ggdHJhY2tzIHdoZXRoZXIgdGhlIGJveAorICAgICAgICAgICAg
ICAgICAgICAvLyBjb250YWlucyByZXZlcnNlZCB0ZXh0IG9yIG5vdC4gSWYgd2Ugd291bGRuJ3Qg
ZG8gdGhhdCBlZGl0aW5nIGFuZCB0aHVzCisgICAgICAgICAgICAgICAgICAgIC8vIHRleHQgc2Vs
ZWN0aW9uIGluIFJUTCBib3hlcyB3b3VsZCBub3Qgd29yayBhcyBleHBlY3RlZC4KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzU1ZHUm9vdElubGluZUJveCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGlzU1ZHVGV4dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PFNWR1Jvb3RJbmxpbmVCb3gqPihsaW5lQm94KS0+Y29tcHV0ZVBlckNoYXJhY3Rlckxh
eW91dEluZm9ybWF0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBvdXIgb3ZlcmZs
b3cgbm93LgorICAgICAgICAgICAgICAgICAgICBsaW5lQm94LT5jb21wdXRlT3ZlcmZsb3cobGlu
ZUJveC0+bGluZVRvcCgpLCBsaW5lQm94LT5saW5lQm90dG9tKCksIHRleHRCb3hEYXRhTWFwKTsK
KyAgICAgICAgICAgICAgICAgICAgCisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAgICAgICAg
ICAgICAvLyBIaWdobGlnaHQgYWN0cyBhcyBhbiBvdmVyZmxvdyBpbmZsYXRpb24uCisgICAgICAg
ICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5oaWdobGlnaHQoKSAhPSBudWxsQXRvbSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmVCb3gtPmFkZEhpZ2hsaWdodE92ZXJmbG93KCk7CisjZW5k
aWYKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGJpZGlSdW5zLmRlbGV0ZVJ1bnMoKTsKKyAgICAgICAgICAgIHJlc29sdmVyLm1hcmtD
dXJyZW50UnVuRW1wdHkoKTsgLy8gRklYTUU6IFRoaXMgY2FuIHByb2JhYmx5IGJlIHJlcGxhY2Vk
IGJ5IGFuIEFTU0VSVCAob3IganVzdCByZW1vdmVkKS4KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKGxpbmVCb3gpIHsKKyAgICAgICAgICAgICAgICBsaW5lQm94LT5zZXRMaW5lQnJlYWtJ
bmZvKGVuZC5tX29iaiwgZW5kLm1fcG9zLCByZXNvbHZlci5zdGF0dXMoKSk7CisgICAgICAgICAg
ICAgICAgaWYgKHVzZVJlcGFpbnRCb3VuZHMpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwYWlu
dExvZ2ljYWxUb3AgPSBtaW4ocmVwYWludExvZ2ljYWxUb3AsIGxpbmVCb3gtPmxvZ2ljYWxUb3BW
aXN1YWxPdmVyZmxvdygpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwYWludExvZ2ljYWxCb3R0
b20gPSBtYXgocmVwYWludExvZ2ljYWxCb3R0b20sIGxpbmVCb3gtPmxvZ2ljYWxCb3R0b21WaXN1
YWxPdmVyZmxvdygpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCkgeworICAgICAgICAgICAgICAgICAgICBpbnQgYWRq
dXN0bWVudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlvbkZvclBh
Z2luYXRpb24obGluZUJveCwgYWRqdXN0bWVudCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChh
ZGp1c3RtZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2xkTGluZVdpZHRoID0g
YXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yTGluZShvbGRMb2dpY2FsSGVpZ2h0LCBmaXJzdExpbmUp
OworICAgICAgICAgICAgICAgICAgICAgICAgbGluZUJveC0+YWRqdXN0QmxvY2tEaXJlY3Rpb25Q
b3NpdGlvbihhZGp1c3RtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VSZXBh
aW50Qm91bmRzKSAvLyBUaGlzIGNhbiBvbmx5IGJlIGEgcG9zaXRpdmUgYWRqdXN0bWVudCwgc28g
bm8gbmVlZCB0byB1cGRhdGUgcmVwYWludFRvcC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXBhaW50TG9naWNhbEJvdHRvbSA9IG1heChyZXBhaW50TG9naWNhbEJvdHRvbSwgbGluZUJv
eC0+bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9y
TGluZShvbGRMb2dpY2FsSGVpZ2h0ICsgYWRqdXN0bWVudCwgZmlyc3RMaW5lKSAhPSBvbGRMaW5l
V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRlbGV0
ZSB0aGlzIGxpbmUsIHJlbW92ZSBhbGwgZmxvYXRzIHRoYXQgZ290IGFkZGVkLCBhbmQgbGV0IGxp
bmUgbGF5b3V0IHJlLXJ1bi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lQm94LT5k
ZWxldGVMaW5lKHJlbmRlckFyZW5hKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
bW92ZUZsb2F0aW5nT2JqZWN0c0JlbG93KGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIG9sZExv
Z2ljYWxIZWlnaHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldExvZ2ljYWxIZWln
aHQob2xkTG9naWNhbEhlaWdodCArIGFkanVzdG1lbnQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc29sdmVyLnNldFBvc2l0aW9uKG9sZEVuZCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kID0gb2xkRW5kOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxpbmVCb3gtPmJsb2Nr
TG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwb3NpdGlvbmVkT2JqZWN0cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAg
ICBzZXRTdGF0aWNQb3NpdGlvbnModGhpcywgcG9zaXRpb25lZE9iamVjdHNbaV0pOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBmaXJzdExpbmUgPSBmYWxzZTsKKyAgICAgICAgICAgIG5ld0xp
bmUoY2xlYXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9mbG9hdGluZ09i
amVjdHMgJiYgbGFzdFJvb3RCb3goKSkgeworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXQm
IGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOworICAgICAgICAg
ICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2lu
KCk7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmVuZCgpOworICAgICAgICAgICAgaWYgKGxhc3RGbG9hdCkgeworICAgICAgICAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgbGFzdEZsb2F0SXRlcmF0b3IgPSBmbG9h
dGluZ09iamVjdFNldC5maW5kKGxhc3RGbG9hdCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGxh
c3RGbG9hdEl0ZXJhdG9yICE9IGVuZCk7CisgICAgICAgICAgICAgICAgKytsYXN0RmxvYXRJdGVy
YXRvcjsKKyAgICAgICAgICAgICAgICBpdCA9IGxhc3RGbG9hdEl0ZXJhdG9yOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OworICAgICAgICAgICAgICAgIGFwcGVuZEZsb2F0
aW5nT2JqZWN0VG9MYXN0TGluZShmKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZi0+bV9yZW5k
ZXJlciA9PSBmbG9hdHNbZmxvYXRJbmRleF0ub2JqZWN0KTsKKyAgICAgICAgICAgICAgICAvLyBJ
ZiBhIGZsb2F0J3MgZ2VvbWV0cnkgaGFzIGNoYW5nZWQsIGdpdmUgdXAgb24gc3luY2luZyB3aXRo
IGNsZWFuIGxpbmVzLgorICAgICAgICAgICAgICAgIGlmIChmbG9hdHNbZmxvYXRJbmRleF0ucmVj
dCAhPSBmLT5mcmFtZVJlY3QoKSkKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tGb3JFbmRMaW5l
TWF0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmbG9hdEluZGV4Kys7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBsYXN0RmxvYXQgPSAhZmxvYXRpbmdPYmplY3RTZXQuaXNFbXB0eSgp
ID8gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpIDogMDsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgbGluZU1pZHBvaW50U3RhdGUucmVzZXQoKTsKKyAgICAgICAgcmVzb2x2ZXIuc2V0UG9z
aXRpb24oZW5kKTsKKyAgICB9CiAgICAgCisgICAgaWYgKGVuZExpbmUpIHsKKyAgICAgICAgaWYg
KGVuZExpbmVNYXRjaGVkKSB7CisgICAgICAgICAgICAvLyBBdHRhY2ggYWxsIHRoZSByZW1haW5p
bmcgbGluZXMsIGFuZCB0aGVuIGFkanVzdCB0aGVpciB5LXBvc2l0aW9ucyBhcyBuZWVkZWQuCisg
ICAgICAgICAgICBpbnQgZGVsdGEgPSBsb2dpY2FsSGVpZ2h0KCkgLSBlbmRMaW5lTG9naWNhbFRv
cDsKKyAgICAgICAgICAgIGZvciAoUm9vdElubGluZUJveCogbGluZSA9IGVuZExpbmU7IGxpbmU7
IGxpbmUgPSBsaW5lLT5uZXh0Um9vdEJveCgpKSB7CisgICAgICAgICAgICAgICAgbGluZS0+YXR0
YWNoTGluZSgpOworICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZGVsdGEgLT0gbGluZS0+cGFnaW5hdGlvblN0cnV0KCk7CisgICAgICAgICAgICAg
ICAgICAgIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24obGluZSwgZGVsdGEpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZGVsdGEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmVwYWludExvZ2ljYWxUb3AgPSBtaW4ocmVwYWludExvZ2ljYWxUb3AsIGxpbmUt
PmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdygpICsgbWluKGRlbHRhLCAwKSk7CisgICAgICAgICAg
ICAgICAgICAgIHJlcGFpbnRMb2dpY2FsQm90dG9tID0gbWF4KHJlcGFpbnRMb2dpY2FsQm90dG9t
LCBsaW5lLT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3coKSArIG1heChkZWx0YSwgMCkpOwor
ICAgICAgICAgICAgICAgICAgICBsaW5lLT5hZGp1c3RCbG9ja0RpcmVjdGlvblBvc2l0aW9uKGRl
bHRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFZlY3RvcjxSZW5k
ZXJCb3gqPiogY2xlYW5MaW5lRmxvYXRzID0gbGluZS0+ZmxvYXRzUHRyKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgVmVjdG9yPFJlbmRlckJveCo+OjppdGVyYXRvciBlbmQgPSBjbGVhbkxpbmVG
bG9hdHMtPmVuZCgpOworICAgICAgICAgICAgICAgICAgICBmb3IgKFZlY3RvcjxSZW5kZXJCb3gq
Pjo6aXRlcmF0b3IgZiA9IGNsZWFuTGluZUZsb2F0cy0+YmVnaW4oKTsgZiAhPSBlbmQ7ICsrZikg
eworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0RmxvYXRpbmdPYmplY3QoKmYpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodChsb2dpY2FsVG9wRm9yQ2hpbGQo
KmYpIC0gbWFyZ2luQmVmb3JlRm9yQ2hpbGQoKmYpICsgZGVsdGEpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcG9zaXRpb25OZXdGbG9hdHMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldExvZ2ljYWxIZWln
aHQobGFzdFJvb3RCb3goKS0+YmxvY2tMb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gRGVsZXRlIGFsbCB0aGUgcmVtYWluaW5nIGxpbmVzLgorICAgICAg
ICAgICAgUm9vdElubGluZUJveCogbGluZSA9IGVuZExpbmU7CisgICAgICAgICAgICBSZW5kZXJB
cmVuYSogYXJlbmEgPSByZW5kZXJBcmVuYSgpOworICAgICAgICAgICAgd2hpbGUgKGxpbmUpIHsK
KyAgICAgICAgICAgICAgICByZXBhaW50TG9naWNhbFRvcCA9IG1pbihyZXBhaW50TG9naWNhbFRv
cCwgbGluZS0+bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KCkpOworICAgICAgICAgICAgICAgIHJl
cGFpbnRMb2dpY2FsQm90dG9tID0gbWF4KHJlcGFpbnRMb2dpY2FsQm90dG9tLCBsaW5lLT5sb2dp
Y2FsQm90dG9tVmlzdWFsT3ZlcmZsb3coKSk7CisgICAgICAgICAgICAgICAgUm9vdElubGluZUJv
eCogbmV4dCA9IGxpbmUtPm5leHRSb290Qm94KCk7CisgICAgICAgICAgICAgICAgbGluZS0+ZGVs
ZXRlTGluZShhcmVuYSk7CisgICAgICAgICAgICAgICAgbGluZSA9IG5leHQ7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzICYmIChjaGVj
a0ZvckZsb2F0c0Zyb21MYXN0TGluZSB8fCBwb3NpdGlvbk5ld0Zsb2F0cygpKSAmJiBsYXN0Um9v
dEJveCgpKSB7CisgICAgICAgIC8vIEluIGNhc2Ugd2UgaGF2ZSBhIGZsb2F0IG9uIHRoZSBsYXN0
IGxpbmUsIGl0IG1pZ2h0IG5vdCBiZSBwb3NpdGlvbmVkIHVwIHRvIG5vdy4KKyAgICAgICAgLy8g
VGhpcyBoYXMgdG8gYmUgZG9uZSBiZWZvcmUgYWRkaW5nIGluIHRoZSBib3R0b20gYm9yZGVyL3Bh
ZGRpbmcsIG9yIHRoZSBmbG9hdCB3aWxsCisgICAgICAgIC8vIGluY2x1ZGUgdGhlIHBhZGRpbmcg
aW5jb3JyZWN0bHkuIC1kd2gKKyAgICAgICAgaWYgKGNoZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5l
KSB7CisgICAgICAgICAgICBpbnQgYm90dG9tVmlzdWFsT3ZlcmZsb3cgPSBsYXN0Um9vdEJveCgp
LT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3coKTsKKyAgICAgICAgICAgIGludCBib3R0b21M
YXlvdXRPdmVyZmxvdyA9IGxhc3RSb290Qm94KCktPmxvZ2ljYWxCb3R0b21MYXlvdXRPdmVyZmxv
dygpOworICAgICAgICAgICAgVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94KiB0cmFpbGluZ0Zs
b2F0c0xpbmVCb3ggPSBuZXcgKHJlbmRlckFyZW5hKCkpIFRyYWlsaW5nRmxvYXRzUm9vdElubGlu
ZUJveCh0aGlzKTsKKyAgICAgICAgICAgIG1fbGluZUJveGVzLmFwcGVuZExpbmVCb3godHJhaWxp
bmdGbG9hdHNMaW5lQm94KTsKKyAgICAgICAgICAgIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+c2V0
Q29uc3RydWN0ZWQoKTsKKyAgICAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRz
TWFwIHRleHRCb3hEYXRhTWFwOworICAgICAgICAgICAgVmVydGljYWxQb3NpdGlvbkNhY2hlIHZl
cnRpY2FsUG9zaXRpb25DYWNoZTsKKyAgICAgICAgICAgIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+
YWxpZ25Cb3hlc0luQmxvY2tEaXJlY3Rpb24obG9naWNhbEhlaWdodCgpLCB0ZXh0Qm94RGF0YU1h
cCwgdmVydGljYWxQb3NpdGlvbkNhY2hlKTsKKyAgICAgICAgICAgIGludCBibG9ja0xvZ2ljYWxI
ZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgICAgICBJbnRSZWN0IGxvZ2ljYWxMYXlv
dXRPdmVyZmxvdygwLCBibG9ja0xvZ2ljYWxIZWlnaHQsIDEsIGJvdHRvbUxheW91dE92ZXJmbG93
IC0gYmxvY2tMb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgICAgIEludFJlY3QgbG9naWNhbFZpc3Vh
bE92ZXJmbG93KDAsIGJsb2NrTG9naWNhbEhlaWdodCwgMSwgYm90dG9tVmlzdWFsT3ZlcmZsb3cg
LSBibG9ja0xvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94
LT5zZXRPdmVyZmxvd0Zyb21Mb2dpY2FsUmVjdHMobG9naWNhbExheW91dE92ZXJmbG93LCBsb2dp
Y2FsVmlzdWFsT3ZlcmZsb3csIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+bGluZVRvcCgpLCB0cmFp
bGluZ0Zsb2F0c0xpbmVCb3gtPmxpbmVCb3R0b20oKSk7CisgICAgICAgICAgICB0cmFpbGluZ0Zs
b2F0c0xpbmVCb3gtPnNldEJsb2NrTG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KCkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmpl
Y3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOworICAgICAgICBGbG9h
dGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOworICAg
ICAgICBpZiAobGFzdEZsb2F0KSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGxhc3RGbG9hdEl0ZXJhdG9yID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZChsYXN0RmxvYXQp
OworICAgICAgICAgICAgQVNTRVJUKGxhc3RGbG9hdEl0ZXJhdG9yICE9IGVuZCk7CisgICAgICAg
ICAgICArK2xhc3RGbG9hdEl0ZXJhdG9yOworICAgICAgICAgICAgaXQgPSBsYXN0RmxvYXRJdGVy
YXRvcjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICAgICAgYXBwZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RMaW5lKCppdCk7CisgICAgICAgIGxhc3RG
bG9hdCA9ICFmbG9hdGluZ09iamVjdFNldC5pc0VtcHR5KCkgPyBmbG9hdGluZ09iamVjdFNldC5s
YXN0KCkgOiAwOworICAgIH0KKyAgICBzaXplX3QgZmxvYXRDb3VudCA9IGZsb2F0cy5zaXplKCk7
CisgICAgLy8gRmxvYXRzIHRoYXQgZGlkIG5vdCBoYXZlIGxheW91dCBkaWQgbm90IHJlcGFpbnQg
d2hlbiB3ZSBsYWlkIHRoZW0gb3V0LiBUaGV5IHdvdWxkIGhhdmUKKyAgICAvLyBwYWludGVkIGJ5
IG5vdyBpZiB0aGV5IGhhZCBtb3ZlZCwgYnV0IGlmIHRoZXkgc3RheWVkIGF0ICgwLCAwKSwgdGhl
eSBzdGlsbCBuZWVkIHRvIGJlCisgICAgLy8gcGFpbnRlZC4KKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZsb2F0Q291bnQ7ICsraSkgeworICAgICAgICBpZiAoIWZsb2F0c1tpXS5ldmVySGFk
TGF5b3V0KSB7CisgICAgICAgICAgICBSZW5kZXJCb3gqIGYgPSBmbG9hdHNbaV0ub2JqZWN0Owor
ICAgICAgICAgICAgaWYgKCFmLT54KCkgJiYgIWYtPnkoKSAmJiBmLT5jaGVja0ZvclJlcGFpbnRE
dXJpbmdMYXlvdXQoKSkKKyAgICAgICAgICAgICAgICBmLT5yZXBhaW50KCk7CisgICAgICAgIH0K
KyAgICB9ICAgIAorfQorCit2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihi
b29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCYgcmVwYWludExvZ2ljYWxUb3AsIGludCYgcmVwYWlu
dExvZ2ljYWxCb3R0b20pCit7CiAgICAgbV9vdmVyZmxvdy5jbGVhcigpOwogICAgICAgICAKICAg
ICBzZXRMb2dpY2FsSGVpZ2h0KGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpKTsKQEAg
LTc1MSw3ICsxMDU4LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4o
Ym9vbCByZWxheW91dENoaWxkcmVuLCBpbnQmIHJlcGFpbnRMb2dpY2EKICAgICAgICAgIGRlbGV0
ZUVsbGlwc2lzTGluZUJveGVzKCk7CiAKICAgICBpZiAoZmlyc3RDaGlsZCgpKSB7Ci0gICAgICAg
IC8vIGxheW91dCByZXBsYWNlZCBlbGVtZW50cworICAgICAgICAvLyBGaXJzdCB3YWxrIG91ciBp
bmxpbmUgc3VidHJlZSB0byBsYXlvdXQgcmVwbGFjZWQgZWxlbWVudHMsIGRpcnR5IGxpbmUgYm94
ZXMsCisgICAgICAgIC8vIGNvbGxlY3QgZmxvYXRzIGFuZCBub3RpZnkgY29udGFpbmluZyBibG9j
a3Mgb2YgcG9zaXRpb25lZCBjaGlsZHJlbi4KICAgICAgICAgYm9vbCBlbmRPZklubGluZSA9IGZh
bHNlOwogICAgICAgICBSZW5kZXJPYmplY3QqIG8gPSBiaWRpRmlyc3ROb3RTa2lwcGluZ0lubGlu
ZXModGhpcyk7CiAgICAgICAgIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiBmbG9hdHM7CkBAIC03ODks
MTQgKzEwOTcsNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIGludCYgcmVwYWludExvZ2ljYQogICAgICAgICAgICAgbyA9IGJp
ZGlOZXh0KHRoaXMsIG8sIDAsIGZhbHNlLCAmZW5kT2ZJbmxpbmUpOwogICAgICAgICB9CiAKLSAg
ICAgICAgLy8gV2Ugd2FudCB0byBza2lwIGFoZWFkIHRvIHRoZSBmaXJzdCBkaXJ0eSBsaW5lCi0g
ICAgICAgIElubGluZUJpZGlSZXNvbHZlciByZXNvbHZlcjsKLSAgICAgICAgdW5zaWduZWQgZmxv
YXRJbmRleDsKLSAgICAgICAgYm9vbCBmaXJzdExpbmUgPSB0cnVlOwotICAgICAgICBib29sIHBy
ZXZpb3VzTGluZUJyb2tlQ2xlYW5seSA9IHRydWU7Ci0gICAgICAgIFJvb3RJbmxpbmVCb3gqIHN0
YXJ0TGluZSA9IGRldGVybWluZVN0YXJ0UG9zaXRpb24oZmlyc3RMaW5lLCBmdWxsTGF5b3V0LCBw
cmV2aW91c0xpbmVCcm9rZUNsZWFubHksIHJlc29sdmVyLCBmbG9hdHMsIGZsb2F0SW5kZXgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXNlUmVwYWludEJvdW5kcywgcmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9t
KTsKLQogICAgICAgICBpZiAoZnVsbExheW91dCAmJiBoYXNJbmxpbmVDaGlsZCAmJiAhc2VsZk5l
ZWRzTGF5b3V0KCkpIHsKICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsg
IC8vIE1hcmsgb3Vyc2VsdmVzIGFzIG5lZWRpbmcgYSBmdWxsIGxheW91dC4gVGhpcyB3YXkgd2Un
bGwgcmVwYWludCBsaWtlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB3ZSdyZSBzdXBwb3NlZCB0by4KQEAgLTgxMCwzMDEgKzExMTAsNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCYg
cmVwYWludExvZ2ljYQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgRmxvYXRp
bmdPYmplY3QqIGxhc3RGbG9hdCA9IChtX2Zsb2F0aW5nT2JqZWN0cyAmJiAhbV9mbG9hdGluZ09i
amVjdHMtPnNldCgpLmlzRW1wdHkoKSkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkubGFzdCgp
IDogMDsKLQotICAgICAgICBMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50U3RhdGUgPSBy
ZXNvbHZlci5taWRwb2ludFN0YXRlKCk7Ci0KLSAgICAgICAgLy8gV2UgYWxzbyBmaW5kIHRoZSBm
aXJzdCBjbGVhbiBsaW5lIGFuZCBleHRyYWN0IHRoZXNlIGxpbmVzLiAgV2Ugd2lsbCBhZGQgdGhl
bSBiYWNrCi0gICAgICAgIC8vIGlmIHdlIGRldGVybWluZSB0aGF0IHdlJ3JlIGFibGUgdG8gc3lu
Y2hyb25pemUgYWZ0ZXIgaGFuZGxpbmcgYWxsIG91ciBkaXJ0eSBsaW5lcy4KLSAgICAgICAgSW5s
aW5lSXRlcmF0b3IgY2xlYW5MaW5lU3RhcnQ7Ci0gICAgICAgIEJpZGlTdGF0dXMgY2xlYW5MaW5l
QmlkaVN0YXR1czsKLSAgICAgICAgaW50IGVuZExpbmVMb2dpY2FsVG9wID0gMDsKLSAgICAgICAg
Um9vdElubGluZUJveCogZW5kTGluZSA9IChmdWxsTGF5b3V0IHx8ICFzdGFydExpbmUpID8gCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogZGV0ZXJtaW5lRW5kUG9zaXRpb24o
c3RhcnRMaW5lLCBmbG9hdHMsIGZsb2F0SW5kZXgsIGNsZWFuTGluZVN0YXJ0LCBjbGVhbkxpbmVC
aWRpU3RhdHVzLCBlbmRMaW5lTG9naWNhbFRvcCk7Ci0KLSAgICAgICAgaWYgKHN0YXJ0TGluZSkg
ewotICAgICAgICAgICAgaWYgKCF1c2VSZXBhaW50Qm91bmRzKSB7Ci0gICAgICAgICAgICAgICAg
dXNlUmVwYWludEJvdW5kcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVwYWludExvZ2ljYWxU
b3AgPSBsb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgcmVwYWludExvZ2ljYWxCb3R0
b20gPSBsb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZW5kZXJB
cmVuYSogYXJlbmEgPSByZW5kZXJBcmVuYSgpOwotICAgICAgICAgICAgUm9vdElubGluZUJveCog
Ym94ID0gc3RhcnRMaW5lOwotICAgICAgICAgICAgd2hpbGUgKGJveCkgewotICAgICAgICAgICAg
ICAgIHJlcGFpbnRMb2dpY2FsVG9wID0gbWluKHJlcGFpbnRMb2dpY2FsVG9wLCBib3gtPmxvZ2lj
YWxUb3BWaXN1YWxPdmVyZmxvdygpKTsKLSAgICAgICAgICAgICAgICByZXBhaW50TG9naWNhbEJv
dHRvbSA9IG1heChyZXBhaW50TG9naWNhbEJvdHRvbSwgYm94LT5sb2dpY2FsQm90dG9tVmlzdWFs
T3ZlcmZsb3coKSk7Ci0gICAgICAgICAgICAgICAgUm9vdElubGluZUJveCogbmV4dCA9IGJveC0+
bmV4dFJvb3RCb3goKTsKLSAgICAgICAgICAgICAgICBib3gtPmRlbGV0ZUxpbmUoYXJlbmEpOwot
ICAgICAgICAgICAgICAgIGJveCA9IG5leHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBJbmxpbmVJdGVyYXRvciBlbmQgPSByZXNvbHZlci5wb3NpdGlvbigpOwotCi0gICAg
ICAgIGlmICghZnVsbExheW91dCAmJiBsYXN0Um9vdEJveCgpICYmIGxhc3RSb290Qm94KCktPmVu
ZHNXaXRoQnJlYWsoKSkgewotICAgICAgICAgICAgLy8gSWYgdGhlIGxhc3QgbGluZSBiZWZvcmUg
dGhlIHN0YXJ0IGxpbmUgZW5kcyB3aXRoIGEgbGluZSBicmVhayB0aGF0IGNsZWFyIGZsb2F0cywK
LSAgICAgICAgICAgIC8vIGFkanVzdCB0aGUgaGVpZ2h0IGFjY29yZGluZ2x5LgotICAgICAgICAg
ICAgLy8gQSBsaW5lIGJyZWFrIGNhbiBiZSBlaXRoZXIgdGhlIGZpcnN0IG9yIHRoZSBsYXN0IG9i
amVjdCBvbiBhIGxpbmUsIGRlcGVuZGluZyBvbiBpdHMgZGlyZWN0aW9uLgotICAgICAgICAgICAg
aWYgKElubGluZUJveCogbGFzdExlYWZDaGlsZCA9IGxhc3RSb290Qm94KCktPmxhc3RMZWFmQ2hp
bGQoKSkgewotICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogbGFzdE9iamVjdCA9IGxhc3RM
ZWFmQ2hpbGQtPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFsYXN0T2JqZWN0LT5p
c0JSKCkpCi0gICAgICAgICAgICAgICAgICAgIGxhc3RPYmplY3QgPSBsYXN0Um9vdEJveCgpLT5m
aXJzdExlYWZDaGlsZCgpLT5yZW5kZXJlcigpOwotICAgICAgICAgICAgICAgIGlmIChsYXN0T2Jq
ZWN0LT5pc0JSKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgRUNsZWFyIGNsZWFyID0gbGFzdE9i
amVjdC0+c3R5bGUoKS0+Y2xlYXIoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNsZWFyICE9
IENOT05FKQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3TGluZShjbGVhcik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBlbmRM
aW5lTWF0Y2hlZCA9IGZhbHNlOwotICAgICAgICBib29sIGNoZWNrRm9yRW5kTGluZU1hdGNoID0g
ZW5kTGluZTsKLSAgICAgICAgYm9vbCBjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSA9IGZhbHNl
OwotCi0gICAgICAgIGJvb2wgaXNMaW5lRW1wdHkgPSB0cnVlOwotICAgICAgICBib29sIHBhZ2lu
YXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKSAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPmlz
UGFnaW5hdGVkKCk7Ci0KLSAgICAgICAgTGluZUJyZWFrSXRlcmF0b3JJbmZvIGxpbmVCcmVha0l0
ZXJhdG9ySW5mbzsKLSAgICAgICAgVmVydGljYWxQb3NpdGlvbkNhY2hlIHZlcnRpY2FsUG9zaXRp
b25DYWNoZTsKLQotICAgICAgICB3aGlsZSAoIWVuZC5hdEVuZCgpKSB7Ci0gICAgICAgICAgICAv
LyBGSVhNRTogSXMgdGhpcyBjaGVjayBuZWNlc3NhcnkgYmVmb3JlIHRoZSBmaXJzdCBpdGVyYXRp
b24gb3IgY2FuIGl0IGJlIG1vdmVkIHRvIHRoZSBlbmQ/Ci0gICAgICAgICAgICBpZiAoY2hlY2tG
b3JFbmRMaW5lTWF0Y2ggJiYgKGVuZExpbmVNYXRjaGVkID0gbWF0Y2hlZEVuZExpbmUocmVzb2x2
ZXIsIGNsZWFuTGluZVN0YXJ0LCBjbGVhbkxpbmVCaWRpU3RhdHVzLCBlbmRMaW5lLCBlbmRMaW5l
TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxCb3R0b20sIHJlcGFpbnRMb2dpY2FsVG9wKSkpCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGxpbmVNaWRwb2ludFN0YXRlLnJl
c2V0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlzTGluZUVtcHR5ID0gdHJ1ZTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgRUNsZWFyIGNsZWFyID0gQ05PTkU7Ci0gICAgICAgICAg
ICBib29sIGh5cGhlbmF0ZWQ7Ci0gICAgICAgICAgICBWZWN0b3I8UmVuZGVyQm94Kj4gcG9zaXRp
b25lZE9iamVjdHM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIElubGluZUl0ZXJhdG9yIG9s
ZEVuZCA9IGVuZDsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJl
dmlvdXNMaW5lID0gKG1fZmxvYXRpbmdPYmplY3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0
KCkuaXNFbXB0eSgpKSA/IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5sYXN0KCkgOiAwOwotICAg
ICAgICAgICAgZW5kID0gZmluZE5leHRMaW5lQnJlYWsocmVzb2x2ZXIsIGZpcnN0TGluZSwgaXNM
aW5lRW1wdHksIGxpbmVCcmVha0l0ZXJhdG9ySW5mbywgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5
LCBoeXBoZW5hdGVkLCAmY2xlYXIsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIHBvc2l0aW9u
ZWRPYmplY3RzKTsKLSAgICAgICAgICAgIGlmIChyZXNvbHZlci5wb3NpdGlvbigpLmF0RW5kKCkp
IHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGJlIGNyZWF0aW5nIGFu
eSBydW5zIGluIGZpbmROZXh0TGluZUJyZWFrIHRvIGJlZ2luIHdpdGghCi0gICAgICAgICAgICAg
ICAgLy8gT25jZSBCaWRpUnVuTGlzdCBpcyBzZXBhcmF0ZWQgZnJvbSBCaWRpUmVzb2x2ZXIgdGhp
cyB3aWxsIG5vdCBiZSBuZWVkZWQuCi0gICAgICAgICAgICAgICAgcmVzb2x2ZXIucnVucygpLmRl
bGV0ZVJ1bnMoKTsKLSAgICAgICAgICAgICAgICByZXNvbHZlci5tYXJrQ3VycmVudFJ1bkVtcHR5
KCk7IC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBiZSByZXBsYWNlZCBieSBhbiBBU1NFUlQg
KG9yIGp1c3QgcmVtb3ZlZCkuCi0gICAgICAgICAgICAgICAgY2hlY2tGb3JGbG9hdHNGcm9tTGFz
dExpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgQVNTRVJUKGVuZCAhPSByZXNvbHZlci5wb3NpdGlvbigpKTsKLQotICAgICAgICAg
ICAgaWYgKGlzTGluZUVtcHR5KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxhc3RSb290Qm94KCkp
Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RSb290Qm94KCktPnNldExpbmVCcmVha0luZm8oZW5k
Lm1fb2JqLCBlbmQubV9wb3MsIHJlc29sdmVyLnN0YXR1cygpKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgb3ZlcnJpZGUgPSAo
c3R5bGUoKS0+dmlzdWFsbHlPcmRlcmVkKCkgPyAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRS
ID8gVmlzdWFsTGVmdFRvUmlnaHRPdmVycmlkZSA6IFZpc3VhbFJpZ2h0VG9MZWZ0T3ZlcnJpZGUp
IDogTm9WaXN1YWxPdmVycmlkZSk7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgb3du
ZXJzaGlwIGlzIHJldmVyc2VkLiBXZSBzaG91bGQgb3duIHRoZSBCaWRpUnVuTGlzdCBhbmQgcGFz
cyBpdCB0byBjcmVhdGVCaWRpUnVuc0ZvckxpbmUuCi0gICAgICAgICAgICAgICAgQmlkaVJ1bkxp
c3Q8QmlkaVJ1bj4mIGJpZGlSdW5zID0gcmVzb2x2ZXIucnVucygpOwotICAgICAgICAgICAgICAg
IHJlc29sdmVyLmNyZWF0ZUJpZGlSdW5zRm9yTGluZShlbmQsIG92ZXJyaWRlLCBwcmV2aW91c0xp
bmVCcm9rZUNsZWFubHkpOwotICAgICAgICAgICAgICAgIEFTU0VSVChyZXNvbHZlci5wb3NpdGlv
bigpID09IGVuZCk7Ci0KLSAgICAgICAgICAgICAgICBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVu
ID0gIXByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSA/IGhhbmRsZVRyYWlsaW5nU3BhY2VzKGJpZGlS
dW5zLCByZXNvbHZlci5jb250ZXh0KCkpIDogMDsKLQotICAgICAgICAgICAgICAgIC8vIE5vdyB0
aGF0IHRoZSBydW5zIGhhdmUgYmVlbiBvcmRlcmVkLCB3ZSBjcmVhdGUgdGhlIGxpbmUgYm94ZXMu
Ci0gICAgICAgICAgICAgICAgLy8gQXQgdGhlIHNhbWUgdGltZSB3ZSBmaWd1cmUgb3V0IHdoZXJl
IGJvcmRlci9wYWRkaW5nL21hcmdpbiBzaG91bGQgYmUgYXBwbGllZCBmb3IKLSAgICAgICAgICAg
ICAgICAvLyBpbmxpbmUgZmxvdyBib3hlcy4KLQotICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVC
b3gqIGxpbmVCb3ggPSAwOwotICAgICAgICAgICAgICAgIGludCBvbGRMb2dpY2FsSGVpZ2h0ID0g
bG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAgICAgIGlmIChiaWRpUnVucy5ydW5Db3VudCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoeXBoZW5hdGVkKQotICAgICAgICAgICAgICAg
ICAgICAgICAgYmlkaVJ1bnMubG9naWNhbGx5TGFzdFJ1bigpLT5tX2hhc0h5cGhlbiA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVCb3ggPSBjb25zdHJ1Y3RMaW5lKGJpZGlSdW5zLCBm
aXJzdExpbmUsICFlbmQubV9vYmopOwotICAgICAgICAgICAgICAgICAgICBpZiAobGluZUJveCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgbGluZUJveC0+c2V0RW5kc1dpdGhCcmVhayhwcmV2
aW91c0xpbmVCcm9rZUNsZWFubHkpOwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgaXNTVkdSb290SW5saW5lQm94ID0gbGluZUJveC0+aXNTVkdSb290SW5s
aW5lQm94KCk7Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1NWR1Jvb3RJ
bmxpbmVCb3ggPSBmYWxzZTsKLSNlbmRpZgotCi0gICAgICAgICAgICAgICAgICAgICAgICBHbHlw
aE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCB0ZXh0Qm94RGF0YU1hcDsKLSAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3cgd2UgcG9zaXRpb24gYWxs
IG9mIG91ciB0ZXh0IHJ1bnMgaG9yaXpvbnRhbGx5LgotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFpc1NWR1Jvb3RJbmxpbmVCb3gpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29t
cHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvckxpbmUobGluZUJveCwgZmlyc3RMaW5lLCBi
aWRpUnVucy5maXJzdFJ1bigpLCB0cmFpbGluZ1NwYWNlUnVuLCBlbmQuYXRFbmQoKSwgdGV4dEJv
eERhdGFNYXAsIHZlcnRpY2FsUG9zaXRpb25DYWNoZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIE5vdyBwb3NpdGlvbiBvdXIgdGV4dCBydW5zIHZlcnRpY2FsbHkuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjb21wdXRlQmxvY2tEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKGxpbmVC
b3gsIGJpZGlSdW5zLmZpcnN0UnVuKCksIHRleHRCb3hEYXRhTWFwLCB2ZXJ0aWNhbFBvc2l0aW9u
Q2FjaGUpOwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNW
RyB0ZXh0IGxheW91dCBjb2RlIGNvbXB1dGVzIHZlcnRpY2FsICYgaG9yaXpvbnRhbCBwb3NpdGlv
bnMgb24gaXRzIG93bi4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBz
dGlsbCBuZWVkIHRvIGV4ZWN1dGUgY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25zRm9yTGluZSgpIGFz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBjYWxscyBJbmxpbmVUZXh0Qm94Ojpwb3Np
dGlvbkxpbmVCb3goKSwgd2hpY2ggdHJhY2tzIHdoZXRoZXIgdGhlIGJveAotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gY29udGFpbnMgcmV2ZXJzZWQgdGV4dCBvciBub3QuIElmIHdlIHdvdWxk
bid0IGRvIHRoYXQgZWRpdGluZyBhbmQgdGh1cwotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dGV4dCBzZWxlY3Rpb24gaW4gUlRMIGJveGVzIHdvdWxkIG5vdCB3b3JrIGFzIGV4cGVjdGVkLgot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU1ZHUm9vdElubGluZUJveCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpc1NWR1RleHQoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHUm9vdElubGluZUJveCo+KGxpbmVCb3gpLT5j
b21wdXRlUGVyQ2hhcmFjdGVyTGF5b3V0SW5mb3JtYXRpb24oKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb21wdXRlIG91
ciBvdmVyZmxvdyBub3cuCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lQm94LT5jb21wdXRl
T3ZlcmZsb3cobGluZUJveC0+bGluZVRvcCgpLCBsaW5lQm94LT5saW5lQm90dG9tKCksIHRleHRC
b3hEYXRhTWFwKTsKLSAgICAKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBIaWdobGlnaHQgYWN0cyBhcyBhbiBvdmVyZmxvdyBpbmZsYXRpb24uCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20pCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUJveC0+YWRkSGlnaGxpZ2h0T3ZlcmZsb3co
KTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgYmlkaVJ1bnMuZGVsZXRlUnVucygpOwotICAgICAgICAgICAgICAgIHJl
c29sdmVyLm1hcmtDdXJyZW50UnVuRW1wdHkoKTsgLy8gRklYTUU6IFRoaXMgY2FuIHByb2JhYmx5
IGJlIHJlcGxhY2VkIGJ5IGFuIEFTU0VSVCAob3IganVzdCByZW1vdmVkKS4KLQotICAgICAgICAg
ICAgICAgIGlmIChsaW5lQm94KSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVCb3gtPnNldExp
bmVCcmVha0luZm8oZW5kLm1fb2JqLCBlbmQubV9wb3MsIHJlc29sdmVyLnN0YXR1cygpKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHVzZVJlcGFpbnRCb3VuZHMpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcGFpbnRMb2dpY2FsVG9wID0gbWluKHJlcGFpbnRMb2dpY2FsVG9wLCBsaW5l
Qm94LT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3coKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXBhaW50TG9naWNhbEJvdHRvbSA9IG1heChyZXBhaW50TG9naWNhbEJvdHRvbSwgbGluZUJv
eC0+bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KCkpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAocGFnaW5hdGVk
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWRqdXN0bWVudCA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKGxpbmVCb3gs
IGFkanVzdG1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkanVzdG1lbnQpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2xkTGluZVdpZHRoID0gYXZhaWxhYmxl
TG9naWNhbFdpZHRoRm9yTGluZShvbGRMb2dpY2FsSGVpZ2h0LCBmaXJzdExpbmUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmVCb3gtPmFkanVzdEJsb2NrRGlyZWN0aW9uUG9zaXRp
b24oYWRqdXN0bWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZVJlcGFp
bnRCb3VuZHMpIC8vIFRoaXMgY2FuIG9ubHkgYmUgYSBwb3NpdGl2ZSBhZGp1c3RtZW50LCBzbyBu
byBuZWVkIHRvIHVwZGF0ZSByZXBhaW50VG9wLgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXBhaW50TG9naWNhbEJvdHRvbSA9IG1heChyZXBhaW50TG9naWNhbEJvdHRvbSwgbGlu
ZUJveC0+bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxl
TG9naWNhbFdpZHRoRm9yTGluZShvbGRMb2dpY2FsSGVpZ2h0ICsgYWRqdXN0bWVudCwgZmlyc3RM
aW5lKSAhPSBvbGRMaW5lV2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgaGF2ZSB0byBkZWxldGUgdGhpcyBsaW5lLCByZW1vdmUgYWxsIGZsb2F0cyB0aGF0IGdv
dCBhZGRlZCwgYW5kIGxldCBsaW5lIGxheW91dCByZS1ydW4uCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmVCb3gtPmRlbGV0ZUxpbmUocmVuZGVyQXJlbmEoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUZsb2F0aW5nT2JqZWN0c0JlbG93KGxhc3RG
bG9hdEZyb21QcmV2aW91c0xpbmUsIG9sZExvZ2ljYWxIZWlnaHQpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KG9sZExvZ2ljYWxIZWlnaHQgKyBhZGp1
c3RtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXIuc2V0UG9z
aXRpb24ob2xkRW5kKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gb2xk
RW5kOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRM
b2dpY2FsSGVpZ2h0KGxpbmVCb3gtPmJsb2NrTG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9zaXRpb25lZE9iamVj
dHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHNldFN0YXRpY1Bvc2l0aW9ucyh0
aGlzLCBwb3NpdGlvbmVkT2JqZWN0c1tpXSk7Ci0KLSAgICAgICAgICAgICAgICBmaXJzdExpbmUg
PSBmYWxzZTsKLSAgICAgICAgICAgICAgICBuZXdMaW5lKGNsZWFyKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzICYmIGxhc3RSb290Qm94KCkpIHsK
LSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBt
X2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RT
ZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7Ci0gICAgICAgICAgICAg
ICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQo
KTsKLSAgICAgICAgICAgICAgICBpZiAobGFzdEZsb2F0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgbGFzdEZsb2F0SXRlcmF0b3IgPSBmbG9hdGluZ09i
amVjdFNldC5maW5kKGxhc3RGbG9hdCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChsYXN0
RmxvYXRJdGVyYXRvciAhPSBlbmQpOwotICAgICAgICAgICAgICAgICAgICArK2xhc3RGbG9hdEl0
ZXJhdG9yOwotICAgICAgICAgICAgICAgICAgICBpdCA9IGxhc3RGbG9hdEl0ZXJhdG9yOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwotICAgICAgICAg
ICAgICAgICAgICBhcHBlbmRGbG9hdGluZ09iamVjdFRvTGFzdExpbmUoZik7Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChmLT5tX3JlbmRlcmVyID09IGZsb2F0c1tmbG9hdEluZGV4XS5vYmpl
Y3QpOwotICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIGZsb2F0J3MgZ2VvbWV0cnkgaGFzIGNo
YW5nZWQsIGdpdmUgdXAgb24gc3luY2luZyB3aXRoIGNsZWFuIGxpbmVzLgotICAgICAgICAgICAg
ICAgICAgICBpZiAoZmxvYXRzW2Zsb2F0SW5kZXhdLnJlY3QgIT0gZi0+ZnJhbWVSZWN0KCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjaGVja0ZvckVuZExpbmVNYXRjaCA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgICAgICBmbG9hdEluZGV4Kys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGxhc3RGbG9hdCA9ICFmbG9hdGluZ09iamVjdFNldC5pc0VtcHR5KCkgPyBmbG9h
dGluZ09iamVjdFNldC5sYXN0KCkgOiAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBs
aW5lTWlkcG9pbnRTdGF0ZS5yZXNldCgpOwotICAgICAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRp
b24oZW5kKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlbmRMaW5lKSB7Ci0gICAgICAgICAg
ICBpZiAoZW5kTGluZU1hdGNoZWQpIHsKLSAgICAgICAgICAgICAgICAvLyBBdHRhY2ggYWxsIHRo
ZSByZW1haW5pbmcgbGluZXMsIGFuZCB0aGVuIGFkanVzdCB0aGVpciB5LXBvc2l0aW9ucyBhcyBu
ZWVkZWQuCi0gICAgICAgICAgICAgICAgaW50IGRlbHRhID0gbG9naWNhbEhlaWdodCgpIC0gZW5k
TGluZUxvZ2ljYWxUb3A7Ci0gICAgICAgICAgICAgICAgZm9yIChSb290SW5saW5lQm94KiBsaW5l
ID0gZW5kTGluZTsgbGluZTsgbGluZSA9IGxpbmUtPm5leHRSb290Qm94KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgbGluZS0+YXR0YWNoTGluZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
cGFnaW5hdGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWx0YSAtPSBsaW5lLT5wYWdp
bmF0aW9uU3RydXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlv
bkZvclBhZ2luYXRpb24obGluZSwgZGVsdGEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChkZWx0YSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVw
YWludExvZ2ljYWxUb3AgPSBtaW4ocmVwYWludExvZ2ljYWxUb3AsIGxpbmUtPmxvZ2ljYWxUb3BW
aXN1YWxPdmVyZmxvdygpICsgbWluKGRlbHRhLCAwKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXBhaW50TG9naWNhbEJvdHRvbSA9IG1heChyZXBhaW50TG9naWNhbEJvdHRvbSwgbGluZS0+
bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KCkgKyBtYXgoZGVsdGEsIDApKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmUtPmFkanVzdEJsb2NrRGlyZWN0aW9uUG9zaXRpb24oZGVsdGEp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChWZWN0b3I8
UmVuZGVyQm94Kj4qIGNsZWFuTGluZUZsb2F0cyA9IGxpbmUtPmZsb2F0c1B0cigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8UmVuZGVyQm94Kj46Oml0ZXJhdG9yIGVuZCA9IGNs
ZWFuTGluZUZsb2F0cy0+ZW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFZlY3Rv
cjxSZW5kZXJCb3gqPjo6aXRlcmF0b3IgZiA9IGNsZWFuTGluZUZsb2F0cy0+YmVnaW4oKTsgZiAh
PSBlbmQ7ICsrZikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEZsb2F0aW5n
T2JqZWN0KCpmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0
KGxvZ2ljYWxUb3BGb3JDaGlsZCgqZikgLSBtYXJnaW5CZWZvcmVGb3JDaGlsZCgqZikgKyBkZWx0
YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25OZXdGbG9hdHMoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxhc3RSb290Qm94KCkt
PmJsb2NrTG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgLy8gRGVsZXRlIGFsbCB0aGUgcmVtYWluaW5nIGxpbmVzLgotICAgICAgICAgICAgICAg
IFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBlbmRMaW5lOwotICAgICAgICAgICAgICAgIFJlbmRlckFy
ZW5hKiBhcmVuYSA9IHJlbmRlckFyZW5hKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGxpbmUp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmVwYWludExvZ2ljYWxUb3AgPSBtaW4ocmVwYWludExv
Z2ljYWxUb3AsIGxpbmUtPmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdygpKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmVwYWludExvZ2ljYWxCb3R0b20gPSBtYXgocmVwYWludExvZ2ljYWxCb3R0b20s
IGxpbmUtPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygpKTsKLSAgICAgICAgICAgICAgICAg
ICAgUm9vdElubGluZUJveCogbmV4dCA9IGxpbmUtPm5leHRSb290Qm94KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGxpbmUtPmRlbGV0ZUxpbmUoYXJlbmEpOwotICAgICAgICAgICAgICAgICAgICBs
aW5lID0gbmV4dDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzICYmIChjaGVja0ZvckZsb2F0c0Zyb21MYXN0
TGluZSB8fCBwb3NpdGlvbk5ld0Zsb2F0cygpKSAmJiBsYXN0Um9vdEJveCgpKSB7Ci0gICAgICAg
ICAgICAvLyBJbiBjYXNlIHdlIGhhdmUgYSBmbG9hdCBvbiB0aGUgbGFzdCBsaW5lLCBpdCBtaWdo
dCBub3QgYmUgcG9zaXRpb25lZCB1cCB0byBub3cuCi0gICAgICAgICAgICAvLyBUaGlzIGhhcyB0
byBiZSBkb25lIGJlZm9yZSBhZGRpbmcgaW4gdGhlIGJvdHRvbSBib3JkZXIvcGFkZGluZywgb3Ig
dGhlIGZsb2F0IHdpbGwKLSAgICAgICAgICAgIC8vIGluY2x1ZGUgdGhlIHBhZGRpbmcgaW5jb3Jy
ZWN0bHkuIC1kd2gKLSAgICAgICAgICAgIGlmIChjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSkg
ewotICAgICAgICAgICAgICAgIGludCBib3R0b21WaXN1YWxPdmVyZmxvdyA9IGxhc3RSb290Qm94
KCktPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygpOwotICAgICAgICAgICAgICAgIGludCBi
b3R0b21MYXlvdXRPdmVyZmxvdyA9IGxhc3RSb290Qm94KCktPmxvZ2ljYWxCb3R0b21MYXlvdXRP
dmVyZmxvdygpOwotICAgICAgICAgICAgICAgIFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveCog
dHJhaWxpbmdGbG9hdHNMaW5lQm94ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBUcmFpbGluZ0Zsb2F0
c1Jvb3RJbmxpbmVCb3godGhpcyk7Ci0gICAgICAgICAgICAgICAgbV9saW5lQm94ZXMuYXBwZW5k
TGluZUJveCh0cmFpbGluZ0Zsb2F0c0xpbmVCb3gpOwotICAgICAgICAgICAgICAgIHRyYWlsaW5n
RmxvYXRzTGluZUJveC0+c2V0Q29uc3RydWN0ZWQoKTsKLSAgICAgICAgICAgICAgICBHbHlwaE92
ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCB0ZXh0Qm94RGF0YU1hcDsKLSAgICAgICAgICAgICAg
ICBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUgdmVydGljYWxQb3NpdGlvbkNhY2hlOwotICAgICAgICAg
ICAgICAgIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+YWxpZ25Cb3hlc0luQmxvY2tEaXJlY3Rpb24o
bG9naWNhbEhlaWdodCgpLCB0ZXh0Qm94RGF0YU1hcCwgdmVydGljYWxQb3NpdGlvbkNhY2hlKTsK
LSAgICAgICAgICAgICAgICBpbnQgYmxvY2tMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgp
OwotICAgICAgICAgICAgICAgIEludFJlY3QgbG9naWNhbExheW91dE92ZXJmbG93KDAsIGJsb2Nr
TG9naWNhbEhlaWdodCwgMSwgYm90dG9tTGF5b3V0T3ZlcmZsb3cgLSBibG9ja0xvZ2ljYWxIZWln
aHQpOwotICAgICAgICAgICAgICAgIEludFJlY3QgbG9naWNhbFZpc3VhbE92ZXJmbG93KDAsIGJs
b2NrTG9naWNhbEhlaWdodCwgMSwgYm90dG9tVmlzdWFsT3ZlcmZsb3cgLSBibG9ja0xvZ2ljYWxI
ZWlnaHQpOwotICAgICAgICAgICAgICAgIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+c2V0T3ZlcmZs
b3dGcm9tTG9naWNhbFJlY3RzKGxvZ2ljYWxMYXlvdXRPdmVyZmxvdywgbG9naWNhbFZpc3VhbE92
ZXJmbG93LCB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPmxpbmVUb3AoKSwgdHJhaWxpbmdGbG9hdHNM
aW5lQm94LT5saW5lQm90dG9tKCkpOwotICAgICAgICAgICAgICAgIHRyYWlsaW5nRmxvYXRzTGlu
ZUJveC0+c2V0QmxvY2tMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQoKSk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOwotICAgICAgICAgICAgRmxv
YXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKLSAg
ICAgICAgICAgIGlmIChsYXN0RmxvYXQpIHsKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGxhc3RGbG9hdEl0ZXJhdG9yID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZChs
YXN0RmxvYXQpOwotICAgICAgICAgICAgICAgIEFTU0VSVChsYXN0RmxvYXRJdGVyYXRvciAhPSBl
bmQpOwotICAgICAgICAgICAgICAgICsrbGFzdEZsb2F0SXRlcmF0b3I7Ci0gICAgICAgICAgICAg
ICAgaXQgPSBsYXN0RmxvYXRJdGVyYXRvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZv
ciAoOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgYXBwZW5kRmxvYXRpbmdPYmpl
Y3RUb0xhc3RMaW5lKCppdCk7Ci0gICAgICAgICAgICBsYXN0RmxvYXQgPSAhZmxvYXRpbmdPYmpl
Y3RTZXQuaXNFbXB0eSgpID8gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpIDogMDsKLSAgICAgICAg
fQotICAgICAgICBzaXplX3QgZmxvYXRDb3VudCA9IGZsb2F0cy5zaXplKCk7Ci0gICAgICAgIC8v
IEZsb2F0cyB0aGF0IGRpZCBub3QgaGF2ZSBsYXlvdXQgZGlkIG5vdCByZXBhaW50IHdoZW4gd2Ug
bGFpZCB0aGVtIG91dC4gVGhleSB3b3VsZCBoYXZlCi0gICAgICAgIC8vIHBhaW50ZWQgYnkgbm93
IGlmIHRoZXkgaGFkIG1vdmVkLCBidXQgaWYgdGhleSBzdGF5ZWQgYXQgKDAsIDApLCB0aGV5IHN0
aWxsIG5lZWQgdG8gYmUKLSAgICAgICAgLy8gcGFpbnRlZC4KLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBmbG9hdENvdW50OyArK2kpIHsKLSAgICAgICAgICAgIGlmICghZmxvYXRzW2ld
LmV2ZXJIYWRMYXlvdXQpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIGYgPSBmbG9hdHNb
aV0ub2JqZWN0OwotICAgICAgICAgICAgICAgIGlmICghZi0+eCgpICYmICFmLT55KCkgJiYgZi0+
Y2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpCi0gICAgICAgICAgICAgICAgICAgIGYtPnJl
cGFpbnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBsYXlvdXRSdW5zQW5k
RmxvYXRzKGZ1bGxMYXlvdXQsIGZsb2F0cywgcmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dp
Y2FsQm90dG9tKTsKICAgICB9CiAKICAgICAvLyBFeHBhbmQgdGhlIGxhc3QgbGluZSB0byBhY2Nv
bW1vZGF0ZSBSdWJ5IGFuZCBlbXBoYXNpcyBtYXJrcy4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92124</attachid>
            <date>2011-05-03 14:03:44 -0700</date>
            <delta_ts>2011-05-03 14:47:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60052-20110503140342.patch</filename>
            <type>text/plain</type>
            <size>38395</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU2MjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhYjRjYjhlOTUyMTdiYTQ2
MjQ1ZWIwMzVhMDc3YWE1NTE0NzdmODBjLi4xMDJiZTJlMTVhMzcwNWQyMTA2NGRiMjFhYWQzMjA3
MDU1OGQ3MGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDUtMDMgIEVyaWMg
U2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFNwbGl0IG91dCBsYXlvdXRSdW5zQW5kRmxvYXRzIGZyb20gbGF5
b3V0SW5saW5lQ2hpbGRyZW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYwMDUyCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBqdXN0IG1vdmluZyBjb2Rl
IGhlcmUuICBUaGVyZSBzaG91bGQgYmUKKyAgICAgICAgbm8gY2hhbmdlIGluIGJlaGF2aW9yLgor
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bGF5b3V0UnVuc0FuZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorCiAyMDExLTA1LTAzICBEYXZpZCBIeWF0dCAgPGh5YXR0
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCA1YTViOWIzNWYyMjg0ZmM4NjEwNmE3
MDNlMGZmMmRmNjY3MTJiMTEwLi5mOWFhMjQ2M2M2ODJlMGZiOTYwY2Y5OGY2NzJiMjE3MDZiMmIw
YWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtNzAyLDYgKzcw
Miw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRDb2xsYXBzZWRCb3R0b21NYXJnaW4oY29uc3Qg
TWFyZ2luSW5mbyYpOwogICAgIC8vIEVuZCBoZWxwZXIgZnVuY3Rpb25zIGFuZCBzdHJ1Y3RzIHVz
ZWQgYnkgbGF5b3V0QmxvY2tDaGlsZHJlbi4KIAorICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3Ig
bGF5b3V0SW5saW5lQ2hpbGRyZW4oKQorICAgIHZvaWQgbGF5b3V0UnVuc0FuZEZsb2F0cyhib29s
IGZ1bGxMYXlvdXQsIGJvb2wgaGFzSW5saW5lQ2hpbGQsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYs
IGludCYgcmVwYWludFRvcCwgaW50JiByZXBhaW50Qm90dG9tKTsKKwogICAgIC8vIFBhZ2luYXRp
b24gcm91dGluZXMuCiAgICAgaW50IG5leHRQYWdlTG9naWNhbFRvcChpbnQgbG9naWNhbE9mZnNl
dCkgY29uc3Q7IC8vIFJldHVybnMgdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlIGZvbGxvd2luZyBs
b2dpY2FsT2Zmc2V0LgogICAgIGludCBhcHBseUJlZm9yZUJyZWFrKFJlbmRlckJveCogY2hpbGQs
IGludCBsb2dpY2FsT2Zmc2V0KTsgLy8gSWYgdGhlIGNoaWxkIGhhcyBhIGJlZm9yZSBicmVhaywg
dGhlbiByZXR1cm4gYSBuZXcgeVBvcyB0aGF0IHNoaWZ0cyB0byB0aGUgdG9wIG9mIHRoZSBuZXh0
IHBhZ2UvY29sdW1uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcAppbmRleCAzNDhhMWE0MTdjMTU4ODg4MWU3ZjVmODcxMDc2ZTAzNjMy
OWM2NDAxLi5jODViMDdkMzA5MmJiNWVmN2E4YTM1MWMzNGE0MDIzYTg3ZmQ5NGZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApA
QCAtNzI1LDEwICs3MjUsMzMzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFwcGVuZEZsb2F0aW5nT2Jq
ZWN0VG9MYXN0TGluZShGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCiAgICAgbGFzdFJv
b3RCb3goKS0+YXBwZW5kRmxvYXQoZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkpOwogfQogCi12
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRy
ZW4sIGludCYgcmVwYWludExvZ2ljYWxUb3AsIGludCYgcmVwYWludExvZ2ljYWxCb3R0b20pCit2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzKGJvb2wgZnVsbExheW91dCwgYm9v
bCBoYXNJbmxpbmVDaGlsZCwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMsIGludCYgcmVw
YWludExvZ2ljYWxUb3AsIGludCYgcmVwYWludExvZ2ljYWxCb3R0b20pCiB7CisgICAgLy8gV2Ug
d2FudCB0byBza2lwIGFoZWFkIHRvIHRoZSBmaXJzdCBkaXJ0eSBsaW5lCisgICAgSW5saW5lQmlk
aVJlc29sdmVyIHJlc29sdmVyOworICAgIHVuc2lnbmVkIGZsb2F0SW5kZXg7CisgICAgYm9vbCBm
aXJzdExpbmUgPSB0cnVlOworICAgIGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5ID0gdHJ1
ZTsKICAgICBib29sIHVzZVJlcGFpbnRCb3VuZHMgPSBmYWxzZTsKKworICAgIFJvb3RJbmxpbmVC
b3gqIHN0YXJ0TGluZSA9IGRldGVybWluZVN0YXJ0UG9zaXRpb24oZmlyc3RMaW5lLCBmdWxsTGF5
b3V0LCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHksIHJlc29sdmVyLCBmbG9hdHMsIGZsb2F0SW5k
ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1c2VSZXBhaW50Qm91bmRzLCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxCb3R0
b20pOworCisgICAgLy8gRklYTUU6IGRldGVybWluZVN0YXJ0UG9zaXRpb24gaGFzIHRvIGNvbWUg
YmVmb3JlIHRoaXMgY2hlY2sgb3RoZXJ3aXNlCisgICAgLy8gZmFzdC9yZXBhaW50L2xpbmUtZmxv
dy13aXRoLWZsb2F0cy05Lmh0bWwgd2lsbCBmYWlsLiBJdCdzIHVuY2xlYXIgd2hhdCBzaWRlLWVm
ZmVjdAorICAgIC8vIG9mIGRldGVybWluZVN0YXJ0UG9zaXRpb24gaXMgbmVjZXNzYXJ5IHRvIG1h
a2UgdGhlIHJlcGFpbnQgd29yayBjb3JyZWN0bHkuCisgICAgaWYgKGZ1bGxMYXlvdXQgJiYgaGFz
SW5saW5lQ2hpbGQgJiYgIXNlbGZOZWVkc0xheW91dCgpKSB7CisgICAgICAgIC8vIE1hcmsgb3Vy
c2VsdmVzIGFzIG5lZWRpbmcgYSBmdWxsIGxheW91dC4gVGhpcyB3YXkgd2UnbGwgcmVwYWludCBs
aWtlIHdlJ3JlIHN1cHBvc2VkIHRvLgorICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlLCBmYWxz
ZSk7CisgICAgICAgIFJlbmRlclZpZXcqIHYgPSB2aWV3KCk7CisgICAgICAgIGlmICh2ICYmICF2
LT5kb2luZ0Z1bGxSZXBhaW50KCkgJiYgaGFzTGF5ZXIoKSkgeworICAgICAgICAgICAgLy8gQmVj
YXVzZSB3ZSB3YWl0ZWQgdW50aWwgd2Ugd2VyZSBhbHJlYWR5IGluc2lkZSBsYXlvdXQgdG8gZGlz
Y292ZXIKKyAgICAgICAgICAgIC8vIHRoYXQgdGhlIGJsb2NrIHJlYWxseSBuZWVkZWQgYSBmdWxs
IGxheW91dCwgd2UgbWlzc2VkIG91ciBjaGFuY2UgdG8gcmVwYWludCB0aGUgbGF5ZXIKKyAgICAg
ICAgICAgIC8vIGJlZm9yZSBsYXlvdXQgc3RhcnRlZC4gTHVja2lseSB0aGUgbGF5ZXIgaGFzIGNh
Y2hlZCB0aGUgcmVwYWludCByZWN0IGZvciBpdHMgb3JpZ2luYWwKKyAgICAgICAgICAgIC8vIHBv
c2l0aW9uIGFuZCBzaXplLCBhbmQgc28gd2UgY2FuIHVzZSB0aGF0IHRvIG1ha2UgYSByZXBhaW50
IGhhcHBlbiBub3cuCisgICAgICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIoY29udGFpbmVy
Rm9yUmVwYWludCgpLCBsYXllcigpLT5yZXBhaW50UmVjdCgpKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQgPSAobV9mbG9hdGluZ09iamVjdHMgJiYg
IW1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5pc0VtcHR5KCkpID8gbV9mbG9hdGluZ09iamVjdHMt
PnNldCgpLmxhc3QoKSA6IDA7CisKKyAgICBMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50
U3RhdGUgPSByZXNvbHZlci5taWRwb2ludFN0YXRlKCk7CisgICAgCisgICAgLy8gV2UgYWxzbyBm
aW5kIHRoZSBmaXJzdCBjbGVhbiBsaW5lIGFuZCBleHRyYWN0IHRoZXNlIGxpbmVzLiBXZSB3aWxs
IGFkZCB0aGVtIGJhY2sKKyAgICAvLyBpZiB3ZSBkZXRlcm1pbmUgdGhhdCB3ZSdyZSBhYmxlIHRv
IHN5bmNocm9uaXplIGFmdGVyIGhhbmRsaW5nIGFsbCBvdXIgZGlydHkgbGluZXMuCisgICAgSW5s
aW5lSXRlcmF0b3IgY2xlYW5MaW5lU3RhcnQ7CisgICAgQmlkaVN0YXR1cyBjbGVhbkxpbmVCaWRp
U3RhdHVzOworICAgIGludCBlbmRMaW5lTG9naWNhbFRvcCA9IDA7CisgICAgUm9vdElubGluZUJv
eCogZW5kTGluZSA9IChmdWxsTGF5b3V0IHx8ICFzdGFydExpbmUpID8gCisgICAgMCA6IGRldGVy
bWluZUVuZFBvc2l0aW9uKHN0YXJ0TGluZSwgZmxvYXRzLCBmbG9hdEluZGV4LCBjbGVhbkxpbmVT
dGFydCwgY2xlYW5MaW5lQmlkaVN0YXR1cywgZW5kTGluZUxvZ2ljYWxUb3ApOworICAgIAorICAg
IGlmIChzdGFydExpbmUpIHsKKyAgICAgICAgaWYgKCF1c2VSZXBhaW50Qm91bmRzKSB7CisgICAg
ICAgICAgICB1c2VSZXBhaW50Qm91bmRzID0gdHJ1ZTsKKyAgICAgICAgICAgIHJlcGFpbnRMb2dp
Y2FsVG9wID0gbG9naWNhbEhlaWdodCgpOworICAgICAgICAgICAgcmVwYWludExvZ2ljYWxCb3R0
b20gPSBsb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgIH0KKyAgICAgICAgUmVuZGVyQXJlbmEqIGFy
ZW5hID0gcmVuZGVyQXJlbmEoKTsKKyAgICAgICAgUm9vdElubGluZUJveCogYm94ID0gc3RhcnRM
aW5lOworICAgICAgICB3aGlsZSAoYm94KSB7CisgICAgICAgICAgICByZXBhaW50TG9naWNhbFRv
cCA9IG1pbihyZXBhaW50TG9naWNhbFRvcCwgYm94LT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3co
KSk7CisgICAgICAgICAgICByZXBhaW50TG9naWNhbEJvdHRvbSA9IG1heChyZXBhaW50TG9naWNh
bEJvdHRvbSwgYm94LT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3coKSk7CisgICAgICAgICAg
ICBSb290SW5saW5lQm94KiBuZXh0ID0gYm94LT5uZXh0Um9vdEJveCgpOworICAgICAgICAgICAg
Ym94LT5kZWxldGVMaW5lKGFyZW5hKTsKKyAgICAgICAgICAgIGJveCA9IG5leHQ7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgSW5saW5lSXRlcmF0b3IgZW5kID0gcmVzb2x2ZXIucG9zaXRp
b24oKTsKKyAgICAKKyAgICBpZiAoIWZ1bGxMYXlvdXQgJiYgbGFzdFJvb3RCb3goKSAmJiBsYXN0
Um9vdEJveCgpLT5lbmRzV2l0aEJyZWFrKCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIGxhc3QgbGlu
ZSBiZWZvcmUgdGhlIHN0YXJ0IGxpbmUgZW5kcyB3aXRoIGEgbGluZSBicmVhayB0aGF0IGNsZWFy
IGZsb2F0cywKKyAgICAgICAgLy8gYWRqdXN0IHRoZSBoZWlnaHQgYWNjb3JkaW5nbHkuCisgICAg
ICAgIC8vIEEgbGluZSBicmVhayBjYW4gYmUgZWl0aGVyIHRoZSBmaXJzdCBvciB0aGUgbGFzdCBv
YmplY3Qgb24gYSBsaW5lLCBkZXBlbmRpbmcgb24gaXRzIGRpcmVjdGlvbi4KKyAgICAgICAgaWYg
KElubGluZUJveCogbGFzdExlYWZDaGlsZCA9IGxhc3RSb290Qm94KCktPmxhc3RMZWFmQ2hpbGQo
KSkgeworICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBsYXN0T2JqZWN0ID0gbGFzdExlYWZDaGls
ZC0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgIGlmICghbGFzdE9iamVjdC0+aXNCUigpKQorICAg
ICAgICAgICAgICAgIGxhc3RPYmplY3QgPSBsYXN0Um9vdEJveCgpLT5maXJzdExlYWZDaGlsZCgp
LT5yZW5kZXJlcigpOworICAgICAgICAgICAgaWYgKGxhc3RPYmplY3QtPmlzQlIoKSkgeworICAg
ICAgICAgICAgICAgIEVDbGVhciBjbGVhciA9IGxhc3RPYmplY3QtPnN0eWxlKCktPmNsZWFyKCk7
CisgICAgICAgICAgICAgICAgaWYgKGNsZWFyICE9IENOT05FKQorICAgICAgICAgICAgICAgICAg
ICBuZXdMaW5lKGNsZWFyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBib29sIGVuZExpbmVNYXRjaGVkID0gZmFsc2U7CisgICAgYm9vbCBjaGVja0ZvckVuZExp
bmVNYXRjaCA9IGVuZExpbmU7CisgICAgYm9vbCBjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSA9
IGZhbHNlOworICAgIAorICAgIGJvb2wgaXNMaW5lRW1wdHkgPSB0cnVlOworICAgIGJvb2wgcGFn
aW5hdGVkID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+
aXNQYWdpbmF0ZWQoKTsKKyAgICAKKyAgICBMaW5lQnJlYWtJdGVyYXRvckluZm8gbGluZUJyZWFr
SXRlcmF0b3JJbmZvOworICAgIFZlcnRpY2FsUG9zaXRpb25DYWNoZSB2ZXJ0aWNhbFBvc2l0aW9u
Q2FjaGU7CisgICAgCisgICAgd2hpbGUgKCFlbmQuYXRFbmQoKSkgeworICAgICAgICAvLyBGSVhN
RTogSXMgdGhpcyBjaGVjayBuZWNlc3NhcnkgYmVmb3JlIHRoZSBmaXJzdCBpdGVyYXRpb24gb3Ig
Y2FuIGl0IGJlIG1vdmVkIHRvIHRoZSBlbmQ/CisgICAgICAgIGlmIChjaGVja0ZvckVuZExpbmVN
YXRjaCAmJiAoZW5kTGluZU1hdGNoZWQgPSBtYXRjaGVkRW5kTGluZShyZXNvbHZlciwgY2xlYW5M
aW5lU3RhcnQsIGNsZWFuTGluZUJpZGlTdGF0dXMsIGVuZExpbmUsIGVuZExpbmVMb2dpY2FsVG9w
LCByZXBhaW50TG9naWNhbEJvdHRvbSwgcmVwYWludExvZ2ljYWxUb3ApKSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICAgICAgbGluZU1pZHBvaW50U3RhdGUucmVzZXQoKTsKKyAg
ICAgICAgCisgICAgICAgIGlzTGluZUVtcHR5ID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIEVD
bGVhciBjbGVhciA9IENOT05FOworICAgICAgICBib29sIGh5cGhlbmF0ZWQ7CisgICAgICAgIFZl
Y3RvcjxSZW5kZXJCb3gqPiBwb3NpdGlvbmVkT2JqZWN0czsKKyAgICAgICAgCisgICAgICAgIElu
bGluZUl0ZXJhdG9yIG9sZEVuZCA9IGVuZDsKKyAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RG
bG9hdEZyb21QcmV2aW91c0xpbmUgPSAobV9mbG9hdGluZ09iamVjdHMgJiYgIW1fZmxvYXRpbmdP
YmplY3RzLT5zZXQoKS5pc0VtcHR5KCkpID8gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmxhc3Qo
KSA6IDA7CisgICAgICAgIGVuZCA9IGZpbmROZXh0TGluZUJyZWFrKHJlc29sdmVyLCBmaXJzdExp
bmUsIGlzTGluZUVtcHR5LCBsaW5lQnJlYWtJdGVyYXRvckluZm8sIHByZXZpb3VzTGluZUJyb2tl
Q2xlYW5seSwgaHlwaGVuYXRlZCwgJmNsZWFyLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBw
b3NpdGlvbmVkT2JqZWN0cyk7CisgICAgICAgIGlmIChyZXNvbHZlci5wb3NpdGlvbigpLmF0RW5k
KCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUgY3JlYXRpbmcgYW55
IHJ1bnMgaW4gZmluZE5leHRMaW5lQnJlYWsgdG8gYmVnaW4gd2l0aCEKKyAgICAgICAgICAgIC8v
IE9uY2UgQmlkaVJ1bkxpc3QgaXMgc2VwYXJhdGVkIGZyb20gQmlkaVJlc29sdmVyIHRoaXMgd2ls
bCBub3QgYmUgbmVlZGVkLgorICAgICAgICAgICAgcmVzb2x2ZXIucnVucygpLmRlbGV0ZVJ1bnMo
KTsKKyAgICAgICAgICAgIHJlc29sdmVyLm1hcmtDdXJyZW50UnVuRW1wdHkoKTsgLy8gRklYTUU6
IFRoaXMgY2FuIHByb2JhYmx5IGJlIHJlcGxhY2VkIGJ5IGFuIEFTU0VSVCAob3IganVzdCByZW1v
dmVkKS4KKyAgICAgICAgICAgIGNoZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChlbmQgIT0gcmVzb2x2
ZXIucG9zaXRpb24oKSk7CisgICAgICAgIAorICAgICAgICBpZiAoaXNMaW5lRW1wdHkpIHsKKyAg
ICAgICAgICAgIGlmIChsYXN0Um9vdEJveCgpKQorICAgICAgICAgICAgICAgIGxhc3RSb290Qm94
KCktPnNldExpbmVCcmVha0luZm8oZW5kLm1fb2JqLCBlbmQubV9wb3MsIHJlc29sdmVyLnN0YXR1
cygpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFZpc3VhbERpcmVjdGlvbk92ZXJy
aWRlIG92ZXJyaWRlID0gKHN0eWxlKCktPnZpc3VhbGx5T3JkZXJlZCgpID8gKHN0eWxlKCktPmRp
cmVjdGlvbigpID09IExUUiA/IFZpc3VhbExlZnRUb1JpZ2h0T3ZlcnJpZGUgOiBWaXN1YWxSaWdo
dFRvTGVmdE92ZXJyaWRlKSA6IE5vVmlzdWFsT3ZlcnJpZGUpOworICAgICAgICAgICAgLy8gRklY
TUU6IFRoaXMgb3duZXJzaGlwIGlzIHJldmVyc2VkLiBXZSBzaG91bGQgb3duIHRoZSBCaWRpUnVu
TGlzdCBhbmQgcGFzcyBpdCB0byBjcmVhdGVCaWRpUnVuc0ZvckxpbmUuCisgICAgICAgICAgICBC
aWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMgPSByZXNvbHZlci5ydW5zKCk7CisgICAgICAg
ICAgICByZXNvbHZlci5jcmVhdGVCaWRpUnVuc0ZvckxpbmUoZW5kLCBvdmVycmlkZSwgcHJldmlv
dXNMaW5lQnJva2VDbGVhbmx5KTsKKyAgICAgICAgICAgIEFTU0VSVChyZXNvbHZlci5wb3NpdGlv
bigpID09IGVuZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJpZGlSdW4qIHRyYWlsaW5n
U3BhY2VSdW4gPSAhcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5ID8gaGFuZGxlVHJhaWxpbmdTcGFj
ZXMoYmlkaVJ1bnMsIHJlc29sdmVyLmNvbnRleHQoKSkgOiAwOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBOb3cgdGhhdCB0aGUgcnVucyBoYXZlIGJlZW4gb3JkZXJlZCwgd2UgY3JlYXRl
IHRoZSBsaW5lIGJveGVzLgorICAgICAgICAgICAgLy8gQXQgdGhlIHNhbWUgdGltZSB3ZSBmaWd1
cmUgb3V0IHdoZXJlIGJvcmRlci9wYWRkaW5nL21hcmdpbiBzaG91bGQgYmUgYXBwbGllZCBmb3IK
KyAgICAgICAgICAgIC8vIGlubGluZSBmbG93IGJveGVzLgorICAgICAgICAgICAgCisgICAgICAg
ICAgICBSb290SW5saW5lQm94KiBsaW5lQm94ID0gMDsKKyAgICAgICAgICAgIGludCBvbGRMb2dp
Y2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOworICAgICAgICAgICAgaWYgKGJpZGlSdW5zLnJ1
bkNvdW50KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaHlwaGVuYXRlZCkKKyAgICAgICAgICAg
ICAgICAgICAgYmlkaVJ1bnMubG9naWNhbGx5TGFzdFJ1bigpLT5tX2hhc0h5cGhlbiA9IHRydWU7
CisgICAgICAgICAgICAgICAgbGluZUJveCA9IGNvbnN0cnVjdExpbmUoYmlkaVJ1bnMsIGZpcnN0
TGluZSwgIWVuZC5tX29iaik7CisgICAgICAgICAgICAgICAgaWYgKGxpbmVCb3gpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbGluZUJveC0+c2V0RW5kc1dpdGhCcmVhayhwcmV2aW91c0xpbmVCcm9r
ZUNsZWFubHkpOworICAgICAgICAgICAgICAgICAgICAKKyNpZiBFTkFCTEUoU1ZHKQorICAgICAg
ICAgICAgICAgICAgICBib29sIGlzU1ZHUm9vdElubGluZUJveCA9IGxpbmVCb3gtPmlzU1ZHUm9v
dElubGluZUJveCgpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1NWR1Jvb3RJ
bmxpbmVCb3ggPSBmYWxzZTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAgdGV4dEJveERhdGFN
YXA7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBOb3cgd2Ug
cG9zaXRpb24gYWxsIG9mIG91ciB0ZXh0IHJ1bnMgaG9yaXpvbnRhbGx5LgorICAgICAgICAgICAg
ICAgICAgICBpZiAoIWlzU1ZHUm9vdElubGluZUJveCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKGxpbmVCb3gsIGZpcnN0TGlu
ZSwgYmlkaVJ1bnMuZmlyc3RSdW4oKSwgdHJhaWxpbmdTcGFjZVJ1biwgZW5kLmF0RW5kKCksIHRl
eHRCb3hEYXRhTWFwLCB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUpOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgLy8gTm93IHBvc2l0aW9uIG91ciB0ZXh0IHJ1bnMgdmVy
dGljYWxseS4KKyAgICAgICAgICAgICAgICAgICAgY29tcHV0ZUJsb2NrRGlyZWN0aW9uUG9zaXRp
b25zRm9yTGluZShsaW5lQm94LCBiaWRpUnVucy5maXJzdFJ1bigpLCB0ZXh0Qm94RGF0YU1hcCwg
dmVydGljYWxQb3NpdGlvbkNhY2hlKTsKKyAgICAgICAgICAgICAgICAgICAgCisjaWYgRU5BQkxF
KFNWRykKKyAgICAgICAgICAgICAgICAgICAgLy8gU1ZHIHRleHQgbGF5b3V0IGNvZGUgY29tcHV0
ZXMgdmVydGljYWwgJiBob3Jpem9udGFsIHBvc2l0aW9ucyBvbiBpdHMgb3duLgorICAgICAgICAg
ICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2Ugc3RpbGwgbmVlZCB0byBleGVjdXRlIGNvbXB1dGVW
ZXJ0aWNhbFBvc2l0aW9uc0ZvckxpbmUoKSBhcworICAgICAgICAgICAgICAgICAgICAvLyBpdCBj
YWxscyBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkxpbmVCb3goKSwgd2hpY2ggdHJhY2tzIHdoZXRo
ZXIgdGhlIGJveAorICAgICAgICAgICAgICAgICAgICAvLyBjb250YWlucyByZXZlcnNlZCB0ZXh0
IG9yIG5vdC4gSWYgd2Ugd291bGRuJ3QgZG8gdGhhdCBlZGl0aW5nIGFuZCB0aHVzCisgICAgICAg
ICAgICAgICAgICAgIC8vIHRleHQgc2VsZWN0aW9uIGluIFJUTCBib3hlcyB3b3VsZCBub3Qgd29y
ayBhcyBleHBlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzU1ZHUm9vdElubGluZUJv
eCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzU1ZHVGV4dCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFNWR1Jvb3RJbmxpbmVCb3gqPihsaW5lQm94
KS0+Y29tcHV0ZVBlckNoYXJhY3RlckxheW91dEluZm9ybWF0aW9uKCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgLy8gQ29tcHV0ZSBvdXIgb3ZlcmZsb3cgbm93LgorICAgICAgICAgICAgICAgICAgICBsaW5l
Qm94LT5jb21wdXRlT3ZlcmZsb3cobGluZUJveC0+bGluZVRvcCgpLCBsaW5lQm94LT5saW5lQm90
dG9tKCksIHRleHRCb3hEYXRhTWFwKTsKKyAgICAgICAgICAgICAgICAgICAgCisjaWYgUExBVEZP
Uk0oTUFDKQorICAgICAgICAgICAgICAgICAgICAvLyBIaWdobGlnaHQgYWN0cyBhcyBhbiBvdmVy
ZmxvdyBpbmZsYXRpb24uCisgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5oaWdobGln
aHQoKSAhPSBudWxsQXRvbSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVCb3gtPmFkZEhp
Z2hsaWdodE92ZXJmbG93KCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJpZGlSdW5zLmRlbGV0ZVJ1bnMoKTsKKyAg
ICAgICAgICAgIHJlc29sdmVyLm1hcmtDdXJyZW50UnVuRW1wdHkoKTsgLy8gRklYTUU6IFRoaXMg
Y2FuIHByb2JhYmx5IGJlIHJlcGxhY2VkIGJ5IGFuIEFTU0VSVCAob3IganVzdCByZW1vdmVkKS4K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGxpbmVCb3gpIHsKKyAgICAgICAgICAgICAg
ICBsaW5lQm94LT5zZXRMaW5lQnJlYWtJbmZvKGVuZC5tX29iaiwgZW5kLm1fcG9zLCByZXNvbHZl
ci5zdGF0dXMoKSk7CisgICAgICAgICAgICAgICAgaWYgKHVzZVJlcGFpbnRCb3VuZHMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmVwYWludExvZ2ljYWxUb3AgPSBtaW4ocmVwYWludExvZ2ljYWxU
b3AsIGxpbmVCb3gtPmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdygpKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmVwYWludExvZ2ljYWxCb3R0b20gPSBtYXgocmVwYWludExvZ2ljYWxCb3R0b20sIGxp
bmVCb3gtPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCkgeworICAg
ICAgICAgICAgICAgICAgICBpbnQgYWRqdXN0bWVudCA9IDA7CisgICAgICAgICAgICAgICAgICAg
IGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24obGluZUJveCwgYWRqdXN0bWVudCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChhZGp1c3RtZW50KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgb2xkTGluZVdpZHRoID0gYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yTGluZShvbGRM
b2dpY2FsSGVpZ2h0LCBmaXJzdExpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZUJv
eC0+YWRqdXN0QmxvY2tEaXJlY3Rpb25Qb3NpdGlvbihhZGp1c3RtZW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh1c2VSZXBhaW50Qm91bmRzKSAvLyBUaGlzIGNhbiBvbmx5IGJlIGEg
cG9zaXRpdmUgYWRqdXN0bWVudCwgc28gbm8gbmVlZCB0byB1cGRhdGUgcmVwYWludFRvcC4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50TG9naWNhbEJvdHRvbSA9IG1heChyZXBh
aW50TG9naWNhbEJvdHRvbSwgbGluZUJveC0+bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
YXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yTGluZShvbGRMb2dpY2FsSGVpZ2h0ICsgYWRqdXN0bWVu
dCwgZmlyc3RMaW5lKSAhPSBvbGRMaW5lV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBoYXZlIHRvIGRlbGV0ZSB0aGlzIGxpbmUsIHJlbW92ZSBhbGwgZmxvYXRzIHRo
YXQgZ290IGFkZGVkLCBhbmQgbGV0IGxpbmUgbGF5b3V0IHJlLXJ1bi4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5lQm94LT5kZWxldGVMaW5lKHJlbmRlckFyZW5hKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUZsb2F0aW5nT2JqZWN0c0JlbG93KGxhc3RGbG9h
dEZyb21QcmV2aW91c0xpbmUsIG9sZExvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQob2xkTG9naWNhbEhlaWdodCArIGFkanVzdG1lbnQp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLnNldFBvc2l0aW9uKG9sZEVu
ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gb2xkRW5kOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2dp
Y2FsSGVpZ2h0KGxpbmVCb3gtPmJsb2NrTG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb3NpdGlvbmVkT2JqZWN0cy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgICAgICBzZXRTdGF0aWNQb3NpdGlvbnModGhpcywgcG9zaXRp
b25lZE9iamVjdHNbaV0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBmaXJzdExpbmUgPSBm
YWxzZTsKKyAgICAgICAgICAgIG5ld0xpbmUoY2xlYXIpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMgJiYgbGFzdFJvb3RCb3goKSkgeworICAgICAg
ICAgICAgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09i
amVjdHMtPnNldCgpOworICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9
IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNl
dEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOworICAgICAgICAgICAgaWYg
KGxhc3RGbG9hdCkgeworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3Ig
bGFzdEZsb2F0SXRlcmF0b3IgPSBmbG9hdGluZ09iamVjdFNldC5maW5kKGxhc3RGbG9hdCk7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGxhc3RGbG9hdEl0ZXJhdG9yICE9IGVuZCk7CisgICAgICAg
ICAgICAgICAgKytsYXN0RmxvYXRJdGVyYXRvcjsKKyAgICAgICAgICAgICAgICBpdCA9IGxhc3RG
bG9hdEl0ZXJhdG9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICg7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OworICAg
ICAgICAgICAgICAgIGFwcGVuZEZsb2F0aW5nT2JqZWN0VG9MYXN0TGluZShmKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoZi0+bV9yZW5kZXJlciA9PSBmbG9hdHNbZmxvYXRJbmRleF0ub2JqZWN0
KTsKKyAgICAgICAgICAgICAgICAvLyBJZiBhIGZsb2F0J3MgZ2VvbWV0cnkgaGFzIGNoYW5nZWQs
IGdpdmUgdXAgb24gc3luY2luZyB3aXRoIGNsZWFuIGxpbmVzLgorICAgICAgICAgICAgICAgIGlm
IChmbG9hdHNbZmxvYXRJbmRleF0ucmVjdCAhPSBmLT5mcmFtZVJlY3QoKSkKKyAgICAgICAgICAg
ICAgICAgICAgY2hlY2tGb3JFbmRMaW5lTWF0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBm
bG9hdEluZGV4Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXN0RmxvYXQgPSAhZmxv
YXRpbmdPYmplY3RTZXQuaXNFbXB0eSgpID8gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpIDogMDsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbGluZU1pZHBvaW50U3RhdGUucmVzZXQoKTsK
KyAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRpb24oZW5kKTsKKyAgICB9CiAgICAgCisgICAgaWYg
KGVuZExpbmUpIHsKKyAgICAgICAgaWYgKGVuZExpbmVNYXRjaGVkKSB7CisgICAgICAgICAgICAv
LyBBdHRhY2ggYWxsIHRoZSByZW1haW5pbmcgbGluZXMsIGFuZCB0aGVuIGFkanVzdCB0aGVpciB5
LXBvc2l0aW9ucyBhcyBuZWVkZWQuCisgICAgICAgICAgICBpbnQgZGVsdGEgPSBsb2dpY2FsSGVp
Z2h0KCkgLSBlbmRMaW5lTG9naWNhbFRvcDsKKyAgICAgICAgICAgIGZvciAoUm9vdElubGluZUJv
eCogbGluZSA9IGVuZExpbmU7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0Um9vdEJveCgpKSB7Cisg
ICAgICAgICAgICAgICAgbGluZS0+YXR0YWNoTGluZSgpOworICAgICAgICAgICAgICAgIGlmIChw
YWdpbmF0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGEgLT0gbGluZS0+cGFnaW5hdGlv
blN0cnV0KCk7CisgICAgICAgICAgICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2lu
YXRpb24obGluZSwgZGVsdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoZGVsdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwYWludExvZ2ljYWxUb3AgPSBtaW4o
cmVwYWludExvZ2ljYWxUb3AsIGxpbmUtPmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdygpICsgbWlu
KGRlbHRhLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRMb2dpY2FsQm90dG9tID0g
bWF4KHJlcGFpbnRMb2dpY2FsQm90dG9tLCBsaW5lLT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZs
b3coKSArIG1heChkZWx0YSwgMCkpOworICAgICAgICAgICAgICAgICAgICBsaW5lLT5hZGp1c3RC
bG9ja0RpcmVjdGlvblBvc2l0aW9uKGRlbHRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKFZlY3RvcjxSZW5kZXJCb3gqPiogY2xlYW5MaW5lRmxvYXRzID0gbGluZS0+
ZmxvYXRzUHRyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFJlbmRlckJveCo+Ojpp
dGVyYXRvciBlbmQgPSBjbGVhbkxpbmVGbG9hdHMtPmVuZCgpOworICAgICAgICAgICAgICAgICAg
ICBmb3IgKFZlY3RvcjxSZW5kZXJCb3gqPjo6aXRlcmF0b3IgZiA9IGNsZWFuTGluZUZsb2F0cy0+
YmVnaW4oKTsgZiAhPSBlbmQ7ICsrZikgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
RmxvYXRpbmdPYmplY3QoKmYpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0TG9naWNhbEhl
aWdodChsb2dpY2FsVG9wRm9yQ2hpbGQoKmYpIC0gbWFyZ2luQmVmb3JlRm9yQ2hpbGQoKmYpICsg
ZGVsdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25OZXdGbG9hdHMoKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobGFzdFJvb3RCb3goKS0+YmxvY2tMb2dpY2FsSGVp
Z2h0KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRGVsZXRlIGFsbCB0aGUg
cmVtYWluaW5nIGxpbmVzLgorICAgICAgICAgICAgUm9vdElubGluZUJveCogbGluZSA9IGVuZExp
bmU7CisgICAgICAgICAgICBSZW5kZXJBcmVuYSogYXJlbmEgPSByZW5kZXJBcmVuYSgpOworICAg
ICAgICAgICAgd2hpbGUgKGxpbmUpIHsKKyAgICAgICAgICAgICAgICByZXBhaW50TG9naWNhbFRv
cCA9IG1pbihyZXBhaW50TG9naWNhbFRvcCwgbGluZS0+bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93
KCkpOworICAgICAgICAgICAgICAgIHJlcGFpbnRMb2dpY2FsQm90dG9tID0gbWF4KHJlcGFpbnRM
b2dpY2FsQm90dG9tLCBsaW5lLT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3coKSk7CisgICAg
ICAgICAgICAgICAgUm9vdElubGluZUJveCogbmV4dCA9IGxpbmUtPm5leHRSb290Qm94KCk7Cisg
ICAgICAgICAgICAgICAgbGluZS0+ZGVsZXRlTGluZShhcmVuYSk7CisgICAgICAgICAgICAgICAg
bGluZSA9IG5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1f
ZmxvYXRpbmdPYmplY3RzICYmIChjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSB8fCBwb3NpdGlv
bk5ld0Zsb2F0cygpKSAmJiBsYXN0Um9vdEJveCgpKSB7CisgICAgICAgIC8vIEluIGNhc2Ugd2Ug
aGF2ZSBhIGZsb2F0IG9uIHRoZSBsYXN0IGxpbmUsIGl0IG1pZ2h0IG5vdCBiZSBwb3NpdGlvbmVk
IHVwIHRvIG5vdy4KKyAgICAgICAgLy8gVGhpcyBoYXMgdG8gYmUgZG9uZSBiZWZvcmUgYWRkaW5n
IGluIHRoZSBib3R0b20gYm9yZGVyL3BhZGRpbmcsIG9yIHRoZSBmbG9hdCB3aWxsCisgICAgICAg
IC8vIGluY2x1ZGUgdGhlIHBhZGRpbmcgaW5jb3JyZWN0bHkuIC1kd2gKKyAgICAgICAgaWYgKGNo
ZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lKSB7CisgICAgICAgICAgICBpbnQgYm90dG9tVmlzdWFs
T3ZlcmZsb3cgPSBsYXN0Um9vdEJveCgpLT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3coKTsK
KyAgICAgICAgICAgIGludCBib3R0b21MYXlvdXRPdmVyZmxvdyA9IGxhc3RSb290Qm94KCktPmxv
Z2ljYWxCb3R0b21MYXlvdXRPdmVyZmxvdygpOworICAgICAgICAgICAgVHJhaWxpbmdGbG9hdHNS
b290SW5saW5lQm94KiB0cmFpbGluZ0Zsb2F0c0xpbmVCb3ggPSBuZXcgKHJlbmRlckFyZW5hKCkp
IFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveCh0aGlzKTsKKyAgICAgICAgICAgIG1fbGluZUJv
eGVzLmFwcGVuZExpbmVCb3godHJhaWxpbmdGbG9hdHNMaW5lQm94KTsKKyAgICAgICAgICAgIHRy
YWlsaW5nRmxvYXRzTGluZUJveC0+c2V0Q29uc3RydWN0ZWQoKTsKKyAgICAgICAgICAgIEdseXBo
T3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwIHRleHRCb3hEYXRhTWFwOworICAgICAgICAgICAg
VmVydGljYWxQb3NpdGlvbkNhY2hlIHZlcnRpY2FsUG9zaXRpb25DYWNoZTsKKyAgICAgICAgICAg
IHRyYWlsaW5nRmxvYXRzTGluZUJveC0+YWxpZ25Cb3hlc0luQmxvY2tEaXJlY3Rpb24obG9naWNh
bEhlaWdodCgpLCB0ZXh0Qm94RGF0YU1hcCwgdmVydGljYWxQb3NpdGlvbkNhY2hlKTsKKyAgICAg
ICAgICAgIGludCBibG9ja0xvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7CisgICAgICAg
ICAgICBJbnRSZWN0IGxvZ2ljYWxMYXlvdXRPdmVyZmxvdygwLCBibG9ja0xvZ2ljYWxIZWlnaHQs
IDEsIGJvdHRvbUxheW91dE92ZXJmbG93IC0gYmxvY2tMb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAg
ICAgIEludFJlY3QgbG9naWNhbFZpc3VhbE92ZXJmbG93KDAsIGJsb2NrTG9naWNhbEhlaWdodCwg
MSwgYm90dG9tVmlzdWFsT3ZlcmZsb3cgLSBibG9ja0xvZ2ljYWxIZWlnaHQpOworICAgICAgICAg
ICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5zZXRPdmVyZmxvd0Zyb21Mb2dpY2FsUmVjdHMobG9n
aWNhbExheW91dE92ZXJmbG93LCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3csIHRyYWlsaW5nRmxvYXRz
TGluZUJveC0+bGluZVRvcCgpLCB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPmxpbmVCb3R0b20oKSk7
CisgICAgICAgICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPnNldEJsb2NrTG9naWNhbEhlaWdo
dChsb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBGbG9hdGlu
Z09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7
CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNl
dC5iZWdpbigpOworICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmVuZCgpOworICAgICAgICBpZiAobGFzdEZsb2F0KSB7CisgICAgICAgICAg
ICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGxhc3RGbG9hdEl0ZXJhdG9yID0gZmxvYXRpbmdP
YmplY3RTZXQuZmluZChsYXN0RmxvYXQpOworICAgICAgICAgICAgQVNTRVJUKGxhc3RGbG9hdEl0
ZXJhdG9yICE9IGVuZCk7CisgICAgICAgICAgICArK2xhc3RGbG9hdEl0ZXJhdG9yOworICAgICAg
ICAgICAgaXQgPSBsYXN0RmxvYXRJdGVyYXRvcjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKDsg
aXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgYXBwZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RM
aW5lKCppdCk7CisgICAgICAgIGxhc3RGbG9hdCA9ICFmbG9hdGluZ09iamVjdFNldC5pc0VtcHR5
KCkgPyBmbG9hdGluZ09iamVjdFNldC5sYXN0KCkgOiAwOworICAgIH0KKyAgICBzaXplX3QgZmxv
YXRDb3VudCA9IGZsb2F0cy5zaXplKCk7CisgICAgLy8gRmxvYXRzIHRoYXQgZGlkIG5vdCBoYXZl
IGxheW91dCBkaWQgbm90IHJlcGFpbnQgd2hlbiB3ZSBsYWlkIHRoZW0gb3V0LiBUaGV5IHdvdWxk
IGhhdmUKKyAgICAvLyBwYWludGVkIGJ5IG5vdyBpZiB0aGV5IGhhZCBtb3ZlZCwgYnV0IGlmIHRo
ZXkgc3RheWVkIGF0ICgwLCAwKSwgdGhleSBzdGlsbCBuZWVkIHRvIGJlCisgICAgLy8gcGFpbnRl
ZC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZsb2F0Q291bnQ7ICsraSkgeworICAgICAg
ICBpZiAoIWZsb2F0c1tpXS5ldmVySGFkTGF5b3V0KSB7CisgICAgICAgICAgICBSZW5kZXJCb3gq
IGYgPSBmbG9hdHNbaV0ub2JqZWN0OworICAgICAgICAgICAgaWYgKCFmLT54KCkgJiYgIWYtPnko
KSAmJiBmLT5jaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSkKKyAgICAgICAgICAgICAgICBm
LT5yZXBhaW50KCk7CisgICAgICAgIH0KKyAgICB9ICAgIAorfQorCit2b2lkIFJlbmRlckJsb2Nr
OjpsYXlvdXRJbmxpbmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCYgcmVwYWlu
dExvZ2ljYWxUb3AsIGludCYgcmVwYWludExvZ2ljYWxCb3R0b20pCit7CiAgICAgbV9vdmVyZmxv
dy5jbGVhcigpOwogICAgICAgICAKICAgICBzZXRMb2dpY2FsSGVpZ2h0KGJvcmRlckJlZm9yZSgp
ICsgcGFkZGluZ0JlZm9yZSgpKTsKQEAgLTc1MSw3ICsxMDc0LDggQEAgdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQmIHJlcGFp
bnRMb2dpY2EKICAgICAgICAgIGRlbGV0ZUVsbGlwc2lzTGluZUJveGVzKCk7CiAKICAgICBpZiAo
Zmlyc3RDaGlsZCgpKSB7Ci0gICAgICAgIC8vIGxheW91dCByZXBsYWNlZCBlbGVtZW50cworICAg
ICAgICAvLyBGaXJzdCB3YWxrIG91ciBpbmxpbmUgc3VidHJlZSB0byBsYXlvdXQgcmVwbGFjZWQg
ZWxlbWVudHMsIGRpcnR5IGxpbmUgYm94ZXMsCisgICAgICAgIC8vIGNvbGxlY3QgZmxvYXRzIGFu
ZCBub3RpZnkgY29udGFpbmluZyBibG9ja3Mgb2YgcG9zaXRpb25lZCBjaGlsZHJlbi4KICAgICAg
ICAgYm9vbCBlbmRPZklubGluZSA9IGZhbHNlOwogICAgICAgICBSZW5kZXJPYmplY3QqIG8gPSBi
aWRpRmlyc3ROb3RTa2lwcGluZ0lubGluZXModGhpcyk7CiAgICAgICAgIFZlY3RvcjxGbG9hdFdp
dGhSZWN0PiBmbG9hdHM7CkBAIC03ODksMzIyICsxMTEzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQmIHJlcGFpbnRM
b2dpY2EKICAgICAgICAgICAgIG8gPSBiaWRpTmV4dCh0aGlzLCBvLCAwLCBmYWxzZSwgJmVuZE9m
SW5saW5lKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFdlIHdhbnQgdG8gc2tpcCBhaGVhZCB0
byB0aGUgZmlyc3QgZGlydHkgbGluZQotICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXIgcmVzb2x2
ZXI7Ci0gICAgICAgIHVuc2lnbmVkIGZsb2F0SW5kZXg7Ci0gICAgICAgIGJvb2wgZmlyc3RMaW5l
ID0gdHJ1ZTsKLSAgICAgICAgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkgPSB0cnVlOwot
ICAgICAgICBSb290SW5saW5lQm94KiBzdGFydExpbmUgPSBkZXRlcm1pbmVTdGFydFBvc2l0aW9u
KGZpcnN0TGluZSwgZnVsbExheW91dCwgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCByZXNvbHZl
ciwgZmxvYXRzLCBmbG9hdEluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVzZVJlcGFpbnRCb3VuZHMsIHJlcGFpbnRMb2dpY2Fs
VG9wLCByZXBhaW50TG9naWNhbEJvdHRvbSk7Ci0KLSAgICAgICAgaWYgKGZ1bGxMYXlvdXQgJiYg
aGFzSW5saW5lQ2hpbGQgJiYgIXNlbGZOZWVkc0xheW91dCgpKSB7Ci0gICAgICAgICAgICBzZXRO
ZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7ICAvLyBNYXJrIG91cnNlbHZlcyBhcyBuZWVkaW5nIGEg
ZnVsbCBsYXlvdXQuIFRoaXMgd2F5IHdlJ2xsIHJlcGFpbnQgbGlrZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UncmUgc3VwcG9zZWQgdG8uCi0gICAgICAg
ICAgICBSZW5kZXJWaWV3KiB2ID0gdmlldygpOwotICAgICAgICAgICAgaWYgKHYgJiYgIXYtPmRv
aW5nRnVsbFJlcGFpbnQoKSAmJiBoYXNMYXllcigpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQmVj
YXVzZSB3ZSB3YWl0ZWQgdW50aWwgd2Ugd2VyZSBhbHJlYWR5IGluc2lkZSBsYXlvdXQgdG8gZGlz
Y292ZXIKLSAgICAgICAgICAgICAgICAvLyB0aGF0IHRoZSBibG9jayByZWFsbHkgbmVlZGVkIGEg
ZnVsbCBsYXlvdXQsIHdlIG1pc3NlZCBvdXIgY2hhbmNlIHRvIHJlcGFpbnQgdGhlIGxheWVyCi0g
ICAgICAgICAgICAgICAgLy8gYmVmb3JlIGxheW91dCBzdGFydGVkLiAgTHVja2lseSB0aGUgbGF5
ZXIgaGFzIGNhY2hlZCB0aGUgcmVwYWludCByZWN0IGZvciBpdHMgb3JpZ2luYWwKLSAgICAgICAg
ICAgICAgICAvLyBwb3NpdGlvbiBhbmQgc2l6ZSwgYW5kIHNvIHdlIGNhbiB1c2UgdGhhdCB0byBt
YWtlIGEgcmVwYWludCBoYXBwZW4gbm93LgotICAgICAgICAgICAgICAgIHJlcGFpbnRVc2luZ0Nv
bnRhaW5lcihjb250YWluZXJGb3JSZXBhaW50KCksIGxheWVyKCktPnJlcGFpbnRSZWN0KCkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RG
bG9hdCA9IChtX2Zsb2F0aW5nT2JqZWN0cyAmJiAhbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmlz
RW1wdHkoKSkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkubGFzdCgpIDogMDsKLQotICAgICAg
ICBMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50U3RhdGUgPSByZXNvbHZlci5taWRwb2lu
dFN0YXRlKCk7Ci0KLSAgICAgICAgLy8gV2UgYWxzbyBmaW5kIHRoZSBmaXJzdCBjbGVhbiBsaW5l
IGFuZCBleHRyYWN0IHRoZXNlIGxpbmVzLiAgV2Ugd2lsbCBhZGQgdGhlbSBiYWNrCi0gICAgICAg
IC8vIGlmIHdlIGRldGVybWluZSB0aGF0IHdlJ3JlIGFibGUgdG8gc3luY2hyb25pemUgYWZ0ZXIg
aGFuZGxpbmcgYWxsIG91ciBkaXJ0eSBsaW5lcy4KLSAgICAgICAgSW5saW5lSXRlcmF0b3IgY2xl
YW5MaW5lU3RhcnQ7Ci0gICAgICAgIEJpZGlTdGF0dXMgY2xlYW5MaW5lQmlkaVN0YXR1czsKLSAg
ICAgICAgaW50IGVuZExpbmVMb2dpY2FsVG9wID0gMDsKLSAgICAgICAgUm9vdElubGluZUJveCog
ZW5kTGluZSA9IChmdWxsTGF5b3V0IHx8ICFzdGFydExpbmUpID8gCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwIDogZGV0ZXJtaW5lRW5kUG9zaXRpb24oc3RhcnRMaW5lLCBmbG9h
dHMsIGZsb2F0SW5kZXgsIGNsZWFuTGluZVN0YXJ0LCBjbGVhbkxpbmVCaWRpU3RhdHVzLCBlbmRM
aW5lTG9naWNhbFRvcCk7Ci0KLSAgICAgICAgaWYgKHN0YXJ0TGluZSkgewotICAgICAgICAgICAg
aWYgKCF1c2VSZXBhaW50Qm91bmRzKSB7Ci0gICAgICAgICAgICAgICAgdXNlUmVwYWludEJvdW5k
cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVwYWludExvZ2ljYWxUb3AgPSBsb2dpY2FsSGVp
Z2h0KCk7Ci0gICAgICAgICAgICAgICAgcmVwYWludExvZ2ljYWxCb3R0b20gPSBsb2dpY2FsSGVp
Z2h0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZW5kZXJBcmVuYSogYXJlbmEgPSBy
ZW5kZXJBcmVuYSgpOwotICAgICAgICAgICAgUm9vdElubGluZUJveCogYm94ID0gc3RhcnRMaW5l
OwotICAgICAgICAgICAgd2hpbGUgKGJveCkgewotICAgICAgICAgICAgICAgIHJlcGFpbnRMb2dp
Y2FsVG9wID0gbWluKHJlcGFpbnRMb2dpY2FsVG9wLCBib3gtPmxvZ2ljYWxUb3BWaXN1YWxPdmVy
ZmxvdygpKTsKLSAgICAgICAgICAgICAgICByZXBhaW50TG9naWNhbEJvdHRvbSA9IG1heChyZXBh
aW50TG9naWNhbEJvdHRvbSwgYm94LT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3coKSk7Ci0g
ICAgICAgICAgICAgICAgUm9vdElubGluZUJveCogbmV4dCA9IGJveC0+bmV4dFJvb3RCb3goKTsK
LSAgICAgICAgICAgICAgICBib3gtPmRlbGV0ZUxpbmUoYXJlbmEpOwotICAgICAgICAgICAgICAg
IGJveCA9IG5leHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBJbmxpbmVJ
dGVyYXRvciBlbmQgPSByZXNvbHZlci5wb3NpdGlvbigpOwotCi0gICAgICAgIGlmICghZnVsbExh
eW91dCAmJiBsYXN0Um9vdEJveCgpICYmIGxhc3RSb290Qm94KCktPmVuZHNXaXRoQnJlYWsoKSkg
ewotICAgICAgICAgICAgLy8gSWYgdGhlIGxhc3QgbGluZSBiZWZvcmUgdGhlIHN0YXJ0IGxpbmUg
ZW5kcyB3aXRoIGEgbGluZSBicmVhayB0aGF0IGNsZWFyIGZsb2F0cywKLSAgICAgICAgICAgIC8v
IGFkanVzdCB0aGUgaGVpZ2h0IGFjY29yZGluZ2x5LgotICAgICAgICAgICAgLy8gQSBsaW5lIGJy
ZWFrIGNhbiBiZSBlaXRoZXIgdGhlIGZpcnN0IG9yIHRoZSBsYXN0IG9iamVjdCBvbiBhIGxpbmUs
IGRlcGVuZGluZyBvbiBpdHMgZGlyZWN0aW9uLgotICAgICAgICAgICAgaWYgKElubGluZUJveCog
bGFzdExlYWZDaGlsZCA9IGxhc3RSb290Qm94KCktPmxhc3RMZWFmQ2hpbGQoKSkgewotICAgICAg
ICAgICAgICAgIFJlbmRlck9iamVjdCogbGFzdE9iamVjdCA9IGxhc3RMZWFmQ2hpbGQtPnJlbmRl
cmVyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFsYXN0T2JqZWN0LT5pc0JSKCkpCi0gICAgICAg
ICAgICAgICAgICAgIGxhc3RPYmplY3QgPSBsYXN0Um9vdEJveCgpLT5maXJzdExlYWZDaGlsZCgp
LT5yZW5kZXJlcigpOwotICAgICAgICAgICAgICAgIGlmIChsYXN0T2JqZWN0LT5pc0JSKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgRUNsZWFyIGNsZWFyID0gbGFzdE9iamVjdC0+c3R5bGUoKS0+
Y2xlYXIoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNsZWFyICE9IENOT05FKQotICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3TGluZShjbGVhcik7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBlbmRMaW5lTWF0Y2hlZCA9IGZh
bHNlOwotICAgICAgICBib29sIGNoZWNrRm9yRW5kTGluZU1hdGNoID0gZW5kTGluZTsKLSAgICAg
ICAgYm9vbCBjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSA9IGZhbHNlOwotCi0gICAgICAgIGJv
b2wgaXNMaW5lRW1wdHkgPSB0cnVlOwotICAgICAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+
bGF5b3V0U3RhdGUoKSAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPmlzUGFnaW5hdGVkKCk7Ci0K
LSAgICAgICAgTGluZUJyZWFrSXRlcmF0b3JJbmZvIGxpbmVCcmVha0l0ZXJhdG9ySW5mbzsKLSAg
ICAgICAgVmVydGljYWxQb3NpdGlvbkNhY2hlIHZlcnRpY2FsUG9zaXRpb25DYWNoZTsKLQotICAg
ICAgICB3aGlsZSAoIWVuZC5hdEVuZCgpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhp
cyBjaGVjayBuZWNlc3NhcnkgYmVmb3JlIHRoZSBmaXJzdCBpdGVyYXRpb24gb3IgY2FuIGl0IGJl
IG1vdmVkIHRvIHRoZSBlbmQ/Ci0gICAgICAgICAgICBpZiAoY2hlY2tGb3JFbmRMaW5lTWF0Y2gg
JiYgKGVuZExpbmVNYXRjaGVkID0gbWF0Y2hlZEVuZExpbmUocmVzb2x2ZXIsIGNsZWFuTGluZVN0
YXJ0LCBjbGVhbkxpbmVCaWRpU3RhdHVzLCBlbmRMaW5lLCBlbmRMaW5lTG9naWNhbFRvcCwgcmVw
YWludExvZ2ljYWxCb3R0b20sIHJlcGFpbnRMb2dpY2FsVG9wKSkpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICAgIGxpbmVNaWRwb2ludFN0YXRlLnJlc2V0KCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlzTGluZUVtcHR5ID0gdHJ1ZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgRUNsZWFyIGNsZWFyID0gQ05PTkU7Ci0gICAgICAgICAgICBib29sIGh5cGhlbmF0
ZWQ7Ci0gICAgICAgICAgICBWZWN0b3I8UmVuZGVyQm94Kj4gcG9zaXRpb25lZE9iamVjdHM7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIElubGluZUl0ZXJhdG9yIG9sZEVuZCA9IGVuZDsKLSAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lID0gKG1f
ZmxvYXRpbmdPYmplY3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuaXNFbXB0eSgpKSA/
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5sYXN0KCkgOiAwOwotICAgICAgICAgICAgZW5kID0g
ZmluZE5leHRMaW5lQnJlYWsocmVzb2x2ZXIsIGZpcnN0TGluZSwgaXNMaW5lRW1wdHksIGxpbmVC
cmVha0l0ZXJhdG9ySW5mbywgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5LCBoeXBoZW5hdGVkLCAm
Y2xlYXIsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIHBvc2l0aW9uZWRPYmplY3RzKTsKLSAg
ICAgICAgICAgIGlmIChyZXNvbHZlci5wb3NpdGlvbigpLmF0RW5kKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGJlIGNyZWF0aW5nIGFueSBydW5zIGluIGZpbmRO
ZXh0TGluZUJyZWFrIHRvIGJlZ2luIHdpdGghCi0gICAgICAgICAgICAgICAgLy8gT25jZSBCaWRp
UnVuTGlzdCBpcyBzZXBhcmF0ZWQgZnJvbSBCaWRpUmVzb2x2ZXIgdGhpcyB3aWxsIG5vdCBiZSBu
ZWVkZWQuCi0gICAgICAgICAgICAgICAgcmVzb2x2ZXIucnVucygpLmRlbGV0ZVJ1bnMoKTsKLSAg
ICAgICAgICAgICAgICByZXNvbHZlci5tYXJrQ3VycmVudFJ1bkVtcHR5KCk7IC8vIEZJWE1FOiBU
aGlzIGNhbiBwcm9iYWJseSBiZSByZXBsYWNlZCBieSBhbiBBU1NFUlQgKG9yIGp1c3QgcmVtb3Zl
ZCkuCi0gICAgICAgICAgICAgICAgY2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmUgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJU
KGVuZCAhPSByZXNvbHZlci5wb3NpdGlvbigpKTsKLQotICAgICAgICAgICAgaWYgKGlzTGluZUVt
cHR5KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxhc3RSb290Qm94KCkpCi0gICAgICAgICAgICAg
ICAgICAgIGxhc3RSb290Qm94KCktPnNldExpbmVCcmVha0luZm8oZW5kLm1fb2JqLCBlbmQubV9w
b3MsIHJlc29sdmVyLnN0YXR1cygpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgb3ZlcnJpZGUgPSAoc3R5bGUoKS0+dmlzdWFs
bHlPcmRlcmVkKCkgPyAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gVmlzdWFsTGVmdFRv
UmlnaHRPdmVycmlkZSA6IFZpc3VhbFJpZ2h0VG9MZWZ0T3ZlcnJpZGUpIDogTm9WaXN1YWxPdmVy
cmlkZSk7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgb3duZXJzaGlwIGlzIHJldmVy
c2VkLiBXZSBzaG91bGQgb3duIHRoZSBCaWRpUnVuTGlzdCBhbmQgcGFzcyBpdCB0byBjcmVhdGVC
aWRpUnVuc0ZvckxpbmUuCi0gICAgICAgICAgICAgICAgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJp
ZGlSdW5zID0gcmVzb2x2ZXIucnVucygpOwotICAgICAgICAgICAgICAgIHJlc29sdmVyLmNyZWF0
ZUJpZGlSdW5zRm9yTGluZShlbmQsIG92ZXJyaWRlLCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkp
OwotICAgICAgICAgICAgICAgIEFTU0VSVChyZXNvbHZlci5wb3NpdGlvbigpID09IGVuZCk7Ci0K
LSAgICAgICAgICAgICAgICBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuID0gIXByZXZpb3VzTGlu
ZUJyb2tlQ2xlYW5seSA/IGhhbmRsZVRyYWlsaW5nU3BhY2VzKGJpZGlSdW5zLCByZXNvbHZlci5j
b250ZXh0KCkpIDogMDsKLQotICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHRoZSBydW5zIGhh
dmUgYmVlbiBvcmRlcmVkLCB3ZSBjcmVhdGUgdGhlIGxpbmUgYm94ZXMuCi0gICAgICAgICAgICAg
ICAgLy8gQXQgdGhlIHNhbWUgdGltZSB3ZSBmaWd1cmUgb3V0IHdoZXJlIGJvcmRlci9wYWRkaW5n
L21hcmdpbiBzaG91bGQgYmUgYXBwbGllZCBmb3IKLSAgICAgICAgICAgICAgICAvLyBpbmxpbmUg
ZmxvdyBib3hlcy4KLQotICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIGxpbmVCb3ggPSAw
OwotICAgICAgICAgICAgICAgIGludCBvbGRMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgp
OwotICAgICAgICAgICAgICAgIGlmIChiaWRpUnVucy5ydW5Db3VudCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChoeXBoZW5hdGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgYmlkaVJ1
bnMubG9naWNhbGx5TGFzdFJ1bigpLT5tX2hhc0h5cGhlbiA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGxpbmVCb3ggPSBjb25zdHJ1Y3RMaW5lKGJpZGlSdW5zLCBmaXJzdExpbmUsICFlbmQu
bV9vYmopOwotICAgICAgICAgICAgICAgICAgICBpZiAobGluZUJveCkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbGluZUJveC0+c2V0RW5kc1dpdGhCcmVhayhwcmV2aW91c0xpbmVCcm9rZUNs
ZWFubHkpOwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
aXNTVkdSb290SW5saW5lQm94ID0gbGluZUJveC0+aXNTVkdSb290SW5saW5lQm94KCk7Ci0jZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1NWR1Jvb3RJbmxpbmVCb3ggPSBmYWxz
ZTsKLSNlbmRpZgotCi0gICAgICAgICAgICAgICAgICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFs
bGJhY2tGb250c01hcCB0ZXh0Qm94RGF0YU1hcDsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyBOb3cgd2UgcG9zaXRpb24gYWxsIG9mIG91ciB0ZXh0IHJ1
bnMgaG9yaXpvbnRhbGx5LgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NWR1Jvb3RJ
bmxpbmVCb3gpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZUlubGluZURpcmVj
dGlvblBvc2l0aW9uc0ZvckxpbmUobGluZUJveCwgZmlyc3RMaW5lLCBiaWRpUnVucy5maXJzdFJ1
bigpLCB0cmFpbGluZ1NwYWNlUnVuLCBlbmQuYXRFbmQoKSwgdGV4dEJveERhdGFNYXAsIHZlcnRp
Y2FsUG9zaXRpb25DYWNoZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyBwb3Np
dGlvbiBvdXIgdGV4dCBydW5zIHZlcnRpY2FsbHkuCi0gICAgICAgICAgICAgICAgICAgICAgICBj
b21wdXRlQmxvY2tEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKGxpbmVCb3gsIGJpZGlSdW5zLmZp
cnN0UnVuKCksIHRleHRCb3hEYXRhTWFwLCB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUpOwotCi0jaWYg
RU5BQkxFKFNWRykKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNWRyB0ZXh0IGxheW91dCBj
b2RlIGNvbXB1dGVzIHZlcnRpY2FsICYgaG9yaXpvbnRhbCBwb3NpdGlvbnMgb24gaXRzIG93bi4K
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBzdGlsbCBuZWVkIHRvIGV4
ZWN1dGUgY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25zRm9yTGluZSgpIGFzCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBpdCBjYWxscyBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkxpbmVCb3goKSwg
d2hpY2ggdHJhY2tzIHdoZXRoZXIgdGhlIGJveAotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Y29udGFpbnMgcmV2ZXJzZWQgdGV4dCBvciBub3QuIElmIHdlIHdvdWxkbid0IGRvIHRoYXQgZWRp
dGluZyBhbmQgdGh1cwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dCBzZWxlY3Rpb24g
aW4gUlRMIGJveGVzIHdvdWxkIG5vdCB3b3JrIGFzIGV4cGVjdGVkLgotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzU1ZHUm9vdElubGluZUJveCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChpc1NWR1RleHQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8U1ZHUm9vdElubGluZUJveCo+KGxpbmVCb3gpLT5jb21wdXRlUGVyQ2hhcmFj
dGVyTGF5b3V0SW5mb3JtYXRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRp
ZgotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDb21wdXRlIG91ciBvdmVyZmxvdyBub3cu
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lQm94LT5jb21wdXRlT3ZlcmZsb3cobGluZUJv
eC0+bGluZVRvcCgpLCBsaW5lQm94LT5saW5lQm90dG9tKCksIHRleHRCb3hEYXRhTWFwKTsKLSAg
ICAKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBIaWdobGln
aHQgYWN0cyBhcyBhbiBvdmVyZmxvdyBpbmZsYXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3R5bGUoKS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20pCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGluZUJveC0+YWRkSGlnaGxpZ2h0T3ZlcmZsb3coKTsKLSNlbmRpZgotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
YmlkaVJ1bnMuZGVsZXRlUnVucygpOwotICAgICAgICAgICAgICAgIHJlc29sdmVyLm1hcmtDdXJy
ZW50UnVuRW1wdHkoKTsgLy8gRklYTUU6IFRoaXMgY2FuIHByb2JhYmx5IGJlIHJlcGxhY2VkIGJ5
IGFuIEFTU0VSVCAob3IganVzdCByZW1vdmVkKS4KLQotICAgICAgICAgICAgICAgIGlmIChsaW5l
Qm94KSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVCb3gtPnNldExpbmVCcmVha0luZm8oZW5k
Lm1fb2JqLCBlbmQubV9wb3MsIHJlc29sdmVyLnN0YXR1cygpKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHVzZVJlcGFpbnRCb3VuZHMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFp
bnRMb2dpY2FsVG9wID0gbWluKHJlcGFpbnRMb2dpY2FsVG9wLCBsaW5lQm94LT5sb2dpY2FsVG9w
VmlzdWFsT3ZlcmZsb3coKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50TG9naWNh
bEJvdHRvbSA9IG1heChyZXBhaW50TG9naWNhbEJvdHRvbSwgbGluZUJveC0+bG9naWNhbEJvdHRv
bVZpc3VhbE92ZXJmbG93KCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAocGFnaW5hdGVkKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgYWRqdXN0bWVudCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKGxpbmVCb3gsIGFkanVzdG1lbnQpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkanVzdG1lbnQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgb2xkTGluZVdpZHRoID0gYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9y
TGluZShvbGRMb2dpY2FsSGVpZ2h0LCBmaXJzdExpbmUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbmVCb3gtPmFkanVzdEJsb2NrRGlyZWN0aW9uUG9zaXRpb24oYWRqdXN0bWVudCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZVJlcGFpbnRCb3VuZHMpIC8vIFRo
aXMgY2FuIG9ubHkgYmUgYSBwb3NpdGl2ZSBhZGp1c3RtZW50LCBzbyBubyBuZWVkIHRvIHVwZGF0
ZSByZXBhaW50VG9wLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50TG9n
aWNhbEJvdHRvbSA9IG1heChyZXBhaW50TG9naWNhbEJvdHRvbSwgbGluZUJveC0+bG9naWNhbEJv
dHRvbVZpc3VhbE92ZXJmbG93KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9y
TGluZShvbGRMb2dpY2FsSGVpZ2h0ICsgYWRqdXN0bWVudCwgZmlyc3RMaW5lKSAhPSBvbGRMaW5l
V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBk
ZWxldGUgdGhpcyBsaW5lLCByZW1vdmUgYWxsIGZsb2F0cyB0aGF0IGdvdCBhZGRlZCwgYW5kIGxl
dCBsaW5lIGxheW91dCByZS1ydW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmVCb3gtPmRlbGV0ZUxpbmUocmVuZGVyQXJlbmEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlbW92ZUZsb2F0aW5nT2JqZWN0c0JlbG93KGxhc3RGbG9hdEZyb21QcmV2aW91
c0xpbmUsIG9sZExvZ2ljYWxIZWlnaHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZXRMb2dpY2FsSGVpZ2h0KG9sZExvZ2ljYWxIZWlnaHQgKyBhZGp1c3RtZW50KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRpb24ob2xkRW5kKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gb2xkRW5kOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxp
bmVCb3gtPmJsb2NrTG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9zaXRpb25lZE9iamVjdHMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICAgICAgICAgIHNldFN0YXRpY1Bvc2l0aW9ucyh0aGlzLCBwb3NpdGlvbmVk
T2JqZWN0c1tpXSk7Ci0KLSAgICAgICAgICAgICAgICBmaXJzdExpbmUgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICBuZXdMaW5lKGNsZWFyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKG1fZmxvYXRpbmdPYmplY3RzICYmIGxhc3RSb290Qm94KCkpIHsKLSAgICAgICAgICAgICAg
ICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0
cy0+c2V0KCk7Ci0gICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9
IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgRmxvYXRpbmdPYmpl
Y3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKLSAgICAgICAgICAg
ICAgICBpZiAobGFzdEZsb2F0KSB7Ci0gICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgbGFzdEZsb2F0SXRlcmF0b3IgPSBmbG9hdGluZ09iamVjdFNldC5maW5kKGxh
c3RGbG9hdCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChsYXN0RmxvYXRJdGVyYXRvciAh
PSBlbmQpOwotICAgICAgICAgICAgICAgICAgICArK2xhc3RGbG9hdEl0ZXJhdG9yOwotICAgICAg
ICAgICAgICAgICAgICBpdCA9IGxhc3RGbG9hdEl0ZXJhdG9yOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwotICAgICAgICAgICAgICAgICAgICBhcHBl
bmRGbG9hdGluZ09iamVjdFRvTGFzdExpbmUoZik7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VS
VChmLT5tX3JlbmRlcmVyID09IGZsb2F0c1tmbG9hdEluZGV4XS5vYmplY3QpOwotICAgICAgICAg
ICAgICAgICAgICAvLyBJZiBhIGZsb2F0J3MgZ2VvbWV0cnkgaGFzIGNoYW5nZWQsIGdpdmUgdXAg
b24gc3luY2luZyB3aXRoIGNsZWFuIGxpbmVzLgotICAgICAgICAgICAgICAgICAgICBpZiAoZmxv
YXRzW2Zsb2F0SW5kZXhdLnJlY3QgIT0gZi0+ZnJhbWVSZWN0KCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjaGVja0ZvckVuZExpbmVNYXRjaCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICBmbG9hdEluZGV4Kys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxhc3RG
bG9hdCA9ICFmbG9hdGluZ09iamVjdFNldC5pc0VtcHR5KCkgPyBmbG9hdGluZ09iamVjdFNldC5s
YXN0KCkgOiAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBsaW5lTWlkcG9pbnRTdGF0
ZS5yZXNldCgpOwotICAgICAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRpb24oZW5kKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChlbmRMaW5lKSB7Ci0gICAgICAgICAgICBpZiAoZW5kTGluZU1h
dGNoZWQpIHsKLSAgICAgICAgICAgICAgICAvLyBBdHRhY2ggYWxsIHRoZSByZW1haW5pbmcgbGlu
ZXMsIGFuZCB0aGVuIGFkanVzdCB0aGVpciB5LXBvc2l0aW9ucyBhcyBuZWVkZWQuCi0gICAgICAg
ICAgICAgICAgaW50IGRlbHRhID0gbG9naWNhbEhlaWdodCgpIC0gZW5kTGluZUxvZ2ljYWxUb3A7
Ci0gICAgICAgICAgICAgICAgZm9yIChSb290SW5saW5lQm94KiBsaW5lID0gZW5kTGluZTsgbGlu
ZTsgbGluZSA9IGxpbmUtPm5leHRSb290Qm94KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbGlu
ZS0+YXR0YWNoTGluZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAocGFnaW5hdGVkKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZWx0YSAtPSBsaW5lLT5wYWdpbmF0aW9uU3RydXQoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24o
bGluZSwgZGVsdGEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChkZWx0YSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwYWludExvZ2ljYWxUb3Ag
PSBtaW4ocmVwYWludExvZ2ljYWxUb3AsIGxpbmUtPmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdygp
ICsgbWluKGRlbHRhLCAwKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50TG9naWNh
bEJvdHRvbSA9IG1heChyZXBhaW50TG9naWNhbEJvdHRvbSwgbGluZS0+bG9naWNhbEJvdHRvbVZp
c3VhbE92ZXJmbG93KCkgKyBtYXgoZGVsdGEsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmUtPmFkanVzdEJsb2NrRGlyZWN0aW9uUG9zaXRpb24oZGVsdGEpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChWZWN0b3I8UmVuZGVyQm94Kj4qIGNs
ZWFuTGluZUZsb2F0cyA9IGxpbmUtPmZsb2F0c1B0cigpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8UmVuZGVyQm94Kj46Oml0ZXJhdG9yIGVuZCA9IGNsZWFuTGluZUZsb2F0cy0+
ZW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFZlY3RvcjxSZW5kZXJCb3gqPjo6
aXRlcmF0b3IgZiA9IGNsZWFuTGluZUZsb2F0cy0+YmVnaW4oKTsgZiAhPSBlbmQ7ICsrZikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEZsb2F0aW5nT2JqZWN0KCpmKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxUb3BGb3JD
aGlsZCgqZikgLSBtYXJnaW5CZWZvcmVGb3JDaGlsZCgqZikgKyBkZWx0YSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcG9zaXRpb25OZXdGbG9hdHMoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxhc3RSb290Qm94KCktPmJsb2NrTG9naWNhbEhl
aWdodCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRGVsZXRl
IGFsbCB0aGUgcmVtYWluaW5nIGxpbmVzLgotICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gq
IGxpbmUgPSBlbmRMaW5lOwotICAgICAgICAgICAgICAgIFJlbmRlckFyZW5hKiBhcmVuYSA9IHJl
bmRlckFyZW5hKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGxpbmUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmVwYWludExvZ2ljYWxUb3AgPSBtaW4ocmVwYWludExvZ2ljYWxUb3AsIGxpbmUt
PmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdygpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVwYWlu
dExvZ2ljYWxCb3R0b20gPSBtYXgocmVwYWludExvZ2ljYWxCb3R0b20sIGxpbmUtPmxvZ2ljYWxC
b3R0b21WaXN1YWxPdmVyZmxvdygpKTsKLSAgICAgICAgICAgICAgICAgICAgUm9vdElubGluZUJv
eCogbmV4dCA9IGxpbmUtPm5leHRSb290Qm94KCk7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUt
PmRlbGV0ZUxpbmUoYXJlbmEpOwotICAgICAgICAgICAgICAgICAgICBsaW5lID0gbmV4dDsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1f
ZmxvYXRpbmdPYmplY3RzICYmIChjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSB8fCBwb3NpdGlv
bk5ld0Zsb2F0cygpKSAmJiBsYXN0Um9vdEJveCgpKSB7Ci0gICAgICAgICAgICAvLyBJbiBjYXNl
IHdlIGhhdmUgYSBmbG9hdCBvbiB0aGUgbGFzdCBsaW5lLCBpdCBtaWdodCBub3QgYmUgcG9zaXRp
b25lZCB1cCB0byBub3cuCi0gICAgICAgICAgICAvLyBUaGlzIGhhcyB0byBiZSBkb25lIGJlZm9y
ZSBhZGRpbmcgaW4gdGhlIGJvdHRvbSBib3JkZXIvcGFkZGluZywgb3IgdGhlIGZsb2F0IHdpbGwK
LSAgICAgICAgICAgIC8vIGluY2x1ZGUgdGhlIHBhZGRpbmcgaW5jb3JyZWN0bHkuIC1kd2gKLSAg
ICAgICAgICAgIGlmIChjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSkgewotICAgICAgICAgICAg
ICAgIGludCBib3R0b21WaXN1YWxPdmVyZmxvdyA9IGxhc3RSb290Qm94KCktPmxvZ2ljYWxCb3R0
b21WaXN1YWxPdmVyZmxvdygpOwotICAgICAgICAgICAgICAgIGludCBib3R0b21MYXlvdXRPdmVy
ZmxvdyA9IGxhc3RSb290Qm94KCktPmxvZ2ljYWxCb3R0b21MYXlvdXRPdmVyZmxvdygpOwotICAg
ICAgICAgICAgICAgIFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveCogdHJhaWxpbmdGbG9hdHNM
aW5lQm94ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3go
dGhpcyk7Ci0gICAgICAgICAgICAgICAgbV9saW5lQm94ZXMuYXBwZW5kTGluZUJveCh0cmFpbGlu
Z0Zsb2F0c0xpbmVCb3gpOwotICAgICAgICAgICAgICAgIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+
c2V0Q29uc3RydWN0ZWQoKTsKLSAgICAgICAgICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJh
Y2tGb250c01hcCB0ZXh0Qm94RGF0YU1hcDsKLSAgICAgICAgICAgICAgICBWZXJ0aWNhbFBvc2l0
aW9uQ2FjaGUgdmVydGljYWxQb3NpdGlvbkNhY2hlOwotICAgICAgICAgICAgICAgIHRyYWlsaW5n
RmxvYXRzTGluZUJveC0+YWxpZ25Cb3hlc0luQmxvY2tEaXJlY3Rpb24obG9naWNhbEhlaWdodCgp
LCB0ZXh0Qm94RGF0YU1hcCwgdmVydGljYWxQb3NpdGlvbkNhY2hlKTsKLSAgICAgICAgICAgICAg
ICBpbnQgYmxvY2tMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAg
ICAgIEludFJlY3QgbG9naWNhbExheW91dE92ZXJmbG93KDAsIGJsb2NrTG9naWNhbEhlaWdodCwg
MSwgYm90dG9tTGF5b3V0T3ZlcmZsb3cgLSBibG9ja0xvZ2ljYWxIZWlnaHQpOwotICAgICAgICAg
ICAgICAgIEludFJlY3QgbG9naWNhbFZpc3VhbE92ZXJmbG93KDAsIGJsb2NrTG9naWNhbEhlaWdo
dCwgMSwgYm90dG9tVmlzdWFsT3ZlcmZsb3cgLSBibG9ja0xvZ2ljYWxIZWlnaHQpOwotICAgICAg
ICAgICAgICAgIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+c2V0T3ZlcmZsb3dGcm9tTG9naWNhbFJl
Y3RzKGxvZ2ljYWxMYXlvdXRPdmVyZmxvdywgbG9naWNhbFZpc3VhbE92ZXJmbG93LCB0cmFpbGlu
Z0Zsb2F0c0xpbmVCb3gtPmxpbmVUb3AoKSwgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5saW5lQm90
dG9tKCkpOwotICAgICAgICAgICAgICAgIHRyYWlsaW5nRmxvYXRzTGluZUJveC0+c2V0QmxvY2tM
b2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5zZXQoKTsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBm
bG9hdGluZ09iamVjdFNldC5iZWdpbigpOwotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKLSAgICAgICAgICAgIGlmIChs
YXN0RmxvYXQpIHsKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGxh
c3RGbG9hdEl0ZXJhdG9yID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZChsYXN0RmxvYXQpOwotICAg
ICAgICAgICAgICAgIEFTU0VSVChsYXN0RmxvYXRJdGVyYXRvciAhPSBlbmQpOwotICAgICAgICAg
ICAgICAgICsrbGFzdEZsb2F0SXRlcmF0b3I7Ci0gICAgICAgICAgICAgICAgaXQgPSBsYXN0Rmxv
YXRJdGVyYXRvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgICAgICAgICAgYXBwZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RMaW5lKCpp
dCk7Ci0gICAgICAgICAgICBsYXN0RmxvYXQgPSAhZmxvYXRpbmdPYmplY3RTZXQuaXNFbXB0eSgp
ID8gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpIDogMDsKLSAgICAgICAgfQotICAgICAgICBzaXpl
X3QgZmxvYXRDb3VudCA9IGZsb2F0cy5zaXplKCk7Ci0gICAgICAgIC8vIEZsb2F0cyB0aGF0IGRp
ZCBub3QgaGF2ZSBsYXlvdXQgZGlkIG5vdCByZXBhaW50IHdoZW4gd2UgbGFpZCB0aGVtIG91dC4g
VGhleSB3b3VsZCBoYXZlCi0gICAgICAgIC8vIHBhaW50ZWQgYnkgbm93IGlmIHRoZXkgaGFkIG1v
dmVkLCBidXQgaWYgdGhleSBzdGF5ZWQgYXQgKDAsIDApLCB0aGV5IHN0aWxsIG5lZWQgdG8gYmUK
LSAgICAgICAgLy8gcGFpbnRlZC4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmbG9h
dENvdW50OyArK2kpIHsKLSAgICAgICAgICAgIGlmICghZmxvYXRzW2ldLmV2ZXJIYWRMYXlvdXQp
IHsKLSAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIGYgPSBmbG9hdHNbaV0ub2JqZWN0OwotICAg
ICAgICAgICAgICAgIGlmICghZi0+eCgpICYmICFmLT55KCkgJiYgZi0+Y2hlY2tGb3JSZXBhaW50
RHVyaW5nTGF5b3V0KCkpCi0gICAgICAgICAgICAgICAgICAgIGYtPnJlcGFpbnQoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBsYXlvdXRSdW5zQW5kRmxvYXRzKGZ1bGxMYXlv
dXQsIGhhc0lubGluZUNoaWxkLCBmbG9hdHMsIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9n
aWNhbEJvdHRvbSk7CiAgICAgfQogCiAgICAgLy8gRXhwYW5kIHRoZSBsYXN0IGxpbmUgdG8gYWNj
b21tb2RhdGUgUnVieSBhbmQgZW1waGFzaXMgbWFya3MuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92135</attachid>
            <date>2011-05-03 14:47:44 -0700</date>
            <delta_ts>2011-05-03 14:47:44 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-60052-20110503144743.patch</filename>
            <type>text/plain</type>
            <size>61031</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU2NTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1ZTQ1ZTFmODM3ZDFjODhi
MWM5NzBhMjhiYzFmZDI5NmZiYTQ2Yzc4Li43YTNjODAwMjYzYTZkMDZmMzIzMDA2MWFlYjI4NDBk
MGY1MjY4ZTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDUtMDMgIEVyaWMg
U2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2Ug
Tml3YS4KKworICAgICAgICBTcGxpdCBvdXQgbGF5b3V0UnVuc0FuZEZsb2F0cyBmcm9tIGxheW91
dElubGluZUNoaWxkcmVuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02MDA1MgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywganVzdCBtb3ZpbmcgY29kZSBo
ZXJlLiAgVGhlcmUgc2hvdWxkIGJlCisgICAgICAgIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmxheW91dFJ1bnNBbmRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omxh
eW91dElubGluZUNoaWxkcmVuKToKKwogMjAxMS0wNS0wMyAgQWRhbSBSb2JlbiAgPGFyb2JlbkBh
cHBsZS5jb20+CiAKICAgICAgICAgRml4IG1vc3Qgc3RyaWN0IFBhc3NPd25QdHIgdmlvbGF0aW9u
cyBvbiBXaW5kb3dzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4IGZl
NmNmOTY4MmQ5YTk3NzJhNGMwMjFlYzJkNTY4YjZiYzZjMzc1OGIuLmNkMzdkMGU0ZTQxZTFkZmFi
ZTQwNDEzMDgwMDdkNzllNTQ2ZjkyYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5oCkBAIC03MDEsNiArNzAxLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldENvbGxhcHNl
ZEJvdHRvbU1hcmdpbihjb25zdCBNYXJnaW5JbmZvJik7CiAgICAgLy8gRW5kIGhlbHBlciBmdW5j
dGlvbnMgYW5kIHN0cnVjdHMgdXNlZCBieSBsYXlvdXRCbG9ja0NoaWxkcmVuLgogCisgICAgLy8g
SGVscGVyIGZ1bmN0aW9uIGZvciBsYXlvdXRJbmxpbmVDaGlsZHJlbigpCisgICAgdm9pZCBsYXlv
dXRSdW5zQW5kRmxvYXRzKGJvb2wgZnVsbExheW91dCwgYm9vbCBoYXNJbmxpbmVDaGlsZCwgVmVj
dG9yPEZsb2F0V2l0aFJlY3Q+JiwgaW50JiByZXBhaW50TG9naWNhbFRvcCwgaW50JiByZXBhaW50
TG9naWNhbEJvdHRvbSk7CisKICAgICAvLyBQYWdpbmF0aW9uIHJvdXRpbmVzLgogICAgIGludCBu
ZXh0UGFnZUxvZ2ljYWxUb3AoaW50IGxvZ2ljYWxPZmZzZXQpIGNvbnN0OyAvLyBSZXR1cm5zIHRo
ZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBmb2xsb3dpbmcgbG9naWNhbE9mZnNldC4KICAgICBpbnQg
YXBwbHlCZWZvcmVCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBpbnQgbG9naWNhbE9mZnNldCk7IC8v
IElmIHRoZSBjaGlsZCBoYXMgYSBiZWZvcmUgYnJlYWssIHRoZW4gcmV0dXJuIGEgbmV3IHlQb3Mg
dGhhdCBzaGlmdHMgdG8gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlL2NvbHVtbi4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXgg
YTdlMTNlM2IyMmUwODY1OGVkODRkN2M2ODU4MjUxNDQzZmY5OGQ0MC4uMzRmMjFiMDBkYjRkMDI1
MTFjYjk4YmM3ZTFlZDJlMDE5Y2EzYmYzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAvLyBXZSBkb24ndCBsZXQgb3VyIGxpbmUgYm94IHRyZWUgZm9yIGEg
c2luZ2xlIGxpbmUgZ2V0IGFueSBkZWVwZXIgdGhhbiB0aGlzLgogY29uc3QgdW5zaWduZWQgY01h
eExpbmVEZXB0aCA9IDIwMDsKLSAgICAKKwogY2xhc3MgTGluZUluZm8gewogcHVibGljOgogICAg
IExpbmVJbmZvKCkKQEAgLTEzMSw3ICsxMzEsNyBAQCBzdGF0aWMgdm9pZCBjaGVja01pZHBvaW50
cyhMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50U3RhdGUsIElubGluZUl0ZXJhdG9yJgog
ICAgICAgICAgICAgaWYgKGVuZHBvaW50Lm1fb2JqLT5zdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3Bh
Y2UoKSkKICAgICAgICAgICAgICAgICBlbmRwb2ludC5tX3Bvcy0tOwogICAgICAgICB9Ci0gICAg
fSAgICAKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIGFkZE1pZHBvaW50KExpbmVNaWRwb2ludFN0
YXRlJiBsaW5lTWlkcG9pbnRTdGF0ZSwgY29uc3QgSW5saW5lSXRlcmF0b3ImIG1pZHBvaW50KQpA
QCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFwcGVuZFJ1bnNGb3JPYmplY3Qo
QmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIHJ1bnMsIGludCBzdGFydCwgaW50CiAgICAgaWYgKGxpbmVN
aWRwb2ludFN0YXRlLmJldHdlZW5NaWRwb2ludHMpIHsKICAgICAgICAgaWYgKCEoaGF2ZU5leHRN
aWRwb2ludCAmJiBuZXh0TWlkcG9pbnQubV9vYmogPT0gb2JqKSkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBzdGFydCBwb2ludC4gU3RvcCBpZ25vcmluZyBv
YmplY3RzIGFuZCAKKyAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBzdGFydCBwb2ludC4gU3RvcCBp
Z25vcmluZyBvYmplY3RzIGFuZAogICAgICAgICAvLyBhZGp1c3Qgb3VyIHN0YXJ0LgogICAgICAg
ICBsaW5lTWlkcG9pbnRTdGF0ZS5iZXR3ZWVuTWlkcG9pbnRzID0gZmFsc2U7CiAgICAgICAgIHN0
YXJ0ID0gbmV4dE1pZHBvaW50Lm1fcG9zOwpAQCAtMTk0LDcgKzE5NCw3IEBAIHN0YXRpYyBpbmxp
bmUgSW5saW5lQm94KiBjcmVhdGVJbmxpbmVCb3hGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIG9i
aiwgYm9vbCBpc1JvCiB7CiAgICAgaWYgKGlzUm9vdExpbmVCb3gpCiAgICAgICAgIHJldHVybiB0
b1JlbmRlckJsb2NrKG9iaiktPmNyZWF0ZUFuZEFwcGVuZFJvb3RJbmxpbmVCb3goKTsKLSAgICAK
KwogICAgIGlmIChvYmotPmlzVGV4dCgpKSB7CiAgICAgICAgIElubGluZVRleHRCb3gqIHRleHRC
b3ggPSB0b1JlbmRlclRleHQob2JqKS0+Y3JlYXRlSW5saW5lVGV4dEJveCgpOwogICAgICAgICAv
LyBXZSBvbmx5IHRyZWF0IGEgYm94IGFzIHRleHQgZm9yIGEgPGJyPiBpZiB3ZSBhcmUgb24gYSBs
aW5lIGJ5IG91cnNlbGYgb3IgaW4gc3RyaWN0IG1vZGUKQEAgLTIwMywxMCArMjAzLDEwIEBAIHN0
YXRpYyBpbmxpbmUgSW5saW5lQm94KiBjcmVhdGVJbmxpbmVCb3hGb3JSZW5kZXJlcihSZW5kZXJP
YmplY3QqIG9iaiwgYm9vbCBpc1JvCiAgICAgICAgICAgICB0ZXh0Qm94LT5zZXRJc1RleHQoaXNP
bmx5UnVuIHx8IG9iai0+ZG9jdW1lbnQoKS0+aW5Ob1F1aXJrc01vZGUoKSk7CiAgICAgICAgIHJl
dHVybiB0ZXh0Qm94OwogICAgIH0KLSAgICAKKwogICAgIGlmIChvYmotPmlzQm94KCkpCiAgICAg
ICAgIHJldHVybiB0b1JlbmRlckJveChvYmopLT5jcmVhdGVJbmxpbmVCb3goKTsKLSAgICAKKwog
ICAgIHJldHVybiB0b1JlbmRlcklubGluZShvYmopLT5jcmVhdGVBbmRBcHBlbmRJbmxpbmVGbG93
Qm94KCk7CiB9CiAKQEAgLTI0MCw3ICsyNDAsNyBAQCBJbmxpbmVGbG93Qm94KiBSZW5kZXJCbG9j
azo6Y3JlYXRlTGluZUJveGVzKFJlbmRlck9iamVjdCogb2JqLCBjb25zdCBMaW5lSW5mbyYgbAog
ICAgIGJvb2wgaGFzRGVmYXVsdExpbmVCb3hDb250YWluID0gc3R5bGUoKS0+bGluZUJveENvbnRh
aW4oKSA9PSBSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVCb3hDb250YWluKCk7CiAgICAgZG8gewog
ICAgICAgICBBU1NFUlQob2JqLT5pc1JlbmRlcklubGluZSgpIHx8IG9iaiA9PSB0aGlzKTsKLSAg
ICAgICAgCisKICAgICAgICAgUmVuZGVySW5saW5lKiBpbmxpbmVGbG93ID0gKG9iaiAhPSB0aGlz
KSA/IHRvUmVuZGVySW5saW5lKG9iaikgOiAwOwogCiAgICAgICAgIC8vIEdldCB0aGUgbGFzdCBi
b3ggd2UgbWFkZSBmb3IgdGhpcyByZW5kZXIgb2JqZWN0LgpAQCAtMjgwLDcgKzI4MCw3IEBAIElu
bGluZUZsb3dCb3gqIFJlbmRlckJsb2NrOjpjcmVhdGVMaW5lQm94ZXMoUmVuZGVyT2JqZWN0KiBv
YmosIGNvbnN0IExpbmVJbmZvJiBsCiAgICAgICAgICAgICBpZiAoIWNvbnN0cnVjdGVkTmV3Qm94
IHx8IG9iaiA9PSB0aGlzKQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBj
aGlsZEJveCA9IHBhcmVudEJveDsgICAgICAgIAorICAgICAgICAgICAgY2hpbGRCb3ggPSBwYXJl
bnRCb3g7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiB3ZSd2ZSBleGNlZWRlZCBvdXIgbGlu
ZSBkZXB0aCwgdGhlbiBqdW1wIHN0cmFpZ2h0IHRvIHRoZSByb290IGFuZCBza2lwIGFsbCB0aGUg
cmVtYWluaW5nCkBAIC00NzYsMTEgKzQ3NiwxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRl
SW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZShSb290SW5saW5lQm94KiBsaW5lQm94LAog
ICAgICAgICAgICAgaWYgKGludCBsZW5ndGggPSBydC0+dGV4dExlbmd0aCgpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKCFyLT5tX3N0YXJ0ICYmIG5lZWRzV29yZFNwYWNpbmcgJiYgaXNTcGFjZU9y
TmV3bGluZShydC0+Y2hhcmFjdGVycygpW3ItPm1fc3RhcnRdKSkKICAgICAgICAgICAgICAgICAg
ICAgdG90YWxMb2dpY2FsV2lkdGggKz0gcnQtPnN0eWxlKGxpbmVJbmZvLmlzRmlyc3RMaW5lKCkp
LT5mb250KCkud29yZFNwYWNpbmcoKTsKLSAgICAgICAgICAgICAgICBuZWVkc1dvcmRTcGFjaW5n
ID0gIWlzU3BhY2VPck5ld2xpbmUocnQtPmNoYXJhY3RlcnMoKVtyLT5tX3N0b3AgLSAxXSkgJiYg
ci0+bV9zdG9wID09IGxlbmd0aDsgICAgICAgICAgCisgICAgICAgICAgICAgICAgbmVlZHNXb3Jk
U3BhY2luZyA9ICFpc1NwYWNlT3JOZXdsaW5lKHJ0LT5jaGFyYWN0ZXJzKClbci0+bV9zdG9wIC0g
MV0pICYmIHItPm1fc3RvcCA9PSBsZW5ndGg7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gZmFsbGJhY2tGb250czsKICAgICAgICAgICAg
IEdseXBoT3ZlcmZsb3cgZ2x5cGhPdmVyZmxvdzsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAg
ICAvLyBBbHdheXMgY29tcHV0ZSBnbHlwaCBvdmVyZmxvdyBpZiB0aGUgYmxvY2sncyBsaW5lLWJv
eC1jb250YWluIHZhbHVlIGlzICJnbHlwaHMiLgogICAgICAgICAgICAgaWYgKGxpbmVCb3gtPmZp
dHNUb0dseXBocygpKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZG9uJ3Qgc3RpY2sgb3V0
IG9mIHRoZSByb290IGxpbmUncyBmb250IGJveCwgdGhlbiBkb24ndCBib3RoZXIgY29tcHV0aW5n
IG91ciBnbHlwaCBvdmVyZmxvdy4gVGhpcyBvcHRpbWl6YXRpb24KQEAgLTQ5Miw3ICs0OTIsNyBA
QCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yTGlu
ZShSb290SW5saW5lQm94KiBsaW5lQm94LAogICAgICAgICAgICAgICAgIGludCBib3hBc2NlbnQg
PSBydC0+c3R5bGUobGluZUluZm8uaXNGaXJzdExpbmUoKSktPmZvbnQoKS5mb250TWV0cmljcygp
LmFzY2VudCgpIC0gYmFzZWxpbmVTaGlmdDsKICAgICAgICAgICAgICAgICBpbnQgYm94RGVzY2Vu
dCA9IHJ0LT5zdHlsZShsaW5lSW5mby5pc0ZpcnN0TGluZSgpKS0+Zm9udCgpLmZvbnRNZXRyaWNz
KCkuZGVzY2VudCgpICsgYmFzZWxpbmVTaGlmdDsKICAgICAgICAgICAgICAgICBpZiAoYm94QXNj
ZW50ID4gcm9vdERlc2NlbnQgfHwgIGJveERlc2NlbnQgPiByb290QXNjZW50KQotICAgICAgICAg
ICAgICAgICAgICBnbHlwaE92ZXJmbG93LmNvbXB1dGVCb3VuZHMgPSB0cnVlOyAKKyAgICAgICAg
ICAgICAgICAgICAgZ2x5cGhPdmVyZmxvdy5jb21wdXRlQm91bmRzID0gdHJ1ZTsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgaW50IGh5cGhlbldpZHRoID0gMDsKQEAgLTc1MSwzNjEgKzc1
MSwyMjEgQEAgdm9pZCBSZW5kZXJCbG9jazo6YXBwZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RMaW5l
KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKICAgICBsYXN0Um9vdEJveCgpLT5hcHBl
bmRGbG9hdChmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKSk7CiB9CiAKLXZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50JiByZXBh
aW50TG9naWNhbFRvcCwgaW50JiByZXBhaW50TG9naWNhbEJvdHRvbSkKK3ZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dFJ1bnNBbmRGbG9hdHMoYm9vbCBmdWxsTGF5b3V0LCBib29sIGhhc0lubGluZUNo
aWxkLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgaW50JiByZXBhaW50TG9naWNhbFRv
cCwgaW50JiByZXBhaW50TG9naWNhbEJvdHRvbSkKIHsKKyAgICAvLyBXZSB3YW50IHRvIHNraXAg
YWhlYWQgdG8gdGhlIGZpcnN0IGRpcnR5IGxpbmUKKyAgICBJbmxpbmVCaWRpUmVzb2x2ZXIgcmVz
b2x2ZXI7CisgICAgdW5zaWduZWQgZmxvYXRJbmRleDsKKyAgICBMaW5lSW5mbyBsaW5lSW5mbzsK
ICAgICBib29sIHVzZVJlcGFpbnRCb3VuZHMgPSBmYWxzZTsKLSAgICAKLSAgICBtX292ZXJmbG93
LmNsZWFyKCk7Ci0gICAgICAgIAotICAgIHNldExvZ2ljYWxIZWlnaHQoYm9yZGVyQmVmb3JlKCkg
KyBwYWRkaW5nQmVmb3JlKCkpOwogCi0gICAgLy8gRmlndXJlIG91dCBpZiB3ZSBzaG91bGQgY2xl
YXIgb3V0IG91ciBsaW5lIGJveGVzLgotICAgIC8vIEZJWE1FOiBIYW5kbGUgcmVzaXplIGV2ZW50
dWFsbHkhCi0gICAgYm9vbCBmdWxsTGF5b3V0ID0gIWZpcnN0TGluZUJveCgpIHx8IHNlbGZOZWVk
c0xheW91dCgpIHx8IHJlbGF5b3V0Q2hpbGRyZW47Ci0gICAgaWYgKGZ1bGxMYXlvdXQpCi0gICAg
ICAgIGxpbmVCb3hlcygpLT5kZWxldGVMaW5lQm94ZXMocmVuZGVyQXJlbmEoKSk7Ci0KLSAgICAv
LyBUZXh0IHRydW5jYXRpb24gb25seSBraWNrcyBpbiBpZiB5b3VyIG92ZXJmbG93IGlzbid0IHZp
c2libGUgYW5kIHlvdXIgdGV4dC1vdmVyZmxvdy1tb2RlIGlzbid0Ci0gICAgLy8gY2xpcC4KLSAg
ICAvLyBGSVhNRTogQ1NTMyBzYXlzIHRoYXQgZGVzY2VuZGFudHMgdGhhdCBhcmUgY2xpcHBlZCBt
dXN0IGFsc28ga25vdyBob3cgdG8gdHJ1bmNhdGUuICBUaGlzIGlzIGluc2FuZWx5Ci0gICAgLy8g
ZGlmZmljdWx0IHRvIGZpZ3VyZSBvdXQgKGVzcGVjaWFsbHkgaW4gdGhlIG1pZGRsZSBvZiBkb2lu
ZyBsYXlvdXQpLCBhbmQgaXMgcmVhbGx5IGFuIGVzb3RlcmljIHBpbGUgb2Ygbm9uc2Vuc2UKLSAg
ICAvLyBhbnl3YXksIHNvIHdlIHdvbid0IHdvcnJ5IGFib3V0IGZvbGxvd2luZyB0aGUgZHJhZnQg
aGVyZS4KLSAgICBib29sIGhhc1RleHRPdmVyZmxvdyA9IHN0eWxlKCktPnRleHRPdmVyZmxvdygp
ICYmIGhhc092ZXJmbG93Q2xpcCgpOworICAgIFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSA9IGRl
dGVybWluZVN0YXJ0UG9zaXRpb24obGluZUluZm8sIGZ1bGxMYXlvdXQsIHJlc29sdmVyLCBmbG9h
dHMsIGZsb2F0SW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1c2VSZXBhaW50Qm91bmRzLCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWlu
dExvZ2ljYWxCb3R0b20pOworCisgICAgLy8gRklYTUU6IFRoaXMgd291bGQgbWFrZSBtb3JlIHNl
bnNlIG91dHNpZGUgb2YgdGhpcyBmdW5jdGlvbiwgYnV0IHNpbmNlCisgICAgLy8gZGV0ZXJtaW5l
U3RhcnRQb3NpdGlvbiBjYW4gY2hhbmdlIHRoZSBmdWxsTGF5b3V0IGZsYWcgd2UgaGF2ZSB0byBk
byB0aGlzIGhlcmUuIEZhaWx1cmUgdG8gY2FsbAorICAgIC8vIGRldGVybWluZVN0YXJ0UG9zaXRp
b24gZmlyc3Qgd2lsbCBicmVhayBmYXN0L3JlcGFpbnQvbGluZS1mbG93LXdpdGgtZmxvYXRzLTku
aHRtbC4KKyAgICBpZiAoZnVsbExheW91dCAmJiBoYXNJbmxpbmVDaGlsZCAmJiAhc2VsZk5lZWRz
TGF5b3V0KCkpIHsKKyAgICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOyAgLy8gTWFy
ayBvdXJzZWx2ZXMgYXMgbmVlZGluZyBhIGZ1bGwgbGF5b3V0LiBUaGlzIHdheSB3ZSdsbCByZXBh
aW50IGxpa2UKKyAgICAgICAgLy8gd2UncmUgc3VwcG9zZWQgdG8uCisgICAgICAgIFJlbmRlclZp
ZXcqIHYgPSB2aWV3KCk7CisgICAgICAgIGlmICh2ICYmICF2LT5kb2luZ0Z1bGxSZXBhaW50KCkg
JiYgaGFzTGF5ZXIoKSkgeworICAgICAgICAgICAgLy8gQmVjYXVzZSB3ZSB3YWl0ZWQgdW50aWwg
d2Ugd2VyZSBhbHJlYWR5IGluc2lkZSBsYXlvdXQgdG8gZGlzY292ZXIKKyAgICAgICAgICAgIC8v
IHRoYXQgdGhlIGJsb2NrIHJlYWxseSBuZWVkZWQgYSBmdWxsIGxheW91dCwgd2UgbWlzc2VkIG91
ciBjaGFuY2UgdG8gcmVwYWludCB0aGUgbGF5ZXIKKyAgICAgICAgICAgIC8vIGJlZm9yZSBsYXlv
dXQgc3RhcnRlZC4gIEx1Y2tpbHkgdGhlIGxheWVyIGhhcyBjYWNoZWQgdGhlIHJlcGFpbnQgcmVj
dCBmb3IgaXRzIG9yaWdpbmFsCisgICAgICAgICAgICAvLyBwb3NpdGlvbiBhbmQgc2l6ZSwgYW5k
IHNvIHdlIGNhbiB1c2UgdGhhdCB0byBtYWtlIGEgcmVwYWludCBoYXBwZW4gbm93LgorICAgICAg
ICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKGNvbnRhaW5lckZvclJlcGFpbnQoKSwgbGF5ZXIo
KS0+cmVwYWludFJlY3QoKSk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAvLyBXYWxrIGFsbCB0
aGUgbGluZXMgYW5kIGRlbGV0ZSBvdXIgZWxsaXBzaXMgbGluZSBib3hlcyBpZiB0aGV5IGV4aXN0
LgotICAgIGlmIChoYXNUZXh0T3ZlcmZsb3cpCi0gICAgICAgICBkZWxldGVFbGxpcHNpc0xpbmVC
b3hlcygpOworICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQgPSAobV9mbG9hdGluZ09iamVj
dHMgJiYgIW1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5pc0VtcHR5KCkpID8gbV9mbG9hdGluZ09i
amVjdHMtPnNldCgpLmxhc3QoKSA6IDA7CiAKLSAgICBpZiAoZmlyc3RDaGlsZCgpKSB7Ci0gICAg
ICAgIC8vIGxheW91dCByZXBsYWNlZCBlbGVtZW50cwotICAgICAgICBib29sIGVuZE9mSW5saW5l
ID0gZmFsc2U7Ci0gICAgICAgIFJlbmRlck9iamVjdCogbyA9IGJpZGlGaXJzdE5vdFNraXBwaW5n
SW5saW5lcyh0aGlzKTsKLSAgICAgICAgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+IGZsb2F0czsKLSAg
ICAgICAgYm9vbCBoYXNJbmxpbmVDaGlsZCA9IGZhbHNlOwotICAgICAgICB3aGlsZSAobykgewot
ICAgICAgICAgICAgaWYgKCFoYXNJbmxpbmVDaGlsZCAmJiBvLT5pc0lubGluZSgpKQotICAgICAg
ICAgICAgICAgIGhhc0lubGluZUNoaWxkID0gdHJ1ZTsKKyAgICBMaW5lTWlkcG9pbnRTdGF0ZSYg
bGluZU1pZHBvaW50U3RhdGUgPSByZXNvbHZlci5taWRwb2ludFN0YXRlKCk7CiAKLSAgICAgICAg
ICAgIGlmIChvLT5pc1JlcGxhY2VkKCkgfHwgby0+aXNGbG9hdGluZygpIHx8IG8tPmlzUG9zaXRp
b25lZCgpKSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChv
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAocmVsYXlvdXRDaGlsZHJl
biB8fCBvLT5zdHlsZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpIHx8IG8tPnN0eWxlKCktPmhlaWdo
dCgpLmlzUGVyY2VudCgpKQotICAgICAgICAgICAgICAgICAgICBvLT5zZXRDaGlsZE5lZWRzTGF5
b3V0KHRydWUsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Ly8gSWYgcmVsYXlvdXRDaGlsZHJlbiBpcyBzZXQgYW5kIHdlIGhhdmUgcGVyY2VudGFnZSBwYWRk
aW5nLCB3ZSBhbHNvIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgY2hpbGQncyBwcmVmIHdpZHRocy4K
LSAgICAgICAgICAgICAgICBpZiAocmVsYXlvdXRDaGlsZHJlbiAmJiAoby0+c3R5bGUoKS0+cGFk
ZGluZ1N0YXJ0KCkuaXNQZXJjZW50KCkgfHwgby0+c3R5bGUoKS0+cGFkZGluZ0VuZCgpLmlzUGVy
Y2VudCgpKSkKLSAgICAgICAgICAgICAgICAgICAgby0+c2V0UHJlZmVycmVkTG9naWNhbFdpZHRo
c0RpcnR5KHRydWUsIGZhbHNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChv
LT5pc1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgby0+Y29udGFpbmluZ0Jsb2Nr
KCktPmluc2VydFBvc2l0aW9uZWRPYmplY3QoYm94KTsKLSAgICAgICAgICAgICAgICBlbHNlIGlm
IChvLT5pc0Zsb2F0aW5nKCkpCi0gICAgICAgICAgICAgICAgICAgIGZsb2F0cy5hcHBlbmQoRmxv
YXRXaXRoUmVjdChib3gpKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChmdWxsTGF5b3V0IHx8
IG8tPm5lZWRzTGF5b3V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZWQgZWxl
bWVudHMKLSAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJCb3gobyktPmRpcnR5TGluZUJveGVz
KGZ1bGxMYXlvdXQpOwotICAgICAgICAgICAgICAgICAgICBvLT5sYXlvdXRJZk5lZWRlZCgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoby0+aXNUZXh0KCkgfHwg
KG8tPmlzUmVuZGVySW5saW5lKCkgJiYgIWVuZE9mSW5saW5lKSkgewotICAgICAgICAgICAgICAg
IGlmICghby0+aXNUZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHRvUmVuZGVySW5saW5lKG8p
LT51cGRhdGVBbHdheXNDcmVhdGVMaW5lQm94ZXMoKTsKLSAgICAgICAgICAgICAgICBpZiAoZnVs
bExheW91dCB8fCBvLT5zZWxmTmVlZHNMYXlvdXQoKSkKLSAgICAgICAgICAgICAgICAgICAgZGly
dHlMaW5lQm94ZXNGb3JSZW5kZXJlcihvLCBmdWxsTGF5b3V0KTsKLSAgICAgICAgICAgICAgICBv
LT5zZXROZWVkc0xheW91dChmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBvID0g
YmlkaU5leHQodGhpcywgbywgMCwgZmFsc2UsICZlbmRPZklubGluZSk7CisgICAgLy8gV2UgYWxz
byBmaW5kIHRoZSBmaXJzdCBjbGVhbiBsaW5lIGFuZCBleHRyYWN0IHRoZXNlIGxpbmVzLiAgV2Ug
d2lsbCBhZGQgdGhlbSBiYWNrCisgICAgLy8gaWYgd2UgZGV0ZXJtaW5lIHRoYXQgd2UncmUgYWJs
ZSB0byBzeW5jaHJvbml6ZSBhZnRlciBoYW5kbGluZyBhbGwgb3VyIGRpcnR5IGxpbmVzLgorICAg
IElubGluZUl0ZXJhdG9yIGNsZWFuTGluZVN0YXJ0OworICAgIEJpZGlTdGF0dXMgY2xlYW5MaW5l
QmlkaVN0YXR1czsKKyAgICBpbnQgZW5kTGluZUxvZ2ljYWxUb3AgPSAwOworICAgIFJvb3RJbmxp
bmVCb3gqIGVuZExpbmUgPSAoZnVsbExheW91dCB8fCAhc3RhcnRMaW5lKSA/CisgICAgICAgIDAg
OiBkZXRlcm1pbmVFbmRQb3NpdGlvbihzdGFydExpbmUsIGZsb2F0cywgZmxvYXRJbmRleCwgY2xl
YW5MaW5lU3RhcnQsIGNsZWFuTGluZUJpZGlTdGF0dXMsIGVuZExpbmVMb2dpY2FsVG9wKTsKKwor
ICAgIGlmIChzdGFydExpbmUpIHsKKyAgICAgICAgaWYgKCF1c2VSZXBhaW50Qm91bmRzKSB7Cisg
ICAgICAgICAgICB1c2VSZXBhaW50Qm91bmRzID0gdHJ1ZTsKKyAgICAgICAgICAgIHJlcGFpbnRM
b2dpY2FsVG9wID0gbG9naWNhbEhlaWdodCgpOworICAgICAgICAgICAgcmVwYWludExvZ2ljYWxC
b3R0b20gPSBsb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIH0KKyAgICAgICAgUmVuZGVyQXJlbmEq
IGFyZW5hID0gcmVuZGVyQXJlbmEoKTsKKyAgICAgICAgUm9vdElubGluZUJveCogYm94ID0gc3Rh
cnRMaW5lOworICAgICAgICB3aGlsZSAoYm94KSB7CisgICAgICAgICAgICByZXBhaW50TG9naWNh
bFRvcCA9IG1pbihyZXBhaW50TG9naWNhbFRvcCwgYm94LT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZs
b3coKSk7CisgICAgICAgICAgICByZXBhaW50TG9naWNhbEJvdHRvbSA9IG1heChyZXBhaW50TG9n
aWNhbEJvdHRvbSwgYm94LT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3coKSk7CisgICAgICAg
ICAgICBSb290SW5saW5lQm94KiBuZXh0ID0gYm94LT5uZXh0Um9vdEJveCgpOworICAgICAgICAg
ICAgYm94LT5kZWxldGVMaW5lKGFyZW5hKTsKKyAgICAgICAgICAgIGJveCA9IG5leHQ7CisgICAg
ICAgIH0KKyAgICB9CiAKLSAgICAgICAgLy8gV2Ugd2FudCB0byBza2lwIGFoZWFkIHRvIHRoZSBm
aXJzdCBkaXJ0eSBsaW5lCi0gICAgICAgIElubGluZUJpZGlSZXNvbHZlciByZXNvbHZlcjsKLSAg
ICAgICAgdW5zaWduZWQgZmxvYXRJbmRleDsKLSAgICAgICAgTGluZUluZm8gbGluZUluZm87Ci0g
ICAgICAgIFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSA9IGRldGVybWluZVN0YXJ0UG9zaXRpb24o
bGluZUluZm8sIGZ1bGxMYXlvdXQsIHJlc29sdmVyLCBmbG9hdHMsIGZsb2F0SW5kZXgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNl
UmVwYWludEJvdW5kcywgcmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsK
LQotICAgICAgICBpZiAoZnVsbExheW91dCAmJiBoYXNJbmxpbmVDaGlsZCAmJiAhc2VsZk5lZWRz
TGF5b3V0KCkpIHsKLSAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsgIC8v
IE1hcmsgb3Vyc2VsdmVzIGFzIG5lZWRpbmcgYSBmdWxsIGxheW91dC4gVGhpcyB3YXkgd2UnbGwg
cmVwYWludCBsaWtlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB3ZSdyZSBzdXBwb3NlZCB0by4KLSAgICAgICAgICAgIFJlbmRlclZpZXcqIHYgPSB2aWV3KCk7
Ci0gICAgICAgICAgICBpZiAodiAmJiAhdi0+ZG9pbmdGdWxsUmVwYWludCgpICYmIGhhc0xheWVy
KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIHdlIHdhaXRlZCB1bnRpbCB3ZSB3ZXJl
IGFscmVhZHkgaW5zaWRlIGxheW91dCB0byBkaXNjb3ZlcgotICAgICAgICAgICAgICAgIC8vIHRo
YXQgdGhlIGJsb2NrIHJlYWxseSBuZWVkZWQgYSBmdWxsIGxheW91dCwgd2UgbWlzc2VkIG91ciBj
aGFuY2UgdG8gcmVwYWludCB0aGUgbGF5ZXIKLSAgICAgICAgICAgICAgICAvLyBiZWZvcmUgbGF5
b3V0IHN0YXJ0ZWQuICBMdWNraWx5IHRoZSBsYXllciBoYXMgY2FjaGVkIHRoZSByZXBhaW50IHJl
Y3QgZm9yIGl0cyBvcmlnaW5hbAotICAgICAgICAgICAgICAgIC8vIHBvc2l0aW9uIGFuZCBzaXpl
LCBhbmQgc28gd2UgY2FuIHVzZSB0aGF0IHRvIG1ha2UgYSByZXBhaW50IGhhcHBlbiBub3cuCi0g
ICAgICAgICAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKGNvbnRhaW5lckZvclJlcGFpbnQo
KSwgbGF5ZXIoKS0+cmVwYWludFJlY3QoKSk7CisgICAgSW5saW5lSXRlcmF0b3IgZW5kID0gcmVz
b2x2ZXIucG9zaXRpb24oKTsKKworICAgIGlmICghZnVsbExheW91dCAmJiBsYXN0Um9vdEJveCgp
ICYmIGxhc3RSb290Qm94KCktPmVuZHNXaXRoQnJlYWsoKSkgeworICAgICAgICAvLyBJZiB0aGUg
bGFzdCBsaW5lIGJlZm9yZSB0aGUgc3RhcnQgbGluZSBlbmRzIHdpdGggYSBsaW5lIGJyZWFrIHRo
YXQgY2xlYXIgZmxvYXRzLAorICAgICAgICAvLyBhZGp1c3QgdGhlIGhlaWdodCBhY2NvcmRpbmds
eS4KKyAgICAgICAgLy8gQSBsaW5lIGJyZWFrIGNhbiBiZSBlaXRoZXIgdGhlIGZpcnN0IG9yIHRo
ZSBsYXN0IG9iamVjdCBvbiBhIGxpbmUsIGRlcGVuZGluZyBvbiBpdHMgZGlyZWN0aW9uLgorICAg
ICAgICBpZiAoSW5saW5lQm94KiBsYXN0TGVhZkNoaWxkID0gbGFzdFJvb3RCb3goKS0+bGFzdExl
YWZDaGlsZCgpKSB7CisgICAgICAgICAgICBSZW5kZXJPYmplY3QqIGxhc3RPYmplY3QgPSBsYXN0
TGVhZkNoaWxkLT5yZW5kZXJlcigpOworICAgICAgICAgICAgaWYgKCFsYXN0T2JqZWN0LT5pc0JS
KCkpCisgICAgICAgICAgICAgICAgbGFzdE9iamVjdCA9IGxhc3RSb290Qm94KCktPmZpcnN0TGVh
ZkNoaWxkKCktPnJlbmRlcmVyKCk7CisgICAgICAgICAgICBpZiAobGFzdE9iamVjdC0+aXNCUigp
KSB7CisgICAgICAgICAgICAgICAgRUNsZWFyIGNsZWFyID0gbGFzdE9iamVjdC0+c3R5bGUoKS0+
Y2xlYXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoY2xlYXIgIT0gQ05PTkUpCisgICAgICAgICAg
ICAgICAgICAgIG5ld0xpbmUoY2xlYXIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAg
fQogCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQgPSAobV9mbG9hdGluZ09iamVj
dHMgJiYgIW1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5pc0VtcHR5KCkpID8gbV9mbG9hdGluZ09i
amVjdHMtPnNldCgpLmxhc3QoKSA6IDA7CisgICAgYm9vbCBlbmRMaW5lTWF0Y2hlZCA9IGZhbHNl
OworICAgIGJvb2wgY2hlY2tGb3JFbmRMaW5lTWF0Y2ggPSBlbmRMaW5lOworICAgIGJvb2wgY2hl
Y2tGb3JGbG9hdHNGcm9tTGFzdExpbmUgPSBmYWxzZTsKIAotICAgICAgICBMaW5lTWlkcG9pbnRT
dGF0ZSYgbGluZU1pZHBvaW50U3RhdGUgPSByZXNvbHZlci5taWRwb2ludFN0YXRlKCk7CisgICAg
Ym9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCkgJiYgdmlldygpLT5sYXlvdXRT
dGF0ZSgpLT5pc1BhZ2luYXRlZCgpOwogCi0gICAgICAgIC8vIFdlIGFsc28gZmluZCB0aGUgZmly
c3QgY2xlYW4gbGluZSBhbmQgZXh0cmFjdCB0aGVzZSBsaW5lcy4gIFdlIHdpbGwgYWRkIHRoZW0g
YmFjawotICAgICAgICAvLyBpZiB3ZSBkZXRlcm1pbmUgdGhhdCB3ZSdyZSBhYmxlIHRvIHN5bmNo
cm9uaXplIGFmdGVyIGhhbmRsaW5nIGFsbCBvdXIgZGlydHkgbGluZXMuCi0gICAgICAgIElubGlu
ZUl0ZXJhdG9yIGNsZWFuTGluZVN0YXJ0OwotICAgICAgICBCaWRpU3RhdHVzIGNsZWFuTGluZUJp
ZGlTdGF0dXM7Ci0gICAgICAgIGludCBlbmRMaW5lTG9naWNhbFRvcCA9IDA7Ci0gICAgICAgIFJv
b3RJbmxpbmVCb3gqIGVuZExpbmUgPSAoZnVsbExheW91dCB8fCAhc3RhcnRMaW5lKSA/IAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IGRldGVybWluZUVuZFBvc2l0aW9uKHN0
YXJ0TGluZSwgZmxvYXRzLCBmbG9hdEluZGV4LCBjbGVhbkxpbmVTdGFydCwgY2xlYW5MaW5lQmlk
aVN0YXR1cywgZW5kTGluZUxvZ2ljYWxUb3ApOworICAgIExpbmVCcmVha0l0ZXJhdG9ySW5mbyBs
aW5lQnJlYWtJdGVyYXRvckluZm87CisgICAgVmVydGljYWxQb3NpdGlvbkNhY2hlIHZlcnRpY2Fs
UG9zaXRpb25DYWNoZTsKIAotICAgICAgICBpZiAoc3RhcnRMaW5lKSB7Ci0gICAgICAgICAgICBp
ZiAoIXVzZVJlcGFpbnRCb3VuZHMpIHsKLSAgICAgICAgICAgICAgICB1c2VSZXBhaW50Qm91bmRz
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXBhaW50TG9naWNhbFRvcCA9IGxvZ2ljYWxIZWln
aHQoKTsKLSAgICAgICAgICAgICAgICByZXBhaW50TG9naWNhbEJvdHRvbSA9IGxvZ2ljYWxIZWln
aHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlbmRlckFyZW5hKiBhcmVuYSA9IHJl
bmRlckFyZW5hKCk7Ci0gICAgICAgICAgICBSb290SW5saW5lQm94KiBib3ggPSBzdGFydExpbmU7
Ci0gICAgICAgICAgICB3aGlsZSAoYm94KSB7Ci0gICAgICAgICAgICAgICAgcmVwYWludExvZ2lj
YWxUb3AgPSBtaW4ocmVwYWludExvZ2ljYWxUb3AsIGJveC0+bG9naWNhbFRvcFZpc3VhbE92ZXJm
bG93KCkpOwotICAgICAgICAgICAgICAgIHJlcGFpbnRMb2dpY2FsQm90dG9tID0gbWF4KHJlcGFp
bnRMb2dpY2FsQm90dG9tLCBib3gtPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygpKTsKLSAg
ICAgICAgICAgICAgICBSb290SW5saW5lQm94KiBuZXh0ID0gYm94LT5uZXh0Um9vdEJveCgpOwot
ICAgICAgICAgICAgICAgIGJveC0+ZGVsZXRlTGluZShhcmVuYSk7Ci0gICAgICAgICAgICAgICAg
Ym94ID0gbmV4dDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIHdoaWxlICghZW5kLmF0
RW5kKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IElzIHRoaXMgY2hlY2sgbmVjZXNzYXJ5IGJlZm9y
ZSB0aGUgZmlyc3QgaXRlcmF0aW9uIG9yIGNhbiBpdCBiZSBtb3ZlZCB0byB0aGUgZW5kPworICAg
ICAgICBpZiAoY2hlY2tGb3JFbmRMaW5lTWF0Y2ggJiYgKGVuZExpbmVNYXRjaGVkID0gbWF0Y2hl
ZEVuZExpbmUocmVzb2x2ZXIsIGNsZWFuTGluZVN0YXJ0LCBjbGVhbkxpbmVCaWRpU3RhdHVzLCBl
bmRMaW5lLCBlbmRMaW5lTG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxCb3R0b20sIHJlcGFpbnRM
b2dpY2FsVG9wKSkpCisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBJbmxpbmVJdGVyYXRv
ciBlbmQgPSByZXNvbHZlci5wb3NpdGlvbigpOwotCi0gICAgICAgIGlmICghZnVsbExheW91dCAm
JiBsYXN0Um9vdEJveCgpICYmIGxhc3RSb290Qm94KCktPmVuZHNXaXRoQnJlYWsoKSkgewotICAg
ICAgICAgICAgLy8gSWYgdGhlIGxhc3QgbGluZSBiZWZvcmUgdGhlIHN0YXJ0IGxpbmUgZW5kcyB3
aXRoIGEgbGluZSBicmVhayB0aGF0IGNsZWFyIGZsb2F0cywKLSAgICAgICAgICAgIC8vIGFkanVz
dCB0aGUgaGVpZ2h0IGFjY29yZGluZ2x5LgotICAgICAgICAgICAgLy8gQSBsaW5lIGJyZWFrIGNh
biBiZSBlaXRoZXIgdGhlIGZpcnN0IG9yIHRoZSBsYXN0IG9iamVjdCBvbiBhIGxpbmUsIGRlcGVu
ZGluZyBvbiBpdHMgZGlyZWN0aW9uLgotICAgICAgICAgICAgaWYgKElubGluZUJveCogbGFzdExl
YWZDaGlsZCA9IGxhc3RSb290Qm94KCktPmxhc3RMZWFmQ2hpbGQoKSkgewotICAgICAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogbGFzdE9iamVjdCA9IGxhc3RMZWFmQ2hpbGQtPnJlbmRlcmVyKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFsYXN0T2JqZWN0LT5pc0JSKCkpCi0gICAgICAgICAgICAg
ICAgICAgIGxhc3RPYmplY3QgPSBsYXN0Um9vdEJveCgpLT5maXJzdExlYWZDaGlsZCgpLT5yZW5k
ZXJlcigpOwotICAgICAgICAgICAgICAgIGlmIChsYXN0T2JqZWN0LT5pc0JSKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgRUNsZWFyIGNsZWFyID0gbGFzdE9iamVjdC0+c3R5bGUoKS0+Y2xlYXIo
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNsZWFyICE9IENOT05FKQotICAgICAgICAgICAg
ICAgICAgICAgICAgbmV3TGluZShjbGVhcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9CisgICAgICAgIGxpbmVNaWRwb2ludFN0YXRlLnJlc2V0KCk7CiAKLSAg
ICAgICAgYm9vbCBlbmRMaW5lTWF0Y2hlZCA9IGZhbHNlOwotICAgICAgICBib29sIGNoZWNrRm9y
RW5kTGluZU1hdGNoID0gZW5kTGluZTsKLSAgICAgICAgYm9vbCBjaGVja0ZvckZsb2F0c0Zyb21M
YXN0TGluZSA9IGZhbHNlOworICAgICAgICBsaW5lSW5mby5zZXRFbXB0eSh0cnVlKTsKIAotICAg
ICAgICBib29sIHBhZ2luYXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKSAmJiB2aWV3KCktPmxh
eW91dFN0YXRlKCktPmlzUGFnaW5hdGVkKCk7CisgICAgICAgIEVDbGVhciBjbGVhciA9IENOT05F
OworICAgICAgICBib29sIGh5cGhlbmF0ZWQ7CisgICAgICAgIFZlY3RvcjxSZW5kZXJCb3gqPiBw
b3NpdGlvbmVkT2JqZWN0czsKIAotICAgICAgICBMaW5lQnJlYWtJdGVyYXRvckluZm8gbGluZUJy
ZWFrSXRlcmF0b3JJbmZvOwotICAgICAgICBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUgdmVydGljYWxQ
b3NpdGlvbkNhY2hlOworICAgICAgICBJbmxpbmVJdGVyYXRvciBvbGRFbmQgPSBlbmQ7CisgICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lID0gKG1fZmxvYXRp
bmdPYmplY3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuaXNFbXB0eSgpKSA/IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKS5sYXN0KCkgOiAwOworICAgICAgICBlbmQgPSBmaW5kTmV4dExp
bmVCcmVhayhyZXNvbHZlciwgbGluZUluZm8sIGxpbmVCcmVha0l0ZXJhdG9ySW5mbywgaHlwaGVu
YXRlZCwgJmNsZWFyLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBwb3NpdGlvbmVkT2JqZWN0
cyk7CisgICAgICAgIGlmIChyZXNvbHZlci5wb3NpdGlvbigpLmF0RW5kKCkpIHsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUgY3JlYXRpbmcgYW55IHJ1bnMgaW4gZmluZE5l
eHRMaW5lQnJlYWsgdG8gYmVnaW4gd2l0aCEKKyAgICAgICAgICAgIC8vIE9uY2UgQmlkaVJ1bkxp
c3QgaXMgc2VwYXJhdGVkIGZyb20gQmlkaVJlc29sdmVyIHRoaXMgd2lsbCBub3QgYmUgbmVlZGVk
LgorICAgICAgICAgICAgcmVzb2x2ZXIucnVucygpLmRlbGV0ZVJ1bnMoKTsKKyAgICAgICAgICAg
IHJlc29sdmVyLm1hcmtDdXJyZW50UnVuRW1wdHkoKTsgLy8gRklYTUU6IFRoaXMgY2FuIHByb2Jh
Ymx5IGJlIHJlcGxhY2VkIGJ5IGFuIEFTU0VSVCAob3IganVzdCByZW1vdmVkKS4KKyAgICAgICAg
ICAgIGNoZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIEFTU0VSVChlbmQgIT0gcmVzb2x2ZXIucG9zaXRpb24oKSk7
CiAKLSAgICAgICAgd2hpbGUgKCFlbmQuYXRFbmQoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6
IElzIHRoaXMgY2hlY2sgbmVjZXNzYXJ5IGJlZm9yZSB0aGUgZmlyc3QgaXRlcmF0aW9uIG9yIGNh
biBpdCBiZSBtb3ZlZCB0byB0aGUgZW5kPwotICAgICAgICAgICAgaWYgKGNoZWNrRm9yRW5kTGlu
ZU1hdGNoICYmIChlbmRMaW5lTWF0Y2hlZCA9IG1hdGNoZWRFbmRMaW5lKHJlc29sdmVyLCBjbGVh
bkxpbmVTdGFydCwgY2xlYW5MaW5lQmlkaVN0YXR1cywgZW5kTGluZSwgZW5kTGluZUxvZ2ljYWxU
b3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tLCByZXBhaW50TG9naWNhbFRvcCkpKQotICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBpZiAobGluZUluZm8uaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBpZiAobGFzdFJvb3RCb3goKSkKKyAgICAgICAgICAgICAgICBsYXN0Um9vdEJveCgpLT5z
ZXRMaW5lQnJlYWtJbmZvKGVuZC5tX29iaiwgZW5kLm1fcG9zLCByZXNvbHZlci5zdGF0dXMoKSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWaXN1YWxEaXJlY3Rpb25PdmVycmlkZSBv
dmVycmlkZSA9IChzdHlsZSgpLT52aXN1YWxseU9yZGVyZWQoKSA/IChzdHlsZSgpLT5kaXJlY3Rp
b24oKSA9PSBMVFIgPyBWaXN1YWxMZWZ0VG9SaWdodE92ZXJyaWRlIDogVmlzdWFsUmlnaHRUb0xl
ZnRPdmVycmlkZSkgOiBOb1Zpc3VhbE92ZXJyaWRlKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBU
aGlzIG93bmVyc2hpcCBpcyByZXZlcnNlZC4gV2Ugc2hvdWxkIG93biB0aGUgQmlkaVJ1bkxpc3Qg
YW5kIHBhc3MgaXQgdG8gY3JlYXRlQmlkaVJ1bnNGb3JMaW5lLgorICAgICAgICAgICAgQmlkaVJ1
bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zID0gcmVzb2x2ZXIucnVucygpOworICAgICAgICAgICAg
cmVzb2x2ZXIuY3JlYXRlQmlkaVJ1bnNGb3JMaW5lKGVuZCwgb3ZlcnJpZGUsIGxpbmVJbmZvLnBy
ZXZpb3VzTGluZUJyb2tlQ2xlYW5seSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXNvbHZlci5w
b3NpdGlvbigpID09IGVuZCk7CiAKLSAgICAgICAgICAgIGxpbmVNaWRwb2ludFN0YXRlLnJlc2V0
KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxpbmVJbmZvLnNldEVtcHR5KHRydWUpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBFQ2xlYXIgY2xlYXIgPSBDTk9ORTsKLSAgICAgICAg
ICAgIGJvb2wgaHlwaGVuYXRlZDsKLSAgICAgICAgICAgIFZlY3RvcjxSZW5kZXJCb3gqPiBwb3Np
dGlvbmVkT2JqZWN0czsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgSW5saW5lSXRlcmF0b3Ig
b2xkRW5kID0gZW5kOwotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21Q
cmV2aW91c0xpbmUgPSAobV9mbG9hdGluZ09iamVjdHMgJiYgIW1fZmxvYXRpbmdPYmplY3RzLT5z
ZXQoKS5pc0VtcHR5KCkpID8gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmxhc3QoKSA6IDA7Ci0g
ICAgICAgICAgICBlbmQgPSBmaW5kTmV4dExpbmVCcmVhayhyZXNvbHZlciwgbGluZUluZm8sIGxp
bmVCcmVha0l0ZXJhdG9ySW5mbywgaHlwaGVuYXRlZCwgJmNsZWFyLCBsYXN0RmxvYXRGcm9tUHJl
dmlvdXNMaW5lLCBwb3NpdGlvbmVkT2JqZWN0cyk7Ci0gICAgICAgICAgICBpZiAocmVzb2x2ZXIu
cG9zaXRpb24oKS5hdEVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZG4ndCBiZSBjcmVhdGluZyBhbnkgcnVucyBpbiBmaW5kTmV4dExpbmVCcmVhayB0byBiZWdpbiB3
aXRoIQotICAgICAgICAgICAgICAgIC8vIE9uY2UgQmlkaVJ1bkxpc3QgaXMgc2VwYXJhdGVkIGZy
b20gQmlkaVJlc29sdmVyIHRoaXMgd2lsbCBub3QgYmUgbmVlZGVkLgotICAgICAgICAgICAgICAg
IHJlc29sdmVyLnJ1bnMoKS5kZWxldGVSdW5zKCk7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZXIu
bWFya0N1cnJlbnRSdW5FbXB0eSgpOyAvLyBGSVhNRTogVGhpcyBjYW4gcHJvYmFibHkgYmUgcmVw
bGFjZWQgYnkgYW4gQVNTRVJUIChvciBqdXN0IHJlbW92ZWQpLgotICAgICAgICAgICAgICAgIGNo
ZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChlbmQgIT0gcmVzb2x2ZXIucG9zaXRp
b24oKSk7CisgICAgICAgICAgICBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuID0gIWxpbmVJbmZv
LnByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSgpID8gaGFuZGxlVHJhaWxpbmdTcGFjZXMoYmlkaVJ1
bnMsIHJlc29sdmVyLmNvbnRleHQoKSkgOiAwOwogCi0gICAgICAgICAgICBpZiAobGluZUluZm8u
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxhc3RSb290Qm94KCkpCi0gICAgICAg
ICAgICAgICAgICAgIGxhc3RSb290Qm94KCktPnNldExpbmVCcmVha0luZm8oZW5kLm1fb2JqLCBl
bmQubV9wb3MsIHJlc29sdmVyLnN0YXR1cygpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgVmlzdWFsRGlyZWN0aW9uT3ZlcnJpZGUgb3ZlcnJpZGUgPSAoc3R5bGUoKS0+
dmlzdWFsbHlPcmRlcmVkKCkgPyAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gVmlzdWFs
TGVmdFRvUmlnaHRPdmVycmlkZSA6IFZpc3VhbFJpZ2h0VG9MZWZ0T3ZlcnJpZGUpIDogTm9WaXN1
YWxPdmVycmlkZSk7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgb3duZXJzaGlwIGlz
IHJldmVyc2VkLiBXZSBzaG91bGQgb3duIHRoZSBCaWRpUnVuTGlzdCBhbmQgcGFzcyBpdCB0byBj
cmVhdGVCaWRpUnVuc0ZvckxpbmUuCi0gICAgICAgICAgICAgICAgQmlkaVJ1bkxpc3Q8QmlkaVJ1
bj4mIGJpZGlSdW5zID0gcmVzb2x2ZXIucnVucygpOwotICAgICAgICAgICAgICAgIHJlc29sdmVy
LmNyZWF0ZUJpZGlSdW5zRm9yTGluZShlbmQsIG92ZXJyaWRlLCBsaW5lSW5mby5wcmV2aW91c0xp
bmVCcm9rZUNsZWFubHkoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJlc29sdmVyLnBvc2l0
aW9uKCkgPT0gZW5kKTsKLQotICAgICAgICAgICAgICAgIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VS
dW4gPSAhbGluZUluZm8ucHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KCkgPyBoYW5kbGVUcmFpbGlu
Z1NwYWNlcyhiaWRpUnVucywgcmVzb2x2ZXIuY29udGV4dCgpKSA6IDA7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBOb3cgdGhhdCB0aGUgcnVucyBoYXZlIGJlZW4gb3JkZXJlZCwgd2UgY3JlYXRlIHRo
ZSBsaW5lIGJveGVzLgotICAgICAgICAgICAgICAgIC8vIEF0IHRoZSBzYW1lIHRpbWUgd2UgZmln
dXJlIG91dCB3aGVyZSBib3JkZXIvcGFkZGluZy9tYXJnaW4gc2hvdWxkIGJlIGFwcGxpZWQgZm9y
Ci0gICAgICAgICAgICAgICAgLy8gaW5saW5lIGZsb3cgYm94ZXMuCi0KLSAgICAgICAgICAgICAg
ICBSb290SW5saW5lQm94KiBsaW5lQm94ID0gMDsKLSAgICAgICAgICAgICAgICBpbnQgb2xkTG9n
aWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBpZiAoYmlkaVJ1
bnMucnVuQ291bnQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaHlwaGVuYXRlZCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJpZGlSdW5zLmxvZ2ljYWxseUxhc3RSdW4oKS0+bV9oYXNI
eXBoZW4gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBsaW5lSW5mby5zZXRMYXN0TGluZSgh
ZW5kLm1fb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgbGluZUJveCA9IGNvbnN0cnVjdExpbmUo
YmlkaVJ1bnMsIGxpbmVJbmZvKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVCb3gpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVCb3gtPnNldEVuZHNXaXRoQnJlYWsobGluZUlu
Zm8ucHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KCkpOworICAgICAgICAgICAgLy8gTm93IHRoYXQg
dGhlIHJ1bnMgaGF2ZSBiZWVuIG9yZGVyZWQsIHdlIGNyZWF0ZSB0aGUgbGluZSBib3hlcy4KKyAg
ICAgICAgICAgIC8vIEF0IHRoZSBzYW1lIHRpbWUgd2UgZmlndXJlIG91dCB3aGVyZSBib3JkZXIv
cGFkZGluZy9tYXJnaW4gc2hvdWxkIGJlIGFwcGxpZWQgZm9yCisgICAgICAgICAgICAvLyBpbmxp
bmUgZmxvdyBib3hlcy4KKworICAgICAgICAgICAgUm9vdElubGluZUJveCogbGluZUJveCA9IDA7
CisgICAgICAgICAgICBpbnQgb2xkTG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKKyAg
ICAgICAgICAgIGlmIChiaWRpUnVucy5ydW5Db3VudCgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KGh5cGhlbmF0ZWQpCisgICAgICAgICAgICAgICAgICAgIGJpZGlSdW5zLmxvZ2ljYWxseUxhc3RS
dW4oKS0+bV9oYXNIeXBoZW4gPSB0cnVlOworICAgICAgICAgICAgICAgIGxpbmVJbmZvLnNldExh
c3RMaW5lKCFlbmQubV9vYmopOworICAgICAgICAgICAgICAgIGxpbmVCb3ggPSBjb25zdHJ1Y3RM
aW5lKGJpZGlSdW5zLCBsaW5lSW5mbyk7CisgICAgICAgICAgICAgICAgaWYgKGxpbmVCb3gpIHsK
KyAgICAgICAgICAgICAgICAgICAgbGluZUJveC0+c2V0RW5kc1dpdGhCcmVhayhsaW5lSW5mby5w
cmV2aW91c0xpbmVCcm9rZUNsZWFubHkoKSk7CiAKICNpZiBFTkFCTEUoU1ZHKQotICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBpc1NWR1Jvb3RJbmxpbmVCb3ggPSBsaW5lQm94LT5pc1NWR1Jv
b3RJbmxpbmVCb3goKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1NWR1Jvb3RJbmxpbmVC
b3ggPSBsaW5lQm94LT5pc1NWR1Jvb3RJbmxpbmVCb3goKTsKICNlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGlzU1ZHUm9vdElubGluZUJveCA9IGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICBib29sIGlzU1ZHUm9vdElubGluZUJveCA9IGZhbHNlOwogI2VuZGlmCiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwIHRleHRC
b3hEYXRhTWFwOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIE5vdyB3ZSBwb3NpdGlvbiBhbGwgb2Ygb3VyIHRleHQgcnVucyBob3Jpem9udGFsbHkuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU1ZHUm9vdElubGluZUJveCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yTGlu
ZShsaW5lQm94LCBsaW5lSW5mbywgYmlkaVJ1bnMuZmlyc3RSdW4oKSwgdHJhaWxpbmdTcGFjZVJ1
biwgZW5kLmF0RW5kKCksIHRleHRCb3hEYXRhTWFwLCB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUpOwor
ICAgICAgICAgICAgICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCB0ZXh0
Qm94RGF0YU1hcDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IHBvc2l0aW9uIG91
ciB0ZXh0IHJ1bnMgdmVydGljYWxseS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVC
bG9ja0RpcmVjdGlvblBvc2l0aW9uc0ZvckxpbmUobGluZUJveCwgYmlkaVJ1bnMuZmlyc3RSdW4o
KSwgdGV4dEJveERhdGFNYXAsIHZlcnRpY2FsUG9zaXRpb25DYWNoZSk7CisgICAgICAgICAgICAg
ICAgICAgIC8vIE5vdyB3ZSBwb3NpdGlvbiBhbGwgb2Ygb3VyIHRleHQgcnVucyBob3Jpem9udGFs
bHkuCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNTVkdSb290SW5saW5lQm94KQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvckxpbmUo
bGluZUJveCwgbGluZUluZm8sIGJpZGlSdW5zLmZpcnN0UnVuKCksIHRyYWlsaW5nU3BhY2VSdW4s
IGVuZC5hdEVuZCgpLCB0ZXh0Qm94RGF0YU1hcCwgdmVydGljYWxQb3NpdGlvbkNhY2hlKTsKKwor
ICAgICAgICAgICAgICAgICAgICAvLyBOb3cgcG9zaXRpb24gb3VyIHRleHQgcnVucyB2ZXJ0aWNh
bGx5LgorICAgICAgICAgICAgICAgICAgICBjb21wdXRlQmxvY2tEaXJlY3Rpb25Qb3NpdGlvbnNG
b3JMaW5lKGxpbmVCb3gsIGJpZGlSdW5zLmZpcnN0UnVuKCksIHRleHRCb3hEYXRhTWFwLCB2ZXJ0
aWNhbFBvc2l0aW9uQ2FjaGUpOwogCiAjaWYgRU5BQkxFKFNWRykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFNWRyB0ZXh0IGxheW91dCBjb2RlIGNvbXB1dGVzIHZlcnRpY2FsICYgaG9yaXpv
bnRhbCBwb3NpdGlvbnMgb24gaXRzIG93bi4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5v
dGUgdGhhdCB3ZSBzdGlsbCBuZWVkIHRvIGV4ZWN1dGUgY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25z
Rm9yTGluZSgpIGFzCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBjYWxscyBJbmxpbmVU
ZXh0Qm94Ojpwb3NpdGlvbkxpbmVCb3goKSwgd2hpY2ggdHJhY2tzIHdoZXRoZXIgdGhlIGJveAot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGFpbnMgcmV2ZXJzZWQgdGV4dCBvciBub3Qu
IElmIHdlIHdvdWxkbid0IGRvIHRoYXQgZWRpdGluZyBhbmQgdGh1cwotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdGV4dCBzZWxlY3Rpb24gaW4gUlRMIGJveGVzIHdvdWxkIG5vdCB3b3JrIGFz
IGV4cGVjdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU1ZHUm9vdElubGluZUJv
eCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpc1NWR1RleHQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHUm9vdElubGluZUJveCo+
KGxpbmVCb3gpLT5jb21wdXRlUGVyQ2hhcmFjdGVyTGF5b3V0SW5mb3JtYXRpb24oKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gU1ZHIHRleHQgbGF5
b3V0IGNvZGUgY29tcHV0ZXMgdmVydGljYWwgJiBob3Jpem9udGFsIHBvc2l0aW9ucyBvbiBpdHMg
b3duLgorICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2Ugc3RpbGwgbmVlZCB0byBl
eGVjdXRlIGNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uc0ZvckxpbmUoKSBhcworICAgICAgICAgICAg
ICAgICAgICAvLyBpdCBjYWxscyBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkxpbmVCb3goKSwgd2hp
Y2ggdHJhY2tzIHdoZXRoZXIgdGhlIGJveAorICAgICAgICAgICAgICAgICAgICAvLyBjb250YWlu
cyByZXZlcnNlZCB0ZXh0IG9yIG5vdC4gSWYgd2Ugd291bGRuJ3QgZG8gdGhhdCBlZGl0aW5nIGFu
ZCB0aHVzCisgICAgICAgICAgICAgICAgICAgIC8vIHRleHQgc2VsZWN0aW9uIGluIFJUTCBib3hl
cyB3b3VsZCBub3Qgd29yayBhcyBleHBlY3RlZC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGlz
U1ZHUm9vdElubGluZUJveCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzU1ZH
VGV4dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFNWR1Jvb3RJbmxp
bmVCb3gqPihsaW5lQm94KS0+Y29tcHV0ZVBlckNoYXJhY3RlckxheW91dEluZm9ybWF0aW9uKCk7
CisgICAgICAgICAgICAgICAgICAgIH0KICNlbmRpZgogCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBDb21wdXRlIG91ciBvdmVyZmxvdyBub3cuCi0gICAgICAgICAgICAgICAgICAgICAgICBs
aW5lQm94LT5jb21wdXRlT3ZlcmZsb3cobGluZUJveC0+bGluZVRvcCgpLCBsaW5lQm94LT5saW5l
Qm90dG9tKCksIHRleHRCb3hEYXRhTWFwKTsKLSAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8g
Q29tcHV0ZSBvdXIgb3ZlcmZsb3cgbm93LgorICAgICAgICAgICAgICAgICAgICBsaW5lQm94LT5j
b21wdXRlT3ZlcmZsb3cobGluZUJveC0+bGluZVRvcCgpLCBsaW5lQm94LT5saW5lQm90dG9tKCks
IHRleHRCb3hEYXRhTWFwKTsKKwogI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEhpZ2hsaWdodCBhY3RzIGFzIGFuIG92ZXJmbG93IGluZmxhdGlvbi4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5oaWdobGlnaHQoKSAhPSBudWxsQXRvbSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lQm94LT5hZGRIaWdobGlnaHRPdmVyZmxv
dygpOworICAgICAgICAgICAgICAgICAgICAvLyBIaWdobGlnaHQgYWN0cyBhcyBhbiBvdmVyZmxv
dyBpbmZsYXRpb24uCisgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5oaWdobGlnaHQo
KSAhPSBudWxsQXRvbSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVCb3gtPmFkZEhpZ2hs
aWdodE92ZXJmbG93KCk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGJpZGlSdW5zLmRlbGV0
ZVJ1bnMoKTsKLSAgICAgICAgICAgICAgICByZXNvbHZlci5tYXJrQ3VycmVudFJ1bkVtcHR5KCk7
IC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBiZSByZXBsYWNlZCBieSBhbiBBU1NFUlQgKG9y
IGp1c3QgcmVtb3ZlZCkuCisgICAgICAgICAgICBiaWRpUnVucy5kZWxldGVSdW5zKCk7CisgICAg
ICAgICAgICByZXNvbHZlci5tYXJrQ3VycmVudFJ1bkVtcHR5KCk7IC8vIEZJWE1FOiBUaGlzIGNh
biBwcm9iYWJseSBiZSByZXBsYWNlZCBieSBhbiBBU1NFUlQgKG9yIGp1c3QgcmVtb3ZlZCkuCiAK
LSAgICAgICAgICAgICAgICBpZiAobGluZUJveCkgewotICAgICAgICAgICAgICAgICAgICBsaW5l
Qm94LT5zZXRMaW5lQnJlYWtJbmZvKGVuZC5tX29iaiwgZW5kLm1fcG9zLCByZXNvbHZlci5zdGF0
dXMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1c2VSZXBhaW50Qm91bmRzKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXBhaW50TG9naWNhbFRvcCA9IG1pbihyZXBhaW50TG9naWNh
bFRvcCwgbGluZUJveC0+bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmVwYWludExvZ2ljYWxCb3R0b20gPSBtYXgocmVwYWludExvZ2ljYWxCb3R0
b20sIGxpbmVCb3gtPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygpKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHBhZ2luYXRlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFkanVzdG1lbnQgPSAw
OwotICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlv
bihsaW5lQm94LCBhZGp1c3RtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGp1
c3RtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9sZExpbmVXaWR0aCA9
IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUob2xkTG9naWNhbEhlaWdodCwgbGluZUluZm8u
aXNGaXJzdExpbmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUJveC0+YWRq
dXN0QmxvY2tEaXJlY3Rpb25Qb3NpdGlvbihhZGp1c3RtZW50KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodXNlUmVwYWludEJvdW5kcykgLy8gVGhpcyBjYW4gb25seSBiZSBhIHBv
c2l0aXZlIGFkanVzdG1lbnQsIHNvIG5vIG5lZWQgdG8gdXBkYXRlIHJlcGFpbnRUb3AuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFpbnRMb2dpY2FsQm90dG9tID0gbWF4KHJl
cGFpbnRMb2dpY2FsQm90dG9tLCBsaW5lQm94LT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3co
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKG9sZExvZ2ljYWxIZWln
aHQgKyBhZGp1c3RtZW50LCBsaW5lSW5mby5pc0ZpcnN0TGluZSgpKSAhPSBvbGRMaW5lV2lkdGgp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBkZWxldGUg
dGhpcyBsaW5lLCByZW1vdmUgYWxsIGZsb2F0cyB0aGF0IGdvdCBhZGRlZCwgYW5kIGxldCBsaW5l
IGxheW91dCByZS1ydW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVCb3gt
PmRlbGV0ZUxpbmUocmVuZGVyQXJlbmEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlbW92ZUZsb2F0aW5nT2JqZWN0c0JlbG93KGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUs
IG9sZExvZ2ljYWxIZWlnaHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRM
b2dpY2FsSGVpZ2h0KG9sZExvZ2ljYWxIZWlnaHQgKyBhZGp1c3RtZW50KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRpb24ob2xkRW5kKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gb2xkRW5kOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxpbmVCb3gt
PmJsb2NrTG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxpbmVCb3gpIHsKKyAgICAgICAgICAg
ICAgICBsaW5lQm94LT5zZXRMaW5lQnJlYWtJbmZvKGVuZC5tX29iaiwgZW5kLm1fcG9zLCByZXNv
bHZlci5zdGF0dXMoKSk7CisgICAgICAgICAgICAgICAgaWYgKHVzZVJlcGFpbnRCb3VuZHMpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmVwYWludExvZ2ljYWxUb3AgPSBtaW4ocmVwYWludExvZ2lj
YWxUb3AsIGxpbmVCb3gtPmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdygpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVwYWludExvZ2ljYWxCb3R0b20gPSBtYXgocmVwYWludExvZ2ljYWxCb3R0b20s
IGxpbmVCb3gtPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygpKTsKICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBvc2l0aW9uZWRP
YmplY3RzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgICAgICBzZXRTdGF0aWNQb3NpdGlv
bnModGhpcywgcG9zaXRpb25lZE9iamVjdHNbaV0pOwotCi0gICAgICAgICAgICAgICAgbGluZUlu
Zm8uc2V0Rmlyc3RMaW5lKGZhbHNlKTsKLSAgICAgICAgICAgICAgICBuZXdMaW5lKGNsZWFyKTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocGFnaW5hdGVkKSB7CisgICAgICAg
ICAgICAgICAgICAgIGludCBhZGp1c3RtZW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYWRq
dXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihsaW5lQm94LCBhZGp1c3RtZW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGFkanVzdG1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGludCBvbGRMaW5lV2lkdGggPSBhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKG9sZExvZ2lj
YWxIZWlnaHQsIGxpbmVJbmZvLmlzRmlyc3RMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbGluZUJveC0+YWRqdXN0QmxvY2tEaXJlY3Rpb25Qb3NpdGlvbihhZGp1c3RtZW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VSZXBhaW50Qm91bmRzKSAvLyBUaGlzIGNhbiBv
bmx5IGJlIGEgcG9zaXRpdmUgYWRqdXN0bWVudCwgc28gbm8gbmVlZCB0byB1cGRhdGUgcmVwYWlu
dFRvcC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBhaW50TG9naWNhbEJvdHRvbSA9
IG1heChyZXBhaW50TG9naWNhbEJvdHRvbSwgbGluZUJveC0+bG9naWNhbEJvdHRvbVZpc3VhbE92
ZXJmbG93KCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlTG9naWNh
bFdpZHRoRm9yTGluZShvbGRMb2dpY2FsSGVpZ2h0ICsgYWRqdXN0bWVudCwgbGluZUluZm8uaXNG
aXJzdExpbmUoKSkgIT0gb2xkTGluZVdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gV2UgaGF2ZSB0byBkZWxldGUgdGhpcyBsaW5lLCByZW1vdmUgYWxsIGZsb2F0cyB0aGF0
IGdvdCBhZGRlZCwgYW5kIGxldCBsaW5lIGxheW91dCByZS1ydW4uCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGluZUJveC0+ZGVsZXRlTGluZShyZW5kZXJBcmVuYSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZW1vdmVGbG9hdGluZ09iamVjdHNCZWxvdyhsYXN0RmxvYXRG
cm9tUHJldmlvdXNMaW5lLCBvbGRMb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KG9sZExvZ2ljYWxIZWlnaHQgKyBhZGp1c3RtZW50KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlci5zZXRQb3NpdGlvbihvbGRFbmQp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IG9sZEVuZDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKG1fZmxvYXRpbmdPYmplY3RzICYmIGxhc3RSb290Qm94KCkpIHsKLSAg
ICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0KCk7Ci0gICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJ
dGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsK
LSAgICAgICAgICAgICAgICBpZiAobGFzdEZsb2F0KSB7Ci0gICAgICAgICAgICAgICAgICAgIEZs
b2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgbGFzdEZsb2F0SXRlcmF0b3IgPSBmbG9hdGluZ09iamVj
dFNldC5maW5kKGxhc3RGbG9hdCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChsYXN0Rmxv
YXRJdGVyYXRvciAhPSBlbmQpOwotICAgICAgICAgICAgICAgICAgICArK2xhc3RGbG9hdEl0ZXJh
dG9yOwotICAgICAgICAgICAgICAgICAgICBpdCA9IGxhc3RGbG9hdEl0ZXJhdG9yOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwotICAgICAgICAgICAg
ICAgICAgICBhcHBlbmRGbG9hdGluZ09iamVjdFRvTGFzdExpbmUoZik7Ci0gICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChmLT5tX3JlbmRlcmVyID09IGZsb2F0c1tmbG9hdEluZGV4XS5vYmplY3Qp
OwotICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIGZsb2F0J3MgZ2VvbWV0cnkgaGFzIGNoYW5n
ZWQsIGdpdmUgdXAgb24gc3luY2luZyB3aXRoIGNsZWFuIGxpbmVzLgotICAgICAgICAgICAgICAg
ICAgICBpZiAoZmxvYXRzW2Zsb2F0SW5kZXhdLnJlY3QgIT0gZi0+ZnJhbWVSZWN0KCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjaGVja0ZvckVuZExpbmVNYXRjaCA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgICAgICBmbG9hdEluZGV4Kys7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRM
b2dpY2FsSGVpZ2h0KGxpbmVCb3gtPmJsb2NrTG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsYXN0RmxvYXQg
PSAhZmxvYXRpbmdPYmplY3RTZXQuaXNFbXB0eSgpID8gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgp
IDogMDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbGluZU1pZHBvaW50U3RhdGUucmVz
ZXQoKTsKLSAgICAgICAgICAgIHJlc29sdmVyLnNldFBvc2l0aW9uKGVuZCk7Ci0gICAgICAgIH0K
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9zaXRpb25lZE9iamVjdHMuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgc2V0U3RhdGljUG9zaXRpb25zKHRoaXMsIHBvc2l0
aW9uZWRPYmplY3RzW2ldKTsKIAotICAgICAgICBpZiAoZW5kTGluZSkgewotICAgICAgICAgICAg
aWYgKGVuZExpbmVNYXRjaGVkKSB7Ci0gICAgICAgICAgICAgICAgLy8gQXR0YWNoIGFsbCB0aGUg
cmVtYWluaW5nIGxpbmVzLCBhbmQgdGhlbiBhZGp1c3QgdGhlaXIgeS1wb3NpdGlvbnMgYXMgbmVl
ZGVkLgotICAgICAgICAgICAgICAgIGludCBkZWx0YSA9IGxvZ2ljYWxIZWlnaHQoKSAtIGVuZExp
bmVMb2dpY2FsVG9wOwotICAgICAgICAgICAgICAgIGZvciAoUm9vdElubGluZUJveCogbGluZSA9
IGVuZExpbmU7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0Um9vdEJveCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGxpbmUtPmF0dGFjaExpbmUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBh
Z2luYXRlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGEgLT0gbGluZS0+cGFnaW5h
dGlvblN0cnV0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RMaW5lUG9zaXRpb25G
b3JQYWdpbmF0aW9uKGxpbmUsIGRlbHRhKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBpZiAoZGVsdGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGFp
bnRMb2dpY2FsVG9wID0gbWluKHJlcGFpbnRMb2dpY2FsVG9wLCBsaW5lLT5sb2dpY2FsVG9wVmlz
dWFsT3ZlcmZsb3coKSArIG1pbihkZWx0YSwgMCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
cmVwYWludExvZ2ljYWxCb3R0b20gPSBtYXgocmVwYWludExvZ2ljYWxCb3R0b20sIGxpbmUtPmxv
Z2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygpICsgbWF4KGRlbHRhLCAwKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBsaW5lLT5hZGp1c3RCbG9ja0RpcmVjdGlvblBvc2l0aW9uKGRlbHRhKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoVmVjdG9yPFJl
bmRlckJveCo+KiBjbGVhbkxpbmVGbG9hdHMgPSBsaW5lLT5mbG9hdHNQdHIoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgVmVjdG9yPFJlbmRlckJveCo+OjppdGVyYXRvciBlbmQgPSBjbGVh
bkxpbmVGbG9hdHMtPmVuZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChWZWN0b3I8
UmVuZGVyQm94Kj46Oml0ZXJhdG9yIGYgPSBjbGVhbkxpbmVGbG9hdHMtPmJlZ2luKCk7IGYgIT0g
ZW5kOyArK2YpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRGbG9hdGluZ09i
amVjdCgqZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodChs
b2dpY2FsVG9wRm9yQ2hpbGQoKmYpIC0gbWFyZ2luQmVmb3JlRm9yQ2hpbGQoKmYpICsgZGVsdGEp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uTmV3RmxvYXRzKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodChsYXN0Um9vdEJveCgpLT5i
bG9ja0xvZ2ljYWxIZWlnaHQoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIC8vIERlbGV0ZSBhbGwgdGhlIHJlbWFpbmluZyBsaW5lcy4KLSAgICAgICAgICAgICAgICBS
b290SW5saW5lQm94KiBsaW5lID0gZW5kTGluZTsKLSAgICAgICAgICAgICAgICBSZW5kZXJBcmVu
YSogYXJlbmEgPSByZW5kZXJBcmVuYSgpOwotICAgICAgICAgICAgICAgIHdoaWxlIChsaW5lKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJlcGFpbnRMb2dpY2FsVG9wID0gbWluKHJlcGFpbnRMb2dp
Y2FsVG9wLCBsaW5lLT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3coKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJlcGFpbnRMb2dpY2FsQm90dG9tID0gbWF4KHJlcGFpbnRMb2dpY2FsQm90dG9tLCBs
aW5lLT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3coKSk7Ci0gICAgICAgICAgICAgICAgICAg
IFJvb3RJbmxpbmVCb3gqIG5leHQgPSBsaW5lLT5uZXh0Um9vdEJveCgpOwotICAgICAgICAgICAg
ICAgICAgICBsaW5lLT5kZWxldGVMaW5lKGFyZW5hKTsKLSAgICAgICAgICAgICAgICAgICAgbGlu
ZSA9IG5leHQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAg
bGluZUluZm8uc2V0Rmlyc3RMaW5lKGZhbHNlKTsKKyAgICAgICAgICAgIG5ld0xpbmUoY2xlYXIp
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cyAmJiAoY2hlY2tGb3JG
bG9hdHNGcm9tTGFzdExpbmUgfHwgcG9zaXRpb25OZXdGbG9hdHMoKSkgJiYgbGFzdFJvb3RCb3go
KSkgewotICAgICAgICAgICAgLy8gSW4gY2FzZSB3ZSBoYXZlIGEgZmxvYXQgb24gdGhlIGxhc3Qg
bGluZSwgaXQgbWlnaHQgbm90IGJlIHBvc2l0aW9uZWQgdXAgdG8gbm93LgotICAgICAgICAgICAg
Ly8gVGhpcyBoYXMgdG8gYmUgZG9uZSBiZWZvcmUgYWRkaW5nIGluIHRoZSBib3R0b20gYm9yZGVy
L3BhZGRpbmcsIG9yIHRoZSBmbG9hdCB3aWxsCi0gICAgICAgICAgICAvLyBpbmNsdWRlIHRoZSBw
YWRkaW5nIGluY29ycmVjdGx5LiAtZHdoCi0gICAgICAgICAgICBpZiAoY2hlY2tGb3JGbG9hdHNG
cm9tTGFzdExpbmUpIHsKLSAgICAgICAgICAgICAgICBpbnQgYm90dG9tVmlzdWFsT3ZlcmZsb3cg
PSBsYXN0Um9vdEJveCgpLT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3coKTsKLSAgICAgICAg
ICAgICAgICBpbnQgYm90dG9tTGF5b3V0T3ZlcmZsb3cgPSBsYXN0Um9vdEJveCgpLT5sb2dpY2Fs
Qm90dG9tTGF5b3V0T3ZlcmZsb3coKTsKLSAgICAgICAgICAgICAgICBUcmFpbGluZ0Zsb2F0c1Jv
b3RJbmxpbmVCb3gqIHRyYWlsaW5nRmxvYXRzTGluZUJveCA9IG5ldyAocmVuZGVyQXJlbmEoKSkg
VHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94KHRoaXMpOwotICAgICAgICAgICAgICAgIG1fbGlu
ZUJveGVzLmFwcGVuZExpbmVCb3godHJhaWxpbmdGbG9hdHNMaW5lQm94KTsKLSAgICAgICAgICAg
ICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPnNldENvbnN0cnVjdGVkKCk7Ci0gICAgICAgICAg
ICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAgdGV4dEJveERhdGFNYXA7Ci0g
ICAgICAgICAgICAgICAgVmVydGljYWxQb3NpdGlvbkNhY2hlIHZlcnRpY2FsUG9zaXRpb25DYWNo
ZTsKLSAgICAgICAgICAgICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPmFsaWduQm94ZXNJbkJs
b2NrRGlyZWN0aW9uKGxvZ2ljYWxIZWlnaHQoKSwgdGV4dEJveERhdGFNYXAsIHZlcnRpY2FsUG9z
aXRpb25DYWNoZSk7Ci0gICAgICAgICAgICAgICAgaW50IGJsb2NrTG9naWNhbEhlaWdodCA9IGxv
Z2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IGxvZ2ljYWxMYXlvdXRPdmVy
ZmxvdygwLCBibG9ja0xvZ2ljYWxIZWlnaHQsIDEsIGJvdHRvbUxheW91dE92ZXJmbG93IC0gYmxv
Y2tMb2dpY2FsSGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IGxvZ2ljYWxWaXN1YWxP
dmVyZmxvdygwLCBibG9ja0xvZ2ljYWxIZWlnaHQsIDEsIGJvdHRvbVZpc3VhbE92ZXJmbG93IC0g
YmxvY2tMb2dpY2FsSGVpZ2h0KTsKLSAgICAgICAgICAgICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVC
b3gtPnNldE92ZXJmbG93RnJvbUxvZ2ljYWxSZWN0cyhsb2dpY2FsTGF5b3V0T3ZlcmZsb3csIGxv
Z2ljYWxWaXN1YWxPdmVyZmxvdywgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5saW5lVG9wKCksIHRy
YWlsaW5nRmxvYXRzTGluZUJveC0+bGluZUJvdHRvbSgpKTsKLSAgICAgICAgICAgICAgICB0cmFp
bGluZ0Zsb2F0c0xpbmVCb3gtPnNldEJsb2NrTG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KCkp
OwotICAgICAgICAgICAgfQogCisgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cyAmJiBsYXN0
Um9vdEJveCgpKSB7CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmpl
Y3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgICAgICBGbG9hdGluZ09i
amVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKICAgICAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5k
KCk7CkBAIC0xMTE1LDIxICs5NzUsMTY5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGlu
ZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50JiByZXBhaW50TG9naWNhCiAgICAg
ICAgICAgICAgICAgKytsYXN0RmxvYXRJdGVyYXRvcjsKICAgICAgICAgICAgICAgICBpdCA9IGxh
c3RGbG9hdEl0ZXJhdG9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yICg7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgICAgICAgICBhcHBlbmRGbG9hdGluZ09iamVjdFRvTGFzdExp
bmUoKml0KTsKKyAgICAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
ICAgICAgICBGbG9hdGluZ09iamVjdCogZiA9ICppdDsKKyAgICAgICAgICAgICAgICBhcHBlbmRG
bG9hdGluZ09iamVjdFRvTGFzdExpbmUoZik7CisgICAgICAgICAgICAgICAgQVNTRVJUKGYtPm1f
cmVuZGVyZXIgPT0gZmxvYXRzW2Zsb2F0SW5kZXhdLm9iamVjdCk7CisgICAgICAgICAgICAgICAg
Ly8gSWYgYSBmbG9hdCdzIGdlb21ldHJ5IGhhcyBjaGFuZ2VkLCBnaXZlIHVwIG9uIHN5bmNpbmcg
d2l0aCBjbGVhbiBsaW5lcy4KKyAgICAgICAgICAgICAgICBpZiAoZmxvYXRzW2Zsb2F0SW5kZXhd
LnJlY3QgIT0gZi0+ZnJhbWVSZWN0KCkpCisgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yRW5k
TGluZU1hdGNoID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZmxvYXRJbmRleCsrOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgbGFzdEZsb2F0ID0gIWZsb2F0aW5nT2JqZWN0U2V0LmlzRW1w
dHkoKSA/IGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKSA6IDA7CiAgICAgICAgIH0KLSAgICAgICAg
c2l6ZV90IGZsb2F0Q291bnQgPSBmbG9hdHMuc2l6ZSgpOwotICAgICAgICAvLyBGbG9hdHMgdGhh
dCBkaWQgbm90IGhhdmUgbGF5b3V0IGRpZCBub3QgcmVwYWludCB3aGVuIHdlIGxhaWQgdGhlbSBv
dXQuIFRoZXkgd291bGQgaGF2ZQotICAgICAgICAvLyBwYWludGVkIGJ5IG5vdyBpZiB0aGV5IGhh
ZCBtb3ZlZCwgYnV0IGlmIHRoZXkgc3RheWVkIGF0ICgwLCAwKSwgdGhleSBzdGlsbCBuZWVkIHRv
IGJlCi0gICAgICAgIC8vIHBhaW50ZWQuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZmxvYXRDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoIWZsb2F0c1tpXS5ldmVySGFkTGF5
b3V0KSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyQm94KiBmID0gZmxvYXRzW2ldLm9iamVjdDsK
LSAgICAgICAgICAgICAgICBpZiAoIWYtPngoKSAmJiAhZi0+eSgpICYmIGYtPmNoZWNrRm9yUmVw
YWludER1cmluZ0xheW91dCgpKQotICAgICAgICAgICAgICAgICAgICBmLT5yZXBhaW50KCk7CisK
KyAgICAgICAgbGluZU1pZHBvaW50U3RhdGUucmVzZXQoKTsKKyAgICAgICAgcmVzb2x2ZXIuc2V0
UG9zaXRpb24oZW5kKTsKKyAgICB9CisKKyAgICBpZiAoZW5kTGluZSkgeworICAgICAgICBpZiAo
ZW5kTGluZU1hdGNoZWQpIHsKKyAgICAgICAgICAgIC8vIEF0dGFjaCBhbGwgdGhlIHJlbWFpbmlu
ZyBsaW5lcywgYW5kIHRoZW4gYWRqdXN0IHRoZWlyIHktcG9zaXRpb25zIGFzIG5lZWRlZC4KKyAg
ICAgICAgICAgIGludCBkZWx0YSA9IGxvZ2ljYWxIZWlnaHQoKSAtIGVuZExpbmVMb2dpY2FsVG9w
OworICAgICAgICAgICAgZm9yIChSb290SW5saW5lQm94KiBsaW5lID0gZW5kTGluZTsgbGluZTsg
bGluZSA9IGxpbmUtPm5leHRSb290Qm94KCkpIHsKKyAgICAgICAgICAgICAgICBsaW5lLT5hdHRh
Y2hMaW5lKCk7CisgICAgICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCkgeworICAgICAgICAgICAg
ICAgICAgICBkZWx0YSAtPSBsaW5lLT5wYWdpbmF0aW9uU3RydXQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihsaW5lLCBkZWx0YSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChkZWx0YSkgeworICAgICAgICAgICAg
ICAgICAgICByZXBhaW50TG9naWNhbFRvcCA9IG1pbihyZXBhaW50TG9naWNhbFRvcCwgbGluZS0+
bG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KCkgKyBtaW4oZGVsdGEsIDApKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVwYWludExvZ2ljYWxCb3R0b20gPSBtYXgocmVwYWludExvZ2ljYWxCb3R0b20s
IGxpbmUtPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygpICsgbWF4KGRlbHRhLCAwKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGxpbmUtPmFkanVzdEJsb2NrRGlyZWN0aW9uUG9zaXRpb24oZGVs
dGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoVmVjdG9yPFJlbmRl
ckJveCo+KiBjbGVhbkxpbmVGbG9hdHMgPSBsaW5lLT5mbG9hdHNQdHIoKSkgeworICAgICAgICAg
ICAgICAgICAgICBWZWN0b3I8UmVuZGVyQm94Kj46Oml0ZXJhdG9yIGVuZCA9IGNsZWFuTGluZUZs
b2F0cy0+ZW5kKCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoVmVjdG9yPFJlbmRlckJveCo+
OjppdGVyYXRvciBmID0gY2xlYW5MaW5lRmxvYXRzLT5iZWdpbigpOyBmICE9IGVuZDsgKytmKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRGbG9hdGluZ09iamVjdCgqZik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxUb3BGb3JDaGlsZCgq
ZikgLSBtYXJnaW5CZWZvcmVGb3JDaGlsZCgqZikgKyBkZWx0YSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwb3NpdGlvbk5ld0Zsb2F0cygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdo
dChsYXN0Um9vdEJveCgpLT5ibG9ja0xvZ2ljYWxIZWlnaHQoKSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBEZWxldGUgYWxsIHRoZSByZW1haW5pbmcgbGluZXMuCisgICAgICAg
ICAgICBSb290SW5saW5lQm94KiBsaW5lID0gZW5kTGluZTsKKyAgICAgICAgICAgIFJlbmRlckFy
ZW5hKiBhcmVuYSA9IHJlbmRlckFyZW5hKCk7CisgICAgICAgICAgICB3aGlsZSAobGluZSkgewor
ICAgICAgICAgICAgICAgIHJlcGFpbnRMb2dpY2FsVG9wID0gbWluKHJlcGFpbnRMb2dpY2FsVG9w
LCBsaW5lLT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3coKSk7CisgICAgICAgICAgICAgICAgcmVw
YWludExvZ2ljYWxCb3R0b20gPSBtYXgocmVwYWludExvZ2ljYWxCb3R0b20sIGxpbmUtPmxvZ2lj
YWxCb3R0b21WaXN1YWxPdmVyZmxvdygpKTsKKyAgICAgICAgICAgICAgICBSb290SW5saW5lQm94
KiBuZXh0ID0gbGluZS0+bmV4dFJvb3RCb3goKTsKKyAgICAgICAgICAgICAgICBsaW5lLT5kZWxl
dGVMaW5lKGFyZW5hKTsKKyAgICAgICAgICAgICAgICBsaW5lID0gbmV4dDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9mbG9hdGluZ09iamVjdHMgJiYgKGNoZWNr
Rm9yRmxvYXRzRnJvbUxhc3RMaW5lIHx8IHBvc2l0aW9uTmV3RmxvYXRzKCkpICYmIGxhc3RSb290
Qm94KCkpIHsKKyAgICAgICAgLy8gSW4gY2FzZSB3ZSBoYXZlIGEgZmxvYXQgb24gdGhlIGxhc3Qg
bGluZSwgaXQgbWlnaHQgbm90IGJlIHBvc2l0aW9uZWQgdXAgdG8gbm93LgorICAgICAgICAvLyBU
aGlzIGhhcyB0byBiZSBkb25lIGJlZm9yZSBhZGRpbmcgaW4gdGhlIGJvdHRvbSBib3JkZXIvcGFk
ZGluZywgb3IgdGhlIGZsb2F0IHdpbGwKKyAgICAgICAgLy8gaW5jbHVkZSB0aGUgcGFkZGluZyBp
bmNvcnJlY3RseS4gLWR3aAorICAgICAgICBpZiAoY2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmUp
IHsKKyAgICAgICAgICAgIGludCBib3R0b21WaXN1YWxPdmVyZmxvdyA9IGxhc3RSb290Qm94KCkt
PmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygpOworICAgICAgICAgICAgaW50IGJvdHRvbUxh
eW91dE92ZXJmbG93ID0gbGFzdFJvb3RCb3goKS0+bG9naWNhbEJvdHRvbUxheW91dE92ZXJmbG93
KCk7CisgICAgICAgICAgICBUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3gqIHRyYWlsaW5nRmxv
YXRzTGluZUJveCA9IG5ldyAocmVuZGVyQXJlbmEoKSkgVHJhaWxpbmdGbG9hdHNSb290SW5saW5l
Qm94KHRoaXMpOworICAgICAgICAgICAgbV9saW5lQm94ZXMuYXBwZW5kTGluZUJveCh0cmFpbGlu
Z0Zsb2F0c0xpbmVCb3gpOworICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5zZXRD
b25zdHJ1Y3RlZCgpOworICAgICAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNN
YXAgdGV4dEJveERhdGFNYXA7CisgICAgICAgICAgICBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUgdmVy
dGljYWxQb3NpdGlvbkNhY2hlOworICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5h
bGlnbkJveGVzSW5CbG9ja0RpcmVjdGlvbihsb2dpY2FsSGVpZ2h0KCksIHRleHRCb3hEYXRhTWFw
LCB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUpOworICAgICAgICAgICAgaW50IGJsb2NrTG9naWNhbEhl
aWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgIEludFJlY3QgbG9naWNhbExheW91
dE92ZXJmbG93KDAsIGJsb2NrTG9naWNhbEhlaWdodCwgMSwgYm90dG9tTGF5b3V0T3ZlcmZsb3cg
LSBibG9ja0xvZ2ljYWxIZWlnaHQpOworICAgICAgICAgICAgSW50UmVjdCBsb2dpY2FsVmlzdWFs
T3ZlcmZsb3coMCwgYmxvY2tMb2dpY2FsSGVpZ2h0LCAxLCBib3R0b21WaXN1YWxPdmVyZmxvdyAt
IGJsb2NrTG9naWNhbEhlaWdodCk7CisgICAgICAgICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gt
PnNldE92ZXJmbG93RnJvbUxvZ2ljYWxSZWN0cyhsb2dpY2FsTGF5b3V0T3ZlcmZsb3csIGxvZ2lj
YWxWaXN1YWxPdmVyZmxvdywgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5saW5lVG9wKCksIHRyYWls
aW5nRmxvYXRzTGluZUJveC0+bGluZUJvdHRvbSgpKTsKKyAgICAgICAgICAgIHRyYWlsaW5nRmxv
YXRzTGluZUJveC0+c2V0QmxvY2tMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxIZWlnaHQoKSk7CisgICAg
ICAgIH0KKworICAgICAgICBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBt
X2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0
b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOworICAgICAgICBGbG9hdGluZ09iamVj
dFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOworICAgICAgICBpZiAo
bGFzdEZsb2F0KSB7CisgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGxhc3RG
bG9hdEl0ZXJhdG9yID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZChsYXN0RmxvYXQpOworICAgICAg
ICAgICAgQVNTRVJUKGxhc3RGbG9hdEl0ZXJhdG9yICE9IGVuZCk7CisgICAgICAgICAgICArK2xh
c3RGbG9hdEl0ZXJhdG9yOworICAgICAgICAgICAgaXQgPSBsYXN0RmxvYXRJdGVyYXRvcjsKKyAg
ICAgICAgfQorICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgYXBw
ZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RMaW5lKCppdCk7CisgICAgICAgIGxhc3RGbG9hdCA9ICFm
bG9hdGluZ09iamVjdFNldC5pc0VtcHR5KCkgPyBmbG9hdGluZ09iamVjdFNldC5sYXN0KCkgOiAw
OworICAgIH0KKyAgICBzaXplX3QgZmxvYXRDb3VudCA9IGZsb2F0cy5zaXplKCk7CisgICAgLy8g
RmxvYXRzIHRoYXQgZGlkIG5vdCBoYXZlIGxheW91dCBkaWQgbm90IHJlcGFpbnQgd2hlbiB3ZSBs
YWlkIHRoZW0gb3V0LiBUaGV5IHdvdWxkIGhhdmUKKyAgICAvLyBwYWludGVkIGJ5IG5vdyBpZiB0
aGV5IGhhZCBtb3ZlZCwgYnV0IGlmIHRoZXkgc3RheWVkIGF0ICgwLCAwKSwgdGhleSBzdGlsbCBu
ZWVkIHRvIGJlCisgICAgLy8gcGFpbnRlZC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZs
b2F0Q291bnQ7ICsraSkgeworICAgICAgICBpZiAoIWZsb2F0c1tpXS5ldmVySGFkTGF5b3V0KSB7
CisgICAgICAgICAgICBSZW5kZXJCb3gqIGYgPSBmbG9hdHNbaV0ub2JqZWN0OworICAgICAgICAg
ICAgaWYgKCFmLT54KCkgJiYgIWYtPnkoKSAmJiBmLT5jaGVja0ZvclJlcGFpbnREdXJpbmdMYXlv
dXQoKSkKKyAgICAgICAgICAgICAgICBmLT5yZXBhaW50KCk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRD
aGlsZHJlbiwgaW50JiByZXBhaW50TG9naWNhbFRvcCwgaW50JiByZXBhaW50TG9naWNhbEJvdHRv
bSkKK3sKKyAgICBtX292ZXJmbG93LmNsZWFyKCk7CisKKyAgICBzZXRMb2dpY2FsSGVpZ2h0KGJv
cmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpKTsKKworICAgIC8vIEZpZ3VyZSBvdXQgaWYg
d2Ugc2hvdWxkIGNsZWFyIG91dCBvdXIgbGluZSBib3hlcy4KKyAgICAvLyBGSVhNRTogSGFuZGxl
IHJlc2l6ZSBldmVudHVhbGx5IQorICAgIGJvb2wgZnVsbExheW91dCA9ICFmaXJzdExpbmVCb3go
KSB8fCBzZWxmTmVlZHNMYXlvdXQoKSB8fCByZWxheW91dENoaWxkcmVuOworICAgIGlmIChmdWxs
TGF5b3V0KQorICAgICAgICBsaW5lQm94ZXMoKS0+ZGVsZXRlTGluZUJveGVzKHJlbmRlckFyZW5h
KCkpOworCisgICAgLy8gVGV4dCB0cnVuY2F0aW9uIG9ubHkga2lja3MgaW4gaWYgeW91ciBvdmVy
ZmxvdyBpc24ndCB2aXNpYmxlIGFuZCB5b3VyIHRleHQtb3ZlcmZsb3ctbW9kZSBpc24ndAorICAg
IC8vIGNsaXAuCisgICAgLy8gRklYTUU6IENTUzMgc2F5cyB0aGF0IGRlc2NlbmRhbnRzIHRoYXQg
YXJlIGNsaXBwZWQgbXVzdCBhbHNvIGtub3cgaG93IHRvIHRydW5jYXRlLiAgVGhpcyBpcyBpbnNh
bmVseQorICAgIC8vIGRpZmZpY3VsdCB0byBmaWd1cmUgb3V0IChlc3BlY2lhbGx5IGluIHRoZSBt
aWRkbGUgb2YgZG9pbmcgbGF5b3V0KSwgYW5kIGlzIHJlYWxseSBhbiBlc290ZXJpYyBwaWxlIG9m
IG5vbnNlbnNlCisgICAgLy8gYW55d2F5LCBzbyB3ZSB3b24ndCB3b3JyeSBhYm91dCBmb2xsb3dp
bmcgdGhlIGRyYWZ0IGhlcmUuCisgICAgYm9vbCBoYXNUZXh0T3ZlcmZsb3cgPSBzdHlsZSgpLT50
ZXh0T3ZlcmZsb3coKSAmJiBoYXNPdmVyZmxvd0NsaXAoKTsKKworICAgIC8vIFdhbGsgYWxsIHRo
ZSBsaW5lcyBhbmQgZGVsZXRlIG91ciBlbGxpcHNpcyBsaW5lIGJveGVzIGlmIHRoZXkgZXhpc3Qu
CisgICAgaWYgKGhhc1RleHRPdmVyZmxvdykKKyAgICAgICAgIGRlbGV0ZUVsbGlwc2lzTGluZUJv
eGVzKCk7CisKKyAgICBpZiAoZmlyc3RDaGlsZCgpKSB7CisgICAgICAgIC8vIGxheW91dCByZXBs
YWNlZCBlbGVtZW50cworICAgICAgICBib29sIGVuZE9mSW5saW5lID0gZmFsc2U7CisgICAgICAg
IFJlbmRlck9iamVjdCogbyA9IGJpZGlGaXJzdE5vdFNraXBwaW5nSW5saW5lcyh0aGlzKTsKKyAg
ICAgICAgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+IGZsb2F0czsKKyAgICAgICAgYm9vbCBoYXNJbmxp
bmVDaGlsZCA9IGZhbHNlOworICAgICAgICB3aGlsZSAobykgeworICAgICAgICAgICAgaWYgKCFo
YXNJbmxpbmVDaGlsZCAmJiBvLT5pc0lubGluZSgpKQorICAgICAgICAgICAgICAgIGhhc0lubGlu
ZUNoaWxkID0gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKG8tPmlzUmVwbGFjZWQoKSB8fCBvLT5p
c0Zsb2F0aW5nKCkgfHwgby0+aXNQb3NpdGlvbmVkKCkpIHsKKyAgICAgICAgICAgICAgICBSZW5k
ZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KG8pOworCisgICAgICAgICAgICAgICAgaWYgKHJlbGF5
b3V0Q2hpbGRyZW4gfHwgby0+c3R5bGUoKS0+d2lkdGgoKS5pc1BlcmNlbnQoKSB8fCBvLT5zdHls
ZSgpLT5oZWlnaHQoKS5pc1BlcmNlbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgby0+c2V0Q2hp
bGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7CisKKyAgICAgICAgICAgICAgICAvLyBJZiByZWxh
eW91dENoaWxkcmVuIGlzIHNldCBhbmQgd2UgaGF2ZSBwZXJjZW50YWdlIHBhZGRpbmcsIHdlIGFs
c28gbmVlZCB0byBpbnZhbGlkYXRlIHRoZSBjaGlsZCdzIHByZWYgd2lkdGhzLgorICAgICAgICAg
ICAgICAgIGlmIChyZWxheW91dENoaWxkcmVuICYmIChvLT5zdHlsZSgpLT5wYWRkaW5nU3RhcnQo
KS5pc1BlcmNlbnQoKSB8fCBvLT5zdHlsZSgpLT5wYWRkaW5nRW5kKCkuaXNQZXJjZW50KCkpKQor
ICAgICAgICAgICAgICAgICAgICBvLT5zZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkodHJ1
ZSwgZmFsc2UpOworCisgICAgICAgICAgICAgICAgaWYgKG8tPmlzUG9zaXRpb25lZCgpKQorICAg
ICAgICAgICAgICAgICAgICBvLT5jb250YWluaW5nQmxvY2soKS0+aW5zZXJ0UG9zaXRpb25lZE9i
amVjdChib3gpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG8tPmlzRmxvYXRpbmcoKSkKKyAg
ICAgICAgICAgICAgICAgICAgZmxvYXRzLmFwcGVuZChGbG9hdFdpdGhSZWN0KGJveCkpOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGZ1bGxMYXlvdXQgfHwgby0+bmVlZHNMYXlvdXQoKSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlZCBlbGVtZW50cworICAgICAgICAgICAgICAg
ICAgICB0b1JlbmRlckJveChvKS0+ZGlydHlMaW5lQm94ZXMoZnVsbExheW91dCk7CisgICAgICAg
ICAgICAgICAgICAgIG8tPmxheW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIGlmIChvLT5pc1RleHQoKSB8fCAoby0+aXNSZW5kZXJJbmxpbmUoKSAm
JiAhZW5kT2ZJbmxpbmUpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFvLT5pc1RleHQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgdG9SZW5kZXJJbmxpbmUobyktPnVwZGF0ZUFsd2F5c0NyZWF0ZUxp
bmVCb3hlcygpOworICAgICAgICAgICAgICAgIGlmIChmdWxsTGF5b3V0IHx8IG8tPnNlbGZOZWVk
c0xheW91dCgpKQorICAgICAgICAgICAgICAgICAgICBkaXJ0eUxpbmVCb3hlc0ZvclJlbmRlcmVy
KG8sIGZ1bGxMYXlvdXQpOworICAgICAgICAgICAgICAgIG8tPnNldE5lZWRzTGF5b3V0KGZhbHNl
KTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG8gPSBiaWRpTmV4dCh0aGlzLCBvLCAwLCBm
YWxzZSwgJmVuZE9mSW5saW5lKTsKICAgICAgICAgfQorCisgICAgICAgIGxheW91dFJ1bnNBbmRG
bG9hdHMoZnVsbExheW91dCwgaGFzSW5saW5lQ2hpbGQsIGZsb2F0cywgcmVwYWludExvZ2ljYWxU
b3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKICAgICB9CiAKICAgICAvLyBFeHBhbmQgdGhlIGxh
c3QgbGluZSB0byBhY2NvbW1vZGF0ZSBSdWJ5IGFuZCBlbXBoYXNpcyBtYXJrcy4KQEAgLTExNzIs
NyArMTE4MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNoZWNrRmxvYXRzSW5DbGVhbkxpbmUoUm9v
dElubGluZUJveCogbGluZSwgVmVjdG9yPEZsb2F0V2l0aFJlCiAgICAgICAgIH0KICAgICAgICAg
aWYgKGZsb2F0c1tmbG9hdEluZGV4XS5yZWN0LnNpemUoKSAhPSBuZXdTaXplKSB7CiAgICAgICAg
ICAgICBpbnQgZmxvYXRUb3AgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZmxvYXRzW2Zs
b2F0SW5kZXhdLnJlY3QueSgpIDogZmxvYXRzW2Zsb2F0SW5kZXhdLnJlY3QueCgpOwotICAgICAg
ICAgICAgaW50IGZsb2F0SGVpZ2h0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG1heChm
bG9hdHNbZmxvYXRJbmRleF0ucmVjdC5oZWlnaHQoKSwgbmV3U2l6ZS5oZWlnaHQoKSkgCisgICAg
ICAgICAgICBpbnQgZmxvYXRIZWlnaHQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbWF4
KGZsb2F0c1tmbG9hdEluZGV4XS5yZWN0LmhlaWdodCgpLCBuZXdTaXplLmhlaWdodCgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IG1heChmbG9hdHNbZmxvYXRJbmRleF0ucmVjdC53aWR0aCgpLCBuZXdTaXplLndpZHRo
KCkpOwogICAgICAgICAgICAgZmxvYXRIZWlnaHQgPSBtaW4oZmxvYXRIZWlnaHQsIG51bWVyaWNf
bGltaXRzPGludD46Om1heCgpIC0gZmxvYXRUb3ApOwogICAgICAgICAgICAgbGluZS0+bWFya0Rp
cnR5KCk7CkBAIC0xMjAzLDE3ICsxMjExLDE3IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2Nr
OjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVJbmZvJiBsaW5lSW5mbywgYm9vbCYgZnVsCiAg
ICAgICAgICAgICAgICAgaWYgKHBhZ2luYXRpb25EZWx0YSkgewogICAgICAgICAgICAgICAgICAg
ICBpZiAoY29udGFpbnNGbG9hdHMoKSB8fCAhZmxvYXRzLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IERvIGJldHRlciBldmVudHVhbGx5LiAgRm9yIG5vdyBp
ZiB3ZSBldmVyIHNoaWZ0IGJlY2F1c2Ugb2YgcGFnaW5hdGlvbiBhbmQgZmxvYXRzIGFyZSBwcmVz
ZW50IGp1c3QgZ28gdG8gYSBmdWxsIGxheW91dC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1
bGxMYXlvdXQgPSB0cnVlOyAKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxMYXlvdXQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKCF1c2VS
ZXBhaW50Qm91bmRzKQogICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVwYWludEJvdW5kcyA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBy
ZXBhaW50TG9naWNhbFRvcCA9IG1pbihyZXBhaW50TG9naWNhbFRvcCwgY3Vyci0+bG9naWNhbFRv
cFZpc3VhbE92ZXJmbG93KCkgKyBtaW4ocGFnaW5hdGlvbkRlbHRhLCAwKSk7CiAgICAgICAgICAg
ICAgICAgICAgIHJlcGFpbnRMb2dpY2FsQm90dG9tID0gbWF4KHJlcGFpbnRMb2dpY2FsQm90dG9t
LCBjdXJyLT5sb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3coKSArIG1heChwYWdpbmF0aW9uRGVs
dGEsIDApKTsKICAgICAgICAgICAgICAgICAgICAgY3Vyci0+YWRqdXN0QmxvY2tEaXJlY3Rpb25Q
b3NpdGlvbihwYWdpbmF0aW9uRGVsdGEpOwotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBJ
ZiBhIG5ldyBmbG9hdCBoYXMgYmVlbiBpbnNlcnRlZCBiZWZvcmUgdGhpcyBsaW5lIG9yIGJlZm9y
ZSBpdHMgbGFzdCBrbm93biBmbG9hdCxqdXN0IGRvIGEgZnVsbCBsYXlvdXQuCkBAIC0xMjMwLDcg
KzEyMzgsNyBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhcnRQb3Np
dGlvbihMaW5lSW5mbyYgbGluZUluZm8sIGJvb2wmIGZ1bAogICAgICAgICAvLyBOdWtlIGFsbCBv
dXIgbGluZXMuCiAgICAgICAgIGlmIChmaXJzdFJvb3RCb3goKSkgewogICAgICAgICAgICAgUmVu
ZGVyQXJlbmEqIGFyZW5hID0gcmVuZGVyQXJlbmEoKTsKLSAgICAgICAgICAgIGN1cnIgPSBmaXJz
dFJvb3RCb3goKTsgCisgICAgICAgICAgICBjdXJyID0gZmlyc3RSb290Qm94KCk7CiAgICAgICAg
ICAgICB3aGlsZSAoY3VycikgewogICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIG5leHQg
PSBjdXJyLT5uZXh0Um9vdEJveCgpOwogICAgICAgICAgICAgICAgIGN1cnItPmRlbGV0ZUxpbmUo
YXJlbmEpOwpAQCAtMTQzOSw3ICsxNDQ3LDcgQEAgc3RhdGljIGJvb2wgaW5saW5lRmxvd1JlcXVp
cmVzTGluZUJveChSZW5kZXJJbmxpbmUqIGZsb3cpCiB7CiAgICAgLy8gRklYTUU6IFJpZ2h0IG5v
dywgd2Ugb25seSBhbGxvdyBsaW5lIGJveGVzIGZvciBpbmxpbmVzIHRoYXQgYXJlIHRydWx5IGVt
cHR5LgogICAgIC8vIFdlIG5lZWQgdG8gZml4IHRoaXMsIHRob3VnaCwgYmVjYXVzZSBhdCB0aGUg
dmVyeSBsZWFzdCwgaW5saW5lcyBjb250YWluaW5nIG9ubHkKLSAgICAvLyBpZ25vcmFibGUgd2hp
dGVzcGFjZSBzaG91bGQgc2hvdWxkIGFsc28gaGF2ZSBsaW5lIGJveGVzLiAKKyAgICAvLyBpZ25v
cmFibGUgd2hpdGVzcGFjZSBzaG91bGQgc2hvdWxkIGFsc28gaGF2ZSBsaW5lIGJveGVzLgogICAg
IHJldHVybiAhZmxvdy0+Zmlyc3RDaGlsZCgpICYmIGZsb3ctPmhhc0lubGluZURpcmVjdGlvbkJv
cmRlcnNQYWRkaW5nT3JNYXJnaW4oKTsKIH0KIApAQCAtMTQ1NSw3ICsxNDYzLDcgQEAgc3RhdGlj
IGJvb2wgcmVxdWlyZXNMaW5lQm94KGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdCwgY29uc3QgTGlu
ZUluZm8mIGxpbmVJbmZvID0KICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBVQ2hhciBjdXJy
ZW50ID0gaXQuY3VycmVudCgpOwotICAgIHJldHVybiBjdXJyZW50ICE9ICcgJyAmJiBjdXJyZW50
ICE9ICdcdCcgJiYgY3VycmVudCAhPSBzb2Z0SHlwaGVuICYmIChjdXJyZW50ICE9ICdcbicgfHwg
aXQubV9vYmotPnByZXNlcnZlc05ld2xpbmUoKSkgCisgICAgcmV0dXJuIGN1cnJlbnQgIT0gJyAn
ICYmIGN1cnJlbnQgIT0gJ1x0JyAmJiBjdXJyZW50ICE9IHNvZnRIeXBoZW4gJiYgKGN1cnJlbnQg
IT0gJ1xuJyB8fCBpdC5tX29iai0+cHJlc2VydmVzTmV3bGluZSgpKQogICAgICYmICFza2lwTm9u
QnJlYWtpbmdTcGFjZShpdCwgbGluZUluZm8pOwogfQogCkBAIC0xNTAyLDggKzE1MTAsOCBAQCB2
b2lkIFJlbmRlckJsb2NrOjpza2lwTGVhZGluZ1doaXRlc3BhY2UoSW5saW5lQmlkaVJlc29sdmVy
JiByZXNvbHZlciwgY29uc3QgTGluZQogICAgIHJlc29sdmVyLmNvbW1pdEV4cGxpY2l0RW1iZWRk
aW5nKCk7CiB9CiAKLS8vIFRoaXMgaXMgY3VycmVudGx5IGp1c3QgdXNlZCBmb3IgbGlzdCBtYXJr
ZXJzIGFuZCBpbmxpbmUgZmxvd3MgdGhhdCBoYXZlIGxpbmUgYm94ZXMuIE5laXRoZXIgc2hvdWxk
IAotLy8gaGF2ZSBhbiBlZmZlY3Qgb24gd2hpdGVzcGFjZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGxp
bmUuIAorLy8gVGhpcyBpcyBjdXJyZW50bHkganVzdCB1c2VkIGZvciBsaXN0IG1hcmtlcnMgYW5k
IGlubGluZSBmbG93cyB0aGF0IGhhdmUgbGluZSBib3hlcy4gTmVpdGhlciBzaG91bGQKKy8vIGhh
dmUgYW4gZWZmZWN0IG9uIHdoaXRlc3BhY2UgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLgogc3Rh
dGljIGJvb2wgc2hvdWxkU2tpcFdoaXRlc3BhY2VBZnRlclN0YXJ0T2JqZWN0KFJlbmRlckJsb2Nr
KiBibG9jaywgUmVuZGVyT2JqZWN0KiBvLCBMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50
U3RhdGUpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0ID0gYmlkaU5leHQoYmxvY2ssIG8pOwpA
QCAtMTczNSw3ICsxNzQzLDcgQEAgdm9pZCBUcmFpbGluZ09iamVjdHM6OnVwZGF0ZU1pZHBvaW50
c0ZvclRyYWlsaW5nQm94ZXMoTGluZU1pZHBvaW50U3RhdGUmIGxpbmVNaWQKICAgICAgICAgQVNT
RVJUKHRyYWlsaW5nU3BhY2VNaWRwb2ludCA+PSAwKTsKICAgICAgICAgbGluZU1pZHBvaW50U3Rh
dGUubWlkcG9pbnRzW3RyYWlsaW5nU3BhY2VNaWRwb2ludF0ubV9wb3MtLTsKIAotICAgICAgICAv
LyBOb3cgbWFrZSBzdXJlIGV2ZXJ5IHNpbmdsZSB0cmFpbGluZ1Bvc2l0aW9uZWRCb3ggZm9sbG93
aW5nIHRoZSB0cmFpbGluZ1NwYWNlTWlkcG9pbnQgcHJvcGVybHkgc3RvcHMgYW5kIHN0YXJ0cyAK
KyAgICAgICAgLy8gTm93IG1ha2Ugc3VyZSBldmVyeSBzaW5nbGUgdHJhaWxpbmdQb3NpdGlvbmVk
Qm94IGZvbGxvd2luZyB0aGUgdHJhaWxpbmdTcGFjZU1pZHBvaW50IHByb3Blcmx5IHN0b3BzIGFu
ZCBzdGFydHMKICAgICAgICAgLy8gaWdub3Jpbmcgc3BhY2VzLgogICAgICAgICBzaXplX3QgY3Vy
cmVudE1pZHBvaW50ID0gdHJhaWxpbmdTcGFjZU1pZHBvaW50ICsgMTsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2JveGVzLnNpemUoKTsgKytpKSB7CkBAIC0xNzY1LDcgKzE3NzMs
NyBAQCB2b2lkIFRyYWlsaW5nT2JqZWN0czo6dXBkYXRlTWlkcG9pbnRzRm9yVHJhaWxpbmdCb3hl
cyhMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZAogICAgIH0KIH0KIAotSW5saW5lSXRlcmF0b3Ig
UmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2
ZXIsIExpbmVJbmZvJiBsaW5lSW5mbywgTGluZUJyZWFrSXRlcmF0b3JJbmZvJiBsaW5lQnJlYWtJ
dGVyYXRvckluZm8sIAorSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJy
ZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIExpbmVJbmZvJiBsaW5lSW5mbywgTGlu
ZUJyZWFrSXRlcmF0b3JJbmZvJiBsaW5lQnJlYWtJdGVyYXRvckluZm8sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgaHlwaGVuYXRlZCwgRUNsZWFy
KiBjbGVhciwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIFZlY3Rv
cjxSZW5kZXJCb3gqPiYgcG9zaXRpb25lZEJveGVzKQogewogICAgIEFTU0VSVChyZXNvbHZlci5w
b3NpdGlvbigpLnJvb3QoKSA9PSB0aGlzKTsKQEAgLTE3ODQsNyArMTc5Miw3IEBAIElubGluZUl0
ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXIm
IHJlc29sdmVyLCBMaW5lCiAgICAgLy8gb3Igbm90IHdlIGFyZSBjdXJyZW50bHkgaWdub3Jpbmcg
d2hpdGVzcGFjZS4KICAgICBib29sIGlnbm9yaW5nU3BhY2VzID0gZmFsc2U7CiAgICAgSW5saW5l
SXRlcmF0b3IgaWdub3JlU3RhcnQ7Ci0gICAgCisKICAgICAvLyBUaGlzIHZhcmlhYmxlIHRyYWNr
cyB3aGV0aGVyIHRoZSB2ZXJ5IGxhc3QgY2hhcmFjdGVyIHdlIHNhdyB3YXMgYSBzcGFjZS4gIFdl
IHVzZQogICAgIC8vIHRoaXMgdG8gZGV0ZWN0IHdoZW4gd2UgZW5jb3VudGVyIGEgc2Vjb25kIHNw
YWNlIHNvIHdlIGtub3cgd2UgaGF2ZSB0byB0ZXJtaW5hdGUKICAgICAvLyBhIHJ1bi4KQEAgLTE4
MDksMTAgKzE4MTcsMTAgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGlu
ZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIExpbmUKIAogICAgIGJvb2wgYXV0
b1dyYXBXYXNFdmVyVHJ1ZU9uTGluZSA9IGZhbHNlOwogICAgIGJvb2wgZmxvYXRzRml0T25MaW5l
ID0gdHJ1ZTsKLSAgICAKKwogICAgIC8vIEZpcmVmb3ggYW5kIE9wZXJhIHdpbGwgYWxsb3cgYSB0
YWJsZSBjZWxsIHRvIGdyb3cgdG8gZml0IGFuIGltYWdlIGluc2lkZSBpdCB1bmRlcgotICAgIC8v
IHZlcnkgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyAoaW4gb3JkZXIgdG8gbWF0Y2ggY29tbW9uIFdp
bklFIHJlbmRlcmluZ3MpLiAKLSAgICAvLyBOb3Qgc3VwcG9ydGluZyB0aGUgcXVpcmsgaGFzIGNh
dXNlZCB1cyB0byBtaXMtcmVuZGVyIHNvbWUgcmVhbCBzaXRlcy4gKFNlZSBCdWd6aWxsYSAxMDUx
Ny4pIAorICAgIC8vIHZlcnkgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyAoaW4gb3JkZXIgdG8gbWF0
Y2ggY29tbW9uIFdpbklFIHJlbmRlcmluZ3MpLgorICAgIC8vIE5vdCBzdXBwb3J0aW5nIHRoZSBx
dWlyayBoYXMgY2F1c2VkIHVzIHRvIG1pcy1yZW5kZXIgc29tZSByZWFsIHNpdGVzLiAoU2VlIEJ1
Z3ppbGxhIDEwNTE3LikKICAgICBib29sIGFsbG93SW1hZ2VzVG9CcmVhayA9ICFkb2N1bWVudCgp
LT5pblF1aXJrc01vZGUoKSB8fCAhaXNUYWJsZUNlbGwoKSB8fCAhc3R5bGUoKS0+bG9naWNhbFdp
ZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKTsKIAogICAgIEVXaGl0ZVNwYWNlIGN1cnJXUyA9IHN0
eWxlKCktPndoaXRlU3BhY2UoKTsKQEAgLTE4MjIsNyArMTgzMCw3IEBAIElubGluZUl0ZXJhdG9y
IFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29s
dmVyLCBMaW5lCiAKICAgICAgICAgY3VycldTID0gby0+aXNSZXBsYWNlZCgpID8gby0+cGFyZW50
KCktPnN0eWxlKCktPndoaXRlU3BhY2UoKSA6IG8tPnN0eWxlKCktPndoaXRlU3BhY2UoKTsKICAg
ICAgICAgbGFzdFdTID0gbGFzdC0+aXNSZXBsYWNlZCgpID8gbGFzdC0+cGFyZW50KCktPnN0eWxl
KCktPndoaXRlU3BhY2UoKSA6IGxhc3QtPnN0eWxlKCktPndoaXRlU3BhY2UoKTsKLSAgICAgICAg
CisKICAgICAgICAgYm9vbCBhdXRvV3JhcCA9IFJlbmRlclN0eWxlOjphdXRvV3JhcChjdXJyV1Mp
OwogICAgICAgICBhdXRvV3JhcFdhc0V2ZXJUcnVlT25MaW5lID0gYXV0b1dyYXBXYXNFdmVyVHJ1
ZU9uTGluZSB8fCBhdXRvV3JhcDsKIApAQCAtMTgzMyw3ICsxODQxLDcgQEAgSW5saW5lSXRlcmF0
b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVz
b2x2ZXIsIExpbmUKICNlbmRpZgogCiAgICAgICAgIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlID0g
UmVuZGVyU3R5bGU6OmNvbGxhcHNlV2hpdGVTcGFjZShjdXJyV1MpOwotICAgICAgICAgICAgCisK
ICAgICAgICAgaWYgKG8tPmlzQlIoKSkgewogICAgICAgICAgICAgaWYgKHdpZHRoLmZpdHNPbkxp
bmUoKSkgewogICAgICAgICAgICAgICAgIGxCcmVhay5tb3ZlVG9TdGFydE9mKG8pOwpAQCAtMTg4
Myw3ICsxODkxLDcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJy
ZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIExpbmUKICAgICAgICAgICAgICAgICAg
ICAgLy8gYW5kIGRldGVybWluZSBvdXIgc3RhdGljIHkgcG9zaXRpb24gbm93LgogICAgICAgICAg
ICAgICAgICAgICBib3gtPmxheWVyKCktPnNldFN0YXRpY0Jsb2NrUG9zaXRpb24obG9naWNhbEhl
aWdodCgpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAg
ICAgICAgICAvLyBJZiB3ZSdyZSBpZ25vcmluZyBzcGFjZXMsIHdlIGhhdmUgdG8gc3RvcCBhbmQg
aW5jbHVkZSB0aGlzIG9iamVjdCBhbmQKICAgICAgICAgICAgICAgICAvLyB0aGVuIHN0YXJ0IGln
bm9yaW5nIHNwYWNlcyBhZ2Fpbi4KICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVUeXBlIHx8
IG8tPmNvbnRhaW5lcigpLT5pc1JlbmRlcklubGluZSgpKSB7CkBAIC0xOTAwLDEyICsxOTA4LDEy
IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVCcmVhayhJbmxpbmVC
aWRpUmVzb2x2ZXImIHJlc29sdmVyLCBMaW5lCiAgICAgICAgIH0gZWxzZSBpZiAoby0+aXNSZW5k
ZXJJbmxpbmUoKSkgewogICAgICAgICAgICAgLy8gUmlnaHQgbm93LCB3ZSBzaG91bGQgb25seSBl
bmNvdW50ZXIgZW1wdHkgaW5saW5lcyBoZXJlLgogICAgICAgICAgICAgQVNTRVJUKCFvLT5maXJz
dENoaWxkKCkpOwotICAgIAorCiAgICAgICAgICAgICBSZW5kZXJJbmxpbmUqIGZsb3dCb3ggPSB0
b1JlbmRlcklubGluZShvKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTm93IHRoYXQg
c29tZSBpbmxpbmUgZmxvd3MgaGF2ZSBsaW5lIGJveGVzLCBpZiB3ZSBhcmUgYWxyZWFkeSBpZ25v
cmluZyBzcGFjZXMsIHdlIG5lZWQgCi0gICAgICAgICAgICAvLyB0byBtYWtlIHN1cmUgdGhhdCB3
ZSBzdG9wIHRvIGluY2x1ZGUgdGhpcyBvYmplY3QgYW5kIHRoZW4gc3RhcnQgaWdub3Jpbmcgc3Bh
Y2VzIGFnYWluLiAKLSAgICAgICAgICAgIC8vIElmIHRoaXMgb2JqZWN0IGlzIGF0IHRoZSBzdGFy
dCBvZiB0aGUgbGluZSwgd2UgbmVlZCB0byBiZWhhdmUgbGlrZSBsaXN0IG1hcmtlcnMgYW5kIAor
CisgICAgICAgICAgICAvLyBOb3cgdGhhdCBzb21lIGlubGluZSBmbG93cyBoYXZlIGxpbmUgYm94
ZXMsIGlmIHdlIGFyZSBhbHJlYWR5IGlnbm9yaW5nIHNwYWNlcywgd2UgbmVlZAorICAgICAgICAg
ICAgLy8gdG8gbWFrZSBzdXJlIHRoYXQgd2Ugc3RvcCB0byBpbmNsdWRlIHRoaXMgb2JqZWN0IGFu
ZCB0aGVuIHN0YXJ0IGlnbm9yaW5nIHNwYWNlcyBhZ2Fpbi4KKyAgICAgICAgICAgIC8vIElmIHRo
aXMgb2JqZWN0IGlzIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSwgd2UgbmVlZCB0byBiZWhhdmUg
bGlrZSBsaXN0IG1hcmtlcnMgYW5kCiAgICAgICAgICAgICAvLyBzdGFydCBpZ25vcmluZyBzcGFj
ZXMuCiAgICAgICAgICAgICBpZiAoaW5saW5lRmxvd1JlcXVpcmVzTGluZUJveChmbG93Qm94KSkg
ewogICAgICAgICAgICAgICAgIGxpbmVJbmZvLnNldEVtcHR5KGZhbHNlKTsKQEAgLTE5MTUsNyAr
MTkyMyw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVCcmVhayhJ
bmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBMaW5lCiAgICAgICAgICAgICAgICAgICAgIGFk
ZE1pZHBvaW50KGxpbmVNaWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRvcigwLCBvLCAwKSk7IC8v
IFN0YXJ0IGlnbm9yaW5nIGFnYWluLgogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3R5bGUo
KS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgcmVzb2x2ZXIucG9zaXRpb24oKS5tX29iaiA9PSBv
CiAgICAgICAgICAgICAgICAgICAgICYmIHNob3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJTdGFydE9i
amVjdCh0aGlzLCBvLCBsaW5lTWlkcG9pbnRTdGF0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gTGlrZSB3aXRoIGxpc3QgbWFya2Vycywgd2Ugc3RhcnQgaWdub3Jpbmcgc3BhY2VzIHRvIG1h
a2Ugc3VyZSB0aGF0IGFueSAKKyAgICAgICAgICAgICAgICAgICAgLy8gTGlrZSB3aXRoIGxpc3Qg
bWFya2Vycywgd2Ugc3RhcnQgaWdub3Jpbmcgc3BhY2VzIHRvIG1ha2Ugc3VyZSB0aGF0IGFueQog
ICAgICAgICAgICAgICAgICAgICAvLyBhZGRpdGlvbmFsIHNwYWNlcyB3ZSBzZWUgd2lsbCBiZSBk
aXNjYXJkZWQuCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYXJhY3RlcklzV1MgPSB0cnVlOwpA
QCAtMTk0Nyw3ICsxOTU1LDcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0
TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIExpbmUKICAgICAgICAgICAg
IGludCByZXBsYWNlZExvZ2ljYWxXaWR0aCA9IGxvZ2ljYWxXaWR0aEZvckNoaWxkKHJlcGxhY2Vk
Qm94KSArIG1hcmdpblN0YXJ0Rm9yQ2hpbGQocmVwbGFjZWRCb3gpICsgbWFyZ2luRW5kRm9yQ2hp
bGQocmVwbGFjZWRCb3gpICsgaW5saW5lTG9naWNhbFdpZHRoKG8pOwogICAgICAgICAgICAgaWYg
KG8tPmlzTGlzdE1hcmtlcigpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlKCktPmNvbGxh
cHNlV2hpdGVTcGFjZSgpICYmIHNob3VsZFNraXBXaGl0ZXNwYWNlQWZ0ZXJTdGFydE9iamVjdCh0
aGlzLCBvLCBsaW5lTWlkcG9pbnRTdGF0ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTGlr
ZSB3aXRoIGlubGluZSBmbG93cywgd2Ugc3RhcnQgaWdub3Jpbmcgc3BhY2VzIHRvIG1ha2Ugc3Vy
ZSB0aGF0IGFueSAKKyAgICAgICAgICAgICAgICAgICAgLy8gTGlrZSB3aXRoIGlubGluZSBmbG93
cywgd2Ugc3RhcnQgaWdub3Jpbmcgc3BhY2VzIHRvIG1ha2Ugc3VyZSB0aGF0IGFueQogICAgICAg
ICAgICAgICAgICAgICAvLyBhZGRpdGlvbmFsIHNwYWNlcyB3ZSBzZWUgd2lsbCBiZSBkaXNjYXJk
ZWQuCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYXJhY3RlcklzV1MgPSB0cnVlOwpAQCAtMjAy
MSw3ICsyMDI5LDcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJy
ZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIExpbmUKICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICBib29sIGFwcGx5V29yZFNwYWNpbmcgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXJJc1dTID0gY3Vy
cmVudENoYXJhY3RlcklzU3BhY2UgfHwgKGJyZWFrTkJTUCAmJiBjID09IG5vQnJlYWtTcGFjZSk7
CiAKICAgICAgICAgICAgICAgICBpZiAoKGJyZWFrQWxsIHx8IGJyZWFrV29yZHMpICYmICFtaWRX
b3JkQnJlYWspIHsKQEAgLTIwNjYsNyArMjA3NCw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJs
b2NrOjpmaW5kTmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBMaW5l
CiAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aC5hZGRVbmNvbW1pdHRlZFdpZHRoKGlubGlu
ZUxvZ2ljYWxXaWR0aChvLCB0cnVlLCBmYWxzZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YXBwbGllZFN0YXJ0V2lkdGggPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGFwcGx5V29yZFNwYWNpbmcgPSAg
d29yZFNwYWNpbmcgJiYgY3VycmVudENoYXJhY3RlcklzU3BhY2UgJiYgIXByZXZpb3VzQ2hhcmFj
dGVySXNTcGFjZTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoIXdpZHRoLmNvbW1pdHRlZFdp
ZHRoKCkgJiYgYXV0b1dyYXAgJiYgIXdpZHRoLmZpdHNPbkxpbmUoKSkKQEAgLTIwNzksOSArMjA4
Nyw5IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVCcmVhayhJbmxp
bmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBMaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAod2lkdGguZml0c09uTGluZSgpICYmIGN1cnJlbnRDaGFyYWN0ZXJJc1dTICYmIG8tPnN0eWxl
KCktPmJyZWFrT25seUFmdGVyV2hpdGVTcGFjZSgpICYmICFtaWRXb3JkQnJlYWspIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBjaGFyV2lkdGggPSB0ZXh0V2lkdGgodCwgcG9z
LCAxLCBmLCB3aWR0aC5jdXJyZW50V2lkdGgoKSwgaXNGaXhlZFBpdGNoLCBjb2xsYXBzZVdoaXRl
U3BhY2UpICsgKGFwcGx5V29yZFNwYWNpbmcgPyB3b3JkU3BhY2luZyA6IDApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIGxpbmUgaXMgdG9vIGJpZyBldmVuIHdpdGhv
dXQgdGhlIGV4dHJhIHNwYWNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgdGhl
IGVuZCBvZiB0aGUgbGluZS4gSWYgaXQgaXMgbm90LCBkbyBub3RoaW5nLiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbGluZSBuZWVkcyB0aGUgZXh0cmEgd2hpdGVzcGFj
ZSB0byBiZSB0b28gbG9uZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiBt
b3ZlIHRoZSBsaW5lIGJyZWFrIHRvIHRoZSBzcGFjZSBhbmQgc2tpcCBhbGwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4gSWYgaXQgaXMgbm90
LCBkbyBub3RoaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBsaW5l
IG5lZWRzIHRoZSBleHRyYSB3aGl0ZXNwYWNlIHRvIGJlIHRvbyBsb25nLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHRoZW4gbW92ZSB0aGUgbGluZSBicmVhayB0byB0aGUgc3BhY2Ug
YW5kIHNraXAgYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkaXRpb25hbCB3
aGl0ZXNwYWNlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd2lkdGguZml0c09u
TGluZShjaGFyV2lkdGgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVX
YXNUb29XaWRlID0gdHJ1ZTsKQEAgLTIxMzgsNyArMjE0Niw3IEBAIElubGluZUl0ZXJhdG9yIFJl
bmRlckJsb2NrOjpmaW5kTmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVy
LCBMaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvcHBvcnR1bml0eSB0byBicmVhayBh
ZnRlciBhIHdvcmQuCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1dvcmRzID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAg
ICAgICAgICAgICAgaWYgKG1pZFdvcmRCcmVhaykgewogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gUmVtZW1iZXIgdGhpcyBhcyBhIGJyZWFrYWJsZSBwb3NpdGlvbiBpbiBjYXNlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBhZGRpbmcgdGhlIGVuZCB3aWR0aCBmb3JjZXMgYSBicmVhay4K
QEAgLTIxNTAsMTcgKzIxNTgsMTcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmRO
ZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIExpbmUKICAgICAgICAg
ICAgICAgICAgICAgICAgIGxhc3RTcGFjZVdvcmRTcGFjaW5nID0gYXBwbHlXb3JkU3BhY2luZyA/
IHdvcmRTcGFjaW5nIDogMDsKICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTcGFjZSA9IHBv
czsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAg
ICAgICAgICAgICAgICBpZiAoIWlnbm9yaW5nU3BhY2VzICYmIG8tPnN0eWxlKCktPmNvbGxhcHNl
V2hpdGVTcGFjZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBlbmNvdW50
ZXIgYSBuZXdsaW5lLCBvciBpZiB3ZSBlbmNvdW50ZXIgYQogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gc2Vjb25kIHNwYWNlLCB3ZSBuZWVkIHRvIGdvIGFoZWFkIGFuZCBicmVhayB1cCB0aGlz
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBydW4gYW5kIGVudGVyIGEgbW9kZSB3aGVyZSB3
ZSBzdGFydCBjb2xsYXBzaW5nIHNwYWNlcy4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChj
dXJyZW50Q2hhcmFjdGVySXNTcGFjZSAmJiBwcmV2aW91c0NoYXJhY3RlcklzU3BhY2UpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmluZ1NwYWNlcyA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBqdXN0IGVudGVyZWQgYSBtb2RlIHdoZXJlIHdlIGFyZSBpZ25vcmluZwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHNwYWNlcy4gQ3JlYXRlIGEgbWlkcG9pbnQgdG8gdGVybWluYXRl
IHRoZSBydW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWZvcmUgdGhlIHNlY29u
ZCBzcGFjZS4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIHRoZSBzZWNv
bmQgc3BhY2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9pbnQobGluZU1p
ZHBvaW50U3RhdGUsIGlnbm9yZVN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgfQpAQCAtMjE5Miw3ICsyMjAwLDcgQEAgSW5saW5lSXRlcmF0b3Ig
UmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2
ZXIsIExpbmUKICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG9XcmFwICYmIG8tPnN0eWxlKCkt
PmJyZWFrT25seUFmdGVyV2hpdGVTcGFjZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgbEJy
ZWFrLm1vdmVUbyhvLCBwb3MsIG5leHRCcmVha2FibGUpOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGlmIChjb2xsYXBzZVdoaXRlU3BhY2Ug
JiYgY3VycmVudENoYXJhY3RlcklzU3BhY2UgJiYgIWlnbm9yaW5nU3BhY2VzKQogICAgICAgICAg
ICAgICAgICAgICB0cmFpbGluZ09iamVjdHMuc2V0VHJhaWxpbmdXaGl0ZXNwYWNlKHN0YXRpY19j
YXN0PFJlbmRlclRleHQqPihvKSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIW8tPnN0eWxl
KCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpIHx8ICFjdXJyZW50Q2hhcmFjdGVySXNTcGFjZSkKQEAg
LTIyODQsMTEgKzIyOTIsMTEgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0
TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIExpbmUKICAgICAgICAgLy8g
d2l0aCBhZGphY2VudCBpbmxpbmUgbm9ybWFsL25vd3JhcCBzcGFucy4KICAgICAgICAgaWYgKCFj
b2xsYXBzZVdoaXRlU3BhY2UpCiAgICAgICAgICAgICBjdXJyZW50Q2hhcmFjdGVySXNTcGFjZSA9
IGZhbHNlOwotICAgICAgICAKKwogICAgICAgICBwb3MgPSAwOwogICAgICAgICBhdFN0YXJ0ID0g
ZmFsc2U7CiAgICAgfQotICAgIAorCiAgICAgaWYgKHdpZHRoLmZpdHNPbkxpbmUoKSB8fCBsYXN0
V1MgPT0gTk9XUkFQKQogICAgICAgICBsQnJlYWsuY2xlYXIoKTsKIAo=
</data>
<flag name="commit-queue"
          id="85075"
          type_id="3"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>